def evaluate(self, env, engine, parser, term_type, eval_in_python):
if engine == '<STR_LIT>':<EOL><INDENT>res = self(env)<EOL><DEDENT>else:<EOL><INDENT>left = self.lhs.evaluate(env, engine=engine, parser=parser,<EOL>term_type=term_type,<EOL>eval_in_python=eval_in_python)<EOL>right = self.rhs.evaluate(env, engine=engine, parser=parser,<EOL>term_type=term_type,<EOL>eval_in_python=eval_in_python)<EOL>if self.op in eval_in_python:<EOL><INDENT>res = self.func(left.value, right.value)<EOL><DEDENT>else:<EOL><INDENT>from pandas.core.computation.eval import eval<EOL>res = eval(self, local_dict=env, engine=engine,<EOL>parser=parser)<EOL><DEDENT><DEDENT>name = env.add_tmp(res)<EOL>return term_type(name, env=env)<EOL>
Evaluate a binary operation *before* being passed to the engine.

        Parameters
        ----------
        env : Scope
        engine : str
        parser : str
        term_type : type
        eval_in_python : list

        Returns
        -------
        term_type
            The "pre-evaluated" expression as an instance of ``term_type``