From: Michael Orlitzky Date: Sun, 11 Oct 2020 12:35:18 +0000 (-0400) Subject: eja: rename orthogonal_idempotents() to a_jordan_frame(). X-Git-Url: http://gitweb.michael.orlitzky.com/?a=commitdiff_plain;h=9dd1e4c84fa17c8fe9d758a4fec9e090965c5cb9;p=sage.d.git eja: rename orthogonal_idempotents() to a_jordan_frame(). --- diff --git a/mjo/eja/eja_algebra.py b/mjo/eja/eja_algebra.py index 4b8d466..9198a8b 100644 --- a/mjo/eja/eja_algebra.py +++ b/mjo/eja/eja_algebra.py @@ -773,10 +773,9 @@ class FiniteDimensionalEuclideanJordanAlgebra(CombinatorialFreeModule): return (J0, J5, J1) - def orthogonal_idempotents(self): + def a_jordan_frame(self): r""" - Generate a set of `r` orthogonal idempotents for this algebra, - where `r` is its rank. + Generate a Jordan frame for this algebra. This implementation is based on the so-called "central orthogonal idempotents" implemented for (semisimple) centers @@ -798,9 +797,50 @@ class FiniteDimensionalEuclideanJordanAlgebra(CombinatorialFreeModule): Beware that Koecher defines the "center" of a Jordan algebra to be something else, because the usual definition is stupid in a (necessarily commutative) Jordan algebra. + + SETUP:: + + sage: from mjo.eja.eja_algebra import (random_eja, + ....: JordanSpinEJA, + ....: TrivialEJA) + + EXAMPLES: + + A Jordan frame for the trivial algebra has to be empty + (zero-length) since its rank is zero. More to the point, there + are no non-zero idempotents in the trivial EJA. This does not + cause any problems so long as we adopt the convention that the + empty sum is zero, since then the sole element of the trivial + EJA has an (empty) spectral decomposition:: + + sage: J = TrivialEJA() + sage: J.a_jordan_frame() + () + + A one-dimensional algebra has rank one (equal to its dimension), + and only one primitive idempotent, namely the algebra's unit + element:: + + sage: J = JordanSpinEJA(1) + sage: J.a_jordan_frame() + (e0,) + + TESTS:: + + sage: J = random_eja() + sage: c = J.a_jordan_frame() + sage: all( x^2 == x for x in c ) + True + sage: r = len(c) + sage: all( c[i]*c[j] == c[i]*(i==j) for i in range(r) + ....: for j in range(r) ) + True + """ + if self.dimension() == 0: + return () if self.dimension() == 1: - return [self.one()] + return (self.one(),) for g in self.gens(): eigenpairs = g.operator().matrix().right_eigenspaces() @@ -823,7 +863,7 @@ class FiniteDimensionalEuclideanJordanAlgebra(CombinatorialFreeModule): # apply this method recursively. return tuple( c.superalgebra_element() for subalgebra in subalgebras - for c in subalgebra.orthogonal_idempotents() ) + for c in subalgebra.a_jordan_frame() ) # If we got here, the algebra didn't decompose, at least not when we looked at # the eigenspaces corresponding only to basis elements of the algebra. The