def visit_binary(self, clause):
        eval_left, eval_right = list(map(self.process,
                                         [clause.left, clause.right]))
        operator = clause.operator
        if operator is operators.is_:
            def evaluate(obj):
                return eval_left(obj) == eval_right(obj)
        elif operator is operators.isnot:
            def evaluate(obj):
                return eval_left(obj) != eval_right(obj)
        elif operator in _straight_ops:
            def evaluate(obj):
                left_val = eval_left(obj)
                right_val = eval_right(obj)
                if left_val is None or right_val is None:
                    return None
                return operator(eval_left(obj), eval_right(obj))
        else:
            raise UnevaluatableError(
                "Cannot evaluate %s with operator %s" %
                (type(clause).__name__, clause.operator))
        return evaluate
dataset/ETHPy150Open goFrendiAsgard/kokoropy/kokoropy/packages/sqlalchemy/orm/evaluator.py/EvaluatorCompiler.visit_binary/original