diff --git a/src/qce_interp/decoder_examples/majority_voting.py b/src/qce_interp/decoder_examples/majority_voting.py index eb68ea4..9b5c8cf 100644 --- a/src/qce_interp/decoder_examples/majority_voting.py +++ b/src/qce_interp/decoder_examples/majority_voting.py @@ -3,6 +3,7 @@ # https://arxiv.org/pdf/1703.04136.pdf # ------------------------------------------- import numpy as np +from qce_circuit.connectivity.intrf_connectivity_surface_code import StabilizerType from qce_interp.interface_definitions.intrf_error_identifier import IErrorDetectionIdentifier from qce_interp.interface_definitions.intrf_syndrome_decoder import IDecoder from qce_interp.interface_definitions.intrf_state_classification import IStateClassifierContainer @@ -22,8 +23,9 @@ class MajorityVotingDecoder(IDecoder): """ # region Class Constructor - def __init__(self, error_identifier: IErrorDetectionIdentifier): + def __init__(self, error_identifier: IErrorDetectionIdentifier, initial_state_basis: StabilizerType = StabilizerType.STABILIZER_Z): self._error_identifier: IErrorDetectionIdentifier = error_identifier + self._initial_state_basis: StabilizerType = initial_state_basis # endregion # region ILookupDecoder Interface Methods @@ -40,7 +42,9 @@ def get_fidelity(self, cycle_stabilizer_count: int, target_state: np.ndarray) -> # (N, D) corrected_binary_output: np.ndarray = binary_output.reshape((n, d)) # Correct for refocusing (bit-flips) - if cycle_stabilizer_count % 2 == 0 and cycle_stabilizer_count != 0: + if self._initial_state_basis == StabilizerType.STABILIZER_X: + corrected_binary_output = corrected_binary_output ^ 1 + elif cycle_stabilizer_count % 2 == 0 and cycle_stabilizer_count != 0: corrected_binary_output = IStateClassifierContainer.binary_to_eigenvalue(corrected_binary_output) * -1 corrected_binary_output = IStateClassifierContainer.eigenvalue_to_binary(corrected_binary_output) diff --git a/src/qce_interp/visualization/plot_logical_fidelity.py b/src/qce_interp/visualization/plot_logical_fidelity.py index 5daec1a..db673e4 100644 --- a/src/qce_interp/visualization/plot_logical_fidelity.py +++ b/src/qce_interp/visualization/plot_logical_fidelity.py @@ -213,7 +213,7 @@ def plot_fidelity(decoder: IDecoder, included_rounds: List[int], target_state: I ) contains_nan_values: bool = np.isnan(y_array).any() if fit_error_rate and not contains_nan_values: - code_distance: int = len(target_state.as_ordered_array(qubit_order=target_state_order)) + code_distance: int = target_state.distance exclude_first_n: int = code_distance if code_distance < 5: exclude_first_n = 2 * code_distance