-from sage.all import matrix
+from sage.matrix.constructor import matrix
from sage.categories.all import FreeModules
from sage.categories.map import 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):
[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::
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(
[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(
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.
[-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(
[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):
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 "
[-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))