def _filter(self, pipe, expression, soft_fail = 0):
        for mol in pipe:
            if type(expression) is list:
                fail = 0
                for e in expression:
                    if not eval(e):
                        fail += 1
                    if fail > soft_fail:
                        break
                if fail == soft_fail:
                    yield mol
            else:
                if eval(expression):
                    yield mol
dataset/ETHPy150Open oddt/oddt/oddt/virtualscreening.py/virtualscreening._filter/operator `<=` -> `==`