def test_decomp2_invalid(u): q0, q1 = cirq.LineQubit.range(2) with pytest.raises( ValueError, match='cannot be decomposed into exactly 2 sqrt-iSWAP gates'): cirq.two_qubit_matrix_to_sqrt_iswap_operations( q0, q1, u, required_sqrt_iswap_count=2)
def test_decomp3_invalid(): # All two-qubit gates can be synthesized with three SQRT_ISWAP gates u = cirq.unitary(cirq.X**0.2) # Pass an invalid size unitary q0, q1 = cirq.LineQubit.range(2) with pytest.raises(ValueError, match='Input must correspond to a 4x4 unitary matrix'): cirq.two_qubit_matrix_to_sqrt_iswap_operations( q0, q1, u, required_sqrt_iswap_count=3)
def test_decomp0_invalid(u): # Attempt to decompose other unitaries into zero SQRT_ISWAP gates q0, q1 = cirq.LineQubit.range(2) with pytest.raises( ValueError, match='cannot be decomposed into exactly 0 sqrt-iSWAP gates'): cirq.two_qubit_matrix_to_sqrt_iswap_operations( q0, q1, u, required_sqrt_iswap_count=0)
def test_all_weyl_regions(u): q0, q1 = cirq.LineQubit.range(2) ops = cirq.two_qubit_matrix_to_sqrt_iswap_operations(q0, q1, u, clean_operations=True) assert_valid_decomp(u, ops, single_qubit_gate_types=(cirq.PhasedXZGate, )) ops = cirq.two_qubit_matrix_to_sqrt_iswap_operations(q0, q1, u) assert_valid_decomp(u, ops)
def test_decomp0(u): # Decompose unitaries into zero sqrt-iSWAP gates q0, q1 = cirq.LineQubit.range(2) ops = cirq.two_qubit_matrix_to_sqrt_iswap_operations( q0, q1, u, required_sqrt_iswap_count=0) assert_valid_decomp(u, ops) assert_specific_sqrt_iswap_count(ops, 0)
def test_decomp_sqrt_iswap_inv(u): q0, q1 = cirq.LineQubit.range(2) ops = cirq.two_qubit_matrix_to_sqrt_iswap_operations( q0, q1, u, use_sqrt_iswap_inv=True) assert_valid_decomp(u, ops, two_qubit_gate=cirq.SQRT_ISWAP_INV)
def test_decomp_optimal3(u): q0, q1 = cirq.LineQubit.range(2) ops = cirq.two_qubit_matrix_to_sqrt_iswap_operations(q0, q1, u) assert_valid_decomp(u, ops) assert_specific_sqrt_iswap_count(ops, 3)
def test_qubit_order(u): q0, q1 = cirq.LineQubit.range(2) ops = cirq.two_qubit_matrix_to_sqrt_iswap_operations( q1, q0, u, required_sqrt_iswap_count=2) assert_valid_decomp(u, ops, qubit_order=(q1, q0)) assert_specific_sqrt_iswap_count(ops, 2)
def test_decomp1(u): q0, q1 = cirq.LineQubit.range(2) ops = cirq.two_qubit_matrix_to_sqrt_iswap_operations( q0, q1, u, required_sqrt_iswap_count=1) assert_valid_decomp(u, ops) assert_specific_sqrt_iswap_count(ops, 1)
def test_invalid_required_sqrt_iswap_count(cnt): u = TWO_SQRT_ISWAP_UNITARIES[0] q0, q1 = cirq.LineQubit.range(2) with pytest.raises(ValueError, match='required_sqrt_iswap_count'): cirq.two_qubit_matrix_to_sqrt_iswap_operations( q0, q1, u, required_sqrt_iswap_count=cnt)
def test_all_weyl_regions(u): q0, q1 = cirq.LineQubit.range(2) ops = cirq.two_qubit_matrix_to_sqrt_iswap_operations(q0, q1, u) assert_valid_decomp(u, ops)