def test_typical(self): dqm = dimod.DQM() u = dqm.add_variable(4) v = dqm.add_variable(3) dqm.set_quadratic(u, v, {(0, 2): -1, (2, 1): 1}) dqm.set_linear(u, [0, 1, 2, 3]) dqm.offset = 5 cqm = CQM.from_discrete_quadratic_model(dqm) self.assertEqual(cqm.variables, [(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2)]) self.assertEqual( cqm.objective.linear, { (0, 0): 0, (0, 1): 1, (0, 2): 2, (0, 3): 3, (1, 1): 0, (1, 2): 0, (1, 0): 0 }) self.assertEqual(cqm.objective.quadratic, { ((1, 1), (0, 2)): 1.0, ((1, 2), (0, 0)): -1.0 }) self.assertEqual(cqm.objective.offset, dqm.offset) # keys of constraints are the variables of DQM self.assertEqual(set(cqm.constraints), set(dqm.variables))
def test_empty(self): dqm = dimod.DiscreteQuadraticModel() cqm = CQM.from_discrete_quadratic_model(dqm) self.assertEqual(len(cqm.variables), 0) self.assertEqual(len(cqm.constraints), 0)
def test_case_label(self): dqm = dimod.CaseLabelDQM() u = dqm.add_variable({'red', 'green', 'blue'}, shared_labels=True) v = dqm.add_variable(['blue', 'yellow', 'brown'], label='v', shared_labels=True) dqm.set_linear_case(u, 'red', 1) dqm.set_linear_case(v, 'yellow', 2) dqm.set_quadratic_case(u, 'green', v, 'blue', -0.5) dqm.set_quadratic_case(u, 'blue', v, 'brown', -0.5) cqm = CQM.from_discrete_quadratic_model(dqm) self.assertEqual( cqm.objective.linear, { (0, 'blue'): 0.0, (0, 'red'): 1.0, (0, 'green'): 0.0, ('v', 'blue'): 0.0, ('v', 'brown'): 0.0, ('v', 'yellow'): 2.0 }) self.assertEqual( cqm.objective.quadratic, { (('v', 'blue'), (0, 'green')): -0.5, (('v', 'brown'), (0, 'blue')): -0.5 }) self.assertEqual(cqm.objective.offset, 0) self.assertTrue( all( cqm.objective.vartype(v) is dimod.BINARY for v in cqm.objective.variables)) self.assertEqual(set(cqm.constraints), set(dqm.variables))