def test_measurement_gate_diagram(): # Shows observable & key. assert cirq.circuit_diagram_info( cirq.PauliMeasurementGate([cirq.X], key='test') ) == cirq.CircuitDiagramInfo(("M(X)('test')",)) # Shows multiple observables. assert cirq.circuit_diagram_info( cirq.PauliMeasurementGate([cirq.X, cirq.Y, cirq.Z], 'a') ) == cirq.CircuitDiagramInfo(("M(X)('a')", 'M(Y)', 'M(Z)')) # Omits key when it is the default. a = cirq.NamedQubit('a') b = cirq.NamedQubit('b') cirq.testing.assert_has_diagram( cirq.Circuit(cirq.measure_single_paulistring(cirq.X(a) * cirq.Y(b))), """ a: ───M(X)─── │ b: ───M(Y)─── """, ) cirq.testing.assert_has_diagram( cirq.Circuit(cirq.measure_single_paulistring(cirq.X(a) * cirq.Y(b), key='test')), """ a: ───M(X)('test')─── │ b: ───M(Y)─────────── """, )
def test_op_repr(): a, b, c = cirq.LineQubit.range(3) ps = cirq.X(a) * cirq.Y(b) * cirq.Z(c) assert (repr(cirq.measure_single_paulistring(ps)) == 'cirq.measure_single_paulistring((cirq.X(cirq.LineQubit(0))' '*cirq.Y(cirq.LineQubit(1))*cirq.Z(cirq.LineQubit(2))))') assert (repr(cirq.measure_single_paulistring(ps, key='out')) == "cirq.measure_single_paulistring((cirq.X(cirq.LineQubit(0))" "*cirq.Y(cirq.LineQubit(1))*cirq.Z(cirq.LineQubit(2))), " "key=cirq.MeasurementKey(name='out'))")
def test_measure_single_paulistring(): # Correct application q = cirq.LineQubit.range(3) ps = cirq.X(q[0]) * cirq.Y(q[1]) * cirq.Z(q[2]) assert cirq.measure_single_paulistring(ps, key='a') == cirq.PauliMeasurementGate( ps.values(), key='a' ).on(*ps.keys()) # Empty application with pytest.raises(ValueError, match='should be an instance of cirq.PauliString'): _ = cirq.measure_single_paulistring(cirq.I(q[0]) * cirq.I(q[1])) # Wrong type with pytest.raises(ValueError, match='should be an instance of cirq.PauliString'): _ = cirq.measure_single_paulistring(q)
def test_mapped_circuit_keeps_keys_under_parent_path(): q = cirq.LineQubit(0) op1 = cirq.CircuitOperation( cirq.FrozenCircuit( cirq.measure(q, key='A'), cirq.measure_single_paulistring(cirq.X(q), key='B'), cirq.MixedUnitaryChannel.from_mixture(cirq.bit_flip(0.5), key='C').on(q), cirq.KrausChannel.from_channel(cirq.phase_damp(0.5), key='D').on(q), ) ) op2 = op1.with_key_path(('X',)) assert cirq.measurement_key_names(op2.mapped_circuit()) == {'X:A', 'X:B', 'X:C', 'X:D'}
def test_diagram_pauli(): q0, q1 = cirq.LineQubit.range(2) circuit = cirq.Circuit( cirq.measure_single_paulistring(cirq.X(q0), key='a'), cirq.X(q1).with_classical_controls('a'), ) cirq.testing.assert_has_diagram( circuit, """ 0: ───M(X)─────── ║ 1: ───╫──────X─── ║ ║ a: ═══@══════^═══ """, use_unicode_characters=True, )