def visit_BinOp(self, expr): left = self.visit(expr.left) right = self.visit(expr.right) if is_symbolic(left) or is_symbolic(right): op = self.op_map.get(type(expr.op)) if op is None: raise NotImplementedError( "'%r' operator not supported for symbols" % expr.op) return op(left, right) else: op = ast.BinOp(self._name('left'), expr.op, self._name('right')) return self._eval_ast(op, locals(), tag='visit_BinOp')
def visit_UnaryOp(self, expr): operand = self.visit(expr.operand) if is_symbolic(operand): op = self.op_map.get(type(expr.op)) if op is None: raise NotImplementedError( "'%r' operator not supported for symbols" % expr.op) return op(operand) else: op = ast.UnaryOp(expr.op, self._name('operand')) return self._eval_ast(op, locals(), tag='visit_UnaryOp')