Skip to content

Commit 3dbfdd9

Browse files
author
OliverBScott
committed
Added core tests
1 parent 6ec68c9 commit 3dbfdd9

3 files changed

Lines changed: 173 additions & 0 deletions

File tree

tests/core/test_fragment.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
"""
2+
scaffoldgraph tests.core.test_fragment
3+
"""
4+
5+
import pytest
6+
from rdkit import Chem
7+
8+
from scaffoldgraph.core.fragment import *
9+
10+
11+
@pytest.fixture(name='mol')
12+
def test_molecule():
13+
smiles = 'CCN1CCc2c(C1)sc(NC(=O)Nc3ccc(Cl)cc3)c2C#N'
14+
return Chem.MolFromSmiles(smiles)
15+
16+
17+
def canon(smiles):
18+
"""Canonicalize SMILES for safety. If canonicalization ever changes this should remain consistent"""
19+
return Chem.MolToSmiles(Chem.MolFromSmiles(smiles))
20+
21+
22+
def test_murcko(mol):
23+
murcko = get_murcko_scaffold(mol, generic=False)
24+
assert Chem.MolToSmiles(murcko) == canon('O=C(Nc1ccccc1)Nc1cc2c(s1)CNCC2')
25+
murcko = get_murcko_scaffold(mol, generic=True)
26+
assert Chem.MolToSmiles(murcko) == canon('CC(CC1CCCCC1)CC1CC2CCCCC2C1')
27+
28+
29+
def test_annotation(mol):
30+
annotation = Chem.MolToSmiles(get_annotated_murcko_scaffold(mol))
31+
annotation = annotation.replace('1*', '*')
32+
annotation = annotation.replace('2*', '*')
33+
annotation = annotation.replace('3*', '*')
34+
assert annotation == '[*]N1CCc2c(sc(NC(=O)Nc3ccc([*])cc3)c2[*])C1'
35+
36+
37+
def test_murcko_all(mol):
38+
frags = get_all_murcko_fragments(mol, break_fused_rings=True)
39+
assert len(frags) == 6
40+
frags = get_all_murcko_fragments(mol, break_fused_rings=False)
41+
assert len(frags) == 3
42+
43+
44+
def test_murcko_next(mol):
45+
scf = get_murcko_scaffold(mol)
46+
frags_1 = get_next_murcko_fragments(scf, break_fused_rings=True)
47+
frags_1 = {Chem.MolToSmiles(x) for x in frags_1}
48+
assert len(frags_1) == 2
49+
frags_2 = get_next_murcko_fragments(scf, break_fused_rings=False)
50+
frags_2 = {Chem.MolToSmiles(x) for x in frags_2}
51+
assert len(frags_2) == 2
52+
assert len(frags_1.intersection(frags_2)) == 1

tests/core/test_graph.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
"""
2+
scaffoldgraph tests.core.test_graph
3+
"""
4+
5+
from rdkit import Chem
6+
7+
from scaffoldgraph.core.graph import *
8+
9+
10+
def test_init_molecule_name():
11+
x = Chem.MolFromSmiles('CCC')
12+
assert bool(x.HasProp('_Name')) is False
13+
init_molecule_name(x)
14+
assert x.HasProp('_Name')
15+
assert x.GetProp('_Name') is not None
16+
assert x.GetProp('_Name') != ''
17+
18+
19+
def test_graph_subclass():
20+
assert issubclass(ScaffoldGraph, DiGraph)
21+
assert issubclass(ScaffoldGraph, ABC)

tests/core/test_scaffold.py

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
"""
2+
scaffoldgraph tests.core.test_scaffold
3+
"""
4+
5+
import pytest
6+
from rdkit import Chem
7+
8+
from scaffoldgraph.core.scaffold import *
9+
10+
11+
@pytest.fixture(name='scaffold')
12+
def basic_scaffold():
13+
# murcko scaffold smiles
14+
mol = Chem.MolFromSmiles('O=C(Nc1ccccc1)Nc1cc2c(s1)CNCC2')
15+
scaffold = Scaffold(mol)
16+
return scaffold
17+
18+
19+
def test_new():
20+
scaffold = Scaffold(None)
21+
assert scaffold is None
22+
23+
24+
def test_smiles(scaffold):
25+
assert scaffold.smiles == 'O=C(Nc1ccccc1)Nc1cc2c(s1)CNCC2'
26+
assert scaffold.get_canonical_identifier() == scaffold.smiles
27+
assert scaffold == Scaffold(Chem.MolFromSmiles(scaffold.smiles))
28+
assert scaffold == scaffold.smiles
29+
assert str(scaffold) == scaffold.smiles
30+
assert hash(scaffold) == hash(scaffold.smiles)
31+
32+
33+
def test_name(scaffold):
34+
assert scaffold.name is None
35+
scaffold.name = 'TEST'
36+
assert scaffold.name == 'TEST'
37+
assert repr(scaffold) == '<Scaffold at {}>'.format(hex(id(scaffold)))
38+
assert bool(scaffold) is True
39+
40+
41+
def test_atoms(scaffold):
42+
atoms = scaffold.atoms
43+
assert len(atoms) == scaffold.mol.GetNumAtoms()
44+
assert all([isinstance(x, Chem.Atom) for x in atoms])
45+
46+
47+
def test_bonds(scaffold):
48+
bonds = scaffold.bonds
49+
assert len(bonds) == scaffold.mol.GetNumBonds()
50+
assert all([isinstance(x, Chem.Bond) for x in bonds])
51+
52+
53+
def test_rings(scaffold):
54+
rings = scaffold.rings
55+
assert isinstance(rings, RingStack)
56+
assert hasattr(rings, 'owner')
57+
assert hasattr(rings, 'info')
58+
assert hasattr(rings, 'atom_rings')
59+
assert hasattr(rings, 'bond_rings')
60+
assert rings.count == 3 and len(rings) == 3
61+
assert repr(rings) == '<RingStack at {}>'.format(hex(id(rings)))
62+
assert isinstance(rings[0], Ring)
63+
assert len([x for x in rings]) == 3
64+
assert isinstance(rings.info, Chem.RingInfo)
65+
assert len(rings.atom_rings) == 3 and len(rings.bond_rings) == 3
66+
ring = rings[1]
67+
assert hasattr(ring, 'owner')
68+
assert hasattr(ring, 'aix')
69+
assert hasattr(ring, 'bix')
70+
assert all([isinstance(x, Chem.Bond) for x in ring.bonds])
71+
assert all([isinstance(x, Chem.Atom) for x in ring.atoms])
72+
assert isinstance(ring.size, int)
73+
assert len(ring) == len(ring.atoms)
74+
assert repr(ring) == '<Ring at {}>'.format(hex(id(ring)))
75+
76+
77+
def test_ring_systems(scaffold):
78+
rings = scaffold.ring_systems
79+
assert isinstance(rings, RingSystemStack)
80+
assert hasattr(rings, 'owner')
81+
assert hasattr(rings, 'ring_indexes')
82+
assert hasattr(rings, 'atom_rings')
83+
assert hasattr(rings, 'bond_rings')
84+
assert rings.count == 2 and len(rings) == 2
85+
assert repr(rings) == '<RingSystemStack at {}>'.format(hex(id(rings)))
86+
assert isinstance(rings[0], RingSystem)
87+
assert len([x for x in rings]) == 2
88+
assert len(rings.atom_rings) == 2 and len(rings.bond_rings) == 2
89+
ring = rings[1]
90+
assert hasattr(ring, 'owner')
91+
assert hasattr(ring, 'aix')
92+
assert hasattr(ring, 'bix')
93+
assert hasattr(ring, 'rix')
94+
assert all([isinstance(x, Chem.Bond) for x in ring.bonds])
95+
assert all([isinstance(x, Chem.Atom) for x in ring.atoms])
96+
assert isinstance(ring.size, int)
97+
assert len(ring) == len(ring.atoms)
98+
assert repr(ring) == '<RingSystem at {}>'.format(hex(id(ring)))
99+
assert isinstance(ring[0], Ring)
100+
assert len(list(ring.get_rings())) == 2

0 commit comments

Comments
 (0)