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)
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)
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)
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)
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)
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)
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)