def test_chain_break_method_customization(self): sampler = FixedEmbeddingComposite(MockDWaveSampler(), {'a': [0]}) with mock.patch('dwave.system.composites.embedding.unembed_sampleset' ) as mock_unembed: sampler.sample_ising({'a': 1}, {}, chain_break_method=chain_breaks.discard) # assert chain_break_method propagated to unembed_sampleset __, kwargs = mock_unembed.call_args self.assertEqual(kwargs['chain_break_method'], chain_breaks.discard)
def test_chain_break_method_customization(self): sampler = FixedEmbeddingComposite(MockDWaveSampler(), {'a': [0]}) def mock_unembed(*args, **kwargs): self.assertIn('chain_break_method', kwargs) self.assertEqual(kwargs['chain_break_method'], chain_breaks.discard) mock_unembed.call_count += 1 return dwave.embedding.unembed_sampleset(*args, **kwargs) mock_unembed.call_count = 0 with mock.patch('dwave.system.composites.embedding.unembed_sampleset', mock_unembed): sampler.sample_ising({'a': 1}, {}, chain_break_method=chain_breaks.discard).resolve() self.assertEqual(mock_unembed.call_count, 1)
def test_sample_bqm_triangle(self): sampler = FixedEmbeddingComposite(MockDWaveSampler(), { 'a': [0, 4], 'b': [1, 5], 'c': [2, 6] }) resp = sampler.sample_ising({'a': 1, 'b': 1, 'c': 0}, {}) self.assertEqual(set(resp.variables), {'a', 'b', 'c'})
def execute(self, buffer, program): from dwave.system.samplers import DWaveSampler from dwave.system.composites import EmbeddingComposite, FixedEmbeddingComposite from collections import Counter import dimod h = {} J={} Q={} for inst in program.getInstructions(): Q[(inst.bits()[0], inst.bits()[1])] = inst.getParameter(0) if inst.bits()[0] == inst.bits()[1]: h[inst.bits()[0]] = inst.getParameter(0) else: J[(inst.bits()[0], inst.bits()[1])] = inst.getParameter(0) buffer.setSize(max(h.keys())+1) if buffer.hasExtraInfoKey('embedding'): sampler = FixedEmbeddingComposite(DWaveSampler(token=self.token, solver=self.backend), buffer['embedding']) else: sampler = EmbeddingComposite(DWaveSampler(token=self.token, solver=self.backend)) if program.getTag() == "ising": response = sampler.sample_ising(h, J, num_reads=self.shots, return_embedding=True) else: response = sampler.sample_qubo(Q, chain_strength=self.chain_strength, num_reads=self.shots, return_embedding=True) if not buffer.hasExtraInfoKey('embedding'): # we used embeddingcomposite, get the computed # embedding emb = response.info['embedding_context']['embedding'] buffer.addExtraInfo('embedding', emb) counts_list = [] e_map = {} for r in response.record: sample, energy, nocc, _ = r bitstring = ''.join([str(s if s == 1 else 0) for s in sample]) for i in range(nocc): counts_list.append(bitstring) e_map[bitstring] = energy counts = Counter(counts_list) buffer.setMeasurements(counts) buffer.addExtraInfo('energies', e_map)
def test_scale_aware_scale_composite(self): nodelist = [0, 1, 2] edgelist = [(0, 1), (1, 2), (0, 2)] embedding = {'a': [0], 'b': [1, 2]} sampler = FixedEmbeddingComposite(dimod.TrackingComposite( ScaleComposite( dimod.StructureComposite(dimod.NullSampler(), nodelist, edgelist))), embedding=embedding, scale_aware=True) _ = sampler.sample_ising({'a': 100, 'b': -100}, {'ab': 300}) self.assertIn('ignored_interactions', sampler.child.input) ignored = sampler.child.input['ignored_interactions'] self.assertTrue(ignored == [(1, 2)] or ignored == [(2, 1)])