]> gitweb.michael.orlitzky.com - sage.d.git/commitdiff
eja: drop a pointless "solve" in the EJA charpoly system.
authorMichael Orlitzky <michael@orlitzky.com>
Sun, 14 Feb 2021 16:06:24 +0000 (11:06 -0500)
committerMichael Orlitzky <michael@orlitzky.com>
Sun, 14 Feb 2021 16:06:24 +0000 (11:06 -0500)
makefile
mjo/eja/eja_algebra.py

index 63b577a3880ddcc48daa0db5ef797bd9c0e8cef3..b4a41e4fa365cfb61761c8ec58870e1ed4eb856d 100644 (file)
--- a/makefile
+++ b/makefile
@@ -1,7 +1,7 @@
 SAGE = $(shell which sage)
 
 check:
-       PYTHONPATH="." $(SAGE) -t --timeout=0 --long --exitfirst mjo/
+       PYTHONPATH="." $(SAGE) -t --timeout=0 --memlimit=0 --long --exitfirst mjo/
 clean:
        find ./ -type f -name '*.pyc' -delete
        find ./ -type d -name '__pycache__' -delete
index 7c8adc7400880b0c4a95f7d73dec6cd11113aec6..c35bf256453cfa9a3758c034a47a043745eb0c2b 100644 (file)
@@ -1151,10 +1151,17 @@ class FiniteDimensionalEJA(CombinatorialFreeModule):
 
         # The theory says that only the first "r" coefficients are
         # nonzero, and they actually live in the original polynomial
-        # ring and not the fraction field. We negate them because
-        # in the actual characteristic polynomial, they get moved
-        # to the other side where x^r lives.
-        return -A_rref.solve_right(E*b).change_ring(R)[:r]
+        # ring and not the fraction field. We negate them because in
+        # the actual characteristic polynomial, they get moved to the
+        # other side where x^r lives. We don't bother to trim A_rref
+        # down to a square matrix and solve the resulting system,
+        # because the upper-left r-by-r portion of A_rref is
+        # guaranteed to be the identity matrix, so e.g.
+        #
+        #   A_rref.solve_right(Y)
+        #
+        # would just be returning Y.
+        return (-E*b)[:r].change_ring(R)
 
     @cached_method
     def rank(self):
@@ -1215,7 +1222,7 @@ class FiniteDimensionalEJA(CombinatorialFreeModule):
 
             sage: set_random_seed()    # long time
             sage: J = random_eja()     # long time
-            sage: caches = J.rank()    # long time
+            sage: cached = J.rank()    # long time
             sage: J.rank.clear_cache() # long time
             sage: J.rank() == cached   # long time
             True