X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=mjo%2Feja%2Feja_operator.py;h=0e898b59fb9d8a99090da6f4baec3e49df51d9cd;hb=33b5476e1422a36972979e768f1829cec1b421a5;hp=b225b295c9e0f4e87befb02e28870eb7a0d1b9dd;hpb=9c86e23e2ef79fb9d7003f68952750dda0ca0e0b;p=sage.d.git diff --git a/mjo/eja/eja_operator.py b/mjo/eja/eja_operator.py index b225b29..0e898b5 100644 --- a/mjo/eja/eja_operator.py +++ b/mjo/eja/eja_operator.py @@ -1,4 +1,4 @@ -from sage.all import matrix +from sage.matrix.constructor import matrix from sage.categories.all import FreeModules from sage.categories.map import Map @@ -13,6 +13,8 @@ class FiniteDimensionalEuclideanJordanAlgebraOperator(Map): F = domain_eja.base_ring() if not (F == codomain_eja.base_ring()): raise ValueError("domain and codomain must have the same base ring") + if not (F == mat.base_ring()): + raise ValueError("domain and matrix must have the same base ring") # We need to supply something here to avoid getting the # default Homset of the parent FiniteDimensionalAlgebra class, @@ -46,14 +48,14 @@ class FiniteDimensionalEuclideanJordanAlgebraOperator(Map): EXAMPLES:: sage: J = JordanSpinEJA(3) - sage: x = J.linear_combination(zip(range(len(J.gens())), J.gens())) + sage: x = J.linear_combination(zip(J.gens(),range(len(J.gens())))) sage: id = identity_matrix(J.base_ring(), J.dimension()) sage: f = FiniteDimensionalEuclideanJordanAlgebraOperator(J,J,id) sage: f(x) == x True """ - return self.codomain()(self.matrix()*x.vector()) + return self.codomain().from_vector(self.matrix()*x.to_vector()) def _add_(self, other): @@ -81,17 +83,18 @@ class FiniteDimensionalEuclideanJordanAlgebraOperator(Map): [2 0 0] [0 2 0] [0 0 2] - Domain: Euclidean Jordan algebra of degree 3 over Rational Field - Codomain: Euclidean Jordan algebra of degree 3 over Rational Field + Domain: Euclidean Jordan algebra of dimension 3 over... + Codomain: Euclidean Jordan algebra of dimension 3 over... If you try to add two identical vector space operators but on different EJAs, that should blow up:: sage: J1 = RealSymmetricEJA(2) + sage: id1 = identity_matrix(J1.base_ring(), 3) sage: J2 = JordanSpinEJA(3) - sage: id = identity_matrix(QQ, 3) - sage: f = FiniteDimensionalEuclideanJordanAlgebraOperator(J1,J1,id) - sage: g = FiniteDimensionalEuclideanJordanAlgebraOperator(J2,J2,id) + sage: id2 = identity_matrix(J2.base_ring(), 3) + sage: f = FiniteDimensionalEuclideanJordanAlgebraOperator(J1,J1,id1) + sage: g = FiniteDimensionalEuclideanJordanAlgebraOperator(J2,J2,id2) sage: f + g Traceback (most recent call last): ... @@ -135,8 +138,10 @@ class FiniteDimensionalEuclideanJordanAlgebraOperator(Map): Linear operator between finite-dimensional Euclidean Jordan algebras represented by the matrix: [39 54 69] - Domain: Euclidean Jordan algebra of degree 3 over Rational Field - Codomain: Euclidean Jordan algebra of degree 1 over Rational Field + Domain: Euclidean Jordan algebra of dimension 3 over + Rational Field + Codomain: Euclidean Jordan algebra of dimension 1 over + Rational Field """ return FiniteDimensionalEuclideanJordanAlgebraOperator( @@ -175,8 +180,8 @@ class FiniteDimensionalEuclideanJordanAlgebraOperator(Map): [1 0 0] [0 1 0] [0 0 1] - Domain: Euclidean Jordan algebra of degree 3 over Rational Field - Codomain: Euclidean Jordan algebra of degree 3 over Rational Field + Domain: Euclidean Jordan algebra of dimension 3 over... + Codomain: Euclidean Jordan algebra of dimension 3 over... """ return FiniteDimensionalEuclideanJordanAlgebraOperator( @@ -209,26 +214,31 @@ class FiniteDimensionalEuclideanJordanAlgebraOperator(Map): sage: x.operator() Linear operator between finite-dimensional Euclidean Jordan algebras represented by the matrix: - [ 2 4 0] + [ 2 2 0] [ 2 9 2] - [ 0 4 16] - Domain: Euclidean Jordan algebra of degree 3 over Rational Field - Codomain: Euclidean Jordan algebra of degree 3 over Rational Field + [ 0 2 16] + Domain: Euclidean Jordan algebra of dimension 3 over... + Codomain: Euclidean Jordan algebra of dimension 3 over... sage: x.operator()*(1/2) Linear operator between finite-dimensional Euclidean Jordan algebras represented by the matrix: - [ 1 2 0] + [ 1 1 0] [ 1 9/2 1] - [ 0 2 8] - Domain: Euclidean Jordan algebra of degree 3 over Rational Field - Codomain: Euclidean Jordan algebra of degree 3 over Rational Field + [ 0 1 8] + Domain: Euclidean Jordan algebra of dimension 3 over... + Codomain: Euclidean Jordan algebra of dimension 3 over... """ - if other in self.codomain().base_ring(): - return FiniteDimensionalEuclideanJordanAlgebraOperator( - self.domain(), - self.codomain(), - self.matrix()*other) + try: + if other in self.codomain().base_ring(): + return FiniteDimensionalEuclideanJordanAlgebraOperator( + self.domain(), + self.codomain(), + self.matrix()*other) + except NotImplementedError: + # This can happen with certain arguments if the base_ring() + # is weird and doesn't know how to test membership. + pass # This should eventually delegate to _composition_ after performing # some sanity checks for us. @@ -256,8 +266,8 @@ class FiniteDimensionalEuclideanJordanAlgebraOperator(Map): [-1 0 0] [ 0 -1 0] [ 0 0 -1] - Domain: Euclidean Jordan algebra of degree 3 over Rational Field - Codomain: Euclidean Jordan algebra of degree 3 over Rational Field + Domain: Euclidean Jordan algebra of dimension 3 over... + Codomain: Euclidean Jordan algebra of dimension 3 over... """ return FiniteDimensionalEuclideanJordanAlgebraOperator( @@ -289,8 +299,8 @@ class FiniteDimensionalEuclideanJordanAlgebraOperator(Map): [3 0 0] [0 3 0] [0 0 3] - Domain: Euclidean Jordan algebra of degree 3 over Rational Field - Codomain: Euclidean Jordan algebra of degree 3 over Rational Field + Domain: Euclidean Jordan algebra of dimension 3 over... + Codomain: Euclidean Jordan algebra of dimension 3 over... """ if (n == 1): @@ -330,8 +340,10 @@ class FiniteDimensionalEuclideanJordanAlgebraOperator(Map): algebras represented by the matrix: [1 0] [0 1] - Domain: Euclidean Jordan algebra of degree 2 over Rational Field - Codomain: Euclidean Jordan algebra of degree 2 over Rational Field + Domain: Euclidean Jordan algebra of dimension 2 over + Rational Field + Codomain: Euclidean Jordan algebra of dimension 2 over + Rational Field """ msg = ("Linear operator between finite-dimensional Euclidean Jordan " @@ -364,8 +376,8 @@ class FiniteDimensionalEuclideanJordanAlgebraOperator(Map): [-1 0 0] [ 0 -1 0] [ 0 0 -1] - Domain: Euclidean Jordan algebra of degree 3 over Rational Field - Codomain: Euclidean Jordan algebra of degree 3 over Rational Field + Domain: Euclidean Jordan algebra of dimension 3 over... + Codomain: Euclidean Jordan algebra of dimension 3 over... """ return (self + (-other))