Source code for qlauncher.routines.dwave.backends

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