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

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