]> gitweb.michael.orlitzky.com - sage.d.git/commitdiff
eja: don't waste time computing the unit element in subalgebras.
authorMichael Orlitzky <michael@orlitzky.com>
Mon, 5 Aug 2019 14:28:06 +0000 (10:28 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Mon, 5 Aug 2019 14:28:06 +0000 (10:28 -0400)
mjo/eja/eja_algebra.py
mjo/eja/eja_subalgebra.py

index 388b7ff3e3c6e6f76c3e8bf0e044720d50e14ac2..d4ee9b022d8524752d3e15edf37284c2381ce509 100644 (file)
@@ -480,7 +480,7 @@ class FiniteDimensionalEuclideanJordanAlgebra(CombinatorialFreeModule):
             sage: J.one()
             e0 + e1 + e2 + e3 + e4
 
-        TESTS::
+        TESTS:
 
         The identity element acts like the identity::
 
index 22fa870fb551624f9b9c47f181cd8aa023944cb6..7451e47bdbbbf2d58ce598aa3bb4e17ec42d5dae 100644 (file)
@@ -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.