mirror of https://github.com/Qiskit/qiskit.git
Fix Backend primitive classes for BackendV1 with no max_experiments (#9069)
* Fix Backend primitive classes for BackendV1 with no max_experiments The ``max_experiments`` field in the BackendConfiguration for a BackendV1 backend is not a required field. While in practice most real backends set it, some simulators (including aer) do not. This causes a failure when using the Backend primitive classes with these backends as we were previously assuming the ``max_experiments`` attribute was always present. * Update test/python/primitives/test_backend_estimator.py Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
This commit is contained in:
parent
75d66dd8ba
commit
b2d3dcf53e
|
@ -56,7 +56,7 @@ def _run_circuits(
|
|||
metadata.append(circ.metadata)
|
||||
circ.metadata = {}
|
||||
if isinstance(backend, BackendV1):
|
||||
max_circuits = backend.configuration().max_experiments
|
||||
max_circuits = getattr(backend.configuration(), "max_experiments", None)
|
||||
elif isinstance(backend, BackendV2):
|
||||
max_circuits = backend.max_circuits
|
||||
if max_circuits:
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
fixes:
|
||||
- |
|
||||
Fixed an issue with the backend primitive classes :class:`~.BackendSampler`
|
||||
and :class:`~.BackendEstimator` which prevented running with a
|
||||
:class:`~.BackendV1` instance that does not have a ``max_experiments``
|
||||
field set in its :class:`~.BackendConfiguration`.
|
|
@ -297,6 +297,31 @@ class TestBackendEstimator(QiskitTestCase):
|
|||
estimator.run([qc] * k, [op] * k, params_list).result()
|
||||
self.assertEqual(run_mock.call_count, 10)
|
||||
|
||||
def test_no_max_circuits(self):
|
||||
"""Test BackendEstimator works with BackendV1 and no max_experiments set."""
|
||||
backend = FakeNairobi()
|
||||
config = backend.configuration()
|
||||
del config.max_experiments
|
||||
backend._configuration = config
|
||||
backend.set_options(seed_simulator=123)
|
||||
qc = RealAmplitudes(num_qubits=2, reps=2)
|
||||
op = SparsePauliOp.from_list([("IZ", 1), ("XI", 2), ("ZY", -1)])
|
||||
k = 5
|
||||
params_array = np.random.rand(k, qc.num_parameters)
|
||||
params_list = params_array.tolist()
|
||||
params_list_array = list(params_array)
|
||||
estimator = BackendEstimator(backend=backend)
|
||||
target = estimator.run([qc] * k, [op] * k, params_list).result()
|
||||
with self.subTest("ndarrary"):
|
||||
result = estimator.run([qc] * k, [op] * k, params_array).result()
|
||||
self.assertEqual(len(result.metadata), k)
|
||||
np.testing.assert_allclose(result.values, target.values, rtol=0.2, atol=0.2)
|
||||
|
||||
with self.subTest("list of ndarray"):
|
||||
result = estimator.run([qc] * k, [op] * k, params_list_array).result()
|
||||
self.assertEqual(len(result.metadata), k)
|
||||
np.testing.assert_allclose(result.values, target.values, rtol=0.2, atol=0.2)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
|
Loading…
Reference in New Issue