]> gitweb.michael.orlitzky.com - sage.d.git/blobdiff - mjo/eja/euclidean_jordan_algebra.py
eja: implement my own algebra subclass.
[sage.d.git] / mjo / eja / euclidean_jordan_algebra.py
index 7611fe7eef371058bd201dc5888fa63eb58881bd..624806fddac93c9292b229d6afd7954224827e87 100644 (file)
@@ -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)