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 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
|
#
# Copyright (C) 2019 Greg Landrum
# All Rights Reserved
#
from rdkit import RDConfig, rdBase
from rdkit import Chem
from io import BytesIO
import unittest
class TestCase(unittest.TestCase):
def setUp(self):
self.sdf = b"""
RDKit 2D
3 3 0 0 0 0 0 0 0 0999 V2000
0.8660 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.4330 0.7500 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
-0.4330 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 1 0
3 1 1 0
M END
> <atom.dprop.PartialCharge> (1)
0.008 -0.314 0.008
> <atom.iprop.NumHeavyNeighbors> (1)
2 2 2
> <atom.prop.AtomLabel> (1)
C1 N2 C3
> <atom.bprop.IsCarbon> (1)
1 0 1
> <atom.prop.PartiallyMissing> (1)
one n/a three
> <atom.iprop.PartiallyMissingInt> (1)
[?] 2 2 ?
$$$$"""
def testForwardSupplier(self):
sio = BytesIO(self.sdf)
suppl = Chem.ForwardSDMolSupplier(sio)
suppl.SetProcessPropertyLists(False)
m = next(suppl)
self.assertTrue(m.HasProp("atom.prop.AtomLabel"))
self.assertFalse(m.GetAtomWithIdx(0).HasProp("AtomLabel"))
sio = BytesIO(self.sdf)
suppl = Chem.ForwardSDMolSupplier(sio)
self.assertTrue(suppl.GetProcessPropertyLists())
m = next(suppl)
self.assertTrue(m.HasProp("atom.prop.AtomLabel"))
self.assertTrue(m.GetAtomWithIdx(0).HasProp("AtomLabel"))
def testSupplier(self):
suppl = Chem.SDMolSupplier()
suppl.SetData(self.sdf)
suppl.SetProcessPropertyLists(False)
m = suppl[0]
self.assertFalse(suppl.GetProcessPropertyLists())
self.assertTrue(m.HasProp("atom.prop.AtomLabel"))
self.assertFalse(m.GetAtomWithIdx(0).HasProp("AtomLabel"))
suppl.SetProcessPropertyLists(True)
m = suppl[0]
self.assertTrue(m.HasProp("atom.prop.AtomLabel"))
self.assertTrue(m.GetAtomWithIdx(0).HasProp("AtomLabel"))
def testCreateLists(self):
suppl = Chem.SDMolSupplier()
suppl.SetData(self.sdf)
m = suppl[0]
self.assertTrue(m.GetAtomWithIdx(0).HasProp("NumHeavyNeighbors"))
m.ClearProp("atom.iprop.NumHeavyNeighbors")
self.assertFalse(m.HasProp("atom.iprop.NumHeavyNeighbors"))
Chem.CreateAtomIntPropertyList(m,"NumHeavyNeighbors")
self.assertTrue(m.HasProp("atom.iprop.NumHeavyNeighbors"))
self.assertTrue(m.GetAtomWithIdx(0).HasProp("PartialCharge"))
m.ClearProp("atom.dprop.PartialCharge")
self.assertFalse(m.HasProp("atom.dprop.PartialCharge"))
Chem.CreateAtomDoublePropertyList(m,"PartialCharge")
self.assertTrue(m.HasProp("atom.dprop.PartialCharge"))
self.assertTrue(m.GetAtomWithIdx(0).HasProp("IsCarbon"))
m.ClearProp("atom.bprop.IsCarbon")
self.assertFalse(m.HasProp("atom.bprop.IsCarbon"))
Chem.CreateAtomBoolPropertyList(m,"IsCarbon")
self.assertTrue(m.HasProp("atom.bprop.IsCarbon"))
self.assertTrue(m.GetAtomWithIdx(0).HasProp("PartiallyMissing"))
m.ClearProp("atom.prop.PartiallyMissing")
self.assertFalse(m.HasProp("atom.prop.PartiallyMissing"))
Chem.CreateAtomStringPropertyList(m,"PartiallyMissing")
self.assertTrue(m.HasProp("atom.prop.PartiallyMissing"))
self.assertEqual(m.GetProp("atom.prop.PartiallyMissing"),"one n/a three")
Chem.CreateAtomStringPropertyList(m,"PartiallyMissing",missingValueMarker="?")
self.assertTrue(m.HasProp("atom.prop.PartiallyMissing"))
self.assertEqual(m.GetProp("atom.prop.PartiallyMissing"),"[?] one ? three")
def testGithubPR4160(self):
# this shouldn't fail with a bad any cast anymore
from rdkit import Chem
m = Chem.MolFromSmiles("CC")
for a in m.GetAtoms():
a.SetIntProp("foo", 1)
Chem.CreateAtomIntPropertyList(m, "foo")
if __name__ == '__main__':
unittest.main()
|