]> gitweb.michael.orlitzky.com - sage.d.git/commitdiff
eja: use the new deep change_ring() to clean things up.
authorMichael Orlitzky <michael@orlitzky.com>
Sat, 27 Feb 2021 23:29:29 +0000 (18:29 -0500)
committerMichael Orlitzky <michael@orlitzky.com>
Sat, 27 Feb 2021 23:29:29 +0000 (18:29 -0500)
mjo/eja/eja_algebra.py
mjo/eja/eja_element.py

index 558ff6b21f62e664ca1bf6e8730eaeb81a0f25d7..799490044dbb4d0834577f435afd2dbc89429baf 100644 (file)
@@ -144,17 +144,7 @@ class FiniteDimensionalEJA(CombinatorialFreeModule):
                  check_axioms=True,
                  prefix='e'):
 
-        # Keep track of whether or not the matrix basis consists of
-        # tuples, since we need special cases for them damned near
-        # everywhere.  This is INDEPENDENT of whether or not the
-        # algebra is a cartesian product, since a subalgebra of a
-        # cartesian product will have a basis of tuples, but will not
-        # in general itself be a cartesian product algebra.
-        self._matrix_basis_is_cartesian = False
         n = len(basis)
-        if n > 0:
-            if hasattr(basis[0], 'cartesian_factors'):
-                self._matrix_basis_is_cartesian = True
 
         if check_field:
             if not field.is_subring(RR):
@@ -163,20 +153,10 @@ class FiniteDimensionalEJA(CombinatorialFreeModule):
                 # we've specified a real embedding.
                 raise ValueError("scalar field is not real")
 
+        from mjo.eja.eja_utils import _change_ring
         # If the basis given to us wasn't over the field that it's
         # supposed to be over, fix that. Or, you know, crash.
-        if not cartesian_product:
-            # The field for a cartesian product algebra comes from one
-            # of its factors and is the same for all factors, so
-            # there's no need to "reapply" it on product algebras.
-            if self._matrix_basis_is_cartesian:
-                # OK since if n == 0, the basis does not consist of tuples.
-                P = basis[0].parent()
-                basis = tuple( P(tuple(b_i.change_ring(field) for b_i in b))
-                               for b in basis )
-            else:
-                basis = tuple( b.change_ring(field) for b in basis )
-
+        basis = tuple( _change_ring(b, field) for b in basis )
 
         if check_axioms:
             # Check commutativity of the Jordan and inner-products.
index e8c183b51d522efd14aba57b779b4b5ebfa4b896..81c2b54fca757f0696468b5c450a6dda674a0f7a 100644 (file)
@@ -1125,14 +1125,13 @@ class FiniteDimensionalEJAElement(IndexedFreeModuleElement):
         B = self.parent().matrix_basis()
         W = self.parent().matrix_space()
 
-        if self.parent()._matrix_basis_is_cartesian:
+        if hasattr(W, 'cartesian_factors'):
             # Aaaaand linear combinations don't work in Cartesian
-            # product spaces, even though they provide a method
-            # with that name. This is special-cased because the
+            # product spaces, even though they provide a method with
+            # that name. This is hidden behind an "if" because the
             # _scale() function is slow.
             pairs = zip(B, self.to_vector())
-            return sum( ( _scale(b, alpha) for (b,alpha) in pairs ),
-                        W.zero())
+            return W.sum( _scale(b, alpha) for (b,alpha) in pairs )
         else:
             # This is just a manual "from_vector()", but of course
             # matrix spaces aren't vector spaces in sage, so they