From 7c384faefd026dd4010e30399646e2e4cb5b4b27 Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Fri, 21 Jun 2019 19:12:22 -0400 Subject: [PATCH] eja: implement my own algebra subclass. --- mjo/eja/euclidean_jordan_algebra.py | 40 +++++++++++++++++++---------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/mjo/eja/euclidean_jordan_algebra.py b/mjo/eja/euclidean_jordan_algebra.py index a0c072b..624806f 100644 --- a/mjo/eja/euclidean_jordan_algebra.py +++ b/mjo/eja/euclidean_jordan_algebra.py @@ -5,13 +5,30 @@ are used in optimization, and have some additional nice methods beyond what can be supported in a general Jordan Algebra. """ -from sage.all import * +from sage.structure.unique_representation import UniqueRepresentation +from sage.algebras.finite_dimensional_algebras.finite_dimensional_algebra import FiniteDimensionalAlgebra + +class FiniteDimensionalEuclideanJordanAlgebra(FiniteDimensionalAlgebra): + @staticmethod + def __classcall__(cls, field, mult_table, names='e', category=None): + fda = super(FiniteDimensionalEuclideanJordanAlgebra, cls) + return fda.__classcall_private__(cls, + field, + mult_table, + names, + category) + + def __init__(self, field, mult_table, names='e', category=None): + fda = super(FiniteDimensionalEuclideanJordanAlgebra, self) + fda.__init__(field, mult_table, names, category) + + + def _repr_(self): + """ + Return a string representation of ``self``. + """ + return "Euclidean Jordan algebra of degree {} over {}".format(self.degree(), self.base_ring()) -def eja_minimal_polynomial(x): - """ - Return the minimal polynomial of ``x`` in its parent EJA - """ - return x._x.matrix().minimal_polynomial() def eja_rn(dimension, field=QQ): @@ -50,13 +67,12 @@ def eja_rn(dimension, field=QQ): # Assuming associativity is wrong here, but it works to # temporarily trick the Jordan algebra constructor into using the # multiplication table. - A = FiniteDimensionalAlgebra(field,Qs,assume_associative=True) - return JordanAlgebra(A) + return FiniteDimensionalEuclideanJordanAlgebra(field,Qs) def eja_ln(dimension, field=QQ): """ - Return the Jordan algebra corresponding to the Lorenzt "ice cream" + Return the Jordan algebra corresponding to the Lorentz "ice cream" cone of the given ``dimension``. EXAMPLES: @@ -101,8 +117,4 @@ def eja_ln(dimension, field=QQ): Qi[0,0] = Qi[0,0] * ~field(2) Qs.append(Qi) - # Assuming associativity is wrong here, but it works to - # temporarily trick the Jordan algebra constructor into using the - # multiplication table. - A = FiniteDimensionalAlgebra(field,Qs,assume_associative=True) - return JordanAlgebra(A) + return FiniteDimensionalEuclideanJordanAlgebra(field,Qs) -- 2.44.2