from sage.matrix.constructor import matrix
+from sage.rings.all import QQ
from mjo.eja.eja_subalgebra import FiniteDimensionalEuclideanJordanSubalgebra
P = matrix(field, power_vectors)
if orthonormalize_basis == False:
+ # Echelonize the matrix ourselves, because otherwise the
+ # call to P.pivot_rows() below can choose a non-optimal
+ # row-reduction algorithm. In particular, scaling can
+ # help over AA because it avoids the RecursionError that
+ # gets thrown when we have to look too hard for a root.
+ #
+ # Beware: QQ supports an entirely different set of "algorithm"
+ # keywords than do AA and RR.
+ algo = None
+ if field is not QQ:
+ algo = "scaled_partial_pivoting"
+ P.echelonize(algorithm=algo)
+
# In this case, we just need to figure out which elements
# of the "powers" list are redundant... First compute the
# vector subspace spanned by the powers of the given