mirror of
https://github.com/rdkit/rdkit.git
synced 2026-06-07 22:44:25 +08:00
141 lines
4.8 KiB
Python
Executable File
141 lines
4.8 KiB
Python
Executable File
# $Id$
|
|
#
|
|
# Copyright (C) 2001-2006 greg Landrum
|
|
#
|
|
# @@ All Rights Reserved @@
|
|
#
|
|
"""basic unit testing code for the molecule boost wrapper
|
|
|
|
"""
|
|
import RDConfig
|
|
import unittest,cPickle,os
|
|
import Chem
|
|
|
|
|
|
class TestCase(unittest.TestCase):
|
|
def setUp(self):
|
|
self.bigSmiList = [
|
|
"CC1=CC(=O)C=CC1=O",
|
|
"S(SC1=NC2=CC=CC=C2S1)C3=NC4=C(S3)C=CC=C4",
|
|
"OC1=C(Cl)C=C(C=C1[N+]([O-])=O)[N+]([O-])=O",
|
|
"[O-][N+](=O)C1=CNC(=N)S1",
|
|
"NC1=CC2=C(C=C1)C(=O)C3=C(C=CC=C3)C2=O",
|
|
"OC(=O)C1=C(C=CC=C1)C2=C3C=CC(=O)C(=C3OC4=C2C=CC(=C4Br)O)Br",
|
|
"CN(C)C1=C(Cl)C(=O)C2=C(C=CC=C2)C1=O",
|
|
"CC1=C(C2=C(C=C1)C(=O)C3=CC=CC=C3C2=O)[N+]([O-])=O",
|
|
"CC(=NO)C(C)=NO",
|
|
"C1=CC=C(C=C1)P(C2=CC=CC=C2)C3=CC=CC=C3",
|
|
"CC(C)(C)C1=C(O)C=C(C(=C1)O)C(C)(C)C",
|
|
"CC1=NN(C(=O)C1)C2=CC=CC=C2",
|
|
"NC1=CC=NC2=C1C=CC(=C2)Cl",
|
|
"CCCCCC[CH]1CCCCN1",
|
|
"O=CC1=C2C=CC=CC2=CC3=C1C=CC=C3",
|
|
"BrN1C(=O)CCC1=O",
|
|
"CCCCCCCCCCCCCCCC1=C(N)C=CC(=C1)O",
|
|
"C(COC1=C(C=CC=C1)C2=CC=CC=C2)OC3=CC=CC=C3C4=CC=CC=C4",
|
|
"CCCCSCC",
|
|
"CC(=O)NC1=NC2=C(C=C1)C(=CC=N2)O",
|
|
"CC1=C2C=CC(=NC2=NC(=C1)O)N",
|
|
"CCOC(=O)C1=CN=C2N=C(N)C=CC2=C1O",
|
|
"CC1=CC(=NC=C1)N=CC2=CC=CC=C2",
|
|
"C[N+](C)(C)CC1=CC=CC=C1",
|
|
"C[N+](C)(C)C(=O)C1=CC=CC=C1",
|
|
"ICCC(C1=CC=CC=C1)(C2=CC=CC=C2)C3=CC=CC=C3",
|
|
"CC1=CC(=C(C[N+](C)(C)C)C(=C1)C)C",
|
|
"C[C](O)(CC(O)=O)C1=CC=C(C=C1)[N+]([O-])=O",
|
|
"CC1=CC=C(C=C1)C(=O)C2=CC=C(Cl)C=C2",
|
|
"ON=CC1=CC=C(O)C=C1",
|
|
"CC1=CC(=C(N)C(=C1)C)C",
|
|
"CC1=CC=C(C=C1)C(=O)C2=CC=C(C=C2)[N+]([O-])=O",
|
|
"CC(O)(C1=CC=CC=C1)C2=CC=CC=C2",
|
|
"ON=CC1=CC(=CC=C1)[N+]([O-])=O",
|
|
"OC1=C2C=CC(=CC2=NC=C1[N+]([O-])=O)Cl",
|
|
"CC1=CC=CC2=NC=C(C)C(=C12)Cl",
|
|
"CCC(CC)([CH](OC(N)=O)C1=CC=CC=C1)C2=CC=CC=C2",
|
|
"ON=C(CC1=CC=CC=C1)[CH](C#N)C2=CC=CC=C2",
|
|
"O[CH](CC1=CC=CC=C1)C2=CC=CC=C2",
|
|
"COC1=CC=C(CC2=CC=C(OC)C=C2)C=C1",
|
|
"CN(C)[CH](C1=CC=CC=C1)C2=C(C)C=CC=C2",
|
|
"COC1=CC(=C(N)C(=C1)[N+]([O-])=O)[N+]([O-])=O",
|
|
"NN=C(C1=CC=CC=C1)C2=CC=CC=C2",
|
|
"COC1=CC=C(C=C1)C=NO",
|
|
"C1=CC=C(C=C1)C(N=C(C2=CC=CC=C2)C3=CC=CC=C3)C4=CC=CC=C4",
|
|
"C1=CC=C(C=C1)N=C(C2=CC=CC=C2)C3=CC=CC=C3",
|
|
"CC1=C(C2=CC=CC=C2)C(=C3C=CC=CC3=N1)O",
|
|
"CCC1=[O+][Cu]2([O+]=C(CC)C1)[O+]=C(CC)CC(=[O+]2)CC",
|
|
"OC(=O)[CH](CC1=CC=CC=C1)C2=CC=CC=C2",
|
|
"CCC1=C(N)C=C(C)N=C1",
|
|
]
|
|
|
|
|
|
def _testPkl10(self):
|
|
" testing 5k molecule pickles "
|
|
inLines = open('%s/NCI/first_5K.smi'%(RDConfig.RDDataDir),'r').readlines()
|
|
smis = []
|
|
for line in inLines:
|
|
smis.append(line.split('\t')[0])
|
|
for smi in smis:
|
|
m = Chem.MolFromSmiles(smi)
|
|
newM1 = cPickle.loads(cPickle.dumps(m))
|
|
newSmi1 = Chem.MolToSmiles(newM1)
|
|
newM2 = cPickle.loads(cPickle.dumps(newM1))
|
|
newSmi2 = Chem.MolToSmiles(newM2)
|
|
assert newM1.GetNumAtoms()==m.GetNumAtoms(),'num atoms comparison failed'
|
|
assert newM2.GetNumAtoms()==m.GetNumAtoms(),'num atoms comparison failed'
|
|
assert len(newSmi1)>0,'empty smi1'
|
|
assert len(newSmi2)>0,'empty smi2'
|
|
assert newSmi1==newSmi2,'string compare failed:\n%s\n\t!=\n%s\norig smiles:\n%s'%(newSmi1,newSmi2,smi)
|
|
|
|
|
|
def testPkl1(self):
|
|
" testing single molecule pickle "
|
|
m = Chem.MolFromSmiles('CCOC')
|
|
outS = Chem.MolToSmiles(m)
|
|
m2 = cPickle.loads(cPickle.dumps(m))
|
|
outS2 = Chem.MolToSmiles(m2)
|
|
assert outS==outS2,"bad pickle: %s != %s"%(outS,outS2)
|
|
|
|
def testPkl2(self):
|
|
""" further pickle tests """
|
|
smis = self.bigSmiList
|
|
for smi in smis:
|
|
m = Chem.MolFromSmiles(smi)
|
|
newM1 = cPickle.loads(cPickle.dumps(m))
|
|
newM2 = cPickle.loads(cPickle.dumps(newM1))
|
|
oldSmi = Chem.MolToSmiles(newM1)
|
|
newSmi = Chem.MolToSmiles(newM2)
|
|
assert newM1.GetNumAtoms()==m.GetNumAtoms(),'num atoms comparison failed'
|
|
assert newM2.GetNumAtoms()==m.GetNumAtoms(),'num atoms comparison failed'
|
|
assert oldSmi==newSmi,'string compare failed: %s != %s'%(oldSmi,newSmi)
|
|
|
|
def testPkl(self):
|
|
" testing molecule pickle "
|
|
self.fName = 'chemtest.pkl'
|
|
self.m = Chem.MolFromSmiles('CC(=O)CC')
|
|
outF = open(self.fName,'wb+')
|
|
cPickle.dump(self.m,outF)
|
|
outF.close()
|
|
inF = open(self.fName,'rb')
|
|
m2 = cPickle.load(inF)
|
|
inF.close()
|
|
os.unlink(self.fName)
|
|
oldSmi = Chem.MolToSmiles(self.m)
|
|
newSmi = Chem.MolToSmiles(m2)
|
|
assert oldSmi==newSmi,'string compare failed'
|
|
|
|
|
|
def testRings(self):
|
|
" testing SSSR handling "
|
|
m = Chem.MolFromSmiles('OC1C(O)C2C1C(O)C2O')
|
|
for i in range(m.GetNumAtoms()):
|
|
at = m.GetAtomWithIdx(i)
|
|
n = at.GetAtomicNum()
|
|
if n==8:
|
|
assert not at.IsInRingSize(4),'atom %d improperly in ring'%(i)
|
|
else:
|
|
assert at.IsInRingSize(4),'atom %d not in ring of size 4'%(i)
|
|
if __name__ == '__main__':
|
|
unittest.main()
|
|
|
|
|