From: Michael Orlitzky Date: Mon, 5 Aug 2019 14:28:06 +0000 (-0400) Subject: eja: don't waste time computing the unit element in subalgebras. X-Git-Url: http://gitweb.michael.orlitzky.com/?p=sage.d.git;a=commitdiff_plain;h=ec7dbfb6ce0054f55280412e43870b4019abc40c eja: don't waste time computing the unit element in subalgebras. --- diff --git a/mjo/eja/eja_algebra.py b/mjo/eja/eja_algebra.py index 388b7ff..d4ee9b0 100644 --- a/mjo/eja/eja_algebra.py +++ b/mjo/eja/eja_algebra.py @@ -480,7 +480,7 @@ class FiniteDimensionalEuclideanJordanAlgebra(CombinatorialFreeModule): sage: J.one() e0 + e1 + e2 + e3 + e4 - TESTS:: + TESTS: The identity element acts like the identity:: diff --git a/mjo/eja/eja_subalgebra.py b/mjo/eja/eja_subalgebra.py index 22fa870..7451e47 100644 --- a/mjo/eja/eja_subalgebra.py +++ b/mjo/eja/eja_subalgebra.py @@ -162,6 +162,62 @@ class FiniteDimensionalEuclideanJordanElementSubalgebra(FiniteDimensionalEuclide 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.