def canonicalize_tree(self, expr, real2imag, leaf_map): # TODO don't copy affine expressions? if type(expr) == cvxtypes.partial_problem(): raise NotImplementedError() else: real_args = [] imag_args = [] for arg in expr.args: real_arg, imag_arg = self.canonicalize_tree( arg, real2imag, leaf_map) real_args.append(real_arg) imag_args.append(imag_arg) real_out, imag_out = self.canonicalize_expr( expr, real_args, imag_args, real2imag, leaf_map) return real_out, imag_out
def canonicalize_tree(self, expr): # TODO don't copy affine expressions? if type(expr) == cvxtypes.partial_problem(): canon_expr, constrs = self.canonicalize_tree( expr.args[0].objective.expr) for constr in expr.args[0].constraints: canon_constr, aux_constr = self.canonicalize_tree(constr) constrs += [canon_constr] + aux_constr else: canon_args = [] constrs = [] for arg in expr.args: canon_arg, c = self.canonicalize_tree(arg) canon_args += [canon_arg] constrs += c canon_expr, c = self.canonicalize_expr(expr, canon_args) constrs += c return canon_expr, constrs