From: Michael Orlitzky Date: Thu, 25 Feb 2021 16:51:38 +0000 (-0500) Subject: eja: add rational-basis subclass for Cartesian products. X-Git-Url: https://gitweb.michael.orlitzky.com/?a=commitdiff_plain;h=c3b925473fca353cc16b13ab24de6664821ac305;p=sage.d.git eja: add rational-basis subclass for Cartesian products. --- diff --git a/mjo/eja/TODO b/mjo/eja/TODO index 103e8d1..90a49d3 100644 --- a/mjo/eja/TODO +++ b/mjo/eja/TODO @@ -1,7 +1,4 @@ -1. Finish CartesianProductEJA: add random_instance() method and - optimize. I guess I should create a separate class hierarchy for - Cartesian products of RationalBasisEJA? That way we get fast - charpoly and random_instance() defined... +1. Add cartesian products to random_eja(). 2. Add references and start citing them. diff --git a/mjo/eja/eja_algebra.py b/mjo/eja/eja_algebra.py index d38ba87..6048363 100644 --- a/mjo/eja/eja_algebra.py +++ b/mjo/eja/eja_algebra.py @@ -3210,4 +3210,42 @@ class CartesianProductEJA(CombinatorialFreeModule_CartesianProduct, FiniteDimensionalEJA.CartesianProduct = CartesianProductEJA +class RationalBasisCartesianProductEJA(CartesianProductEJA, + RationalBasisEJA): + r""" + A separate class for products of algebras for which we know a + rational basis. + + SETUP:: + + sage: from mjo.eja.eja_algebra import (JordanSpinEJA, + ....: RealSymmetricEJA) + + EXAMPLES: + + This gives us fast characteristic polynomial computations in + product algebras, too:: + + + sage: J1 = JordanSpinEJA(2) + sage: J2 = RealSymmetricEJA(3) + sage: J = cartesian_product([J1,J2]) + sage: J.characteristic_polynomial_of().degree() + 5 + sage: J.rank() + 5 + + """ + def __init__(self, algebras, **kwargs): + CartesianProductEJA.__init__(self, algebras, **kwargs) + + self._rational_algebra = None + if self.vector_space().base_field() is not QQ: + self._rational_algebra = cartesian_product([ + r._rational_algebra for r in algebras + ]) + + +RationalBasisEJA.CartesianProduct = RationalBasisCartesianProductEJA + random_eja = ConcreteEJA.random_instance