class TestLieAlgebraMethods(geomstats.tests.TestCase): def setUp(self): self.n = 4 self.dim = int(self.n * (self.n - 1) / 2) self.algebra = SkewSymmetricMatrices(n=self.n) def test_dimension(self): result = self.algebra.dim expected = self.dim self.assertAllClose(result, expected) @geomstats.tests.np_only def test_matrix_representation_and_belongs(self): n_samples = 2 point = gs.random.rand(n_samples * self.dim) point = gs.reshape(point, (n_samples, self.dim)) mat = self.algebra.matrix_representation(point) result = self.algebra.belongs(mat).all() expected = True self.assertAllClose(result, expected) @geomstats.tests.np_only def test_basis_and_matrix_representation(self): n_samples = 2 expected = gs.random.rand(n_samples * self.dim) expected = gs.reshape(expected, (n_samples, self.dim)) mat = self.algebra.matrix_representation(expected) result = self.algebra.basis_representation(mat) self.assertAllClose(result, expected)
def test_inner_product_left(self): lie_algebra = SkewSymmetricMatrices(3) tangent_vec_a = lie_algebra.matrix_representation(gs.array([1., 0, 2.])) tangent_vec_a = self.matrix_so3.compose(self.point_1_matrix, tangent_vec_a) tangent_vec_b = lie_algebra.matrix_representation( gs.array([1., 0, 0.5])) tangent_vec_b = self.matrix_so3.compose(self.point_1_matrix, tangent_vec_b) result = self.matrix_left_metric.inner_product(tangent_vec_a, tangent_vec_b, self.point_1_matrix) expected = 4. self.assertAllClose(result, expected) tangent_vec_a = lie_algebra.matrix_representation( gs.array([[1., 0, 2.], [0, 3., 5.]])) tangent_vec_a = self.matrix_so3.compose(self.point_1_matrix, tangent_vec_a) result = self.matrix_left_metric.inner_product(tangent_vec_a, tangent_vec_b, self.point_1_matrix) expected = gs.array([4., 5.]) self.assertAllClose(result, expected)
class TestLieAlgebra(geomstats.tests.TestCase): def setUp(self): self.n = 4 self.dim = int(self.n * (self.n - 1) / 2) self.algebra = SkewSymmetricMatrices(n=self.n) def test_dimension(self): result = self.algebra.dim expected = self.dim self.assertAllClose(result, expected) def test_matrix_representation_and_belongs(self): n_samples = 2 point = gs.random.rand(n_samples * self.dim) point = gs.reshape(point, (n_samples, self.dim)) mat = self.algebra.matrix_representation(point) result = gs.all(self.algebra.belongs(mat)) expected = True self.assertAllClose(result, expected) @geomstats.tests.np_and_pytorch_only def test_basis_and_matrix_representation(self): n_samples = 2 expected = gs.random.rand(n_samples * self.dim) expected = gs.reshape(expected, (n_samples, self.dim)) mat = self.algebra.matrix_representation(expected) result = self.algebra.basis_representation(mat) self.assertAllClose(result, expected) def test_orthonormal_basis(self): group = SpecialOrthogonal(3) lie_algebra = SkewSymmetricMatrices(3) metric = InvariantMetric(group=group, algebra=lie_algebra) basis = lie_algebra.orthonormal_basis(metric.metric_mat_at_identity) result = metric.inner_product_at_identity(basis[0], basis[1]) self.assertAllClose(result, 0.) result = metric.inner_product_at_identity(basis[1], basis[1]) self.assertAllClose(result, 1.) metric_mat = from_vector_to_diagonal_matrix(gs.array([1., 2., 3.])) metric = InvariantMetric(group=group, algebra=lie_algebra, metric_mat_at_identity=metric_mat) basis = lie_algebra.orthonormal_basis(metric.metric_mat_at_identity) result = metric.inner_product_at_identity(basis[0], basis[1]) self.assertAllClose(result, 0.) result = metric.inner_product_at_identity(basis[1], basis[1]) self.assertAllClose(result, 1.)
def test_inner_product_at_identity(self): lie_algebra = SkewSymmetricMatrices(3) tangent_vec_a = lie_algebra.matrix_representation([1., 0, 2.])[0] tangent_vec_b = lie_algebra.matrix_representation([1., 0, 0.5])[0] result = self.matrix_left_metric.inner_product_at_identity( tangent_vec_a, tangent_vec_b) expected = 4. self.assertAllClose(result, expected) tangent_vec_a = lie_algebra.matrix_representation( [[1., 0, 2.], [0, 3., 5.]]) result = self.matrix_left_metric.inner_product_at_identity( tangent_vec_a, tangent_vec_b) expected = gs.array([4., 5.]) self.assertAllClose(result, expected)
class TestLieAlgebra(geomstats.tests.TestCase): def setup_method(self): self.n = 4 self.dim = int(self.n * (self.n - 1) / 2) self.algebra = SkewSymmetricMatrices(n=self.n) def test_dimension(self): result = self.algebra.dim expected = self.dim self.assertAllClose(result, expected) def test_matrix_representation_and_belongs(self): n_samples = 2 point = gs.random.rand(n_samples * self.dim) point = gs.reshape(point, (n_samples, self.dim)) mat = self.algebra.matrix_representation(point) result = gs.all(self.algebra.belongs(mat)) self.assertTrue(result) def test_basis_and_matrix_representation(self): n_samples = 2 expected = gs.random.rand(n_samples * self.dim) expected = gs.reshape(expected, (n_samples, self.dim)) mat = self.algebra.matrix_representation(expected) result = self.algebra.basis_representation(mat) self.assertAllClose(result, expected) def test_orthonormal_basis(self): group = SpecialOrthogonal(3) lie_algebra = SkewSymmetricMatrices(3) metric = InvariantMetric(group=group) basis = metric.normal_basis(lie_algebra.basis) result = metric.inner_product_at_identity(basis[0], basis[1]) self.assertAllClose(result, 0.0) result = metric.inner_product_at_identity(basis[1], basis[1]) self.assertAllClose(result, 1.0) metric_mat = from_vector_to_diagonal_matrix(gs.array([1.0, 2.0, 3.0])) metric = InvariantMetric(group=group, metric_mat_at_identity=metric_mat) basis = metric.normal_basis(lie_algebra.basis) result = metric.inner_product_at_identity(basis[0], basis[1]) self.assertAllClose(result, 0.0) result = metric.inner_product_at_identity(basis[1], basis[1]) self.assertAllClose(result, 1.0) def test_orthonormal_basis_se3(self): group = SpecialEuclidean(3) lie_algebra = group.lie_algebra metric = InvariantMetric(group=group) basis = metric.normal_basis(lie_algebra.basis) for i, x in enumerate(basis): for y in basis[i:]: result = metric.inner_product_at_identity(x, y) expected = 0.0 if gs.any(x != y) else 1.0 self.assertAllClose(result, expected) metric_mat = from_vector_to_diagonal_matrix( gs.cast(gs.arange(1, group.dim + 1), gs.float32) ) metric = InvariantMetric(group=group, metric_mat_at_identity=metric_mat) basis = metric.normal_basis(lie_algebra.basis) for i, x in enumerate(basis): for y in basis[i:]: result = metric.inner_product_at_identity(x, y) expected = 0.0 if gs.any(x != y) else 1.0 self.assertAllClose(result, expected)