Source code for quantum_launcher.routines.qiskit_routines.backends.ibm_backend

 1""" IBM backend class for Qiskit routines """
 2from typing import Literal
 3
 4from qiskit.providers import BackendV1, BackendV2
 5from qiskit_algorithms.optimizers import SPSA, COBYLA
 6from qiskit_ibm_runtime import EstimatorV2, SamplerV2
 7from qiskit_ibm_runtime import Session, Options
 8
 9from quantum_launcher.routines.qiskit_routines.backends.qiskit_backend import QiskitBackend
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 session: Session | None = None, 27 ) -> None: 28 self.session = session 29 super().__init__(name, options, backendv1v2, auto_transpile_level) 30 31 @property 32 def setup(self) -> dict: 33 return { 34 'name': self.name, 35 'session': self.session 36 } 37 38 def _set_primitives_on_backend_name(self) -> None: 39 if self.name == 'local_simulator': 40 super()._set_primitives_on_backend_name() 41 return 42 self._auto_assign = True 43 if self.name == 'backendv1v2': 44 if self.backendv1v2 is None: 45 raise AttributeError( 46 'Please indicate a backend when in backendv1v2 mode.') 47 self.estimator = EstimatorV2(self.backendv1v2) 48 self.sampler = SamplerV2(self.backendv1v2) 49 self.optimizer = SPSA() if self.backendv1v2.name.startswith('ibm') else COBYLA() # set spsa for real backends 50 51 elif self.name == 'session': 52 if self.session is None: 53 raise AttributeError( 54 'Please indicate a session when in session mode.') 55 else: 56 self.estimator = EstimatorV2(mode=self.session, options=self.options) 57 self.sampler = SamplerV2(mode=self.session, options=self.options) 58 self.optimizer = SPSA() 59 else: 60 raise ValueError( 61 " ".join([ 62 f"Unsupported mode for this backend:'{self.name}'." 63 "Please use one of the following: ['local_simulator', 'backendv1v2', 'session']" 64 ]) 65 ) 66 67 self._configure_auto_behavior()