rdworks 0.55.1__py3-none-any.whl → 0.56.1__py3-none-any.whl
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.
- rdworks/__init__.py +1 -1
- rdworks/complete.py +38 -4
- {rdworks-0.55.1.dist-info → rdworks-0.56.1.dist-info}/METADATA +1 -1
- {rdworks-0.55.1.dist-info → rdworks-0.56.1.dist-info}/RECORD +7 -7
- {rdworks-0.55.1.dist-info → rdworks-0.56.1.dist-info}/WHEEL +0 -0
- {rdworks-0.55.1.dist-info → rdworks-0.56.1.dist-info}/licenses/LICENSE +0 -0
- {rdworks-0.55.1.dist-info → rdworks-0.56.1.dist-info}/top_level.txt +0 -0
rdworks/__init__.py
CHANGED
rdworks/complete.py
CHANGED
@@ -2,6 +2,7 @@ from rdworks import Mol, MolLibr
|
|
2
2
|
from rdworks.stereoisomers import enumerate_stereoisomers, enumerate_ring_bond_stereoisomers
|
3
3
|
from rdkit import Chem
|
4
4
|
from rdkit.Chem.MolStandardize import rdMolStandardize
|
5
|
+
from rdkit.Chem.EnumerateStereoisomers import EnumerateStereoisomers, StereoEnumerationOptions
|
5
6
|
|
6
7
|
|
7
8
|
def complete_stereoisomers(molecular_input: str | Chem.Mol | Mol,
|
@@ -65,6 +66,18 @@ def complete_stereoisomers(molecular_input: str | Chem.Mol | Mol,
|
|
65
66
|
return libr
|
66
67
|
|
67
68
|
|
69
|
+
def can_have_stereo(bond):
|
70
|
+
"""Check if a double bond can have E/Z stereochemistry"""
|
71
|
+
atom1, atom2 = bond.GetBeginAtom(), bond.GetEndAtom()
|
72
|
+
|
73
|
+
# Check if both atoms have at least 2 non-hydrogen neighbors
|
74
|
+
for atom in [atom1, atom2]:
|
75
|
+
non_h_neighbors = [n for n in atom.GetNeighbors() if n.GetAtomicNum() != 1]
|
76
|
+
if len(non_h_neighbors) < 2:
|
77
|
+
return False
|
78
|
+
|
79
|
+
return True
|
80
|
+
|
68
81
|
|
69
82
|
def complete_tautomers(mol: Mol, **kwargs) -> MolLibr:
|
70
83
|
"""Returns a library of enumerated tautomers.
|
@@ -76,9 +89,30 @@ def complete_tautomers(mol: Mol, **kwargs) -> MolLibr:
|
|
76
89
|
MolLibr: a library of enumerated tautomers.
|
77
90
|
"""
|
78
91
|
enumerator = rdMolStandardize.TautomerEnumerator()
|
79
|
-
|
92
|
+
enumerator.SetRemoveSp3Stereo(False)
|
93
|
+
enumerator.SetRemoveBondStereo(False) # Don't remove existing stereo
|
94
|
+
tautomers = list(enumerator.Enumerate(mol.rdmol))
|
95
|
+
|
96
|
+
all_stereoisomers = []
|
97
|
+
|
98
|
+
for tautomer in tautomers:
|
99
|
+
# Find unspecified double bonds that could have E/Z stereo
|
100
|
+
unspecified_bonds = []
|
101
|
+
for bond in tautomer.GetBonds():
|
102
|
+
if (bond.GetBondType() == Chem.BondType.DOUBLE and
|
103
|
+
bond.GetStereo() == Chem.BondStereo.STEREONONE and
|
104
|
+
can_have_stereo(bond)):
|
105
|
+
unspecified_bonds.append(bond.GetIdx())
|
106
|
+
|
107
|
+
if unspecified_bonds:
|
108
|
+
# Enumerate all possible stereoisomers
|
109
|
+
opts = StereoEnumerationOptions(onlyUnassigned=True, maxIsomers=50)
|
110
|
+
stereoisomers = list(EnumerateStereoisomers(tautomer, options=opts))
|
111
|
+
all_stereoisomers.extend(stereoisomers)
|
112
|
+
else:
|
113
|
+
all_stereoisomers.append(tautomer)
|
80
114
|
|
81
|
-
if len(
|
82
|
-
return MolLibr(
|
115
|
+
if len(all_stereoisomers) > 1:
|
116
|
+
return MolLibr(all_stereoisomers).unique().rename(mol.name, sep='.').compute(**kwargs)
|
83
117
|
|
84
|
-
return MolLibr(
|
118
|
+
return MolLibr(all_stereoisomers).compute(**kwargs)
|
@@ -1,5 +1,5 @@
|
|
1
|
-
rdworks/__init__.py,sha256=
|
2
|
-
rdworks/complete.py,sha256=
|
1
|
+
rdworks/__init__.py,sha256=d-zUnWFkFgiYgKXi2hBDA6KX99RDMX4c8RJqrCpQozw,1356
|
2
|
+
rdworks/complete.py,sha256=MGNw3O66tPN4I2PIrrjz2ufMako0D1KezvHSNjfpRf8,4642
|
3
3
|
rdworks/conf.py,sha256=_4SxHJiaOdK_4KY9adxvQTfzJFudvAQoHRgvejmfyGc,36365
|
4
4
|
rdworks/descriptor.py,sha256=34T_dQ6g8v3u-ym8TLKbQtxIIV5TEo-d3pdedq3o-cg,2106
|
5
5
|
rdworks/display.py,sha256=JR0gR26UpH-JCxVOaqXZCUj2MiGZSrx9Me87FncspVI,13469
|
@@ -66,8 +66,8 @@ rdworks/predefined/misc/reactive-part-3.xml,sha256=LgWHSEbRTVmgBoIO45xbTo1xQJs0X
|
|
66
66
|
rdworks/predefined/misc/reactive.xml,sha256=syedoQ6VYUfRLnxy99ObuDniJ_a_WhrWAJbTKFfJ6VY,11248
|
67
67
|
rdworks/xtb/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
68
68
|
rdworks/xtb/wrapper.py,sha256=YpZY8SJ9Lrp3I3_GAVawSb_4_Zc8hcJtF5l7-I-Wbys,22048
|
69
|
-
rdworks-0.
|
70
|
-
rdworks-0.
|
71
|
-
rdworks-0.
|
72
|
-
rdworks-0.
|
73
|
-
rdworks-0.
|
69
|
+
rdworks-0.56.1.dist-info/licenses/LICENSE,sha256=UOkJSBqYyQUvtCp7a-vdCANeEcLE2dnTie_eB1By5SY,1074
|
70
|
+
rdworks-0.56.1.dist-info/METADATA,sha256=4jemVgYRM_UDuGjLUOK8vbboQZiqctnx-rrZgnvAg5k,1967
|
71
|
+
rdworks-0.56.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
72
|
+
rdworks-0.56.1.dist-info/top_level.txt,sha256=05C98HbvBK2axUBogC_hAT_CdpOeQYGnQ6vRAgawr8s,8
|
73
|
+
rdworks-0.56.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|