예제 #1
0
    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)
예제 #2
0
  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)
예제 #3
0
    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)
예제 #4
0
    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)
                ]))
예제 #5
0
    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)
            ]))
예제 #6
0
    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)
예제 #7
0
    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)