]> gitweb.michael.orlitzky.com - sage.d.git/commitdiff
eja: unbreak DirectSumEJA, poorly.
authorMichael Orlitzky <michael@orlitzky.com>
Sun, 13 Dec 2020 23:23:54 +0000 (18:23 -0500)
committerMichael Orlitzky <michael@orlitzky.com>
Sun, 13 Dec 2020 23:23:54 +0000 (18:23 -0500)
mjo/eja/eja_algebra.py

index ae41b8c6e12415d4b940958ca3798749a4e8c7bf..39703dd1b65d416865af044f41164e6ac4c3ee48 100644 (file)
@@ -2652,7 +2652,8 @@ class TrivialEJA(ConcreteEJA):
         # inappropriate for us.
         return cls(**kwargs)
 
         # 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.
     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
         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:
 
 
     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()
         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())
 
 
         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.
 
         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: 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)
 
         """
             (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"""
 
 #     def projections(self):
 #         r"""