From bbccfeb45b094c930240ec44d55b4388a98e57cb Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Sat, 20 Feb 2021 23:14:53 -0500 Subject: [PATCH] eja: add cartesian_inner_product() method for CartesianProductEJA. --- mjo/eja/eja_algebra.py | 75 +++++++++++++++++++++--------------------- 1 file changed, 37 insertions(+), 38 deletions(-) diff --git a/mjo/eja/eja_algebra.py b/mjo/eja/eja_algebra.py index 08ad700..99d89c4 100644 --- a/mjo/eja/eja_algebra.py +++ b/mjo/eja/eja_algebra.py @@ -2894,6 +2894,43 @@ class CartesianProductEJA(CombinatorialFreeModule_CartesianProduct, return FiniteDimensionalEJAOperator(Ji,self,Ei.matrix()) + def cartesian_inner_product(self, x, y): + r""" + The standard componentwise Cartesian inner-product. + + We project ``x`` and ``y`` onto our factors, and add up the + inner-products from the subalgebras. + + SETUP:: + + + sage: from mjo.eja.eja_algebra import (HadamardEJA, + ....: QuaternionHermitianEJA) + + EXAMPLE:: + + sage: J1 = HadamardEJA(3,field=QQ) + sage: J2 = QuaternionHermitianEJA(2,field=QQ,orthonormalize=False) + sage: J = cartesian_product([J1,J2]) + sage: x1 = J1.one() + sage: x2 = x1 + sage: y1 = J2.one() + sage: y2 = y1 + sage: x1.inner_product(x2) + 3 + sage: y1.inner_product(y2) + 2 + sage: z1 = J._cartesian_product_of_elements((x1,y1)) + sage: z2 = J._cartesian_product_of_elements((x2,y2)) + sage: J.cartesian_inner_product(z1,z2) + 5 + + """ + m = len(self.cartesian_factors()) + projections = ( self.cartesian_projection(i) for i in range(m) ) + return sum( P(x).inner_product(P(y)) for P in projections ) + + FiniteDimensionalEJA.CartesianProduct = CartesianProductEJA @@ -3001,44 +3038,6 @@ FiniteDimensionalEJA.CartesianProduct = CartesianProductEJA # iota_right = FiniteDimensionalEJAOperator(J2,self,I2) # return (iota_left, iota_right) -# def inner_product(self, x, y): -# r""" -# The standard Cartesian inner-product. - -# We project ``x`` and ``y`` onto our factors, and add up the -# inner-products from the subalgebras. - -# SETUP:: - - -# sage: from mjo.eja.eja_algebra import (HadamardEJA, -# ....: QuaternionHermitianEJA, -# ....: DirectSumEJA) - -# EXAMPLE:: - -# sage: J1 = HadamardEJA(3,field=QQ) -# sage: J2 = QuaternionHermitianEJA(2,field=QQ,orthonormalize=False) -# sage: J = DirectSumEJA(J1,J2) -# sage: x1 = J1.one() -# sage: x2 = x1 -# sage: y1 = J2.one() -# sage: y2 = y1 -# sage: x1.inner_product(x2) -# 3 -# sage: y1.inner_product(y2) -# 2 -# sage: J.one().inner_product(J.one()) -# 5 - -# """ -# (pi_left, pi_right) = self.projections() -# x1 = pi_left(x) -# x2 = pi_right(x) -# y1 = pi_left(y) -# y2 = pi_right(y) - -# return (x1.inner_product(y1) + x2.inner_product(y2)) -- 2.43.2