def test_repr(): def test_repr(qid: _MeasurementQid): cirq.testing.assert_equivalent_repr(qid, global_vals={'_MeasurementQid': _MeasurementQid}) test_repr(_MeasurementQid('a', cirq.LineQubit(0))) test_repr(_MeasurementQid('a', cirq.NamedQubit('x'))) test_repr(_MeasurementQid('a', cirq.NamedQid('x', 4))) test_repr(_MeasurementQid('a', cirq.GridQubit(2, 3))) test_repr(_MeasurementQid('0:1:a', cirq.LineQid(9, 4)))
def test_multi_qubit_measurements(): q0, q1 = cirq.LineQubit.range(2) circuit = cirq.Circuit( cirq.measure(q0, q1, key='a'), cirq.X(q0), cirq.measure(q0, key='b'), cirq.measure(q1, key='c'), ) assert_equivalent_to_deferred(circuit) deferred = cirq.defer_measurements(circuit) q_ma0 = _MeasurementQid('a', q0) q_ma1 = _MeasurementQid('a', q1) cirq.testing.assert_same_circuits( deferred, cirq.Circuit( cirq.CX(q0, q_ma0), cirq.CX(q1, q_ma1), cirq.X(q0), cirq.measure(q_ma0, q_ma1, key='a'), cirq.measure(q0, key='b'), cirq.measure(q1, key='c'), ), )
def test_extra_control_bits(): q0, q1 = cirq.LineQubit.range(2) circuit = cirq.Circuit( cirq.measure(q0, key='a'), cirq.measure(q0, key='b'), cirq.X(q1).with_classical_controls('a', 'b'), cirq.measure(q1, key='c'), ) assert_equivalent_to_deferred(circuit) deferred = cirq.defer_measurements(circuit) q_ma = _MeasurementQid('a', q0) q_mb = _MeasurementQid('b', q0) cirq.testing.assert_same_circuits( deferred, cirq.Circuit( cirq.CX(q0, q_ma), cirq.CX(q0, q_mb), cirq.CCX(q_ma, q_mb, q1), cirq.measure(q_ma, key='a'), cirq.measure(q_mb, key='b'), cirq.measure(q1, key='c'), ), )
def test_pauli(): q0, q1 = cirq.LineQubit.range(2) circuit = cirq.Circuit( cirq.PauliMeasurementGate(cirq.DensePauliString('Y'), key='a').on(q0), cirq.X(q1).with_classical_controls('a'), cirq.measure(q1, key='b'), ) deferred = cirq.defer_measurements(circuit) q_ma = _MeasurementQid('a', q0) cirq.testing.assert_same_circuits( cirq.unroll_circuit_op(deferred), cirq.Circuit( cirq.SingleQubitCliffordGate.X_sqrt(q0), cirq.CX(q0, q_ma), (cirq.SingleQubitCliffordGate.X_sqrt(q0)**-1), cirq.Moment(cirq.CX(q_ma, q1)), cirq.measure(q_ma, key='a'), cirq.measure(q1, key='b'), ), )
def test_subcircuit(): q0, q1 = cirq.LineQubit.range(2) circuit = cirq.Circuit( cirq.CircuitOperation( cirq.FrozenCircuit( cirq.measure(q0, key='a'), cirq.X(q1).with_classical_controls('a'), cirq.measure(q1, key='b'), ))) assert_equivalent_to_deferred(circuit) deferred = cirq.defer_measurements(circuit) q_m = _MeasurementQid('a', q0) cirq.testing.assert_same_circuits( deferred, cirq.Circuit( cirq.CX(q0, q_m), cirq.CX(q_m, q1), cirq.measure(q_m, key='a'), cirq.measure(q1, key='b'), ), )