def _filter_smarts(self, pipe, smarts, soft_fail = 0):
        for mol in pipe:
            if type(smarts) is list:
                compiled_smarts = [toolkit.Smarts(s) for s in smarts]
                fail = 0
                for s in compiled_smarts:
                    if len(s.findall(mol)) > 0:
                        fail += 1
                    if fail is not soft_fail:
                        break
                if fail <= soft_fail:
                    yield mol
            else:
                compiled_smarts = toolkit.Smarts(smarts)
                if len(compiled_smarts.findall(mol)) == 0:
                    yield mol
dataset/ETHPy150Open oddt/oddt/oddt/virtualscreening.py/virtualscreening._filter_smarts/operator `>` -> `is not`