From 32723f51147eb6260c8b41549208c851e54a4c56 Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Sun, 25 Aug 2019 20:13:28 -0400 Subject: [PATCH] eja: simplify "span of powers" computation in subalgebras. --- mjo/eja/eja_subalgebra.py | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/mjo/eja/eja_subalgebra.py b/mjo/eja/eja_subalgebra.py index 646da2f..8f6e56b 100644 --- a/mjo/eja/eja_subalgebra.py +++ b/mjo/eja/eja_subalgebra.py @@ -137,25 +137,20 @@ class FiniteDimensionalEuclideanJordanElementSubalgebra(FiniteDimensionalEuclide # First compute the vector subspace spanned by the powers of # the given element. - superalgebra_basis = [self._superalgebra.one()] + powers = [ elt**k for k in range(V.dimension()) ] + power_vectors = [ p.to_vector() for p in powers ] + + # Figure out which powers form a linearly-independent set. + ind_rows = matrix(field, power_vectors).pivot_rows() + + # Pick those out of the list of all powers. + superalgebra_basis = tuple(map(powers.__getitem__, ind_rows)) + # If our superalgebra is a subalgebra of something else, then - # superalgebra.one().to_vector() won't have the right - # coordinates unless we use V.from_vector() below. - basis_vectors = [V.from_vector(self._superalgebra.one().to_vector())] - W = V.span_of_basis(basis_vectors) - for exponent in range(1, V.dimension()): - new_power = elt**exponent - basis_vectors.append( V.from_vector(new_power.to_vector()) ) - try: - W = V.span_of_basis(basis_vectors) - superalgebra_basis.append( new_power ) - except ValueError: - # Vectors weren't independent; bail and keep the - # last subspace that worked. - break - - # Make the basis hashable for UniqueRepresentation. - superalgebra_basis = tuple(superalgebra_basis) + # these vectors won't have the right coordinates for + # V.span_of_basis() unless we use V.from_vector() on them. + basis_vectors = map(power_vectors.__getitem__, ind_rows) + W = V.span_of_basis( V.from_vector(v) for v in basis_vectors ) # Now figure out the entries of the right-multiplication # matrix for the successive basis elements b0, b1,... of -- 2.43.2