- if elt.is_zero():
- # Short circuit because 0^0 == 1 is going to make us
- # think we have a one-dimensional algebra otherwise.
- natural_basis = tuple()
- mult_table = tuple()
- rank = 0
- self._vector_space = V.zero_subspace()
- self._superalgebra_basis = []
- fdeja = super(FiniteDimensionalEuclideanJordanElementSubalgebra,
- self)
- return fdeja.__init__(field,
- mult_table,
- rank,
- prefix=prefix,
- category=category,
- natural_basis=natural_basis)
-
-
- # This list is guaranteed to contain all independent powers,
- # because it's the maximal set of powers that could possibly
- # be independent (by a dimension argument).
- powers = [ elt**k for k in range(V.dimension()) ]
-
- if orthonormalize_basis == False:
- # 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
- # element.
- 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
- # 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)
+ # If our superalgebra is a subalgebra of something else, then
+ # these vectors won't have the right coordinates for
+ # V.span_of_basis() unless we use V.from_vector() on them.
+ W = V.span_of_basis( V.from_vector(b.to_vector()) for b in basis )
+
+ n = len(basis)
+ if check_axioms:
+ # The tables are square if we're verifying that they
+ # are commutative.
+ mult_table = [[W.zero() for j in range(n)] for i in range(n)]
+ ip_table = [ [ self._superalgebra.inner_product(basis[i],basis[j])
+ for j in range(n) ]
+ for i in range(n) ]