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 assert_sds_equals_a(s, eigenvalues, a, atol=1e-5, rtol=1e-5): diagonal = torch.diag_embed(eigenvalues) diagonal = sm.to_complex(diagonal, torch.zeros_like(diagonal)) np.testing.assert_allclose( a, s.conj() @ diagonal @ s.conj().transpose(-1, -2), atol=atol, rtol=rtol)
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)