forked from datamol-io/datamol
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_align.py
78 lines (59 loc) · 2.77 KB
/
test_align.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import pytest
import pandas as pd
import datamol as dm
def test_template_align():
data: pd.DataFrame = dm.cdk2(as_df=True) # type: ignore
data = data.iloc[:6].copy() # type: ignore
template = data.iloc[0]["mol"]
data["aligned_mol"] = data["mol"].apply(lambda x: dm.align.template_align(x, template=template))
assert bool(data["aligned_mol"].apply(lambda x: isinstance(x, dm.Mol)).all()) is True
template = data.iloc[0]["smiles"]
data["aligned_mol"] = data["smiles"].apply(
lambda x: dm.align.template_align(x, template=template)
)
assert bool(data["aligned_mol"].apply(lambda x: isinstance(x, dm.Mol)).all()) is True
template = data.iloc[0]["mol"]
data["aligned_mol"] = data["mol"].apply(
lambda x: dm.align.template_align(x, template=template, auto_select_coord_gen=True)
)
assert bool(data["aligned_mol"].apply(lambda x: isinstance(x, dm.Mol)).all()) is True
template = data.iloc[0]["mol"]
data["aligned_mol"] = data["mol"].apply(
lambda x: dm.align.template_align(x, template=template, use_depiction=False)
)
assert bool(data["aligned_mol"].apply(lambda x: isinstance(x, dm.Mol)).all()) is True
template = None
data["aligned_mol"] = data["mol"].apply(lambda x: dm.align.template_align(x, template=template))
assert bool(data["aligned_mol"].apply(lambda x: isinstance(x, dm.Mol)).all()) is True
template = None
data["aligned_mol"] = data["mol"].apply(
lambda x: dm.align.template_align(x, template=template, copy=False)
)
assert bool(data["aligned_mol"].apply(lambda x: isinstance(x, dm.Mol)).all()) is True
assert dm.align.template_align(None) is None
def test_auto_align_many():
data: pd.DataFrame = dm.solubility(as_df=True) # type: ignore
data = data.iloc[:16].copy() # type: ignore
excepted_cluster_size = [8, 6, 5, 6, 6]
for i, partition_method in enumerate(
[
"cluster",
"scaffold",
"anongraph-scaffold",
"anon-scaffold",
"strip-scaffold",
]
):
print(partition_method)
data["aligned_mol"] = dm.align.auto_align_many(
data["mol"],
partition_method=partition_method,
)
props = data["aligned_mol"].apply(lambda x: pd.Series(x.GetPropsAsDict()))
assert "dm.auto_align_many.cluster_id" in props.columns
assert "dm.auto_align_many.core" in props.columns
assert props["dm.auto_align_many.cluster_id"].dtype.name == "int64"
assert props["dm.auto_align_many.core"].dtype.name == "object"
assert props["dm.auto_align_many.cluster_id"].unique().shape[0] == excepted_cluster_size[i]
with pytest.raises(ValueError):
dm.align.auto_align_many(data["mol"], partition_method="invalid")