synkit 1.5.0__tar.gz → 2.0.0b2__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 (378) hide show
  1. {synkit-1.5.0 → synkit-2.0.0b2}/.gitignore +15 -0
  2. synkit-2.0.0b2/Data/Mech/README.md +46 -0
  3. synkit-2.0.0b2/Data/Mech/polar.json +15921 -0
  4. synkit-2.0.0b2/Data/Mech/radical.json +12062 -0
  5. synkit-2.0.0b2/Data/Mech/stereo.json +7875 -0
  6. synkit-2.0.0b2/LICENSES/StereoMolGraph-MIT.txt +30 -0
  7. {synkit-1.5.0 → synkit-2.0.0b2}/PKG-INFO +65 -5
  8. {synkit-1.5.0 → synkit-2.0.0b2}/README.md +63 -4
  9. {synkit-1.5.0 → synkit-2.0.0b2}/pyproject.toml +20 -8
  10. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Molecule/atom_features.py +1 -0
  11. synkit-2.0.0b2/synkit/Chem/Reaction/__init__.py +20 -0
  12. synkit-2.0.0b2/synkit/Chem/Reaction/explicit_h_audit.py +237 -0
  13. synkit-2.0.0b2/synkit/Data/aldol.json.gz +1 -0
  14. synkit-2.0.0b2/synkit/Data/paracetamol.json.gz +1 -0
  15. synkit-2.0.0b2/synkit/Graph/Fusion/__init__.py +71 -0
  16. synkit-2.0.0b2/synkit/Graph/Fusion/candidate.py +175 -0
  17. synkit-2.0.0b2/synkit/Graph/Fusion/constructor.py +461 -0
  18. synkit-2.0.0b2/synkit/Graph/Fusion/identity.py +183 -0
  19. synkit-2.0.0b2/synkit/Graph/Fusion/interface.py +598 -0
  20. synkit-2.0.0b2/synkit/Graph/Fusion/search.py +237 -0
  21. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Hyrogen/_misc.py +7 -1
  22. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/ITS/its_construction.py +6 -0
  23. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/ITS/its_reverter.py +28 -0
  24. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/ITS/rc_extractor.py +9 -0
  25. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Matcher/batch_cluster.py +12 -39
  26. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Matcher/graph_cluster.py +42 -52
  27. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Matcher/graph_matcher.py +5 -48
  28. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Matcher/subgraph_matcher.py +37 -90
  29. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Mech/electron_accounting.py +5 -1
  30. synkit-2.0.0b2/synkit/Graph/Morphism/__init__.py +55 -0
  31. synkit-2.0.0b2/synkit/Graph/Morphism/constraints.py +451 -0
  32. synkit-2.0.0b2/synkit/Graph/Morphism/morphism.py +349 -0
  33. synkit-2.0.0b2/synkit/Graph/Morphism/stereo.py +254 -0
  34. synkit-2.0.0b2/synkit/Graph/Stereo/__init__.py +112 -0
  35. synkit-2.0.0b2/synkit/Graph/Stereo/changes.py +206 -0
  36. synkit-2.0.0b2/synkit/Graph/Stereo/couplings.py +224 -0
  37. synkit-2.0.0b2/synkit/Graph/Stereo/descriptors.py +734 -0
  38. synkit-2.0.0b2/synkit/Graph/Stereo/identity.py +611 -0
  39. synkit-2.0.0b2/synkit/Graph/Stereo/interchange.py +496 -0
  40. synkit-2.0.0b2/synkit/Graph/Stereo/matching.py +436 -0
  41. synkit-2.0.0b2/synkit/Graph/Stereo/outcomes.py +99 -0
  42. synkit-2.0.0b2/synkit/Graph/Stereo/rdkit_adapter.py +638 -0
  43. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/syn_graph.py +48 -6
  44. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/utils.py +131 -2
  45. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/IO/chem_converter.py +13 -1
  46. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/IO/data_io.py +0 -45
  47. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/IO/graph_to_mol.py +69 -4
  48. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/IO/mol_to_graph.py +73 -1
  49. synkit-2.0.0b2/synkit/Mechanism/__init__.py +134 -0
  50. synkit-2.0.0b2/synkit/Mechanism/adapters.py +136 -0
  51. synkit-2.0.0b2/synkit/Mechanism/audit.py +323 -0
  52. synkit-2.0.0b2/synkit/Mechanism/benchmark.py +618 -0
  53. synkit-2.0.0b2/synkit/Mechanism/compatibility.py +10 -0
  54. synkit-2.0.0b2/synkit/Mechanism/drawing.py +85 -0
  55. synkit-2.0.0b2/synkit/Mechanism/equivalence.py +443 -0
  56. synkit-2.0.0b2/synkit/Mechanism/evidence.py +255 -0
  57. synkit-2.0.0b2/synkit/Mechanism/interchange.py +124 -0
  58. synkit-2.0.0b2/synkit/Mechanism/model.py +1214 -0
  59. synkit-2.0.0b2/synkit/Mechanism/radical_data.py +238 -0
  60. synkit-2.0.0b2/synkit/Mechanism/replay.py +571 -0
  61. synkit-2.0.0b2/synkit/Mechanism/schema.py +206 -0
  62. synkit-2.0.0b2/synkit/Mechanism/stereo_state.py +348 -0
  63. synkit-2.0.0b2/synkit/Mechanism/symbols.py +91 -0
  64. synkit-2.0.0b2/synkit/Rule/Compose/_identity.py +43 -0
  65. synkit-2.0.0b2/synkit/Rule/__init__.py +3 -0
  66. synkit-2.0.0b2/synkit/Rule/stereo_identity.py +200 -0
  67. synkit-2.0.0b2/synkit/Rule/syn_rule.py +895 -0
  68. synkit-2.0.0b2/synkit/Synthesis/Reactor/__init__.py +25 -0
  69. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Synthesis/Reactor/batch_reactor.py +11 -36
  70. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Synthesis/Reactor/benchmark.py +0 -4
  71. synkit-2.0.0b2/synkit/Synthesis/Reactor/fusion_validation.py +558 -0
  72. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Synthesis/Reactor/rbl_engine.py +499 -150
  73. synkit-2.0.0b2/synkit/Synthesis/Reactor/rbl_policy.py +81 -0
  74. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Synthesis/Reactor/rule_filter.py +3 -5
  75. synkit-2.0.0b2/synkit/Synthesis/Reactor/syn_reactor.py +3115 -0
  76. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Synthesis/reactor_utils.py +0 -27
  77. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/epd/models.py +30 -1
  78. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/epd/visualizer.py +3 -1
  79. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/reaction/rule.py +11 -49
  80. synkit-2.0.0b2/synkit/version.py +19 -0
  81. synkit-1.5.0/synkit/CRN/Construct/DAG/crn.py +0 -207
  82. synkit-1.5.0/synkit/CRN/Construct/DAG/mod_crn.py +0 -160
  83. synkit-1.5.0/synkit/Chem/Reaction/__init__.py +0 -7
  84. synkit-1.5.0/synkit/IO/dg_to_gml.py +0 -133
  85. synkit-1.5.0/synkit/Rule/Apply/reactor_rule.py +0 -90
  86. synkit-1.5.0/synkit/Rule/Apply/retro_reactor.py +0 -212
  87. synkit-1.5.0/synkit/Rule/Apply/rule_rbl.py +0 -86
  88. synkit-1.5.0/synkit/Rule/Compose/compose_rule.py +0 -225
  89. synkit-1.5.0/synkit/Rule/Compose/rule_compose.py +0 -236
  90. synkit-1.5.0/synkit/Rule/Compose/rule_mapping.py +0 -315
  91. synkit-1.5.0/synkit/Rule/Compose/seq_comp.py +0 -71
  92. synkit-1.5.0/synkit/Rule/Compose/valence_constrain.py +0 -107
  93. synkit-1.5.0/synkit/Rule/__init__.py +0 -1
  94. synkit-1.5.0/synkit/Rule/syn_rule.py +0 -401
  95. synkit-1.5.0/synkit/Synthesis/MSR/multi_steps.py +0 -137
  96. synkit-1.5.0/synkit/Synthesis/Reactor/mod_aam.py +0 -279
  97. synkit-1.5.0/synkit/Synthesis/Reactor/mod_reactor.py +0 -427
  98. synkit-1.5.0/synkit/Synthesis/Reactor/single_predictor.py +0 -90
  99. synkit-1.5.0/synkit/Synthesis/Reactor/syn_reactor.py +0 -1429
  100. synkit-1.5.0/synkit/Utils/__init__.py +0 -0
  101. synkit-1.5.0/synkit/version.py +0 -7
  102. {synkit-1.5.0 → synkit-2.0.0b2}/LICENSE +0 -0
  103. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Construct/DAG/__init__.py +0 -0
  104. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Construct/DAG/syncrn.py +0 -0
  105. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Construct/__init__.py +0 -0
  106. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Construct/abstract.py +0 -0
  107. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Construct/arity.py +0 -0
  108. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Construct/builder.py +0 -0
  109. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Construct/derivation.py +0 -0
  110. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Construct/flattener.py +0 -0
  111. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Construct/keys.py +0 -0
  112. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Construct/mixtures.py +0 -0
  113. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Construct/smiles.py +0 -0
  114. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Construct/state.py +0 -0
  115. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Construct/strategy.py +0 -0
  116. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Construct/worker.py +0 -0
  117. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Pathway/__init__.py +0 -0
  118. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Pathway/_adapter.py +0 -0
  119. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Pathway/pathfinder.py +0 -0
  120. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Pathway/reachability.py +0 -0
  121. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Pathway/realizability.py +0 -0
  122. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Petrinet/__init__.py +0 -0
  123. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Petrinet/analyzer.py +0 -0
  124. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Petrinet/net.py +0 -0
  125. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Petrinet/persistence.py +0 -0
  126. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Petrinet/semiflows.py +0 -0
  127. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Petrinet/structure.py +0 -0
  128. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Props/__init__.py +0 -0
  129. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Props/dynamics.py +0 -0
  130. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Props/helper.py +0 -0
  131. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Props/stoich.py +0 -0
  132. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Props/thermo.py +0 -0
  133. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Query/__init__.py +0 -0
  134. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Query/kegg_api.py +0 -0
  135. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Query/kegg_extract.py +0 -0
  136. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Query/kegg_impute.py +0 -0
  137. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Query/kegg_parse.py +0 -0
  138. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Structure/__init__.py +0 -0
  139. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Structure/reaction.py +0 -0
  140. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Structure/rule.py +0 -0
  141. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Structure/species.py +0 -0
  142. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Structure/syncrn.py +0 -0
  143. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Symmetry/__init__.py +0 -0
  144. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Symmetry/_common.py +0 -0
  145. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Symmetry/_ir.py +0 -0
  146. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Symmetry/automorphism.py +0 -0
  147. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Symmetry/canon.py +0 -0
  148. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Symmetry/isomorphism.py +0 -0
  149. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Symmetry/symmetry.py +0 -0
  150. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Symmetry/wl_canon.py +0 -0
  151. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Visualize/__init__.py +0 -0
  152. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Visualize/crn_vis.py +0 -0
  153. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Visualize/labels.py +0 -0
  154. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Visualize/layout.py +0 -0
  155. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Visualize/palette.py +0 -0
  156. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Visualize/validation.py +0 -0
  157. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/Visualize/vis.py +0 -0
  158. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/__init__.py +0 -0
  159. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/dev_crn/Structure/__init__.py +0 -0
  160. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/dev_crn/Structure/backend.py +0 -0
  161. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/dev_crn/Structure/conversion.py +0 -0
  162. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/dev_crn/Structure/hyperedge.py +0 -0
  163. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/dev_crn/Structure/hypergraph.py +0 -0
  164. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/dev_crn/Structure/rxn.py +0 -0
  165. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/dev_crn/Symmetry/__init__.py +0 -0
  166. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/dev_crn/Symmetry/automorphism.py +0 -0
  167. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/dev_crn/Symmetry/canon.py +0 -0
  168. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/dev_crn/Symmetry/wl_canon.py +0 -0
  169. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/dev_crn/__init__.py +0 -0
  170. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/dev_crn/configs/__init__.py +0 -0
  171. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/dev_crn/configs/loader.py +0 -0
  172. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/dev_crn/configs/models.py +0 -0
  173. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/dev_crn/constants.py +0 -0
  174. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/dev_crn/crn_formula.py +0 -0
  175. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/dev_crn/deficiency.py +0 -0
  176. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/dev_crn/enumerator.py +0 -0
  177. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/dev_crn/exceptions.py +0 -0
  178. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/dev_crn/explorer.py +0 -0
  179. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/dev_crn/helpers.py +0 -0
  180. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/dev_crn/injectivity.py +0 -0
  181. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/dev_crn/motif.py +0 -0
  182. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/dev_crn/network.py +0 -0
  183. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/dev_crn/pathway.py +0 -0
  184. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/dev_crn/properties.py +0 -0
  185. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/dev_crn/reaction.py +0 -0
  186. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/dev_crn/utils.py +0 -0
  187. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/CRN/dev_crn/viz.py +0 -0
  188. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Cluster/__init__.py +0 -0
  189. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Cluster/butina.py +0 -0
  190. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Fingerprint/__init__.py +0 -0
  191. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Fingerprint/fp_calculator.py +0 -0
  192. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Fingerprint/smiles_featurizer.py +0 -0
  193. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Fingerprint/transformation_fp.py +0 -0
  194. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Molecule/__init__.py +0 -0
  195. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Molecule/descriptors.py +0 -0
  196. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Molecule/formula.py +0 -0
  197. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Molecule/graph_annotator.py +0 -0
  198. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Molecule/standardize.py +0 -0
  199. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Molecule/valence.py +0 -0
  200. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/Mapper/__init__.py +0 -0
  201. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/Mapper/aam_validator.py +0 -0
  202. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/Mapper/chem/__init__.py +0 -0
  203. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/Mapper/chem/aam.py +0 -0
  204. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/Mapper/chem/its.py +0 -0
  205. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/Mapper/chem/smiles.py +0 -0
  206. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/Mapper/exact/__init__.py +0 -0
  207. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/Mapper/exact/branching.py +0 -0
  208. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/Mapper/exact/certificate.py +0 -0
  209. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/Mapper/exact/enumerate.py +0 -0
  210. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/Mapper/exact/exhaustive.py +0 -0
  211. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/Mapper/exact/kernel.py +0 -0
  212. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/Mapper/exact/milp.py +0 -0
  213. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/Mapper/graph/__init__.py +0 -0
  214. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/Mapper/graph/automorphism.py +0 -0
  215. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/Mapper/graph/blockcut.py +0 -0
  216. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/Mapper/graph/labeled_graph.py +0 -0
  217. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/Mapper/graph/refine.py +0 -0
  218. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/Mapper/graph/synkit_adapter.py +0 -0
  219. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/Mapper/io/__init__.py +0 -0
  220. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/Mapper/io/idxmapstr.py +0 -0
  221. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/Mapper/slap/__init__.py +0 -0
  222. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/Mapper/slap/lap.py +0 -0
  223. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/Mapper/slap/sequential.py +0 -0
  224. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/aam_validator.py +0 -0
  225. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/balance_check.py +0 -0
  226. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/canon_rsmi.py +0 -0
  227. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/cleaning.py +0 -0
  228. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/deionize.py +0 -0
  229. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/fix_aam.py +0 -0
  230. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/neutralize.py +0 -0
  231. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/radical_wildcard.py +0 -0
  232. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/standardize.py +0 -0
  233. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/Reaction/tautomerize.py +0 -0
  234. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/__init__.py +0 -0
  235. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Chem/utils.py +0 -0
  236. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Data/__init__.py +0 -0
  237. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Data/gen_partial_aam.py +0 -0
  238. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Canon/__init__.py +0 -0
  239. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Canon/canon_algs.py +0 -0
  240. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Canon/canon_graph.py +0 -0
  241. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Canon/nauty.py +0 -0
  242. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Context/__init__.py +0 -0
  243. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Context/hier_context.py +0 -0
  244. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Context/radius_expand.py +0 -0
  245. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/FG/__init__.py +0 -0
  246. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/FG/api.py +0 -0
  247. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/FG/audit.py +0 -0
  248. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/FG/catalog.py +0 -0
  249. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/FG/detector.py +0 -0
  250. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/FG/model.py +0 -0
  251. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/FG/ring_system.py +0 -0
  252. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Feature/Descriptors/topology.py +0 -0
  253. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Feature/Fingerprint/__init__.py +0 -0
  254. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Feature/Fingerprint/wl_rxn_fps.py +0 -0
  255. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Feature/__init__.py +0 -0
  256. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Feature/graph_descriptors.py +0 -0
  257. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Feature/graph_fps.py +0 -0
  258. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Feature/graph_signature.py +0 -0
  259. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Feature/hash_fps.py +0 -0
  260. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Feature/morgan_fps.py +0 -0
  261. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Feature/path_fps.py +0 -0
  262. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Feature/wl_hash.py +0 -0
  263. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Hyrogen/__init__.py +0 -0
  264. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Hyrogen/hcomplete.py +0 -0
  265. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Hyrogen/hextend.py +0 -0
  266. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/ITS/__init__.py +0 -0
  267. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/ITS/its_builder.py +0 -0
  268. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/ITS/its_decompose.py +0 -0
  269. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/ITS/its_destruction.py +0 -0
  270. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/ITS/its_expand.py +0 -0
  271. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/ITS/its_relabel.py +0 -0
  272. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/ITS/normalize_aam.py +0 -0
  273. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/ITS/partial_its.py +0 -0
  274. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/MTG/__init__.py +0 -0
  275. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/MTG/mcs_matcher.py +0 -0
  276. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/MTG/mtg.py +0 -0
  277. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/MTG/mtg_explore.py +0 -0
  278. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/MTG/utils.py +0 -0
  279. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Matcher/__init__.py +0 -0
  280. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Matcher/approx_mcs.py +0 -0
  281. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Matcher/auto_est.py +0 -0
  282. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Matcher/automorphism.py +0 -0
  283. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Matcher/dedup_matches.py +0 -0
  284. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Matcher/graph_morphism.py +0 -0
  285. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Matcher/mcs_matcher.py +0 -0
  286. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Matcher/multi_turbo_iso.py +0 -0
  287. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Matcher/orbit.py +0 -0
  288. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Matcher/partial_matcher.py +0 -0
  289. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Matcher/sing.py +0 -0
  290. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Matcher/turbo_iso.py +0 -0
  291. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Matcher/wl_sel.py +0 -0
  292. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Mech/__init__.py +0 -0
  293. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Mech/conversion.py +0 -0
  294. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Mech/lwg_editor.py +0 -0
  295. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Mech/lwg_ops.py +0 -0
  296. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Wildcard/__init__.py +0 -0
  297. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Wildcard/fuse_graph.py +0 -0
  298. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Wildcard/graph_wc.py +0 -0
  299. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Wildcard/its_merge.py +0 -0
  300. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Wildcard/radwc.py +0 -0
  301. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Wildcard/wc_matcher.py +0 -0
  302. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/Wildcard/wildcard.py +0 -0
  303. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/__init__.py +0 -0
  304. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Graph/canon_graph.py +0 -0
  305. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/IO/__init__.py +0 -0
  306. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/IO/combinatorial/__init__.py +0 -0
  307. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/IO/combinatorial/gml_to_graph.py +0 -0
  308. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/IO/combinatorial/graph_to_gml.py +0 -0
  309. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/IO/combinatorial/graph_to_smarts.py +0 -0
  310. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/IO/combinatorial/smarts_expander.py +0 -0
  311. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/IO/combinatorial/smarts_generalizer.py +0 -0
  312. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/IO/combinatorial/smarts_to_graph.py +0 -0
  313. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/IO/conversion.py +0 -0
  314. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/IO/data_process.py +0 -0
  315. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/IO/debug.py +0 -0
  316. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/IO/gml_to_nx.py +0 -0
  317. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/IO/nx_to_gml.py +0 -0
  318. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/IO/smiles_to_id.py +0 -0
  319. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Rule/Apply/__init__.py +0 -0
  320. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Rule/Apply/rule_matcher.py +0 -0
  321. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Rule/Compose/__init__.py +0 -0
  322. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Rule/Modify/__init__.py +0 -0
  323. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Rule/Modify/implict_rule.py +0 -0
  324. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Rule/Modify/longest_path.py +0 -0
  325. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Rule/Modify/molecule_rule.py +0 -0
  326. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Rule/Modify/prune_templates.py +0 -0
  327. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Rule/Modify/rule_utils.py +0 -0
  328. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Rule/Modify/strip_rule.py +0 -0
  329. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Synthesis/MSR/__init__.py +0 -0
  330. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Synthesis/MSR/path_finder.py +0 -0
  331. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Synthesis/Metrics/__init__.py +0 -0
  332. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Synthesis/Metrics/_base.py +0 -0
  333. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Synthesis/Metrics/_plot.py +0 -0
  334. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Synthesis/Metrics/_ranking.py +0 -0
  335. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Synthesis/Reactor/imba_engine.py +0 -0
  336. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Synthesis/Reactor/partial_engine.py +0 -0
  337. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Synthesis/Reactor/post_syn.py +0 -0
  338. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Synthesis/Reactor/strategy.py +0 -0
  339. {synkit-1.5.0/synkit/Synthesis/Reactor → synkit-2.0.0b2/synkit/Synthesis}/__init__.py +0 -0
  340. {synkit-1.5.0/synkit/Synthesis → synkit-2.0.0b2/synkit/Utils}/__init__.py +0 -0
  341. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Utils/utils.py +0 -0
  342. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/__init__.py +0 -0
  343. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/crn/__init__.py +0 -0
  344. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/crn/visualizer.py +0 -0
  345. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/epd/__init__.py +0 -0
  346. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/epd/arrows.py +0 -0
  347. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/epd/chem.py +0 -0
  348. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/epd/constants.py +0 -0
  349. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/epd/layout.py +0 -0
  350. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/epd/mapping.py +0 -0
  351. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/epd/render.py +0 -0
  352. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/epd/utils.py +0 -0
  353. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/graph_visualizer.py +0 -0
  354. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/its/__init__.py +0 -0
  355. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/its/drawer.py +0 -0
  356. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/its_drawer.py +0 -0
  357. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/molecule/__init__.py +0 -0
  358. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/molecule/drawer.py +0 -0
  359. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/molecule/reaction.py +0 -0
  360. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/molecule_drawer.py +0 -0
  361. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/mtg/__init__.py +0 -0
  362. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/mtg/drawer.py +0 -0
  363. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/mtg_drawer.py +0 -0
  364. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/pdf_writer.py +0 -0
  365. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/reaction/__init__.py +0 -0
  366. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/reaction/rxn.py +0 -0
  367. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/reaction_drawer.py +0 -0
  368. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/space/__init__.py +0 -0
  369. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/space/chemical.py +0 -0
  370. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/space/embedding.py +0 -0
  371. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/vis_synedu/Vis/__init__.py +0 -0
  372. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/vis_synedu/Vis/dpo.py +0 -0
  373. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/vis_synedu/rxn_vis.py +0 -0
  374. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/vis_synedu/vis.py +0 -0
  375. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/visual_drawer.py +0 -0
  376. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/Vis/visual_model.py +0 -0
  377. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/__init__.py +0 -0
  378. {synkit-1.5.0 → synkit-2.0.0b2}/synkit/examples.py +0 -0
@@ -9,6 +9,13 @@
9
9
 
10
10
  .coverage
11
11
  dev/*
12
+ # Local development, audit, and debugging helpers.
13
+ /tools/
14
+ !/tools/
15
+ /tools/*
16
+ !/tools/stereo_conformance.py
17
+ /debug/
18
+ /Test/Conformance/
12
19
  *.rdf
13
20
  test_syn_reactor.py
14
21
 
@@ -30,10 +37,18 @@ Data/Study/CRN/case_formose/*
30
37
  synkit/Graph/dev/*
31
38
  *.ipynb
32
39
  *.json
40
+ !Data/Mech/polar.json
41
+ !Data/Mech/radical.json
42
+ !Data/Mech/stereo.json
43
+ !Test/Synthesis/Reactor/fixtures/small_rewrite_conformance.json
44
+ !Data/Conformance/stereomolgraph_graph_conformance.json
33
45
  *.txt
46
+ !LICENSES/*.txt
34
47
  *.log
48
+ /dist/
35
49
  sprint/
36
50
  test_syn.py
37
51
  .gitignore
38
52
  measure_candidate_stages.py
39
53
  run_valid_bug_cases.py
54
+ paper/*
@@ -0,0 +1,46 @@
1
+ # MechanismBench
2
+
3
+ `Data/Mech/` is the canonical on-branch location for the three reviewed
4
+ MechanismBench partitions. The former large `polar.csv` and `radical.csv`
5
+ source pools are not vendored; all release cases and their review provenance
6
+ are embedded in the JSON manifests below.
7
+
8
+ The public, executable MechanismBench layout has exactly three partitions:
9
+
10
+ - `radical.json` — 80 chemistry-reviewed, macro-balanced radical mechanisms.
11
+ Every case embeds its correction history, strict forward/reverse replay, and
12
+ unmapped rule-reapplication evidence.
13
+ - `polar.json` — 80 reviewed two-electron mechanisms selected deterministically
14
+ from SynEPD's 1,915-record `polar.json` source pool. The manifest records the
15
+ source SHA-256, CC BY 4.0 provenance, eight top-level POLAR strata, and strict
16
+ replay/reapplication evidence for every selected record. The full source pool
17
+ is intentionally not copied here.
18
+ - `stereo.json` — 72 positive transformations: the original 40 reaction-SMILES
19
+ cases, four reviewed non-tetrahedral/atrop rewrite fixtures, seven Phase 2R
20
+ electron-flow × stereo fixtures, and 21 reviewed native-descriptor rewrites.
21
+ Its eight negative assertions are retained as corruption/specification
22
+ fixtures and do not count as positive cases.
23
+
24
+ The compact nine-case rewrite conformance suite is development-only data at
25
+ `Test/Synthesis/Reactor/fixtures/small_rewrite_conformance.json`. It deliberately
26
+ does not define a MechanismBench partition.
27
+
28
+ The current stereo baseline is 72 positives, not 80. Any future claim of an
29
+ 80-positive stereo partition requires eight further independently reviewed
30
+ positive cases; negative fixtures must never be counted to fill that gap.
31
+
32
+ Raw candidate pools, audit summaries, and release-owner checklists do not belong
33
+ in this directory. They should be regenerated from source data or kept as project
34
+ documentation rather than presented as benchmark cases.
35
+
36
+ Generate the current replay/corruption/runtime evidence with:
37
+
38
+ ```bash
39
+ python tools/mechanismbench_evidence.py \
40
+ --output Data/Mech/evidence/mechanismbench_evidence.json
41
+ ```
42
+
43
+ The report currently covers typed `MechanismRecord` fixtures. It records the
44
+ reaction-SMILES, non-tetrahedral, and promoted native-descriptor rewrite
45
+ fixtures that remain outside that shared replay representation instead of
46
+ assigning them fabricated metrics.