Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
    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)
Exemplo n.º 6
0
    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)
Exemplo n.º 7
0
    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)
Exemplo n.º 10
0
    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)
Exemplo n.º 11
0
    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)
Exemplo n.º 12
0
    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)
Exemplo n.º 13
0
    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))
Exemplo n.º 14
0
    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)
Exemplo n.º 15
0
    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)
Exemplo n.º 16
0
    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)
Exemplo n.º 17
0
    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)
Exemplo n.º 18
0
    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)
Exemplo n.º 19
0
    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)
Exemplo n.º 20
0
    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)
Exemplo n.º 21
0
    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)
Exemplo n.º 22
0
 def test_bqm(self):
     bqm = BinaryQuadraticModel({'a': -1}, {'ab': 1}, 7, 'SPIN')
     self.assertEqual(bqm, load(bqm.to_file()))