chython 3.4__tar.gz → 3.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {chython-3.4/chython.egg-info → chython-3.5}/PKG-INFO +1 -1
- {chython-3.4 → chython-3.5}/chython/__init__.py +21 -4
- {chython-3.4 → chython-3.5}/chython/chemistry/__init__.py +6 -3
- {chython-3.4 → chython-3.5}/chython/chemistry/_canonicalize.py +47 -26
- {chython-3.4 → chython-3.5}/chython/chemistry/_hydrogens.py +31 -11
- {chython-3.4 → chython-3.5}/chython/chemistry/_isomers.py +217 -39
- {chython-3.4 → chython-3.5}/chython/chemistry/_kekule_form.py +92 -22
- {chython-3.4 → chython-3.5}/chython/chemistry/_protomers.py +23 -6
- {chython-3.4 → chython-3.5}/chython/chemistry/_salts.py +2 -2
- {chython-3.4 → chython-3.5}/chython/chemistry/_standardize.py +18 -5
- chython-3.5/chython/chemistry/_stereo_audit.py +762 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/_tables.py +33 -4
- {chython-3.4 → chython-3.5}/chython/chemistry/tables/salts.tsv +1 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/tables/standardize_groups.tsv +8 -1
- chython-3.5/chython/chemistry/tables/stereo_audit.tsv +21 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/gen_standardize_rules.py +11 -4
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_canonicalize.py +74 -3
- chython-3.5/chython/chemistry/test/test_canonicalize_atom_order.py +268 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_isomers.py +29 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_salts.py +1 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_standardize_groups_port.py +1 -1
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_standardize_rules_merges.py +3 -3
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_standardize_rules_tsv.py +33 -11
- chython-3.5/chython/chemistry/test/test_stereo_audit.py +626 -0
- {chython-3.4 → chython-3.5}/chython/core/__init__.py +5 -6
- {chython-3.4 → chython-3.5}/chython/core/_canonical.pxi +356 -119
- {chython-3.4 → chython-3.5}/chython/core/_cip.pxi +219 -60
- {chython-3.4 → chython-3.5}/chython/core/_core.pyx +5 -1
- {chython-3.4 → chython-3.5}/chython/core/_features.pxi +6 -5
- {chython-3.4 → chython-3.5}/chython/core/_hydrogens.pxi +7 -5
- {chython-3.4 → chython-3.5}/chython/core/_inchi.pxi +100 -1
- {chython-3.4 → chython-3.5}/chython/core/_kekule.pxi +161 -4
- chython-3.5/chython/core/_layout_score.pxi +340 -0
- {chython-3.4 → chython-3.5}/chython/core/_molecule_arena.pxi +70 -9
- {chython-3.4 → chython-3.5}/chython/core/_molecule_container.pxi +773 -122
- {chython-3.4 → chython-3.5}/chython/core/_morgan.pxi +86 -7
- {chython-3.4 → chython-3.5}/chython/core/_pach3.pxi +27 -14
- {chython-3.4 → chython-3.5}/chython/core/_query_container.pxi +36 -0
- {chython-3.4 → chython-3.5}/chython/core/_reaction_passes.py +10 -3
- {chython-3.4 → chython-3.5}/chython/core/_rings.pxi +143 -18
- {chython-3.4 → chython-3.5}/chython/core/_smiles_read.pxi +579 -53
- {chython-3.4 → chython-3.5}/chython/core/_smiles_write.pxi +585 -83
- {chython-3.4 → chython-3.5}/chython/core/_smirks_patch.pxi +8 -2
- {chython-3.4 → chython-3.5}/chython/core/_smirks_read.pxi +88 -0
- {chython-3.4 → chython-3.5}/chython/core/_stereo.pxi +4201 -410
- chython-3.5/chython/core/_stereo_meaning.pxi +820 -0
- {chython-3.4 → chython-3.5}/chython/core/_thiele.pxi +180 -14
- chython-3.5/chython/core/chains.py +280 -0
- chython-3.5/chython/core/monomers.py +421 -0
- {chython-3.4 → chython-3.5}/chython/core/reaction.py +19 -6
- {chython-3.4 → chython-3.5}/chython/core/test/pach3_corpus.py +5 -5
- chython-3.5/chython/core/test/pach_v3_corpus.bin.gz +0 -0
- chython-3.5/chython/core/test/pach_v4_corpus.bin.gz +0 -0
- chython-3.5/chython/core/test/peptides.py +117 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_arena_v3_compat.py +21 -26
- {chython-3.4 → chython-3.5}/chython/core/test/test_aromatic_storage.py +9 -6
- chython-3.5/chython/core/test/test_atropisomer_axis.py +100 -0
- chython-3.5/chython/core/test/test_brace_bond_fields.py +103 -0
- chython-3.5/chython/core/test/test_bridgehead_realisability.py +534 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_canonical.py +50 -0
- chython-3.5/chython/core/test/test_canonical_groups.py +243 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_canonical_mirror.py +5 -3
- chython-3.5/chython/core/test/test_canonical_stereogenic.py +93 -0
- chython-3.5/chython/core/test/test_canonicalize_stereo_groups.py +251 -0
- chython-3.5/chython/core/test/test_chains.py +104 -0
- chython-3.5/chython/core/test/test_cip_budget.py +97 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_cip_cases.py +10 -1
- {chython-3.4 → chython-3.5}/chython/core/test/test_cip_storage.py +9 -8
- {chython-3.4 → chython-3.5}/chython/core/test/test_container_log.py +6 -3
- chython-3.5/chython/core/test/test_cx_wedges.py +160 -0
- chython-3.5/chython/core/test/test_dead_stereo_groups.py +319 -0
- chython-3.5/chython/core/test/test_helical_units.py +189 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_hydrogens.py +16 -0
- chython-3.5/chython/core/test/test_identity_memo.py +70 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_kekule.py +25 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_log.py +2 -2
- {chython-3.4 → chython-3.5}/chython/core/test/test_magic.py +9 -8
- chython-3.5/chython/core/test/test_monomers.py +139 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_pach3.py +22 -6
- chython-3.5/chython/core/test/test_planar_units.py +307 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_reaction_smiles.py +3 -3
- {chython-3.4 → chython-3.5}/chython/core/test/test_rings.py +128 -1
- {chython-3.4 → chython-3.5}/chython/core/test/test_smiles_read.py +106 -58
- {chython-3.4 → chython-3.5}/chython/core/test/test_smiles_roundtrip.py +14 -10
- chython-3.5/chython/core/test/test_smiles_stereo_marks.py +90 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_smiles_write.py +16 -2
- {chython-3.4 → chython-3.5}/chython/core/test/test_smiles_write_cis_trans.py +79 -30
- {chython-3.4 → chython-3.5}/chython/core/test/test_smiles_write_detached.py +3 -3
- {chython-3.4 → chython-3.5}/chython/core/test/test_smiles_write_differential.py +95 -30
- {chython-3.4 → chython-3.5}/chython/core/test/test_smiles_write_stereo.py +37 -30
- {chython-3.4 → chython-3.5}/chython/core/test/test_smirks_patch.py +23 -3
- {chython-3.4 → chython-3.5}/chython/core/test/test_smirks_stereo.py +20 -19
- {chython-3.4 → chython-3.5}/chython/core/test/test_stereo_acceptance.py +132 -2
- {chython-3.4 → chython-3.5}/chython/core/test/test_stereo_anchor_identity.py +2 -2
- chython-3.5/chython/core/test/test_stereo_group_meaning.py +382 -0
- chython-3.5/chython/core/test/test_stereo_group_signs.py +240 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_stereo_group_storage.py +2 -2
- chython-3.5/chython/core/test/test_stereo_liveness.py +70 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_stereo_owners.py +2 -2
- {chython-3.4 → chython-3.5}/chython/core/test/test_stereo_parity.py +6 -6
- {chython-3.4 → chython-3.5}/chython/core/test/test_stereo_perception.py +10 -16
- {chython-3.4 → chython-3.5}/chython/core/test/test_stereo_query.py +154 -76
- {chython-3.4 → chython-3.5}/chython/core/test/test_stereo_units.py +27 -12
- {chython-3.4 → chython-3.5}/chython/core/test/test_stereo_v2_differential.py +11 -2
- chython-3.5/chython/core/test/test_stereogenicity_symmetry.py +169 -0
- chython-3.5/chython/core/test/test_thiele_atom_order.py +89 -0
- {chython-3.4 → chython-3.5}/chython/core/wedge.py +464 -32
- {chython-3.4 → chython-3.5}/chython/depict/__init__.py +6 -4
- {chython-3.4 → chython-3.5}/chython/depict/_config.py +31 -4
- {chython-3.4 → chython-3.5}/chython/depict/figure.py +55 -3
- {chython-3.4 → chython-3.5}/chython/depict/label.py +43 -17
- {chython-3.4 → chython-3.5}/chython/depict/layout/__init__.py +2 -2
- chython-3.5/chython/depict/layout/approved.py +181 -0
- chython-3.5/chython/depict/layout/cascade.py +979 -0
- chython-3.5/chython/depict/layout/edits.py +524 -0
- chython-3.5/chython/depict/layout/env.py +257 -0
- chython-3.5/chython/depict/layout/features.py +224 -0
- chython-3.5/chython/depict/layout/greedy.py +56 -0
- chython-3.5/chython/depict/layout/lattice.py +228 -0
- chython-3.5/chython/depict/layout/learn/__init__.py +25 -0
- chython-3.5/chython/depict/layout/learn/alphazero.py +564 -0
- chython-3.5/chython/depict/layout/learn/demos.py +263 -0
- chython-3.5/chython/depict/layout/learn/evaluate.py +94 -0
- chython-3.5/chython/depict/layout/learn/judge.py +145 -0
- chython-3.5/chython/depict/layout/learn/mcts.py +190 -0
- chython-3.5/chython/depict/layout/learn/policy.py +129 -0
- chython-3.5/chython/depict/layout/learn/replay.py +114 -0
- chython-3.5/chython/depict/layout/learn/sweep.py +81 -0
- chython-3.5/chython/depict/layout/learn/targets.py +79 -0
- chython-3.5/chython/depict/layout/learn/tensors.py +76 -0
- chython-3.5/chython/depict/layout/learn/train.py +264 -0
- {chython-3.4 → chython-3.5}/chython/depict/layout/molecule.py +248 -44
- chython-3.5/chython/depict/layout/peptide.py +1231 -0
- chython-3.5/chython/depict/layout/pose.py +240 -0
- chython-3.5/chython/depict/layout/primitive.py +564 -0
- chython-3.5/chython/depict/layout/quality.py +303 -0
- {chython-3.4 → chython-3.5}/chython/depict/layout/reaction.py +7 -6
- chython-3.5/chython/depict/layout/relax.py +1029 -0
- chython-3.5/chython/depict/layout/review.py +593 -0
- chython-3.5/chython/depict/layout/rings.py +1498 -0
- chython-3.5/chython/depict/layout/score.py +303 -0
- chython-3.5/chython/depict/layout/scorecard.py +340 -0
- chython-3.5/chython/depict/layout/search.py +364 -0
- chython-3.5/chython/depict/layout/shapes.py +332 -0
- chython-3.5/chython/depict/layout/templates.py +220 -0
- chython-3.5/chython/depict/layout/tree.py +431 -0
- chython-3.5/chython/depict/peptide.py +383 -0
- chython-3.5/chython/depict/test/learn/test_alphazero.py +66 -0
- chython-3.5/chython/depict/test/learn/test_demos.py +106 -0
- chython-3.5/chython/depict/test/learn/test_judge.py +56 -0
- chython-3.5/chython/depict/test/learn/test_mcts.py +79 -0
- chython-3.5/chython/depict/test/learn/test_policy.py +91 -0
- chython-3.5/chython/depict/test/learn/test_replay.py +78 -0
- chython-3.5/chython/depict/test/learn/test_targets.py +60 -0
- chython-3.5/chython/depict/test/learn/test_train.py +146 -0
- {chython-3.4 → chython-3.5}/chython/depict/test/test_clean2d.py +70 -2
- {chython-3.4 → chython-3.5}/chython/depict/test/test_label.py +18 -0
- chython-3.5/chython/depict/test/test_layout_cascade.py +617 -0
- chython-3.5/chython/depict/test/test_layout_controller.py +543 -0
- chython-3.5/chython/depict/test/test_layout_conventions.py +1338 -0
- chython-3.5/chython/depict/test/test_layout_engine.py +196 -0
- chython-3.5/chython/depict/test/test_layout_env.py +411 -0
- chython-3.5/chython/depict/test/test_layout_primitive.py +295 -0
- chython-3.5/chython/depict/test/test_layout_relax.py +85 -0
- chython-3.5/chython/depict/test/test_peptide_draw.py +387 -0
- chython-3.5/chython/depict/test/test_peptide_layout.py +502 -0
- chython-3.5/chython/depict/test/test_quality.py +264 -0
- chython-3.5/chython/depict/test/test_review.py +201 -0
- chython-3.5/chython/depict/test/test_scorecard.py +175 -0
- {chython-3.4 → chython-3.5}/chython/depict/test/test_wedge_draw.py +36 -0
- {chython-3.4 → chython-3.5}/chython/formats/ctfile/_ctab.py +36 -1
- {chython-3.4 → chython-3.5}/chython/formats/ctfile/_facade.py +1 -2
- {chython-3.4 → chython-3.5}/chython/formats/ctfile/_sgroup.py +34 -2
- {chython-3.4 → chython-3.5}/chython/formats/ctfile/_v2000.py +15 -2
- {chython-3.4 → chython-3.5}/chython/formats/ctfile/_v3000.py +26 -9
- {chython-3.4 → chython-3.5}/chython/formats/ctfile/test/test_data_labels.py +57 -31
- {chython-3.4 → chython-3.5}/chython/formats/ctfile/test/test_facade.py +13 -1
- {chython-3.4 → chython-3.5}/chython/formats/ctfile/test/test_fidelity.py +32 -5
- chython-3.5/chython/formats/ctfile/test/test_stereo_drawings.py +430 -0
- {chython-3.4 → chython-3.5}/chython/formats/ctfile/test/test_stereo_label.py +2 -2
- {chython-3.4 → chython-3.5}/chython/formats/ctfile/test/test_v2000.py +12 -8
- {chython-3.4 → chython-3.5}/chython/formats/ctfile/test/test_v3000.py +105 -6
- {chython-3.4 → chython-3.5}/chython/formats/ctfile/test/test_wedge.py +148 -39
- {chython-3.4 → chython-3.5}/chython/formats/xml/_mrv.py +5 -6
- chython-3.5/chython/formats/xml/test/test_dead_stereo_groups.py +83 -0
- {chython-3.4 → chython-3.5}/chython/formats/xml/test/test_equivalence.py +2 -1
- {chython-3.4 → chython-3.5}/chython/interop/_stereo.py +2 -1
- {chython-3.4 → chython-3.5}/chython/interop/test/test_rdkit.py +30 -4
- {chython-3.4 → chython-3.5}/chython/interop/test/test_stereo.py +4 -3
- {chython-3.4 → chython-3.5}/chython/reactions/__init__.py +8 -8
- {chython-3.4 → chython-3.5}/chython/reactions/_enumerate.py +258 -42
- {chython-3.4 → chython-3.5}/chython/reactions/_reconstruct.py +476 -108
- {chython-3.4 → chython-3.5}/chython/reactions/_tables.py +253 -15
- chython-3.5/chython/reactions/tables/functional.tsv +524 -0
- chython-3.5/chython/reactions/tables/protective.tsv +128 -0
- chython-3.5/chython/reactions/tables/reactions.tsv +1821 -0
- chython-3.5/chython/reactions/test/__init__.py +18 -0
- chython-3.5/chython/reactions/test/_frozen_ids.py +2260 -0
- {chython-3.4 → chython-3.5}/chython/reactions/test/test_enumerate.py +4 -5
- {chython-3.4 → chython-3.5}/chython/reactions/test/test_functional.py +10 -0
- {chython-3.4 → chython-3.5}/chython/reactions/test/test_probes.py +4 -1
- {chython-3.4 → chython-3.5}/chython/reactions/test/test_protective.py +68 -57
- {chython-3.4 → chython-3.5}/chython/reactions/test/test_reconstruct.py +339 -78
- chython-3.5/chython/reactions/test/test_reconstruct_labels.py +158 -0
- chython-3.5/chython/reactions/test/test_retro.py +172 -0
- chython-3.5/chython/reactions/test/test_retro_probes.py +61 -0
- chython-3.5/chython/reactions/test/test_retro_tables.py +142 -0
- {chython-3.4 → chython-3.5}/chython/reactions/test/test_tables.py +51 -5
- {chython-3.4 → chython-3.5}/chython/test/test_container_methods.py +22 -2
- {chython-3.4 → chython-3.5}/chython/test/test_facade_names.py +3 -3
- {chython-3.4 → chython-3.5}/chython/test/test_performance.py +3 -4
- {chython-3.4 → chython-3.5}/chython/test/test_stereo_bluebook.py +38 -53
- {chython-3.4 → chython-3.5/chython.egg-info}/PKG-INFO +1 -1
- {chython-3.4 → chython-3.5}/chython.egg-info/SOURCES.txt +89 -2
- {chython-3.4 → chython-3.5}/pyproject.toml +2 -2
- chython-3.4/chython/core/test/pach_v3_corpus.bin.gz +0 -0
- chython-3.4/chython/core/test/pach_v4_corpus.bin.gz +0 -0
- chython-3.4/chython/reactions/tables/functional.tsv +0 -335
- chython-3.4/chython/reactions/tables/protective.tsv +0 -141
- chython-3.4/chython/reactions/tables/reactions.tsv +0 -857
- chython-3.4/chython/reactions/test/_frozen_ids.py +0 -812
- chython-3.4/chython/reactions/test/gen_corpus_glossary.py +0 -146
- chython-3.4/chython/reactions/test/test_corpus_glossary.py +0 -91
- {chython-3.4 → chython-3.5}/LICENSE +0 -0
- {chython-3.4 → chython-3.5}/MANIFEST.in +0 -0
- {chython-3.4 → chython-3.5}/README.md +0 -0
- {chython-3.4 → chython-3.5}/build_inchi.py +0 -0
- {chython-3.4 → chython-3.5}/chython/_functions.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/_abbreviations.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/_counts.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/_crippen.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/_implicit.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/_maccs.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/_organometallics.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/_perceive.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/_pharmacophore.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/_qed.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/_residues.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/_resonance.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/_saturate.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/_smarts.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/_tpsa.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/tables/abbreviations.tsv +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/tables/acids.tsv +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/tables/covalent_radii.tsv +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/tables/crippen.tsv +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/tables/hbond.tsv +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/tables/maccs.tsv +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/tables/maccs_corpus.tsv +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/tables/pharmacophore.tsv +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/tables/qed_alerts.tsv +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/tables/residues.tsv +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/tables/resonance.tsv +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/tables/rotatable.tsv +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/tables/standardize_metals.tsv +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/tables/sybyl_types.tsv +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/tables/tpsa.tsv +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/__init__.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/_corpus.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/_oracle.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_abbreviations.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_acids_tsv.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_counts.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_covalent_radii_tsv.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_crippen.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_crippen_tsv.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_dependency_direction.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_featurizer_injection.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_featurizer_tables_lazy.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_kekule_form.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_maccs.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_maccs_corpus.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_maccs_tsv.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_organometallics.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_perceive.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_pharmacophore.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_protomers.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_qed.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_qed_alerts_tsv.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_reaction_hydrogen_repair.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_reaction_passes.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_residues.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_resonance.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_resonance_tsv.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_saturate.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_smarts.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_standardize_differential.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_standardize_overvalent_nitrogen.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_standardize_rules_examples.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_thiele_is_single_purpose.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_tpsa.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_tpsa_tsv.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_valence_report.py +0 -0
- {chython-3.4 → chython-3.5}/chython/chemistry/test/test_z_translation.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/RULES.md +0 -0
- {chython-3.4 → chython-3.5}/chython/core/_descriptors.pxi +0 -0
- {chython-3.4 → chython-3.5}/chython/core/_elements.pxi +0 -0
- {chython-3.4 → chython-3.5}/chython/core/_facade.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/_fingerprints.pxi +0 -0
- {chython-3.4 → chython-3.5}/chython/core/_isomorphism.pxi +0 -0
- {chython-3.4 → chython-3.5}/chython/core/_log.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/_ml.pxi +0 -0
- {chython-3.4 → chython-3.5}/chython/core/_molecule_topology.pxi +0 -0
- {chython-3.4 → chython-3.5}/chython/core/_molecule_views.pxi +0 -0
- {chython-3.4 → chython-3.5}/chython/core/_pach.pxi +0 -0
- {chython-3.4 → chython-3.5}/chython/core/_query_arena.pxi +0 -0
- {chython-3.4 → chython-3.5}/chython/core/_query_boxes.pxi +0 -0
- {chython-3.4 → chython-3.5}/chython/core/_query_seal.pxi +0 -0
- {chython-3.4 → chython-3.5}/chython/core/_smarts_read.pxi +0 -0
- {chython-3.4 → chython-3.5}/chython/core/_sssr.pxi +0 -0
- {chython-3.4 → chython-3.5}/chython/core/_valence.pxi +0 -0
- {chython-3.4 → chython-3.5}/chython/core/elements.tsv +0 -0
- {chython-3.4 → chython-3.5}/chython/core/isotopes.tsv +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/__init__.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/arena_v4_corpus.bin.gz +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/bench_ml.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/chytorch_oracle.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/gen_element_tables.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/gen_modeling_view_corpus.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/gen_pach3_corpus.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/gen_reaction_pach_corpus.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/gen_v3_fixtures.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/gen_v4_fixtures.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/gen_valence_rules.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/modeling_view_corpus.json.gz +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/modeling_view_corpus.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/oracle.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/pach_bond_group_corpus.bin.gz +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/pach_corpus.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/pach_v0_corpus.bin.gz +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/pach_v0_native_corpus.bin.gz +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/pach_v2_corpus.bin.gz +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/reaction_pach_corpus.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/reaction_pach_v2_corpus.bin.gz +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_aggregates.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_alternative_spellings.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_apply_scratch_probe.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_arena_f60.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_arena_identity.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_arena_v4_compat.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_cip_assign.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_cip_digraph.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_cip_ranking.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_clean_isotopes_and_coordinate_bonds.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_clean_stereo.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_conformers.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_copy_caches.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_derive.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_descriptors.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_element_tables.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_enrich.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_facade.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_features.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_featurizer_injection.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_fingerprints.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_geometry.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_h_unknown.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_inchi.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_interop_injection.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_isomorphism.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_meta.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_ml_encoding.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_ml_reaction_transition.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_ml_state_view.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_ml_transition_view.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_ml_unpack_differential.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_modeling_view_frozen.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_molecule.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_morgan.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_no_chython_two_imports.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_oracle.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_pach.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_pack.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_query.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_r_edit.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_r_query.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_r_semantics.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_r_serialisation.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_r_smirks.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_r_storage.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_reaction_container.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_reaction_identity.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_reaction_pach.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_reaction_passes.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_reaction_patch_stereo.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_rings_c60.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_set_element.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_sgroups.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_smarts_read.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_smiles_r.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_smiles_write_aromatic.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_smiles_write_h_unknown.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_smiles_write_sticky.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_smirks_filter.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_smirks_read.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_smirks_report.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_structure.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_thiele.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_title.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_topology.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_union_stereo.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_valence.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/test_view_surface.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/v3_fixtures.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/test/v4_fixtures.py +0 -0
- {chython-3.4 → chython-3.5}/chython/core/valence_rules.tsv +0 -0
- {chython-3.4 → chython-3.5}/chython/depict/_hooks.py +0 -0
- {chython-3.4 → chython-3.5}/chython/depict/bonds.py +0 -0
- {chython-3.4 → chython-3.5}/chython/depict/colorbar.py +0 -0
- {chython-3.4 → chython-3.5}/chython/depict/colormap.py +0 -0
- {chython-3.4 → chython-3.5}/chython/depict/field.py +0 -0
- {chython-3.4 → chython-3.5}/chython/depict/layout/clean2d.js +0 -0
- {chython-3.4 → chython-3.5}/chython/depict/metrics/__init__.py +0 -0
- {chython-3.4 → chython-3.5}/chython/depict/metrics/helvetica.tsv +0 -0
- {chython-3.4 → chython-3.5}/chython/depict/metrics/times.tsv +0 -0
- {chython-3.4 → chython-3.5}/chython/depict/overlay.py +0 -0
- {chython-3.4 → chython-3.5}/chython/depict/render/__init__.py +0 -0
- {chython-3.4 → chython-3.5}/chython/depict/render/svg.py +0 -0
- {chython-3.4 → chython-3.5}/chython/depict/scene.py +0 -0
- {chython-3.4 → chython-3.5}/chython/depict/style.py +0 -0
- {chython-3.4 → chython-3.5}/chython/depict/test/__init__.py +0 -0
- {chython-3.4/chython/formats/test → chython-3.5/chython/depict/test/learn}/__init__.py +0 -0
- {chython-3.4 → chython-3.5}/chython/depict/test/test_bonds.py +0 -0
- {chython-3.4 → chython-3.5}/chython/depict/test/test_colorbar.py +0 -0
- {chython-3.4 → chython-3.5}/chython/depict/test/test_colormap.py +0 -0
- {chython-3.4 → chython-3.5}/chython/depict/test/test_field.py +0 -0
- {chython-3.4 → chython-3.5}/chython/depict/test/test_figure.py +0 -0
- {chython-3.4 → chython-3.5}/chython/depict/test/test_metrics.py +0 -0
- {chython-3.4 → chython-3.5}/chython/depict/test/test_overlay.py +0 -0
- {chython-3.4 → chython-3.5}/chython/depict/test/test_package.py +0 -0
- {chython-3.4 → chython-3.5}/chython/depict/test/test_r_atom.py +0 -0
- {chython-3.4 → chython-3.5}/chython/depict/test/test_scene.py +0 -0
- {chython-3.4 → chython-3.5}/chython/depict/test/test_style.py +0 -0
- {chython-3.4 → chython-3.5}/chython/depict/test/test_svg.py +0 -0
- {chython-3.4 → chython-3.5}/chython/depict/test/test_x3dom.py +0 -0
- {chython-3.4 → chython-3.5}/chython/depict/wedge.py +0 -0
- {chython-3.4 → chython-3.5}/chython/depict/x3dom.py +0 -0
- {chython-3.4 → chython-3.5}/chython/exceptions.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/__init__.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/_text.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/ctfile/CTFILE.md +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/ctfile/__init__.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/ctfile/_errors.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/ctfile/_hydrogens.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/ctfile/_rdf.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/ctfile/_rxn.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/ctfile/_sdf.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/ctfile/_stream.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/ctfile/_tokens.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/ctfile/test/__init__.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/ctfile/test/conftest.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/ctfile/test/test_aromatic.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/ctfile/test/test_container_log.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/ctfile/test/test_hydrogens.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/ctfile/test/test_r_atom.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/ctfile/test/test_rdf.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/ctfile/test/test_rxn.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/ctfile/test/test_sdf.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/ctfile/test/test_sgroup.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/ctfile/test/test_stream.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/ctfile/test/test_tokens.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/mol2.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/pdb/__init__.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/pdb/_builder.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/pdb/_legacy.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/pdb/_mmcif.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/pdb/_records.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/pdb/_star.py +0 -0
- {chython-3.4/chython/reactions → chython-3.5/chython/formats}/test/__init__.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/test/conftest.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/test/oracles.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/test/test_conformance.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/test/test_done_when.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/test/test_isolation.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/test/test_log_prefix.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/test/test_mmcif.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/test/test_mol2.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/test/test_no_review_bookkeeping.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/test/test_oracles.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/test/test_pdb.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/test/test_pdb_builder.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/test/test_perceive_agreement.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/test/test_read_only_facades.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/test/test_xyz.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/test/test_xyz_builder.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/xml/__init__.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/xml/_cml.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/xml/_dialect.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/xml/_errors.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/xml/_facade.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/xml/_tree.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/xml/test/__init__.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/xml/test/conftest.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/xml/test/test_cml.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/xml/test/test_container_log.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/xml/test/test_dialect.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/xml/test/test_facade.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/xml/test/test_mrv.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/xml/test/test_mrv_census.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/xml/test/test_tree.py +0 -0
- {chython-3.4 → chython-3.5}/chython/formats/xyz.py +0 -0
- {chython-3.4 → chython-3.5}/chython/interop/__init__.py +0 -0
- {chython-3.4 → chython-3.5}/chython/interop/_cdk.py +0 -0
- {chython-3.4 → chython-3.5}/chython/interop/_cdpkit.py +0 -0
- {chython-3.4 → chython-3.5}/chython/interop/_indigo.py +0 -0
- {chython-3.4 → chython-3.5}/chython/interop/_iupac.py +0 -0
- {chython-3.4 → chython-3.5}/chython/interop/_java.py +0 -0
- {chython-3.4 → chython-3.5}/chython/interop/_openbabel.py +0 -0
- {chython-3.4 → chython-3.5}/chython/interop/_pandas.py +0 -0
- {chython-3.4 → chython-3.5}/chython/interop/_rdkit.py +0 -0
- {chython-3.4 → chython-3.5}/chython/interop/_records.py +0 -0
- {chython-3.4 → chython-3.5}/chython/interop/config.py +0 -0
- {chython-3.4 → chython-3.5}/chython/interop/conformers.py +0 -0
- {chython-3.4 → chython-3.5}/chython/interop/test/__init__.py +0 -0
- {chython-3.4 → chython-3.5}/chython/interop/test/conftest.py +0 -0
- {chython-3.4 → chython-3.5}/chython/interop/test/test_cdk.py +0 -0
- {chython-3.4 → chython-3.5}/chython/interop/test/test_cdpkit.py +0 -0
- {chython-3.4 → chython-3.5}/chython/interop/test/test_config.py +0 -0
- {chython-3.4 → chython-3.5}/chython/interop/test/test_conformers.py +0 -0
- {chython-3.4 → chython-3.5}/chython/interop/test/test_coordinate_honesty.py +0 -0
- {chython-3.4 → chython-3.5}/chython/interop/test/test_dispatch.py +0 -0
- {chython-3.4 → chython-3.5}/chython/interop/test/test_indigo.py +0 -0
- {chython-3.4 → chython-3.5}/chython/interop/test/test_iupac.py +0 -0
- {chython-3.4 → chython-3.5}/chython/interop/test/test_log_delivery.py +0 -0
- {chython-3.4 → chython-3.5}/chython/interop/test/test_openbabel.py +0 -0
- {chython-3.4 → chython-3.5}/chython/interop/test/test_pandas.py +0 -0
- {chython-3.4 → chython-3.5}/chython/interop/test/test_v2_oracle.py +0 -0
- {chython-3.4 → chython-3.5}/chython/reactions/_numbering.py +0 -0
- {chython-3.4 → chython-3.5}/chython/reactions/_stickers.py +0 -0
- {chython-3.4 → chython-3.5}/chython/reactions/attention/__init__.py +0 -0
- {chython-3.4 → chython-3.5}/chython/reactions/attention/_assign.py +0 -0
- {chython-3.4 → chython-3.5}/chython/reactions/attention/_encode.py +0 -0
- {chython-3.4 → chython-3.5}/chython/reactions/attention/_session.py +0 -0
- {chython-3.4 → chython-3.5}/chython/reactions/tables/roles.tsv +0 -0
- {chython-3.4 → chython-3.5}/chython/reactions/test/golden_subset.smi +0 -0
- {chython-3.4 → chython-3.5}/chython/reactions/test/test_attention.py +0 -0
- {chython-3.4 → chython-3.5}/chython/reactions/test/test_attention_assign.py +0 -0
- {chython-3.4 → chython-3.5}/chython/reactions/test/test_attention_encode.py +0 -0
- {chython-3.4 → chython-3.5}/chython/reactions/test/test_attention_isolation.py +0 -0
- {chython-3.4 → chython-3.5}/chython/reactions/test/test_dependency_direction.py +0 -0
- {chython-3.4 → chython-3.5}/chython/reactions/test/test_id_stability.py +0 -0
- {chython-3.4 → chython-3.5}/chython/reactions/test/test_numbering.py +0 -0
- {chython-3.4 → chython-3.5}/chython/reactions/test/test_roles.py +0 -0
- {chython-3.4 → chython-3.5}/chython/reactions/test/test_stickers.py +0 -0
- {chython-3.4 → chython-3.5}/chython/test/__init__.py +0 -0
- {chython-3.4 → chython-3.5}/chython/test/test_code_hygiene.py +0 -0
- {chython-3.4 → chython-3.5}/chython/test/test_doc_figures.py +0 -0
- {chython-3.4 → chython-3.5}/chython/test/test_doc_references.py +0 -0
- {chython-3.4 → chython-3.5}/chython/test/test_doc_samples.py +0 -0
- {chython-3.4 → chython-3.5}/chython/test/test_hydrogen_parity.py +0 -0
- {chython-3.4 → chython-3.5}/chython/test/test_libinchi_staging.py +0 -0
- {chython-3.4 → chython-3.5}/chython/test/test_log_records.py +0 -0
- {chython-3.4 → chython-3.5}/chython/test/test_optional_numpy.py +0 -0
- {chython-3.4 → chython-3.5}/chython/test/test_packaging.py +0 -0
- {chython-3.4 → chython-3.5}/chython/test/test_r_atom_integration.py +0 -0
- {chython-3.4 → chython-3.5}/chython/test/test_release_build.py +0 -0
- {chython-3.4 → chython-3.5}/chython/test/test_v2_boundary.py +0 -0
- {chython-3.4 → chython-3.5}/chython/test/test_writer_posture.py +0 -0
- {chython-3.4 → chython-3.5}/chython.egg-info/dependency_links.txt +0 -0
- {chython-3.4 → chython-3.5}/chython.egg-info/requires.txt +0 -0
- {chython-3.4 → chython-3.5}/chython.egg-info/top_level.txt +0 -0
- {chython-3.4 → chython-3.5}/setup.cfg +0 -0
- {chython-3.4 → chython-3.5}/setup.py +0 -0
|
@@ -29,8 +29,8 @@ from sys import modules as _modules
|
|
|
29
29
|
from types import ModuleType as _ModuleType
|
|
30
30
|
from .core import *
|
|
31
31
|
from .core import read_smarts as smarts
|
|
32
|
-
from .depict import (Clean2DEngine, DepictStyle, get_clean2d_engine, get_depict_style,
|
|
33
|
-
set_clean2d_engine, set_depict_style)
|
|
32
|
+
from .depict import (Clean2DEngine, DepictStyle, get_chain_layout, get_clean2d_engine, get_depict_style,
|
|
33
|
+
get_peptide_layout, set_chain_layout, set_clean2d_engine, set_depict_style, set_peptide_layout)
|
|
34
34
|
from .formats import *
|
|
35
35
|
# By full path, not through `formats`' star: `pdb` is that subpackage's name too and the function
|
|
36
36
|
# would shadow it.
|
|
@@ -45,8 +45,9 @@ from .interop.config import _facade_alias as _interop_facade_alias
|
|
|
45
45
|
|
|
46
46
|
|
|
47
47
|
class _Facade(_ModuleType):
|
|
48
|
-
"""Gives `chython` itself
|
|
49
|
-
write to
|
|
48
|
+
"""Gives `chython` itself properties, so `chython.clean2d_engine` and `chython.chain_layout` (alias
|
|
49
|
+
`chython.peptide_layout`) forward both the read and the write to their one home in `depict/_config.py`,
|
|
50
|
+
validated on the spot.
|
|
50
51
|
"""
|
|
51
52
|
@property
|
|
52
53
|
def clean2d_engine(self) -> Clean2DEngine:
|
|
@@ -56,6 +57,22 @@ class _Facade(_ModuleType):
|
|
|
56
57
|
def clean2d_engine(self, engine: Clean2DEngine):
|
|
57
58
|
set_clean2d_engine(engine)
|
|
58
59
|
|
|
60
|
+
@property
|
|
61
|
+
def chain_layout(self) -> bool:
|
|
62
|
+
return get_chain_layout()
|
|
63
|
+
|
|
64
|
+
@chain_layout.setter
|
|
65
|
+
def chain_layout(self, flag: bool):
|
|
66
|
+
set_chain_layout(flag)
|
|
67
|
+
|
|
68
|
+
@property
|
|
69
|
+
def peptide_layout(self) -> bool:
|
|
70
|
+
return get_peptide_layout()
|
|
71
|
+
|
|
72
|
+
@peptide_layout.setter
|
|
73
|
+
def peptide_layout(self, flag: bool):
|
|
74
|
+
set_peptide_layout(flag)
|
|
75
|
+
|
|
59
76
|
|
|
60
77
|
_modules[__name__].__class__ = _Facade
|
|
61
78
|
|
|
@@ -49,6 +49,7 @@ from ._salts import ComponentRow, DEFAULT_STABILIZER_CLASSES, SaltComposition, d
|
|
|
49
49
|
from ._saturate import saturate
|
|
50
50
|
from ._smarts import SmartsSyntaxError, compile_smarts
|
|
51
51
|
from ._standardize import LogRecord, standardize
|
|
52
|
+
from ._stereo_audit import Fix, Finding, StereoAudit, audit_stereo
|
|
52
53
|
from ._tables import (ACID_ROLES, AbbreviationRow, AcidRow, Endpoint, RESONANCE_ROLES, Rule,
|
|
53
54
|
SALT_CLASSES, SALT_MATCHES, SaltRow, abbreviation_row, abbreviations_rows,
|
|
54
55
|
acids_rules, acids_rules_by_role, acids_table_text, groups_rules,
|
|
@@ -56,6 +57,7 @@ from ._tables import (ACID_ROLES, AbbreviationRow, AcidRow, Endpoint, RESONANCE_
|
|
|
56
57
|
resonance_table_text, salts_rows, salts_rows_by_klass, salts_species_keys,
|
|
57
58
|
salts_table_text, standardize_rules)
|
|
58
59
|
from ._tpsa import tpsa
|
|
60
|
+
from ..core.monomers import PeptideBranch, Peptide, Residue, monomers
|
|
59
61
|
from ..core._core import (_set_canonicalize_fn, _set_featurizer_fns, _set_hydrogens_fns,
|
|
60
62
|
_set_isomers_fn, _set_kekule_form_fn, _set_protomers_fn,
|
|
61
63
|
_set_resonance_fn, _set_salts_fns, _set_standardize_fn,
|
|
@@ -63,13 +65,14 @@ from ..core._core import (_set_canonicalize_fn, _set_featurizer_fns, _set_hydrog
|
|
|
63
65
|
|
|
64
66
|
|
|
65
67
|
__all__ = ['ACID_ROLES', 'AbbreviationRow', 'ComponentRow', 'DEFAULT_STABILIZER_CLASSES',
|
|
66
|
-
'LogRecord', '
|
|
67
|
-
'
|
|
68
|
+
'Finding', 'Fix', 'LogRecord', 'Peptide', 'PeptideBranch', 'Residue',
|
|
69
|
+
'SALT_CLASSES', 'SALT_MATCHES', 'SaltComposition', 'StereoAudit',
|
|
70
|
+
'abbreviation_row', 'abbreviations_rows', 'alert_count', 'audit_stereo',
|
|
68
71
|
'calc_implicit', 'canonicalize', 'check_valence', 'crippen_logp', 'crippen_mr',
|
|
69
72
|
'decompose_salts', 'expand_abbreviations', 'explicify_hydrogens', 'fix_resonance',
|
|
70
73
|
'hydrogen_bond_acceptors_count',
|
|
71
74
|
'hydrogen_bond_donors_count', 'implicify_hydrogens', 'maccs_bit_set', 'maccs_keys',
|
|
72
|
-
'neutralize', 'perceive_bonds', 'pharmacophore_invariants', 'qed', 'qed_properties',
|
|
75
|
+
'monomers', 'neutralize', 'perceive_bonds', 'pharmacophore_invariants', 'qed', 'qed_properties',
|
|
73
76
|
'rotatable_bonds_count',
|
|
74
77
|
'saturate', 'split_salts', 'standardize', 'standardize_isomers',
|
|
75
78
|
'standardize_kekule', 'tpsa']
|
|
@@ -19,9 +19,9 @@
|
|
|
19
19
|
"""`canonicalize()` -- the pre-pass that makes `canonical_bytes` a compound identity rather than a
|
|
20
20
|
drawing identity, so equal compounds hash equal and a corpus deduplicates by hash. The stage order
|
|
21
21
|
is a correctness constraint, not taste: `kekule()`, `validate_stereo()`, `standardize()`,
|
|
22
|
-
`implicify_hydrogens()`, `neutralize()`, `standardize_kekule()`, `thiele()`, `standardize_isomers()`,
|
|
23
|
-
`kekule()` again only under `keep_kekule=True`. Each ordering pair
|
|
24
|
-
below.
|
|
22
|
+
`implicify_hydrogens()`, `neutralize()`, `standardize_kekule()`, `thiele()`, `standardize_isomers()`,
|
|
23
|
+
`kekule()` again only under `keep_kekule=True`, and `canonicalize_stereo_groups()`. Each ordering pair
|
|
24
|
+
is justified at its numbered step below.
|
|
25
25
|
|
|
26
26
|
The order alone is not enough, because the last stage can unblock the third one: a `tautomer` row
|
|
27
27
|
wanting a free ring nitrogen cannot fire while the mobile hydrogen sits on it, and the placement is
|
|
@@ -73,20 +73,21 @@ def _pin_lactim(molecule: MoleculeContainer) -> bool:
|
|
|
73
73
|
trial = molecule.copy()
|
|
74
74
|
with trial.edit():
|
|
75
75
|
trial.set_order(c, n, 2)
|
|
76
|
-
if trial.kekule().unresolved or trial.order_of(c, n) != 2:
|
|
76
|
+
if trial.kekule(canonical=True).unresolved or trial.order_of(c, n) != 2:
|
|
77
77
|
continue
|
|
78
78
|
standardize(trial)
|
|
79
79
|
if trial.order_of(o, c) != 2:
|
|
80
80
|
continue
|
|
81
81
|
with molecule.edit():
|
|
82
82
|
molecule.set_order(c, n, 2)
|
|
83
|
-
molecule.kekule()
|
|
83
|
+
molecule.kekule(canonical=True)
|
|
84
84
|
return True
|
|
85
85
|
return False
|
|
86
86
|
|
|
87
87
|
|
|
88
88
|
def canonicalize(molecule: MoleculeContainer, *, fix_tautomers: bool = True,
|
|
89
|
-
keep_kekule: bool = False
|
|
89
|
+
keep_kekule: bool = False, stereo_groups: bool = True,
|
|
90
|
+
recover_racemate: bool = False) -> bool:
|
|
90
91
|
"""Bring `molecule` to the representation two drawings of one compound share. Did it change?
|
|
91
92
|
|
|
92
93
|
Run before deduplicating by `canonical_bytes`, `__hash__` or `__eq__`, which otherwise answer "same
|
|
@@ -98,7 +99,10 @@ def canonicalize(molecule: MoleculeContainer, *, fix_tautomers: bool = True,
|
|
|
98
99
|
(`Oc1ccccn1` and `O=c1cccc[nH]1` stop hashing equal); it deliberately does not reach
|
|
99
100
|
`standardize_isomers()`, which picks between two valid annular forms rather than repairing one.
|
|
100
101
|
`keep_kekule=True` costs a second kekulisation rather than a skipped `thiele()`, the placement stage
|
|
101
|
-
needing the aromatic form.
|
|
102
|
+
needing the aromatic form. `stereo_groups=False` skips step 11 and keeps the stored collection
|
|
103
|
+
labels and AND phases, which a reaction needs for a collection joined across its arrow.
|
|
104
|
+
`recover_racemate` is forwarded to `validate_stereo()`: a bridgehead pair no bicycle realises is then
|
|
105
|
+
read as the racemate instead of cleared.
|
|
102
106
|
|
|
103
107
|
CHARGES ARE PAIRED OFF, not preserved atom by atom: glycine's zwitterion and its neutral drawing
|
|
104
108
|
share a key, because step 5 runs `neutralize()`. `neutralize()` leaves the NET charge untouched, so
|
|
@@ -132,7 +136,11 @@ def canonicalize(molecule: MoleculeContainer, *, fix_tautomers: bool = True,
|
|
|
132
136
|
# Nothing is recorded here about `result.unresolved`: the kekuliser writes a `LOST` record per
|
|
133
137
|
# system to `molecule.log` itself, naming it in `atoms`, so a second one here would summarise an
|
|
134
138
|
# event already reported. `check_valence()` is still how those atoms are found.
|
|
135
|
-
|
|
139
|
+
# Canonically, so the group rules see one form of the compound whatever the atom order. A drawing
|
|
140
|
+
# already in a Kekule form is aromatised first, or the rules would read whichever form was drawn:
|
|
141
|
+
# the two Kekule drawings of HBTU's benzotriazole oxide repair to two resonance forms.
|
|
142
|
+
molecule.thiele()
|
|
143
|
+
molecule.kekule(canonical=True)
|
|
136
144
|
|
|
137
145
|
# 2. Drop the parities the constitution does not justify, on the localised form and before step 6
|
|
138
146
|
# hides a bond order behind an aromatic one. A cis/trans sign on a double bond an alternating
|
|
@@ -140,28 +148,34 @@ def canonicalize(molecule: MoleculeContainer, *, fix_tautomers: bool = True,
|
|
|
140
148
|
# `canonical_bytes` whether or not the unit is stereogenic -- so the two bond-shift drawings of
|
|
141
149
|
# 1,2-dimethylcyclooctatetraene keep two keys until it is gone. The report is not recorded: the
|
|
142
150
|
# parities it names are the reader's own input and `validate_stereo()` returns them to a caller
|
|
143
|
-
# that wants them.
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
# 3. Repair the drawing.
|
|
147
|
-
standardize(molecule, fix_tautomers=fix_tautomers)
|
|
151
|
+
# that wants them. A coupled bridgehead set signed as no bicycle is built is cleared, or with
|
|
152
|
+
# `recover_racemate` read as the racemate its drawer most likely meant.
|
|
153
|
+
molecule.validate_stereo(recover_racemate=recover_racemate)
|
|
148
154
|
|
|
149
|
-
#
|
|
155
|
+
# 3. Explicit hydrogens are a `canonical_bytes` difference, so they have to go -- before step 4,
|
|
156
|
+
# whose rows read implicit counts and move no hydrogen atom: `[H]Oc1ccncc1` would flip to the
|
|
157
|
+
# 4-pyridone with its hydrogen atom still on the oxygen.
|
|
150
158
|
implicify_hydrogens(molecule)
|
|
151
159
|
|
|
160
|
+
# 4. Repair the drawing.
|
|
161
|
+
repaired = standardize(molecule, fix_tautomers=fix_tautomers)
|
|
162
|
+
|
|
152
163
|
# 5. Pair off the charges an acid/base row can pair off, so a zwitterion and its neutral drawing
|
|
153
|
-
# hash equal. AFTER step
|
|
164
|
+
# hash equal. AFTER step 3, because `acids.tsv` reads implicit hydrogens: a cation drawn with
|
|
154
165
|
# hydrogen ATOMS is invisible to it until they have been folded in. `keep_charge` stays at its
|
|
155
166
|
# default -- the net charge is part of the compound, so a canonical form may move a proton but
|
|
156
167
|
# never create or destroy one. A quaternary ammonium keeps its counterion: it has no proton to
|
|
157
|
-
# give, so the pass finds no donor and declines.
|
|
158
|
-
|
|
168
|
+
# give, so the pass finds no donor and declines. A repair or a pairing moves bonds and hydrogens
|
|
169
|
+
# step 2 judged, so it is asked again: a parity a moved hydrogen leaves on an alternating cycle
|
|
170
|
+
# would be dropped by the next canonicalisation, and the first answer would not be a fixed point.
|
|
171
|
+
if neutralize(molecule) | repaired:
|
|
172
|
+
molecule.validate_stereo(recover_racemate=recover_racemate)
|
|
159
173
|
|
|
160
174
|
# 6. Which Kekule form, decided before step 7 reads one. `thiele()` refuses a candidate ring whose
|
|
161
175
|
# atom holds its double bond outside the ring, so a compound with several Kekule forms has one
|
|
162
176
|
# aromatic form per form until this stage picks between them; a ring too big for `thiele()` to
|
|
163
177
|
# consider gets a canonical alternation here instead, nothing later collapsing its two. AFTER
|
|
164
|
-
# step
|
|
178
|
+
# step 4, whose group rules are written against the orders the drawing carried, and after step 2,
|
|
165
179
|
# whose parities would otherwise pin the very bond this stage moves.
|
|
166
180
|
standardize_kekule(molecule)
|
|
167
181
|
|
|
@@ -179,22 +193,22 @@ def canonicalize(molecule: MoleculeContainer, *, fix_tautomers: bool = True,
|
|
|
179
193
|
|
|
180
194
|
# 9. Steps 3 to 8 again, while the placement keeps unblocking a repair. `Oc1[nH]cnc2nncc1-2` is
|
|
181
195
|
# the shape: its mobile hydrogen sits on the one ring nitrogen the hydroxy-azine rows need free,
|
|
182
|
-
# so step
|
|
196
|
+
# so step 4 declines, and by the time step 8 has moved it the repair is behind us -- the drawing
|
|
183
197
|
# kept its hydroxy form and the same compound drawn the other way got the oxo form and a
|
|
184
198
|
# different key. Only the placement is re-entered from, since it is the one stage that can put
|
|
185
199
|
# the molecule back into a shape an earlier stage would have acted on.
|
|
186
200
|
#
|
|
187
201
|
# `kekule()` leads, and not for the reason step 1 does: the `tautomer` rows are written against
|
|
188
202
|
# definite bond orders, so on the aromatic form step 7 left behind they match nothing at all and
|
|
189
|
-
# re-running step
|
|
203
|
+
# re-running step 4 would be a guaranteed no-op. Step 5 is re-entered every round: a repair and
|
|
190
204
|
# the placement both hand it charged sites it has not seen -- the placement moves an N-oxide's
|
|
191
205
|
# charge onto an azole NH, `c1ccc2[nH]cnc2[n+]1[O-]` to `c1ccc2nc[nH+]c2n1[O-]`, a zwitterion
|
|
192
206
|
# step 5 pairs off -- and what it pairs off can unblock the placement again. It cannot cycle:
|
|
193
207
|
# step 5 only ever reduces the number of charged atoms and step 8 never adds one. Step 6 rides
|
|
194
208
|
# with the aromatisation and not with the repair: the kekulisation above is free to come back with
|
|
195
209
|
# a different Kekule form than the one it was handed, which is the form step 7 would then read.
|
|
196
|
-
# Step 2 is
|
|
197
|
-
#
|
|
210
|
+
# Step 2 is re-entered every round, on the localised form ahead of step 6: the placement moved a
|
|
211
|
+
# hydrogen, and which double bonds an alternating cycle can move depends on where it sits.
|
|
198
212
|
#
|
|
199
213
|
# A round the placement did not ask for is opened by a lactim `kekule()` left unrepairable: the
|
|
200
214
|
# hydroxy-azine rows need the C=N beside the C-OH, and which Kekule form comes back depends on the
|
|
@@ -202,13 +216,14 @@ def canonicalize(molecule: MoleculeContainer, *, fix_tautomers: bool = True,
|
|
|
202
216
|
# reaches isoquinolin-3(2H)-one from every order.
|
|
203
217
|
for _ in range(_ROUNDS_MAX):
|
|
204
218
|
if moved:
|
|
205
|
-
molecule.kekule()
|
|
219
|
+
molecule.kekule(canonical=True)
|
|
206
220
|
elif not (fix_tautomers and _pin_lactim(molecule)):
|
|
207
221
|
break
|
|
208
222
|
changed = standardize(molecule, fix_tautomers=fix_tautomers)
|
|
209
223
|
if changed:
|
|
210
224
|
implicify_hydrogens(molecule)
|
|
211
225
|
changed |= neutralize(molecule)
|
|
226
|
+
molecule.validate_stereo(recover_racemate=recover_racemate) # the placement moved a hydrogen
|
|
212
227
|
standardize_kekule(molecule)
|
|
213
228
|
molecule.thiele() # unconditional: step 6's form is what a caller compares, and
|
|
214
229
|
moved = changed and standardize_isomers(molecule) # the kekulisation has to be undone either way
|
|
@@ -222,8 +237,14 @@ def canonicalize(molecule: MoleculeContainer, *, fix_tautomers: bool = True,
|
|
|
222
237
|
# 10. `keep_kekule` undoes step 7 rather than skipping it: skipping 7 would skip 8 with it, and the
|
|
223
238
|
# flag would then decide which tautomer the caller gets. Step 6 is not re-run behind it and
|
|
224
239
|
# would have nothing to do: an aromatic ring is unwound into a ring holding every double bond it
|
|
225
|
-
# has room for, and which of its alternations comes back is the kekuliser's answer to give
|
|
240
|
+
# has room for, and which of its alternations comes back is the kekuliser's answer to give --
|
|
241
|
+
# canonical, so the flag keeps the guarantee.
|
|
226
242
|
if keep_kekule:
|
|
227
|
-
molecule.kekule()
|
|
243
|
+
molecule.kekule(canonical=True)
|
|
244
|
+
|
|
245
|
+
# 11. Store the collections the canonical SMILES states: dead labels dropped, canonical ids, each AND
|
|
246
|
+
# collection in its canonical phase. Last, because every stage above can move a parity or a
|
|
247
|
+
# unit. `canonical_bytes` does not see it, so its answer is ORed in.
|
|
248
|
+
grouped = stereo_groups and molecule.canonicalize_stereo_groups()
|
|
228
249
|
|
|
229
|
-
return molecule.canonical_bytes != before
|
|
250
|
+
return molecule.canonical_bytes != before or grouped
|
|
@@ -92,13 +92,31 @@ def _plan(molecule: MoleculeContainer, log):
|
|
|
92
92
|
doomed.append(n)
|
|
93
93
|
counts[other] = current + 1
|
|
94
94
|
|
|
95
|
-
# Read every affected anchor's
|
|
96
|
-
#
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
95
|
+
# Read every affected anchor's configuration now, in a direction order that already puts each doomed
|
|
96
|
+
# hydrogen where the implicit direction will be: last in its group, the whole frame for a centre and
|
|
97
|
+
# its own pair for a bond unit. `delete_atom` clears the parity, and the unit's refs after the fold
|
|
98
|
+
# are not the refs before it, so a verbatim copy of the byte inverts the centre whenever the move is
|
|
99
|
+
# an odd permutation -- `[2H][C@@]([H])(Cl)Br` folded to the enantiomer of `[H][C@]([2H])(Cl)Br`.
|
|
100
|
+
gone = frozenset(doomed)
|
|
101
|
+
parities: dict[int, tuple[int, tuple]] = {}
|
|
102
|
+
for u in molecule.stereo_units():
|
|
103
|
+
n = u['anchor']
|
|
104
|
+
if n not in counts or not molecule.parity_of(n):
|
|
105
|
+
continue
|
|
106
|
+
refs = u['refs']
|
|
107
|
+
groups = [refs] if u['kind'] == 0 else [refs[:2], refs[2:]]
|
|
108
|
+
before, after = [], []
|
|
109
|
+
for group in groups:
|
|
110
|
+
kept = [r for r in group if r not in gone]
|
|
111
|
+
dropped = [r for r in group if r in gone]
|
|
112
|
+
before.extend(kept + dropped)
|
|
113
|
+
after.extend(kept + [None] * len(dropped))
|
|
114
|
+
if sum(r is None for r in after) > 1:
|
|
115
|
+
continue # two unnamed directions: no configuration survives the fold
|
|
116
|
+
try:
|
|
117
|
+
parities[n] = (molecule.translate_stereo(n, tuple(before)), tuple(after))
|
|
118
|
+
except ValueError: # a kind whose refs are not read in these groups: as stored
|
|
119
|
+
parities[n] = (molecule.parity_of(n), None)
|
|
102
120
|
return doomed, counts, parities
|
|
103
121
|
|
|
104
122
|
|
|
@@ -129,10 +147,12 @@ def _implicify_apply(molecule, doomed, counts, parities):
|
|
|
129
147
|
molecule.delete_atom(n)
|
|
130
148
|
for n, total in counts.items():
|
|
131
149
|
molecule.set_hydrogens(n, total)
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
150
|
+
if parities:
|
|
151
|
+
# restore what `delete_atom` cleared, in the order `_plan` read it: a second session, since
|
|
152
|
+
# `order=` reads the frame and the first one changed the graph
|
|
153
|
+
with molecule.edit():
|
|
154
|
+
for n, (p, order) in parities.items():
|
|
155
|
+
molecule.set_parity(n, p, order=order)
|
|
136
156
|
|
|
137
157
|
|
|
138
158
|
def explicify_hydrogens(molecule: MoleculeContainer) -> int:
|