X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=mjo%2Feja%2Feja_operator.py;h=0e898b59fb9d8a99090da6f4baec3e49df51d9cd;hb=5ce914aa8f29ad8d9d80b85b8ea33dd0cd735d4f;hp=8973a951aa80f2275c527fd67d78b30259971866;hpb=9c35b8d70e384cd98b8ec7eb7a84cf84db1d1137;p=sage.d.git diff --git a/mjo/eja/eja_operator.py b/mjo/eja/eja_operator.py index 8973a95..0e898b5 100644 --- a/mjo/eja/eja_operator.py +++ b/mjo/eja/eja_operator.py @@ -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, @@ -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))