"""
def __init__(self, modules, **kwargs):
- CombinatorialFreeModule_CartesianProduct.__init__(self, modules)
+ CombinatorialFreeModule_CartesianProduct.__init__(self,
+ modules,
+ **kwargs)
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")
# 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.
+ # 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.
FiniteDimensionalEJA.__init__(self,
basis,
jordan_product,
inner_product,
field=field,
+ orthonormalize=False,
check_field=False,
check_axioms=False,
- category=self.category(),
- **kwargs)
+ 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.
+ #
self.rank.set_cache(sum(J.rank() for J in modules))
Element = FiniteDimensionalEJAElement
-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
+FiniteDimensionalEJA.CartesianProduct = CartesianProductEJA
random_eja = ConcreteEJA.random_instance