]> gitweb.michael.orlitzky.com - sage.d.git/blobdiff - mjo/eja/eja_operator.py
eja: normalize the real symmetric matrix basis.
[sage.d.git] / mjo / eja / eja_operator.py
index b225b295c9e0f4e87befb02e28870eb7a0d1b9dd..4b72e5783210b51cd6d8d658f0f5d4e8c40a7f57 100644 (file)
@@ -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
 
@@ -46,14 +46,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,8 +81,8 @@ 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::
@@ -135,8 +135,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 +177,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 +211,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 +263,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 +296,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 +337,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 +373,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))