X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=mjo%2Feja%2Feuclidean_jordan_algebra.py;h=624806fddac93c9292b229d6afd7954224827e87;hb=7c384faefd026dd4010e30399646e2e4cb5b4b27;hp=be281bfb99d0ef86e73fa7d4a2d3643f54d605e3;hpb=83f719b66100fdb5bf5035355c48b5337be6b11e;p=sage.d.git diff --git a/mjo/eja/euclidean_jordan_algebra.py b/mjo/eja/euclidean_jordan_algebra.py index be281bf..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): @@ -46,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: @@ -97,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)