From 19909f0fa338d79db1c003528eee3d1123713810 Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Fri, 23 Aug 2019 21:13:48 -0400 Subject: [PATCH] eja: add the RealMatrixEuclideanJordanAlgebra class. We already had analogues for complex and quaternion matrices. The real one should have been there all along too. --- mjo/eja/eja_algebra.py | 52 ++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/mjo/eja/eja_algebra.py b/mjo/eja/eja_algebra.py index 8a3710c..51973d1 100644 --- a/mjo/eja/eja_algebra.py +++ b/mjo/eja/eja_algebra.py @@ -1007,7 +1007,33 @@ class MatrixEuclideanJordanAlgebra(FiniteDimensionalEuclideanJordanAlgebra): return tr.coefficient_tuple()[0] -class RealSymmetricEJA(MatrixEuclideanJordanAlgebra): +class RealMatrixEuclideanJordanAlgebra(MatrixEuclideanJordanAlgebra): + @staticmethod + def real_embed(M): + """ + Embed the matrix ``M`` into a space of real matrices. + + The matrix ``M`` can have entries in any field at the moment: + the real numbers, complex numbers, or quaternions. And although + they are not a field, we can probably support octonions at some + point, too. This function returns a real matrix that "acts like" + the original with respect to matrix multiplication; i.e. + + real_embed(M*N) = real_embed(M)*real_embed(N) + + """ + return M + + + @staticmethod + def real_unembed(M): + """ + The inverse of :meth:`real_embed`. + """ + return M + + +class RealSymmetricEJA(RealMatrixEuclideanJordanAlgebra): """ The rank-n simple EJA consisting of real symmetric n-by-n matrices, the usual symmetric Jordan product, and the trace inner @@ -1114,30 +1140,6 @@ class RealSymmetricEJA(MatrixEuclideanJordanAlgebra): def _max_test_case_size(): return 5 # Dimension 10 - @staticmethod - def real_embed(M): - """ - Embed the matrix ``M`` into a space of real matrices. - - The matrix ``M`` can have entries in any field at the moment: - the real numbers, complex numbers, or quaternions. And although - they are not a field, we can probably support octonions at some - point, too. This function returns a real matrix that "acts like" - the original with respect to matrix multiplication; i.e. - - real_embed(M*N) = real_embed(M)*real_embed(N) - - """ - return M - - - @staticmethod - def real_unembed(M): - """ - The inverse of :meth:`real_embed`. - """ - return M - class ComplexMatrixEuclideanJordanAlgebra(MatrixEuclideanJordanAlgebra): -- 2.44.2