X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=mjo%2Feja%2Feja_element.py;h=2976a38f91a986b7e5f2fafd7a24560d29411755;hb=6d32150d3f7c175473a1d590facce1ea7c5ca77a;hp=da4b12335cdffbf046c6ce100b88deea9b997458;hpb=12178d0b2943c4fe22c34c57171c794bec6a853a;p=sage.d.git diff --git a/mjo/eja/eja_element.py b/mjo/eja/eja_element.py index da4b123..2976a38 100644 --- a/mjo/eja/eja_element.py +++ b/mjo/eja/eja_element.py @@ -1238,6 +1238,37 @@ class FiniteDimensionalEuclideanJordanAlgebraElement(IndexedFreeModuleElement): 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