From: Michael Orlitzky Date: Wed, 4 Nov 2020 22:28:56 +0000 (-0500) Subject: eja: speed up _charpoly_coefficients when rank is cached. X-Git-Url: http://gitweb.michael.orlitzky.com/?a=commitdiff_plain;ds=sidebyside;h=9ef0028e6f5d1748f1d24214ad1cccc686edfa54;p=sage.d.git eja: speed up _charpoly_coefficients when rank is cached. --- 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