X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;ds=sidebyside;f=mjo%2Fmatrix_algebra.py;h=94a8410f9929986a8737f9bbb846c04490751fe5;hb=e28bd3518185e3a87866c61d973876f84fdeea66;hp=5b8b267f5120a4a319f77777885b19731437f518;hpb=93b513358f3ef7e789ba75f6f82faedea9fc34b3;p=sage.d.git diff --git a/mjo/matrix_algebra.py b/mjo/matrix_algebra.py index 5b8b267..94a8410 100644 --- a/mjo/matrix_algebra.py +++ b/mjo/matrix_algebra.py @@ -37,7 +37,7 @@ class MatrixAlgebraElement(IndexedFreeModuleElement): l[i][j] += v*e return l - def __repr__(self): + def _repr_(self): r""" Display this matrix as a table. @@ -232,10 +232,38 @@ class MatrixAlgebra(CombinatorialFreeModule): ncols = nrows def product_on_basis(self, mon1, mon2): + r""" + + SETUP:: + + sage: from mjo.hurwitz import Octonions + sage: from mjo.matrix_algebra import MatrixAlgebra + + TESTS:: + + sage: O = Octonions(QQ) + sage: e = O.gens() + sage: e[2]*e[1] + -e3 + sage: A = MatrixAlgebra(O,QQ,2) + sage: A.product_on_basis( (0,0,e[2]), (0,0,e[1]) ) + +-----+---+ + | -e3 | 0 | + +-----+---+ + | 0 | 0 | + +-----+---+ + + """ (i,j,e1) = mon1 (k,l,e2) = mon2 if j == k: - return self.monomial((i,l,e1*e2)) + # If e1*e2 has a negative sign in front of it, + # then (i,l,e1*e2) won't be a monomial! + p = e1*e2 + if (i,l,p) in self.indices(): + return self.monomial((i,l,p)) + else: + return -self.monomial((i,l,-p)) else: return self.zero() @@ -294,29 +322,3 @@ class MatrixAlgebra(CombinatorialFreeModule): return self else: return self.from_list(elt) - - -class HurwitzMatrixAlgebraElement(MatrixAlgebraElement): - def is_hermitian(self): - r""" - - SETUP:: - - sage: from mjo.matrix_algebra import HurwitzMatrixAlgebra - - EXAMPLES:: - - sage: A = HurwitzMatrixAlgebra(QQbar, ZZ, 2) - sage: M = A([ [ 0,I], - ....: [-I,0] ]) - sage: M.is_hermitian() - True - - """ - return all( self[i,j] == self[j,i].conjugate() - for i in range(self.nrows()) - for j in range(self.ncols()) ) - - -class HurwitzMatrixAlgebra(MatrixAlgebra): - Element = HurwitzMatrixAlgebraElement