Example #1
0
def test_measurement_spec():
    q0, q1 = cirq.LineQubit.range(2)
    setting = InitObsSetting(init_state=cirq.KET_ZERO(q0) * cirq.KET_ZERO(q1),
                             observable=cirq.X(q0) * cirq.Y(q1))
    meas_spec = _MeasurementSpec(max_setting=setting,
                                 circuit_params={
                                     'beta': 0.123,
                                     'gamma': 0.456
                                 })
    meas_spec2 = _MeasurementSpec(max_setting=setting,
                                  circuit_params={
                                      'beta': 0.123,
                                      'gamma': 0.456
                                  })
    assert hash(meas_spec) == hash(meas_spec2)
    cirq.testing.assert_equivalent_repr(meas_spec)
Example #2
0
def test_measurement_spec_no_symbols():
    q0, q1 = cirq.LineQubit.range(2)
    setting = InitObsSetting(init_state=cirq.KET_ZERO(q0) * cirq.KET_ZERO(q1),
                             observable=cirq.X(q0) * cirq.Y(q1))
    meas_spec = _MeasurementSpec(max_setting=setting,
                                 circuit_params={'beta': sympy.Symbol('t')})
    with pytest.raises(ValueError, match='Cannot convert'):
        _ = hash(meas_spec)
Example #3
0
def _set_up_meas_specs_for_testing():
    q0, q1 = cirq.LineQubit.range(2)
    setting = cw.InitObsSetting(init_state=cirq.KET_ZERO(q0) *
                                cirq.KET_ZERO(q1),
                                observable=cirq.X(q0) * cirq.Y(q1))
    meas_spec = _MeasurementSpec(max_setting=setting,
                                 circuit_params={
                                     'beta': 0.123,
                                     'gamma': 0.456
                                 })
    bsa = cw.BitstringAccumulator(
        meas_spec, [], {q: i
                        for i, q in enumerate(cirq.LineQubit.range(3))})
    return bsa, meas_spec
Example #4
0
def test_meas_specs_still_todo():
    q0, q1 = cirq.LineQubit.range(2)
    setting = cw.InitObsSetting(init_state=cirq.KET_ZERO(q0) *
                                cirq.KET_ZERO(q1),
                                observable=cirq.X(q0) * cirq.Y(q1))
    meas_spec = _MeasurementSpec(
        max_setting=setting,
        circuit_params={
            'beta': 0.123,
            'gamma': 0.456,
        },
    )
    bsa = cw.BitstringAccumulator(
        meas_spec, [], {q: i
                        for i, q in enumerate(cirq.LineQubit.range(3))})

    # 1. before taking any data
    still_todo, reps = _check_meas_specs_still_todo(
        meas_specs=[meas_spec],
        accumulators={meas_spec: bsa},
        desired_repetitions=1_000)
    assert still_todo == [meas_spec]
    assert reps == 1_000

    # 2. After taking a mocked-out 997 shots.
    bsa.consume_results(np.zeros((997, 3), dtype=np.uint8))
    still_todo, reps = _check_meas_specs_still_todo(
        meas_specs=[meas_spec],
        accumulators={meas_spec: bsa},
        desired_repetitions=1_000)
    assert still_todo == [meas_spec]
    assert reps == 3

    # 3. After taking the final 3 shots
    bsa.consume_results(np.zeros((reps, 3), dtype=np.uint8))
    still_todo, reps = _check_meas_specs_still_todo(
        meas_specs=[meas_spec],
        accumulators={meas_spec: bsa},
        desired_repetitions=1_000)
    assert still_todo == []
    assert reps == 0
Example #5
0
def test_subdivide_meas_specs():

    qubits = cirq.LineQubit.range(2)
    q0, q1 = qubits
    setting = cw.InitObsSetting(init_state=cirq.KET_ZERO(q0) *
                                cirq.KET_ZERO(q1),
                                observable=cirq.X(q0) * cirq.Y(q1))
    meas_spec = cw._MeasurementSpec(
        max_setting=setting,
        circuit_params={
            'beta': 0.123,
            'gamma': 0.456,
        },
    )

    flippy_mspecs, repetitions = _subdivide_meas_specs(
        meas_specs=[meas_spec],
        repetitions=100_000,
        qubits=qubits,
        readout_symmetrization=True)
    fmspec1, fmspec2 = flippy_mspecs
    assert repetitions == 50_000
    assert fmspec1.meas_spec == meas_spec
    assert fmspec2.meas_spec == meas_spec
    assert np.all(fmspec2.flips)
    assert not np.any(fmspec1.flips)

    assert list(fmspec1.param_tuples()) == [
        ('0-Xf', 0),
        ('0-Yf', -0.5),
        ('0-Xi', 0),
        ('0-Yi', 0),
        ('1-Xf', 0.5),
        ('1-Yf', 0),
        ('1-Xi', 0),
        ('1-Yi', 0),
        ('beta', 0.123),
        ('gamma', 0.456),
    ]