synkit 1.6.1__tar.gz → 1.6.2b1__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.6.1 → synkit-1.6.2b1}/.gitignore +4 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/PKG-INFO +1 -1
- {synkit-1.6.1 → synkit-1.6.2b1}/pyproject.toml +13 -4
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Construct/DAG/syncrn.py +1 -1
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Construct/abstract.py +52 -65
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Construct/worker.py +1 -1
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Pathway/_adapter.py +24 -33
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Pathway/pathfinder.py +16 -24
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Pathway/reachability.py +52 -69
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Pathway/realizability.py +87 -128
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Petrinet/analyzer.py +53 -73
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Petrinet/net.py +91 -131
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Petrinet/semiflows.py +32 -40
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Petrinet/structure.py +16 -24
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Props/dynamics.py +59 -74
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Props/stoich.py +42 -63
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Props/thermo.py +24 -32
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Query/kegg_api.py +11 -14
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Query/kegg_extract.py +63 -79
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Query/kegg_impute.py +35 -44
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Query/kegg_parse.py +53 -73
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Structure/reaction.py +14 -21
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Structure/rule.py +4 -6
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Structure/species.py +2 -3
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Structure/syncrn.py +121 -163
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Symmetry/_common.py +63 -90
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Symmetry/_ir.py +41 -60
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Symmetry/automorphism.py +33 -46
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Symmetry/canon.py +43 -58
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Symmetry/isomorphism.py +31 -42
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Symmetry/wl_canon.py +95 -124
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Visualize/layout.py +42 -63
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Visualize/vis.py +70 -105
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/dev_crn/Structure/backend.py +2 -3
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/dev_crn/Structure/conversion.py +22 -33
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/dev_crn/Structure/hyperedge.py +3 -4
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/dev_crn/Structure/hypergraph.py +22 -39
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/dev_crn/Structure/rxn.py +15 -20
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/dev_crn/Symmetry/automorphism.py +19 -29
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/dev_crn/Symmetry/wl_canon.py +5 -5
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/dev_crn/configs/loader.py +13 -13
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/dev_crn/crn_formula.py +33 -48
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/dev_crn/deficiency.py +67 -89
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/dev_crn/enumerator.py +3 -4
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/dev_crn/explorer.py +1 -1
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/dev_crn/helpers.py +4 -6
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/dev_crn/injectivity.py +58 -54
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/dev_crn/network.py +27 -40
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/dev_crn/pathway.py +10 -15
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/dev_crn/properties.py +3 -4
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/dev_crn/reaction.py +10 -15
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/dev_crn/utils.py +3 -4
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/dev_crn/viz.py +19 -27
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Cluster/butina.py +6 -5
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Fingerprint/fp_calculator.py +4 -4
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Fingerprint/smiles_featurizer.py +11 -11
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Fingerprint/transformation_fp.py +4 -4
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Molecule/atom_features.py +12 -18
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Molecule/descriptors.py +32 -44
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Molecule/graph_annotator.py +3 -4
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Molecule/standardize.py +83 -123
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Molecule/valence.py +14 -18
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/Mapper/aam_validator.py +5 -5
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/Mapper/chem/its.py +14 -24
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/Mapper/exact/branching.py +21 -29
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/Mapper/exact/certificate.py +18 -26
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/Mapper/exact/enumerate.py +17 -20
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/Mapper/exact/exhaustive.py +14 -22
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/Mapper/exact/kernel.py +35 -44
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/Mapper/exact/milp.py +17 -23
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/Mapper/graph/automorphism.py +8 -11
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/Mapper/graph/blockcut.py +12 -18
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/Mapper/graph/refine.py +25 -35
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/Mapper/io/idxmapstr.py +9 -14
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/Mapper/slap/lap.py +22 -36
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/balance_check.py +6 -6
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/canon_rsmi.py +6 -8
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/cleaning.py +3 -11
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/deionize.py +6 -6
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/explicit_h_audit.py +5 -10
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/fix_aam.py +3 -3
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/neutralize.py +7 -7
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/radical_wildcard.py +8 -9
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/standardize.py +8 -10
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/tautomerize.py +5 -5
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/utils.py +18 -18
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Data/gen_partial_aam.py +3 -3
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Canon/canon_algs.py +39 -65
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Canon/canon_graph.py +34 -42
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Context/hier_context.py +63 -50
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Context/radius_expand.py +72 -62
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Feature/Descriptors/topology.py +14 -11
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Feature/Fingerprint/wl_rxn_fps.py +13 -22
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Feature/graph_descriptors.py +77 -69
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Feature/graph_fps.py +16 -15
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Feature/graph_signature.py +28 -26
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Feature/hash_fps.py +36 -31
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Feature/morgan_fps.py +18 -15
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Feature/path_fps.py +17 -15
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Feature/wl_hash.py +8 -10
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Fusion/candidate.py +85 -4
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Fusion/constructor.py +21 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Fusion/identity.py +1 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Fusion/interface.py +113 -25
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Fusion/search.py +1 -1
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Hyrogen/_misc.py +64 -81
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Hyrogen/hcomplete.py +98 -65
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Hyrogen/hextend.py +67 -54
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/ITS/its_builder.py +9 -6
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/ITS/its_construction.py +26 -37
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/ITS/its_decompose.py +26 -29
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/ITS/its_destruction.py +18 -22
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/ITS/its_expand.py +16 -15
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/ITS/its_relabel.py +7 -6
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/ITS/its_reverter.py +21 -30
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/ITS/normalize_aam.py +27 -24
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/ITS/partial_its.py +6 -6
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/ITS/rc_extractor.py +24 -30
- synkit-1.6.2b1/synkit/Graph/MTG/__init__.py +58 -0
- synkit-1.6.2b1/synkit/Graph/MTG/history.py +661 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/MTG/mcs_matcher.py +16 -18
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/MTG/mtg_explore.py +4 -4
- synkit-1.6.2b1/synkit/Graph/MTG/process.py +562 -0
- synkit-1.6.2b1/synkit/Graph/MTG/series_parallel.py +107 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/MTG/utils.py +24 -25
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Matcher/approx_mcs.py +106 -128
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Matcher/auto_est.py +96 -139
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Matcher/automorphism.py +58 -51
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Matcher/batch_cluster.py +54 -45
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Matcher/dedup_matches.py +32 -32
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Matcher/graph_cluster.py +45 -41
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Matcher/graph_matcher.py +92 -76
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Matcher/graph_morphism.py +130 -85
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Matcher/mcs_matcher.py +104 -148
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Matcher/multi_turbo_iso.py +23 -19
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Matcher/orbit.py +67 -103
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Matcher/partial_matcher.py +146 -207
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Matcher/sing.py +91 -63
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Matcher/subgraph_matcher.py +241 -128
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Matcher/turbo_iso.py +81 -18
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Matcher/wl_sel.py +93 -68
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Mech/conversion.py +55 -81
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Mech/conversion_debug.py +3 -3
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Mech/lwg_editor.py +10 -7
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Mech/lwg_ops.py +7 -7
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Morphism/__init__.py +22 -0
- synkit-1.6.2b1/synkit/Graph/Morphism/llg.py +918 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Wildcard/fuse_graph.py +19 -19
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Wildcard/graph_wc.py +25 -36
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Wildcard/its_merge.py +29 -41
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Wildcard/radwc.py +10 -13
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Wildcard/wc_matcher.py +44 -60
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Wildcard/wildcard.py +15 -20
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/syn_graph.py +32 -30
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/utils.py +33 -48
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/IO/chem_converter.py +7 -9
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/IO/combinatorial/gml_to_graph.py +39 -70
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/IO/combinatorial/graph_to_gml.py +25 -36
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/IO/combinatorial/graph_to_smarts.py +19 -22
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/IO/combinatorial/smarts_expander.py +10 -15
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/IO/combinatorial/smarts_generalizer.py +3 -4
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/IO/combinatorial/smarts_to_graph.py +22 -26
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/IO/data_io.py +10 -10
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/IO/data_process.py +12 -10
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/IO/debug.py +2 -2
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/IO/gml_to_nx.py +4 -5
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/IO/graph_to_mol.py +2 -2
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/IO/mol_to_graph.py +16 -16
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/IO/mol_to_graph_chemistry.py +16 -16
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/IO/nx_to_gml.py +5 -5
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/IO/smiles_to_id.py +23 -18
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Mechanism/benchmark.py +1 -1
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Mechanism/model.py +63 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Mechanism/replay.py +363 -15
- synkit-1.6.2b1/synkit/Rule/Apply/__init__.py +35 -0
- synkit-1.6.2b1/synkit/Rule/Apply/dpo.py +965 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Rule/Apply/rule_matcher.py +8 -8
- synkit-1.6.2b1/synkit/Rule/Compose/__init__.py +106 -0
- synkit-1.6.2b1/synkit/Rule/Compose/composition.py +848 -0
- synkit-1.6.2b1/synkit/Rule/Compose/laws.py +397 -0
- synkit-1.6.2b1/synkit/Rule/Compose/search.py +748 -0
- synkit-1.6.2b1/synkit/Rule/Compose/synrule.py +170 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Rule/Modify/implict_rule.py +13 -22
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Rule/Modify/longest_path.py +8 -8
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Rule/Modify/molecule_rule.py +23 -20
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Rule/Modify/prune_templates.py +18 -15
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Rule/Modify/rule_utils.py +10 -9
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Rule/generic_stereo.py +2 -2
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Rule/syn_rule.py +92 -53
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Synthesis/MSR/path_finder.py +18 -15
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Synthesis/Metrics/_base.py +13 -10
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Synthesis/Metrics/_plot.py +29 -21
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Synthesis/Metrics/_ranking.py +57 -51
- synkit-1.6.2b1/synkit/Synthesis/RBL/__init__.py +80 -0
- synkit-1.6.2b1/synkit/Synthesis/RBL/engine.py +1249 -0
- synkit-1.6.2b1/synkit/Synthesis/RBL/matching.py +652 -0
- synkit-1.6.2b1/synkit/Synthesis/RBL/overlap.py +336 -0
- synkit-1.6.2b1/synkit/Synthesis/RBL/pipeline.py +371 -0
- synkit-1.6.2b1/synkit/Synthesis/RBL/policy.py +139 -0
- synkit-1.6.2b1/synkit/Synthesis/RBL/proof.py +370 -0
- synkit-1.6.1/synkit/Synthesis/Reactor/rbl_reaction.py → synkit-1.6.2b1/synkit/Synthesis/RBL/reaction.py +205 -44
- synkit-1.6.2b1/synkit/Synthesis/RBL/state.py +169 -0
- synkit-1.6.2b1/synkit/Synthesis/RBL/validation.py +1060 -0
- synkit-1.6.2b1/synkit/Synthesis/Reactor/__init__.py +60 -0
- synkit-1.6.2b1/synkit/Synthesis/Reactor/core/__init__.py +1 -0
- synkit-1.6.1/synkit/Synthesis/Reactor/syn_reactor.py → synkit-1.6.2b1/synkit/Synthesis/Reactor/core/engine.py +160 -192
- synkit-1.6.1/synkit/Synthesis/Reactor/product_state.py → synkit-1.6.2b1/synkit/Synthesis/Reactor/core/product.py +180 -30
- synkit-1.6.1/synkit/Synthesis/Reactor/graph_rewrite.py → synkit-1.6.2b1/synkit/Synthesis/Reactor/core/rewrite.py +72 -16
- {synkit-1.6.1/synkit/Synthesis/Reactor → synkit-1.6.2b1/synkit/Synthesis/Reactor/core}/strategy.py +7 -14
- synkit-1.6.2b1/synkit/Synthesis/Reactor/matching/__init__.py +1 -0
- synkit-1.6.1/synkit/Synthesis/Reactor/reactor_matching.py → synkit-1.6.2b1/synkit/Synthesis/Reactor/matching/mixin.py +67 -122
- synkit-1.6.1/synkit/Synthesis/Reactor/matching_policy.py → synkit-1.6.2b1/synkit/Synthesis/Reactor/matching/policy.py +120 -10
- synkit-1.6.2b1/synkit/Synthesis/Reactor/matching/symmetry.py +309 -0
- synkit-1.6.2b1/synkit/Synthesis/Reactor/output/__init__.py +1 -0
- {synkit-1.6.1/synkit/Synthesis/Reactor → synkit-1.6.2b1/synkit/Synthesis/Reactor/output}/deduplication.py +270 -397
- {synkit-1.6.1/synkit/Synthesis/Reactor → synkit-1.6.2b1/synkit/Synthesis/Reactor/output}/serialization.py +111 -23
- synkit-1.6.2b1/synkit/Synthesis/Reactor/output/structural.py +893 -0
- synkit-1.6.2b1/synkit/Synthesis/Reactor/stereo/__init__.py +1 -0
- synkit-1.6.1/synkit/Synthesis/Reactor/reactor_stereo.py → synkit-1.6.2b1/synkit/Synthesis/Reactor/stereo/mixin.py +1 -1
- synkit-1.6.2b1/synkit/Synthesis/Reactor/variants/__init__.py +1 -0
- synkit-1.6.1/synkit/Synthesis/Reactor/imba_engine.py → synkit-1.6.2b1/synkit/Synthesis/Reactor/variants/imbalanced.py +10 -13
- synkit-1.6.1/synkit/Synthesis/Reactor/partial_engine.py → synkit-1.6.2b1/synkit/Synthesis/Reactor/variants/partial.py +2 -2
- synkit-1.6.2b1/synkit/Synthesis/Reactor/workflow/__init__.py +1 -0
- synkit-1.6.1/synkit/Synthesis/Reactor/batch_reactor.py → synkit-1.6.2b1/synkit/Synthesis/Reactor/workflow/batch.py +146 -33
- {synkit-1.6.1/synkit/Synthesis/Reactor → synkit-1.6.2b1/synkit/Synthesis/Reactor/workflow}/benchmark.py +7 -12
- {synkit-1.6.1/synkit/Synthesis/Reactor → synkit-1.6.2b1/synkit/Synthesis/Reactor/workflow}/rule_filter.py +17 -10
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Synthesis/reactor_utils.py +51 -54
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Utils/utils.py +49 -55
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/crn/visualizer.py +6 -9
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/epd/models.py +4 -4
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/epd/visualizer.py +32 -61
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/graph_visualizer.py +13 -20
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/its/__init__.py +2 -2
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/its/drawer.py +3 -3
- synkit-1.6.2b1/synkit/Vis/its_drawer.py +35 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/molecule/__init__.py +2 -2
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/molecule/drawer.py +4 -6
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/molecule/reaction.py +1 -1
- synkit-1.6.2b1/synkit/Vis/molecule_drawer.py +33 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/mtg/__init__.py +2 -2
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/mtg/drawer.py +2 -2
- synkit-1.6.2b1/synkit/Vis/mtg_drawer.py +34 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/pdf_writer.py +29 -24
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/reaction/__init__.py +2 -2
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/reaction/rxn.py +7 -7
- synkit-1.6.2b1/synkit/Vis/reaction_drawer.py +41 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/space/__init__.py +2 -2
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/space/embedding.py +19 -17
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/vis_synedu/rxn_vis.py +28 -33
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/visual_drawer.py +1 -1
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/visual_model.py +2 -2
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/version.py +1 -1
- synkit-1.6.1/synkit/Synthesis/Metrics/__init__.py +0 -0
- synkit-1.6.1/synkit/Synthesis/Reactor/__init__.py +0 -30
- synkit-1.6.1/synkit/Synthesis/Reactor/fusion_validation.py +0 -557
- synkit-1.6.1/synkit/Synthesis/Reactor/rbl_engine.py +0 -1345
- synkit-1.6.1/synkit/Synthesis/Reactor/rbl_matching.py +0 -338
- synkit-1.6.1/synkit/Synthesis/Reactor/rbl_policy.py +0 -81
- synkit-1.6.1/synkit/Synthesis/__init__.py +0 -0
- synkit-1.6.1/synkit/Utils/__init__.py +0 -0
- synkit-1.6.1/synkit/Vis/its_drawer.py +0 -615
- synkit-1.6.1/synkit/Vis/molecule_drawer.py +0 -565
- synkit-1.6.1/synkit/Vis/mtg_drawer.py +0 -769
- synkit-1.6.1/synkit/Vis/reaction_drawer.py +0 -285
- {synkit-1.6.1 → synkit-1.6.2b1}/LICENSE +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/README.md +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Construct/DAG/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Construct/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Construct/arity.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Construct/builder.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Construct/derivation.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Construct/flattener.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Construct/keys.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Construct/mixtures.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Construct/smiles.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Construct/state.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Construct/strategy.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Pathway/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Petrinet/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Petrinet/persistence.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Props/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Props/helper.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Query/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Structure/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Symmetry/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Symmetry/symmetry.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Visualize/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Visualize/crn_vis.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Visualize/labels.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Visualize/palette.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/Visualize/validation.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/dev_crn/Structure/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/dev_crn/Symmetry/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/dev_crn/Symmetry/canon.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/dev_crn/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/dev_crn/configs/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/dev_crn/configs/models.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/dev_crn/constants.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/dev_crn/exceptions.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/CRN/dev_crn/motif.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Cluster/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Fingerprint/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Molecule/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Molecule/_chirality_loci.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Molecule/_chirality_types.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Molecule/_helical_loci.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Molecule/_stereo_axis_evidence.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Molecule/_stereo_element_detection.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Molecule/_stereo_orientation_constraints.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Molecule/_tetrahedral_carriers.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Molecule/chirality.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Molecule/cip_assignment.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Molecule/cip_ranking.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Molecule/coordinate_stereo.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Molecule/derived_stereo_naming.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Molecule/formula.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Molecule/global_stereo.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Molecule/stereo_evidence.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Molecule/stereo_perception.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/Mapper/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/Mapper/chem/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/Mapper/chem/aam.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/Mapper/chem/smiles.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/Mapper/exact/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/Mapper/exact/enumeration_result.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/Mapper/graph/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/Mapper/graph/labeled_graph.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/Mapper/graph/synkit_adapter.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/Mapper/io/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/Mapper/slap/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/Mapper/slap/sequential.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/Reaction/aam_validator.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Chem/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Data/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Data/aldol.json.gz +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Data/paracetamol.json.gz +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Canon/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Canon/exact.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Canon/exact_refinement.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Canon/nauty.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Context/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/FG/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/FG/api.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/FG/audit.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/FG/catalog.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/FG/detector.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/FG/model.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/FG/recognizers.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/FG/ring_system.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Feature/Fingerprint/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Feature/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Fusion/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Hyrogen/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Hyrogen/hcomplete_legacy.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Hyrogen/hcompletion_algorithms.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Hyrogen/hextend_legacy.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/ITS/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/ITS/stereo.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/MTG/mtg.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Matcher/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Mech/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Mech/electron_accounting.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Morphism/constraints.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Morphism/morphism.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Morphism/stereo.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Morphism/stereo_morphism.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Morphism/stereo_morphism_helpers.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Morphism/stereo_morphism_types.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Stereo/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Stereo/_descriptor_core.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Stereo/_descriptor_serialization.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Stereo/canonical.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Stereo/changes.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Stereo/composition.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Stereo/configured.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Stereo/couplings.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Stereo/descriptors.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Stereo/enumeration.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Stereo/extended_descriptors.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Stereo/global_configured.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Stereo/global_stereo.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Stereo/identity.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Stereo/interchange.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Stereo/legacy.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Stereo/matching.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Stereo/orbits.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Stereo/outcomes.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Stereo/pairwise.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Stereo/rdkit_adapter.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Stereo/reaction_interchange.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Stereo/semantics.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Stereo/supports.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/Stereo/wire.py +0 -0
- {synkit-1.6.1/synkit/Graph/MTG → synkit-1.6.2b1/synkit/Graph/Wildcard}/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Graph/canon_graph.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/IO/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/IO/combinatorial/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/IO/conversion.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Mechanism/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Mechanism/adapters.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Mechanism/audit.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Mechanism/compatibility.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Mechanism/drawing.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Mechanism/electron_models.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Mechanism/equivalence.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Mechanism/evidence.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Mechanism/interchange.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Mechanism/neighbor_stereo.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Mechanism/radical_data.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Mechanism/schema.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Mechanism/stereo_state.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Mechanism/symbols.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Rule/Compose/_identity.py +0 -0
- {synkit-1.6.1/synkit/Graph/Wildcard → synkit-1.6.2b1/synkit/Rule/Modify}/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Rule/Modify/strip_rule.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Rule/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Rule/stereo_identity.py +0 -0
- {synkit-1.6.1/synkit/Rule/Apply → synkit-1.6.2b1/synkit/Synthesis/MSR}/__init__.py +0 -0
- {synkit-1.6.1/synkit/Rule/Compose → synkit-1.6.2b1/synkit/Synthesis/Metrics}/__init__.py +0 -0
- /synkit-1.6.1/synkit/Synthesis/Reactor/serialization_policy.py → /synkit-1.6.2b1/synkit/Synthesis/Reactor/output/policy.py +0 -0
- {synkit-1.6.1/synkit/Synthesis/Reactor → synkit-1.6.2b1/synkit/Synthesis/Reactor/stereo}/assignment.py +0 -0
- /synkit-1.6.1/synkit/Synthesis/Reactor/post_syn.py → /synkit-1.6.2b1/synkit/Synthesis/Reactor/workflow/postprocess.py +0 -0
- {synkit-1.6.1/synkit/Rule/Modify → synkit-1.6.2b1/synkit/Synthesis}/__init__.py +0 -0
- {synkit-1.6.1/synkit/Synthesis/MSR → synkit-1.6.2b1/synkit/Utils}/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/crn/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/epd/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/epd/arrows.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/epd/chem.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/epd/constants.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/epd/layout.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/epd/mapping.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/epd/render.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/epd/utils.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/reaction/rule.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/space/chemical.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/vis_synedu/Vis/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/vis_synedu/Vis/dpo.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/Vis/vis_synedu/vis.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/__init__.py +0 -0
- {synkit-1.6.1 → synkit-1.6.2b1}/synkit/examples.py +0 -0
|
@@ -106,3 +106,7 @@ Experiment/Lewis/FLOWER/replay-results*/
|
|
|
106
106
|
# Keep generated Python bytecode ignored after directory re-inclusions above.
|
|
107
107
|
**/__pycache__/
|
|
108
108
|
*.py[cod]
|
|
109
|
+
|
|
110
|
+
# RBL long-run checkpoints are resumable local state, not retained evidence.
|
|
111
|
+
Experiment/RBL/*checkpoint*.jsonl
|
|
112
|
+
request.md
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "synkit"
|
|
7
|
-
version = "1.6.
|
|
7
|
+
version = "1.6.2b1"
|
|
8
8
|
description = "Utility for reaction modeling using graph grammar"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -39,7 +39,7 @@ docs = [
|
|
|
39
39
|
"pydata-sphinx-theme",
|
|
40
40
|
"sphinx-rtd-theme",
|
|
41
41
|
|
|
42
|
-
#
|
|
42
|
+
# Sphinx extensions
|
|
43
43
|
"sphinxcontrib-bibtex",
|
|
44
44
|
"sphinx-design",
|
|
45
45
|
"sphinx-copybutton",
|
|
@@ -49,8 +49,7 @@ docs = [
|
|
|
49
49
|
# (still requires the system `dot` binary to render diagrams)
|
|
50
50
|
"graphviz",
|
|
51
51
|
|
|
52
|
-
#
|
|
53
|
-
# (safe even if unused)
|
|
52
|
+
# Markdown source support
|
|
54
53
|
"myst-parser",
|
|
55
54
|
]
|
|
56
55
|
|
|
@@ -63,12 +62,14 @@ documentation = "https://tieulongphan.github.io/SynKit/"
|
|
|
63
62
|
|
|
64
63
|
[tool.hatch.build.targets.wheel]
|
|
65
64
|
packages = ["synkit"]
|
|
65
|
+
core-metadata-version = "2.4"
|
|
66
66
|
|
|
67
67
|
[tool.hatch.build.targets.wheel.force-include]
|
|
68
68
|
"synkit/Data/aldol.json.gz" = "synkit/Data/aldol.json.gz"
|
|
69
69
|
"synkit/Data/paracetamol.json.gz" = "synkit/Data/paracetamol.json.gz"
|
|
70
70
|
|
|
71
71
|
[tool.hatch.build.targets.sdist]
|
|
72
|
+
core-metadata-version = "2.4"
|
|
72
73
|
include = [
|
|
73
74
|
"/synkit",
|
|
74
75
|
"/LICENSE",
|
|
@@ -80,3 +81,11 @@ include = [
|
|
|
80
81
|
[tool.hatch.build.targets.sdist.force-include]
|
|
81
82
|
"synkit/Data/aldol.json.gz" = "synkit/Data/aldol.json.gz"
|
|
82
83
|
"synkit/Data/paracetamol.json.gz" = "synkit/Data/paracetamol.json.gz"
|
|
84
|
+
|
|
85
|
+
[tool.coverage.run]
|
|
86
|
+
source = ["synkit"]
|
|
87
|
+
|
|
88
|
+
[tool.coverage.report]
|
|
89
|
+
fail_under = 70
|
|
90
|
+
precision = 1
|
|
91
|
+
show_missing = true
|
|
@@ -10,8 +10,7 @@ ReactionSides = Tuple[List[str], List[str]]
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
def _split_reaction_smiles(reaction_smiles: str) -> ReactionSides:
|
|
13
|
-
"""
|
|
14
|
-
Split a reaction SMILES string into reactant and product molecule lists.
|
|
13
|
+
"""Split a reaction SMILES string into reactant and product molecule lists.
|
|
15
14
|
|
|
16
15
|
The expected format is ``"A.B>>C.D"``. Empty left or right sides are allowed.
|
|
17
16
|
|
|
@@ -19,15 +18,15 @@ def _split_reaction_smiles(reaction_smiles: str) -> ReactionSides:
|
|
|
19
18
|
Reaction SMILES string.
|
|
20
19
|
:type reaction_smiles: str
|
|
21
20
|
|
|
22
|
-
:
|
|
21
|
+
:return:
|
|
23
22
|
Tuple of reactant and product molecule lists.
|
|
24
23
|
:rtype: Tuple[List[str], List[str]]
|
|
25
24
|
|
|
26
25
|
:raises ValueError:
|
|
27
26
|
If the reaction string does not contain ``">>"``.
|
|
28
27
|
|
|
29
|
-
Example
|
|
30
|
-
|
|
28
|
+
.. rubric:: Example
|
|
29
|
+
|
|
31
30
|
.. code-block:: python
|
|
32
31
|
|
|
33
32
|
reactants, products = _split_reaction_smiles("CCO.O>>CC=O")
|
|
@@ -43,8 +42,7 @@ def _split_reaction_smiles(reaction_smiles: str) -> ReactionSides:
|
|
|
43
42
|
|
|
44
43
|
|
|
45
44
|
def _excel_label(index: int) -> str:
|
|
46
|
-
"""
|
|
47
|
-
Convert a zero-based integer index into an Excel-style alphabetic label.
|
|
45
|
+
"""Convert a zero-based integer index into an Excel-style alphabetic label.
|
|
48
46
|
|
|
49
47
|
Examples include ``0 -> "A"``, ``25 -> "Z"``, and ``26 -> "AA"``.
|
|
50
48
|
|
|
@@ -52,15 +50,15 @@ def _excel_label(index: int) -> str:
|
|
|
52
50
|
Zero-based index.
|
|
53
51
|
:type index: int
|
|
54
52
|
|
|
55
|
-
:
|
|
53
|
+
:return:
|
|
56
54
|
Excel-style alphabetic label.
|
|
57
55
|
:rtype: str
|
|
58
56
|
|
|
59
57
|
:raises ValueError:
|
|
60
58
|
If ``index`` is negative.
|
|
61
59
|
|
|
62
|
-
Example
|
|
63
|
-
|
|
60
|
+
.. rubric:: Example
|
|
61
|
+
|
|
64
62
|
.. code-block:: python
|
|
65
63
|
|
|
66
64
|
label = _excel_label(27) # "AB"
|
|
@@ -77,19 +75,18 @@ def _excel_label(index: int) -> str:
|
|
|
77
75
|
|
|
78
76
|
|
|
79
77
|
def _normalize_abstract_side(side: str) -> List[str]:
|
|
80
|
-
"""
|
|
81
|
-
Normalize one abstract reaction side by splitting on ``"+"`` and sorting tokens.
|
|
78
|
+
"""Normalize one abstract reaction side by splitting on ``"+"`` and sorting tokens.
|
|
82
79
|
|
|
83
80
|
:param side:
|
|
84
81
|
Abstract reaction side.
|
|
85
82
|
:type side: str
|
|
86
83
|
|
|
87
|
-
:
|
|
84
|
+
:return:
|
|
88
85
|
Sorted abstract token list.
|
|
89
86
|
:rtype: List[str]
|
|
90
87
|
|
|
91
|
-
Example
|
|
92
|
-
|
|
88
|
+
.. rubric:: Example
|
|
89
|
+
|
|
93
90
|
.. code-block:: python
|
|
94
91
|
|
|
95
92
|
tokens = _normalize_abstract_side("B+A+C")
|
|
@@ -101,8 +98,7 @@ def _first_present(
|
|
|
101
98
|
record: Mapping[str, Any],
|
|
102
99
|
keys: Sequence[str],
|
|
103
100
|
) -> Optional[Any]:
|
|
104
|
-
"""
|
|
105
|
-
Return the first non-``None`` value found in a mapping for the given keys.
|
|
101
|
+
"""Return the first non-``None`` value found in a mapping for the given keys.
|
|
106
102
|
|
|
107
103
|
:param record:
|
|
108
104
|
Input mapping.
|
|
@@ -112,12 +108,12 @@ def _first_present(
|
|
|
112
108
|
Candidate keys to try in order.
|
|
113
109
|
:type keys: Sequence[str]
|
|
114
110
|
|
|
115
|
-
:
|
|
111
|
+
:return:
|
|
116
112
|
First matching value, or ``None`` if none are present.
|
|
117
113
|
:rtype: Optional[Any]
|
|
118
114
|
|
|
119
|
-
Example
|
|
120
|
-
|
|
115
|
+
.. rubric:: Example
|
|
116
|
+
|
|
121
117
|
.. code-block:: python
|
|
122
118
|
|
|
123
119
|
value = _first_present(record, ["smiles", "reaction", "rxn_smiles"])
|
|
@@ -129,8 +125,7 @@ def _first_present(
|
|
|
129
125
|
|
|
130
126
|
|
|
131
127
|
def deduplicate_abstract_reactions(reactions: Sequence[str]) -> List[str]:
|
|
132
|
-
"""
|
|
133
|
-
Remove identity reactions and duplicate abstract reactions.
|
|
128
|
+
"""Remove identity reactions and duplicate abstract reactions.
|
|
134
129
|
|
|
135
130
|
Reactant and product order are normalized internally before comparison.
|
|
136
131
|
The original retained representative is the first encountered entry.
|
|
@@ -139,12 +134,12 @@ def deduplicate_abstract_reactions(reactions: Sequence[str]) -> List[str]:
|
|
|
139
134
|
Abstract reactions such as ``"A+B>>C+D"``.
|
|
140
135
|
:type reactions: Sequence[str]
|
|
141
136
|
|
|
142
|
-
:
|
|
137
|
+
:return:
|
|
143
138
|
Filtered abstract reactions.
|
|
144
139
|
:rtype: List[str]
|
|
145
140
|
|
|
146
|
-
Example
|
|
147
|
-
|
|
141
|
+
.. rubric:: Example
|
|
142
|
+
|
|
148
143
|
.. code-block:: python
|
|
149
144
|
|
|
150
145
|
filtered = deduplicate_abstract_reactions(
|
|
@@ -203,15 +198,14 @@ class AbstractReactionNetwork:
|
|
|
203
198
|
label_to_molecule: Dict[str, str] = field(default_factory=dict)
|
|
204
199
|
|
|
205
200
|
def to_dict(self) -> Dict[str, Any]:
|
|
206
|
-
"""
|
|
207
|
-
Convert the abstract network to a plain dictionary.
|
|
201
|
+
"""Convert the abstract network to a plain dictionary.
|
|
208
202
|
|
|
209
|
-
:
|
|
203
|
+
:return:
|
|
210
204
|
Dictionary representation of the abstract network.
|
|
211
205
|
:rtype: Dict[str, Any]
|
|
212
206
|
|
|
213
|
-
Example
|
|
214
|
-
|
|
207
|
+
.. rubric:: Example
|
|
208
|
+
|
|
215
209
|
.. code-block:: python
|
|
216
210
|
|
|
217
211
|
payload = network.to_dict()
|
|
@@ -226,19 +220,18 @@ class AbstractReactionNetwork:
|
|
|
226
220
|
def to_json_payload(
|
|
227
221
|
self, name: str = "abstract_reaction_network"
|
|
228
222
|
) -> Dict[str, Any]:
|
|
229
|
-
"""
|
|
230
|
-
Convert the abstract network into a SynKit-style JSON payload.
|
|
223
|
+
"""Convert the abstract network into a SynKit-style JSON payload.
|
|
231
224
|
|
|
232
225
|
:param name:
|
|
233
226
|
Name stored in the metadata block.
|
|
234
227
|
:type name: str
|
|
235
228
|
|
|
236
|
-
:
|
|
229
|
+
:return:
|
|
237
230
|
JSON-serializable payload.
|
|
238
231
|
:rtype: Dict[str, Any]
|
|
239
232
|
|
|
240
|
-
Example
|
|
241
|
-
|
|
233
|
+
.. rubric:: Example
|
|
234
|
+
|
|
242
235
|
.. code-block:: python
|
|
243
236
|
|
|
244
237
|
payload = network.to_json_payload(name="glycolysis_abstract")
|
|
@@ -256,8 +249,7 @@ class AbstractReactionNetwork:
|
|
|
256
249
|
}
|
|
257
250
|
|
|
258
251
|
def save_json(self, path: PathLike, *, name: Optional[str] = None) -> None:
|
|
259
|
-
"""
|
|
260
|
-
Save the abstract network as a JSON file.
|
|
252
|
+
"""Save the abstract network as a JSON file.
|
|
261
253
|
|
|
262
254
|
:param path:
|
|
263
255
|
Output JSON path.
|
|
@@ -267,12 +259,12 @@ class AbstractReactionNetwork:
|
|
|
267
259
|
Optional metadata name. If omitted, the filename stem is used.
|
|
268
260
|
:type name: Optional[str]
|
|
269
261
|
|
|
270
|
-
:
|
|
262
|
+
:return:
|
|
271
263
|
``None``
|
|
272
264
|
:rtype: None
|
|
273
265
|
|
|
274
|
-
Example
|
|
275
|
-
|
|
266
|
+
.. rubric:: Example
|
|
267
|
+
|
|
276
268
|
.. code-block:: python
|
|
277
269
|
|
|
278
270
|
network.save_json("abstract_network.json")
|
|
@@ -286,15 +278,14 @@ class AbstractReactionNetwork:
|
|
|
286
278
|
|
|
287
279
|
@dataclass
|
|
288
280
|
class AbstractReactionExtractor:
|
|
289
|
-
"""
|
|
290
|
-
Build abstract symbolic reaction networks from reaction SMILES lists or
|
|
281
|
+
"""Build abstract symbolic reaction networks from reaction SMILES lists or
|
|
291
282
|
SynKit-style module/pathway JSON blocks.
|
|
292
283
|
|
|
293
284
|
This class supports configurable field names when extracting reactions from
|
|
294
285
|
JSON-like input records.
|
|
295
286
|
|
|
296
|
-
Example
|
|
297
|
-
|
|
287
|
+
.. rubric:: Example
|
|
288
|
+
|
|
298
289
|
.. code-block:: python
|
|
299
290
|
|
|
300
291
|
extractor = KEGGExtractor()
|
|
@@ -316,24 +307,23 @@ class AbstractReactionExtractor:
|
|
|
316
307
|
self,
|
|
317
308
|
data: Mapping[str, Any],
|
|
318
309
|
) -> Iterable[Tuple[Mapping[str, Any], str]]:
|
|
319
|
-
"""
|
|
320
|
-
Iterate over reaction records from a module-like or pathway-like JSON block.
|
|
310
|
+
"""Iterate over reaction records from a module-like or pathway-like JSON block.
|
|
321
311
|
|
|
322
312
|
Supported structures include:
|
|
323
313
|
|
|
324
|
-
- module-like: ``{"reactions": [...]}
|
|
314
|
+
- module-like: ``{"reactions": [...]}``
|
|
325
315
|
- pathway-like: ``{"by_module": {"M00001": {"reactions": [...]}, ...}}``
|
|
326
316
|
|
|
327
317
|
:param data:
|
|
328
318
|
Input JSON-like mapping.
|
|
329
319
|
:type data: Mapping[str, Any]
|
|
330
320
|
|
|
331
|
-
:
|
|
321
|
+
:yield:
|
|
332
322
|
Tuples of ``(reaction_record, module_id)``.
|
|
333
323
|
:rtype: Iterable[Tuple[Mapping[str, Any], str]]
|
|
334
324
|
|
|
335
|
-
Example
|
|
336
|
-
|
|
325
|
+
.. rubric:: Example
|
|
326
|
+
|
|
337
327
|
.. code-block:: python
|
|
338
328
|
|
|
339
329
|
abstractor = AbstractReactionExtractor()
|
|
@@ -366,8 +356,7 @@ class AbstractReactionExtractor:
|
|
|
366
356
|
reaction_smiles_keys: Optional[Sequence[str]] = None,
|
|
367
357
|
template_keys: Optional[Sequence[str]] = None,
|
|
368
358
|
) -> Tuple[List[str], Dict[str, str]]:
|
|
369
|
-
"""
|
|
370
|
-
Extract reaction SMILES and rule-template mappings from raw inputs.
|
|
359
|
+
"""Extract reaction SMILES and rule-template mappings from raw inputs.
|
|
371
360
|
|
|
372
361
|
Either a direct list of reaction SMILES or a JSON data block may be
|
|
373
362
|
provided. If both are given, the explicit ``reactions`` list takes
|
|
@@ -412,12 +401,12 @@ class AbstractReactionExtractor:
|
|
|
412
401
|
record. The keys are tried in order.
|
|
413
402
|
:type template_keys: Optional[Sequence[str]]
|
|
414
403
|
|
|
415
|
-
:
|
|
404
|
+
:return:
|
|
416
405
|
Tuple of reaction SMILES list and template mapping.
|
|
417
406
|
:rtype: Tuple[List[str], Dict[str, str]]
|
|
418
407
|
|
|
419
|
-
Example
|
|
420
|
-
|
|
408
|
+
.. rubric:: Example
|
|
409
|
+
|
|
421
410
|
.. code-block:: python
|
|
422
411
|
|
|
423
412
|
extractor = KEGGExtractor()
|
|
@@ -480,8 +469,7 @@ class AbstractReactionExtractor:
|
|
|
480
469
|
*,
|
|
481
470
|
order: str = "appearance",
|
|
482
471
|
) -> List[str]:
|
|
483
|
-
"""
|
|
484
|
-
Build the unique molecule pool from parsed reactions.
|
|
472
|
+
"""Build the unique molecule pool from parsed reactions.
|
|
485
473
|
|
|
486
474
|
:param parsed_reactions:
|
|
487
475
|
Parsed reaction sides as ``(reactants, products)`` tuples.
|
|
@@ -492,15 +480,15 @@ class AbstractReactionExtractor:
|
|
|
492
480
|
``"sorted"``.
|
|
493
481
|
:type order: str
|
|
494
482
|
|
|
495
|
-
:
|
|
483
|
+
:return:
|
|
496
484
|
Ordered unique molecule pool.
|
|
497
485
|
:rtype: List[str]
|
|
498
486
|
|
|
499
487
|
:raises ValueError:
|
|
500
488
|
If ``order`` is not supported.
|
|
501
489
|
|
|
502
|
-
Example
|
|
503
|
-
|
|
490
|
+
.. rubric:: Example
|
|
491
|
+
|
|
504
492
|
.. code-block:: python
|
|
505
493
|
|
|
506
494
|
molecule_pool = abstractor.build_molecule_pool(
|
|
@@ -544,8 +532,7 @@ class AbstractReactionExtractor:
|
|
|
544
532
|
template_keys: Optional[Sequence[str]] = None,
|
|
545
533
|
save_as: Optional[PathLike] = None,
|
|
546
534
|
) -> AbstractReactionNetwork:
|
|
547
|
-
"""
|
|
548
|
-
Convert full reaction SMILES into an abstract symbolic reaction network.
|
|
535
|
+
"""Convert full reaction SMILES into an abstract symbolic reaction network.
|
|
549
536
|
|
|
550
537
|
You may provide either a direct list of reaction SMILES or a module/pathway
|
|
551
538
|
JSON block.
|
|
@@ -607,12 +594,12 @@ class AbstractReactionExtractor:
|
|
|
607
594
|
Optional JSON output path.
|
|
608
595
|
:type save_as: Optional[PathLike]
|
|
609
596
|
|
|
610
|
-
:
|
|
597
|
+
:return:
|
|
611
598
|
Abstract symbolic reaction network.
|
|
612
599
|
:rtype: AbstractReactionNetwork
|
|
613
600
|
|
|
614
|
-
Example
|
|
615
|
-
|
|
601
|
+
.. rubric:: Example
|
|
602
|
+
|
|
616
603
|
.. code-block:: python
|
|
617
604
|
|
|
618
605
|
extractor = KEGGExtractor()
|
|
@@ -6,8 +6,7 @@ from ..Petrinet.net import SynCRNIncidence, extract_syncrn_incidence
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
def _species_token(incidence: SynCRNIncidence, sid: str, mode: str) -> str:
|
|
9
|
-
"""
|
|
10
|
-
Convert an internal species identifier into an external token.
|
|
9
|
+
"""Convert an internal species identifier into an external token.
|
|
11
10
|
|
|
12
11
|
Supported tokenization modes are:
|
|
13
12
|
|
|
@@ -27,15 +26,15 @@ def _species_token(incidence: SynCRNIncidence, sid: str, mode: str) -> str:
|
|
|
27
26
|
Tokenization mode. Must be one of ``"id"``, ``"label"``, or ``"source"``.
|
|
28
27
|
:type mode: str
|
|
29
28
|
|
|
30
|
-
:
|
|
29
|
+
:return:
|
|
31
30
|
Token representing the species.
|
|
32
31
|
:rtype: str
|
|
33
32
|
|
|
34
33
|
:raises ValueError:
|
|
35
34
|
If ``mode`` is not one of the supported values.
|
|
36
35
|
|
|
37
|
-
Examples
|
|
38
|
-
|
|
36
|
+
.. rubric:: Examples
|
|
37
|
+
|
|
39
38
|
.. code-block:: python
|
|
40
39
|
|
|
41
40
|
tok = _species_token(incidence, "s1", mode="label")
|
|
@@ -51,8 +50,7 @@ def _species_token(incidence: SynCRNIncidence, sid: str, mode: str) -> str:
|
|
|
51
50
|
|
|
52
51
|
|
|
53
52
|
def _reaction_token(incidence: SynCRNIncidence, rid: str, mode: str) -> str:
|
|
54
|
-
"""
|
|
55
|
-
Convert an internal reaction identifier into an external token.
|
|
53
|
+
"""Convert an internal reaction identifier into an external token.
|
|
56
54
|
|
|
57
55
|
Supported tokenization modes are:
|
|
58
56
|
|
|
@@ -72,15 +70,15 @@ def _reaction_token(incidence: SynCRNIncidence, rid: str, mode: str) -> str:
|
|
|
72
70
|
Tokenization mode. Must be one of ``"id"``, ``"label"``, or ``"source"``.
|
|
73
71
|
:type mode: str
|
|
74
72
|
|
|
75
|
-
:
|
|
73
|
+
:return:
|
|
76
74
|
Token representing the reaction.
|
|
77
75
|
:rtype: str
|
|
78
76
|
|
|
79
77
|
:raises ValueError:
|
|
80
78
|
If ``mode`` is not one of the supported values.
|
|
81
79
|
|
|
82
|
-
Examples
|
|
83
|
-
|
|
80
|
+
.. rubric:: Examples
|
|
81
|
+
|
|
84
82
|
.. code-block:: python
|
|
85
83
|
|
|
86
84
|
tok = _reaction_token(incidence, "r1", mode="id")
|
|
@@ -96,8 +94,7 @@ def _reaction_token(incidence: SynCRNIncidence, rid: str, mode: str) -> str:
|
|
|
96
94
|
|
|
97
95
|
|
|
98
96
|
def _assert_unique_tokens(tokens: Mapping[str, str], *, kind: str) -> None:
|
|
99
|
-
"""
|
|
100
|
-
Validate that exported tokens are unique.
|
|
97
|
+
"""Validate that exported tokens are unique.
|
|
101
98
|
|
|
102
99
|
This prevents ambiguous reverse mapping from public tokens back to internal
|
|
103
100
|
identifiers.
|
|
@@ -111,7 +108,7 @@ def _assert_unique_tokens(tokens: Mapping[str, str], *, kind: str) -> None:
|
|
|
111
108
|
``"reaction"``.
|
|
112
109
|
:type kind: str
|
|
113
110
|
|
|
114
|
-
:
|
|
111
|
+
:return:
|
|
115
112
|
``None``.
|
|
116
113
|
:rtype: None
|
|
117
114
|
|
|
@@ -133,8 +130,7 @@ def _build_species_token_map(
|
|
|
133
130
|
*,
|
|
134
131
|
species: str,
|
|
135
132
|
) -> Dict[str, str]:
|
|
136
|
-
"""
|
|
137
|
-
Build the mapping from internal species ids to exported species tokens.
|
|
133
|
+
"""Build the mapping from internal species ids to exported species tokens.
|
|
138
134
|
|
|
139
135
|
:param incidence:
|
|
140
136
|
Canonical SynCRN incidence object.
|
|
@@ -144,7 +140,7 @@ def _build_species_token_map(
|
|
|
144
140
|
Species tokenization mode.
|
|
145
141
|
:type species: str
|
|
146
142
|
|
|
147
|
-
:
|
|
143
|
+
:return:
|
|
148
144
|
Mapping ``internal_species_id -> exported_species_token``.
|
|
149
145
|
:rtype: Dict[str, str]
|
|
150
146
|
"""
|
|
@@ -158,8 +154,7 @@ def _build_reaction_token_map(
|
|
|
158
154
|
*,
|
|
159
155
|
reaction: str,
|
|
160
156
|
) -> Dict[str, str]:
|
|
161
|
-
"""
|
|
162
|
-
Build the mapping from internal reaction ids to exported reaction tokens.
|
|
157
|
+
"""Build the mapping from internal reaction ids to exported reaction tokens.
|
|
163
158
|
|
|
164
159
|
:param incidence:
|
|
165
160
|
Canonical SynCRN incidence object.
|
|
@@ -169,7 +164,7 @@ def _build_reaction_token_map(
|
|
|
169
164
|
Reaction tokenization mode.
|
|
170
165
|
:type reaction: str
|
|
171
166
|
|
|
172
|
-
:
|
|
167
|
+
:return:
|
|
173
168
|
Mapping ``internal_reaction_id -> exported_reaction_token``.
|
|
174
169
|
:rtype: Dict[str, str]
|
|
175
170
|
"""
|
|
@@ -183,8 +178,7 @@ def _tokenize_reaction_multiset(
|
|
|
183
178
|
coeffs: Mapping[str, int],
|
|
184
179
|
species_map: Mapping[str, str],
|
|
185
180
|
) -> Dict[str, int]:
|
|
186
|
-
"""
|
|
187
|
-
Convert one incidence-side multiset from internal species ids to tokens.
|
|
181
|
+
"""Convert one incidence-side multiset from internal species ids to tokens.
|
|
188
182
|
|
|
189
183
|
:param coeffs:
|
|
190
184
|
Mapping ``internal_species_id -> stoichiometric_coefficient``.
|
|
@@ -194,7 +188,7 @@ def _tokenize_reaction_multiset(
|
|
|
194
188
|
Mapping ``internal_species_id -> exported_species_token``.
|
|
195
189
|
:type species_map: Mapping[str, str]
|
|
196
190
|
|
|
197
|
-
:
|
|
191
|
+
:return:
|
|
198
192
|
Mapping ``exported_species_token -> stoichiometric_coefficient``.
|
|
199
193
|
:rtype: Dict[str, int]
|
|
200
194
|
"""
|
|
@@ -206,8 +200,7 @@ def _build_tokenized_edges(
|
|
|
206
200
|
species_map: Mapping[str, str],
|
|
207
201
|
reaction_map: Mapping[str, str],
|
|
208
202
|
) -> Dict[str, Tuple[Dict[str, int], Dict[str, int]]]:
|
|
209
|
-
"""
|
|
210
|
-
Build tokenized reaction edges.
|
|
203
|
+
"""Build tokenized reaction edges.
|
|
211
204
|
|
|
212
205
|
Each reaction token maps to a pair ``(tail, head)``, where ``tail`` and
|
|
213
206
|
``head`` are tokenized stoichiometric multisets for reactants and products.
|
|
@@ -224,7 +217,7 @@ def _build_tokenized_edges(
|
|
|
224
217
|
Mapping ``internal_reaction_id -> exported_reaction_token``.
|
|
225
218
|
:type reaction_map: Mapping[str, str]
|
|
226
219
|
|
|
227
|
-
:
|
|
220
|
+
:return:
|
|
228
221
|
Mapping
|
|
229
222
|
``reaction_token -> (reactant_multiset, product_multiset)``.
|
|
230
223
|
:rtype: Dict[str, Tuple[Dict[str, int], Dict[str, int]]]
|
|
@@ -239,14 +232,13 @@ def _build_tokenized_edges(
|
|
|
239
232
|
|
|
240
233
|
|
|
241
234
|
def _invert_token_map(token_map: Mapping[str, str]) -> Dict[str, str]:
|
|
242
|
-
"""
|
|
243
|
-
Invert an internal-id to token mapping.
|
|
235
|
+
"""Invert an internal-id to token mapping.
|
|
244
236
|
|
|
245
237
|
:param token_map:
|
|
246
238
|
Mapping ``internal_id -> token``.
|
|
247
239
|
:type token_map: Mapping[str, str]
|
|
248
240
|
|
|
249
|
-
:
|
|
241
|
+
:return:
|
|
250
242
|
Mapping ``token -> internal_id``.
|
|
251
243
|
:rtype: Dict[str, str]
|
|
252
244
|
"""
|
|
@@ -265,8 +257,7 @@ def tokenize_syncrn_incidence(
|
|
|
265
257
|
Dict[str, str],
|
|
266
258
|
SynCRNIncidence,
|
|
267
259
|
]:
|
|
268
|
-
"""
|
|
269
|
-
Convert SynCRN incidence into tokenized vertex and edge dictionaries.
|
|
260
|
+
"""Convert SynCRN incidence into tokenized vertex and edge dictionaries.
|
|
270
261
|
|
|
271
262
|
The returned objects are designed for downstream algorithms that prefer
|
|
272
263
|
stable public-facing tokens over internal SynCRN identifiers.
|
|
@@ -285,7 +276,7 @@ def tokenize_syncrn_incidence(
|
|
|
285
276
|
``"source"``.
|
|
286
277
|
:type reaction: str
|
|
287
278
|
|
|
288
|
-
:
|
|
279
|
+
:return:
|
|
289
280
|
Tuple containing:
|
|
290
281
|
|
|
291
282
|
- ``vertices``:
|
|
@@ -311,8 +302,8 @@ def tokenize_syncrn_incidence(
|
|
|
311
302
|
:raises ValueError:
|
|
312
303
|
If species or reaction tokenization produces non-unique exported tokens.
|
|
313
304
|
|
|
314
|
-
Examples
|
|
315
|
-
|
|
305
|
+
.. rubric:: Examples
|
|
306
|
+
|
|
316
307
|
.. code-block:: python
|
|
317
308
|
|
|
318
309
|
vertices, edges, s_tok2id, r_tok2id, incidence = tokenize_syncrn_incidence(
|