Esempio n. 1
0
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))
Esempio n. 2
0
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))
Esempio n. 3
0
def test_naive_decoder_properties():
    decoder = NaiveDecoder()
    assert isinstance(decoder.label, str)
    assert isinstance(repr(decoder), str)
    assert isinstance(str(decoder), str)
Esempio n. 4
0
def test_naive_decoder_max_qubits_override():
    code = SteaneCode()
    decoder = NaiveDecoder(max_qubits=None)
    decoder.decode(code, [])  # no error raised
Esempio n. 5
0
def test_naive_decoder_max_qubits_limit():
    code = SteaneCode()
    decoder = NaiveDecoder(max_qubits=5)
    with pytest.raises(ValueError):
        decoder.decode(code, None)
Esempio n. 6
0
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)
Esempio n. 7
0
def test_naive_decoder_new_valid_parameters(max_qubits):
    NaiveDecoder(max_qubits)  # no error raised
Esempio n. 8
0
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)
Esempio n. 9
0
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)),