- 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())
+ # If the subalgebra is trivial, its _matrix_span will be empty
+ # but we still want to be able convert the superalgebra's zero()
+ # element into the subalgebra's zero() element. There's no great
+ # workaround for this because sage checks that your basis is
+ # linearly-independent everywhere, so we can't just give it a
+ # basis consisting of the zero element.
+ m = elt.to_matrix()
+ if self.is_trivial() and m.is_zero():
+ return self.zero()
+ else:
+ return super()._element_constructor_(m)
+ else:
+ return super()._element_constructor_(elt)