def test_record_channel_measurement_errors(): cd = cirq.ClassicalDataDictionaryStore() cd.record_channel_measurement(mkey_m, 1) cd.record_channel_measurement(mkey_m, 1) with pytest.raises(ValueError, match='Channel Measurement already logged to key m'): cd.record_measurement(mkey_m, (0, 1), two_qubits) cd = cirq.ClassicalDataDictionaryStore() cd.record_measurement(mkey_m, (0, 1), two_qubits) cd.record_measurement(mkey_m, (0, 1), two_qubits) with pytest.raises(ValueError, match='Measurement already logged to key m'): cd.record_channel_measurement(mkey_m, 1)
def test_get_int(): cd = cirq.ClassicalDataDictionaryStore() cd.record_measurement(mkey_m, (0, 1), two_qubits) assert cd.get_int(mkey_m) == 1 cd = cirq.ClassicalDataDictionaryStore() cd.record_measurement(mkey_m, (1, 1), two_qubits) assert cd.get_int(mkey_m) == 3 cd = cirq.ClassicalDataDictionaryStore() cd.record_channel_measurement(mkey_m, 1) assert cd.get_int(mkey_m) == 1 cd = cirq.ClassicalDataDictionaryStore() cd.record_measurement(mkey_m, (1, 1), (cirq.LineQid.range(2, dimension=3))) assert cd.get_int(mkey_m) == 4 cd = cirq.ClassicalDataDictionaryStore() with pytest.raises(KeyError, match='The measurement key m is not in {}'): cd.get_int(mkey_m)
def test_simulation_state_initializer(): s = ccq.mps_simulator.MPSState( qubits=(cirq.LineQubit(0), ), prng=np.random.RandomState(0), classical_data=cirq.ClassicalDataDictionaryStore( _records={cirq.MeasurementKey('test'): [(4, )]}), ) assert s.qubits == (cirq.LineQubit(0), ) assert s.log_of_measurement_results == {'test': [4]}
def test_init(): cd = cirq.ClassicalDataDictionaryStore() assert cd.records == {} assert cd.keys() == () assert cd.measured_qubits == {} assert cd.channel_records == {} assert cd.measurement_types == {} cd = cirq.ClassicalDataDictionaryStore( _records={mkey_m: [(0, 1)]}, _measured_qubits={mkey_m: [two_qubits]}, _channel_records={mkey_c: [3]}, ) assert cd.records == {mkey_m: [(0, 1)]} assert cd.keys() == (mkey_m, mkey_c) assert cd.measured_qubits == {mkey_m: [two_qubits]} assert cd.channel_records == {mkey_c: [3]} assert cd.measurement_types == { mkey_m: cirq.MeasurementType.MEASUREMENT, mkey_c: cirq.MeasurementType.CHANNEL, }
def test_repr(): cd = cirq.ClassicalDataDictionaryStore( _records={mkey_m: [(0, 1)]}, _measured_qubits={mkey_m: [two_qubits]}, _channel_records={mkey_c: [3]}, _measurement_types={ mkey_m: cirq.MeasurementType.MEASUREMENT, mkey_c: cirq.MeasurementType.CHANNEL, }, ) cirq.testing.assert_equivalent_repr(cd)
def test_run(): (q0, q1, q2) = (cirq.LineQubit(0), cirq.LineQubit(1), cirq.LineQubit(2)) """ 0: ───H───@───────────────X───M─────────── │ 1: ───────X───@───────X───────────X───M─── │ │ 2: ───────────X───M───────────────@─────── After the third moment, before the measurement, the state is |000> + |111>. After measurement of q2, q0 and q1 both get a bit flip, so the q0 measurement always yields opposite of the q2 measurement. q1 has an additional controlled not from q2, making it yield 1 always when measured. If there were no measurements in the circuit, the final state would be |110> + |011>. """ circuit = cirq.Circuit( cirq.H(q0), cirq.CNOT(q0, q1), cirq.CNOT(q1, q2), cirq.measure(q2), cirq.X(q1), cirq.X(q0), cirq.measure(q0), cirq.CNOT(q2, q1), cirq.measure(q1), strategy=cirq.InsertStrategy.NEW, ) for _ in range(10): state = cirq.StabilizerStateChForm(num_qubits=3) classical_data = cirq.ClassicalDataDictionaryStore() for op in circuit.all_operations(): args = cirq.StabilizerChFormSimulationState( qubits=list(circuit.all_qubits()), prng=np.random.RandomState(), classical_data=classical_data, initial_state=state, ) cirq.act_on(op, args) measurements = { str(k): list(v[-1]) for k, v in classical_data.records.items() } assert measurements['q(1)'] == [1] assert measurements['q(0)'] != measurements['q(2)']
def test_record_measurement_errors(): cd = cirq.ClassicalDataDictionaryStore() with pytest.raises(ValueError, match='3 measurements but 2 qubits'): cd.record_measurement(mkey_m, (0, 1, 2), two_qubits) cd.record_measurement(mkey_m, (0, 1), two_qubits) cd.record_measurement(mkey_m, (1, 0), two_qubits) with pytest.raises( ValueError, match=re.escape( 'Measurement shape (2, 2, 2) does not match (2, 2) in m')): cd.record_measurement(mkey_m, (1, 0, 4), tuple(cirq.LineQubit.range(3))) with pytest.raises( ValueError, match=re.escape( 'Measurement shape (3, 3) does not match (2, 2) in m')): cd.record_measurement(mkey_m, (1, 0), tuple(cirq.LineQid.range(2, dimension=3)))
def test_copy(): cd = cirq.ClassicalDataDictionaryStore( _records={mkey_m: [(0, 1)]}, _measured_qubits={mkey_m: [two_qubits]}, _channel_records={mkey_c: [3]}, _measurement_types={ mkey_m: cirq.MeasurementType.MEASUREMENT, mkey_c: cirq.MeasurementType.CHANNEL, }, ) cd1 = cd.copy() assert cd1 is not cd assert cd1 == cd assert cd1.records is not cd.records assert cd1.records == cd.records assert cd1.measured_qubits is not cd.measured_qubits assert cd1.measured_qubits == cd.measured_qubits assert cd1.channel_records is not cd.channel_records assert cd1.channel_records == cd.channel_records assert cd1.measurement_types is not cd.measurement_types assert cd1.measurement_types == cd.measurement_types
def resolve(records): classical_data = cirq.ClassicalDataDictionaryStore(_records=records) return init_sympy_condition.resolve(classical_data)
def test_record_channel_measurement(): cd = cirq.ClassicalDataDictionaryStore() cd.record_channel_measurement(mkey_m, 1) assert cd.channel_records == {mkey_m: [1]} assert cd.keys() == (mkey_m, )
def test_record_measurement(): cd = cirq.ClassicalDataDictionaryStore() cd.record_measurement(mkey_m, (0, 1), two_qubits) assert cd.records == {mkey_m: [(0, 1)]} assert cd.keys() == (mkey_m, ) assert cd.measured_qubits == {mkey_m: [two_qubits]}