def add_variable_copy(f, var, graph): m, n = dims(var.expr) old_var_id = var.expr.variable.variable_id new_var_id = "separate:%s:%s" % (old_var_id, f.node_id) new_var = graph.add_node( expression.variable(m, n, new_var_id), VARIABLE, new_var_id) f.expr = replace_var(f.expr, old_var_id, new_var.expr) graph.remove_edge(f, var) graph.add_edge(f, new_var) eq_constr = graph.add_node(linear.transform_expr( expression.eq_constraint(new_var.expr, var.expr)), CONSTRAINT) graph.add_edge(eq_constr, new_var) graph.add_edge(eq_constr, var)
def add_variable_copy(f, var, graph): m, n = dims(var.expr) old_var_id = var.expr.variable.variable_id new_var_id = "separate:%s:%s" % (old_var_id, f.node_id) new_var = graph.add_node(expression.variable(m, n, new_var_id), VARIABLE, new_var_id) f.expr = replace_var(f.expr, old_var_id, new_var.expr) graph.remove_edge(f, var) graph.add_edge(f, new_var) eq_constr = graph.add_node( linear.transform_expr(expression.eq_constraint(new_var.expr, var.expr)), CONSTRAINT) graph.add_edge(eq_constr, new_var) graph.add_edge(eq_constr, var)
def epi_var(expr, name, size=None): if size is None: size = expr.size.dim name += ":%x" % random.getrandbits(32) return expression.variable(size[0], size[1], name)
def convert_variable(expr): m, n = expr.size return expression.variable(m, n, variable_id(expr))