]> gitweb.michael.orlitzky.com - sage.d.git/blobdiff - mjo/eja/eja_algebra.py
eja: pass check=False in the fast charpoly_coefficients() method.
[sage.d.git] / mjo / eja / eja_algebra.py
index 3846b83ad6d76674f9f82e5f3a662ea5a2aeea4c..0da3eef9aa6e7835b6a6291d008bed4e31571872 100644 (file)
@@ -296,14 +296,26 @@ class FiniteDimensionalEuclideanJordanAlgebra(CombinatorialFreeModule):
         this algebra was constructed with ``check=False`` and passed
         an invalid multiplication table.
         """
+
+        # Used to check whether or not something is zero in an inexact
+        # ring. This number is sufficient to allow the construction of
+        # QuaternionHermitianEJA(2, RDF) with check=True.
+        epsilon = 1e-16
+
         for i in range(self.dimension()):
             for j in range(self.dimension()):
                 for k in range(self.dimension()):
                     x = self.monomial(i)
                     y = self.monomial(j)
                     z = self.monomial(k)
-                    if (x*y).inner_product(z) != x.inner_product(y*z):
-                        return False
+                    diff = (x*y).inner_product(z) - x.inner_product(y*z)
+
+                    if self.base_ring().is_exact():
+                        if diff != 0:
+                            return False
+                    else:
+                        if diff.abs() > epsilon:
+                            return False
 
         return True
 
@@ -1148,10 +1160,13 @@ class MatrixEuclideanJordanAlgebra(FiniteDimensionalEuclideanJordanAlgebra):
 
             # Do this over the rationals and convert back at the end.
             # Only works because we know the entries of the basis are
-            # integers.
+            # integers. The argument ``check=False`` is required
+            # because the trace inner-product method for this
+            # class is a stub and can't actually be checked.
             J = MatrixEuclideanJordanAlgebra(QQ,
                                              basis,
-                                             normalize_basis=False)
+                                             normalize_basis=False,
+                                             check=False)
             a = J._charpoly_coefficients()
 
             # Unfortunately, changing the basis does change the