From e7958e097fb92e0def98393409ca25c154642b60 Mon Sep 17 00:00:00 2001 From: ddddddanni Date: Tue, 10 Jun 2025 16:01:54 -0700 Subject: [PATCH 01/10] Make the readout qubits consistent with the measurement qubits --- ...ing_measurement_with_readout_mitigation.py | 31 +++++++++++++++---- gitstat.log | 14 +++++++++ 2 files changed, 39 insertions(+), 6 deletions(-) create mode 100644 gitstat.log diff --git a/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py b/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py index c8232420b71..61bb2131915 100644 --- a/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py +++ b/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py @@ -211,6 +211,24 @@ def _normalize_input_paulis( return cast(Dict[circuits.FrozenCircuit, List[List[ops.PauliString]]], circuits_to_pauli) +def _extract_readout_qubits(pauli_strings: list[ops.PauliString]) -> list[ops.Qid]: + """Extracts unique qubits from a list of Pauli strings.""" + qubits = set() + for pauli_str in pauli_strings: + for qubit in pauli_str.qubits: + qubits.add(qubit) + return sorted(qubits) + + + +def _build_pauli_string_calibration_result(qubits_to_error: SingleQubitReadoutCalibrationResult, readout_qubits: ops.Qid) -> SingleQubitReadoutCalibrationResult: + return SingleQubitReadoutCalibrationResult( + zero_state_errors={qubit: qubits_to_error.zero_state_errors[qubit] for qubit in readout_qubits}, + one_state_errors={qubit: qubits_to_error.one_state_errors[qubit] for qubit in readout_qubits}, + timestamp= qubits_to_error.timestamp, + repetitions=qubits_to_error.repetitions, + ) + def _pauli_strings_to_basis_change_ops( pauli_strings: list[ops.PauliString], qid_list: list[ops.Qid] ): @@ -309,13 +327,17 @@ def _process_pauli_measurement_results( for pauli_group_index, circuit_result in enumerate(circuit_results): measurement_results = circuit_result.measurements["m"] pauli_strs = pauli_string_groups[pauli_group_index] + pauli_readout_qubits = _extract_readout_qubits(pauli_strs) + + calibration_result = calibration_results[tuple(pauli_readout_qubits)] if disable_readout_mitigation is False else None for pauli_str in pauli_strs: qubits_sorted = sorted(pauli_str.qubits) qubit_indices = [qubits.index(q) for q in qubits_sorted] + pauli_str_calibration_result = _build_pauli_string_calibration_result(calibration_result, qubits_sorted) if disable_readout_mitigation is False else None confusion_matrices = ( - _build_many_one_qubits_confusion_matrix(calibration_results[tuple(qubits_sorted)]) + _build_many_one_qubits_confusion_matrix(pauli_str_calibration_result) if disable_readout_mitigation is False else _build_many_one_qubits_empty_confusion_matrix(len(qubits_sorted)) ) @@ -351,9 +373,7 @@ def _process_pauli_measurement_results( unmitigated_expectation=unmitigated_value_with_coefficient, unmitigated_stddev=d_unmit_with_coefficient, calibration_result=( - calibration_results[tuple(qubits_sorted)] - if disable_readout_mitigation is False - else None + pauli_str_calibration_result ), ) ) @@ -422,8 +442,7 @@ def measure_pauli_strings( unique_qubit_tuples = set() for pauli_string_groups in normalized_circuits_to_pauli.values(): for pauli_strings in pauli_string_groups: - for pauli_string in pauli_strings: - unique_qubit_tuples.add(tuple(sorted(pauli_string.qubits))) + unique_qubit_tuples.add(tuple(_extract_readout_qubits(pauli_strings))) # qubits_list is a list of qubit tuples qubits_list = sorted(unique_qubit_tuples) diff --git a/gitstat.log b/gitstat.log new file mode 100644 index 00000000000..6317b3669db --- /dev/null +++ b/gitstat.log @@ -0,0 +1,14 @@ +ea797f21 Fix lint + 2 files changed, 18 insertions(+), 15 deletions(-) +188d3bbc Fix type + 2 files changed, 26 insertions(+), 24 deletions(-) +42abf661 Fix format + 2 files changed, 45 insertions(+), 31 deletions(-) +71dfdada Add more tests and fix some code + 2 files changed, 175 insertions(+), 12 deletions(-) +374f409a Modify the pauli string measurement tool to allow a group of paulis been measured using the same measurement results + 2 files changed, 338 insertions(+), 105 deletions(-) +b3561b44 Add a tool for measuring expectation values of Pauli strings with readout error mitigation (#7067) + 5 files changed, 1084 insertions(+), 93 deletions(-) +eec204f2 Add a function for running circuits in a shuffled order with readout error benchmarking. (#6945) + 3 files changed, 549 insertions(+) From be11ec44241ca69c35208ff3c5acf9d54c104265 Mon Sep 17 00:00:00 2001 From: ddddddanni Date: Tue, 10 Jun 2025 16:10:24 -0700 Subject: [PATCH 02/10] Format --- ...ing_measurement_with_readout_mitigation.py | 37 +++++++++++++------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py b/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py index 61bb2131915..505a77a8099 100644 --- a/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py +++ b/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py @@ -212,7 +212,7 @@ def _normalize_input_paulis( def _extract_readout_qubits(pauli_strings: list[ops.PauliString]) -> list[ops.Qid]: - """Extracts unique qubits from a list of Pauli strings.""" + """Extracts unique qubits from a list of QWC Pauli strings.""" qubits = set() for pauli_str in pauli_strings: for qubit in pauli_str.qubits: @@ -220,15 +220,22 @@ def _extract_readout_qubits(pauli_strings: list[ops.PauliString]) -> list[ops.Qi return sorted(qubits) - -def _build_pauli_string_calibration_result(qubits_to_error: SingleQubitReadoutCalibrationResult, readout_qubits: ops.Qid) -> SingleQubitReadoutCalibrationResult: +def _build_pauli_string_calibration_result( + qubits_to_error: SingleQubitReadoutCalibrationResult, readout_qubits: list[ops.Qid] +) -> SingleQubitReadoutCalibrationResult: + """Builds a calibration result for the specific readout qubits.""" return SingleQubitReadoutCalibrationResult( - zero_state_errors={qubit: qubits_to_error.zero_state_errors[qubit] for qubit in readout_qubits}, - one_state_errors={qubit: qubits_to_error.one_state_errors[qubit] for qubit in readout_qubits}, - timestamp= qubits_to_error.timestamp, + zero_state_errors={ + qubit: qubits_to_error.zero_state_errors[qubit] for qubit in readout_qubits + }, + one_state_errors={ + qubit: qubits_to_error.one_state_errors[qubit] for qubit in readout_qubits + }, + timestamp=qubits_to_error.timestamp, repetitions=qubits_to_error.repetitions, ) + def _pauli_strings_to_basis_change_ops( pauli_strings: list[ops.PauliString], qid_list: list[ops.Qid] ): @@ -328,14 +335,22 @@ def _process_pauli_measurement_results( measurement_results = circuit_result.measurements["m"] pauli_strs = pauli_string_groups[pauli_group_index] pauli_readout_qubits = _extract_readout_qubits(pauli_strs) - - calibration_result = calibration_results[tuple(pauli_readout_qubits)] if disable_readout_mitigation is False else None + + calibration_result = ( + calibration_results[tuple(pauli_readout_qubits)] + if disable_readout_mitigation is False + else None + ) for pauli_str in pauli_strs: qubits_sorted = sorted(pauli_str.qubits) qubit_indices = [qubits.index(q) for q in qubits_sorted] - pauli_str_calibration_result = _build_pauli_string_calibration_result(calibration_result, qubits_sorted) if disable_readout_mitigation is False else None + pauli_str_calibration_result = ( + _build_pauli_string_calibration_result(calibration_result, qubits_sorted) + if disable_readout_mitigation is False + else None + ) confusion_matrices = ( _build_many_one_qubits_confusion_matrix(pauli_str_calibration_result) if disable_readout_mitigation is False @@ -372,9 +387,7 @@ def _process_pauli_measurement_results( mitigated_stddev=d_m_with_coefficient, unmitigated_expectation=unmitigated_value_with_coefficient, unmitigated_stddev=d_unmit_with_coefficient, - calibration_result=( - pauli_str_calibration_result - ), + calibration_result=(pauli_str_calibration_result), ) ) From 0cd202a7fd21637e5a2773714432317fa1cd2470 Mon Sep 17 00:00:00 2001 From: ddddddanni Date: Tue, 10 Jun 2025 18:06:53 -0700 Subject: [PATCH 03/10] remote unnecessary file --- gitstat.log | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 gitstat.log diff --git a/gitstat.log b/gitstat.log deleted file mode 100644 index 6317b3669db..00000000000 --- a/gitstat.log +++ /dev/null @@ -1,14 +0,0 @@ -ea797f21 Fix lint - 2 files changed, 18 insertions(+), 15 deletions(-) -188d3bbc Fix type - 2 files changed, 26 insertions(+), 24 deletions(-) -42abf661 Fix format - 2 files changed, 45 insertions(+), 31 deletions(-) -71dfdada Add more tests and fix some code - 2 files changed, 175 insertions(+), 12 deletions(-) -374f409a Modify the pauli string measurement tool to allow a group of paulis been measured using the same measurement results - 2 files changed, 338 insertions(+), 105 deletions(-) -b3561b44 Add a tool for measuring expectation values of Pauli strings with readout error mitigation (#7067) - 5 files changed, 1084 insertions(+), 93 deletions(-) -eec204f2 Add a function for running circuits in a shuffled order with readout error benchmarking. (#6945) - 3 files changed, 549 insertions(+) From 02717e1e7ef13b6792b43cc53e849123d104e9cc Mon Sep 17 00:00:00 2001 From: ddddddanni Date: Wed, 11 Jun 2025 09:41:15 -0700 Subject: [PATCH 04/10] Fix dependency --- .../pauli_string_measurement_with_readout_mitigation.py | 2 +- .../pauli_string_measurement_with_readout_mitigation_test.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py b/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py index 505a77a8099..abab1ca586c 100644 --- a/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py +++ b/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py @@ -21,7 +21,7 @@ from cirq import circuits, ops, work from cirq.contrib.shuffle_circuits import run_shuffled_with_readout_benchmarking -from cirq.experiments import SingleQubitReadoutCalibrationResult +from cirq.experiments.single_qubit_readout_calibration import SingleQubitReadoutCalibrationResult from cirq.experiments.readout_confusion_matrix import TensoredConfusionMatrices from cirq.study import ResultDict diff --git a/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation_test.py b/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation_test.py index d0e7cdf4b51..16186cd70fe 100644 --- a/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation_test.py +++ b/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation_test.py @@ -21,7 +21,7 @@ import cirq from cirq.contrib.paulistring import measure_pauli_strings -from cirq.experiments import SingleQubitReadoutCalibrationResult +from cirq.experiments.single_qubit_readout_calibration import SingleQubitReadoutCalibrationResult from cirq.experiments.single_qubit_readout_calibration_test import NoisySingleQubitReadoutSampler From 145038c1c6bbb73b6db9a6814994528901f7b810 Mon Sep 17 00:00:00 2001 From: ddddddanni Date: Wed, 11 Jun 2025 15:40:39 -0700 Subject: [PATCH 05/10] Fix format and type check --- ...ing_measurement_with_readout_mitigation.py | 35 ++++++++++++------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py b/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py index 76b85fbfb61..f71115b9fcb 100644 --- a/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py +++ b/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py @@ -25,11 +25,10 @@ from cirq import circuits, ops, work from cirq.contrib.shuffle_circuits import run_shuffled_with_readout_benchmarking -from cirq.experiments.single_qubit_readout_calibration import SingleQubitReadoutCalibrationResult from cirq.experiments.readout_confusion_matrix import TensoredConfusionMatrices if TYPE_CHECKING: - from cirq.experiments import SingleQubitReadoutCalibrationResult + from cirq.experiments.single_qubit_readout_calibration import SingleQubitReadoutCalibrationResult from cirq.study import ResultDict @@ -353,16 +352,26 @@ def _process_pauli_measurement_results( qubits_sorted = sorted(pauli_str.qubits) qubit_indices = [qubits.index(q) for q in qubits_sorted] - pauli_str_calibration_result = ( - _build_pauli_string_calibration_result(calibration_result, qubits_sorted) - if disable_readout_mitigation is False - else None - ) - confusion_matrices = ( - _build_many_one_qubits_confusion_matrix(pauli_str_calibration_result) - if disable_readout_mitigation is False - else _build_many_one_qubits_empty_confusion_matrix(len(qubits_sorted)) - ) + if disable_readout_mitigation: + pauli_str_calibration_result = None + confusion_matrices = _build_many_one_qubits_empty_confusion_matrix( + len(qubits_sorted) + ) + else: + if calibration_result is None: + # This case should be logically impossible if mitigation is on, + # so we raise an error. + raise ValueError( + f"Readout mitigation is enabled, but no calibration result was " + f"found for qubits {pauli_readout_qubits}." + ) + pauli_str_calibration_result = _build_pauli_string_calibration_result( + calibration_result, qubits_sorted + ) + confusion_matrices = _build_many_one_qubits_confusion_matrix( + pauli_str_calibration_result + ) + tensored_cm = TensoredConfusionMatrices( confusion_matrices, [[q] for q in qubits_sorted], @@ -394,7 +403,7 @@ def _process_pauli_measurement_results( mitigated_stddev=d_m_with_coefficient, unmitigated_expectation=unmitigated_value_with_coefficient, unmitigated_stddev=d_unmit_with_coefficient, - calibration_result=(pauli_str_calibration_result), + calibration_result=pauli_str_calibration_result, ) ) From 61215b23903c8f88e265862a3bd7de0d86b39adf Mon Sep 17 00:00:00 2001 From: ddddddanni Date: Wed, 11 Jun 2025 16:10:37 -0700 Subject: [PATCH 06/10] Move SingleQubitReadoutCalibrationResult out of type check --- .../pauli_string_measurement_with_readout_mitigation.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py b/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py index f71115b9fcb..e1187763a0a 100644 --- a/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py +++ b/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py @@ -26,9 +26,11 @@ from cirq import circuits, ops, work from cirq.contrib.shuffle_circuits import run_shuffled_with_readout_benchmarking from cirq.experiments.readout_confusion_matrix import TensoredConfusionMatrices +from cirq.experiments.single_qubit_readout_calibration import ( + SingleQubitReadoutCalibrationResult, +) if TYPE_CHECKING: - from cirq.experiments.single_qubit_readout_calibration import SingleQubitReadoutCalibrationResult from cirq.study import ResultDict From aba7de3bdb4a934a1e40c6433e41bb1dc1633e49 Mon Sep 17 00:00:00 2001 From: ddddddanni Date: Wed, 11 Jun 2025 16:12:01 -0700 Subject: [PATCH 07/10] fix format again :) --- .../pauli_string_measurement_with_readout_mitigation.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py b/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py index e1187763a0a..3bad7756208 100644 --- a/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py +++ b/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py @@ -26,9 +26,7 @@ from cirq import circuits, ops, work from cirq.contrib.shuffle_circuits import run_shuffled_with_readout_benchmarking from cirq.experiments.readout_confusion_matrix import TensoredConfusionMatrices -from cirq.experiments.single_qubit_readout_calibration import ( - SingleQubitReadoutCalibrationResult, -) +from cirq.experiments.single_qubit_readout_calibration import SingleQubitReadoutCalibrationResult if TYPE_CHECKING: from cirq.study import ResultDict From f6cda49a516a82f4c216ae01d950800b9aefd659 Mon Sep 17 00:00:00 2001 From: ddddddanni Date: Mon, 23 Jun 2025 15:23:44 -0700 Subject: [PATCH 08/10] Make changes based on @Nour's suggestions. --- ...ing_measurement_with_readout_mitigation.py | 26 ++----------- ...easurement_with_readout_mitigation_test.py | 37 +++++++++++++++++++ .../single_qubit_readout_calibration.py | 11 ++++++ 3 files changed, 51 insertions(+), 23 deletions(-) diff --git a/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py b/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py index 3bad7756208..279f72e134c 100644 --- a/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py +++ b/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py @@ -219,27 +219,7 @@ def _normalize_input_paulis( def _extract_readout_qubits(pauli_strings: list[ops.PauliString]) -> list[ops.Qid]: """Extracts unique qubits from a list of QWC Pauli strings.""" - qubits = set() - for pauli_str in pauli_strings: - for qubit in pauli_str.qubits: - qubits.add(qubit) - return sorted(qubits) - - -def _build_pauli_string_calibration_result( - qubits_to_error: SingleQubitReadoutCalibrationResult, readout_qubits: list[ops.Qid] -) -> SingleQubitReadoutCalibrationResult: - """Builds a calibration result for the specific readout qubits.""" - return SingleQubitReadoutCalibrationResult( - zero_state_errors={ - qubit: qubits_to_error.zero_state_errors[qubit] for qubit in readout_qubits - }, - one_state_errors={ - qubit: qubits_to_error.one_state_errors[qubit] for qubit in readout_qubits - }, - timestamp=qubits_to_error.timestamp, - repetitions=qubits_to_error.repetitions, - ) + return sorted(set(q for ps in pauli_strings for q in ps.qubits)) def _pauli_strings_to_basis_change_ops( @@ -365,8 +345,8 @@ def _process_pauli_measurement_results( f"Readout mitigation is enabled, but no calibration result was " f"found for qubits {pauli_readout_qubits}." ) - pauli_str_calibration_result = _build_pauli_string_calibration_result( - calibration_result, qubits_sorted + pauli_str_calibration_result = calibration_result.readout_result_for_qubits( + qubits_sorted ) confusion_matrices = _build_many_one_qubits_confusion_matrix( pauli_str_calibration_result diff --git a/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation_test.py b/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation_test.py index 36a41b083a5..1992ead250d 100644 --- a/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation_test.py +++ b/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation_test.py @@ -23,6 +23,9 @@ import cirq from cirq.contrib.paulistring import measure_pauli_strings +from cirq.contrib.paulistring.pauli_string_measurement_with_readout_mitigation import ( + _process_pauli_measurement_results, +) from cirq.experiments.single_qubit_readout_calibration import SingleQubitReadoutCalibrationResult from cirq.experiments.single_qubit_readout_calibration_test import NoisySingleQubitReadoutSampler @@ -867,3 +870,37 @@ def test_group_paulis_type_mismatch() -> None: measure_pauli_strings( circuits_to_pauli, cirq.Simulator(), 1000, 1000, 1000, np.random.default_rng() ) + + +def test_process_pauli_measurement_results_raises_error_on_missing_calibration() -> None: + """Test that the function raises an error if the calibration result is missing.""" + qubits: list[cirq.Qid] = [q for q in cirq.LineQubit.range(5)] + + measurement_op = cirq.measure(*qubits, key='m') + test_circuits = list[cirq.Circuit]() + for _ in range(3): + circuit_list = [] + + circuit = _create_ghz(5, qubits) + measurement_op + circuit_list.append(circuit) + test_circuits.extend(circuit_list) + + pauli_strings = [_generate_random_pauli_string(qubits, True) for _ in range(3)] + sampler = cirq.Simulator() + + circuit_results = sampler.run_batch(test_circuits, repetitions=1000) + + empty_calibration_result_dict = {tuple(qubits): None} + + with pytest.raises( + ValueError, + match="Readout mitigation is enabled, but no calibration result was found for qubits", + ): + _process_pauli_measurement_results( + qubits, + [pauli_strings], + circuit_results[0], # type: ignore[arg-type] + empty_calibration_result_dict, # type: ignore[arg-type] + 1000, + 1.0, + ) diff --git a/cirq-core/cirq/experiments/single_qubit_readout_calibration.py b/cirq-core/cirq/experiments/single_qubit_readout_calibration.py index 5c0378ee6db..eaa1ce55b41 100644 --- a/cirq-core/cirq/experiments/single_qubit_readout_calibration.py +++ b/cirq-core/cirq/experiments/single_qubit_readout_calibration.py @@ -179,6 +179,17 @@ def plot_integrated_histogram( ax.set_ylabel('Percentile') return ax + def readout_result_for_qubits( + self, readout_qubits: list[ops.Qid] + ) -> SingleQubitReadoutCalibrationResult: + """Builds a calibration result for the specific readout qubits.""" + return SingleQubitReadoutCalibrationResult( + zero_state_errors={qubit: self.zero_state_errors[qubit] for qubit in readout_qubits}, + one_state_errors={qubit: self.one_state_errors[qubit] for qubit in readout_qubits}, + timestamp=self.timestamp, + repetitions=self.repetitions, + ) + @classmethod def _from_json_dict_( cls, zero_state_errors, one_state_errors, repetitions, timestamp, **kwargs From 0b48d9ba43b13c77a12fc35741ea2a1bf23dc032 Mon Sep 17 00:00:00 2001 From: ddddddanni Date: Mon, 23 Jun 2025 16:22:33 -0700 Subject: [PATCH 09/10] Fix lint --- .../pauli_string_measurement_with_readout_mitigation.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py b/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py index 279f72e134c..9bb508b02de 100644 --- a/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py +++ b/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py @@ -26,10 +26,12 @@ from cirq import circuits, ops, work from cirq.contrib.shuffle_circuits import run_shuffled_with_readout_benchmarking from cirq.experiments.readout_confusion_matrix import TensoredConfusionMatrices -from cirq.experiments.single_qubit_readout_calibration import SingleQubitReadoutCalibrationResult if TYPE_CHECKING: from cirq.study import ResultDict + from cirq.experiments.single_qubit_readout_calibration import ( + SingleQubitReadoutCalibrationResult, + ) @attrs.frozen From 27fa0edb9469f75b468abc1d1be61a765ba71423 Mon Sep 17 00:00:00 2001 From: ddddddanni Date: Mon, 23 Jun 2025 16:23:39 -0700 Subject: [PATCH 10/10] Fix format --- .../pauli_string_measurement_with_readout_mitigation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py b/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py index 9bb508b02de..0928db748f3 100644 --- a/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py +++ b/cirq-core/cirq/contrib/paulistring/pauli_string_measurement_with_readout_mitigation.py @@ -28,10 +28,10 @@ from cirq.experiments.readout_confusion_matrix import TensoredConfusionMatrices if TYPE_CHECKING: - from cirq.study import ResultDict from cirq.experiments.single_qubit_readout_calibration import ( SingleQubitReadoutCalibrationResult, ) + from cirq.study import ResultDict @attrs.frozen