Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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]}
Exemplo n.º 4
0
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,
    }
Exemplo n.º 5
0
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)']
Exemplo n.º 7
0
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)))
Exemplo n.º 8
0
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
Exemplo n.º 9
0
 def resolve(records):
     classical_data = cirq.ClassicalDataDictionaryStore(_records=records)
     return init_sympy_condition.resolve(classical_data)
Exemplo n.º 10
0
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, )
Exemplo n.º 11
0
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]}