X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=mjo%2Feja%2Feja_subalgebra.py;h=a3ad92a4f9f5acedc7a12c6c11971f0d9351c3a3;hb=ce4c7e206125cd399239698d26f951a4aac073f2;hp=22fa870fb551624f9b9c47f181cd8aa023944cb6;hpb=c8af8b316ce0f238fea8a994d24776f74dc1e271;p=sage.d.git diff --git a/mjo/eja/eja_subalgebra.py b/mjo/eja/eja_subalgebra.py index 22fa870..a3ad92a 100644 --- a/mjo/eja/eja_subalgebra.py +++ b/mjo/eja/eja_subalgebra.py @@ -157,11 +157,73 @@ class FiniteDimensionalEuclideanJordanElementSubalgebra(FiniteDimensionalEuclide :: """ + if elt == 0: + # Just as in the superalgebra class, we need to hack + # this special case to ensure that random_element() can + # coerce a ring zero into the algebra. + return self.zero() + if elt in self.superalgebra(): coords = self.vector_space().coordinate_vector(elt.to_vector()) return self.from_vector(coords) + def one_basis(self): + """ + Return the basis-element-index of this algebra's unit element. + """ + return 0 + + + def one(self): + """ + Return the multiplicative identity element of this algebra. + + The superclass method computes the identity element, which is + beyond overkill in this case: the algebra identity should be our + first basis element. We implement this via :meth:`one_basis` + because that method can optionally be used by other parts of the + category framework. + + SETUP:: + + sage: from mjo.eja.eja_algebra import (RealCartesianProductEJA, + ....: random_eja) + + EXAMPLES:: + + sage: J = RealCartesianProductEJA(5) + sage: J.one() + e0 + e1 + e2 + e3 + e4 + sage: x = sum(J.gens()) + sage: A = x.subalgebra_generated_by() + sage: A.one() + f0 + sage: A.one().superalgebra_element() + e0 + e1 + e2 + e3 + e4 + + TESTS: + + The identity element acts like the identity:: + + sage: set_random_seed() + sage: J = random_eja().random_element().subalgebra_generated_by() + sage: x = J.random_element() + sage: J.one()*x == x and x*J.one() == x + True + + The matrix of the unit element's operator is the identity:: + + sage: set_random_seed() + sage: J = random_eja().random_element().subalgebra_generated_by() + sage: actual = J.one().operator().matrix() + sage: expected = matrix.identity(J.base_ring(), J.dimension()) + sage: actual == expected + True + """ + return self.monomial(self.one_basis()) + + def superalgebra(self): """ Return the superalgebra that this algebra was generated from.