From 4261af7feeec74eee15057c31617bb6a59313e86 Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Sun, 13 Dec 2020 18:23:54 -0500 Subject: [PATCH] eja: unbreak DirectSumEJA, poorly. --- mjo/eja/eja_algebra.py | 59 +++++++++++++++++++++++++++++++++--------- 1 file changed, 47 insertions(+), 12 deletions(-) diff --git a/mjo/eja/eja_algebra.py b/mjo/eja/eja_algebra.py index ae41b8c..39703dd 100644 --- a/mjo/eja/eja_algebra.py +++ b/mjo/eja/eja_algebra.py @@ -2652,7 +2652,8 @@ class TrivialEJA(ConcreteEJA): # inappropriate for us. return cls(**kwargs) -class DirectSumEJA(ConcreteEJA): + +class DirectSumEJA(FiniteDimensionalEJA): r""" The external (orthogonal) direct sum of two other Euclidean Jordan algebras. Essentially the Cartesian product of its two factors. @@ -2676,6 +2677,10 @@ class DirectSumEJA(ConcreteEJA): 8 sage: J.rank() 5 + sage: J.matrix_space() + The Cartesian product of (Full MatrixSpace of 2 by 1 dense matrices + over Algebraic Real Field, Full MatrixSpace of 3 by 3 dense matrices + over Algebraic Real Field) TESTS: @@ -2695,21 +2700,50 @@ class DirectSumEJA(ConcreteEJA): if J1.base_ring() != J2.base_ring(): raise ValueError("algebras must share the same base field") field = J1.base_ring() - self._factors = (J1, J2) - basis = tuple( (a,b) for a in J1.basis() for b in J2.basis() ) - - def jordan_product(x,y): - return (x[0]*y[0], x[1]*y[1]) - def inner_product(x,y): - return x[0].inner_product(y[0]) + x[1].inner_product(y[1]) + M = J1.matrix_space().cartesian_product(J2.matrix_space()) + self._cartprod_algebra = J1.cartesian_product(J2) - super().__init__(basis, jordan_product, inner_product) + self._matrix_basis = tuple( [M((a,0)) for a in J1.matrix_basis()] + + [M((0,b)) for b in J2.matrix_basis()] ) + n = len(self._matrix_basis) + self._sets = None + CombinatorialFreeModule.__init__( + self, + field, + range(n), + category=self._cartprod_algebra.category(), + bracket=False, + **kwargs) self.rank.set_cache(J1.rank() + J2.rank()) - def factors(self): + + def product(self,x,y): + r""" + SETUP:: + + sage: from mjo.eja.eja_algebra import (JordanSpinEJA, + ....: ComplexHermitianEJA, + ....: DirectSumEJA) + + TESTS:: + + sage: set_random_seed() + sage: J1 = JordanSpinEJA(3, field=QQ) + sage: J2 = ComplexHermitianEJA(2, field=QQ, orthonormalize=False) + sage: J = DirectSumEJA(J1,J2) + sage: J.random_element()*J.random_element() in J + True + + """ + xv = self._cartprod_algebra.from_vector(x.to_vector()) + yv = self._cartprod_algebra.from_vector(y.to_vector()) + return self.from_vector((xv*yv).to_vector()) + + + def cartesian_factors(self): r""" Return the pair of this algebra's factors. @@ -2724,12 +2758,13 @@ class DirectSumEJA(ConcreteEJA): sage: J1 = HadamardEJA(2, field=QQ) sage: J2 = JordanSpinEJA(3, field=QQ) sage: J = DirectSumEJA(J1,J2) - sage: J.factors() + sage: J.cartesian_factors() (Euclidean Jordan algebra of dimension 2 over Rational Field, Euclidean Jordan algebra of dimension 3 over Rational Field) """ - return self._factors + return self._cartprod_algebra.cartesian_factors() + # def projections(self): # r""" -- 2.43.2