X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=mjo%2Feja%2Feuclidean_jordan_algebra.py;h=624806fddac93c9292b229d6afd7954224827e87;hb=7c384faefd026dd4010e30399646e2e4cb5b4b27;hp=a0c072bb13bfdac56a3389b4463ed37e7793fafd;hpb=94eadcdcc061b299f5be5bce1450b94bbd7bfa39;p=sage.d.git 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)