Exemple #1
0
def recompose_so4(a: np.ndarray, b: np.ndarray) -> np.ndarray:
    assert a.shape == (2, 2)
    assert b.shape == (2, 2)
    assert cirq.is_special_unitary(a)
    assert cirq.is_special_unitary(b)

    magic = np.array([[1, 0, 0, 1j],
                      [0, 1j, 1, 0],
                      [0, 1j, -1, 0],
                      [1, 0, 0, -1j]]) * np.sqrt(0.5)
    result = np.real(cirq.dot(np.conj(magic.T),
                              cirq.kron(a, b),
                              magic))
    assert cirq.is_orthogonal(result)
    return result
def recompose_so4(a: np.ndarray, b: np.ndarray) -> np.ndarray:
    assert a.shape == (2, 2)
    assert b.shape == (2, 2)
    assert cirq.is_special_unitary(a)
    assert cirq.is_special_unitary(b)

    magic = np.array([[1, 0, 0, 1j],
                    [0, 1j, 1, 0],
                    [0, 1j, -1, 0],
                    [1, 0, 0, -1j]]) * np.sqrt(0.5)
    result = np.real(cirq.dot(np.conj(magic.T),
                              cirq.kron(a, b),
                              magic))
    assert cirq.is_orthogonal(result)
    return result
def assert_diagonalized_by(m, p, atol: float = 1e-8):
    d = p.T.dot(m).dot(p)

    try:
        assert cirq.is_orthogonal(p)
        assert cirq.is_diagonal(d, atol=atol)
    except AssertionError:
        # coverage: ignore

        print("m.round(3)")
        print(np.round(m, 3))

        print("p.round(3)")
        print(np.round(p, 3))

        print("np.log10(np.abs(p.T @ m @ p)).round(2)")
        print(np.log10(np.abs(d)).round(2))

        raise
Exemple #4
0
def test_is_orthogonal():
    assert cirq.is_orthogonal(np.empty((0, 0)))
    assert not cirq.is_orthogonal(np.empty((1, 0)))
    assert not cirq.is_orthogonal(np.empty((0, 1)))

    assert cirq.is_orthogonal(np.array([[1]]))
    assert cirq.is_orthogonal(np.array([[-1]]))
    assert not cirq.is_orthogonal(np.array([[1j]]))
    assert not cirq.is_orthogonal(np.array([[5]]))
    assert not cirq.is_orthogonal(np.array([[3j]]))

    assert not cirq.is_orthogonal(np.array([[1, 0]]))
    assert not cirq.is_orthogonal(np.array([[1], [0]]))

    assert not cirq.is_orthogonal(np.array([[1, 0], [0, -2]]))
    assert cirq.is_orthogonal(np.array([[1, 0], [0, -1]]))
    assert not cirq.is_orthogonal(np.array([[1j, 0], [0, 1]]))
    assert not cirq.is_orthogonal(np.array([[1, 0], [1, 1]]))
    assert not cirq.is_orthogonal(np.array([[1, 1], [0, 1]]))
    assert not cirq.is_orthogonal(np.array([[1, 1], [1, 1]]))
    assert not cirq.is_orthogonal(np.array([[1, -1], [1, 1]]))
    assert cirq.is_orthogonal(np.array([[1, -1], [1, 1]]) * np.sqrt(0.5))
    assert not cirq.is_orthogonal(np.array([[1, 1j], [1j, 1]]) * np.sqrt(0.5))
    assert not cirq.is_orthogonal(np.array([[1, -1j], [1j, 1]]) * np.sqrt(0.5))

    assert cirq.is_orthogonal(np.array([[1, 1e-11], [0, 1 + 1e-11]]))
Exemple #5
0
def assert_bidiagonalized_by(m, p, q, rtol: float = 1e-5, atol: float = 1e-8):
    d = p.dot(m).dot(q)

    assert (cirq.is_orthogonal(p) and cirq.is_orthogonal(q)
            and cirq.is_diagonal(
                d, atol=atol)), _get_assert_bidiagonalized_by_str(m, p, q, d)
Exemple #6
0
def assert_diagonalized_by(m, p, atol: float = 1e-8):
    d = p.T.dot(m).dot(p)

    assert cirq.is_orthogonal(p) and cirq.is_diagonal(
        d, atol=atol), _get_assert_diagonalized_by_str(m, p, d)