示例#1
0
    def visit_Operator(self, node: Operator):
        op = node.op
        left = self.visit(node.left)
        right = self.visit(node.right)

        if type(left) == sympy.Symbol:
            self.backward_table_manager.current_table.can_replace_varables.append(
                left.name)
        elif type(right) == sympy.Symbol:
            self.backward_table_manager.current_table.can_replace_varables.append(
                right.name)

        node.time_complexity = node.left.time_complexity + node.right.time_complexity

        if op == '+':
            return operator.add(left, right)
        elif op == '-':
            return operator.sub(left, right)
        elif op == '*':
            return operator.mul(left, right)
        elif op == '/':
            return operator.truediv(left, right)
        elif op == '**':
            return left**right
        elif op == '<<':
            return left * 2**right
        elif op == '>>':
            return left / (2**right)
        elif op == '//':
            return left // right
        elif op == '>>':
            return left / (2**right)
        elif op == '%':
            return left % right
        elif op == '>>':
            return left / (2**right)
        elif op == '|':
            return left | right
        elif op == '&':
            return left & right
        elif op == '>>':
            return left / (2**right)
        elif op == '@':
            return left @ right
示例#2
0
    def visit_Operator(self, node: Operator):
        op = node.op
        left = self.visit(node.left)
        right = self.visit(node.right)

        node.time_complexity = node.left.time_complexity + node.right.time_complexity

        if op == '+':
            return operator.add(left, right)
        elif op == '-':
            return operator.sub(left, right)
        elif op == '*':
            return operator.mul(left, right)
        elif op == '/':
            return operator.truediv(left, right)
        elif op == '<<':
            return left * 2**right
        elif op == '>>':
            return left / (2**right)