Exemple #1
0
 def change_vartype(self, vartype, inplace=None):
     vartype = to_cxxcimod(vartype)
     if inplace == None or inplace == True:
         return super().change_vartype(vartype)
     elif inplace == False:
         Model = self._model_selector()
         if to_cxxcimod(self.vartype) == vartype:
             return Model(self._get_keys(), self._get_values(), vartype)
         else:
             if vartype == cxxcimod.SPIN:
                 return Model(self.to_hising(), vartype)
             elif vartype == cxxcimod.BINARY:
                 return Model(self.to_hubo(), vartype)
             else:
                 raise Exception("Unknown vartype error")
     else:
         raise TypeError("Invalid inplace value")
Exemple #2
0
        def __init__(self,
                     linear,
                     quadratic,
                     offset=0.0,
                     var_type=dimod.SPIN,
                     **kwargs):
            super().__init__(linear, quadratic, offset, to_cxxcimod(var_type))

            self._init_process()
Exemple #3
0
        def __init__(self, *args, **kwargs):
            # replace vartype with cxxcimod type
            vartypes = [dimod.SPIN, dimod.BINARY, cimod.SPIN, cimod.BINARY, 'SPIN', 'BINARY']
            args    = [to_cxxcimod(elem) if type(elem) != np.ndarray and vartypes.count(elem) != 0 else elem for elem in args]
            kwargs  = {k: to_cxxcimod(v) if type(elem) != np.ndarray and vartypes.count(v) != 0 else v for k,v in kwargs.items()}

            # if linear and quadratic are given and mode is dense
            if len(args) >= 2 and type(args[0]) == dict and type(args[1]) == dict and sparse is False:
                linear          = args[0]
                quadratic       = args[1]
                offset,vartype  = extract_offset_and_vartype(*args[2:], **kwargs)

                mat,idx_to_label = self._generate_mat(linear, quadratic, False)

                super().__init__(mat, idx_to_label, offset, vartype, fix_format=False)

            else:
                super().__init__(*args, **kwargs)
Exemple #4
0
def _BinaryPolynomialModel_from_list(keys: list, values: list, vartype):
    if len(keys) == 0:
        Model = make_BinaryPolynomialModel({})
        return Model(keys, values, to_cxxcimod(vartype))
    i = 0
    label = None
    while i < len(keys):
        if len(keys[i]) > 0:
            label = keys[i][0]
            break
        i += 1
    if label == None:
        Model = make_BinaryPolynomialModel({(): 1.0})
        return Model(keys, values, to_cxxcimod(vartype))
    else:
        if isinstance(label, list):
            label = tuple(label)
        mock_polynomial = {(label, ): 1.0}
        Model = make_BinaryPolynomialModel(mock_polynomial)
        return Model(keys, values, to_cxxcimod(vartype))
Exemple #5
0
 def change_vartype(self, vartype, inplace=True):
     """
     Create a binary quadratic model with the specified vartype
     Args:
         var_type (cimod.Vartype): SPIN or BINARY
     Returns:
         A new instance of the BinaryQuadraticModel class.
     """
     cxxvartype = to_cxxcimod(vartype)
     #FIXME: bottleneck: variable copies
     bqm = super().change_vartype(cxxvartype, inplace)
     self._re_calculate = True
     return BinaryQuadraticModel(bqm.get_linear(), bqm.get_quadratic(),
                                 bqm.get_offset(), vartype)
Exemple #6
0
def _BinaryPolynomialModel_from_dict(polynomial: dict, vartype):
    Model = make_BinaryPolynomialModel(polynomial)
    return Model(polynomial, to_cxxcimod(vartype))
Exemple #7
0
def BinaryPolynomialModel(*args, **kwargs):
    if kwargs == {}:
        if len(args) <= 1:
            raise TypeError("Invalid argument for this function")
        elif len(args) == 2:
            if isinstance(args[0], dict):
                return _BinaryPolynomialModel_from_dict(
                    args[0], to_cxxcimod(args[1]))
            else:
                raise TypeError("Invalid argument for this function")
        elif len(args) == 3:
            key_condition = isinstance(args[0], list) or isinstance(
                args[0], tuple)
            val_condition = isinstance(args[1], list) or isinstance(
                args[1], tuple)
            if key_condition and val_condition:
                return _BinaryPolynomialModel_from_list(
                    args[0], args[1], to_cxxcimod(args[2]))
            else:
                raise TypeError("Invalid argument for this function")
        else:
            raise TypeError("Invalid argument for this function")
    else:
        if 'keys' in kwargs and 'values' in kwargs and 'vartype' in kwargs:
            key_condition = isinstance(kwargs['keys'], list) or isinstance(
                kwargs['keys'], tuple)
            val_condition = isinstance(kwargs['values'], list) or isinstance(
                kwargs['values'], tuple)
            if key_condition and val_condition:
                return _BinaryPolynomialModel_from_list(
                    kwargs['keys'], kwargs['values'],
                    to_cxxcimod(kwargs['vartype']))
            else:
                raise TypeError("Invalid argument for this function")
        elif 'polynomial' in kwargs and 'vartype' in kwargs:
            if isinstance(kwargs['polynomial'], dict):
                return _BinaryPolynomialModel_from_dict(
                    kwargs['polynomial'], to_cxxcimod(kwargs['vartype']))
            else:
                raise TypeError("Invalid argument for this function")
        elif 'values' in kwargs and 'vartype' in kwargs:
            if len(args) != 1:
                raise TypeError("Invalid argument for this function")
            key_condition = isinstance(args[0], list) or isinstance(
                args[0], tuple)
            val_condition = isinstance(kwargs['values'], list) or isinstance(
                kwargs['values'], tuple)
            if key_condition and val_condition:
                return _BinaryPolynomialModel_from_list(
                    args[0], kwargs['values'], to_cxxcimod(kwargs['vartype']))
            else:
                raise TypeError("Invalid argument for this function")
        elif 'vartype' in kwargs:
            if len(args) == 1:
                if isinstance(args[0], dict):
                    return _BinaryPolynomialModel_from_dict(
                        args[0], to_cxxcimod(kwargs['vartype']))
                else:
                    raise TypeError("Invalid argument for this function")
            elif len(args) == 2:
                key_condition = isinstance(args[0], list) or isinstance(
                    args[0], tuple)
                val_condition = isinstance(args[1], list) or isinstance(
                    args[1], tuple)
                if key_condition and val_condition:
                    return _BinaryPolynomialModel_from_list(
                        args[0], args[1], to_cxxcimod(kwargs['vartype']))
                else:
                    raise TypeError("Invalid argument for this function")
            else:
                raise TypeError("Invalid argument for this function")
        else:
            raise TypeError("Invalid argument for this function")
Exemple #8
0
 def from_serializable(cls, obj):
     if (obj["type"] != "BinaryPolynomialModel"):
         raise Exception("Type must be \"BinaryPolynomialModel\"")
     return cls(obj['variables'], obj['poly_key_distance_list'],
                obj['poly_value_list'], to_cxxcimod(obj['vartype']))
Exemple #9
0
 def add_interactions_from(self, *args, **kwargs):
     if kwargs == {}:
         if len(args) == 0:
             raise TypeError("Invalid argument for this function")
         if len(args) == 1:
             if isinstance(args[0], dict):
                 super().add_interactions_from(args[0])
             else:
                 raise TypeError("Invalid argument for this function")
         elif len(args) == 2:
             key_condition = isinstance(args[0], list) or isinstance(
                 args[0], tuple)
             val_condition = isinstance(args[1], list) or isinstance(
                 args[1], tuple)
             if isinstance(args[0], dict):
                 super().add_interactions_from(args[0],
                                               to_cxxcimod(args[1]))
             elif key_condition and val_condition:
                 super().add_interactions_from(args[0], args[1])
             else:
                 raise TypeError("Invalid argument for this function")
         elif len(args) == 3:
             key_condition = isinstance(args[0], list) or isinstance(
                 args[0], tuple)
             val_condition = isinstance(args[1], list) or isinstance(
                 args[1], tuple)
             if key_condition and val_condition:
                 super().add_interactions_from(args[0], args[1],
                                               to_cxxcimod(args[2]))
             else:
                 raise TypeError("Invalid argument for this function")
         else:
             raise TypeError("Invalid argument for this function")
     else:
         if 'keys' in kwargs and 'values' in kwargs and 'vartype' in kwargs:
             if len(args) != 0:
                 raise TypeError("Invalid argument for this function")
             super().add_interactions_from(
                 kwargs['keys'], kwargs['values'],
                 to_cxxcimod(kwargs['vartype']))
         elif 'values' in kwargs and 'vartype' in kwargs:
             if len(args) != 1:
                 raise TypeError("Invalid argument for this function")
             key_condition = isinstance(args[0], list) or isinstance(
                 args[0], tuple)
             val_condition = isinstance(kwargs['values'],
                                        list) or isinstance(
                                            kwargs['values'], tuple)
             if key_condition and val_condition:
                 super().add_interactions_from(
                     args[0], kwargs['values'],
                     to_cxxcimod(kwargs['vartype']))
             else:
                 raise TypeError("Invalid argument for this function")
         elif 'polynomial' in kwargs and 'vartype' in kwargs:
             if len(args) != 0:
                 raise TypeError("Invalid argument for this function")
             if isinstance(kwargs['polynomial'], dict):
                 super().add_interactions_from(
                     kwargs['polynomial'],
                     to_cxxcimod(kwargs['vartype']))
             else:
                 raise TypeError("Invalid argument for this function")
         elif 'keys' in kwargs and 'values' in kwargs:
             if len(args) != 0:
                 raise TypeError("Invalid argument for this function")
             key_condition = isinstance(kwargs['keys'],
                                        list) or isinstance(
                                            kwargs['keys'], tuple)
             val_condition = isinstance(kwargs['values'],
                                        list) or isinstance(
                                            kwargs['values'], tuple)
             if key_condition and val_condition:
                 super().add_interactions_from(kwargs['keys'],
                                               kwargs['values'])
             else:
                 raise TypeError("Invalid argument for this function")
         elif 'vartype' in kwargs:
             if len(args) == 1:
                 if isinstance(args[0], dict):
                     super().add_interactions_from(
                         args[0], to_cxxcimod(kwargs['vartype']))
                 else:
                     raise TypeError(
                         "Invalid argument for this function")
             elif len(args) == 2:
                 key_condition = isinstance(
                     args[0], list) or isinstance(args[0], tuple)
                 val_condition = isinstance(
                     args[1], list) or isinstance(args[1], tuple)
                 if key_condition and val_condition:
                     super().add_interactions_from(
                         args[0], args[1],
                         to_cxxcimod(kwargs['vartype']))
                 else:
                     raise TypeError(
                         "Invalid argument for this function")
         elif 'values' in kwargs:
             if len(args) != 1:
                 raise TypeError("Invalid argument for this function")
             key_condition = isinstance(args[0], list) or isinstance(
                 args[0], tuple)
             val_condition = isinstance(kwargs['values'],
                                        list) or isinstance(
                                            kwargs['values'], tuple)
             if key_condition and val_condition:
                 super().add_interactions_from(args[0],
                                               kwargs['values'])
             else:
                 raise TypeError("Invalid argument for this function")
         elif 'polynomial' in kwargs:
             if len(args) != 0:
                 raise TypeError("Invalid argument for this function")
             if isinstance(kwargs['polynomial'], dict):
                 super().add_interactions_from(kwargs['polynomial'])
             else:
                 raise TypeError("Invalid argument for this function")
         else:
             raise TypeError("Invalid argument for this function")
Exemple #10
0
 def add_interaction(self,
                     key: list,
                     value,
                     vartype=cxxcimod.Vartype.NONE):
     return super().add_interaction(key, value, to_cxxcimod(vartype))
Exemple #11
0
 def empty(self, vartype):
     Model = self._model_selector()
     return Model({}, to_cxxcimod(vartype))
Exemple #12
0
 def change_vartype(self, vartype, inplace=None):
     if inplace is None:
         super().change_vartype(to_cxxcimod(vartype))
     else:
         return self.__class__(super().change_vartype(to_cxxcimod(vartype), inplace))
Exemple #13
0
 def empty(self, vartype):
     return self.__class__(super().empty(to_cxxcimod(vartype)))