]> gitweb.michael.orlitzky.com - sage.d.git/blobdiff - mjo/eja/eja_element.py
eja: add subclass for Cartesian product elements.
[sage.d.git] / mjo / eja / eja_element.py
index c2f2b7c12ff92dbc0a57036057afad55acd63ddd..7388e963ceaf42c0bdf41851e2b8019de5e69b3a 100644 (file)
@@ -1117,6 +1117,7 @@ class FiniteDimensionalEJAElement(IndexedFreeModuleElement):
         return W.linear_combination( zip(B, self.to_vector()) )
 
 
+
     def norm(self):
         """
         The norm of this element with respect to :meth:`inner_product`.
@@ -1618,3 +1619,40 @@ class FiniteDimensionalEJAElement(IndexedFreeModuleElement):
 
         """
         return self.trace_inner_product(self).sqrt()
+
+
+
+class CartesianProductEJAElement(FiniteDimensionalEJAElement):
+
+    def to_matrix(self):
+        r"""
+        SETUP::
+
+            sage: from mjo.eja.eja_algebra import (HadamardEJA,
+            ....:                                  RealSymmetricEJA)
+
+        EXAMPLES::
+
+            sage: J1 = HadamardEJA(1)
+            sage: J2 = RealSymmetricEJA(2)
+            sage: J = cartesian_product([J1,J2])
+            sage: x = sum(J.gens())
+            sage: x.to_matrix()[0]
+            [1]
+            sage: x.to_matrix()[1]
+            [                  1 0.7071067811865475?]
+            [0.7071067811865475?                   1]
+
+        """
+        B = self.parent().matrix_basis()
+        W = self.parent().matrix_space()
+
+        # Aaaaand linear combinations don't work in Cartesian
+        # product spaces, even though they provide a method
+        # with that name.
+        pairs = zip(B, self.to_vector())
+        sigma = W.zero()
+        for (b,alpha) in pairs:
+            # sum(...) ALSO doesn't work on Cartesian products.
+            sigma += W(tuple(alpha*b_i for b_i in b))
+        return sigma