]> gitweb.michael.orlitzky.com - sage.d.git/blobdiff - mjo/eja/eja_algebra.py
eja: fix an octonion EJA test.
[sage.d.git] / mjo / eja / eja_algebra.py
index d7010bcfd63ff838c0219dc7208a9b8e1988c889..3659694fe27625939b76de434c8a882a60e6faef 100644 (file)
@@ -1737,7 +1737,7 @@ class MatrixEJA:
         """
         # We take the norm (absolute value) because Octonions() isn't
         # smart enough yet to coerce its one() into the base field.
-        return (X*Y).trace().abs()
+        return (X*Y).trace().real().abs()
 
 class RealEmbeddedMatrixEJA(MatrixEJA):
     @staticmethod
@@ -2586,7 +2586,40 @@ class QuaternionHermitianEJA(ConcreteEJA, QuaternionMatrixEJA):
         return cls(n, **kwargs)
 
 class OctonionHermitianEJA(FiniteDimensionalEJA, MatrixEJA):
+    r"""
+
+    SETUP::
 
+        sage: from mjo.eja.eja_algebra import OctonionHermitianEJA
+
+    EXAMPLES:
+
+    The 3-by-3 algebra satisfies the axioms of an EJA::
+
+        sage: OctonionHermitianEJA(3,                    # long time
+        ....:                      field=QQ,             # long time
+        ....:                      orthonormalize=False, # long time
+        ....:                      check_axioms=True)    # long time
+        Euclidean Jordan algebra of dimension 27 over Rational Field
+
+    TESTS::
+
+        sage: J = OctonionHermitianEJA(3,                    # long time
+        ....:                          field=QQ,             # long time
+        ....:                          orthonormalize=False) # long time
+        sage: J.one.clear_cache()                            # long time
+        sage: J.one()                                        # long time
+        b0 + b9 + b26
+        sage: J.one().to_matrix()                            # long time
+        +----+----+----+
+        | e0 | 0  | 0  |
+        +----+----+----+
+        | 0  | e0 | 0  |
+        +----+----+----+
+        | 0  | 0  | e0 |
+        +----+----+----+
+
+    """
     def __init__(self, n, field=AA, **kwargs):
         if n > 3:
             # Otherwise we don't get an EJA.
@@ -2599,6 +2632,7 @@ class OctonionHermitianEJA(FiniteDimensionalEJA, MatrixEJA):
         super().__init__(self._denormalized_basis(n,field),
                          self.jordan_product,
                          self.trace_inner_product,
+                         field=field,
                          **kwargs)
 
         # TODO: this could be factored out somehow, but is left here
@@ -2621,7 +2655,7 @@ class OctonionHermitianEJA(FiniteDimensionalEJA, MatrixEJA):
 
         EXAMPLES::
 
-            sage: B = OctonionHermitianEJA._denormalized_basis(3)
+            sage: B = OctonionHermitianEJA._denormalized_basis(3,QQ)
             sage: all( M.is_hermitian() for M in B )
             True
             sage: len(B)
@@ -2641,7 +2675,13 @@ class OctonionHermitianEJA(FiniteDimensionalEJA, MatrixEJA):
                 else:
                     for e in es:
                         E_ij  = MS.monomial( (i,j,e)             )
-                        E_ij += MS.monomial( (j,i,e.conjugate()) )
+                        ec = e.conjugate()
+                        # If the conjugate has a negative sign in front
+                        # of it, (j,i,ec) won't be a monomial!
+                        if (j,i,ec) in MS.indices():
+                            E_ij += MS.monomial( (j,i,ec) )
+                        else:
+                            E_ij -= MS.monomial( (j,i,-ec) )
                         basis.append(E_ij)
 
         return tuple( basis )