def test_naive_decoder_decode(error): code = FiveQubitCode() decoder = NaiveDecoder() syndrome = pt.bsp(error, code.stabilizers.T) recovery = decoder.decode(code, syndrome) assert np.array_equal(pt.bsp(recovery, code.stabilizers.T), syndrome), ( 'recovery {} does not give the same syndrome as the error {}'.format( recovery, error)) assert np.all(pt.bsp(recovery ^ error, code.stabilizers.T) == 0), ( 'recovery ^ error ({} ^ {}) does not commute with stabilizers.'.format( recovery, error))
def test_run_count(max_runs, max_failures): code = FiveQubitCode() error_model = BitPhaseFlipErrorModel() decoder = NaiveDecoder() error_probability = 0.05 data = app.run(code, error_model, decoder, error_probability, max_runs=max_runs, max_failures=max_failures) # no error raised assert {'n_run', 'n_fail'} <= data.keys(), 'data={} missing count keys' if max_runs is None and max_failures is None: assert data['n_run'] == 1, 'n_run does not equal 1 when max_runs and max_failures unspecified' if max_runs is not None: assert data['n_run'] <= max_runs, ('n_run is not <= requested max_runs (data={}).'.format(data)) if max_failures is not None: assert data['n_fail'] <= max_failures, ('n_fail is not <= requested max_failures (data={}).'.format(data))
def test_naive_decoder_properties(): decoder = NaiveDecoder() assert isinstance(decoder.label, str) assert isinstance(repr(decoder), str) assert isinstance(str(decoder), str)
def test_naive_decoder_max_qubits_override(): code = SteaneCode() decoder = NaiveDecoder(max_qubits=None) decoder.decode(code, []) # no error raised
def test_naive_decoder_max_qubits_limit(): code = SteaneCode() decoder = NaiveDecoder(max_qubits=5) with pytest.raises(ValueError): decoder.decode(code, None)
def test_naive_decoder_new_invalid_parameters(max_qubits): with pytest.raises((ValueError, TypeError), match=r"^NaiveDecoder") as exc_info: NaiveDecoder(max_qubits) print(exc_info)
def test_naive_decoder_new_valid_parameters(max_qubits): NaiveDecoder(max_qubits) # no error raised
def test_run_invalid_parameters(error_probability): with pytest.raises(ValueError) as exc_info: app.run(FiveQubitCode(), DepolarizingErrorModel(), NaiveDecoder(), error_probability, max_runs=2) print(exc_info)
class _FixedDecoder(Decoder): def __init__(self, decoding): self.decoding = decoding def decode(self, code, syndrome, **kwargs): return self.decoding @property def label(self): return 'fixed' @pytest.mark.parametrize('code, error_model, decoder', [ # each code with each valid decoder (Color666Code(5), DepolarizingErrorModel(), Color666MPSDecoder(chi=8)), (FiveQubitCode(), DepolarizingErrorModel(), NaiveDecoder()), (PlanarCode(5, 5), DepolarizingErrorModel(), PlanarCMWPMDecoder()), (PlanarCode(5, 5), DepolarizingErrorModel(), PlanarMPSDecoder(chi=6)), (PlanarCode(5, 5), DepolarizingErrorModel(), PlanarMWPMDecoder()), (PlanarCode(5, 5), DepolarizingErrorModel(), PlanarRMPSDecoder(chi=6)), (PlanarCode(4, 5), BitPhaseFlipErrorModel(), PlanarYDecoder()), (RotatedPlanarCode(7, 7), DepolarizingErrorModel(), RotatedPlanarMPSDecoder(chi=8)), (RotatedPlanarCode(7, 7), DepolarizingErrorModel(), RotatedPlanarRMPSDecoder(chi=8)), (RotatedPlanarCode(7, 7), BiasedDepolarizingErrorModel(100), RotatedPlanarSMWPMDecoder()), (RotatedToricCode(6, 6), BiasedDepolarizingErrorModel(100), RotatedToricSMWPMDecoder()), (SteaneCode(), DepolarizingErrorModel(), NaiveDecoder()), (ToricCode(5, 5), DepolarizingErrorModel(), ToricMWPMDecoder()), # each generic noise model (PlanarCode(5, 5), BiasedDepolarizingErrorModel(10), PlanarMPSDecoder(chi=6)), (PlanarCode(5, 5), BiasedYXErrorModel(10), PlanarMPSDecoder(chi=6)), (PlanarCode(5, 5), BitFlipErrorModel(), PlanarMPSDecoder(chi=6)),