From 941a2733212f4d0072ea420265f83157222be564 Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Tue, 23 Feb 2021 09:58:07 -0500 Subject: [PATCH] eja: add subclass for Cartesian product elements. --- mjo/eja/eja_algebra.py | 5 +++-- mjo/eja/eja_element.py | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/mjo/eja/eja_algebra.py b/mjo/eja/eja_algebra.py index 7fb8027..a8df29f 100644 --- a/mjo/eja/eja_algebra.py +++ b/mjo/eja/eja_algebra.py @@ -31,7 +31,8 @@ from sage.modules.free_module import FreeModule, VectorSpace from sage.rings.all import (ZZ, QQ, AA, QQbar, RR, RLF, CLF, PolynomialRing, QuadraticField) -from mjo.eja.eja_element import FiniteDimensionalEJAElement +from mjo.eja.eja_element import (CartesianProductEJAElement, + FiniteDimensionalEJAElement) from mjo.eja.eja_operator import FiniteDimensionalEJAOperator from mjo.eja.eja_utils import _mat2vec @@ -3163,7 +3164,7 @@ class CartesianProductEJA(CombinatorialFreeModule_CartesianProduct, except: raise ValueError("not an element of this algebra") - Element = FiniteDimensionalEJAElement + Element = CartesianProductEJAElement FiniteDimensionalEJA.CartesianProduct = CartesianProductEJA diff --git a/mjo/eja/eja_element.py b/mjo/eja/eja_element.py index c2f2b7c..7388e96 100644 --- a/mjo/eja/eja_element.py +++ b/mjo/eja/eja_element.py @@ -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 -- 2.43.2