def test_optimize(): q0, q1 = cirq.LineQubit.range(2) c_orig = cirq.Circuit.from_ops( cirq.X(q1)**0.5, cirq.CZ(q0, q1), cirq.Z(q0)**0.25, cirq.X(q1)**0.25, cirq.CZ(q0, q1), cirq.X(q1)**-0.5, ) c_expected = converted_gate_set( cirq.Circuit.from_ops( cirq.CZ(q0, q1), cirq.Z(q0)**0.25, cirq.X(q1)**0.25, cirq.CZ(q0, q1), )) c_opt = clifford_optimized_circuit(c_orig) cirq.testing.assert_allclose_up_to_global_phase( c_orig.unitary(), c_opt.unitary(), atol=1e-7, ) assert c_opt == c_expected cirq.testing.assert_has_diagram( c_opt, """ 0: ───@───[Z]^0.25───@─── │ │ 1: ───@───[X]^0.25───@─── """)
def test_with_measurements(): q0, q1 = cirq.LineQubit.range(2) c_orig = cirq.Circuit.from_ops( cirq.X(q0), cirq.CZ(q0, q1), cirq.measure(q0, q1, key='m'), ) c_expected = converted_gate_set( cirq.Circuit.from_ops( cirq.CZ(q0, q1), cirq.X(q0), cirq.Z(q1), cirq.measure(q0, q1, key='m'), )) c_opt = clifford_optimized_circuit(c_orig) cirq.testing.assert_allclose_up_to_global_phase( c_orig.unitary(), c_opt.unitary(), atol=1e-7, ) assert c_opt == c_expected cirq.testing.assert_has_diagram( c_opt, """ 0: ───@───X───M('m')─── │ │ 1: ───@───Z───M──────── """)
def test_remove_staggered_czs(): q0, q1, q2 = cirq.LineQubit.range(3) c_orig = cirq.Circuit( cirq.CZ(q0, q1), cirq.CZ(q1, q2), cirq.CZ(q0, q1), ) c_expected = converted_gate_set(cirq.Circuit(cirq.CZ(q1, q2), )) c_opt = clifford_optimized_circuit(c_orig) cirq.testing.assert_allclose_up_to_global_phase( c_orig.unitary(), c_opt.unitary(qubits_that_should_be_present=(q0, q1, q2)), atol=1e-7, ) assert c_opt == c_expected cirq.testing.assert_has_diagram( c_opt, """ 1: ───@─── │ 2: ───@─── """, )
def test_optimize_large_circuit(): q0, q1, q2 = cirq.LineQubit.range(3) c_orig = cirq.testing.nonoptimal_toffoli_circuit(q0, q1, q2) c_opt = clifford_optimized_circuit(c_orig) cirq.testing.assert_allclose_up_to_global_phase(c_orig.unitary(), c_opt.unitary(), atol=1e-7)
def test_remove_czs(): q0, q1 = cirq.LineQubit.range(2) c_orig = cirq.Circuit(cirq.CZ(q0, q1), cirq.Z(q0)**0.5, cirq.CZ(q0, q1)) c_expected = converted_gate_set(cirq.Circuit(cirq.Z(q0)**0.5)) c_opt = clifford_optimized_circuit(c_orig) cirq.testing.assert_allclose_up_to_global_phase( c_orig.unitary(), c_opt.unitary(qubits_that_should_be_present=(q0, q1)), atol=1e-7) assert c_opt == c_expected cirq.testing.assert_has_diagram( c_opt, """ 0: ───Z^0.5─── """, )