Source code for qlauncher.routines.qiskit.backends.aer_backend

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