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")
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()
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)
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))
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)
def _BinaryPolynomialModel_from_dict(polynomial: dict, vartype): Model = make_BinaryPolynomialModel(polynomial) return Model(polynomial, to_cxxcimod(vartype))
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")
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']))
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")
def add_interaction(self, key: list, value, vartype=cxxcimod.Vartype.NONE): return super().add_interaction(key, value, to_cxxcimod(vartype))
def empty(self, vartype): Model = self._model_selector() return Model({}, to_cxxcimod(vartype))
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))
def empty(self, vartype): return self.__class__(super().empty(to_cxxcimod(vartype)))