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