コード例 #1
0
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)
コード例 #2
0
ファイル: separate.py プロジェクト: topherconley/epsilon
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])
コード例 #3
0
ファイル: split.py プロジェクト: topherconley/epsilon
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
コード例 #4
0
ファイル: split.py プロジェクト: JeroenSoeters/epsilon
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
コード例 #5
0
ファイル: conic.py プロジェクト: topherconley/epsilon
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
コード例 #6
0
ファイル: conic.py プロジェクト: mfouda/epsilon
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