synkit 0.0.2__tar.gz → 0.0.4__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 (171) hide show
  1. {synkit-0.0.2 → synkit-0.0.4}/.github/workflows/test-and-lint.yml +1 -1
  2. {synkit-0.0.2 → synkit-0.0.4}/.gitignore +8 -1
  3. synkit-0.0.4/CHANGELOG.md +89 -0
  4. synkit-0.0.4/Data/Benchmark/conversion_time.json.gz +240767 -0
  5. synkit-0.0.4/Data/Testcase/para_rule.json.gz +1 -0
  6. synkit-0.0.4/Data/Testcase/para_rule_retro.json.gz +1 -0
  7. synkit-0.0.4/Data/smart.json.gz +1 -0
  8. {synkit-0.0.2 → synkit-0.0.4}/PKG-INFO +4 -7
  9. {synkit-0.0.2 → synkit-0.0.4}/Test/Chem/Fingerprint/test_fp_calculator.py +0 -10
  10. synkit-0.0.4/Test/Chem/Reaction/test_fix_aam.py +66 -0
  11. synkit-0.0.4/Test/Graph/Cluster/test_graph_morphism.py +51 -0
  12. synkit-0.0.2/Test/Graph/Cluster/test_morphism.py → synkit-0.0.4/Test/Graph/Cluster/test_rule_morphism.py +4 -18
  13. {synkit-0.0.2/Test → synkit-0.0.4/Test/Graph}/ITS/test_aam_validator.py +1 -1
  14. {synkit-0.0.2/Test → synkit-0.0.4/Test/Graph}/ITS/test_its_construction.py +1 -1
  15. {synkit-0.0.2/Test → synkit-0.0.4/Test/Graph}/ITS/test_its_expand.py +2 -2
  16. {synkit-0.0.2/Test → synkit-0.0.4/Test/Graph}/ITS/test_normalize_aam.py +15 -15
  17. synkit-0.0.4/Test/Graph/test_graph_hydrogen.py +59 -0
  18. synkit-0.0.2/Test/IO/test_chemical_conversion.py → synkit-0.0.4/Test/IO/test_chemical_converter.py +29 -5
  19. synkit-0.0.4/Test/IO/test_dg_to_gml.py +51 -0
  20. {synkit-0.0.2 → synkit-0.0.4}/Test/IO/test_gml_to_nx.py +5 -2
  21. {synkit-0.0.2 → synkit-0.0.4}/Test/Reactor/test_core_engine.py +2 -2
  22. synkit-0.0.4/Test/Reactor/test_crn.py +58 -0
  23. synkit-0.0.4/Test/Reactor/test_path_finder.py +91 -0
  24. {synkit-0.0.2 → synkit-0.0.4}/Test/Reactor/test_reactor_engine.py +1 -1
  25. {synkit-0.0.2 → synkit-0.0.4}/Test/Rule/test_molecule_rule.py +1 -1
  26. {synkit-0.0.2 → synkit-0.0.4}/Test/Rule/test_reactor_rule.py +1 -1
  27. synkit-0.0.4/Test/Rule/test_retro_reactor.py +43 -0
  28. {synkit-0.0.2 → synkit-0.0.4}/Test/Rule/test_rule_rbl.py +2 -0
  29. {synkit-0.0.2 → synkit-0.0.4}/Test/Rule/test_rule_utils.py +2 -2
  30. synkit-0.0.4/Test/Vis/test_dpo_vis.py +75 -0
  31. {synkit-0.0.2 → synkit-0.0.4}/lint.sh +2 -1
  32. {synkit-0.0.2 → synkit-0.0.4}/pyproject.toml +4 -2
  33. synkit-0.0.4/requirements.txt +9 -0
  34. {synkit-0.0.2 → synkit-0.0.4}/synkit/Chem/Fingerprint/fp_calculator.py +4 -18
  35. {synkit-0.0.2 → synkit-0.0.4}/synkit/Chem/Fingerprint/smiles_featurizer.py +1 -1
  36. {synkit-0.0.2 → synkit-0.0.4}/synkit/Chem/Molecule/standardize.py +28 -1
  37. {synkit-0.0.2 → synkit-0.0.4}/synkit/Chem/Reaction/cleanning.py +13 -5
  38. synkit-0.0.4/synkit/Chem/Reaction/fix_aam.py +91 -0
  39. synkit-0.0.4/synkit/Chem/utils.py +187 -0
  40. {synkit-0.0.2 → synkit-0.0.4}/synkit/Graph/Cluster/batch_cluster.py +3 -2
  41. {synkit-0.0.2 → synkit-0.0.4}/synkit/Graph/Cluster/graph_cluster.py +2 -1
  42. synkit-0.0.4/synkit/Graph/Cluster/graph_morphism.py +151 -0
  43. synkit-0.0.4/synkit/Graph/Cluster/rule_morphism.py +102 -0
  44. synkit-0.0.4/synkit/Graph/Feature/wl_hash.py +120 -0
  45. synkit-0.0.4/synkit/Graph/ITS/aam_utils.py +97 -0
  46. {synkit-0.0.2/synkit → synkit-0.0.4/synkit/Graph}/ITS/aam_validator.py +3 -2
  47. synkit-0.0.2/synkit/ITS/_misc.py → synkit-0.0.4/synkit/Graph/ITS/its_decompose.py +0 -37
  48. {synkit-0.0.2/synkit → synkit-0.0.4/synkit/Graph}/ITS/its_expand.py +4 -4
  49. {synkit-0.0.2/synkit → synkit-0.0.4/synkit/Graph}/ITS/normalize_aam.py +24 -59
  50. synkit-0.0.4/synkit/Graph/hydrogen.py +164 -0
  51. {synkit-0.0.2 → synkit-0.0.4}/synkit/IO/chem_converter.py +166 -45
  52. {synkit-0.0.2 → synkit-0.0.4}/synkit/IO/data_io.py +24 -0
  53. {synkit-0.0.2 → synkit-0.0.4}/synkit/IO/gml_to_nx.py +2 -1
  54. {synkit-0.0.2 → synkit-0.0.4}/synkit/IO/nx_to_gml.py +1 -1
  55. {synkit-0.0.2 → synkit-0.0.4}/synkit/Reactor/core_engine.py +105 -50
  56. synkit-0.0.4/synkit/Reactor/crn.py +118 -0
  57. synkit-0.0.4/synkit/Reactor/dcrn.py +139 -0
  58. synkit-0.0.4/synkit/Reactor/path_finder.py +214 -0
  59. {synkit-0.0.2 → synkit-0.0.4}/synkit/Reactor/reactor_engine.py +4 -3
  60. {synkit-0.0.2 → synkit-0.0.4}/synkit/Reactor/reactor_utils.py +0 -1
  61. synkit-0.0.4/synkit/Reactor/single_predictor.py +96 -0
  62. {synkit-0.0.2 → synkit-0.0.4}/synkit/Rule/reactor_rule.py +2 -2
  63. synkit-0.0.4/synkit/Rule/retro_reactor.py +207 -0
  64. {synkit-0.0.2 → synkit-0.0.4}/synkit/Rule/rule_compose.py +4 -2
  65. {synkit-0.0.2 → synkit-0.0.4}/synkit/Rule/rule_rbl.py +4 -2
  66. synkit-0.0.4/synkit/Vis/dpo_vis.py +103 -0
  67. {synkit-0.0.2 → synkit-0.0.4}/synkit/Vis/rsmi_to_fig.py +1 -1
  68. synkit-0.0.4/synkit/_misc.py +181 -0
  69. synkit-0.0.2/Data/Figure/synkit.png +0 -0
  70. synkit-0.0.2/Test/Chem/Reaction/test_reagent.py +0 -98
  71. synkit-0.0.2/requirements.txt +0 -13
  72. synkit-0.0.2/synkit/Chem/Reaction/reagent.py +0 -102
  73. synkit-0.0.2/synkit/Graph/Cluster/morphism.py +0 -83
  74. {synkit-0.0.2 → synkit-0.0.4}/.github/workflows/publish-package.yml +0 -0
  75. {synkit-0.0.2 → synkit-0.0.4}/Data/Testcase/Compose/ComposeRule/data.txt +0 -0
  76. {synkit-0.0.2 → synkit-0.0.4}/Data/Testcase/Compose/SingleRule/R0/0.gml +0 -0
  77. {synkit-0.0.2 → synkit-0.0.4}/Data/Testcase/Compose/SingleRule/R0/1.gml +0 -0
  78. {synkit-0.0.2 → synkit-0.0.4}/Data/Testcase/Compose/SingleRule/R0/2.gml +0 -0
  79. {synkit-0.0.2 → synkit-0.0.4}/Data/Testcase/mech.json.gz +0 -0
  80. {synkit-0.0.2 → synkit-0.0.4}/LICENSE +0 -0
  81. {synkit-0.0.2 → synkit-0.0.4}/README.md +0 -0
  82. {synkit-0.0.2 → synkit-0.0.4}/Test/Chem/Fingerprint/__init__.py +0 -0
  83. {synkit-0.0.2 → synkit-0.0.4}/Test/Chem/Fingerprint/test_smiles_featurizer.py +0 -0
  84. {synkit-0.0.2 → synkit-0.0.4}/Test/Chem/Fingerprint/test_transformation_fp.py +0 -0
  85. {synkit-0.0.2 → synkit-0.0.4}/Test/Chem/Molecule/__init__.py +0 -0
  86. {synkit-0.0.2 → synkit-0.0.4}/Test/Chem/Molecule/test_standardize.py +0 -0
  87. {synkit-0.0.2 → synkit-0.0.4}/Test/Chem/Reaction/__init__.py +0 -0
  88. {synkit-0.0.2 → synkit-0.0.4}/Test/Chem/Reaction/test_balance_checker.py +0 -0
  89. {synkit-0.0.2 → synkit-0.0.4}/Test/Chem/Reaction/test_cleanning.py +0 -0
  90. {synkit-0.0.2 → synkit-0.0.4}/Test/Chem/Reaction/test_deionize.py +0 -0
  91. {synkit-0.0.2 → synkit-0.0.4}/Test/Chem/Reaction/test_neutralize.py +0 -0
  92. {synkit-0.0.2 → synkit-0.0.4}/Test/Chem/Reaction/test_rsmi_utils.py +0 -0
  93. {synkit-0.0.2 → synkit-0.0.4}/Test/Chem/Reaction/test_standardize.py +0 -0
  94. {synkit-0.0.2 → synkit-0.0.4}/Test/Chem/Reaction/test_tautomerize.py +0 -0
  95. {synkit-0.0.2 → synkit-0.0.4}/Test/Chem/__init__.py +0 -0
  96. {synkit-0.0.2 → synkit-0.0.4}/Test/Graph/Cluster/__init__.py +0 -0
  97. {synkit-0.0.2 → synkit-0.0.4}/Test/Graph/Cluster/test_batch_cluster.py +0 -0
  98. {synkit-0.0.2 → synkit-0.0.4}/Test/Graph/Cluster/test_graph_cluster.py +0 -0
  99. {synkit-0.0.2 → synkit-0.0.4}/Test/Graph/Feature/__init__.py +0 -0
  100. {synkit-0.0.2 → synkit-0.0.4}/Test/Graph/Feature/test_graph_descriptors.py +0 -0
  101. {synkit-0.0.2 → synkit-0.0.4}/Test/Graph/Feature/test_graph_fps.py +0 -0
  102. {synkit-0.0.2 → synkit-0.0.4}/Test/Graph/Feature/test_graph_signature.py +0 -0
  103. {synkit-0.0.2 → synkit-0.0.4}/Test/Graph/Feature/test_hash_fps.py +0 -0
  104. {synkit-0.0.2 → synkit-0.0.4}/Test/Graph/Feature/test_morgan_fps.py +0 -0
  105. {synkit-0.0.2 → synkit-0.0.4}/Test/Graph/Feature/test_path_fps.py +0 -0
  106. {synkit-0.0.2/Test/Graph → synkit-0.0.4/Test/Graph/ITS}/__init__.py +0 -0
  107. {synkit-0.0.2/Test/IO → synkit-0.0.4/Test/Graph}/__init__.py +0 -0
  108. {synkit-0.0.2/Test/ITS → synkit-0.0.4/Test/IO}/__init__.py +0 -0
  109. {synkit-0.0.2 → synkit-0.0.4}/Test/IO/test_graph_to_mol.py +0 -0
  110. {synkit-0.0.2 → synkit-0.0.4}/Test/IO/test_mol_to_graph.py +0 -0
  111. {synkit-0.0.2 → synkit-0.0.4}/Test/IO/test_nx_to_gml.py +0 -0
  112. {synkit-0.0.2 → synkit-0.0.4}/Test/Reactor/__init__.py +0 -0
  113. {synkit-0.0.2 → synkit-0.0.4}/Test/Reactor/test_multi_steps.py +0 -0
  114. {synkit-0.0.2 → synkit-0.0.4}/Test/Reactor/test_reactor_utils.py +0 -0
  115. {synkit-0.0.2 → synkit-0.0.4}/Test/Rule/__init__.py +0 -0
  116. {synkit-0.0.2 → synkit-0.0.4}/Test/Rule/test_rule_compose.py +0 -0
  117. {synkit-0.0.2 → synkit-0.0.4}/Test/Rule/test_valance_constrain.py +0 -0
  118. {synkit-0.0.2 → synkit-0.0.4}/Test/Vis/__init__.py +0 -0
  119. {synkit-0.0.2 → synkit-0.0.4}/Test/Vis/test_embedding.py +0 -0
  120. {synkit-0.0.2 → synkit-0.0.4}/Test/__init__.py +0 -0
  121. {synkit-0.0.2 → synkit-0.0.4}/pytest.sh +0 -0
  122. {synkit-0.0.2 → synkit-0.0.4}/synkit/Chem/Fingerprint/__init__.py +0 -0
  123. {synkit-0.0.2 → synkit-0.0.4}/synkit/Chem/Fingerprint/transformation_fp.py +0 -0
  124. {synkit-0.0.2 → synkit-0.0.4}/synkit/Chem/Molecule/__init__.py +0 -0
  125. {synkit-0.0.2 → synkit-0.0.4}/synkit/Chem/Reaction/__init__.py +0 -0
  126. {synkit-0.0.2 → synkit-0.0.4}/synkit/Chem/Reaction/balance_check.py +0 -0
  127. {synkit-0.0.2 → synkit-0.0.4}/synkit/Chem/Reaction/deionize.py +0 -0
  128. {synkit-0.0.2 → synkit-0.0.4}/synkit/Chem/Reaction/neutralize.py +0 -0
  129. {synkit-0.0.2 → synkit-0.0.4}/synkit/Chem/Reaction/rsmi_utils.py +0 -0
  130. {synkit-0.0.2 → synkit-0.0.4}/synkit/Chem/Reaction/standardize.py +0 -0
  131. {synkit-0.0.2 → synkit-0.0.4}/synkit/Chem/Reaction/tautomerize.py +0 -0
  132. {synkit-0.0.2 → synkit-0.0.4}/synkit/Graph/Cluster/__init__.py +0 -0
  133. {synkit-0.0.2 → synkit-0.0.4}/synkit/Graph/Feature/__init__.py +0 -0
  134. {synkit-0.0.2 → synkit-0.0.4}/synkit/Graph/Feature/graph_descriptors.py +0 -0
  135. {synkit-0.0.2 → synkit-0.0.4}/synkit/Graph/Feature/graph_fps.py +0 -0
  136. {synkit-0.0.2 → synkit-0.0.4}/synkit/Graph/Feature/graph_signature.py +0 -0
  137. {synkit-0.0.2 → synkit-0.0.4}/synkit/Graph/Feature/hash_fps.py +0 -0
  138. {synkit-0.0.2 → synkit-0.0.4}/synkit/Graph/Feature/morgan_fps.py +0 -0
  139. {synkit-0.0.2 → synkit-0.0.4}/synkit/Graph/Feature/path_fps.py +0 -0
  140. {synkit-0.0.2/synkit → synkit-0.0.4/synkit/Graph}/ITS/its_builder.py +0 -0
  141. {synkit-0.0.2/synkit → synkit-0.0.4/synkit/Graph}/ITS/its_construction.py +0 -0
  142. {synkit-0.0.2 → synkit-0.0.4}/synkit/Graph/__init.py +0 -0
  143. {synkit-0.0.2 → synkit-0.0.4}/synkit/IO/__init__.py +0 -0
  144. {synkit-0.0.2 → synkit-0.0.4}/synkit/IO/data_process.py +0 -0
  145. {synkit-0.0.2 → synkit-0.0.4}/synkit/IO/debug.py +0 -0
  146. {synkit-0.0.2 → synkit-0.0.4}/synkit/IO/dg_to_gml.py +0 -0
  147. {synkit-0.0.2 → synkit-0.0.4}/synkit/IO/graph_to_mol.py +0 -0
  148. {synkit-0.0.2 → synkit-0.0.4}/synkit/IO/mol_to_graph.py +0 -0
  149. {synkit-0.0.2 → synkit-0.0.4}/synkit/IO/smiles_to_id.py +0 -0
  150. {synkit-0.0.2 → synkit-0.0.4}/synkit/Metrics/__init__.py +0 -0
  151. {synkit-0.0.2 → synkit-0.0.4}/synkit/Metrics/_base.py +0 -0
  152. {synkit-0.0.2 → synkit-0.0.4}/synkit/Metrics/_plot.py +0 -0
  153. {synkit-0.0.2 → synkit-0.0.4}/synkit/Metrics/_ranking.py +0 -0
  154. {synkit-0.0.2 → synkit-0.0.4}/synkit/Reactor/__init__.py +0 -0
  155. {synkit-0.0.2 → synkit-0.0.4}/synkit/Reactor/multi_steps.py +0 -0
  156. {synkit-0.0.2 → synkit-0.0.4}/synkit/Rule/MaxValence.json.gz +0 -0
  157. {synkit-0.0.2 → synkit-0.0.4}/synkit/Rule/__init__.py +0 -0
  158. {synkit-0.0.2 → synkit-0.0.4}/synkit/Rule/molecule_rule.py +0 -0
  159. {synkit-0.0.2 → synkit-0.0.4}/synkit/Rule/rule_utils.py +0 -0
  160. {synkit-0.0.2 → synkit-0.0.4}/synkit/Rule/strip_rule.py +0 -0
  161. {synkit-0.0.2 → synkit-0.0.4}/synkit/Rule/valence_constrain.py +0 -0
  162. {synkit-0.0.2/synkit/Vis → synkit-0.0.4/synkit/Utils}/__init__.py +0 -0
  163. /synkit-0.0.2/synkit/_misc.py → /synkit-0.0.4/synkit/Utils/utils.py +0 -0
  164. {synkit-0.0.2/synkit → synkit-0.0.4/synkit/Vis}/__init__.py +0 -0
  165. {synkit-0.0.2 → synkit-0.0.4}/synkit/Vis/chemical_graph_visualizer.py +0 -0
  166. {synkit-0.0.2 → synkit-0.0.4}/synkit/Vis/chemical_reaction_visualizer.py +0 -0
  167. {synkit-0.0.2 → synkit-0.0.4}/synkit/Vis/chemical_space.py +0 -0
  168. {synkit-0.0.2 → synkit-0.0.4}/synkit/Vis/embedding.py +0 -0
  169. {synkit-0.0.2 → synkit-0.0.4}/synkit/Vis/graph_visualizer.py +0 -0
  170. {synkit-0.0.2 → synkit-0.0.4}/synkit/Vis/pdf_writer.py +0 -0
  171. /synkit-0.0.2/CHANGELOG.md → /synkit-0.0.4/synkit/__init__.py +0 -0
@@ -34,7 +34,7 @@ jobs:
34
34
  run: |
35
35
  conda create --name synkit-env python=3.11 -y
36
36
  conda activate synkit-env
37
- conda install -c jakobandersen -c conda-forge mod
37
+ conda install -c jakobandersen -c conda-forge mod>=0.17
38
38
  pip install flake8 pytest
39
39
  if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
40
40
  shell: bash -l {0}
@@ -8,4 +8,11 @@ test_mod.py
8
8
  test_format.py
9
9
  *dev_zone
10
10
  *.pkl.gz
11
- dev_scripts/*
11
+ dev_scripts/*
12
+ *.pdf
13
+ out
14
+ summary
15
+ Data/Benchmark/its.json.gz
16
+ Data/Benchmark/rc.json.gz
17
+ *.log
18
+ .coverage
@@ -0,0 +1,89 @@
1
+
2
+ # Changelog v0.0.4
3
+
4
+ ## Highlights
5
+
6
+ ### New Features & Enhancements
7
+
8
+ #### Refactor Source Code Structure
9
+ - **Merged** the ITS and Graph subpackages for improved modularity.
10
+ - **Separated** `its_decompose` and `get_rc` into a dedicated Python file: `its_decompose.py`.
11
+ - **Created** a new `Utils` subpackage for future utility functions and support tools.
12
+
13
+ #### Performance Improvements
14
+ - **Optimized** the `BatchCluster` process for faster clustering of reaction centers.
15
+
16
+ #### Bug Fixes
17
+ - **Fixed** issues with *Subgraph* searching: `networkx` now handles both *monomorphism* and *induced subgraph*, whereas `GML` was limited to *monomorphism* only.
18
+
19
+ #### New Features
20
+ - **Implemented** `CRN` (Chemical Reaction Networks) in the `Reactor` module.
21
+ - **Implemented** `PathFinder` to find pathways from a starting compound to the target compound in `CRN`.
22
+ - **Introduced** `RetroReactor` in the `Rule` module, enabling the use of A* algorithm to search from target to starting compound without requiring a full system like `CRN`.
23
+
24
+ ## Known Limitations
25
+
26
+ ### Rule Composition
27
+ - **Bug** in the valence constraint of rule composition.
28
+ - **Partial matching** in rule composition may result in invalid compounds.
29
+
30
+ ### Retro
31
+ - **Directed CRN** can only find one solution, though it is 500 times faster than expanding CRN and using `PathFinder`.
32
+ - **Retro framework** using rule composition may result in invalid compounds.
33
+
34
+ ### Reactor
35
+ - `ReactorEngine` currently only supports **balanced reactions**.
36
+ - **Performance issue**: `ReactorEngine` is slow in certain cases.
37
+ - **Memory leak** in `CoreEngine` when scaled up.
38
+
39
+
40
+
41
+
42
+ # Changelog v0.0.3
43
+
44
+ ## Highlights
45
+
46
+ ### New Features & Enhancements
47
+
48
+ #### Reduce Dependency and Update Version
49
+ - Removed dependency on `drfp` and `rxnmapper`.
50
+ - Updated versions of `numpy` and `torch` to 2.2.0.
51
+
52
+ #### Enhance `Reactor`
53
+ - `CoreEngine` and `ReactorEngine` have consistent function `_inference`.
54
+ - `CoreEngine` is refractored to handle reagents.
55
+
56
+ #### Add Visualization
57
+ - Added visualization for Double Pushout rules.
58
+
59
+ #### Graph Isomorphism and Subgraph Isomorphism
60
+ - Separated graph and rule morphism.
61
+ - Implemented subgraph isomorphism in `networkx` and `gml`.
62
+ - Added WL hash function to filter graphs before doing isomorphism check; does not work for subgraph isomorphism.
63
+
64
+ #### Chemical Conversion
65
+ - Added function to add implicit and explicit hydrogen.
66
+ - Enhanced conversion capabilities, now can handle both implicit and explicit hydrogen effectively.
67
+ - Added new functions for conversion between ITS and GML.
68
+
69
+ #### Atom-Atom Map
70
+ - Added `FixAAM` to handle AAM generated by MOD.
71
+ - `ReactorEngine` now works well to generate complete AAM from partial AAM, but only in good AAM cases.
72
+ - Fixed `Normalize` class issue of removing hydrogen without adding the implicit hydrogen to the graph. Now it is compatible with RDKit.
73
+
74
+ #### Rule
75
+ - Fixed issue of memory leakage when doing rule composition by adding argument `add=False` to `ruleGMLString`.
76
+
77
+ ## Known Limitations
78
+
79
+ ### BatchCluster
80
+ - The processing speed of `BatchCluster` is slower compared to `GraphCluster`. There may be an internal issue affecting performance.
81
+
82
+ ### Reactor
83
+ - `ReactorEngine` currently only works with balanced reactions.
84
+ - `ReactorEngine` performs slowly in a few cases.
85
+ - `CoreEngine` exhibited memory leak when scaled up.
86
+
87
+ ### Subgraph Isomorphism
88
+ - For `networkx` version, it performs very fast with filter, ~0.7s for searching 1 subgraph along with 33,000 graphs, however, the result is not correct ~330 subgraphs are incorrect.
89
+ - For `GML` version, it performs perfectly, but slow ~8s for searching 1 subgraph along with 33,000 graphs.