]> gitweb.michael.orlitzky.com - sage.d.git/blobdiff - mjo/eja/eja_subalgebra.py
eja: pass keyword arguments through simple EJA constructors.
[sage.d.git] / mjo / eja / eja_subalgebra.py
index 22fa870fb551624f9b9c47f181cd8aa023944cb6..a3ad92a4f9f5acedc7a12c6c11971f0d9351c3a3 100644 (file)
@@ -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.