Skip to content

Commit 1ed3fdf

Browse files
authored
Allow users to run readout benchmarking with sweep (#7435)
Requested by @NoureldinYosri, this pr is splited from #7358. The pr adds a new function run_sweep_with_readout_benchmarking which runs the sweep circuits with readout error benchmarking (without shuffling).
1 parent b765bd9 commit 1ed3fdf

File tree

5 files changed

+707
-207
lines changed

5 files changed

+707
-207
lines changed

cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
import attrs
2424
import numpy as np
2525

26-
from cirq import circuits, ops, work
27-
from cirq.contrib.shuffle_circuits import run_shuffled_with_readout_benchmarking
26+
import cirq.contrib.shuffle_circuits.shuffle_circuits_with_readout_benchmarking as sc_readout
27+
from cirq import circuits, ops, study, work
2828
from cirq.experiments.readout_confusion_matrix import TensoredConfusionMatrices
2929

3030
if TYPE_CHECKING:
@@ -288,7 +288,7 @@ def _build_many_one_qubits_empty_confusion_matrix(qubits_length: int) -> list[np
288288
def _process_pauli_measurement_results(
289289
qubits: Sequence[ops.Qid],
290290
pauli_string_groups: list[list[ops.PauliString]],
291-
circuit_results: list[ResultDict],
291+
circuit_results: list[ResultDict] | Sequence[study.Result],
292292
calibration_results: dict[tuple[ops.Qid, ...], SingleQubitReadoutCalibrationResult],
293293
pauli_repetitions: int,
294294
timestamp: float,
@@ -474,14 +474,18 @@ def measure_pauli_strings(
474474
pauli_measurement_circuits.extend(basis_change_circuits)
475475

476476
# Run shuffled benchmarking for readout calibration
477-
circuits_results, calibration_results = run_shuffled_with_readout_benchmarking(
478-
input_circuits=pauli_measurement_circuits,
479-
sampler=sampler,
480-
circuit_repetitions=pauli_repetitions,
481-
rng_or_seed=rng_or_seed,
482-
qubits=[list(qubits) for qubits in qubits_list],
483-
num_random_bitstrings=num_random_bitstrings,
484-
readout_repetitions=readout_repetitions,
477+
circuits_results, calibration_results = (
478+
sc_readout.run_shuffled_circuits_with_readout_benchmarking(
479+
sampler=sampler,
480+
input_circuits=pauli_measurement_circuits,
481+
parameters=sc_readout.ReadoutBenchmarkingParams(
482+
circuit_repetitions=pauli_repetitions,
483+
num_random_bitstrings=num_random_bitstrings,
484+
readout_repetitions=readout_repetitions,
485+
),
486+
rng_or_seed=rng_or_seed,
487+
qubits=[list(qubits) for qubits in qubits_list],
488+
)
485489
)
486490

487491
# Process the results to calculate expectation values

cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation_test.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -895,7 +895,7 @@ def test_process_pauli_measurement_results_raises_error_on_missing_calibration()
895895
_process_pauli_measurement_results(
896896
qubits,
897897
[pauli_strings],
898-
circuit_results[0], # type: ignore[arg-type]
898+
circuit_results[0],
899899
empty_calibration_result_dict, # type: ignore[arg-type]
900900
1000,
901901
1.0,

cirq-core/cirq/contrib/shuffle_circuits/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,6 @@
1515

1616
from cirq.contrib.shuffle_circuits.shuffle_circuits_with_readout_benchmarking import (
1717
run_shuffled_with_readout_benchmarking as run_shuffled_with_readout_benchmarking,
18+
run_shuffled_circuits_with_readout_benchmarking as run_shuffled_circuits_with_readout_benchmarking, # noqa: E501
19+
run_sweep_with_readout_benchmarking as run_sweep_with_readout_benchmarking,
1820
)

0 commit comments

Comments
 (0)