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

 1"""IBM backend class for Qiskit routines"""
 2
 3from typing import Literal
 4
 5from qiskit.providers import BackendV1, BackendV2
 6from qiskit_ibm_runtime import EstimatorV2, Options, SamplerV2, Session
 7
 8from qlauncher.routines.qiskit.backends.qiskit_backend import QiskitBackend
 9from qlauncher.routines.qiskit.mitigation_suppression.base import CircuitExecutionMethod
10
11
[docs] 12class IBMBackend(QiskitBackend): 13 """ 14 An extension of QiskitBackend providing support for IBM sessions. 15 16 Attributes: 17 session (Session | None, optional): The session to use with name 'device'. 18 """ 19 20 def __init__( 21 self, 22 name: Literal['local_simulator', 'backendv1v2', 'session'], 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 session: Session | None = None, 28 ) -> None: 29 self.session = session 30 super().__init__( 31 name, 32 options=options, 33 backendv1v2=backendv1v2, 34 auto_transpile_level=auto_transpile_level, 35 error_mitigation_strategy=error_mitigation_strategy, 36 ) 37 38 @property 39 def setup(self) -> dict: 40 return {'name': self.name, 'session': self.session} 41 42 def _set_primitives_on_backend_name(self) -> None: 43 if self.name == 'local_simulator': 44 super()._set_primitives_on_backend_name() 45 return 46 self._auto_assign = True 47 if self.name == 'backendv1v2': 48 if self.backendv1v2 is None: 49 raise AttributeError('Please indicate a backend when in backendv1v2 mode.') 50 self.estimator = EstimatorV2(self.backendv1v2) 51 self.sampler = SamplerV2(self.backendv1v2) 52 53 elif self.name == 'session': 54 if self.session is None: 55 raise AttributeError('Please indicate a session when in session mode.') 56 self.estimator = EstimatorV2(mode=self.session, options=self.options) 57 self.sampler = SamplerV2(mode=self.session, options=self.options) 58 else: 59 raise ValueError( 60 ' '.join( 61 [ 62 f"Unsupported mode for this backend:'{self.name}'." 63 "Please use one of the following: ['local_simulator', 'backendv1v2', 'session']" 64 ] 65 ) 66 ) 67 68 self._configure_auto_behavior()