def visit_Compare(self, node): self.generic_visit(node) all_compare = zip(node.ops, node.comparators) for op, comp in all_compare: self.combine( node, comp, unary_op=lambda x: ExpressionType(operator_to_lambda[type(op)], [self.result[node.left], x]))
def visit_AugAssign(self, node): self.visit(node.value) if isinstance(node.target, ast.Subscript): if self.visit_AssignedSubscript(node.target): for alias in self.strict_aliases[node.target.value].aliases: fake = ast.Subscript(alias, node.target.value, ast.Store()) # We don't check more aliasing as it is a fake node. self.combine( fake, node.value, lambda x, y: x + ExpressionType( operator_to_lambda[type(node.op)], [x, y]), register=True) # We don't support aliasing on subscript self.combine(node.target, node.value, lambda x, y: x + ExpressionType( operator_to_lambda[type(node.op)], [x, y]), register=True, aliasing_type=isinstance(node.target, ast.Name))
def f(x): return ExpressionType("{0}[{1}]".format, [x, self.result[node.slice]])
def f(t): def et(a, *b): return "{0}({1})".format(a, ", ".join(b)) dim_types = [self.result[d] for d in node.slice.dims] return ExpressionType(et, [t] + dim_types)
def unary_op(x, op=None): return ExpressionType(operator_to_lambda[type(op)], [self.result[node.left], x])
def f(x): return ExpressionType(operator_to_lambda[type(node.op)], [x])
def F(x, y): return ExpressionType(operator_to_lambda[type(node.op)], [x, y])
def f(x): return ExpressionType(lambda a, b: "{0}[{1}]".format(a, b), [x, self.result[node.slice]])