"""
P = self.parent()
r = P.rank()
- p = P._charpoly_coeff(0)
- # The _charpoly_coeff function already adds the factor of
- # -1 to ensure that _charpoly_coeff(0) is really what
- # appears in front of t^{0} in the charpoly. However,
- # we want (-1)^r times THAT for the determinant.
+ p = P._charpoly_coefficients()[0]
+ # The _charpoly_coeff function already adds the factor of -1
+ # to ensure that _charpoly_coefficients()[0] is really what
+ # appears in front of t^{0} in the charpoly. However, we want
+ # (-1)^r times THAT for the determinant.
return ((-1)**r)*p(*self.to_vector())
result.append( (evalue, proj(A.one()).superalgebra_element()) )
return result
- def full_spectral_decomposition(self):
- if self.is_zero():
- # Following the convention that the empty sum is the
- # algebra's additive identity.
- return []
-
- A = self.subalgebra_generated_by(orthonormalize_basis=True)
- if A.dimension() == 1:
- # I'm a scalar multiple of the identity element
- s = self.norm() / A.one().norm()
- return [(s, self * ~s)]
-
- result = []
- for (evalue, proj) in A(self).operator().spectral_decomposition():
- c = proj(A.one()).superalgebra_element()
-
- # We know that "c" here is idempotent, so the only question is
- # whether or not it can be decomposed further.
- if c.is_primitive_idempotent():
- result.append( (evalue, c) )
- else:
- for b in A.gens():
- b_decomp = b.full_spectral_decomposition()
- if len(b_decomp) > 1:
- for (a,y) in b_decomp:
- y_sup = y.superalgebra_element()
- eigenvecs = [ r[1] for r in result ]
- if not y_sup in eigenvecs:
- result.append( ( evalue*a, y_sup) )
- return result
-
def subalgebra_generated_by(self, orthonormalize_basis=False):
"""
Return the associative subalgebra of the parent EJA generated
# the trace is an empty sum.
return P.base_ring().zero()
- p = P._charpoly_coeff(r-1)
+ p = P._charpoly_coefficients()[r-1]
# The _charpoly_coeff function already adds the factor of
# -1 to ensure that _charpoly_coeff(r-1) is really what
# appears in front of t^{r-1} in the charpoly. However,