synkit 1.3.1a0__tar.gz → 1.3.2__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.
- {synkit-1.3.1a0 → synkit-1.3.2}/.gitignore +5 -1
- {synkit-1.3.1a0 → synkit-1.3.2}/PKG-INFO +1 -1
- {synkit-1.3.1a0 → synkit-1.3.2}/pyproject.toml +1 -1
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Query/kegg_parse.py +1 -1
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Chem/Molecule/atom_features.py +0 -1
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Chem/Reaction/standardize.py +56 -8
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/IO/mol_to_graph.py +67 -38
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Synthesis/Reactor/rbl_engine.py +1 -1
- synkit-1.3.2/synkit/Vis/rxn_vis.py +532 -0
- synkit-1.3.1a0/synkit/Vis/rxn_vis.py +0 -159
- {synkit-1.3.1a0 → synkit-1.3.2}/LICENSE +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/README.md +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Construct/DAG/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Construct/DAG/crn.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Construct/DAG/mod_crn.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Construct/DAG/syncrn.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Construct/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Construct/abstract.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Construct/arity.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Construct/builder.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Construct/derivation.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Construct/flattener.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Construct/keys.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Construct/mixtures.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Construct/smiles.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Construct/state.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Construct/strategy.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Construct/worker.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Pathway/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Pathway/_adapter.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Pathway/pathfinder.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Pathway/reachability.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Pathway/realizability.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Petrinet/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Petrinet/analyzer.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Petrinet/net.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Petrinet/persistence.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Petrinet/semiflows.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Petrinet/structure.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Props/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Props/dynamics.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Props/helper.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Props/stoich.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Props/thermo.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Query/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Query/kegg_api.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Query/kegg_extract.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Query/kegg_impute.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Structure/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Structure/reaction.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Structure/rule.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Structure/species.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Structure/syncrn.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Symmetry/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Symmetry/_common.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Symmetry/_ir.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Symmetry/automorphism.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Symmetry/canon.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Symmetry/isomorphism.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Symmetry/symmetry.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Symmetry/wl_canon.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Visualize/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Visualize/crn_vis.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Visualize/labels.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Visualize/layout.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Visualize/palette.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Visualize/validation.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/Visualize/vis.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/dev_crn/Structure/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/dev_crn/Structure/backend.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/dev_crn/Structure/conversion.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/dev_crn/Structure/hyperedge.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/dev_crn/Structure/hypergraph.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/dev_crn/Structure/rxn.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/dev_crn/Symmetry/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/dev_crn/Symmetry/automorphism.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/dev_crn/Symmetry/canon.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/dev_crn/Symmetry/wl_canon.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/dev_crn/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/dev_crn/configs/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/dev_crn/configs/loader.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/dev_crn/configs/models.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/dev_crn/constants.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/dev_crn/crn_formula.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/dev_crn/deficiency.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/dev_crn/enumerator.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/dev_crn/exceptions.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/dev_crn/explorer.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/dev_crn/helpers.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/dev_crn/injectivity.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/dev_crn/motif.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/dev_crn/network.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/dev_crn/pathway.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/dev_crn/properties.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/dev_crn/reaction.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/dev_crn/utils.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/CRN/dev_crn/viz.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Chem/Cluster/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Chem/Cluster/butina.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Chem/Fingerprint/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Chem/Fingerprint/fp_calculator.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Chem/Fingerprint/smiles_featurizer.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Chem/Fingerprint/transformation_fp.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Chem/Molecule/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Chem/Molecule/descriptors.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Chem/Molecule/formula.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Chem/Molecule/graph_annotator.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Chem/Molecule/standardize.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Chem/Molecule/valence.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Chem/Reaction/Mapper/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Chem/Reaction/Mapper/wl_mapper.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Chem/Reaction/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Chem/Reaction/aam_validator.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Chem/Reaction/balance_check.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Chem/Reaction/canon_rsmi.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Chem/Reaction/cleaning.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Chem/Reaction/deionize.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Chem/Reaction/fix_aam.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Chem/Reaction/neutralize.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Chem/Reaction/radical_wildcard.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Chem/Reaction/tautomerize.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Chem/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Chem/utils.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Data/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Data/gen_partial_aam.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Canon/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Canon/canon_algs.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Canon/canon_graph.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Canon/nauty.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Context/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Context/hier_context.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Context/radius_expand.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Feature/Descriptors/topology.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Feature/Fingerprint/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Feature/Fingerprint/wl_rxn_fps.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Feature/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Feature/graph_descriptors.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Feature/graph_fps.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Feature/graph_signature.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Feature/hash_fps.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Feature/morgan_fps.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Feature/path_fps.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Feature/wl_hash.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Hyrogen/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Hyrogen/_misc.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Hyrogen/hcomplete.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Hyrogen/hextend.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/ITS/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/ITS/its_builder.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/ITS/its_construction.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/ITS/its_decompose.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/ITS/its_destruction.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/ITS/its_expand.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/ITS/its_relabel.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/ITS/its_reverter.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/ITS/normalize_aam.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/ITS/partial_its.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/ITS/rc_extractor.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/MTG/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/MTG/group_comp.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/MTG/groupoid.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/MTG/mcs_matcher.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/MTG/mtg.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/MTG/mtg_explore.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/MTG/utils.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Matcher/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Matcher/approx_mcs.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Matcher/auto_est.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Matcher/automorphism.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Matcher/batch_cluster.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Matcher/dedup_matches.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Matcher/graph_cluster.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Matcher/graph_matcher.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Matcher/graph_morphism.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Matcher/mcs_matcher.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Matcher/multi_turbo_iso.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Matcher/orbit.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Matcher/partial_matcher.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Matcher/sing.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Matcher/subgraph_matcher.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Matcher/turbo_iso.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Matcher/wl_sel.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Wildcard/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Wildcard/fuse_graph.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Wildcard/graph_wc.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Wildcard/its_merge.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Wildcard/radwc.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Wildcard/wc_matcher.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/Wildcard/wildcard.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/canon_graph.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/syn_graph.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Graph/utils.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/IO/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/IO/chem_converter.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/IO/combinatorial/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/IO/combinatorial/gml_to_graph.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/IO/combinatorial/graph_to_gml.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/IO/combinatorial/graph_to_smarts.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/IO/combinatorial/smarts_expander.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/IO/combinatorial/smarts_generalizer.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/IO/combinatorial/smarts_to_graph.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/IO/data_io.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/IO/data_process.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/IO/debug.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/IO/dg_to_gml.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/IO/gml_to_nx.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/IO/graph_to_mol.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/IO/nx_to_gml.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/IO/smiles_to_id.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Rule/Apply/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Rule/Apply/reactor_rule.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Rule/Apply/retro_reactor.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Rule/Apply/rule_matcher.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Rule/Apply/rule_rbl.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Rule/Compose/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Rule/Compose/compose_rule.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Rule/Compose/rule_compose.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Rule/Compose/rule_mapping.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Rule/Compose/seq_comp.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Rule/Compose/valence_constrain.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Rule/Modify/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Rule/Modify/implict_rule.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Rule/Modify/longest_path.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Rule/Modify/molecule_rule.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Rule/Modify/prune_templates.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Rule/Modify/rule_utils.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Rule/Modify/strip_rule.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Rule/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Rule/syn_rule.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Synthesis/MSR/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Synthesis/MSR/multi_steps.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Synthesis/MSR/path_finder.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Synthesis/Metrics/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Synthesis/Metrics/_base.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Synthesis/Metrics/_plot.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Synthesis/Metrics/_ranking.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Synthesis/Reactor/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Synthesis/Reactor/batch_reactor.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Synthesis/Reactor/benchmark.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Synthesis/Reactor/imba_engine.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Synthesis/Reactor/mod_aam.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Synthesis/Reactor/mod_reactor.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Synthesis/Reactor/partial_engine.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Synthesis/Reactor/post_syn.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Synthesis/Reactor/rule_filter.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Synthesis/Reactor/single_predictor.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Synthesis/Reactor/strategy.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Synthesis/Reactor/syn_reactor.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Synthesis/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Synthesis/reactor_utils.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Utils/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Utils/utils.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Vis/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Vis/chemical_space.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Vis/crn_vis.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Vis/embedding.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Vis/graph_visualizer.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Vis/pdf_writer.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/Vis/rule_vis.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/__init__.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/examples.py +0 -0
- {synkit-1.3.1a0 → synkit-1.3.2}/synkit/version.py +0 -0
|
@@ -426,7 +426,7 @@ def parse_module_reaction_directions(
|
|
|
426
426
|
in_reaction = False
|
|
427
427
|
for line in text.splitlines():
|
|
428
428
|
if line.startswith("REACTION"):
|
|
429
|
-
payload = line[len("REACTION"):].strip()
|
|
429
|
+
payload = line[len("REACTION") :].strip() # noqa
|
|
430
430
|
in_reaction = True
|
|
431
431
|
elif in_reaction and (line.startswith(" ") or line.startswith("\t")):
|
|
432
432
|
payload = line.strip()
|
|
@@ -192,7 +192,6 @@ class AtomFeatureExtractor:
|
|
|
192
192
|
"partial_charge": round(float(gcharge), 3),
|
|
193
193
|
"hybridization": str(atom.GetHybridization()),
|
|
194
194
|
"in_ring": bool(atom.IsInRing()),
|
|
195
|
-
"implicit_hcount": int(atom.GetNumImplicitHs()),
|
|
196
195
|
"neighbors": neighbor_symbols,
|
|
197
196
|
"atom_map": atom_map,
|
|
198
197
|
}
|
|
@@ -72,7 +72,34 @@ class Standardize:
|
|
|
72
72
|
return valid
|
|
73
73
|
|
|
74
74
|
@staticmethod
|
|
75
|
-
def
|
|
75
|
+
def _parse_molecule_fragments(
|
|
76
|
+
smiles_list: List[str],
|
|
77
|
+
) -> Tuple[List[Chem.Mol], bool]:
|
|
78
|
+
"""Parse and sanitize SMILES fragments.
|
|
79
|
+
|
|
80
|
+
:param smiles_list: List of SMILES strings to validate.
|
|
81
|
+
:type smiles_list: List[str]
|
|
82
|
+
:returns: Tuple of valid molecules and whether any fragment was invalid.
|
|
83
|
+
:rtype: Tuple[List[rdkit.Chem.Mol], bool]
|
|
84
|
+
"""
|
|
85
|
+
valid: List[Chem.Mol] = []
|
|
86
|
+
had_invalid = False
|
|
87
|
+
for smi in smiles_list:
|
|
88
|
+
mol = Chem.MolFromSmiles(smi, sanitize=False)
|
|
89
|
+
if mol:
|
|
90
|
+
try:
|
|
91
|
+
Chem.SanitizeMol(mol)
|
|
92
|
+
valid.append(mol)
|
|
93
|
+
except Exception:
|
|
94
|
+
had_invalid = True
|
|
95
|
+
else:
|
|
96
|
+
had_invalid = True
|
|
97
|
+
return valid, had_invalid
|
|
98
|
+
|
|
99
|
+
@staticmethod
|
|
100
|
+
def standardize_rsmi(
|
|
101
|
+
rsmi: str, stereo: bool = False, remove_invalid: bool = True
|
|
102
|
+
) -> Optional[str]:
|
|
76
103
|
"""
|
|
77
104
|
Normalize a reaction SMILES: validate molecules, sort fragments, optionally keep stereo.
|
|
78
105
|
|
|
@@ -80,6 +107,10 @@ class Standardize:
|
|
|
80
107
|
:type rsmi: str
|
|
81
108
|
:param stereo: If True, include stereochemistry in the output. Defaults to False.
|
|
82
109
|
:type stereo: bool
|
|
110
|
+
:param remove_invalid: If True, drop invalid fragments and standardize
|
|
111
|
+
remaining molecules. If False, return None when any invalid fragment
|
|
112
|
+
exists. Defaults to True.
|
|
113
|
+
:type remove_invalid: bool
|
|
83
114
|
:returns: Standardized reaction SMILES or None if no valid molecules remain.
|
|
84
115
|
:rtype: Optional[str]
|
|
85
116
|
:raises ValueError: If the input format is invalid.
|
|
@@ -91,8 +122,15 @@ class Standardize:
|
|
|
91
122
|
"Invalid reaction SMILES format. Expected 'reactants>>products'."
|
|
92
123
|
)
|
|
93
124
|
|
|
94
|
-
react_mols = Standardize.
|
|
95
|
-
|
|
125
|
+
react_mols, react_invalid = Standardize._parse_molecule_fragments(
|
|
126
|
+
react_str.split(".")
|
|
127
|
+
)
|
|
128
|
+
prod_mols, prod_invalid = Standardize._parse_molecule_fragments(
|
|
129
|
+
prod_str.split(".")
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
if not remove_invalid and (react_invalid or prod_invalid):
|
|
133
|
+
return None
|
|
96
134
|
|
|
97
135
|
if not react_mols or not prod_mols:
|
|
98
136
|
return None
|
|
@@ -107,7 +145,11 @@ class Standardize:
|
|
|
107
145
|
return f"{sorted_react}>>{sorted_prod}"
|
|
108
146
|
|
|
109
147
|
def fit(
|
|
110
|
-
self,
|
|
148
|
+
self,
|
|
149
|
+
rsmi: str,
|
|
150
|
+
remove_aam: bool = True,
|
|
151
|
+
ignore_stereo: bool = True,
|
|
152
|
+
remove_invalid: bool = True,
|
|
111
153
|
) -> Optional[str]:
|
|
112
154
|
"""
|
|
113
155
|
Full standardization pipeline: strip atom‑mapping, normalize SMILES, fix hydrogen notation.
|
|
@@ -118,16 +160,22 @@ class Standardize:
|
|
|
118
160
|
:type remove_aam: bool
|
|
119
161
|
:param ignore_stereo: If True, drop stereochemistry. Defaults to True.
|
|
120
162
|
:type ignore_stereo: bool
|
|
163
|
+
:param remove_invalid: If True, drop invalid fragments and standardize
|
|
164
|
+
remaining molecules. If False, return None when any invalid fragment
|
|
165
|
+
exists. Defaults to True.
|
|
166
|
+
:type remove_invalid: bool
|
|
121
167
|
:returns: The standardized reaction SMILES, or None if standardization fails.
|
|
122
168
|
:rtype: Optional[str]
|
|
123
169
|
"""
|
|
124
|
-
|
|
125
|
-
rsmi =
|
|
126
|
-
|
|
127
|
-
std = self.standardize_rsmi(rsmi, stereo=not ignore_stereo)
|
|
170
|
+
std = self.standardize_rsmi(
|
|
171
|
+
rsmi, stereo=not ignore_stereo, remove_invalid=remove_invalid
|
|
172
|
+
)
|
|
128
173
|
if std is None:
|
|
129
174
|
return None
|
|
130
175
|
|
|
176
|
+
if remove_aam:
|
|
177
|
+
std = self.remove_atom_mapping(std)
|
|
178
|
+
|
|
131
179
|
# Format any double‑hydrogen notation
|
|
132
180
|
return std.replace("[HH]", "[H][H]")
|
|
133
181
|
|
|
@@ -46,7 +46,7 @@ class MolToGraph:
|
|
|
46
46
|
.. code-block:: python
|
|
47
47
|
|
|
48
48
|
from rdkit import Chem
|
|
49
|
-
from synkit.
|
|
49
|
+
from synkit.IO.mol_to_graph import MolToGraph
|
|
50
50
|
|
|
51
51
|
mol = Chem.MolFromSmiles("c1cc[nH]c1")
|
|
52
52
|
graph = MolToGraph(attr_profile="minimal").transform(mol)
|
|
@@ -199,6 +199,7 @@ class MolToGraph:
|
|
|
199
199
|
atom,
|
|
200
200
|
props,
|
|
201
201
|
oxidation_state=oxidation_states.get(atom.GetIdx()),
|
|
202
|
+
profile=self.attr_profile,
|
|
202
203
|
)
|
|
203
204
|
except Exception as exc:
|
|
204
205
|
logger.debug(
|
|
@@ -209,6 +210,7 @@ class MolToGraph:
|
|
|
209
210
|
props = self._gather_atom_properties(
|
|
210
211
|
atom,
|
|
211
212
|
oxidation_state=oxidation_states.get(atom.GetIdx()),
|
|
213
|
+
profile=self.attr_profile,
|
|
212
214
|
)
|
|
213
215
|
|
|
214
216
|
if self.node_attrs is not None:
|
|
@@ -899,55 +901,78 @@ class MolToGraph:
|
|
|
899
901
|
atom: Chem.Atom,
|
|
900
902
|
props: Dict[str, Any],
|
|
901
903
|
oxidation_state: Optional[float] = None,
|
|
904
|
+
*,
|
|
905
|
+
profile: str = "full",
|
|
902
906
|
) -> Dict[str, Any]:
|
|
903
|
-
"""Add
|
|
907
|
+
"""Add electron-bookkeeping fields to existing atom attributes.
|
|
908
|
+
|
|
909
|
+
For both profiles sets ``oxidation_state``, ``radical``,
|
|
910
|
+
``available_lp``, and the backward-compatible ``lone_pairs`` alias.
|
|
911
|
+
The ``"full"`` profile additionally sets ``bond_order_sum``,
|
|
912
|
+
``lp_bond_order_sum``, ``valence_electrons``,
|
|
913
|
+
``estimated_lone_pairs``, and ``available_lone_pairs``.
|
|
904
914
|
|
|
905
915
|
:param atom: RDKit atom.
|
|
906
916
|
:type atom: Chem.Atom
|
|
907
|
-
:param props: Existing atom attributes
|
|
917
|
+
:param props: Existing atom attributes from
|
|
918
|
+
:class:`~synkit.Chem.Molecule.atom_features.AtomFeatureExtractor`.
|
|
908
919
|
:type props: Dict[str, Any]
|
|
909
|
-
:param oxidation_state:
|
|
920
|
+
:param oxidation_state: Pre-computed oxidation state, or ``None``.
|
|
910
921
|
:type oxidation_state: Optional[float]
|
|
911
|
-
:
|
|
922
|
+
:param profile: Feature profile — ``"minimal"`` or ``"full"``.
|
|
923
|
+
:type profile: str
|
|
924
|
+
:returns: Augmented atom attributes dict.
|
|
912
925
|
:rtype: Dict[str, Any]
|
|
913
926
|
"""
|
|
914
927
|
new_props = dict(props)
|
|
915
928
|
|
|
916
|
-
raw_bond_order_sum = cls._safe_bond_order_sum(atom)
|
|
917
|
-
lp_bond_order_sum = cls._bond_order_sum_for_lone_pairs(atom)
|
|
918
|
-
valence_electrons = cls._safe_valence_electrons(atom)
|
|
919
|
-
|
|
920
929
|
estimated_lone_pairs = cls.estimate_lone_pairs(atom)
|
|
921
930
|
available_lone_pairs = cls.estimate_available_lone_pairs(atom)
|
|
922
931
|
|
|
923
|
-
new_props["bond_order_sum"] = round(raw_bond_order_sum, 3)
|
|
924
|
-
new_props["lp_bond_order_sum"] = round(lp_bond_order_sum, 3)
|
|
925
|
-
new_props["valence_electrons"] = valence_electrons
|
|
926
932
|
new_props["oxidation_state"] = (
|
|
927
933
|
None if oxidation_state is None else round(float(oxidation_state), 3)
|
|
928
934
|
)
|
|
929
|
-
|
|
930
|
-
new_props["estimated_lone_pairs"] = estimated_lone_pairs
|
|
931
|
-
new_props["available_lone_pairs"] = available_lone_pairs
|
|
935
|
+
new_props["radical"] = int(atom.GetNumRadicalElectrons())
|
|
932
936
|
new_props["available_lp"] = available_lone_pairs > 0
|
|
933
|
-
|
|
934
937
|
# Backward-compatible field used by SynEltra.
|
|
935
938
|
new_props["lone_pairs"] = estimated_lone_pairs
|
|
936
939
|
|
|
940
|
+
if profile == "full":
|
|
941
|
+
new_props["bond_order_sum"] = round(cls._safe_bond_order_sum(atom), 3)
|
|
942
|
+
new_props["lp_bond_order_sum"] = round(
|
|
943
|
+
cls._bond_order_sum_for_lone_pairs(atom), 3
|
|
944
|
+
)
|
|
945
|
+
new_props["valence_electrons"] = cls._safe_valence_electrons(atom)
|
|
946
|
+
new_props["estimated_lone_pairs"] = estimated_lone_pairs
|
|
947
|
+
new_props["available_lone_pairs"] = available_lone_pairs
|
|
948
|
+
|
|
937
949
|
return new_props
|
|
938
950
|
|
|
939
951
|
@staticmethod
|
|
940
952
|
def _gather_atom_properties(
|
|
941
953
|
atom: Chem.Atom,
|
|
942
954
|
oxidation_state: Optional[float] = None,
|
|
955
|
+
*,
|
|
956
|
+
profile: str = "full",
|
|
943
957
|
) -> Dict[str, Any]:
|
|
944
958
|
"""Collect fallback atom-level node attributes.
|
|
945
959
|
|
|
960
|
+
Minimal profile keys: ``element``, ``aromatic``, ``hcount``,
|
|
961
|
+
``charge``, ``radical``, ``isomer``, ``partial_charge``,
|
|
962
|
+
``hybridization``, ``in_ring``, ``neighbors``, ``atom_map``,
|
|
963
|
+
``oxidation_state``, ``available_lp``, ``lone_pairs``.
|
|
964
|
+
|
|
965
|
+
Full profile additionally includes ``bond_order_sum``,
|
|
966
|
+
``lp_bond_order_sum``, ``valence_electrons``,
|
|
967
|
+
``estimated_lone_pairs``, ``available_lone_pairs``.
|
|
968
|
+
|
|
946
969
|
:param atom: RDKit atom.
|
|
947
970
|
:type atom: Chem.Atom
|
|
948
|
-
:param oxidation_state:
|
|
971
|
+
:param oxidation_state: Pre-computed oxidation state, or ``None``.
|
|
949
972
|
:type oxidation_state: Optional[float]
|
|
950
|
-
:
|
|
973
|
+
:param profile: Feature profile — ``"minimal"`` or ``"full"``.
|
|
974
|
+
:type profile: str
|
|
975
|
+
:returns: Node attribute dict.
|
|
951
976
|
:rtype: Dict[str, Any]
|
|
952
977
|
"""
|
|
953
978
|
try:
|
|
@@ -965,14 +990,10 @@ class MolToGraph:
|
|
|
965
990
|
neighbors = []
|
|
966
991
|
|
|
967
992
|
atom_map = MolToGraph._safe_atom_map(atom)
|
|
968
|
-
|
|
969
|
-
raw_bond_order_sum = round(MolToGraph._safe_bond_order_sum(atom), 3)
|
|
970
|
-
lp_bond_order_sum = round(MolToGraph._bond_order_sum_for_lone_pairs(atom), 3)
|
|
971
|
-
valence_electrons = MolToGraph._safe_valence_electrons(atom)
|
|
972
993
|
estimated_lone_pairs = MolToGraph.estimate_lone_pairs(atom)
|
|
973
994
|
available_lone_pairs = MolToGraph.estimate_available_lone_pairs(atom)
|
|
974
995
|
|
|
975
|
-
|
|
996
|
+
props: Dict[str, Any] = {
|
|
976
997
|
"element": atom.GetSymbol(),
|
|
977
998
|
"aromatic": atom.GetIsAromatic(),
|
|
978
999
|
"hcount": atom.GetTotalNumHs(),
|
|
@@ -982,21 +1003,26 @@ class MolToGraph:
|
|
|
982
1003
|
"partial_charge": gcharge,
|
|
983
1004
|
"hybridization": str(atom.GetHybridization()),
|
|
984
1005
|
"in_ring": atom.IsInRing(),
|
|
985
|
-
"implicit_hcount": atom.GetNumImplicitHs(),
|
|
986
1006
|
"neighbors": neighbors,
|
|
987
1007
|
"atom_map": atom_map,
|
|
988
|
-
"bond_order_sum": raw_bond_order_sum,
|
|
989
|
-
"lp_bond_order_sum": lp_bond_order_sum,
|
|
990
|
-
"valence_electrons": valence_electrons,
|
|
991
1008
|
"oxidation_state": (
|
|
992
1009
|
None if oxidation_state is None else round(float(oxidation_state), 3)
|
|
993
1010
|
),
|
|
994
|
-
"estimated_lone_pairs": estimated_lone_pairs,
|
|
995
|
-
"available_lone_pairs": available_lone_pairs,
|
|
996
1011
|
"available_lp": available_lone_pairs > 0,
|
|
997
1012
|
"lone_pairs": estimated_lone_pairs,
|
|
998
1013
|
}
|
|
999
1014
|
|
|
1015
|
+
if profile == "full":
|
|
1016
|
+
props["bond_order_sum"] = round(MolToGraph._safe_bond_order_sum(atom), 3)
|
|
1017
|
+
props["lp_bond_order_sum"] = round(
|
|
1018
|
+
MolToGraph._bond_order_sum_for_lone_pairs(atom), 3
|
|
1019
|
+
)
|
|
1020
|
+
props["valence_electrons"] = MolToGraph._safe_valence_electrons(atom)
|
|
1021
|
+
props["estimated_lone_pairs"] = estimated_lone_pairs
|
|
1022
|
+
props["available_lone_pairs"] = available_lone_pairs
|
|
1023
|
+
|
|
1024
|
+
return props
|
|
1025
|
+
|
|
1000
1026
|
@staticmethod
|
|
1001
1027
|
def _gather_bond_properties(
|
|
1002
1028
|
bond: Chem.Bond,
|
|
@@ -1197,11 +1223,18 @@ class MolToGraph:
|
|
|
1197
1223
|
) -> nx.Graph:
|
|
1198
1224
|
"""Create a lightweight graph with corrected lone-pair fields.
|
|
1199
1225
|
|
|
1226
|
+
Node attributes: ``element``, ``aromatic``, ``hcount``, ``charge``,
|
|
1227
|
+
``radical``, ``neighbors``, ``atom_map``, ``oxidation_state``,
|
|
1228
|
+
``available_lp``, ``lone_pairs``. Edge attributes: ``order``,
|
|
1229
|
+
``bond_type``, ``aromatic``, ``kekule_order``, ``kekule_bond_type``.
|
|
1230
|
+
|
|
1200
1231
|
:param mol: RDKit molecule.
|
|
1201
1232
|
:type mol: Chem.Mol
|
|
1202
|
-
:param drop_non_aam: If ``True``, remove
|
|
1233
|
+
:param drop_non_aam: If ``True``, remove atoms with atom-map ``0``.
|
|
1203
1234
|
:type drop_non_aam: bool
|
|
1204
|
-
:param use_index_as_atom_map: If ``True``, use atom
|
|
1235
|
+
:param use_index_as_atom_map: If ``True``, use atom-map numbers as node
|
|
1236
|
+
IDs for mapped atoms; unmapped atoms fall back to
|
|
1237
|
+
``atom.GetIdx() + 1``.
|
|
1205
1238
|
:type use_index_as_atom_map: bool
|
|
1206
1239
|
:returns: Lightweight molecular graph.
|
|
1207
1240
|
:rtype: nx.Graph
|
|
@@ -1235,16 +1268,12 @@ class MolToGraph:
|
|
|
1235
1268
|
aromatic=atom.GetIsAromatic(),
|
|
1236
1269
|
hcount=atom.GetTotalNumHs(),
|
|
1237
1270
|
charge=atom.GetFormalCharge(),
|
|
1271
|
+
radical=atom.GetNumRadicalElectrons(),
|
|
1238
1272
|
neighbors=neighbors,
|
|
1239
1273
|
atom_map=atom_map,
|
|
1240
|
-
bond_order_sum=round(cls._safe_bond_order_sum(atom), 3),
|
|
1241
|
-
lp_bond_order_sum=round(cls._bond_order_sum_for_lone_pairs(atom), 3),
|
|
1242
|
-
valence_electrons=cls._safe_valence_electrons(atom),
|
|
1243
1274
|
oxidation_state=round(
|
|
1244
1275
|
float(oxidation_states.get(atom.GetIdx(), 0.0)), 3
|
|
1245
1276
|
),
|
|
1246
|
-
estimated_lone_pairs=estimated_lone_pairs,
|
|
1247
|
-
available_lone_pairs=available_lone_pairs,
|
|
1248
1277
|
available_lp=available_lone_pairs > 0,
|
|
1249
1278
|
lone_pairs=estimated_lone_pairs,
|
|
1250
1279
|
)
|
|
@@ -1322,8 +1351,8 @@ class MolToGraph:
|
|
|
1322
1351
|
def _create_detailed_graph(
|
|
1323
1352
|
cls,
|
|
1324
1353
|
mol: Chem.Mol,
|
|
1325
|
-
drop_non_aam: bool =
|
|
1326
|
-
use_index_as_atom_map: bool =
|
|
1354
|
+
drop_non_aam: bool = False,
|
|
1355
|
+
use_index_as_atom_map: bool = False,
|
|
1327
1356
|
) -> nx.Graph:
|
|
1328
1357
|
"""Create a detailed graph with fallback atom and bond attributes.
|
|
1329
1358
|
|