Ejemplo n.º 1
0
def test_takagi_factorization_real_neg_imag_neg(rank, dtype):
    a = get_random_complex_symmetric_matrices(10, rank, dtype)
    a = sm.to_complex(a.real * -1, a.imag * -1)

    eigenvalues, s = sm.takagi_eig(a)

    assert_sds_equals_a(s, eigenvalues, a)
Ejemplo n.º 2
0
def test_takagi_factorization_eigval_equals_eig(rank, dtype):
    a = get_random_complex_symmetric_matrices(10, rank, dtype)

    eig, s = sm.takagi_eig(a)
    eigvals = sm.takagi_eigvals(a)

    assert_sds_equals_a(s, eigvals, a)
    np.testing.assert_allclose(eig, eigvals, atol=1e-5, rtol=1e-5)
Ejemplo n.º 3
0
def test_takagi_factorization_imag_identity(rank, dtype):
    a = sm.identity_like(get_random_complex_symmetric_matrices(
        10, rank, dtype))
    a = sm.to_complex(a.imag, a.real)

    eigenvalues, s = sm.takagi_eig(a)

    assert_sds_equals_a(s, eigenvalues, a)
Ejemplo n.º 4
0
def test_takagi_factorization_idem_takagi_fact():
    real_a = torch.Tensor([[[0.222662581850819, 0.98644223215106],
                            [0.98644223215106, 0.27907583542894]]])
    imag_a = torch.Tensor([[[0.204990135642257, 1.28603437847092],
                            [1.28603437847092, 1.18098457998164]]])
    a = sm.to_complex(real_a, imag_a)

    eigenvalues, s = sm.takagi_eig(a)

    assert_sds_equals_a(s, eigenvalues, a)
Ejemplo n.º 5
0
def test_takagi_factorization_real_identity(rank, dtype):
    a = sm.identity_like(get_random_complex_symmetric_matrices(
        10, rank, dtype))

    eigenvalues, s = sm.takagi_eig(a)

    assert_sds_equals_a(s, eigenvalues, a)
    np.testing.assert_allclose(a, s, atol=1e-5, rtol=1e-5)
    np.testing.assert_allclose(torch.ones_like(eigenvalues),
                               eigenvalues,
                               atol=1e-5,
                               rtol=1e-5)
Ejemplo n.º 6
0
def test_takagi_factorization_real_diagonal(rank, dtype):
    real_a = torch.diag_embed(torch.rand((10, rank), dtype=dtype).real * 10)
    a = torch.complex(real_a, torch.zeros_like(real_a))

    eigenvalues, s = sm.takagi_eig(a)

    assert_sds_equals_a(s, eigenvalues, a)
    # real part of eigenvectors is made of vectors with one 1 and all zeros
    real_part = torch.sum(torch.abs(s.real), dim=-1)
    np.testing.assert_allclose(torch.ones_like(real_part),
                               real_part,
                               atol=1e-5,
                               rtol=1e-5)
    # imaginary part of eigenvectors is all zeros
    np.testing.assert_allclose(torch.zeros(1),
                               torch.sum(s.imag),
                               atol=1e-5,
                               rtol=1e-5)
Ejemplo n.º 7
0
def test_takagi_factorization_large_values(rank, dtype):
    a = get_random_complex_symmetric_matrices(10, rank, dtype) * 10

    eigenvalues, s = sm.takagi_eig(a)

    assert_sds_equals_a(s, eigenvalues, a)