]> gitweb.michael.orlitzky.com - sage.d.git/blobdiff - mjo/eja/eja_element.py
eja: start fixing Cartesian products of Cartesian products.
[sage.d.git] / mjo / eja / eja_element.py
index 5a2ff5a2cc97217042868723275fc51d0e97af85..9a770ae5f68b3e19f3946ca7716f299a3ff82685 100644 (file)
@@ -4,7 +4,7 @@ from sage.modules.free_module import VectorSpace
 from sage.modules.with_basis.indexed_element import IndexedFreeModuleElement
 
 from mjo.eja.eja_operator import FiniteDimensionalEJAOperator
-from mjo.eja.eja_utils import _mat2vec
+from mjo.eja.eja_utils import _mat2vec, _scale
 
 class FiniteDimensionalEJAElement(IndexedFreeModuleElement):
     """
@@ -1128,10 +1128,10 @@ class FiniteDimensionalEJAElement(IndexedFreeModuleElement):
         if self.parent()._matrix_basis_is_cartesian:
             # Aaaaand linear combinations don't work in Cartesian
             # product spaces, even though they provide a method
-            # with that name.
+            # with that name. This is special-cased because the
+            # _scale() function is slow.
             pairs = zip(B, self.to_vector())
-            return sum( ( W(tuple(alpha*b_i for b_i in b))
-                          for (b,alpha) in pairs ),
+            return sum( ( _scale(b, alpha) for (b,alpha) in pairs ),
                         W.zero())
         else:
             # This is just a manual "from_vector()", but of course
@@ -1450,7 +1450,11 @@ class FiniteDimensionalEJAElement(IndexedFreeModuleElement):
 
         """
         powers = tuple( self**k for k in range(self.degree()) )
-        A = self.parent().subalgebra(powers, associative=True, **kwargs)
+        A = self.parent().subalgebra(powers,
+                                     associative=True,
+                                     check_field=False,
+                                     check_axioms=False,
+                                     **kwargs)
         A.one.set_cache(A(self.parent().one()))
         return A