X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=mjo%2Feja%2Feja_subalgebra.py;h=c9abada53cf3fbd3803601fa0e7b430a0b506fd1;hb=02bb28968221a0f077b49205e2746abd8c5450d9;hp=c8bf548e2264edf8d2ee53d82f1dbf5e78ead8f7;hpb=d15174bdec505911105c332e02aea50e7b251e7e;p=sage.d.git diff --git a/mjo/eja/eja_subalgebra.py b/mjo/eja/eja_subalgebra.py index c8bf548..c9abada 100644 --- a/mjo/eja/eja_subalgebra.py +++ b/mjo/eja/eja_subalgebra.py @@ -2,7 +2,8 @@ from sage.matrix.constructor import matrix from sage.misc.cachefunc import cached_method from mjo.eja.eja_algebra import FiniteDimensionalEJA -from mjo.eja.eja_element import FiniteDimensionalEJAElement +from mjo.eja.eja_element import (FiniteDimensionalEJAElement, + CartesianProductParentEJAElement) class FiniteDimensionalEJASubalgebraElement(FiniteDimensionalEJAElement): """ @@ -15,7 +16,6 @@ class FiniteDimensionalEJASubalgebraElement(FiniteDimensionalEJAElement): The matrix representation of an element in the subalgebra is the same as its matrix representation in the superalgebra:: - sage: set_random_seed() sage: x = random_eja(field=QQ,orthonormalize=False).random_element() sage: A = x.subalgebra_generated_by(orthonormalize=False) sage: y = A.random_element() @@ -28,11 +28,10 @@ class FiniteDimensionalEJASubalgebraElement(FiniteDimensionalEJAElement): works like it does in the superalgebra, even if we orthonormalize our basis:: - sage: set_random_seed() - sage: x = random_eja(field=AA).random_element() - sage: A = x.subalgebra_generated_by(orthonormalize=True) - sage: y = A.random_element() - sage: y.operator()(A.one()) == y + sage: x = random_eja(field=AA).random_element() # long time + sage: A = x.subalgebra_generated_by(orthonormalize=True) # long time + sage: y = A.random_element() # long time + sage: y.operator()(A.one()) == y # long time True """ @@ -71,7 +70,6 @@ class FiniteDimensionalEJASubalgebraElement(FiniteDimensionalEJAElement): We can convert back and forth faithfully:: - sage: set_random_seed() sage: J = random_eja(field=QQ, orthonormalize=False) sage: x = J.random_element() sage: A = x.subalgebra_generated_by(orthonormalize=False) @@ -268,3 +266,41 @@ class FiniteDimensionalEJASubalgebra(FiniteDimensionalEJA): Element = FiniteDimensionalEJASubalgebraElement + + + +class FiniteDimensionalCartesianProductEJASubalgebraElement(FiniteDimensionalEJASubalgebraElement, 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:`FiniteDimensionalEJASubalgebraElement`, 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 FiniteDimensionalCartesianProductEJASubalgebra(FiniteDimensionalEJASubalgebra): + r""" + Subalgebras whose parents are Cartesian products. Exists only + to specify a special element class that will (in addition) + inherit from ``CartesianProductParentEJAElement``. + """ + Element = FiniteDimensionalCartesianProductEJASubalgebraElement