Beispiel #1
0
def test_is_special_orthogonal_tolerance():
    tol = Tolerance(atol=0.5)

    # Pays attention to specified tolerance.
    assert cirq.is_special_orthogonal(np.array([[1, 0], [-0.5, 1]]), tol)
    assert not cirq.is_special_orthogonal(np.array([[1, 0], [-0.6, 1]]), tol)

    # Error isn't accumulated across entries, except for determinant factors.
    assert cirq.is_special_orthogonal(
        np.array([[1.2, 0, 0], [0, 1.2, 0], [0, 0, 1 / 1.2]]), tol)
    assert not cirq.is_special_orthogonal(
        np.array([[1.2, 0, 0], [0, 1.2, 0], [0, 0, 1.2]]), tol)
    assert not cirq.is_special_orthogonal(
        np.array([[1.2, 0, 0], [0, 1.3, 0], [0, 0, 1 / 1.2]]), tol)
Beispiel #2
0
def test_is_special_orthogonal():
    assert cirq.is_special_orthogonal(np.empty((0, 0)))
    assert not cirq.is_special_orthogonal(np.empty((1, 0)))
    assert not cirq.is_special_orthogonal(np.empty((0, 1)))

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

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

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

    assert cirq.is_special_orthogonal(np.array([[1, 1e-11], [0, 1 + 1e-11]]))
Beispiel #3
0
def test_bidiagonalize_unitary_with_special_orthogonals(mat):
    p, d, q = cirq.bidiagonalize_unitary_with_special_orthogonals(mat)
    assert cirq.is_special_orthogonal(p)
    assert cirq.is_special_orthogonal(q)
    assert np.allclose(p.dot(mat).dot(q), np.diag(d))
    assert_bidiagonalized_by(mat, p, q)