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()