Source code for quantum_launcher.routines.qiskit_routines.backends.aer_backend
1"""qiskit_aer implementation of QiskitBackend"""
2from typing import Literal
3
4from qiskit.providers import BackendV1, BackendV2
5from qiskit.primitives import BackendSamplerV2, BackendEstimatorV2
6from qiskit_ibm_runtime import Options
7from qiskit_algorithms.optimizers import COBYLA
8from qiskit_aer import AerSimulator
9from qiskit_aer.noise import NoiseModel
10
11from quantum_launcher.routines.qiskit_routines.backends.qiskit_backend import QiskitBackend
12
13
[docs]
14class AerBackend(QiskitBackend):
15 """
16 QiskitBackend utilizing the qiskit_aer library. Runs local simulations only, utilizing CUDA capable gpus if available.
17 """
18
19 def __init__(
20 self,
21 name: Literal['local_simulator', 'backendv1v2'],
22 options: Options | None = None,
23 backendv1v2: BackendV1 | BackendV2 | None = None,
24 auto_transpile_level: Literal[0, 1, 2, 3] | None = None,
25 simulation_method: str = 'automatic',
26 simulation_device: Literal['CPU', 'GPU'] = 'CPU',
27 ) -> None:
28 self.method = simulation_method
29 self.device = simulation_device
30 super().__init__(name, options, backendv1v2, auto_transpile_level)
31
32 def _set_primitives_on_backend_name(self):
33 if self.name == 'local_simulator':
34 self.simulator = AerSimulator(method=self.method, device=self.device)
35 elif self.name == 'backendv1v2':
36 if self.backendv1v2 is None:
37 raise AttributeError(
38 'Please indicate a backend when in backendv1v2 mode.')
39 noise_model = NoiseModel.from_backend(self.backendv1v2)
40 self.simulator = AerSimulator(method=self.method, device=self.device, noise_model=noise_model)
41 else:
42 raise ValueError(
43 f"Unsupported mode for this backend:'{self.name}'. Please use one of the following: ['local_simulator', 'backendv1v2']")
44
45 self.sampler = BackendSamplerV2(backend=self.simulator)
46 self.estimator = BackendEstimatorV2(backend=self.simulator)
47 self.optimizer = COBYLA()
48
49 self._configure_auto_behavior()
50
[docs]
51 def set_options(self, **fields):
52 """Set additional options for the instance AerSimulator"""
53 self.simulator.set_options(**fields)