+
+class CartesianProductEJASubalgebraElement(EJASubalgebraElement,
+ CartesianProductParentEJAElement):
+ r"""
+ The class for elements that both belong to a subalgebra and
+ have a Cartesian product algebra as their parent. By inheriting
+ :class:`CartesianProductParentEJAElement` in addition to
+ :class:`EJASubalgebraElement`, we allow the
+ ``to_matrix()`` method to be overridden with the version that
+ works on Cartesian products.
+
+ SETUP::
+
+ sage: from mjo.eja.eja_algebra import (HadamardEJA,
+ ....: RealSymmetricEJA)
+
+ TESTS:
+
+ This used to fail when ``subalgebra_idempotent()`` tried to
+ embed the subalgebra element back into the original EJA::
+
+ sage: J1 = HadamardEJA(0, field=QQ, orthonormalize=False)
+ sage: J2 = RealSymmetricEJA(2, field=QQ, orthonormalize=False)
+ sage: J = cartesian_product([J1,J2])
+ sage: J.one().subalgebra_idempotent() == J.one()
+ True
+
+ """
+ pass
+
+class CartesianProductEJASubalgebra(EJASubalgebra):
+ r"""
+ Subalgebras whose parents are Cartesian products. Exists only
+ to specify a special element class that will (in addition)
+ inherit from ``CartesianProductParentEJAElement``.
+ """
+ Element = CartesianProductEJASubalgebraElement