]> gitweb.michael.orlitzky.com - sage.d.git/commitdiff
eja: implement my own algebra subclass.
authorMichael Orlitzky <michael@orlitzky.com>
Fri, 21 Jun 2019 23:12:22 +0000 (19:12 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Mon, 29 Jul 2019 03:11:42 +0000 (23:11 -0400)
mjo/eja/euclidean_jordan_algebra.py

index a0c072bb13bfdac56a3389b4463ed37e7793fafd..624806fddac93c9292b229d6afd7954224827e87 100644 (file)
@@ -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)