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)