def replace_var(expr, old_var_id, new_var): if (expr.expression_type == Expression.VARIABLE and expr.variable.variable_id == old_var_id): return new_var return expression.from_proto( expr.proto, [replace_var(arg, old_var_id, new_var) for arg in expr.arg], expr.data)
def replace_var(expr, old_var_id, new_var): if (expr.expression_type == Expression.VARIABLE and expr.variable.variable_id == old_var_id): return new_var return expression.from_proto( expr.proto, [replace_var(arg, old_var_id, new_var) for arg in expr.arg])
def transform_expr(expr, constrs): expr = expression.from_proto( expr.proto, [transform_expr(arg, constrs) for arg in expr.arg]) f_name = "transform_" + Expression.Type.Name(expr.expression_type).lower() if f_name in globals(): return globals()[f_name](expr, constrs) return expr
def transform_linear_map(expr, constrs): if expr.arg[0].expression_type == Expression.LINEAR_MAP: # TODO(mwytock): need more complete logic here, i.e. need to do type # inference across the entire chain using something like affine_props A = affine.LinearMapType(expr.linear_map) B = affine.LinearMapType(expr.arg[0].linear_map) if ((A.kronecker_product or B.kronecker_product) and not (A*B).kronecker_product): t, epi_constrs = epi_transform(expr.arg[0], "split_linear_map") constrs += [linear.transform_expr(x) for x in epi_constrs] return expression.from_proto(expr.proto, [t], expr.data) return expr
def transform_expr(expr): log_debug_expr("conic transform_expr", expr) constrs = [] transformed_args = [] for arg in expr.arg: obj_arg, constr = transform_expr(arg) transformed_args.append(obj_arg) constrs += constr # Create the same expression but now with linear arguments. obj_linear = expression.from_proto(expr.proto, transformed_args) if not obj_linear.dcp_props.affine: f_name = ("transform_" + Expression.Type.Name(obj_linear.expression_type).lower()) if f_name not in globals(): raise TransformError("No conic transform", expr) obj_linear, constr = globals()[f_name](obj_linear) constrs += constr return obj_linear, constrs
def transform_expr(expr): log_debug_expr("conic transform_expr", expr) constrs = [] transformed_args = [] for arg in expr.arg: obj_arg, constr = transform_expr(arg) transformed_args.append(obj_arg) constrs += constr # Create the same expression but now with linear arguments. obj_linear = expression.from_proto(expr.proto, transformed_args, expr.data) if not obj_linear.dcp_props.affine: f_name = ("transform_" + Expression.Type.Name(obj_linear.expression_type).lower()) if f_name not in globals(): raise TransformError("No conic transform", expr) obj_linear, constr = globals()[f_name](obj_linear) constrs += constr return obj_linear, constrs