def test_from_subsamples(self): s1 = [0, 1] s2 = {0: 1, 1: 0} bqm = dimod.BinaryQuadraticModel({0: 1, 1: 2}, {}, 0.0, 'BINARY') self.assertEqual(State.from_subsample(s1, bqm).subsamples.first.energy, 2.0) self.assertEqual(State.from_subsample(s2, bqm).subsamples.first.energy, 1.0) self.assertEqual(State.from_subsample(s2, bqm, beta=0.5).beta, 0.5) self.assertEqual(State.from_subsamples([s1, s1], bqm).subsamples.first.energy, 2.0) self.assertEqual(State.from_subsamples([s2, s2], bqm).subsamples.first.energy, 1.0) self.assertEqual(State.from_subsamples([s2, s2], bqm, beta=0.5).beta, 0.5) self.assertEqual(State.from_subsamples([sample_as_dict(s1), s2], bqm).subsamples.first.energy, 1.0)
def test_structured_child_sampler(self): q = QPUSubproblemAutoEmbeddingSampler(qpu_sampler=MockDWaveSampler()) # test sampler is converted to unstructured self.assertFalse(isinstance(q.sampler, dimod.Structured)) # test sampling works bqm = dimod.BinaryQuadraticModel({'a': 1}, {}, 0, 'SPIN') init = State.from_subsample({'a': 1}, bqm) res = q.run(init).result() self.assertEqual(res.subsamples.first.energy, -1)
def test_reverse_annealing_sampler(self): sampler = MockDWaveReverseAnnealingSampler() ra = ReverseAnnealingAutoEmbeddingSampler(qpu_sampler=sampler) # test sampling works bqm = dimod.BinaryQuadraticModel({'a': 1}, {}, 0, 'SPIN') state = State.from_subsample({'a': 1}, bqm) res = ra.run(state).result() self.assertEqual(res.subsamples.first.energy, -1) self.assertEqual(sampler.initial_state.popitem()[1], 1) self.assertEqual(sampler.anneal_schedule, ra.anneal_schedule)
def test_auto_embedding_failure(self): counter = MockDWaveSamplerCounter() q = QPUSubproblemAutoEmbeddingSampler(qpu_sampler=counter) target_structure = q.sampler.target_structure num_vars = len(target_structure.nodelist) + 1 # source graph will be too large for the target and ensure an embedding failure bqm = dimod.BinaryQuadraticModel(num_vars, 'SPIN') init = State.from_subsample(random_sample(bqm), bqm) retries = 3 with self.assertRaises(ValueError): result = q.run(init, num_retries=retries).result() self.assertEqual(retries + 1, counter.count)