Source code for qlauncher.routines.dwave.backends

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