From: Michael Orlitzky Date: Fri, 26 Jul 2019 17:41:25 +0000 (-0400) Subject: eja: add negation/subtraction for morphisms. X-Git-Url: https://gitweb.michael.orlitzky.com/?a=commitdiff_plain;h=ca41a63e824257c972f275e4b47e474adf13bc2e;p=sage.d.git eja: add negation/subtraction for morphisms. --- diff --git a/mjo/eja/euclidean_jordan_algebra.py b/mjo/eja/euclidean_jordan_algebra.py index d459ebe..5f01556 100644 --- a/mjo/eja/euclidean_jordan_algebra.py +++ b/mjo/eja/euclidean_jordan_algebra.py @@ -30,13 +30,13 @@ class FiniteDimensionalEuclideanJordanAlgebraMorphism(FiniteDimensionalAlgebraMo 2. Inputs and outputs the underlying matrix with respect to COLUMN vectors, unlike the parent class. - 3. Allows us to add, multiply (compose), and invert morphisms in - the obvious way. + 3. Allows us to add, subtract, negate, multiply (compose), and + invert morphisms in the obvious way. If this seems a bit heavyweight, it is. I would have been happy to use a the ring morphism that underlies the finite-dimensional algebra morphism, but they don't seem to be callable on elements of - our EJA, and you can't add/multiply/invert them. + our EJA, and you can't add/multiply/etc. them. """ def __add__(self, other): @@ -162,6 +162,36 @@ class FiniteDimensionalEuclideanJordanAlgebraMorphism(FiniteDimensionalAlgebraMo self.matrix()*other.matrix() ) + def __neg__(self): + """ + Negate this morphism. + + EXAMPLES:: + + sage: J = RealSymmetricEJA(2) + sage: x = J.one() + sage: -x.operator() + Morphism from Euclidean Jordan algebra of degree 3 over Rational + Field to Euclidean Jordan algebra of degree 3 over Rational Field + given by matrix + [-1 0 0] + [ 0 -1 0] + [ 0 0 -1] + + TESTS:: + + sage: set_random_seed() + sage: J = random_eja() + sage: x = J.random_element() + sage: -x.operator() in J.Hom(J) + True + + """ + return FiniteDimensionalEuclideanJordanAlgebraMorphism( + self.parent(), + -self.matrix() ) + + def _repr_(self): """ We override only the representation that is shown to the user, @@ -196,6 +226,36 @@ class FiniteDimensionalEuclideanJordanAlgebraMorphism(FiniteDimensionalAlgebraMo return "Morphism from {} to {} given by matrix\n{}".format( self.domain(), self.codomain(), self.matrix()) + + def __sub__(self, other): + """ + Subtract one morphism from another using addition and negation. + + EXAMPLES:: + + sage: J = RealSymmetricEJA(2) + sage: L1 = J.one().operator() + sage: L1 - L1 + Morphism from Euclidean Jordan algebra of degree 3 over Rational + Field to Euclidean Jordan algebra of degree 3 over Rational + Field given by matrix + [0 0 0] + [0 0 0] + [0 0 0] + + TESTS:: + + sage: set_random_seed() + sage: J = random_eja() + sage: x = J.random_element() + sage: y = J.random_element() + sage: x.operator() - y.operator() in J.Hom(J) + True + + """ + return self + (-other) + + def matrix(self): """ Return the matrix of this morphism with respect to a left-action