def test_kak_vector_infidelity_ignore_equivalent_nontrivial(): x, y, z = np.pi / 4, 1, 0.5 kak_0 = kak_canonicalize_vector(x, y, z).interaction_coefficients kak_1 = kak_canonicalize_vector(x - 1e-3, y, z).interaction_coefficients inf_check_equivalent = kak_vector_infidelity(kak_0, kak_1, False) inf_ignore_equivalent = kak_vector_infidelity(kak_0, kak_1, True) assert inf_check_equivalent < inf_ignore_equivalent
def test_kak_canonicalize_vector(x, y, z): i = np.eye(2) m = cirq.unitary( cirq.KakDecomposition( global_phase=1, single_qubit_operations_after=(i, i), interaction_coefficients=(x, y, z), single_qubit_operations_before=(i, i), )) kak = cirq.kak_canonicalize_vector(x, y, z, atol=1e-10) a1, a0 = kak.single_qubit_operations_after x2, y2, z2 = kak.interaction_coefficients b1, b0 = kak.single_qubit_operations_before m2 = cirq.unitary(kak) assert 0.0 <= x2 <= np.pi / 4 assert 0.0 <= y2 <= np.pi / 4 assert -np.pi / 4 < z2 <= np.pi / 4 assert abs(x2) >= abs(y2) >= abs(z2) assert x2 < np.pi / 4 - 1e-10 or z2 >= 0 assert cirq.is_special_unitary(a1) assert cirq.is_special_unitary(a0) assert cirq.is_special_unitary(b1) assert cirq.is_special_unitary(b0) assert np.allclose(m, m2)
def test_kak_canonicalize_vector(x, y, z): i = np.eye(2) m = recompose_kak(1, (i, i), (x, y, z), (i, i)) g, (a1, a0), (x2, y2, z2), (b1, b0) = cirq.kak_canonicalize_vector( x, y, z) m2 = recompose_kak(g, (a1, a0), (x2, y2, z2), (b1, b0)) assert 0.0 <= x2 <= np.pi / 4 assert 0.0 <= y2 <= np.pi / 4 assert -np.pi / 4 <= z2 <= np.pi / 4 assert abs(x2) >= abs(y2) >= abs(z2) assert cirq.is_special_unitary(a1) assert cirq.is_special_unitary(a0) assert cirq.is_special_unitary(b1) assert cirq.is_special_unitary(b0) assert np.allclose(m, m2)