def test0SubstructLibrary(self): for fpholderCls in [None, rdSubstructLibrary.PatternHolder]: for holder in [ rdSubstructLibrary.MolHolder(), rdSubstructLibrary.CachedMolHolder(), rdSubstructLibrary.CachedSmilesMolHolder() ]: if fpholderCls: fpholder = fpholderCls() else: fpholder = None slib = rdSubstructLibrary.SubstructLibrary(holder, fpholder) for i in range(100): m = Chem.MolFromSmiles("c1ccccc1") self.assertEqual(slib.AddMol(m), i) res = slib.GetMatches(m) t2 = time.time() self.assertTrue(len(res) == 100) res = slib.GetMatches(m) self.assertEqual(len(res), 100) self.assertTrue(set(res) == set(list(range(100)))) res = slib.GetMatches(m, maxResults=100) self.assertEqual(len(res), 100) self.assertEqual( len(slib.GetMatches(m, startIdx=0, endIdx=100)), 100) self.assertTrue(slib.HasMatch(m)) self.assertEqual(slib.CountMatches(m), 100)
def test0SubstructLibrary(self): for fpholderCls in [None, rdSubstructLibrary.PatternHolder]: for holder in [rdSubstructLibrary.MolHolder(), rdSubstructLibrary.CachedMolHolder(), rdSubstructLibrary.CachedSmilesMolHolder()]: if fpholderCls: fpholder = fpholderCls() else: fpholder = None slib_ = rdSubstructLibrary.SubstructLibrary(holder, fpholder) for i in range(100): m = Chem.MolFromSmiles("c1ccccc1") self.assertEqual(slib_.AddMol(m), i) libs = [slib_] if rdSubstructLibrary.SubstructLibraryCanSerialize(): serialized1 = pickle.loads(pickle.dumps(slib_)) serialized2 = rdSubstructLibrary.SubstructLibrary(slib_.Serialize()) libs.append(serialized1) libs.append(serialized2) for slib in libs: res = slib.GetMatches(m) t2 = time.time() self.assertTrue(len(res) == 100) res = slib.GetMatches(m) self.assertEqual(len(res), 100) self.assertTrue(set(res) == set(list(range(100)))) res = slib.GetMatches(m, maxResults=100); self.assertEqual(len(res), 100) self.assertEqual(len(slib.GetMatches(m, startIdx=0, endIdx=100)), 100) self.assertTrue(slib.HasMatch(m)) self.assertEqual(slib.CountMatches(m), 100)
def test_addpatterns(self): pdb_ligands = [ "CCS(=O)(=O)c1ccc(OC)c(Nc2ncc(-c3cccc(-c4ccccn4)c3)o2)c1", "COc1ccc(S(=O)(=O)NCC2CC2)cc1Nc1ncc(-c2cccc(-c3cccnc3)c2)o1", "COc1ccc(-c2oc3ncnc(N)c3c2-c2ccc(NC(=O)Nc3cc(C(F)(F)F)ccc3F)cc2)cc1", "COC(=O)Nc1nc2ccc(Oc3ccc(NC(=O)Nc4cc(C(F)(F)F)ccc4F)cc3)cc2[nH]1", "COc1cc(Nc2ncnc(-c3cccnc3Nc3ccccc3)n2)cc(OC)c1OC", "O=C(Nc1ccc(Oc2ccccc2)cc1)c1cccnc1NCc1ccncc1", "O=C(Nc1ccc(Oc2ccccc2)cc1)c1cccnc1NCc1ccncc1", "CNC(=O)c1cc(Oc2ccc3[nH]c(Nc4ccc(Cl)c(C(F)(F)F)c4)nc3c2)ccn1", "CNC(=O)c1cc(Oc2ccc3oc(Nc4ccc(Cl)c(OCC5CCC[NH+]5C)c4)nc3c2)ccn1", "CNC(=O)c1cc(Oc2ccc3oc(Nc4ccc(Cl)c(OCC5CCC[NH+]5C)c4)nc3c2)ccn1", "COc1cc2nccc(Oc3ccc4c(c3)OCCN4C(=O)Nc3ccc(Cl)cc3)c2cc1OC", "CNC(=O)c1c(C)oc2cc(Oc3cc[nH+]c4cc(OCCN5CCOCC5)ccc34)ccc12", "COc1cc2[nH+]ccc(Oc3ccc4c(C(=O)Nc5ccc(Cl)cc5)cccc4c3)c2cc1OC", "COc1cc2[nH+]ccc(Oc3ccc4c(C(=O)Nc5ccc(Cl)cc5)cccc4c3)c2cc1OC", "COc1cc2[nH+]ccc(Oc3ccc4c(C(=O)NC5CC5)cccc4c3)c2cc1OC", "COc1cc2[nH+]ccc(Oc3ccc4c(C(=O)NC5CC5)cccc4c3)c2cc1OC", "Cc1ccc(C(=O)Nc2cc(CCC[NH+](C)C)cc(C(F)(F)F)c2)cc1Nc1ncccc1-c1ccncn1", "COc1cc(Nc2nccc(Nc3ccc4c(C)n[nH]c4c3)n2)cc(OC)c1OC", "COc1cc(Nc2nccc(N(C)c3ccc4c(C)n[nH]c4c3)n2)cc(OC)c1OC", "Cc1ccn(-c2ccc3c(c2)NCC3(C)C)c(=O)c1-c1ccc2nc(N)ncc2c1", "Cc1ccn(-c2ccc3c(c2)NCC3(C)C)c(=O)c1-c1ccc2nc(N)ncc2c1", "Cc1ccc(C(=O)NCCC2CCCC2)cc1C(=O)Nc1ccc(N)nc1", "Cc1ccc(C(=O)NCCC2CCCC2)cc1C(=O)Nc1ccc(N)nc1", "Cc1ccn(-c2cccc(C(F)(F)F)c2)c(=O)c1-c1ccc2nc(N)ncc2c1", "Cc1ccn(-c2cccc(C(F)(F)F)c2)c(=O)c1-c1ccc2nc(N)ncc2c1", "O=C(Nc1cncnc1)c1c(Cl)ccc2c(Nc3cccc(C(F)(F)F)c3)noc12", "O=C(Nc1cncnc1)c1c(Cl)ccc2c(Nc3cccc(C(F)(F)F)c3)noc12", "CC1(C)CNc2cc(NC(=O)c3cccnc3NCc3ccncc3)ccc21", "CC1(C)CNc2cc(NC(=O)c3cccnc3NCc3ccncc3)ccc21" ] for patterns in [ rdSubstructLibrary.PatternHolder(), rdSubstructLibrary.TautomerPatternHolder() ]: mols = [Chem.MolFromSmiles(smi) for smi in pdb_ligands] holder = rdSubstructLibrary.CachedMolHolder() slib_with_patterns = rdSubstructLibrary.SubstructLibrary( holder, patterns) for mol in mols: slib_with_patterns.AddMol(mol) for nthreads in [1, 2, 0]: slib_without_patterns = rdSubstructLibrary.SubstructLibrary( holder, None) rdSubstructLibrary.AddPatterns(slib_without_patterns, nthreads) # check for seg fault # were the fingerprints really created slib_without_patterns.GetFpHolder().GetFingerprint(0) for mol in mols: l1 = slib_with_patterns.CountMatches(mol) l2 = slib_without_patterns.CountMatches(mol) self.assertTrue(l1) self.assertEqual(l1, l2)
def testBinaryCache(self): mols = makeStereoExamples() * 10 holder = rdSubstructLibrary.CachedMolHolder() slib_ = rdSubstructLibrary.SubstructLibrary(holder, None) for mol in mols: holder.AddBinary(mol.ToBinary()) libs = [slib_] if rdSubstructLibrary.SubstructLibraryCanSerialize(): serialized1 = pickle.loads(pickle.dumps(slib_)) serialized2 = rdSubstructLibrary.SubstructLibrary( slib_.Serialize()) libs.append(serialized1) libs.append(serialized2) for slib in libs: core = Chem.MolFromSmarts("C-1-C-C-O-C(-*)(-*)1") res = slib.GetMatches(core) self.assertEqual( len(res), len([ x for x in mols if x.HasSubstructMatch(core, useChirality=True) ])) core = Chem.MolFromSmarts("C-1-C-C-O-C(-[O])(-[N])1") core.SetProp("core", "core") res = slib.GetMatches(core, useChirality=False) self.assertEqual( len(res), len([ x for x in mols if x.HasSubstructMatch(core, useChirality=False) ])) core = Chem.MolFromSmarts("C-1-C-C-O-[C@@](-[O])(-[N])1") res = slib.GetMatches(core, useChirality=False) self.assertEqual( len(res), len([ x for x in mols if x.HasSubstructMatch(core, useChirality=False) ])) core = Chem.MolFromSmarts("C-1-C-C-O-[C@@](-[O])(-[N])1") res = slib.GetMatches(core) self.assertEqual( len(res), len([ x for x in mols if x.HasSubstructMatch(core, useChirality=True) ]))
def testBinaryCache(self): mols = makeStereoExamples() * 10 holder = rdSubstructLibrary.CachedMolHolder() slib = rdSubstructLibrary.SubstructLibrary(holder, None) for mol in mols: holder.AddBinary(mol.ToBinary()) core = Chem.MolFromSmarts("C-1-C-C-O-C(-*)(-*)1") res = slib.GetMatches(core) self.assertEqual( len(res), len([ x for x in mols if x.HasSubstructMatch(core, useChirality=True) ])) core = Chem.MolFromSmarts("C-1-C-C-O-C(-[O])(-[N])1") core.SetProp("core", "core") res = slib.GetMatches(core, useChirality=False) self.assertEqual( len(res), len([ x for x in mols if x.HasSubstructMatch(core, useChirality=False) ])) core = Chem.MolFromSmarts("C-1-C-C-O-[C@@](-[O])(-[N])1") res = slib.GetMatches(core, useChirality=False) self.assertEqual( len(res), len([ x for x in mols if x.HasSubstructMatch(core, useChirality=False) ])) core = Chem.MolFromSmarts("C-1-C-C-O-[C@@](-[O])(-[N])1") res = slib.GetMatches(core) self.assertEqual( len(res), len([ x for x in mols if x.HasSubstructMatch(core, useChirality=True) ]))
def test1SubstructLibrary(self): for fpholderCls in [None, rdSubstructLibrary.PatternHolder]: for holder in [ rdSubstructLibrary.MolHolder(), rdSubstructLibrary.CachedMolHolder(), rdSubstructLibrary.CachedSmilesMolHolder() ]: if fpholderCls: fpholder = fpholderCls() else: fpholder = None slib = rdSubstructLibrary.SubstructLibrary(holder, fpholder) mols = [] for i in range(100): m = Chem.MolFromSmiles("c1ccccc1") self.assertEqual(slib.AddMol(m), i * 2) mols.append(m) m2 = Chem.MolFromSmiles("CCCC") self.assertEqual(slib.AddMol(m2), i * 2 + 1) mols.append(m2) res = slib.GetMatches(m) self.assertEqual(len(res), 100) self.assertEqual(set(res), set(list(range(0, 200, 2)))) res = slib.GetMatches(m2) self.assertEqual(len(res), 100) self.assertTrue(set(res) == set(list(range(1, 200, 2)))) res = slib.GetMatches(m) self.assertEqual(len(res), 100) res = slib.GetMatches(m, maxResults=100) self.assertEqual(len(res), 100) self.assertEqual( len(slib.GetMatches(m, startIdx=0, endIdx=50 * 2)), 50) self.assertEqual( len(slib.GetMatches(m2, startIdx=1, endIdx=50 * 2 + 1)), 50) self.assertTrue(slib.HasMatch(m)) self.assertTrue(slib.HasMatch(m2)) self.assertEqual(slib.CountMatches(m), 100) self.assertEqual(slib.CountMatches(m2), 100)
def test1SubstructLibrary(self): for keyholderCls in [None, rdSubstructLibrary.KeyFromPropHolder]: for fpholderCls in [None, rdSubstructLibrary.PatternHolder]: for holder in [ rdSubstructLibrary.MolHolder(), rdSubstructLibrary.CachedMolHolder(), rdSubstructLibrary.CachedSmilesMolHolder() ]: if fpholderCls: fpholder = fpholderCls() else: fpholder = None if keyholderCls: keyholder = keyholderCls() self.assertEqual(keyholder.GetPropName(), "_Name") else: keyholder = None slib_ = rdSubstructLibrary.SubstructLibrary( holder, fpholder, keyholder) mols = [] for i in range(100): m = Chem.MolFromSmiles("c1ccccc1") m.SetProp("_Name", str(i * 2)) self.assertEqual(slib_.AddMol(m), i * 2) mols.append(m) m2 = Chem.MolFromSmiles("CCCC") m2.SetProp("_Name", str(i * 2 + 1)) self.assertEqual(slib_.AddMol(m2), i * 2 + 1) mols.append(m2) libs = [slib_] if rdSubstructLibrary.SubstructLibraryCanSerialize(): serialized1 = pickle.loads(pickle.dumps(slib_)) serialized2 = rdSubstructLibrary.SubstructLibrary( slib_.Serialize()) libs.append(serialized1) libs.append(serialized2) for slib in libs: res = slib.GetMatches(m) self.assertEqual(len(res), 100) self.assertEqual(set(res), set(list(range(0, 200, 2)))) if keyholderCls: self.assertEqual( [str(idx) for idx in res], [str(idx) for idx in range(0, 200, 2)]) res = slib.GetMatches(m2) self.assertEqual(len(res), 100) self.assertTrue( set(res) == set(list(range(1, 200, 2)))) if keyholderCls: self.assertEqual( [str(idx) for idx in res], [str(idx) for idx in range(1, 200, 2)]) res = slib.GetMatches(m) self.assertEqual(len(res), 100) res = slib.GetMatches(m, maxResults=100) self.assertEqual(len(res), 100) self.assertEqual( len(slib.GetMatches(m, startIdx=0, endIdx=50 * 2)), 50) self.assertEqual( len( slib.GetMatches(m2, startIdx=1, endIdx=50 * 2 + 1)), 50) self.assertTrue(slib.HasMatch(m)) self.assertTrue(slib.HasMatch(m2)) self.assertEqual(slib.CountMatches(m), 100) self.assertEqual(slib.CountMatches(m2), 100)