Skip to content

Commit c0b6450

Browse files
authored
Merge pull request #209 from shuyana/fix-zero-division
fix zero division error in conformers
2 parents 2619c61 + 100fd4c commit c0b6450

File tree

3 files changed

+21
-4
lines changed

3 files changed

+21
-4
lines changed

datamol/conformers/_conformers.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,8 @@ def generate(
9191
["ETDG", "ETKDG", "ETKDGv2", "ETKDGv3"]. If None, "ETKDGv3" is used.
9292
forcefield: molecular forcefield to use, one of ['UFF','MMFF94s','MMFF94s_noEstat']
9393
ewindow: maximum energy above minimum energy conformer to output
94-
eratio: max delta-energy divided by rotatable bonds for conformers
94+
eratio: max delta-energy divided by rotatable bonds for conformers.
95+
Ignored if the molecule has no rotatable bonds.
9596
energy_iterations: Maximum number of iterations during the energy minimization procedure.
9697
It corresponds to the `maxIters` argument in RDKit.
9798
warning_not_converged: Wether to log a warning when the number of not converged conformers
@@ -211,7 +212,8 @@ def generate(
211212
ordered_conformers = [
212213
conf
213214
for E, conf in sorted(zip(energies, mol_clone.GetConformers()), key=lambda x: x[0])
214-
if E - minE <= ewindow and (E - minE) / rotatable_bonds <= eratio
215+
if E - minE <= ewindow
216+
and (rotatable_bonds == 0 or (E - minE) / rotatable_bonds <= eratio)
215217
]
216218
mol.RemoveAllConformers()
217219
[mol.AddConformer(conf, assignId=True) for conf in ordered_conformers]

tests/test_conformers.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,3 +325,18 @@ def test_conformer_energy():
325325
e3 = mol3.GetConformer(3).GetPropsAsDict()
326326
assert np.isclose(e3["rdkit_MMFF94s_noEstat_energy"], 38.217380, atol=1)
327327
assert np.isclose(e3["rdkit_MMFF94s_noEstat_delta_energy"], 0.0, atol=0.1)
328+
329+
330+
def test_conformer_no_rotatable_bonds():
331+
mol = dm.to_mol("c1ccccc1")
332+
333+
random.seed(42)
334+
np.random.seed(42)
335+
mol1 = dm.conformers.generate(mol, minimize_energy=True)
336+
337+
random.seed(42)
338+
np.random.seed(42)
339+
mol2 = dm.conformers.generate(mol, minimize_energy=True, eratio=3)
340+
341+
# `eratio` should be ignored for this molecule as it has no rotatable bonds
342+
assert mol1.GetNumConformers() == mol2.GetNumConformers()

tests/test_predictors.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ def test_esol_from_data():
3434
# series
3535
v = dm.predictors.esol_from_data(data.iloc[0])
3636
v = float(v)
37-
assert type(v) == float
37+
assert isinstance(v, float)
3838

3939
# dict
4040
v = dm.predictors.esol_from_data(data.iloc[0].to_dict())
4141
v = float(v)
42-
assert type(v) == float
42+
assert isinstance(v, float)

0 commit comments

Comments
 (0)