]> gitweb.michael.orlitzky.com - sage.d.git/commitdiff
eja: start experiment full_spectral_decomposition() method.
authorMichael Orlitzky <michael@orlitzky.com>
Sun, 18 Oct 2020 14:56:38 +0000 (10:56 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Sun, 18 Oct 2020 14:56:38 +0000 (10:56 -0400)
mjo/eja/eja_element.py

index da4b12335cdffbf046c6ce100b88deea9b997458..2976a38f91a986b7e5f2fafd7a24560d29411755 100644 (file)
@@ -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