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)
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)
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
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
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), ]