X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=mjo%2Feja%2Feja_element.py;h=9044860b8b8674c4110bde49edc2d46e9c999bfa;hb=667e0df9c07589c03616ad8cf42eebe5c86de50b;hp=4c9993a2cae68c8064a087c344ef2a5bf23877c5;hpb=d0792efbb64cc79d920275b9a9e5dbbadbea3b4c;p=sage.d.git diff --git a/mjo/eja/eja_element.py b/mjo/eja/eja_element.py index 4c9993a..9044860 100644 --- a/mjo/eja/eja_element.py +++ b/mjo/eja/eja_element.py @@ -1107,14 +1107,35 @@ class FiniteDimensionalEJAElement(IndexedFreeModuleElement): [0 0 0 0 0 0 1 0] [0 0 0 0 0 0 0 1] + This also works in Cartesian product algebras:: + + 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() - # This is just a manual "from_vector()", but of course - # matrix spaces aren't vector spaces in sage, so they - # don't have a from_vector() method. - return W.linear_combination( zip(B, self.to_vector()) ) + 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. + pairs = zip(B, self.to_vector()) + return sum( ( W(tuple(alpha*b_i for b_i in b)) + for (b,alpha) in pairs ), + W.zero()) + else: + # This is just a manual "from_vector()", but of course + # matrix spaces aren't vector spaces in sage, so they + # don't have a from_vector() method. + return W.linear_combination( zip(B, self.to_vector()) ) @@ -1413,12 +1434,8 @@ class FiniteDimensionalEJAElement(IndexedFreeModuleElement): True """ - from mjo.eja.eja_subalgebra import FiniteDimensionalEJASubalgebra powers = tuple( self**k for k in range(self.degree()) ) - A = FiniteDimensionalEJASubalgebra(self.parent(), - powers, - associative=True, - **kwargs) + A = self.parent().subalgebra(powers, associative=True, **kwargs) A.one.set_cache(A(self.parent().one())) return A @@ -1619,38 +1636,3 @@ 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()) - return sum( ( W(tuple(alpha*b_i for b_i in b)) - for (b,alpha) in pairs ), - W.zero())