コード例 #1
0
ファイル: test_math.py プロジェクト: fedelopez77/sympa
    def test_conjugate(self):
        x = get_random_symmetric_matrices(10, 4)
        x_imag = sm.imag(x)

        conj_x = sm.conjugate(x)

        self.assertAllEqual(-x_imag, sm.imag(conj_x))
        self.assertAllEqual(x_imag, sm.imag(x))
コード例 #2
0
ファイル: test_math.py プロジェクト: fedelopez77/sympa
    def test_multiply_by_i(self):
        x = get_random_symmetric_matrices(10, 4)

        result = sm.multiply_by_i(x)
        expected_real = sm.real(result)
        expected_imag = sm.imag(result)

        self.assertAllEqual(expected_real, -sm.imag(x))
        self.assertAllEqual(expected_imag, sm.real(x))
コード例 #3
0
    def test_takagi_factorization_very_large_values(self):
        a = get_random_symmetric_matrices(3, 3) * 1000

        eigenvalues, s = TakagiFactorization(3).factorize(a)

        diagonal = torch.diag_embed(eigenvalues)
        diagonal = sm.stick(diagonal, torch.zeros_like(diagonal))

        self.assertAllClose(
            a, sm.bmm3(sm.conjugate(s), diagonal, sm.conj_trans(s)))
コード例 #4
0
ファイル: test_math.py プロジェクト: fedelopez77/sympa
    def test_to_symmetric(self):
        x = get_random_symmetric_matrices(10, 4)
        x_real = sm.real(x)
        x_imag = sm.imag(x)

        x_real_transpose = x_real.transpose(-1, -2)
        x_imag_transpose = x_imag.transpose(-1, -2)

        self.assertAllEqual(x_real, x_real_transpose)
        self.assertAllEqual(x_imag, x_imag_transpose)
コード例 #5
0
ファイル: test_upper_half.py プロジェクト: fedelopez77/sympa
    def test_proj_x_real_pos_imag_pos(self):
        x = get_random_symmetric_matrices(10, self.dims)

        proj_x = self.manifold.projx(x)

        # assert symmetry
        self.assertAllClose(proj_x, sm.transpose(proj_x))

        # assert all points belong to the manifold
        for point in proj_x:
            self.assertTrue(self.manifold.check_point_on_manifold(point))
コード例 #6
0
    def test_takagi_factorization_real_neg_imag_neg(self):
        a = get_random_symmetric_matrices(3, 3)
        a = sm.stick(sm.real(a) * -1, sm.imag(a) * -1)

        eigenvalues, s = TakagiFactorization(3).factorize(a)

        diagonal = torch.diag_embed(eigenvalues)
        diagonal = sm.stick(diagonal, torch.zeros_like(diagonal))

        self.assertAllClose(
            a, sm.bmm3(sm.conjugate(s), diagonal, sm.conj_trans(s)))
コード例 #7
0
    def test_takagi_factorization_real_identity(self):
        a = sm.identity_like(get_random_symmetric_matrices(3, 3))

        eigenvalues, s = TakagiFactorization(3).factorize(a)

        diagonal = torch.diag_embed(eigenvalues)
        diagonal = sm.stick(diagonal, torch.zeros_like(diagonal))

        self.assertAllClose(
            a, sm.bmm3(sm.conjugate(s), diagonal, sm.conj_trans(s)))
        self.assertAllClose(a, s)
        self.assertAllClose(torch.ones_like(eigenvalues), eigenvalues)
コード例 #8
0
    def test_proj_x_real_neg_imag_neg(self):
        x = get_random_symmetric_matrices(10, 3)
        x = sm.stick(sm.real(x) * -1, sm.imag(x) * -1)

        proj_x = self.manifold.projx(x)

        # assert symmetry
        self.assertAllClose(proj_x, sm.transpose(proj_x))

        # assert all points belong to the manifold
        for point in proj_x:
            self.assertTrue(self.manifold.check_point_on_manifold(point))
コード例 #9
0
ファイル: test_math.py プロジェクト: fedelopez77/sympa
    def test_conj_transpose(self):
        x = get_random_symmetric_matrices(10, 4)
        x_real = sm.real(x)
        x_imag = sm.imag(x)

        x_real_transpose = x_real.transpose(-1, -2)
        x_imag_transpose = x_imag.transpose(-1, -2)
        x_expected_conj_transpose = sm.stick(x_real_transpose,
                                             x_imag_transpose * -1)

        x_result_conj_transpose = sm.conj_trans(x)

        self.assertAllEqual(x_expected_conj_transpose, x_result_conj_transpose)
コード例 #10
0
    def test_inverse_cayley_transform_from_projx(self):
        x = get_random_symmetric_matrices(10, 3)
        x = self.bounded_manifold.projx(x)

        tran_x = inverse_cayley_transform(x)
        result = cayley_transform(tran_x)

        self.assertAllClose(x, result)
        # the intermediate result belongs to the Upper Half Space manifold
        for point in tran_x:
            self.assertTrue(self.upper_half_manifold.check_point_on_manifold(point))
        # the final result belongs to the Bounded domain manifold
        for point in result:
            self.assertTrue(self.bounded_manifold.check_point_on_manifold(point))
コード例 #11
0
ファイル: test_math.py プロジェクト: fedelopez77/sympa
    def test_transpose(self):
        x = get_random_symmetric_matrices(10, 4)
        x_real = sm.real(x)
        x_imag = sm.imag(x)

        x_real_transpose = x_real.transpose(-1, -2)
        x_imag_transpose = x_imag.transpose(-1, -2)
        x_expected_transpose = sm.stick(x_real_transpose, x_imag_transpose)

        x_result_transpose = sm.transpose(x)

        self.assertAllEqual(x_expected_transpose, x_result_transpose)
        self.assertAllEqual(
            x, x_result_transpose)  # because they are symmetric matrices
コード例 #12
0
    def test_takagi_factorization_real_diagonal(self):
        a = get_random_symmetric_matrices(3, 3) * 10
        a = torch.where(sm.identity_like(a) == 1, a, torch.zeros_like(a))

        eigenvalues, s = TakagiFactorization(3).factorize(a)

        diagonal = torch.diag_embed(eigenvalues)
        diagonal = sm.stick(diagonal, torch.zeros_like(diagonal))

        self.assertAllClose(
            a, sm.bmm3(sm.conjugate(s), diagonal, sm.conj_trans(s)))
        # real part of eigenvectors is made of vectors with one 1 and all zeros
        real_part = torch.sum(torch.abs(sm.real(s)), dim=-1)
        self.assertAllClose(torch.ones_like(real_part), real_part)
        # imaginary part of eigenvectors is all zeros
        self.assertAllClose(torch.zeros(1), torch.sum(sm.imag(s)))
コード例 #13
0
ファイル: test_math.py プロジェクト: fedelopez77/sympa
    def test_subtract(self):
        x = get_random_symmetric_matrices(10, 4)
        result = torch.zeros_like(x)

        self.assertAllEqual(result, sm.subtract(x, x))
コード例 #14
0
ファイル: test_math.py プロジェクト: fedelopez77/sympa
    def test_add(self):
        x = get_random_symmetric_matrices(10, 4)
        expected = x * 2

        self.assertAllEqual(expected, sm.add(x, x))