X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=mjo%2Feja%2Feja_algebra.py;h=1302ca18bf9988f57048cdd9035e79212aa7ca3d;hb=cc309b502850fd99abc742ee4ee4e015312f65ac;hp=55b8207ddc3f881e8d98f245bf0275bc4b947334;hpb=11d8f0663525f469a0557b3f543338709c8e5148;p=sage.d.git diff --git a/mjo/eja/eja_algebra.py b/mjo/eja/eja_algebra.py index 55b8207..1302ca1 100644 --- a/mjo/eja/eja_algebra.py +++ b/mjo/eja/eja_algebra.py @@ -2742,9 +2742,7 @@ class CartesianProductEJA(CombinatorialFreeModule_CartesianProduct, """ def __init__(self, modules, **kwargs): - CombinatorialFreeModule_CartesianProduct.__init__(self, - modules, - **kwargs) + CombinatorialFreeModule_CartesianProduct.__init__(self, modules) field = modules[0].base_ring() if not all( J.base_ring() == field for J in modules ): raise ValueError("all factors must share the same base field") @@ -2766,33 +2764,16 @@ class CartesianProductEJA(CombinatorialFreeModule_CartesianProduct, # some join of the EJA and Cartesian product # categories. There's no need to check the field since it # already came from an EJA. Likewise the axioms are guaranteed - # to be satisfied. We can't orthonormalize by default because - # there's no way to pass "orthonormalize=False" to - # cartesian_product(...) when the base ring is QQ and - # orthonormalizing would give us irrational entries. - # - # TODO: create a separate constructor that is capable of - # orthonormalizing and is only used by the cartesian_product() - # thingy. + # to be satisfied. FiniteDimensionalEJA.__init__(self, basis, jordan_product, inner_product, field=field, - orthonormalize=False, check_field=False, check_axioms=False, - category=self.category()) - # TODO: - # - # Initialize the FDEJA class, too. Does this override the - # initialization that we did for the - # CombinatorialFreeModule_CartesianProduct class? If not, we - # will probably have to duplicate some of the work (i.e. one - # of the constructors). Since the CartesianProduct one is - # smaller, that makes the most sense to copy/paste if it comes - # down to that. - # + category=self.category(), + **kwargs) self.rank.set_cache(sum(J.rank() for J in modules)) @@ -3059,5 +3040,23 @@ class CartesianProductEJA(CombinatorialFreeModule_CartesianProduct, Element = FiniteDimensionalEJAElement -FiniteDimensionalEJA.CartesianProduct = CartesianProductEJA +class FiniteDimensionalEJA_CartesianProduct(CartesianProductEJA): + r""" + A wrapper around the :class:`CartesianProductEJA` class that gets + used by the ``cartesian_product`` functor. Its one job is to set + ``orthonormalize=False``, since ``cartesian_product()`` can't be + made to pass that option through. And if we try to orthonormalize + over the rationals, we get conversion errors. If you want a non- + standard Jordan product or inner product, or if you want to + orthonormalize the basis, use :class:`CartesianProductEJA` + directly. + """ + def __init__(self, modules, **options): + CombinatorialFreeModule_CartesianProduct.__init__(self, + modules, + **options) + CartesianProductEJA.__init__(self, modules, orthonormalize=False) + + +FiniteDimensionalEJA.CartesianProduct = FiniteDimensionalEJA_CartesianProduct random_eja = ConcreteEJA.random_instance