예제 #1
0
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)
예제 #3
0
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)