def test_dephase():
    q0, q1 = cirq.LineQubit.range(2)
    circuit = cirq.Circuit(
        cirq.CircuitOperation(
            cirq.FrozenCircuit(
                cirq.CX(q1, q0),
                cirq.measure(q0, key='a'),
                cirq.CX(q0, q1),
                cirq.measure(q1, key='b'),
            )))
    assert_equivalent_to_dephased(circuit)
    dephased = cirq.dephase_measurements(circuit)
    cirq.testing.assert_same_circuits(
        dephased,
        cirq.Circuit(
            cirq.CircuitOperation(
                cirq.FrozenCircuit(
                    cirq.CX(q1, q0),
                    cirq.KrausChannel.from_channel(cirq.phase_damp(1),
                                                   key='a')(q0),
                    cirq.CX(q0, q1),
                    cirq.KrausChannel.from_channel(cirq.phase_damp(1),
                                                   key='b')(q1),
                ))),
    )
def test_dephase_nocompile_context():
    q0, q1 = cirq.LineQubit.range(2)
    circuit = cirq.Circuit(
        cirq.CircuitOperation(
            cirq.FrozenCircuit(
                cirq.CX(q1, q0),
                cirq.measure(q0, key='a').with_tags('nocompile'),
                cirq.CX(q0, q1),
                cirq.measure(q1, key='b'),
            )))
    dephased = cirq.dephase_measurements(
        circuit,
        context=cirq.TransformerContext(tags_to_ignore=('nocompile', )))
    cirq.testing.assert_same_circuits(
        dephased,
        cirq.Circuit(
            cirq.CircuitOperation(
                cirq.FrozenCircuit(
                    cirq.CX(q1, q0),
                    cirq.measure(q0, key='a').with_tags('nocompile'),
                    cirq.CX(q0, q1),
                    cirq.KrausChannel.from_channel(cirq.phase_damp(1),
                                                   key='b')(q1),
                ))),
    )
Exemple #3
0
def test_dephase_classical_conditions():
    q0, q1 = cirq.LineQubit.range(2)
    circuit = cirq.Circuit(
        cirq.measure(q0, key='a'),
        cirq.X(q1).with_classical_controls('a'),
        cirq.measure(q1, key='b'),
    )
    with pytest.raises(ValueError, match='defer_measurements first to remove classical controls'):
        _ = cirq.dephase_measurements(circuit)
def assert_equivalent_to_dephased(circuit: cirq.Circuit):
    qubits = list(circuit.all_qubits())
    with cirq.testing.assert_deprecated('ignore_measurement_results',
                                        deadline='v0.15',
                                        count=14):
        sim = cirq.DensityMatrixSimulator(ignore_measurement_results=True)
        num_qubits = len(qubits)
        backwards = list(circuit.all_operations())[::-1]
        for j in range(num_qubits):
            backwards.append(cirq.H(qubits[j])**np.random.rand())
        modified = cirq.Circuit(backwards[::-1])
        for j in range(num_qubits):
            modified.append(cirq.H(qubits[j])**np.random.rand())
        dephased = cirq.dephase_measurements(modified)
        result = sim.simulate(modified)
        result1 = sim.simulate(dephased)
        np.testing.assert_almost_equal(result.final_density_matrix,
                                       result1.final_density_matrix)