synkit 1.6.1b1__tar.gz → 1.6.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.
Files changed (476) hide show
  1. synkit-1.6.2/.gitignore +116 -0
  2. synkit-1.6.2/PKG-INFO +183 -0
  3. synkit-1.6.2/README.md +143 -0
  4. {synkit-1.6.1b1 → synkit-1.6.2}/pyproject.toml +16 -4
  5. synkit-1.6.2/synkit/CRN/Benchmark/__init__.py +105 -0
  6. synkit-1.6.2/synkit/CRN/Benchmark/crosschecks.py +377 -0
  7. synkit-1.6.2/synkit/CRN/Benchmark/data/kegg_modules.json +175 -0
  8. synkit-1.6.2/synkit/CRN/Benchmark/kegg.py +606 -0
  9. synkit-1.6.2/synkit/CRN/Benchmark/networks.py +459 -0
  10. synkit-1.6.2/synkit/CRN/Benchmark/scaling.py +541 -0
  11. synkit-1.6.2/synkit/CRN/Benchmark/validate.py +414 -0
  12. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Construct/abstract.py +52 -65
  13. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Construct/builder.py +80 -10
  14. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Construct/worker.py +1 -1
  15. synkit-1.6.2/synkit/CRN/IO/__init__.py +36 -0
  16. synkit-1.6.2/synkit/CRN/IO/sbml.py +881 -0
  17. synkit-1.6.2/synkit/CRN/Pathway/__init__.py +66 -0
  18. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Pathway/_adapter.py +24 -33
  19. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Pathway/pathfinder.py +21 -24
  20. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Pathway/reachability.py +52 -69
  21. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Pathway/realizability.py +92 -130
  22. synkit-1.6.2/synkit/CRN/Petrinet/__init__.py +91 -0
  23. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Petrinet/analyzer.py +53 -73
  24. synkit-1.6.2/synkit/CRN/Petrinet/minimal_semiflows.py +388 -0
  25. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Petrinet/net.py +95 -133
  26. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Petrinet/persistence.py +4 -0
  27. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Petrinet/semiflows.py +169 -77
  28. synkit-1.6.2/synkit/CRN/Petrinet/siphon_search.py +402 -0
  29. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Petrinet/structure.py +58 -54
  30. synkit-1.6.2/synkit/CRN/Props/__init__.py +126 -0
  31. synkit-1.6.2/synkit/CRN/Props/deficiency.py +933 -0
  32. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Props/dynamics.py +59 -74
  33. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Props/helper.py +35 -3
  34. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Props/stoich.py +201 -78
  35. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Props/thermo.py +24 -32
  36. synkit-1.6.2/synkit/CRN/Query/__init__.py +62 -0
  37. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Query/kegg_api.py +11 -14
  38. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Query/kegg_extract.py +63 -79
  39. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Query/kegg_impute.py +35 -44
  40. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Query/kegg_parse.py +53 -73
  41. synkit-1.6.2/synkit/CRN/Query/to_syncrn.py +294 -0
  42. synkit-1.6.2/synkit/CRN/Structure/_graph_io.py +704 -0
  43. synkit-1.6.2/synkit/CRN/Structure/_matrices.py +88 -0
  44. synkit-1.6.2/synkit/CRN/Structure/_parse.py +544 -0
  45. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Structure/reaction.py +14 -21
  46. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Structure/rule.py +4 -6
  47. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Structure/species.py +2 -3
  48. synkit-1.6.2/synkit/CRN/Structure/syncrn.py +929 -0
  49. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Symmetry/_common.py +76 -91
  50. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Symmetry/_ir.py +41 -60
  51. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Symmetry/automorphism.py +33 -46
  52. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Symmetry/canon.py +43 -58
  53. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Symmetry/isomorphism.py +31 -42
  54. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Symmetry/wl_canon.py +95 -124
  55. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Visualize/layout.py +52 -65
  56. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Visualize/validation.py +33 -11
  57. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Visualize/vis.py +71 -106
  58. synkit-1.6.2/synkit/CRN/__init__.py +197 -0
  59. synkit-1.6.2/synkit/CRN/kinds.py +137 -0
  60. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Cluster/butina.py +6 -5
  61. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Fingerprint/fp_calculator.py +4 -4
  62. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Fingerprint/smiles_featurizer.py +11 -11
  63. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Fingerprint/transformation_fp.py +4 -4
  64. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Molecule/_chirality_loci.py +2 -6
  65. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Molecule/_helical_loci.py +3 -8
  66. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Molecule/_stereo_axis_evidence.py +6 -10
  67. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Molecule/_stereo_element_detection.py +1 -4
  68. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Molecule/_stereo_orientation_constraints.py +22 -41
  69. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Molecule/_tetrahedral_carriers.py +3 -11
  70. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Molecule/atom_features.py +12 -18
  71. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Molecule/chirality.py +7 -22
  72. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Molecule/cip_assignment.py +3 -11
  73. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Molecule/cip_ranking.py +14 -19
  74. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Molecule/coordinate_stereo.py +12 -37
  75. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Molecule/descriptors.py +32 -44
  76. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Molecule/graph_annotator.py +3 -4
  77. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Molecule/standardize.py +83 -123
  78. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Molecule/stereo_perception.py +8 -29
  79. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Molecule/valence.py +14 -18
  80. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/Mapper/aam_validator.py +5 -5
  81. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/Mapper/chem/its.py +14 -24
  82. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/Mapper/exact/branching.py +21 -29
  83. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/Mapper/exact/certificate.py +18 -26
  84. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/Mapper/exact/enumerate.py +17 -20
  85. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/Mapper/exact/exhaustive.py +14 -22
  86. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/Mapper/exact/kernel.py +35 -44
  87. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/Mapper/exact/milp.py +17 -23
  88. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/Mapper/graph/automorphism.py +8 -11
  89. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/Mapper/graph/blockcut.py +12 -18
  90. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/Mapper/graph/refine.py +25 -35
  91. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/Mapper/io/idxmapstr.py +9 -14
  92. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/Mapper/slap/lap.py +22 -36
  93. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/balance_check.py +6 -6
  94. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/canon_rsmi.py +6 -8
  95. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/cleaning.py +3 -11
  96. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/deionize.py +6 -6
  97. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/explicit_h_audit.py +5 -10
  98. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/fix_aam.py +3 -3
  99. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/neutralize.py +7 -7
  100. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/radical_wildcard.py +8 -9
  101. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/standardize.py +8 -10
  102. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/tautomerize.py +5 -5
  103. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/utils.py +18 -18
  104. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Data/gen_partial_aam.py +3 -3
  105. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Canon/canon_algs.py +39 -65
  106. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Canon/canon_graph.py +34 -42
  107. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Canon/exact.py +5 -8
  108. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Canon/exact_refinement.py +15 -43
  109. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Context/hier_context.py +63 -50
  110. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Context/radius_expand.py +72 -62
  111. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Feature/Descriptors/topology.py +14 -11
  112. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Feature/Fingerprint/wl_rxn_fps.py +13 -22
  113. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Feature/graph_descriptors.py +77 -69
  114. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Feature/graph_fps.py +16 -15
  115. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Feature/graph_signature.py +28 -26
  116. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Feature/hash_fps.py +36 -31
  117. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Feature/morgan_fps.py +18 -15
  118. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Feature/path_fps.py +17 -15
  119. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Feature/wl_hash.py +8 -10
  120. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Fusion/candidate.py +118 -6
  121. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Fusion/constructor.py +21 -0
  122. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Fusion/identity.py +1 -0
  123. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Fusion/interface.py +113 -25
  124. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Fusion/search.py +1 -1
  125. synkit-1.6.2/synkit/Graph/Hyrogen/__init__.py +6 -0
  126. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Hyrogen/_misc.py +64 -81
  127. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Hyrogen/hcomplete.py +385 -404
  128. synkit-1.6.2/synkit/Graph/Hyrogen/hcomplete_legacy.py +368 -0
  129. synkit-1.6.2/synkit/Graph/Hyrogen/hcompletion_algorithms.py +713 -0
  130. synkit-1.6.2/synkit/Graph/Hyrogen/hextend.py +570 -0
  131. synkit-1.6.2/synkit/Graph/Hyrogen/hextend_legacy.py +215 -0
  132. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/ITS/its_builder.py +9 -6
  133. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/ITS/its_construction.py +68 -39
  134. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/ITS/its_decompose.py +26 -29
  135. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/ITS/its_destruction.py +29 -22
  136. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/ITS/its_expand.py +16 -15
  137. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/ITS/its_relabel.py +7 -6
  138. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/ITS/its_reverter.py +21 -30
  139. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/ITS/normalize_aam.py +27 -24
  140. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/ITS/partial_its.py +6 -6
  141. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/ITS/rc_extractor.py +48 -38
  142. synkit-1.6.2/synkit/Graph/ITS/stereo.py +74 -0
  143. synkit-1.6.2/synkit/Graph/MTG/__init__.py +58 -0
  144. synkit-1.6.2/synkit/Graph/MTG/history.py +661 -0
  145. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/MTG/mcs_matcher.py +16 -18
  146. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/MTG/mtg_explore.py +4 -4
  147. synkit-1.6.2/synkit/Graph/MTG/process.py +562 -0
  148. synkit-1.6.2/synkit/Graph/MTG/series_parallel.py +107 -0
  149. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/MTG/utils.py +24 -25
  150. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Matcher/approx_mcs.py +106 -134
  151. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Matcher/auto_est.py +96 -139
  152. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Matcher/automorphism.py +58 -51
  153. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Matcher/batch_cluster.py +54 -45
  154. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Matcher/dedup_matches.py +42 -37
  155. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Matcher/graph_cluster.py +45 -41
  156. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Matcher/graph_matcher.py +92 -76
  157. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Matcher/graph_morphism.py +130 -85
  158. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Matcher/mcs_matcher.py +104 -148
  159. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Matcher/multi_turbo_iso.py +23 -19
  160. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Matcher/orbit.py +67 -103
  161. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Matcher/partial_matcher.py +146 -207
  162. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Matcher/sing.py +91 -63
  163. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Matcher/subgraph_matcher.py +332 -139
  164. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Matcher/turbo_iso.py +81 -18
  165. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Matcher/wl_sel.py +93 -68
  166. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Mech/conversion.py +55 -81
  167. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Mech/conversion_debug.py +3 -3
  168. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Mech/lwg_editor.py +10 -7
  169. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Mech/lwg_ops.py +7 -7
  170. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Morphism/__init__.py +22 -0
  171. synkit-1.6.2/synkit/Graph/Morphism/llg.py +918 -0
  172. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Stereo/__init__.py +72 -0
  173. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Stereo/changes.py +220 -8
  174. synkit-1.6.2/synkit/Graph/Stereo/composition.py +391 -0
  175. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Stereo/configured.py +2 -4
  176. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Stereo/couplings.py +23 -2
  177. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Stereo/enumeration.py +2 -7
  178. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Stereo/global_stereo.py +7 -15
  179. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Stereo/identity.py +2 -5
  180. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Stereo/matching.py +72 -7
  181. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Stereo/pairwise.py +1 -2
  182. synkit-1.6.2/synkit/Graph/Stereo/reaction_interchange.py +266 -0
  183. synkit-1.6.2/synkit/Graph/Stereo/semantics.py +296 -0
  184. synkit-1.6.2/synkit/Graph/Stereo/wire.py +339 -0
  185. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Wildcard/fuse_graph.py +19 -19
  186. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Wildcard/graph_wc.py +25 -36
  187. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Wildcard/its_merge.py +29 -41
  188. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Wildcard/radwc.py +10 -13
  189. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Wildcard/wc_matcher.py +44 -60
  190. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Wildcard/wildcard.py +15 -20
  191. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/syn_graph.py +32 -30
  192. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/utils.py +33 -48
  193. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/IO/chem_converter.py +67 -11
  194. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/IO/combinatorial/gml_to_graph.py +39 -70
  195. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/IO/combinatorial/graph_to_gml.py +25 -36
  196. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/IO/combinatorial/graph_to_smarts.py +19 -22
  197. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/IO/combinatorial/smarts_expander.py +10 -15
  198. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/IO/combinatorial/smarts_generalizer.py +3 -4
  199. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/IO/combinatorial/smarts_to_graph.py +22 -26
  200. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/IO/data_io.py +10 -10
  201. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/IO/data_process.py +12 -10
  202. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/IO/debug.py +2 -2
  203. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/IO/gml_to_nx.py +4 -5
  204. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/IO/graph_to_mol.py +2 -2
  205. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/IO/mol_to_graph.py +16 -16
  206. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/IO/mol_to_graph_chemistry.py +16 -16
  207. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/IO/nx_to_gml.py +5 -5
  208. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/IO/smiles_to_id.py +23 -18
  209. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Mechanism/__init__.py +10 -1
  210. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Mechanism/benchmark.py +1 -1
  211. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Mechanism/equivalence.py +75 -1
  212. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Mechanism/evidence.py +1 -2
  213. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Mechanism/interchange.py +31 -14
  214. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Mechanism/model.py +301 -0
  215. synkit-1.6.2/synkit/Mechanism/neighbor_stereo.py +312 -0
  216. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Mechanism/replay.py +416 -16
  217. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Mechanism/schema.py +58 -0
  218. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Mechanism/stereo_state.py +68 -0
  219. synkit-1.6.2/synkit/Rule/Apply/__init__.py +35 -0
  220. synkit-1.6.2/synkit/Rule/Apply/dpo.py +965 -0
  221. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Rule/Apply/rule_matcher.py +8 -8
  222. synkit-1.6.2/synkit/Rule/Compose/__init__.py +106 -0
  223. synkit-1.6.2/synkit/Rule/Compose/composition.py +848 -0
  224. synkit-1.6.2/synkit/Rule/Compose/laws.py +397 -0
  225. synkit-1.6.2/synkit/Rule/Compose/search.py +748 -0
  226. synkit-1.6.2/synkit/Rule/Compose/synrule.py +170 -0
  227. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Rule/Modify/implict_rule.py +13 -22
  228. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Rule/Modify/longest_path.py +8 -8
  229. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Rule/Modify/molecule_rule.py +23 -20
  230. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Rule/Modify/prune_templates.py +18 -15
  231. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Rule/Modify/rule_utils.py +10 -9
  232. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Rule/generic_stereo.py +116 -3
  233. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Rule/syn_rule.py +99 -53
  234. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Synthesis/MSR/path_finder.py +38 -15
  235. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Synthesis/Metrics/_base.py +13 -10
  236. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Synthesis/Metrics/_plot.py +29 -21
  237. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Synthesis/Metrics/_ranking.py +57 -51
  238. synkit-1.6.2/synkit/Synthesis/RBL/__init__.py +80 -0
  239. synkit-1.6.2/synkit/Synthesis/RBL/engine.py +1249 -0
  240. synkit-1.6.2/synkit/Synthesis/RBL/matching.py +652 -0
  241. synkit-1.6.2/synkit/Synthesis/RBL/overlap.py +336 -0
  242. synkit-1.6.2/synkit/Synthesis/RBL/pipeline.py +371 -0
  243. synkit-1.6.2/synkit/Synthesis/RBL/policy.py +139 -0
  244. synkit-1.6.2/synkit/Synthesis/RBL/proof.py +370 -0
  245. synkit-1.6.1b1/synkit/Synthesis/Reactor/rbl_reaction.py → synkit-1.6.2/synkit/Synthesis/RBL/reaction.py +205 -44
  246. synkit-1.6.2/synkit/Synthesis/RBL/state.py +169 -0
  247. synkit-1.6.2/synkit/Synthesis/RBL/validation.py +1060 -0
  248. synkit-1.6.2/synkit/Synthesis/Reactor/__init__.py +60 -0
  249. synkit-1.6.2/synkit/Synthesis/Reactor/core/__init__.py +1 -0
  250. synkit-1.6.1b1/synkit/Synthesis/Reactor/syn_reactor.py → synkit-1.6.2/synkit/Synthesis/Reactor/core/engine.py +220 -191
  251. synkit-1.6.2/synkit/Synthesis/Reactor/core/product.py +621 -0
  252. synkit-1.6.1b1/synkit/Synthesis/Reactor/graph_rewrite.py → synkit-1.6.2/synkit/Synthesis/Reactor/core/rewrite.py +202 -42
  253. {synkit-1.6.1b1/synkit/Synthesis/Reactor → synkit-1.6.2/synkit/Synthesis/Reactor/core}/strategy.py +7 -14
  254. synkit-1.6.2/synkit/Synthesis/Reactor/matching/__init__.py +1 -0
  255. synkit-1.6.1b1/synkit/Synthesis/Reactor/reactor_matching.py → synkit-1.6.2/synkit/Synthesis/Reactor/matching/mixin.py +124 -154
  256. synkit-1.6.2/synkit/Synthesis/Reactor/matching/policy.py +345 -0
  257. synkit-1.6.2/synkit/Synthesis/Reactor/matching/symmetry.py +309 -0
  258. synkit-1.6.2/synkit/Synthesis/Reactor/output/__init__.py +1 -0
  259. synkit-1.6.2/synkit/Synthesis/Reactor/output/deduplication.py +703 -0
  260. synkit-1.6.1b1/synkit/Synthesis/Reactor/serialization_policy.py → synkit-1.6.2/synkit/Synthesis/Reactor/output/policy.py +1 -2
  261. {synkit-1.6.1b1/synkit/Synthesis/Reactor → synkit-1.6.2/synkit/Synthesis/Reactor/output}/serialization.py +123 -25
  262. synkit-1.6.2/synkit/Synthesis/Reactor/output/structural.py +893 -0
  263. synkit-1.6.2/synkit/Synthesis/Reactor/stereo/__init__.py +1 -0
  264. synkit-1.6.2/synkit/Synthesis/Reactor/stereo/assignment.py +35 -0
  265. synkit-1.6.1b1/synkit/Synthesis/Reactor/reactor_stereo.py → synkit-1.6.2/synkit/Synthesis/Reactor/stereo/mixin.py +238 -5
  266. synkit-1.6.2/synkit/Synthesis/Reactor/variants/__init__.py +1 -0
  267. synkit-1.6.1b1/synkit/Synthesis/Reactor/imba_engine.py → synkit-1.6.2/synkit/Synthesis/Reactor/variants/imbalanced.py +10 -13
  268. synkit-1.6.1b1/synkit/Synthesis/Reactor/partial_engine.py → synkit-1.6.2/synkit/Synthesis/Reactor/variants/partial.py +2 -2
  269. synkit-1.6.2/synkit/Synthesis/Reactor/workflow/__init__.py +1 -0
  270. synkit-1.6.1b1/synkit/Synthesis/Reactor/batch_reactor.py → synkit-1.6.2/synkit/Synthesis/Reactor/workflow/batch.py +146 -33
  271. {synkit-1.6.1b1/synkit/Synthesis/Reactor → synkit-1.6.2/synkit/Synthesis/Reactor/workflow}/benchmark.py +7 -12
  272. {synkit-1.6.1b1/synkit/Synthesis/Reactor → synkit-1.6.2/synkit/Synthesis/Reactor/workflow}/rule_filter.py +17 -10
  273. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Synthesis/reactor_utils.py +51 -54
  274. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Utils/utils.py +49 -55
  275. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Vis/__init__.py +4 -2
  276. synkit-1.6.2/synkit/Vis/crn/__init__.py +40 -0
  277. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Vis/epd/models.py +4 -4
  278. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Vis/epd/visualizer.py +32 -61
  279. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Vis/graph_visualizer.py +13 -20
  280. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Vis/its/__init__.py +2 -2
  281. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Vis/its/drawer.py +3 -3
  282. synkit-1.6.2/synkit/Vis/its_drawer.py +35 -0
  283. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Vis/molecule/__init__.py +2 -2
  284. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Vis/molecule/drawer.py +4 -6
  285. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Vis/molecule/reaction.py +1 -1
  286. synkit-1.6.2/synkit/Vis/molecule_drawer.py +33 -0
  287. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Vis/mtg/__init__.py +2 -2
  288. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Vis/mtg/drawer.py +2 -2
  289. synkit-1.6.2/synkit/Vis/mtg_drawer.py +34 -0
  290. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Vis/pdf_writer.py +29 -24
  291. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Vis/reaction/__init__.py +2 -2
  292. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Vis/reaction/rxn.py +7 -7
  293. synkit-1.6.2/synkit/Vis/reaction_drawer.py +41 -0
  294. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Vis/space/__init__.py +2 -2
  295. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Vis/space/embedding.py +19 -17
  296. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Vis/vis_synedu/rxn_vis.py +28 -33
  297. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Vis/visual_drawer.py +1 -1
  298. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Vis/visual_model.py +2 -2
  299. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/version.py +1 -1
  300. synkit-1.6.1b1/.gitignore +0 -98
  301. synkit-1.6.1b1/PKG-INFO +0 -210
  302. synkit-1.6.1b1/README.md +0 -171
  303. synkit-1.6.1b1/synkit/CRN/Construct/DAG/syncrn.py +0 -919
  304. synkit-1.6.1b1/synkit/CRN/Pathway/__init__.py +0 -27
  305. synkit-1.6.1b1/synkit/CRN/Petrinet/__init__.py +0 -47
  306. synkit-1.6.1b1/synkit/CRN/Props/__init__.py +0 -85
  307. synkit-1.6.1b1/synkit/CRN/Structure/syncrn.py +0 -1886
  308. synkit-1.6.1b1/synkit/CRN/Visualize/crn_vis.py +0 -199
  309. synkit-1.6.1b1/synkit/CRN/__init__.py +0 -81
  310. synkit-1.6.1b1/synkit/CRN/dev_crn/Structure/__init__.py +0 -35
  311. synkit-1.6.1b1/synkit/CRN/dev_crn/Structure/backend.py +0 -87
  312. synkit-1.6.1b1/synkit/CRN/dev_crn/Structure/conversion.py +0 -935
  313. synkit-1.6.1b1/synkit/CRN/dev_crn/Structure/hyperedge.py +0 -71
  314. synkit-1.6.1b1/synkit/CRN/dev_crn/Structure/hypergraph.py +0 -602
  315. synkit-1.6.1b1/synkit/CRN/dev_crn/Structure/rxn.py +0 -482
  316. synkit-1.6.1b1/synkit/CRN/dev_crn/Symmetry/automorphism.py +0 -380
  317. synkit-1.6.1b1/synkit/CRN/dev_crn/Symmetry/canon.py +0 -438
  318. synkit-1.6.1b1/synkit/CRN/dev_crn/Symmetry/wl_canon.py +0 -387
  319. synkit-1.6.1b1/synkit/CRN/dev_crn/__init__.py +0 -83
  320. synkit-1.6.1b1/synkit/CRN/dev_crn/configs/loader.py +0 -203
  321. synkit-1.6.1b1/synkit/CRN/dev_crn/configs/models.py +0 -299
  322. synkit-1.6.1b1/synkit/CRN/dev_crn/constants.py +0 -47
  323. synkit-1.6.1b1/synkit/CRN/dev_crn/crn_formula.py +0 -455
  324. synkit-1.6.1b1/synkit/CRN/dev_crn/deficiency.py +0 -872
  325. synkit-1.6.1b1/synkit/CRN/dev_crn/enumerator.py +0 -289
  326. synkit-1.6.1b1/synkit/CRN/dev_crn/exceptions.py +0 -97
  327. synkit-1.6.1b1/synkit/CRN/dev_crn/explorer.py +0 -249
  328. synkit-1.6.1b1/synkit/CRN/dev_crn/helpers.py +0 -87
  329. synkit-1.6.1b1/synkit/CRN/dev_crn/injectivity.py +0 -692
  330. synkit-1.6.1b1/synkit/CRN/dev_crn/motif.py +0 -371
  331. synkit-1.6.1b1/synkit/CRN/dev_crn/network.py +0 -272
  332. synkit-1.6.1b1/synkit/CRN/dev_crn/pathway.py +0 -119
  333. synkit-1.6.1b1/synkit/CRN/dev_crn/properties.py +0 -310
  334. synkit-1.6.1b1/synkit/CRN/dev_crn/reaction.py +0 -173
  335. synkit-1.6.1b1/synkit/CRN/dev_crn/utils.py +0 -118
  336. synkit-1.6.1b1/synkit/CRN/dev_crn/viz.py +0 -494
  337. synkit-1.6.1b1/synkit/Graph/Hyrogen/hextend.py +0 -305
  338. synkit-1.6.1b1/synkit/Graph/Wildcard/__init__.py +0 -0
  339. synkit-1.6.1b1/synkit/Rule/Apply/__init__.py +0 -0
  340. synkit-1.6.1b1/synkit/Rule/Compose/__init__.py +0 -0
  341. synkit-1.6.1b1/synkit/Rule/Modify/__init__.py +0 -0
  342. synkit-1.6.1b1/synkit/Synthesis/MSR/__init__.py +0 -0
  343. synkit-1.6.1b1/synkit/Synthesis/Metrics/__init__.py +0 -0
  344. synkit-1.6.1b1/synkit/Synthesis/Reactor/__init__.py +0 -29
  345. synkit-1.6.1b1/synkit/Synthesis/Reactor/assignment.py +0 -16
  346. synkit-1.6.1b1/synkit/Synthesis/Reactor/deduplication.py +0 -361
  347. synkit-1.6.1b1/synkit/Synthesis/Reactor/fusion_validation.py +0 -557
  348. synkit-1.6.1b1/synkit/Synthesis/Reactor/product_state.py +0 -397
  349. synkit-1.6.1b1/synkit/Synthesis/Reactor/rbl_engine.py +0 -1345
  350. synkit-1.6.1b1/synkit/Synthesis/Reactor/rbl_matching.py +0 -338
  351. synkit-1.6.1b1/synkit/Synthesis/Reactor/rbl_policy.py +0 -81
  352. synkit-1.6.1b1/synkit/Synthesis/__init__.py +0 -0
  353. synkit-1.6.1b1/synkit/Utils/__init__.py +0 -0
  354. synkit-1.6.1b1/synkit/Vis/crn/__init__.py +0 -5
  355. synkit-1.6.1b1/synkit/Vis/crn/visualizer.py +0 -981
  356. synkit-1.6.1b1/synkit/Vis/its_drawer.py +0 -615
  357. synkit-1.6.1b1/synkit/Vis/molecule_drawer.py +0 -565
  358. synkit-1.6.1b1/synkit/Vis/mtg_drawer.py +0 -769
  359. synkit-1.6.1b1/synkit/Vis/reaction_drawer.py +0 -285
  360. {synkit-1.6.1b1 → synkit-1.6.2}/LICENSE +0 -0
  361. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Construct/__init__.py +0 -0
  362. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Construct/arity.py +0 -0
  363. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Construct/derivation.py +0 -0
  364. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Construct/flattener.py +0 -0
  365. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Construct/keys.py +0 -0
  366. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Construct/mixtures.py +0 -0
  367. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Construct/smiles.py +0 -0
  368. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Construct/state.py +0 -0
  369. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Construct/strategy.py +0 -0
  370. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Structure/__init__.py +0 -0
  371. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Symmetry/__init__.py +0 -0
  372. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Symmetry/symmetry.py +0 -0
  373. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Visualize/__init__.py +0 -0
  374. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Visualize/labels.py +0 -0
  375. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/CRN/Visualize/palette.py +0 -0
  376. {synkit-1.6.1b1/synkit/CRN/Construct/DAG → synkit-1.6.2/synkit/Chem/Cluster}/__init__.py +0 -0
  377. {synkit-1.6.1b1/synkit/CRN/Query → synkit-1.6.2/synkit/Chem/Fingerprint}/__init__.py +0 -0
  378. {synkit-1.6.1b1/synkit/CRN/dev_crn/Symmetry → synkit-1.6.2/synkit/Chem/Molecule}/__init__.py +0 -0
  379. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Molecule/_chirality_types.py +0 -0
  380. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Molecule/derived_stereo_naming.py +0 -0
  381. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Molecule/formula.py +0 -0
  382. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Molecule/global_stereo.py +0 -0
  383. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Molecule/stereo_evidence.py +0 -0
  384. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/Mapper/__init__.py +0 -0
  385. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/Mapper/chem/__init__.py +0 -0
  386. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/Mapper/chem/aam.py +0 -0
  387. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/Mapper/chem/smiles.py +0 -0
  388. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/Mapper/exact/__init__.py +0 -0
  389. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/Mapper/exact/enumeration_result.py +0 -0
  390. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/Mapper/graph/__init__.py +0 -0
  391. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/Mapper/graph/labeled_graph.py +0 -0
  392. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/Mapper/graph/synkit_adapter.py +0 -0
  393. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/Mapper/io/__init__.py +0 -0
  394. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/Mapper/slap/__init__.py +0 -0
  395. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/Mapper/slap/sequential.py +0 -0
  396. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/__init__.py +0 -0
  397. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/Reaction/aam_validator.py +0 -0
  398. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Chem/__init__.py +0 -0
  399. {synkit-1.6.1b1/synkit/CRN/dev_crn/configs → synkit-1.6.2/synkit/Data}/__init__.py +0 -0
  400. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Data/aldol.json.gz +0 -0
  401. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Data/paracetamol.json.gz +0 -0
  402. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Canon/__init__.py +0 -0
  403. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Canon/nauty.py +0 -0
  404. {synkit-1.6.1b1/synkit/Chem/Cluster → synkit-1.6.2/synkit/Graph/Context}/__init__.py +0 -0
  405. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/FG/__init__.py +0 -0
  406. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/FG/api.py +0 -0
  407. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/FG/audit.py +0 -0
  408. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/FG/catalog.py +0 -0
  409. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/FG/detector.py +0 -0
  410. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/FG/model.py +0 -0
  411. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/FG/recognizers.py +0 -0
  412. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/FG/ring_system.py +0 -0
  413. {synkit-1.6.1b1/synkit/Chem → synkit-1.6.2/synkit/Graph/Feature}/Fingerprint/__init__.py +0 -0
  414. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Feature/__init__.py +0 -0
  415. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Fusion/__init__.py +0 -0
  416. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/ITS/__init__.py +0 -0
  417. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/MTG/mtg.py +0 -0
  418. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Matcher/__init__.py +0 -0
  419. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Mech/__init__.py +0 -0
  420. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Mech/electron_accounting.py +0 -0
  421. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Morphism/constraints.py +0 -0
  422. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Morphism/morphism.py +0 -0
  423. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Morphism/stereo.py +0 -0
  424. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Morphism/stereo_morphism.py +0 -0
  425. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Morphism/stereo_morphism_helpers.py +0 -0
  426. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Morphism/stereo_morphism_types.py +0 -0
  427. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Stereo/_descriptor_core.py +0 -0
  428. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Stereo/_descriptor_serialization.py +0 -0
  429. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Stereo/canonical.py +0 -0
  430. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Stereo/descriptors.py +0 -0
  431. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Stereo/extended_descriptors.py +0 -0
  432. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Stereo/global_configured.py +0 -0
  433. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Stereo/interchange.py +0 -0
  434. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Stereo/legacy.py +0 -0
  435. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Stereo/orbits.py +0 -0
  436. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Stereo/outcomes.py +0 -0
  437. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Stereo/rdkit_adapter.py +0 -0
  438. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/Stereo/supports.py +0 -0
  439. {synkit-1.6.1b1/synkit/Chem/Molecule → synkit-1.6.2/synkit/Graph/Wildcard}/__init__.py +0 -0
  440. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/__init__.py +0 -0
  441. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Graph/canon_graph.py +0 -0
  442. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/IO/__init__.py +0 -0
  443. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/IO/combinatorial/__init__.py +0 -0
  444. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/IO/conversion.py +0 -0
  445. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Mechanism/adapters.py +0 -0
  446. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Mechanism/audit.py +0 -0
  447. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Mechanism/compatibility.py +0 -0
  448. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Mechanism/drawing.py +0 -0
  449. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Mechanism/electron_models.py +0 -0
  450. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Mechanism/radical_data.py +0 -0
  451. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Mechanism/symbols.py +0 -0
  452. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Rule/Compose/_identity.py +0 -0
  453. {synkit-1.6.1b1/synkit/Data → synkit-1.6.2/synkit/Rule/Modify}/__init__.py +0 -0
  454. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Rule/Modify/strip_rule.py +0 -0
  455. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Rule/__init__.py +0 -0
  456. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Rule/stereo_identity.py +0 -0
  457. {synkit-1.6.1b1/synkit/Graph/Context → synkit-1.6.2/synkit/Synthesis/MSR}/__init__.py +0 -0
  458. {synkit-1.6.1b1/synkit/Graph/Feature/Fingerprint → synkit-1.6.2/synkit/Synthesis/Metrics}/__init__.py +0 -0
  459. /synkit-1.6.1b1/synkit/Synthesis/Reactor/post_syn.py → /synkit-1.6.2/synkit/Synthesis/Reactor/workflow/postprocess.py +0 -0
  460. {synkit-1.6.1b1/synkit/Graph/Hyrogen → synkit-1.6.2/synkit/Synthesis}/__init__.py +0 -0
  461. {synkit-1.6.1b1/synkit/Graph/MTG → synkit-1.6.2/synkit/Utils}/__init__.py +0 -0
  462. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Vis/epd/__init__.py +0 -0
  463. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Vis/epd/arrows.py +0 -0
  464. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Vis/epd/chem.py +0 -0
  465. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Vis/epd/constants.py +0 -0
  466. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Vis/epd/layout.py +0 -0
  467. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Vis/epd/mapping.py +0 -0
  468. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Vis/epd/render.py +0 -0
  469. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Vis/epd/utils.py +0 -0
  470. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Vis/reaction/rule.py +0 -0
  471. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Vis/space/chemical.py +0 -0
  472. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Vis/vis_synedu/Vis/__init__.py +0 -0
  473. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Vis/vis_synedu/Vis/dpo.py +0 -0
  474. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/Vis/vis_synedu/vis.py +0 -0
  475. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/__init__.py +0 -0
  476. {synkit-1.6.1b1 → synkit-1.6.2}/synkit/examples.py +0 -0
@@ -0,0 +1,116 @@
1
+ # Python bytecode, environments, and tool caches
2
+ **/__pycache__/
3
+ *.py[cod]
4
+ .coverage
5
+ .mypy_cache/
6
+ .pytest_cache/
7
+ .ruff_cache/
8
+ .tox/
9
+ .venv/
10
+ venv/
11
+ *cachedir
12
+ */catboost_info/
13
+
14
+ # Build and generated documentation output
15
+ /build/
16
+ /dist/
17
+ /docs/
18
+ *.egg-info/
19
+
20
+ # Generated logs, reports, notebooks, and data files
21
+ *.log
22
+ *.pdf
23
+ *.rdf
24
+ *.ipynb
25
+ *.csv
26
+ *.json
27
+ *.json.gz
28
+ *.pkl.gz
29
+ *.txt
30
+
31
+ # Package resources and repository evidence retained despite the broad rules
32
+ !LICENSES/*.txt
33
+ !synkit/CRN/Benchmark/data/kegg_modules.json
34
+ !Data/Conformance/stereomolgraph_graph_conformance.json
35
+ !Data/Mech/polar.json
36
+ !Data/Mech/radical.json
37
+ !Data/Mech/stereo.json
38
+ !Data/Schema/
39
+ !Data/Schema/attribute_propagation_v1_5.json
40
+ !/tools/python_file_size_baseline.json
41
+ !Test/Synthesis/Reactor/fixtures/small_rewrite_conformance.json
42
+
43
+ # Lewis benchmark inputs and reviewed evidence
44
+ !Experiment/Lewis/Data/all.csv
45
+ !Experiment/Lewis/Data/benchmark.json.gz
46
+ !Experiment/Lewis/Data/combinatorial_all.csv
47
+ !Experiment/Lewis/Data/hydrogen.pkl.gz
48
+ !Experiment/Lewis/mech_path/Data/MechanismBench/electrocyclic_machinery.json
49
+ !Experiment/Lewis/mech_path/Data/MechanismBench/polar.json
50
+ !Experiment/Lewis/mech_path/Data/MechanismBench/radical.json
51
+ !Experiment/Lewis/mech_path/Data/MechanismBench/stereo.json
52
+ !Experiment/Lewis/mech_path/Data/MechanismBench/stereo_branch_coverage.json
53
+ !Experiment/Lewis/mech_path/Data/MechanismBench/stereo_couplings.json
54
+ !Experiment/Lewis/mech_path/Data/MechanismBench/evidence/mechanismbench_evidence.json
55
+ !Experiment/Lewis/mech_path/Data/reconstruction_audit/polar-failures.csv
56
+ !Experiment/Lewis/mech_path/Data/reconstruction_audit/radical-arrow-review.csv
57
+ !Experiment/Lewis/mech_path/Data/reconstruction_audit/radical-failures.csv
58
+ !Experiment/Lewis/rule_replay/Data/bidirectional-replay/results.json
59
+ !Experiment/Lewis/rule_replay/Data/relative-lone-pair/results.json
60
+
61
+ # Stereo benchmark inputs and reproducible reports
62
+ !Experiment/Stereo/Data/**/*.csv
63
+ !Experiment/Stereo/Data/**/*.json
64
+ !Experiment/Stereo/Data/manifest.json
65
+ !Experiment/Stereo/Data/Perception/full_detection_report.json
66
+ !Experiment/Stereo/Data/Perception/perception_conformance_cases.json
67
+
68
+ # Large or reproducible data products
69
+ /Data/Benchmark/*
70
+ !/Data/Benchmark/mech/
71
+ /Data/Benchmark/mech/*
72
+ !/Data/Benchmark/mech/README.md
73
+ !/Data/Benchmark/mech/polar-failures.csv
74
+ !/Data/Benchmark/mech/radical-failures.csv
75
+ !/Data/Benchmark/partial_expand/
76
+ !/Data/Benchmark/partial_expand/**
77
+ /Data/Benchmark/partial_expand/results/
78
+ !/Data/Benchmark/Stereo/
79
+ !/Data/Benchmark/Stereo/**
80
+ /Data/Fragment/*
81
+ /Data/Study/CRN/case_formose/*
82
+ /Data/USPTO/*
83
+ /Experiment/Lewis/Runs/
84
+
85
+ # Generated FLOWER intermediates and long-run evidence
86
+ /Experiment/Lewis/FLOWER/batches/
87
+ /Experiment/Lewis/FLOWER/full_reactions/
88
+ /Experiment/Lewis/FLOWER/replay-debug/
89
+ /Experiment/Lewis/FLOWER/replay-results*/
90
+ /Experiment/Lewis/FLOWER/replay-runs/
91
+ !Experiment/Lewis/FLOWER/full-reaction-batches/manifest.json
92
+ !Experiment/Lewis/FLOWER/full-reaction-replay-summary.json
93
+
94
+ # Resumable local benchmark state
95
+ /Experiment/RBL/*checkpoint*.jsonl
96
+
97
+ # Development and scratch paths
98
+ /Test/Conformance/
99
+ /crn/
100
+ /debug/
101
+ /dev/
102
+ /paper/*
103
+ /sprint/
104
+ /synkit/Graph/dev/
105
+
106
+ # Local one-off scripts and prompts
107
+ .gitignore
108
+ measure_candidate_stages.py
109
+ request.md
110
+ run.sh
111
+ run_rdcanon.py
112
+ run_valid_bug_cases.py
113
+ test_partial.py
114
+ test_run.py
115
+ test_syn.py
116
+ test_syn_reactor.py
synkit-1.6.2/PKG-INFO ADDED
@@ -0,0 +1,183 @@
1
+ Metadata-Version: 2.4
2
+ Name: synkit
3
+ Version: 1.6.2
4
+ Summary: Utility for reaction modeling using graph grammar
5
+ Project-URL: homepage, https://github.com/TieuLongPhan/SynKit
6
+ Project-URL: source, https://github.com/TieuLongPhan/SynKit
7
+ Project-URL: issues, https://github.com/TieuLongPhan/SynKit/issues
8
+ Project-URL: documentation, https://tieulongphan.github.io/SynKit/
9
+ Author-email: Tieu Long Phan <tieu@bioinf.uni-leipzig.de>
10
+ License: MIT
11
+ License-File: LICENSE
12
+ Classifier: License :: OSI Approved :: MIT License
13
+ Classifier: Operating System :: OS Independent
14
+ Classifier: Programming Language :: Python :: 3
15
+ Requires-Python: >=3.11
16
+ Requires-Dist: networkx>=3.3
17
+ Requires-Dist: numpy>=2.2.0
18
+ Requires-Dist: pandas>=1.5.3
19
+ Requires-Dist: rdkit>=2025.3.1
20
+ Requires-Dist: regex>=2024.11.6
21
+ Requires-Dist: requests>=2.32.3
22
+ Requires-Dist: scikit-learn>=1.4.0
23
+ Requires-Dist: scipy>=1.14.0
24
+ Requires-Dist: seaborn>=0.13.2
25
+ Provides-Extra: all
26
+ Requires-Dist: numpy>=2.2.0; extra == 'all'
27
+ Requires-Dist: sympy>=1.13.1; extra == 'all'
28
+ Requires-Dist: torch>=2.2.0; extra == 'all'
29
+ Provides-Extra: docs
30
+ Requires-Dist: graphviz; extra == 'docs'
31
+ Requires-Dist: myst-parser; extra == 'docs'
32
+ Requires-Dist: pydata-sphinx-theme; extra == 'docs'
33
+ Requires-Dist: sphinx-copybutton; extra == 'docs'
34
+ Requires-Dist: sphinx-design; extra == 'docs'
35
+ Requires-Dist: sphinx-rtd-theme; extra == 'docs'
36
+ Requires-Dist: sphinx-togglebutton; extra == 'docs'
37
+ Requires-Dist: sphinx>=6.0; extra == 'docs'
38
+ Requires-Dist: sphinxcontrib-bibtex; extra == 'docs'
39
+ Description-Content-Type: text/markdown
40
+
41
+ # SynKit
42
+
43
+ [![PyPI version](https://img.shields.io/pypi/v/synkit.svg)](https://pypi.org/project/synkit/)
44
+ [![Conda version](https://img.shields.io/conda/vn/tieulongphan/synkit.svg)](https://anaconda.org/tieulongphan/synkit)
45
+ [![Docker Pulls](https://img.shields.io/docker/pulls/tieulongphan/synkit.svg)](https://hub.docker.com/r/tieulongphan/synkit)
46
+ [![Docker Image Version](https://img.shields.io/docker/v/tieulongphan/synkit/latest?label=container)](https://hub.docker.com/r/tieulongphan/synkit)
47
+ [![License](https://img.shields.io/github/license/tieulongphan/synkit.svg)](https://github.com/tieulongphan/synkit/blob/main/LICENSE)
48
+ [![Release](https://img.shields.io/github/v/release/tieulongphan/synkit.svg)](https://github.com/tieulongphan/synkit/releases)
49
+ [![Last Commit](https://img.shields.io/github/last-commit/tieulongphan/synkit.svg)](https://github.com/tieulongphan/synkit/commits)
50
+ [![Zenodo](https://zenodo.org/badge/DOI/10.5281/zenodo.15269901.svg)](https://doi.org/10.5281/zenodo.15269901)
51
+ [![CI](https://github.com/tieulongphan/synkit/actions/workflows/test-and-lint.yml/badge.svg?branch=main)](https://github.com/tieulongphan/synkit/actions/workflows/test-and-lint.yml)
52
+ [![Stars](https://img.shields.io/github/stars/tieulongphan/synkit.svg?style=social&label=Star)](https://github.com/tieulongphan/synkit/stargazers)
53
+
54
+ **Graph-native reaction informatics and executable electron-flow models**
55
+
56
+ SynKit is a Python toolkit for atom-mapped reactions, chemical graph
57
+ transformations, Lewis-labelled graphs, and explicitly supplied reaction
58
+ mechanisms. It connects reaction representation, rule extraction, graph
59
+ rewriting, stereochemistry, and mechanism verification through a common
60
+ attributed-graph model.
61
+
62
+ SynKit verifies mechanisms supplied by the user; it does not claim to predict
63
+ the kinetically or thermodynamically preferred mechanism.
64
+
65
+ ![SynKit graphical abstract](https://raw.githubusercontent.com/TieuLongPhan/SynKit/main/Data/Figure/synkit_graphical_abstract.svg)
66
+
67
+ ## Highlights
68
+
69
+ - Convert mapped reaction SMILES into ITS and reaction-centre graphs.
70
+ - Extract and apply attributed graph-transformation rules.
71
+ - Represent lone pairs, radicals, and separate sigma and pi occupancies with
72
+ Lewis-labelled graphs.
73
+ - Execute curved-arrow and atomically coupled fishhook events.
74
+ - Preserve tetrahedral, axial, and extended stereochemical information.
75
+ - Build and analyse mechanism trajectory graphs and chemical reaction
76
+ networks.
77
+
78
+ ## Installation
79
+
80
+ SynKit requires Python 3.11 or later.
81
+
82
+ ```bash
83
+ python -m pip install synkit
84
+ ```
85
+
86
+ Install the optional dependencies with:
87
+
88
+ ```bash
89
+ python -m pip install "synkit[all]"
90
+ ```
91
+
92
+ Alternatively, use the published container:
93
+
94
+ ```bash
95
+ docker pull tieulongphan/synkit:latest
96
+ docker run --rm tieulongphan/synkit:latest \
97
+ python -c "import synkit; print(synkit.__version__)"
98
+ ```
99
+
100
+ ## Quick start
101
+
102
+ This self-contained example converts an atom-mapped substitution into an
103
+ imaginary transition-state graph and reports its changed bonds:
104
+
105
+ ```python
106
+ from synkit.IO import rsmi_to_its
107
+
108
+ reaction = "[CH3:1][Br:2].[OH-:3]>>[CH3:1][OH:3].[Br-:2]"
109
+ its = rsmi_to_its(reaction, core=False, format="tuple")
110
+
111
+ changed_bonds = [
112
+ (source, target, data["order"])
113
+ for source, target, data in its.edges(data=True)
114
+ if data["order"][0] != data["order"][1]
115
+ ]
116
+ print(changed_bonds)
117
+ ```
118
+
119
+ The output records the broken C-Br bond as `(1.0, 0.0)` and the formed C-O
120
+ bond as `(0.0, 1.0)`. Continue with the
121
+ [graph](https://tieulongphan.github.io/SynKit/graph.html),
122
+ [rule](https://tieulongphan.github.io/SynKit/rule.html), and
123
+ [synthesis](https://tieulongphan.github.io/SynKit/synthesis.html) guides.
124
+
125
+ ## Supplied-mechanism verification
126
+
127
+ SynKit can parse typed electron-flow annotations, replay their elementary
128
+ steps, and return a verification certificate and mechanism trajectory graph.
129
+ Canonical electron loci distinguish lone pairs, sigma bonds, pi bonds, and
130
+ radical electrons. Curved arrows carry two electrons; fishhooks carry one;
131
+ coupled radical events commit atomically from a common pre-state.
132
+
133
+ See the
134
+ [mechanism documentation](https://tieulongphan.github.io/SynKit/mechanism.html)
135
+ for the supported interchange formats, verification policies, and complete
136
+ examples.
137
+
138
+ ## Documentation
139
+
140
+ - [Documentation](https://tieulongphan.github.io/SynKit/)
141
+ - [API reference](https://tieulongphan.github.io/SynKit/api/index.html)
142
+ - [Issue tracker](https://github.com/TieuLongPhan/SynKit/issues)
143
+ - [Changelog](doc/changelog.rst)
144
+
145
+ ## Publications
146
+
147
+ - [Lewis-labeled graphs: curly arrows and fishhooks as executable electron
148
+ transfers](https://arxiv.org/abs/2607.26088), submitted (2026).
149
+ - [SynKit: A Graph-Based Python Framework for Rule-Based Reaction Modeling and
150
+ Analysis](https://pubs.acs.org/doi/full/10.1021/acs.jcim.5c02123), *Journal
151
+ of Chemical Information and Modeling* (2025).
152
+
153
+ ## Contributing
154
+
155
+ Contributions and bug reports are welcome. Create a branch from the current
156
+ mainline, make a focused change, and run the repository checks before opening
157
+ a pull request:
158
+
159
+ ```bash
160
+ git switch -c feature/short-description
161
+ bash scripts/lint.sh
162
+ bash scripts/pytest.sh
163
+ ```
164
+
165
+ Questions can be sent to
166
+ [tieu@bioinf.uni-leipzig.de](mailto:tieu@bioinf.uni-leipzig.de).
167
+
168
+ ## Contributors
169
+
170
+ - [Tieu-Long Phan](https://tieulongphan.github.io/)
171
+ - [Klaus Weinbauer](https://github.com/klausweinbauer)
172
+ - [Phuoc-Chung Nguyen Van](https://github.com/phuocchung123)
173
+ - [Tuyet-Minh Phan](https://github.com/tuyetminhphan)
174
+
175
+ ## License
176
+
177
+ SynKit is distributed under the MIT License. See [LICENSE](LICENSE).
178
+
179
+ ## Acknowledgments
180
+
181
+ This project received funding from the European Union's Horizon Europe
182
+ Doctoral Network programme under Marie Skłodowska-Curie grant agreement No.
183
+ 101072930 ([TACsy](https://tacsy.eu/)).
synkit-1.6.2/README.md ADDED
@@ -0,0 +1,143 @@
1
+ # SynKit
2
+
3
+ [![PyPI version](https://img.shields.io/pypi/v/synkit.svg)](https://pypi.org/project/synkit/)
4
+ [![Conda version](https://img.shields.io/conda/vn/tieulongphan/synkit.svg)](https://anaconda.org/tieulongphan/synkit)
5
+ [![Docker Pulls](https://img.shields.io/docker/pulls/tieulongphan/synkit.svg)](https://hub.docker.com/r/tieulongphan/synkit)
6
+ [![Docker Image Version](https://img.shields.io/docker/v/tieulongphan/synkit/latest?label=container)](https://hub.docker.com/r/tieulongphan/synkit)
7
+ [![License](https://img.shields.io/github/license/tieulongphan/synkit.svg)](https://github.com/tieulongphan/synkit/blob/main/LICENSE)
8
+ [![Release](https://img.shields.io/github/v/release/tieulongphan/synkit.svg)](https://github.com/tieulongphan/synkit/releases)
9
+ [![Last Commit](https://img.shields.io/github/last-commit/tieulongphan/synkit.svg)](https://github.com/tieulongphan/synkit/commits)
10
+ [![Zenodo](https://zenodo.org/badge/DOI/10.5281/zenodo.15269901.svg)](https://doi.org/10.5281/zenodo.15269901)
11
+ [![CI](https://github.com/tieulongphan/synkit/actions/workflows/test-and-lint.yml/badge.svg?branch=main)](https://github.com/tieulongphan/synkit/actions/workflows/test-and-lint.yml)
12
+ [![Stars](https://img.shields.io/github/stars/tieulongphan/synkit.svg?style=social&label=Star)](https://github.com/tieulongphan/synkit/stargazers)
13
+
14
+ **Graph-native reaction informatics and executable electron-flow models**
15
+
16
+ SynKit is a Python toolkit for atom-mapped reactions, chemical graph
17
+ transformations, Lewis-labelled graphs, and explicitly supplied reaction
18
+ mechanisms. It connects reaction representation, rule extraction, graph
19
+ rewriting, stereochemistry, and mechanism verification through a common
20
+ attributed-graph model.
21
+
22
+ SynKit verifies mechanisms supplied by the user; it does not claim to predict
23
+ the kinetically or thermodynamically preferred mechanism.
24
+
25
+ ![SynKit graphical abstract](https://raw.githubusercontent.com/TieuLongPhan/SynKit/main/Data/Figure/synkit_graphical_abstract.svg)
26
+
27
+ ## Highlights
28
+
29
+ - Convert mapped reaction SMILES into ITS and reaction-centre graphs.
30
+ - Extract and apply attributed graph-transformation rules.
31
+ - Represent lone pairs, radicals, and separate sigma and pi occupancies with
32
+ Lewis-labelled graphs.
33
+ - Execute curved-arrow and atomically coupled fishhook events.
34
+ - Preserve tetrahedral, axial, and extended stereochemical information.
35
+ - Build and analyse mechanism trajectory graphs and chemical reaction
36
+ networks.
37
+
38
+ ## Installation
39
+
40
+ SynKit requires Python 3.11 or later.
41
+
42
+ ```bash
43
+ python -m pip install synkit
44
+ ```
45
+
46
+ Install the optional dependencies with:
47
+
48
+ ```bash
49
+ python -m pip install "synkit[all]"
50
+ ```
51
+
52
+ Alternatively, use the published container:
53
+
54
+ ```bash
55
+ docker pull tieulongphan/synkit:latest
56
+ docker run --rm tieulongphan/synkit:latest \
57
+ python -c "import synkit; print(synkit.__version__)"
58
+ ```
59
+
60
+ ## Quick start
61
+
62
+ This self-contained example converts an atom-mapped substitution into an
63
+ imaginary transition-state graph and reports its changed bonds:
64
+
65
+ ```python
66
+ from synkit.IO import rsmi_to_its
67
+
68
+ reaction = "[CH3:1][Br:2].[OH-:3]>>[CH3:1][OH:3].[Br-:2]"
69
+ its = rsmi_to_its(reaction, core=False, format="tuple")
70
+
71
+ changed_bonds = [
72
+ (source, target, data["order"])
73
+ for source, target, data in its.edges(data=True)
74
+ if data["order"][0] != data["order"][1]
75
+ ]
76
+ print(changed_bonds)
77
+ ```
78
+
79
+ The output records the broken C-Br bond as `(1.0, 0.0)` and the formed C-O
80
+ bond as `(0.0, 1.0)`. Continue with the
81
+ [graph](https://tieulongphan.github.io/SynKit/graph.html),
82
+ [rule](https://tieulongphan.github.io/SynKit/rule.html), and
83
+ [synthesis](https://tieulongphan.github.io/SynKit/synthesis.html) guides.
84
+
85
+ ## Supplied-mechanism verification
86
+
87
+ SynKit can parse typed electron-flow annotations, replay their elementary
88
+ steps, and return a verification certificate and mechanism trajectory graph.
89
+ Canonical electron loci distinguish lone pairs, sigma bonds, pi bonds, and
90
+ radical electrons. Curved arrows carry two electrons; fishhooks carry one;
91
+ coupled radical events commit atomically from a common pre-state.
92
+
93
+ See the
94
+ [mechanism documentation](https://tieulongphan.github.io/SynKit/mechanism.html)
95
+ for the supported interchange formats, verification policies, and complete
96
+ examples.
97
+
98
+ ## Documentation
99
+
100
+ - [Documentation](https://tieulongphan.github.io/SynKit/)
101
+ - [API reference](https://tieulongphan.github.io/SynKit/api/index.html)
102
+ - [Issue tracker](https://github.com/TieuLongPhan/SynKit/issues)
103
+ - [Changelog](doc/changelog.rst)
104
+
105
+ ## Publications
106
+
107
+ - [Lewis-labeled graphs: curly arrows and fishhooks as executable electron
108
+ transfers](https://arxiv.org/abs/2607.26088), submitted (2026).
109
+ - [SynKit: A Graph-Based Python Framework for Rule-Based Reaction Modeling and
110
+ Analysis](https://pubs.acs.org/doi/full/10.1021/acs.jcim.5c02123), *Journal
111
+ of Chemical Information and Modeling* (2025).
112
+
113
+ ## Contributing
114
+
115
+ Contributions and bug reports are welcome. Create a branch from the current
116
+ mainline, make a focused change, and run the repository checks before opening
117
+ a pull request:
118
+
119
+ ```bash
120
+ git switch -c feature/short-description
121
+ bash scripts/lint.sh
122
+ bash scripts/pytest.sh
123
+ ```
124
+
125
+ Questions can be sent to
126
+ [tieu@bioinf.uni-leipzig.de](mailto:tieu@bioinf.uni-leipzig.de).
127
+
128
+ ## Contributors
129
+
130
+ - [Tieu-Long Phan](https://tieulongphan.github.io/)
131
+ - [Klaus Weinbauer](https://github.com/klausweinbauer)
132
+ - [Phuoc-Chung Nguyen Van](https://github.com/phuocchung123)
133
+ - [Tuyet-Minh Phan](https://github.com/tuyetminhphan)
134
+
135
+ ## License
136
+
137
+ SynKit is distributed under the MIT License. See [LICENSE](LICENSE).
138
+
139
+ ## Acknowledgments
140
+
141
+ This project received funding from the European Union's Horizon Europe
142
+ Doctoral Network programme under Marie Skłodowska-Curie grant agreement No.
143
+ 101072930 ([TACsy](https://tacsy.eu/)).
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "synkit"
7
- version = "1.6.1b1"
7
+ version = "1.6.2"
8
8
  description = "Utility for reaction modeling using graph grammar"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -19,6 +19,7 @@ classifiers = [
19
19
  "Operating System :: OS Independent",
20
20
  ]
21
21
  dependencies = [
22
+ "numpy>=2.2.0",
22
23
  "scikit-learn>=1.4.0",
23
24
  "pandas>=1.5.3",
24
25
  "rdkit>=2025.3.1",
@@ -39,7 +40,7 @@ docs = [
39
40
  "pydata-sphinx-theme",
40
41
  "sphinx-rtd-theme",
41
42
 
42
- # Your enabled extensions
43
+ # Sphinx extensions
43
44
  "sphinxcontrib-bibtex",
44
45
  "sphinx-design",
45
46
  "sphinx-copybutton",
@@ -49,8 +50,7 @@ docs = [
49
50
  # (still requires the system `dot` binary to render diagrams)
50
51
  "graphviz",
51
52
 
52
- # Nice-to-have for markdown in docs if you ever add .md pages
53
- # (safe even if unused)
53
+ # Markdown source support
54
54
  "myst-parser",
55
55
  ]
56
56
 
@@ -63,12 +63,15 @@ documentation = "https://tieulongphan.github.io/SynKit/"
63
63
 
64
64
  [tool.hatch.build.targets.wheel]
65
65
  packages = ["synkit"]
66
+ core-metadata-version = "2.4"
66
67
 
67
68
  [tool.hatch.build.targets.wheel.force-include]
68
69
  "synkit/Data/aldol.json.gz" = "synkit/Data/aldol.json.gz"
69
70
  "synkit/Data/paracetamol.json.gz" = "synkit/Data/paracetamol.json.gz"
71
+ "synkit/CRN/Benchmark/data/kegg_modules.json" = "synkit/CRN/Benchmark/data/kegg_modules.json"
70
72
 
71
73
  [tool.hatch.build.targets.sdist]
74
+ core-metadata-version = "2.4"
72
75
  include = [
73
76
  "/synkit",
74
77
  "/LICENSE",
@@ -80,3 +83,12 @@ include = [
80
83
  [tool.hatch.build.targets.sdist.force-include]
81
84
  "synkit/Data/aldol.json.gz" = "synkit/Data/aldol.json.gz"
82
85
  "synkit/Data/paracetamol.json.gz" = "synkit/Data/paracetamol.json.gz"
86
+ "synkit/CRN/Benchmark/data/kegg_modules.json" = "synkit/CRN/Benchmark/data/kegg_modules.json"
87
+
88
+ [tool.coverage.run]
89
+ source = ["synkit"]
90
+
91
+ [tool.coverage.report]
92
+ fail_under = 70
93
+ precision = 1
94
+ show_missing = true
@@ -0,0 +1,105 @@
1
+ """Benchmark, validation and case-study material for :mod:`synkit.CRN`.
2
+
3
+ Three things live here, all runnable and all shipped with the package so the
4
+ results in the paper can be regenerated by a reader:
5
+
6
+ - **A validation set** (:mod:`~synkit.CRN.Benchmark.networks`,
7
+ :mod:`~synkit.CRN.Benchmark.validate`) — literature and regression networks
8
+ with the structural verdicts they must reproduce, each quantity additionally
9
+ recomputed by an independent route from
10
+ :mod:`~synkit.CRN.Benchmark.crosschecks`.
11
+ - **A scaling benchmark** (:mod:`~synkit.CRN.Benchmark.scaling`) — wall-clock
12
+ timings of the analysis stack against network size.
13
+ - **A metabolic case study** (:mod:`~synkit.CRN.Benchmark.kegg`) — cached KEGG
14
+ modules pushed through the whole chain, from pathway retrieval to
15
+ conservation laws, persistence and flux realizability.
16
+
17
+ .. rubric:: Example
18
+
19
+ .. code-block:: python
20
+
21
+ from synkit.CRN.Benchmark import run_validation, validation_table
22
+
23
+ print(validation_table(run_validation()))
24
+ """
25
+
26
+ from __future__ import annotations
27
+
28
+ from .networks import (
29
+ BENCHMARK_NETWORKS,
30
+ BenchmarkNetwork,
31
+ get_network,
32
+ network_names,
33
+ )
34
+ from .crosschecks import (
35
+ brute_force_siphons,
36
+ check_conservation_laws,
37
+ check_semiflows,
38
+ deficiency_by_rank_identity,
39
+ persistence_by_brute_force,
40
+ rank_by_svd,
41
+ )
42
+ from .scaling import (
43
+ NETWORK_FAMILIES,
44
+ ScalingRecord,
45
+ TASKS,
46
+ generate_network,
47
+ run_scaling_benchmark,
48
+ scaling_table,
49
+ )
50
+ from .kegg import (
51
+ CASE_STUDY_MODULES,
52
+ GLYCOLYSIS_FLUX,
53
+ KeggModuleAnalysis,
54
+ analyze_kegg_module,
55
+ build_kegg_crn,
56
+ check_glycolysis_flux,
57
+ kegg_case_study_report,
58
+ load_kegg_cache,
59
+ module_ids,
60
+ )
61
+ from .validate import (
62
+ NetworkValidation,
63
+ ValidationReport,
64
+ run_validation,
65
+ validate_network,
66
+ validation_table,
67
+ )
68
+
69
+ __all__ = [
70
+ # networks
71
+ "BENCHMARK_NETWORKS",
72
+ "BenchmarkNetwork",
73
+ "get_network",
74
+ "network_names",
75
+ # independent cross-checks
76
+ "brute_force_siphons",
77
+ "check_conservation_laws",
78
+ "check_semiflows",
79
+ "deficiency_by_rank_identity",
80
+ "persistence_by_brute_force",
81
+ "rank_by_svd",
82
+ # scaling benchmark
83
+ "NETWORK_FAMILIES",
84
+ "ScalingRecord",
85
+ "TASKS",
86
+ "generate_network",
87
+ "run_scaling_benchmark",
88
+ "scaling_table",
89
+ # KEGG case study
90
+ "CASE_STUDY_MODULES",
91
+ "GLYCOLYSIS_FLUX",
92
+ "KeggModuleAnalysis",
93
+ "analyze_kegg_module",
94
+ "build_kegg_crn",
95
+ "check_glycolysis_flux",
96
+ "kegg_case_study_report",
97
+ "load_kegg_cache",
98
+ "module_ids",
99
+ # validation
100
+ "NetworkValidation",
101
+ "ValidationReport",
102
+ "run_validation",
103
+ "validate_network",
104
+ "validation_table",
105
+ ]