rdworks 0.46.1__tar.gz → 0.47.1__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 (85) hide show
  1. {rdworks-0.46.1 → rdworks-0.47.1}/PKG-INFO +1 -1
  2. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/__init__.py +1 -1
  3. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/torsion.py +1 -1
  4. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/xtb/wrapper.py +49 -31
  5. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks.egg-info/PKG-INFO +1 -1
  6. {rdworks-0.46.1 → rdworks-0.47.1}/tests/test_basics.py +5 -1
  7. {rdworks-0.46.1 → rdworks-0.47.1}/tests/test_xtb.py +4 -4
  8. {rdworks-0.46.1 → rdworks-0.47.1}/LICENSE +0 -0
  9. {rdworks-0.46.1 → rdworks-0.47.1}/README.md +0 -0
  10. {rdworks-0.46.1 → rdworks-0.47.1}/pyproject.toml +0 -0
  11. {rdworks-0.46.1 → rdworks-0.47.1}/setup.cfg +0 -0
  12. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/autograph/__init__.py +0 -0
  13. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/autograph/autograph.py +0 -0
  14. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/autograph/centroid.py +0 -0
  15. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/autograph/dynamictreecut.py +0 -0
  16. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/autograph/nmrclust.py +0 -0
  17. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/autograph/rckmeans.py +0 -0
  18. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/bitqt/__init__.py +0 -0
  19. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/bitqt/bitqt.py +0 -0
  20. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/conf.py +0 -0
  21. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/descriptor.py +0 -0
  22. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/display.py +0 -0
  23. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/ionized.py +0 -0
  24. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/matchedseries.py +0 -0
  25. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/mol.py +0 -0
  26. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/mollibr.py +0 -0
  27. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/pka.py +0 -0
  28. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/Asinex_fragment.xml +0 -0
  29. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/Astex_RO3.xml +0 -0
  30. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/Baell2010_PAINS/Baell2010A.xml +0 -0
  31. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/Baell2010_PAINS/Baell2010B.xml +0 -0
  32. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/Baell2010_PAINS/Baell2010C.xml +0 -0
  33. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/Baell2010_PAINS/PAINS-less-than-015-hits.xml +0 -0
  34. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/Baell2010_PAINS/PAINS-less-than-150-hits.xml +0 -0
  35. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/Baell2010_PAINS/PAINS-more-than-150-hits.xml +0 -0
  36. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/Baell2010_PAINS/makexml.py +0 -0
  37. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/Brenk2008_Dundee/makexml.py +0 -0
  38. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/CNS.xml +0 -0
  39. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/ChEMBL_Walters/BMS.xml +0 -0
  40. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/ChEMBL_Walters/Dundee.xml +0 -0
  41. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/ChEMBL_Walters/Glaxo.xml +0 -0
  42. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/ChEMBL_Walters/Inpharmatica.xml +0 -0
  43. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/ChEMBL_Walters/LINT.xml +0 -0
  44. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/ChEMBL_Walters/MLSMR.xml +0 -0
  45. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/ChEMBL_Walters/PAINS.xml +0 -0
  46. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/ChEMBL_Walters/SureChEMBL.xml +0 -0
  47. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/ChEMBL_Walters/makexml.py +0 -0
  48. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/Hann1999_Glaxo/Hann1999.xml +0 -0
  49. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/Hann1999_Glaxo/Hann1999Acid.xml +0 -0
  50. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/Hann1999_Glaxo/Hann1999Base.xml +0 -0
  51. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/Hann1999_Glaxo/Hann1999ElPh.xml +0 -0
  52. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/Hann1999_Glaxo/Hann1999NuPh.xml +0 -0
  53. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/Hann1999_Glaxo/makexml.py +0 -0
  54. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/Kazius2005/Kazius2005.xml +0 -0
  55. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/Kazius2005/makexml.py +0 -0
  56. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/ZINC_druglike.xml +0 -0
  57. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/ZINC_fragment.xml +0 -0
  58. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/ZINC_leadlike.xml +0 -0
  59. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/fragment.xml +0 -0
  60. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/ionized/simple_smarts_pattern.csv +0 -0
  61. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/ionized/smarts_pattern.csv +0 -0
  62. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/misc/makexml.py +0 -0
  63. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/misc/reactive-part-2.xml +0 -0
  64. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/misc/reactive-part-3.xml +0 -0
  65. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/predefined/misc/reactive.xml +0 -0
  66. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/readin.py +0 -0
  67. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/rgroup.py +0 -0
  68. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/scaffold.py +0 -0
  69. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/std.py +0 -0
  70. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/stereoisomers.py +0 -0
  71. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/tautomers.py +0 -0
  72. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/testdata.py +0 -0
  73. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/units.py +0 -0
  74. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/utils.py +0 -0
  75. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/xml.py +0 -0
  76. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks/xtb/__init__.py +0 -0
  77. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks.egg-info/SOURCES.txt +0 -0
  78. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks.egg-info/dependency_links.txt +0 -0
  79. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks.egg-info/requires.txt +0 -0
  80. {rdworks-0.46.1 → rdworks-0.47.1}/src/rdworks.egg-info/top_level.txt +0 -0
  81. {rdworks-0.46.1 → rdworks-0.47.1}/tests/test_decimals.py +0 -0
  82. {rdworks-0.46.1 → rdworks-0.47.1}/tests/test_gypsumdl.py +0 -0
  83. {rdworks-0.46.1 → rdworks-0.47.1}/tests/test_iupac_name.py +0 -0
  84. {rdworks-0.46.1 → rdworks-0.47.1}/tests/test_nn_xtb.py +0 -0
  85. {rdworks-0.46.1 → rdworks-0.47.1}/tests/test_web.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rdworks
3
- Version: 0.46.1
3
+ Version: 0.47.1
4
4
  Summary: Routine tasks built on RDKit and other tools
5
5
  Author-email: Sung-Hun Bae <sunghun.bae@gmail.com>
6
6
  Maintainer-email: Sung-Hun Bae <sunghun.bae@gmail.com>
@@ -1,4 +1,4 @@
1
- __version__ = '0.46.1'
1
+ __version__ = '0.47.1'
2
2
 
3
3
  from rdworks.conf import Conf
4
4
  from rdworks.mol import Mol
@@ -462,7 +462,7 @@ def create_torsion_fragment(rdmol: Chem.Mol,
462
462
 
463
463
  # fragmented
464
464
  WBO_filtered = False
465
- if GFN2xTB().version() is not None:
465
+ if GFN2xTB.is_ready():
466
466
  # filter candidate(s) by Wiberg bond order (WBO) if xTB is available
467
467
  jk = tuple(sorted([j, k]))
468
468
  wbo_passed_candidates = {}
@@ -45,42 +45,28 @@ class GFN2xTB:
45
45
  resource.setrlimit(resource.RLIMIT_STACK, (resource.RLIM_INFINITY, resource.RLIM_INFINITY))
46
46
 
47
47
 
48
- def version(self) -> str | None:
49
- """Check xtb version.
50
-
51
- Returns:
52
- str | None: version statement.
53
- """
54
- cmd = ['xtb', '--version']
55
- proc = subprocess.run(cmd, capture_output=True, text=True)
56
- assert proc.returncode == 0, "GFN2xTB() Error: xtb not available"
57
- for line in proc.stdout.split('\n'):
58
- line = line.strip()
59
- if 'version' in line:
60
- return line
61
-
62
- return None
63
-
64
-
65
- def is_xtb_ready(self, cmd: str = 'xtb') -> bool:
48
+ @staticmethod
49
+ def is_xtb_ready() -> bool:
66
50
  """Check if xtb is available.
67
51
 
68
52
  Returns:
69
53
  bool: True if `xtb` is available, False otherwise.
70
54
  """
71
- return shutil.which(cmd) is not None
55
+ return shutil.which('xtb') is not None
72
56
 
73
57
 
74
- def is_cpx_ready(self, cmd: str = 'cpx') -> bool:
58
+ @staticmethod
59
+ def is_cpx_ready() -> bool:
75
60
  """Checks if the CPCM-X command-line tool, `cpx`, is accessible in the system.
76
61
 
77
62
  Returns:
78
63
  bool: True if the cpx is found, False otherwise.
79
64
  """
80
- return shutil.which(cmd) is not None
65
+ return shutil.which('cpx') is not None
81
66
 
82
67
 
83
- def is_cpcmx_ready(self) -> bool:
68
+ @staticmethod
69
+ def is_cpcmx_option_ready() -> bool:
84
70
  """Checks if xtb works with the `--cpcmx` option.
85
71
 
86
72
  xtb distributed by the conda does not include CPCM-X function (as of June 17, 2025).
@@ -89,18 +75,50 @@ class GFN2xTB:
89
75
  Returns:
90
76
  bool: True if the --cpcmx option is working, False otherwise.
91
77
  """
92
- cmd = ['xtb', '--cpcmx']
93
- proc = subprocess.run(cmd, capture_output=True, text=True)
94
- # we are expecting an error because no input file is given
95
- assert proc.returncode != 0
96
- for line in proc.stdout.split('\n'):
97
- line = line.strip()
98
- if 'CPCM-X library was not included' in line:
99
- return False
78
+ if GFN2xTB.is_xtb_ready():
79
+ cmd = ['xtb', '--cpcmx']
80
+ proc = subprocess.run(cmd, capture_output=True, text=True)
81
+ # we are expecting an error because no input file is given
82
+ assert proc.returncode != 0
83
+ for line in proc.stdout.split('\n'):
84
+ line = line.strip()
85
+ if 'CPCM-X library was not included' in line:
86
+ return False
100
87
 
101
88
  return True
102
89
 
103
90
 
91
+ @staticmethod
92
+ def is_ready() -> bool:
93
+ """Check if `xtb` and `cpx` are accessible and `xtb --cpcmx` are available.
94
+
95
+ Returns:
96
+ bool: True if both `xtb` and `cpx` are accessible, False otherwise.
97
+ """
98
+ return all([GFN2xTB.is_xtb_ready(),
99
+ GFN2xTB.is_cpx_ready(),
100
+ GFN2xTB.is_cpcmx_option_ready()])
101
+
102
+
103
+ @staticmethod
104
+ def version() -> str | None:
105
+ """Check xtb version.
106
+
107
+ Returns:
108
+ str | None: version statement.
109
+ """
110
+ if GFN2xTB.is_ready():
111
+ cmd = ['xtb', '--version']
112
+ proc = subprocess.run(cmd, capture_output=True, text=True)
113
+ assert proc.returncode == 0, "GFN2xTB() Error: xtb not available"
114
+ for line in proc.stdout.split('\n'):
115
+ line = line.strip()
116
+ if 'version' in line:
117
+ return line
118
+
119
+ return None
120
+
121
+
104
122
  def to_xyz(self) -> str:
105
123
  """Export to XYZ formatted string.
106
124
 
@@ -345,7 +363,7 @@ class GFN2xTB:
345
363
  elif water == 'alpb':
346
364
  options += ['--alpb', 'water']
347
365
  # it does not provide Gsolv contribution to the total energy
348
- elif water == 'cpcmx' and self.is_cpcmx_ready():
366
+ elif water == 'cpcmx' and self.is_cpcmx_option_ready():
349
367
  options += ['--cpcmx', 'water']
350
368
 
351
369
  # 'xtbout.json', 'xtbrestart', 'xtbtopo.mol', 'charges', and 'wbo' files will be
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rdworks
3
- Version: 0.46.1
3
+ Version: 0.47.1
4
4
  Summary: Routine tasks built on RDKit and other tools
5
5
  Author-email: Sung-Hun Bae <sunghun.bae@gmail.com>
6
6
  Maintainer-email: Sung-Hun Bae <sunghun.bae@gmail.com>
@@ -460,7 +460,11 @@ def test_optimize_confs():
460
460
 
461
461
  def test_xtb_wrapper():
462
462
  from rdworks.xtb.wrapper import GFN2xTB
463
- assert GFN2xTB().version()
463
+ assert GFN2xTB.is_xtb_ready() == True
464
+ assert GFN2xTB.is_cpx_ready() == True
465
+ assert GFN2xTB.is_cpcmx_option_ready() == True
466
+ assert GFN2xTB.is_ready() == True
467
+ assert GFN2xTB.version() is not None
464
468
 
465
469
 
466
470
  def test_torsion_fragment():
@@ -31,11 +31,12 @@ def test_singlepoint():
31
31
  print("number of conformers=", mol.count())
32
32
  print("number of atoms=", mol.confs[0].natoms)
33
33
 
34
- gfn2xtb = GFN2xTB(mol.confs[0].rdmol, ncores=8)
35
-
36
- print("GFN2xTB.version():", gfn2xtb.version())
34
+ print("GFN2xTB.is_cpcmx_option_ready()", GFN2xTB.is_cpcmx_option_ready())
35
+ print("GFN2xTB.version():", GFN2xTB.version())
37
36
  print()
38
37
 
38
+ gfn2xtb = GFN2xTB(mol.confs[0].rdmol, ncores=8)
39
+
39
40
  print("GFN2xTB.singlepoint()")
40
41
  outdict = gfn2xtb.singlepoint()
41
42
  print(outdict)
@@ -52,7 +53,6 @@ def test_singlepoint():
52
53
  print()
53
54
 
54
55
  print("GFN2xTB.singlepoint(water='cpcmx')")
55
- print("GFN2xTB.is_cpcmx_ready()", gfn2xtb.is_cpcmx_ready())
56
56
  outdict = gfn2xtb.singlepoint(water='cpcmx')
57
57
  print(outdict)
58
58
  print()
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes