Skip to content

Commit

Permalink
Fix a transpile issue of BackendSampler (#9236)
Browse files Browse the repository at this point in the history
* fix an issue of transpile of BackendSampler

* optimize

* add reno

* updated test

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
  • Loading branch information
t-imamichi and mergify[bot] authored Dec 6, 2022
1 parent 0df0d29 commit cc28f82
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 6 deletions.
12 changes: 6 additions & 6 deletions qiskit/primitives/backend_sampler.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ def __init__(
self._transpile_options = Options()
self._bound_pass_manager = bound_pass_manager
self._preprocessed_circuits: list[QuantumCircuit] | None = None
self._transpiled_circuits: list[QuantumCircuit] | None = None
self._transpiled_circuits: list[QuantumCircuit] = []
self._skip_transpilation = skip_transpilation

def __new__( # pylint: disable=signature-differs
Expand Down Expand Up @@ -108,8 +108,8 @@ def transpiled_circuits(self) -> list[QuantumCircuit]:
"""
if self._skip_transpilation:
self._transpiled_circuits = list(self._circuits)
elif self._transpiled_circuits is None:
# Only transpile if have not done so yet
elif len(self._transpiled_circuits) < len(self._circuits):
# transpile only circuits that are not transpiled yet
self._transpile()
return self._transpiled_circuits

Expand Down Expand Up @@ -174,10 +174,10 @@ def _postprocessing(self, result: Result, circuits: list[QuantumCircuit]) -> Sam
def _transpile(self):
from qiskit.compiler import transpile

self._transpiled_circuits = cast(
"list[QuantumCircuit]",
start = len(self._transpiled_circuits)
self._transpiled_circuits.extend(
transpile(
self.preprocessed_circuits,
self.preprocessed_circuits[start:],
self.backend,
**self.transpile_options.__dict__,
),
Expand Down
5 changes: 5 additions & 0 deletions releasenotes/notes/fix-backend-sampler-890cbcf913667b08.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
fixes:
- |
Fixed a bug of :class:`~.BackendSampler` that raises an error
if :meth:`~.BackendSampler.run` method is called two times sequentially.
16 changes: 16 additions & 0 deletions test/python/primitives/test_backend_sampler.py
Original file line number Diff line number Diff line change
Expand Up @@ -319,6 +319,22 @@ def test_primitive_job_size_limit_backend_v1(self):
self.assertDictAlmostEqual(result.quasi_dists[0], {0: 1}, 0.1)
self.assertDictAlmostEqual(result.quasi_dists[1], {1: 1}, 0.1)

def test_sequential_run(self):
"""Test sequential run."""
qc = QuantumCircuit(1)
qc.measure_all()
qc2 = QuantumCircuit(1)
qc2.x(0)
qc2.measure_all()
sampler = BackendSampler(backend=FakeNairobi())
result = sampler.run([qc]).result()
self.assertDictAlmostEqual(result.quasi_dists[0], {0: 1}, 0.1)
result2 = sampler.run([qc2]).result()
self.assertDictAlmostEqual(result2.quasi_dists[0], {1: 1}, 0.1)
result3 = sampler.run([qc, qc2]).result()
self.assertDictAlmostEqual(result3.quasi_dists[0], {0: 1}, 0.1)
self.assertDictAlmostEqual(result3.quasi_dists[1], {1: 1}, 0.1)


if __name__ == "__main__":
unittest.main()

0 comments on commit cc28f82

Please sign in to comment.