# TODO: make this unnecessary somehow.
from sage.misc.lazy_import import lazy_import
lazy_import('mjo.eja.eja_algebra', 'FiniteDimensionalEuclideanJordanAlgebra')
-lazy_import('mjo.eja.eja_subalgebra',
+lazy_import('mjo.eja.eja_element_subalgebra',
'FiniteDimensionalEuclideanJordanElementSubalgebra')
from mjo.eja.eja_operator import FiniteDimensionalEuclideanJordanAlgebraOperator
from mjo.eja.eja_utils import _mat2vec
True
"""
- # TODO: when the Peirce decomposition is implemented for real,
- # we can use that instead of finding this eigenspace manually.
- #
- # Trivial eigenspaces don't appear in the list, so we default to the
- # trivial one and override it if there's a nontrivial space in the
- # list.
if not self.is_idempotent():
return False
- J1 = VectorSpace(self.parent().base_ring(), 0)
- for (eigval, eigspace) in self.operator().matrix().left_eigenspaces():
- if eigval == 1:
- J1 = eigspace
+ (_,_,J1) = self.parent().peirce_decomposition(self)
return (J1.dimension() == 1)
sage: from mjo.eja.eja_algebra import random_eja
- TESTS::
+ TESTS:
+
+ Ensure that we can find an idempotent in a non-trivial algebra
+ where there are non-nilpotent elements::
sage: set_random_seed()
- sage: J = random_eja()
+ sage: J = random_eja(nontrivial=True)
sage: x = J.random_element()
sage: while x.is_nilpotent():
....: x = J.random_element()
True
"""
+ if self.parent().is_trivial():
+ return self
+
if self.is_nilpotent():
raise ValueError("this only works with non-nilpotent elements!")