コード例 #1
0
def test_matrix_from_basis_coefficients(expansion):
    m = cirq.matrix_from_basis_coefficients(expansion, PAULI_BASIS)

    for name, coefficient in expansion.items():
        element = PAULI_BASIS[name]
        expected_coefficient = cirq.hilbert_schmidt_inner_product(
            m, element) / cirq.hilbert_schmidt_inner_product(element, element)
        assert np.isclose(coefficient, expected_coefficient)
コード例 #2
0
def test_hilbert_schmidt_inner_product_is_conjugate_symmetric(m1, m2, expect_real):
    v1 = cirq.hilbert_schmidt_inner_product(m1, m2)
    v2 = cirq.hilbert_schmidt_inner_product(m2, m1)
    assert v1 == v2.conjugate()

    assert np.isreal(v1) == expect_real
    if not expect_real:
        assert v1 != v2
コード例 #3
0
def test_kron_bases_repeat_sanity_checks(basis, repeat):
    product_basis = cirq.kron_bases(basis, repeat=repeat)
    assert len(product_basis) == 4**repeat
    for name1, matrix1 in product_basis.items():
        for name2, matrix2 in product_basis.items():
            p = cirq.hilbert_schmidt_inner_product(matrix1, matrix2)
            if name1 != name2:
                assert p == 0
            else:
                assert abs(p) >= 1
コード例 #4
0
def test_hilbert_schmidt_inner_product_values(m1, m2, expected_value):
    v = cirq.hilbert_schmidt_inner_product(m1, m2)
    assert np.isclose(v, expected_value)
コード例 #5
0
def test_hilbert_schmidt_inner_product_is_positive_definite(m):
    v = cirq.hilbert_schmidt_inner_product(m, m)
    assert np.isreal(v)
    assert v.real > 0
コード例 #6
0
def test_hilbert_schmidt_inner_product_is_linear(a, m1, b, m2):
    v1 = cirq.hilbert_schmidt_inner_product(H, (a * m1 + b * m2))
    v2 = (a * cirq.hilbert_schmidt_inner_product(H, m1) +
          b * cirq.hilbert_schmidt_inner_product(H, m2))
    assert v1 == v2
コード例 #7
0
def test_hilbert_schmidt_inner_product_is_positive_definite(m):
    v = cirq.hilbert_schmidt_inner_product(m, m)
    # Cannot check using np.is_real due to bug in aarch64.
    # See https://github.com/quantumlib/Cirq/issues/4379
    assert np.isclose(np.imag(v), 1e-16)
    assert v.real > 0