- 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)
-
-
- # First compute the vector subspace spanned by the powers of
- # the given element.
- superalgebra_basis = [self._superalgebra.one()]
- # 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)
-
- # Now figure out the entries of the right-multiplication
- # matrix for the successive basis elements b0, b1,... of
- # that subspace.