def test4OnBitsInCommon(self): sz = 100 bv1 = DataStructs.ExplicitBitVect(sz) bv2 = DataStructs.ExplicitBitVect(sz) for i in range(0, sz, 2): bv1.SetBit(i) if i < 3 * sz / 4: bv2.SetBit(i) self.failUnless(DataStructs.AllProbeBitsMatch(bv1, bv1.ToBinary())) self.failUnless(DataStructs.AllProbeBitsMatch(bv2, bv1.ToBinary())) self.failIf(DataStructs.AllProbeBitsMatch(bv1, bv2.ToBinary())) self.failUnless(DataStructs.AllProbeBitsMatch(bv2, bv2.ToBinary()))
def _molge(x, y): """Allows for substructure check using the >= operator (X has substructure Y -> X >= Y) by monkey-patching the __ge__ function This has the effect that the pandas/numpy rowfilter can be used for substructure filtering (filtered = dframe[dframe['RDKitColumn'] >= SubstructureMolecule]) """ if x is None or y is None: return False if hasattr(x, '_substructfp'): if not hasattr(y, '_substructfp'): y._substructfp = _fingerprinter(y, True) if not DataStructs.AllProbeBitsMatch(y._substructfp, x._substructfp): return False return x.HasSubstructMatch(y)
def test_basic(self): mol = Chem.MolFromSmiles("O=C1CCCCC1") tautomer_query = rdTautomerQuery.TautomerQuery(mol) self.assertEqual(2, len(tautomer_query.GetTautomers())) modified_bonds = tautomer_query.GetModifiedBonds() self.assertEqual(3, len(modified_bonds)) modified_atoms = tautomer_query.GetModifiedAtoms() self.assertEqual(3, len(modified_atoms)) target = Chem.MolFromSmiles("OC1=CCCC(CC)C1") self.assertTrue( target.HasSubstructMatch(tautomer_query.GetTemplateMolecule())) match = tautomer_query.IsSubstructOf(target) self.assertTrue(match) self.assertTrue( target.HasSubstructMatch(tautomer_query.GetTemplateMolecule())) #self.assertTrue(target.HasSubstructMatch(tautomer_query.GetTautomers()[1])) match = tautomer_query.GetSubstructMatch(target) self.assertEqual(7, len(match)) matches = tautomer_query.GetSubstructMatches(target) self.assertEqual(1, len(matches)) tautomer_matches = tautomer_query.GetSubstructMatchesWithTautomers( target) self.assertEqual(1, len(tautomer_matches)) self.assertEqual(len(tautomer_matches[0][0]), 7) matching_tautomer = tautomer_matches[0][1] self.assertTrue(target.HasSubstructMatch(matching_tautomer)) tautomer_fingerprint = tautomer_query.PatternFingerprintTemplate() target_fingerprint = rdTautomerQuery.PatternFingerprintTautomerTarget( target) matching_fingerprints = DataStructs.AllProbeBitsMatch( tautomer_fingerprint, target_fingerprint) self.assertTrue(matching_fingerprints) file = os.environ[ 'RDBASE'] + '/Code/GraphMol/MolStandardize/test_data/tautomerTransforms.in' tautomer_query2 = rdTautomerQuery.TautomerQuery(mol, file) self.assertEqual(2, len(tautomer_query.GetTautomers()))
logger.info(f'Results{len(ts)}: {t2-t1 : .2f} seconds') for nm, qs, qfps in [('frags', frags, fragsfps), ('leads', leads, leadsfps), ('pieces', pieces, piecesfps)]: logger.info(f'testing {nm} queries') t1 = time.time() nPossible = 0 nTested = 0 nFound = 0 nErrors = 0 for i, fragfp in enumerate(qfps): for j, mfp in enumerate(mfps): nPossible += 1 if args.validateResults: matched = mols[j].HasSubstructMatch(qs[i]) fpMatch = DataStructs.AllProbeBitsMatch(fragfp, mfp) if fpMatch: nTested += 1 if matched: nFound += 1 if not fpMatch: nErrors += 1 logger.error(f"ERROR: mol {j} query {i}") else: if DataStructs.AllProbeBitsMatch(fragfp, mfp): nTested += 1 if mols[j].HasSubstructMatch(qs[i]): nFound += 1 t2 = time.time() ts.append(t2 - t1) logger.info(