def transform_quad_over_lin(expr): assert len(expr.arg) == 2 x, y = expr.arg assert dim(y) == 1 t = epi_var(expr, "qol", size=(1,1)) return t, [ expression.soc_constraint( expression.add(y, t), expression.vstack( expression.add(y, expression.negate(t)), expression.reshape( expression.multiply(expression.scalar_constant(2), x), dim(x), 1))), expression.leq_constraint(expression.scalar_constant(0), y)]
def convert_constraint(constraint): if isinstance(constraint, EqConstraint): return expression.eq_constraint(convert_expression(constraint.args[0]), convert_expression(constraint.args[1])) elif isinstance(constraint, PSDConstraint): return expression.psd_constraint( convert_expression(constraint.args[0]), convert_expression(constraint.args[1])) elif isinstance(constraint, LeqConstraint): return expression.leq_constraint( convert_expression(constraint.args[0]), convert_expression(constraint.args[1])) elif isinstance(constraint, SOC_Elemwise): return expression.soc_elemwise_constraint( convert_expression(constraint.t), *[convert_expression(x) for x in constraint.x_elems]) elif isinstance(constraint, SOC): return expression.soc_contraint( convert_expression(constraint.t), expression.vstack( *[convert_expression(x) for x in constraint.x_elems])) raise RuntimeError("Unknown constraint: %s" % type(constraint))
def convert_constraint(constraint): if isinstance(constraint, EqConstraint): return expression.eq_constraint( convert_expression(constraint.args[0]), convert_expression(constraint.args[1])) elif isinstance(constraint, PSDConstraint): return expression.psd_constraint( convert_expression(constraint.args[0]), convert_expression(constraint.args[1])) elif isinstance(constraint, LeqConstraint): return expression.leq_constraint( convert_expression(constraint.args[0]), convert_expression(constraint.args[1])) elif isinstance(constraint, SOC_Elemwise): return expression.soc_elemwise_constraint( convert_expression(constraint.t), *[convert_expression(x) for x in constraint.x_elems]) elif isinstance(constraint, SOC): return expression.soc_contraint( convert_expression(constraint.t), expression.vstack( *[convert_expression(x) for x in constraint.x_elems])) raise RuntimeError("Unknown constraint: %s" % type(constraint))