From: Michael Orlitzky Date: Sat, 27 Jul 2019 00:44:42 +0000 (-0400) Subject: eja: fix powers of zero for operators. X-Git-Url: https://gitweb.michael.orlitzky.com/?a=commitdiff_plain;h=8c9b2473fb91154a844cb9c67aaa1b7302852a8d;p=sage.d.git eja: fix powers of zero for operators. When you raise a morphism to the power of zero, it returns an object (the identity morphism) in a much more general and useless space. We need to be able to add/subtract these things. So now we have our own one() method for the Homset, and our own __pow__ for morphisms. --- diff --git a/mjo/eja/euclidean_jordan_algebra.py b/mjo/eja/euclidean_jordan_algebra.py index 713eca5..0b50c23 100644 --- a/mjo/eja/euclidean_jordan_algebra.py +++ b/mjo/eja/euclidean_jordan_algebra.py @@ -81,6 +81,18 @@ class FiniteDimensionalEuclideanJordanAlgebraHomset(FiniteDimensionalAlgebraHoms return FiniteDimensionalEuclideanJordanAlgebraMorphism(self, x) + def one(self): + """ + Return the identity morphism, but as a member of the right + space (so that we can add it, multiply it, etc.) + """ + cols = self.domain().dimension() + rows = self.codomain().dimension() + mat = identity_matrix(self.base_ring(), rows, cols) + return FiniteDimensionalEuclideanJordanAlgebraMorphism(self, mat) + + + class FiniteDimensionalEuclideanJordanAlgebraMorphism(FiniteDimensionalAlgebraMorphism): """ A linear map between two finite-dimensional EJAs. @@ -260,6 +272,37 @@ class FiniteDimensionalEuclideanJordanAlgebraMorphism(FiniteDimensionalAlgebraMo __mul__ = _lmul_ + def __pow__(self, n): + """ + + TESTS:: + + sage: J = JordanSpinEJA(4) + sage: e0,e1,e2,e3 = J.gens() + sage: x = -5/2*e0 + 1/2*e2 + 20*e3 + sage: Qx = x.quadratic_representation() + sage: Qx^0 + Morphism from Euclidean Jordan algebra of degree 4 over Rational + Field to Euclidean Jordan algebra of degree 4 over Rational Field + given by matrix + [1 0 0 0] + [0 1 0 0] + [0 0 1 0] + [0 0 0 1] + sage: (x^0).quadratic_representation() == Qx^0 + True + + """ + if n == 0: + # We get back the stupid identity morphism which doesn't + # live in the right space. + return self.parent().one() + elif n == 1: + return self + else: + return FiniteDimensionalAlgebraMorphism.__pow__(self,n) + + def _neg_(self): """ Negate this morphism.