From 9ef0028e6f5d1748f1d24214ad1cccc686edfa54 Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Wed, 4 Nov 2020 17:28:56 -0500 Subject: [PATCH] eja: speed up _charpoly_coefficients when rank is cached. --- mjo/eja/eja_algebra.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/mjo/eja/eja_algebra.py b/mjo/eja/eja_algebra.py index fc64510..bcafe57 100644 --- a/mjo/eja/eja_algebra.py +++ b/mjo/eja/eja_algebra.py @@ -688,6 +688,14 @@ class FiniteDimensionalEuclideanJordanAlgebra(CombinatorialFreeModule): for k in range(n) ) L_x = matrix(F, n, n, L_x_i_j) + + r = None + if self.rank.is_in_cache(): + r = self.rank() + # There's no need to pad the system with redundant + # columns if we *know* they'll be redundant. + n = r + # Compute an extra power in case the rank is equal to # the dimension (otherwise, we would stop at x^(r-1)). x_powers = [ (L_x**k)*self.one().to_vector() @@ -696,7 +704,8 @@ class FiniteDimensionalEuclideanJordanAlgebra(CombinatorialFreeModule): AE = A.extended_echelon_form() E = AE[:,n:] A_rref = AE[:,:n] - r = A_rref.rank() + if r is None: + r = A_rref.rank() b = x_powers[r] # The theory says that only the first "r" coefficients are -- 2.43.2