def test_degree(self): qm = QM() i = qm.add_variable('INTEGER') j = qm.add_variable('INTEGER') x = qm.add_variable('BINARY') qm.set_linear(i, 1.5) qm.set_linear(x, -2) qm.set_quadratic(i, j, 1) qm.set_quadratic(j, j, 5) qm.set_quadratic(x, i, 7) self.assertEqual(qm.degree(i), 2) self.assertEqual(qm.degree(j), 2) self.assertEqual(qm.degree(x), 1)
def test_quadratic(self, dtype): qm = QM(dtype=dtype) qm.add_variable('INTEGER', 'a') qm.add_variable('SPIN', 'b') qm.add_variable('BINARY', 'c') qm.set_quadratic('a', 'b', 1) qm.set_quadratic('b', 'c', 2) self.assertEqual(qm.linear, {'a': 0, 'b': 0, 'c': 0}) self.assertEqual(qm.quadratic, {'ab': 1, 'bc': 2}) self.assertEqual(qm.adj, { 'a': { 'b': 1 }, 'b': { 'a': 1, 'c': 2 }, 'c': { 'b': 2 } })
def test_min_max_sum(self): qm = QM() i = qm.add_variable('INTEGER') j = qm.add_variable('INTEGER') x = qm.add_variable('BINARY') qm.set_linear(i, 1.5) qm.set_linear(x, -2) qm.set_quadratic(i, j, 1) qm.set_quadratic(j, j, 5) qm.set_quadratic(x, i, 7) self.assertEqual(qm.linear.max(), 1.5) self.assertEqual(qm.linear.min(), -2) self.assertEqual(qm.linear.sum(), -.5) self.assertEqual(qm.quadratic.max(), 7) self.assertEqual(qm.quadratic.min(), 1) self.assertEqual(qm.quadratic.sum(), 13) self.assertEqual(qm.adj[j].max(), 5) self.assertEqual(qm.adj[j].min(), 1) self.assertEqual(qm.adj[j].sum(), 6)
def test_3var(self, dtype): qm = QM() qm.add_variable('INTEGER', 'i') qm.add_variable('BINARY', 'x') qm.add_variable('SPIN', 's') qm.set_linear('i', 3) qm.set_quadratic('s', 'i', 2) qm.set_quadratic('x', 's', -2) qm.set_quadratic('i', 'i', 5) qm.offset = 7 with tempfile.TemporaryFile() as tf: with qm.to_file() as qmf: shutil.copyfileobj(qmf, tf) tf.seek(0) new = QM.from_file(tf) self.assertTrue(qm.is_equal(new)) self.assertEqual(qm.dtype, new.dtype)