X-Git-Url: http://gitweb.michael.orlitzky.com/?p=sage.d.git;a=blobdiff_plain;f=mjo%2Feja%2Feja_element.py;fp=mjo%2Feja%2Feja_element.py;h=df14666d85df17d8005432ecad777b4a8d0f9076;hp=235047a153f0594bf450987ae2988a5873d92f36;hb=02bb28968221a0f077b49205e2746abd8c5450d9;hpb=1b030ce345a244815a8317f7e8a95114c16c330b diff --git a/mjo/eja/eja_element.py b/mjo/eja/eja_element.py index 235047a..df14666 100644 --- a/mjo/eja/eja_element.py +++ b/mjo/eja/eja_element.py @@ -1722,7 +1722,31 @@ class FiniteDimensionalEJAElement(IndexedFreeModuleElement): return self.trace_inner_product(self).sqrt() -class CartesianProductEJAElement(FiniteDimensionalEJAElement): +class CartesianProductParentEJAElement(FiniteDimensionalEJAElement): + r""" + An intermediate class for elements that have a Cartesian + product as their parent algebra. + + This is needed because the ``to_matrix`` method (which gives you a + representation from the superalgebra) needs to do special stuff + for Cartesian products. Specifically, an EJA subalgebra of a + Cartesian product EJA will not itself be a Cartesian product (it + has its own basis) -- but we want ``to_matrix()`` to be able to + give us a Cartesian product representation. + """ + def to_matrix(self): + # An override is necessary to call our custom _scale(). + 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. This is hidden in a subclass because the + # _scale() function is slow. + pairs = zip(B, self.to_vector()) + return W.sum( _scale(b, alpha) for (b,alpha) in pairs ) + +class CartesianProductEJAElement(CartesianProductParentEJAElement): def det(self): r""" Compute the determinant of this product-element using the @@ -1734,15 +1758,3 @@ class CartesianProductEJAElement(FiniteDimensionalEJAElement): """ from sage.misc.misc_c import prod return prod( f.det() for f in self.cartesian_factors() ) - - def to_matrix(self): - # An override is necessary to call our custom _scale(). - 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. This is hidden behind an "if" because the - # _scale() function is slow. - pairs = zip(B, self.to_vector()) - return W.sum( _scale(b, alpha) for (b,alpha) in pairs )