예제 #1
0
    def apply(self, problem):
        inverse_data = InverseData(problem)
        real2imag = {
            var.id: lu.get_id()
            for var in problem.variables() if var.is_complex()
        }
        constr_dict = {
            cons.id: lu.get_id()
            for cons in problem.constraints if cons.is_complex()
        }
        real2imag.update(constr_dict)
        inverse_data.real2imag = real2imag

        leaf_map = {}
        real_obj, imag_obj = self.canonicalize_tree(problem.objective,
                                                    inverse_data.real2imag,
                                                    leaf_map)
        assert imag_obj is None

        constrs = []
        for constraint in problem.constraints:
            # real2imag maps variable id to a potential new variable
            # created for the imaginary part.
            real_constrs, imag_constrs = self.canonicalize_tree(
                constraint, inverse_data.real2imag, leaf_map)
            if real_constrs is not None:
                constrs.extend(real_constrs)
            if imag_constrs is not None:
                constrs.extend(imag_constrs)

        new_problem = problems.problem.Problem(real_obj, constrs)
        return new_problem, inverse_data
예제 #2
0
 def __init__(self, problem):
     varis = problem.variables()
     self.id_map, self.var_offsets, self.x_length, self.var_shapes = (
                                             self.get_var_offsets(varis))
     self.id2var = {var.id: var for var in varis}
     self.real2imag = {var.id: lu.get_id() for var in varis if var.is_complex()}
     constr_dict = {cons.id: lu.get_id() for cons in problem.constraints if cons.is_complex()}
     self.real2imag.update(constr_dict)
     self.id2cons = {cons.id: cons for cons in problem.constraints}
     self.cons_id_map = dict()
예제 #3
0
 def __init__(self, rows=1, cols=1, name=None):
     self.id = lu.get_id()
     if name is None:
         self._name = "%s%d" % (s.VAR_PREFIX, self.id)
     else:
         self._name = name
     self.primal_value = None
     self._dcp_attr = u.DCPAttr(u.Sign.UNKNOWN, u.Curvature.AFFINE, u.Shape(rows, cols))
예제 #4
0
 def __init__(self, shape=(), name=None, value=None, **kwargs):
     self.id = lu.get_id()
     if name is None:
         self._name = "%s%d" % (s.PARAM_PREFIX, self.id)
     else:
         self._name = name
     # Initialize with value if provided.
     self._value = None
     super(Parameter, self).__init__(shape, value, **kwargs)
예제 #5
0
 def __init__(self, rows=1, cols=1, name=None):
     self.id = lu.get_id()
     if name is None:
         self._name = "%s%d" % (s.VAR_PREFIX, self.id)
     else:
         self._name = name
     self.primal_value = None
     self._dcp_attr = u.DCPAttr(u.Sign.UNKNOWN, u.Curvature.AFFINE,
                                u.Shape(rows, cols))
예제 #6
0
 def __init__(self, rows=1, cols=1, name=None):
     self._rows = rows
     self._cols = cols
     self.id = lu.get_id()
     if name is None:
         self._name = "%s%d" % (s.VAR_PREFIX, self.id)
     else:
         self._name = name
     self.primal_value = None
     self.init_dcp_attr()
예제 #7
0
 def __init__(self, rows=1, cols=1, name=None, sign="unknown"):
     self.id = lu.get_id()
     self._rows = rows
     self._cols = cols
     self.sign_str = sign
     if name is None:
         self._name = "%s%d" % (s.PARAM_PREFIX, self.id)
     else:
         self._name = name
     self.init_dcp_attr()
예제 #8
0
 def __init__(self, rows=1, cols=1, name=None, sign="unknown"):
     self.id = lu.get_id()
     self._rows = rows
     self._cols = cols
     self.sign_str = sign
     if name is None:
         self._name = "%s%d" % (s.PARAM_PREFIX, self.id)
     else:
         self._name = name
     self.init_dcp_attr()
예제 #9
0
 def __init__(self, rows=1, cols=1, name=None):
     self._rows = rows
     self._cols = cols
     self.id = lu.get_id()
     if name is None:
         self._name = "%s%d" % (s.VAR_PREFIX, self.id)
     else:
         self._name = name
     self.primal_value = None
     super(Variable, self).__init__()
예제 #10
0
 def __init__(self, args, constr_id=None):
     # TODO cast constants.
     # self.args = [cvxtypes.expression().cast_to_const(arg) for arg in args]
     self.args = args
     if constr_id is None:
         self.constr_id = lu.get_id()
     else:
         self.constr_id = constr_id
     self.dual_variables = [cvxtypes.variable()(arg.shape) for arg in args]
     super(Constraint, self).__init__()
예제 #11
0
 def __init__(self, rows=1, cols=1, name=None):
     self._rows = rows
     self._cols = cols
     self.id = lu.get_id()
     if name is None:
         self._name_given = False
         self._name = "%s%d" % (s.VAR_PREFIX, self.id)
     else:
         self._name_given = True
         self._name = name
     self.primal_value = None
     super(Variable, self).__init__()
예제 #12
0
    def __init__(self, shape=(), name=None, var_id=None, **kwargs):
        if var_id is None:
            self.id = lu.get_id()
        else:
            self.id = var_id
        if name is None:
            self._name = "%s%d" % (s.VAR_PREFIX, self.id)
        else:
            self._name = name

        self._value = None
        super(Variable, self).__init__(shape, **kwargs)
예제 #13
0
파일: atom.py 프로젝트: zxuen/cvxpy
 def __init__(self, *args) -> None:
     self.id = lu.get_id()
     # Throws error if args is empty.
     if len(args) == 0:
         raise TypeError("No arguments given to %s." %
                         self.__class__.__name__)
     # Convert raw values to Constants.
     self.args = [Atom.cast_to_const(arg) for arg in args]
     self.validate_arguments()
     self._shape = self.shape_from_args()
     if len(self._shape) > 2:
         raise ValueError("Atoms must be at most 2D.")
예제 #14
0
 def __init__(self, rows=1, cols=1, name=None, sign="unknown", value=None):
     self.id = lu.get_id()
     self._rows = rows
     self._cols = cols
     self.sign_str = sign
     if name is None:
         self._name = "%s%d" % (s.PARAM_PREFIX, self.id)
     else:
         self._name = name
     self.init_dcp_attr()
     # Initialize with value if provided.
     if value is not None:
         self.value = value
예제 #15
0
 def __init__(self, rows=1, cols=1, name=None, sign="unknown", value=None):
     self.id = lu.get_id()
     self._rows = rows
     self._cols = cols
     self.sign_str = sign
     if name is None:
         self._name = "%s%d" % (s.PARAM_PREFIX, self.id)
     else:
         self._name = name
     self.init_dcp_attr()
     # Initialize with value if provided.
     if value is not None:
         self.value = value
예제 #16
0
    def __init__(self, shape=(), name=None, var_id=None, **kwargs):
        if var_id is None:
            self.id = lu.get_id()
        else:
            self.id = var_id
        if name is None:
            self._name = "%s%d" % (s.VAR_PREFIX, self.id)
        elif isinstance(name, str):
            self._name = name
        else:
            raise TypeError("Variable name %s must be a string." % name)

        self._value = None
        super(Variable, self).__init__(shape, **kwargs)
예제 #17
0
파일: parameter.py 프로젝트: rtruxal/cvxpy
 def __init__(self, rows=1, cols=1, name=None, sign="unknown", value=None):
     self.id = lu.get_id()
     self._rows = rows
     self._cols = cols
     self._sign_str = sign
     if name is None:
         self._name = "%s%d" % (s.PARAM_PREFIX, self.id)
     else:
         self._name = name
     # Initialize with value if provided.
     self._value = None
     if value is not None:
         self.value = value
     super(Parameter, self).__init__()
예제 #18
0
파일: parameter.py 프로젝트: heath9/cvxpy
 def __init__(self, rows=1, cols=1, name=None, sign="unknown", value=None):
     self.id = lu.get_id()
     self._rows = rows
     self._cols = cols
     self._sign_str = sign
     if name is None:
         self._name = "%s%d" % (s.PARAM_PREFIX, self.id)
     else:
         self._name = name
     # Initialize with value if provided.
     self._value = None
     if value is not None:
         self.value = value
     super(Parameter, self).__init__()
예제 #19
0
파일: parameter.py 프로젝트: IIT-Lab/cvxpy
 def __init__(self, shape=(), name=None, value=None, id=None, **kwargs):
     if id is None:
         self.id = lu.get_id()
     else:
         self.id = id
     if name is None:
         self._name = "%s%d" % (s.PARAM_PREFIX, self.id)
     else:
         self._name = name
     # Initialize with value if provided.
     self._value = None
     self.delta = None
     self.gradient = None
     super(Parameter, self).__init__(shape, value, **kwargs)
     self._is_constant = True
예제 #20
0
    def __init__(self, y, parent):
        """
        Parameters
        ----------
        y : cvxpy.expressions.expression.Expression
            Must satisfy ``y.is_affine() == True``.

        parent : cvxpy.transforms.suppfunc.SuppFunc
            The object containing data for the convex set associated with this atom.
        """
        self.id = lu.get_id()
        self.args = [Atom.cast_to_const(y)]
        self._parent = parent
        self._eta = None  # store for debugging purposes
        self._shape = tuple()
        self.validate_arguments()
예제 #21
0
    def __init__(
        self, shape=(), name: Optional[str] = None, var_id: Optional[int] = None, **kwargs: Any
    ) -> None:
        if var_id is None:
            self.id = lu.get_id()
        else:
            self.id = var_id
        if name is None:
            self._name = "%s%d" % (s.VAR_PREFIX, self.id)
        elif isinstance(name, str):
            self._name = name
        else:
            raise TypeError("Variable name %s must be a string." % name)

        self._variable_with_attributes: Optional["Variable"] = None
        self._value = None
        self.delta = None
        self.gradient = None
        super(Variable, self).__init__(shape, **kwargs)
예제 #22
0
 def __init__(self,
              shape: Tuple[int, ...] = (),
              name: Optional[str] = None,
              value=None,
              id=None,
              **kwargs) -> None:
     if id is None:
         self.id = lu.get_id()
     else:
         self.id = id
     if name is None:
         self._name = f"{s.PARAM_PREFIX}{self.id}"
     else:
         self._name = name
     # Initialize with value if provided.
     self._value = None
     self.delta = None
     self.gradient = None
     super(Parameter, self).__init__(shape, value, **kwargs)
     self._is_constant = True
예제 #23
0
 def __init__(self, x, q, axis=None, keepdims=False):
     self.q = q
     self.id = lu.get_id()
     super(quantile, self).__init__(x, axis=axis, keepdims=keepdims)
예제 #24
0
 def __init__(self):
     self.constr_id = lu.get_id()
     super(Constraint, self).__init__()
예제 #25
0
 def __init__(self, lh_exp, rh_exp):
     self.id = lu.get_id()
     self.lh_exp = lh_exp
     self.rh_exp = rh_exp
     self._expr = self.lh_exp - self.rh_exp
     self._dual_value = None
예제 #26
0
 def __init__(self, constr_id=None):
     if constr_id is None:
         self.constr_id = lu.get_id()
     else:
         self.constr_id = constr_id
     super(Constraint, self).__init__()
예제 #27
0
 def __init__(self, constr_id=None):
     if constr_id is None:
         self.constr_id = lu.get_id()
     else:
         self.constr_id = constr_id
     super(Constraint, self).__init__()
예제 #28
0
def new_edge(start_node, end_node, edges):
    """Create a new edge and add it to edges.
    """
    edge_id = lu.get_id()
    edges[edge_id] = (start_node, end_node)
    return edge_id
예제 #29
0
 def __init__(self, lh_exp, rh_exp):
     self.id = lu.get_id()
     self.lh_exp = lh_exp
     self.rh_exp = rh_exp
     self._expr = self.lh_exp - self.rh_exp
     self._dual_value = None
예제 #30
0
def new_edge(start_node, end_node, edges):
    """Create a new edge and add it to edges.
    """
    edge_id = lu.get_id()
    edges[edge_id] = (start_node, end_node)
    return edge_id
예제 #31
0
	def __init__(self):
		self.constr_id = lu.get_id()
		super(Constraint, self).__init__()