Source code for qlauncher.routines.dwave.backends

 1"""DWave backends"""
 2
 3from abc import ABC, abstractmethod
 4
 5from qlauncher.base import Backend
 6from qlauncher.exceptions import DependencyError
 7
 8try:
 9    from dimod import Sampler
10    from dwave.samplers import SimulatedAnnealingSampler, SteepestDescentSampler, TabuSampler
11    from dwave.system import DWaveSampler, EmbeddingComposite
12except ImportError as e:
13    raise DependencyError(e, install_hint='dwave') from e
14
15
[docs] 16class BQMBackend(Backend, ABC): 17 """Base dwave backend""" 18 19 def __init__(self, name: str, parameters: list | None = None) -> None: 20 super().__init__(name, parameters) 21 self.sampler = self._get_sampler() 22 23 @abstractmethod 24 def _get_sampler(self) -> Sampler: 25 """Get a dimod sampler"""
26 27
[docs] 28class TabuBackend(BQMBackend): 29 """Tabu search simulator backend""" 30 31 def __init__(self, parameters: list | None = None) -> None: 32 super().__init__('TabuBackend', parameters) 33 34 def _get_sampler(self): 35 return TabuSampler()
36 37
[docs] 38class SimulatedAnnealingBackend(BQMBackend): 39 """Simulated annealing simulator backend""" 40 41 def __init__(self, parameters: list | None = None) -> None: 42 super().__init__('SimulatedAnnealingBackend', parameters) 43 44 def _get_sampler(self) -> Sampler: 45 return SimulatedAnnealingSampler()
46 47
[docs] 48class SteepestDescentBackend(BQMBackend): 49 """Steepest descent simulator backend""" 50 51 def __init__(self, parameters: list | None = None) -> None: 52 super().__init__('SteepestDescentBackend', parameters) 53 54 def _get_sampler(self) -> Sampler: 55 return SteepestDescentSampler()
56 57
[docs] 58class DwaveBackend(BQMBackend): 59 """Real Dwave device backend""" 60 61 def __init__(self, parameters: list | None = None) -> None: 62 super().__init__('DwaveDevice', parameters) 63 64 def _get_sampler(self) -> Sampler: 65 return EmbeddingComposite(DWaveSampler())