cdxml-toolkit 0.5.3__tar.gz → 0.5.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 (112) hide show
  1. {cdxml_toolkit-0.5.3/cdxml_toolkit.egg-info → cdxml_toolkit-0.5.4}/PKG-INFO +1 -1
  2. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/naming/mol_builder.py +14 -0
  3. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4/cdxml_toolkit.egg-info}/PKG-INFO +1 -1
  4. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/pyproject.toml +1 -1
  5. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/tests/test_mol_builder.py +18 -5
  6. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/LICENSE +0 -0
  7. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/NOTICE.md +0 -0
  8. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/README.md +0 -0
  9. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/__init__.py +0 -0
  10. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/_jre/__init__.py +0 -0
  11. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/_jre/temurin-21-jre-win-x64.zip +0 -0
  12. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/analysis/__init__.py +0 -0
  13. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/analysis/deterministic/__init__.py +0 -0
  14. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/analysis/deterministic/discover_experiment_files.py +0 -0
  15. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/analysis/deterministic/lab_book_formatter.py +0 -0
  16. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/analysis/deterministic/lcms_file_categorizer.py +0 -0
  17. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/analysis/deterministic/lcms_identifier.py +0 -0
  18. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/analysis/deterministic/mass_resolver.py +0 -0
  19. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/analysis/deterministic/multi_lcms_analyzer.py +0 -0
  20. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/analysis/deterministic/procedure_writer.py +0 -0
  21. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/analysis/extract_nmr.py +0 -0
  22. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/analysis/format_procedure_entry.py +0 -0
  23. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/analysis/lcms_analyzer.py +0 -0
  24. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/analysis/parse_analysis_file.py +0 -0
  25. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/cdxml_builder.py +0 -0
  26. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/cdxml_utils.py +0 -0
  27. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/chemdraw/__init__.py +0 -0
  28. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/chemdraw/_chemscript_server.py +0 -0
  29. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/chemdraw/cdx_converter.py +0 -0
  30. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/chemdraw/cdxml_to_image.py +0 -0
  31. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/chemdraw/cdxml_to_image_rdkit.py +0 -0
  32. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/chemdraw/chemscript_bridge.py +0 -0
  33. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/constants.py +0 -0
  34. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/coord_normalizer.py +0 -0
  35. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/deterministic_pipeline/__init__.py +0 -0
  36. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/deterministic_pipeline/legacy/__init__.py +0 -0
  37. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/deterministic_pipeline/legacy/eln_cdx_cleanup.py +0 -0
  38. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/deterministic_pipeline/legacy/eln_enrichment.py +0 -0
  39. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/deterministic_pipeline/legacy/scheme_aligner.py +0 -0
  40. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/deterministic_pipeline/legacy/scheme_polisher.py +0 -0
  41. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/deterministic_pipeline/legacy/scheme_polisher_v2.py +0 -0
  42. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/deterministic_pipeline/scheme_reader_audit.py +0 -0
  43. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/deterministic_pipeline/scheme_reader_verify.py +0 -0
  44. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/image/__init__.py +0 -0
  45. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/image/reaction_from_image.py +0 -0
  46. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/image/structure_from_image.py +0 -0
  47. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/layout/__init__.py +0 -0
  48. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/layout/alignment.py +0 -0
  49. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/layout/reaction_cleanup.py +0 -0
  50. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/layout/scheme_merger.py +0 -0
  51. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/mcp_server/__init__.py +0 -0
  52. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/mcp_server/__main__.py +0 -0
  53. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/mcp_server/server.py +0 -0
  54. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/naming/__init__.py +0 -0
  55. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/naming/aligned_namer.py +0 -0
  56. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/naming/name_decomposer.py +0 -0
  57. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/naming/reactions_datamol.json +0 -0
  58. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/office/__init__.py +0 -0
  59. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/office/doc_from_template.py +0 -0
  60. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/office/ole_embedder.py +0 -0
  61. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/office/ole_extractor.py +0 -0
  62. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/perception/__init__.py +0 -0
  63. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/perception/compound_search.py +0 -0
  64. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/perception/eln_csv_parser.py +0 -0
  65. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/perception/rdf_parser.py +0 -0
  66. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/perception/reactant_heuristic.py +0 -0
  67. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/perception/reaction_parser.py +0 -0
  68. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/perception/scheme_reader.py +0 -0
  69. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/perception/scheme_refine.py +0 -0
  70. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/perception/scheme_segmenter.py +0 -0
  71. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/perception/spatial_assignment.py +0 -0
  72. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/rdkit_utils.py +0 -0
  73. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/render/__init__.py +0 -0
  74. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/render/auto_layout.py +0 -0
  75. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/render/compact_parser.py +0 -0
  76. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/render/parser.py +0 -0
  77. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/render/render_scheme.py +0 -0
  78. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/render/renderer.py +0 -0
  79. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/render/schema.py +0 -0
  80. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/render/scheme_maker.py +0 -0
  81. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/render/scheme_yaml_writer.py +0 -0
  82. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/resolve/__init__.py +0 -0
  83. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/resolve/cas_resolver.py +0 -0
  84. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/resolve/chemscanner_abbreviations.json +0 -0
  85. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/resolve/condensed_formula.py +0 -0
  86. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/resolve/jre_manager.py +0 -0
  87. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/resolve/reagent_abbreviations.json +0 -0
  88. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/resolve/reagent_db.py +0 -0
  89. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/resolve/superatom_data.json +0 -0
  90. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/resolve/superatom_table.py +0 -0
  91. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit/text_formatting.py +0 -0
  92. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit.egg-info/SOURCES.txt +0 -0
  93. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit.egg-info/dependency_links.txt +0 -0
  94. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit.egg-info/entry_points.txt +0 -0
  95. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit.egg-info/requires.txt +0 -0
  96. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/cdxml_toolkit.egg-info/top_level.txt +0 -0
  97. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/setup.cfg +0 -0
  98. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/tests/test_builder.py +0 -0
  99. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/tests/test_cdxml_utils.py +0 -0
  100. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/tests/test_condensed_formula.py +0 -0
  101. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/tests/test_constants.py +0 -0
  102. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/tests/test_merge_yaml.py +0 -0
  103. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/tests/test_rdkit_utils.py +0 -0
  104. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/tests/test_reaction_parser.py +0 -0
  105. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/tests/test_reagent_db.py +0 -0
  106. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/tests/test_scheme_maker.py +0 -0
  107. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/tests/test_scheme_reader.py +0 -0
  108. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/tests/test_smoke.py +0 -0
  109. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/tests/test_smoke_extended.py +0 -0
  110. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/tests/test_spatial_assignment.py +0 -0
  111. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/tests/test_superatom_table.py +0 -0
  112. {cdxml_toolkit-0.5.3 → cdxml_toolkit-0.5.4}/tests/test_text_formatting.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cdxml-toolkit
3
- Version: 0.5.3
3
+ Version: 0.5.4
4
4
  Summary: MCP server and Python toolkit for perception, rendering, and analysis of molecules and reaction schemes in ChemDraw CDXML.
5
5
  Author: Hiu Fung Kevin Lee
6
6
  License-Expression: MIT
@@ -350,6 +350,20 @@ def _try_validate(name: str, use_network: bool = True) -> Optional[str]:
350
350
  if smi:
351
351
  return smi
352
352
 
353
+ # OPSIN fallback (offline IUPAC name resolution, bundled JRE)
354
+ try:
355
+ from cdxml_toolkit.resolve.jre_manager import ensure_java_on_path
356
+ if ensure_java_on_path():
357
+ import warnings
358
+ from py2opsin import py2opsin as _py2opsin
359
+ with warnings.catch_warnings():
360
+ warnings.simplefilter("ignore", RuntimeWarning)
361
+ smi = _py2opsin(name)
362
+ if smi and Chem.MolFromSmiles(smi):
363
+ return _rdkit_canonical(smi)
364
+ except (ImportError, FileNotFoundError):
365
+ pass
366
+
353
367
  # PubChem fallback (for common names)
354
368
  if use_network:
355
369
  try:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cdxml-toolkit
3
- Version: 0.5.3
3
+ Version: 0.5.4
4
4
  Summary: MCP server and Python toolkit for perception, rendering, and analysis of molecules and reaction schemes in ChemDraw CDXML.
5
5
  Author: Hiu Fung Kevin Lee
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "cdxml-toolkit"
7
- version = "0.5.3"
7
+ version = "0.5.4"
8
8
  description = "MCP server and Python toolkit for perception, rendering, and analysis of molecules and reaction schemes in ChemDraw CDXML."
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -26,21 +26,34 @@ from cdxml_toolkit.naming.mol_builder import (
26
26
 
27
27
 
28
28
  # ---------------------------------------------------------------------------
29
- # Helper: check if ChemScript is available
29
+ # Helper: check if a name-to-structure backend is available
30
30
  # ---------------------------------------------------------------------------
31
31
 
32
- def _chemscript_available():
32
+ def _name_resolver_available():
33
+ """Return True if ChemScript or OPSIN can resolve IUPAC names."""
34
+ # Try ChemScript first
33
35
  try:
34
36
  from cdxml_toolkit.chemdraw.chemscript_bridge import ChemScriptBridge
35
37
  ChemScriptBridge()
36
38
  return True
37
39
  except Exception:
38
- return False
40
+ pass
41
+ # Try OPSIN (bundled offline fallback)
42
+ try:
43
+ from cdxml_toolkit.resolve.jre_manager import ensure_java_on_path
44
+ if ensure_java_on_path():
45
+ from py2opsin import py2opsin as _py2opsin
46
+ smi = _py2opsin("benzene")
47
+ if smi:
48
+ return True
49
+ except Exception:
50
+ pass
51
+ return False
39
52
 
40
53
 
41
54
  needs_chemscript = pytest.mark.skipif(
42
- not _chemscript_available(),
43
- reason="ChemScript not available",
55
+ not _name_resolver_available(),
56
+ reason="No name resolver available (neither ChemScript nor OPSIN)",
44
57
  )
45
58
 
46
59
 
File without changes
File without changes
File without changes
File without changes