def test_empty_bytes(self, name, BQM, version): bqm = BQM('SPIN') with FileView(bqm, version=version) as fp: new = load(fp.readall()) self.assertIs(type(new), type(bqm)) self.assertEqual(bqm, new)
def test_unhashable_variables(self, name, BQM, version): bqm = BQM({(0, 1): 1}, {}, 'SPIN') with FileView(bqm, version=version) as fv: new = load(fv) self.assertEqual(new, bqm)
def from_file( cls, fp: Union[BinaryIO, ByteString]) -> "ConstrainedQuadraticModel": """Construct from a file-like object. The inverse of :meth:`~ConstrainedQuadraticModel.to_file`. """ if isinstance(fp, ByteString): file_like: BinaryIO = _BytesIO(fp) # type: ignore[assignment] else: file_like = fp header_info = read_header(file_like, CQM_MAGIC_PREFIX) if header_info.version >= (2, 0): raise ValueError("cannot load a BQM serialized with version " f"{header_info.version!r}, try upgrading your " "dimod version") # we don't actually need the data cqm = CQM() with zipfile.ZipFile(file_like, mode='r') as zf: cqm.set_objective(load(zf.read("objective"))) constraint_labels = set() for arch in zf.namelist(): # even on windows zip uses / match = re.match("constraints/([^/]+)/", arch) if match is not None: constraint_labels.add(match.group(1)) for constraint in constraint_labels: lhs = load(zf.read(f"constraints/{constraint}/lhs")) rhs = np.frombuffer(zf.read(f"constraints/{constraint}/rhs"), np.float64)[0] sense = zf.read(f"constraints/{constraint}/sense").decode( 'ascii') discrete = any(zf.read(f"constraints/{constraint}/discrete")) label = deserialize_variable(json.loads(constraint)) cqm.add_constraint(lhs, rhs=rhs, sense=sense, label=label) if discrete: cqm.discrete.add(label) return cqm
def test_functional_empty(self, name, BQM): bqm = BQM('SPIN') with FileView(bqm) as fp: new = load(fp) self.assertIs(type(new), type(bqm)) self.assertEqual(bqm, new)
def test_functional_labelled(self, name, BQM): bqm = BQM({'a': -1}, {'ab': 1}, 7, 'SPIN') with FileView(bqm) as fp: new = load(fp) self.assertIs(type(new), type(bqm)) self.assertEqual(bqm, new)
def test_typical(self, name, BQM, version): bqm = BQM(np.triu(np.arange(25).reshape((5, 5))), 'SPIN') bqm.offset = -1 with FileView(bqm, version=version) as fp: new = load(fp) self.assertIs(type(new), type(bqm)) self.assertEqual(bqm, new)
def test_labelled_bytes(self, name, BQM, version): bqm = BQM({'a': -1}, {'ab': 1}, 7, 'SPIN') with FileView(bqm, version=version) as fp: new = load(fp.readall()) self.assertIs(type(new), type(bqm)) self.assertEqual(bqm, new)
def test_empty_bytes(self, name, BQM, version): bqm = BQM('SPIN') with self.assertWarns(DeprecationWarning): with FileView(bqm, version=version) as fp: new = load(fp.read()) self.assertEqual(bqm, new) if bqm.dtype != np.dtype('O'): self.assertEqual(bqm.dtype, new.dtype)
def test_labelled_bytes(self, name, BQM, version): bqm = BQM({'a': -1}, {'ab': 1}, 7, 'SPIN') with self.assertWarns(DeprecationWarning): with FileView(bqm, version=version) as fp: new = load(fp.read()) if bqm.dtype != np.dtype('O'): self.assertEqual(bqm.dtype, new.dtype) self.assertEqual(bqm, new)
def test_typical(self, name, BQM, version): bqm = BQM(np.triu(np.arange(25).reshape((5, 5))), 'SPIN') bqm.offset = -1 with self.assertWarns(DeprecationWarning): with FileView(bqm, version=version) as fp: new = load(fp) if bqm.dtype != np.dtype('O'): self.assertEqual(bqm.dtype, new.dtype) self.assertEqual(bqm, new)
def test_unhashable_variables(self, BQM): if issubclass(BQM, dimod.AdjDictBQM): # not (yet) implemented for non cybqms return bqm = BQM({(0, 1): 1}, {}, 'SPIN') with FileView(bqm) as fv: new = load(fv) self.assertEqual(new, bqm)
def test_functional_empty(self, BQM): if issubclass(BQM, dimod.AdjDictBQM): # not (yet) implemented for non cybqms return bqm = BQM('SPIN') with FileView(bqm) as fp: new = load(fp) self.assertIs(type(new), type(bqm)) self.assertEqual(bqm, new)
def test_dqm(self): dqm = dimod.DiscreteQuadraticModel() dqm.add_variable(5, 'a') dqm.add_variable(6, 'b') dqm.set_quadratic_case('a', 0, 'b', 5, 1.5) new = load(dqm.to_file()) self.assertEqual(dqm.num_variables(), new.num_variables()) self.assertEqual(dqm.num_cases(), new.num_cases()) self.assertEqual(dqm.get_quadratic_case('a', 0, 'b', 5), new.get_quadratic_case('a', 0, 'b', 5))
def test_labelled_shapeable_bytes(self, name, BQM, version): if not BQM.shapeable(): raise unittest.SkipTest("test only applies to shapeable bqms") bqm = BQM({'a': -1}, {'ab': 1}, 7, 'SPIN') bqm.add_variable() with FileView(bqm, version=version) as fp: new = load(fp.readall()) self.assertIs(type(new), type(bqm)) self.assertEqual(bqm, new)
def test_functional(self, BQM): if issubclass(BQM, dimod.AdjDictBQM): # not (yet) implemented for non cybqms return bqm = BQM(np.triu(np.arange(25).reshape((5, 5))), 'SPIN') bqm.offset = -1 with FileView(bqm) as fp: new = load(fp) self.assertIs(type(new), type(bqm)) self.assertEqual(bqm, new)
def test_ignore_labels(self, name, BQM, version): bqm = BQM(np.triu(np.arange(25).reshape((5, 5))), 'SPIN') labeled_bqm = bqm.relabel_variables(dict(enumerate('abcde')), inplace=False) with self.assertWarns(DeprecationWarning): with FileView(labeled_bqm, version=version, ignore_labels=True) as fv: new = load(fv) self.assertEqual(new, bqm) if bqm.dtype != np.dtype('O'): self.assertEqual(bqm.dtype, new.dtype)
def test_ignore_labels(self, name, BQM, version): bqm = BQM(np.triu(np.arange(25).reshape((5, 5))), 'SPIN') labeled_bqm = bqm.relabel_variables(dict(enumerate('abcde')), inplace=False) if version < (2, 0): with self.assertRaises(ValueError): FileView(labeled_bqm, version=version, ignore_labels=True) return with FileView(labeled_bqm, version=version, ignore_labels=True) as fv: new = load(fv) self.assertEqual(new, bqm)
def test_cqm(self): cqm = dimod.CQM() bqm = BinaryQuadraticModel({'a': -1}, {'ab': 1}, 1.5, 'SPIN') cqm.add_constraint(bqm, '<=') cqm.add_constraint(bqm, '>=') # add it again new = load(cqm.to_file()) self.assertEqual(cqm.objective, new.objective) self.assertEqual(set(cqm.constraints), set(new.constraints)) for label, constraint in cqm.constraints.items(): self.assertEqual(constraint.lhs, new.constraints[label].lhs) self.assertEqual(constraint.rhs, new.constraints[label].rhs) self.assertEqual(constraint.sense, new.constraints[label].sense)
def test_saved_adjvector_5x5_v1(self): bqm = BinaryQuadraticModel(np.triu(np.arange(25).reshape((5, 5))), 'BINARY') filename = os.path.join(TEST_DATA_DIR, '5x5_v1.bqm') # with open(filename, 'wb') as fp: # with FileView(bqm, version=1) as fv: # fp.write(fv.read()) with open(filename, 'rb') as fp: buff = fp.read() # and that loading gives the same new = load(buff) self.assertEqual(new, bqm)
def test_functional_labelled_shapeable(self, BQM): if issubclass(BQM, dimod.AdjDictBQM): # not (yet) implemented for non cybqms return if not BQM.shapeable(): raise unittest.SkipTest("test only applies to shapeable bqms") bqm = BQM({'a': -1}, {'ab': 1}, 7, 'SPIN') bqm.add_variable() with FileView(bqm) as fp: new = load(fp) self.assertIs(type(new), type(bqm)) self.assertEqual(bqm, new)
def test_saved_adjvector_5x5_v1(self): bqm = dimod.AdjVectorBQM(np.triu(np.arange(25).reshape((5, 5))), 'BINARY') filename = os.path.join(TEST_DATA_DIR, '5x5_v1.bqm') # with open(filename, 'wb') as fp: # with FileView(bqm, version=1) as fv: # fp.write(fv.readall()) with open(filename, 'rb') as fp: buff = fp.read() # test that we still encode the same way with FileView(bqm, version=1) as fv: self.assertEqual(buff, fv.read()) # and that loading gives the same new = load(buff) self.assertEqual(new, bqm)
def test_bqm(self): bqm = BinaryQuadraticModel({'a': -1}, {'ab': 1}, 7, 'SPIN') self.assertEqual(bqm, load(bqm.to_file()))