X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=mjo%2Feja%2Feuclidean_jordan_algebra.py;h=624806fddac93c9292b229d6afd7954224827e87;hb=7c384faefd026dd4010e30399646e2e4cb5b4b27;hp=7611fe7eef371058bd201dc5888fa63eb58881bd;hpb=92c3da0a3c2f4c7a7d1f9a6a5507957719368062;p=sage.d.git diff --git a/mjo/eja/euclidean_jordan_algebra.py b/mjo/eja/euclidean_jordan_algebra.py index 7611fe7..624806f 100644 --- a/mjo/eja/euclidean_jordan_algebra.py +++ b/mjo/eja/euclidean_jordan_algebra.py @@ -5,7 +5,31 @@ 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_rn(dimension, field=QQ): """ @@ -39,13 +63,16 @@ def eja_rn(dimension, field=QQ): # component of x; and likewise for the ith basis element e_i. Qs = [ matrix(field, dimension, dimension, lambda k,j: 1*(k == j == i)) for i in xrange(dimension) ] - A = FiniteDimensionalAlgebra(QQ,Qs,assume_associative=True) - return JordanAlgebra(A) + + # Assuming associativity is wrong here, but it works to + # temporarily trick the Jordan algebra constructor into using the + # multiplication table. + 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: @@ -90,5 +117,4 @@ def eja_ln(dimension, field=QQ): Qi[0,0] = Qi[0,0] * ~field(2) Qs.append(Qi) - A = FiniteDimensionalAlgebra(QQ,Qs,assume_associative=True) - return JordanAlgebra(A) + return FiniteDimensionalEuclideanJordanAlgebra(field,Qs)