from sage.categories.all import FreeModules
from sage.categories.map import Map
-class FiniteDimensionalEuclideanJordanAlgebraOperator(Map):
+class FiniteDimensionalEJAOperator(Map):
r"""
An operator between two finite-dimensional Euclidean Jordan algebras.
SETUP::
sage: from mjo.eja.eja_algebra import HadamardEJA
- sage: from mjo.eja.eja_operator import FiniteDimensionalEuclideanJordanAlgebraOperator
+ sage: from mjo.eja.eja_operator import FiniteDimensionalEJAOperator
EXAMPLES:
sage: J = HadamardEJA(3)
sage: V = VectorSpace(J.base_ring(), 3)
sage: M = matrix.identity(J.base_ring(), 3)
- sage: FiniteDimensionalEuclideanJordanAlgebraOperator(V,J,M)
+ sage: FiniteDimensionalEJAOperator(V,J,M)
Traceback (most recent call last):
...
TypeError: domain must be a finite-dimensional Euclidean
Jordan algebra
- sage: FiniteDimensionalEuclideanJordanAlgebraOperator(J,V,M)
+ sage: FiniteDimensionalEJAOperator(J,V,M)
Traceback (most recent call last):
...
TypeError: codomain must be a finite-dimensional Euclidean
"""
def __init__(self, domain_eja, codomain_eja, mat):
- from mjo.eja.eja_algebra import FiniteDimensionalEuclideanJordanAlgebra
+ from mjo.eja.eja_algebra import FiniteDimensionalEJA
# I guess we should check this, because otherwise you could
# pass in pretty much anything algebraish.
- if not isinstance(domain_eja,
- FiniteDimensionalEuclideanJordanAlgebra):
+ if not isinstance(domain_eja, FiniteDimensionalEJA):
raise TypeError('domain must be a finite-dimensional '
'Euclidean Jordan algebra')
- if not isinstance(codomain_eja,
- FiniteDimensionalEuclideanJordanAlgebra):
+ if not isinstance(codomain_eja, FiniteDimensionalEJA):
raise TypeError('codomain must be a finite-dimensional '
'Euclidean Jordan algebra')
# The Map initializer will set our parent to a homset, which
# is explicitly NOT what we want, because these ain't algebra
# homomorphisms.
- super(FiniteDimensionalEuclideanJordanAlgebraOperator,self).__init__(parent)
+ super().__init__(parent)
# Keep a matrix around to do all of the real work. It would
# be nice if we could use a VectorSpaceMorphism instead, but
SETUP::
- sage: from mjo.eja.eja_operator import FiniteDimensionalEuclideanJordanAlgebraOperator
+ sage: from mjo.eja.eja_operator import FiniteDimensionalEJAOperator
sage: from mjo.eja.eja_algebra import JordanSpinEJA
EXAMPLES::
sage: J = JordanSpinEJA(3)
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 = FiniteDimensionalEJAOperator(J,J,id)
sage: f(x) == x
True
SETUP::
- sage: from mjo.eja.eja_operator import FiniteDimensionalEuclideanJordanAlgebraOperator
+ sage: from mjo.eja.eja_operator import FiniteDimensionalEJAOperator
sage: from mjo.eja.eja_algebra import (
....: JordanSpinEJA,
....: RealSymmetricEJA )
sage: J = RealSymmetricEJA(2)
sage: id = identity_matrix(J.base_ring(), J.dimension())
- sage: f = FiniteDimensionalEuclideanJordanAlgebraOperator(J,J,id)
- sage: g = FiniteDimensionalEuclideanJordanAlgebraOperator(J,J,id)
+ sage: f = FiniteDimensionalEJAOperator(J,J,id)
+ sage: g = FiniteDimensionalEJAOperator(J,J,id)
sage: f + g
Linear operator between finite-dimensional Euclidean Jordan
algebras represented by the matrix:
sage: id1 = identity_matrix(J1.base_ring(), 3)
sage: J2 = JordanSpinEJA(3)
sage: id2 = identity_matrix(J2.base_ring(), 3)
- sage: f = FiniteDimensionalEuclideanJordanAlgebraOperator(J1,J1,id1)
- sage: g = FiniteDimensionalEuclideanJordanAlgebraOperator(J2,J2,id2)
+ sage: f = FiniteDimensionalEJAOperator(J1,J1,id1)
+ sage: g = FiniteDimensionalEJAOperator(J2,J2,id2)
sage: f + g
Traceback (most recent call last):
...
TypeError: unsupported operand parent(s) for +: ...
"""
- return FiniteDimensionalEuclideanJordanAlgebraOperator(
+ return FiniteDimensionalEJAOperator(
self.domain(),
self.codomain(),
self.matrix() + other.matrix())
SETUP::
- sage: from mjo.eja.eja_operator import FiniteDimensionalEuclideanJordanAlgebraOperator
+ sage: from mjo.eja.eja_operator import FiniteDimensionalEJAOperator
sage: from mjo.eja.eja_algebra import (
....: JordanSpinEJA,
....: HadamardEJA,
sage: mat1 = matrix(AA, [[1,2,3],
....: [4,5,6]])
sage: mat2 = matrix(AA, [[7,8]])
- sage: g = FiniteDimensionalEuclideanJordanAlgebraOperator(J1,
- ....: J2,
- ....: mat1)
- sage: f = FiniteDimensionalEuclideanJordanAlgebraOperator(J2,
- ....: J3,
- ....: mat2)
+ sage: g = FiniteDimensionalEJAOperator(J1, J2, mat1)
+ sage: f = FiniteDimensionalEJAOperator(J2, J3, mat2)
sage: f*g
Linear operator between finite-dimensional Euclidean Jordan
algebras represented by the matrix:
Algebraic Real Field
"""
- return FiniteDimensionalEuclideanJordanAlgebraOperator(
+ return FiniteDimensionalEJAOperator(
other.domain(),
self.codomain(),
self.matrix()*other.matrix())
SETUP::
- sage: from mjo.eja.eja_operator import FiniteDimensionalEuclideanJordanAlgebraOperator
+ sage: from mjo.eja.eja_operator import FiniteDimensionalEJAOperator
sage: from mjo.eja.eja_algebra import RealSymmetricEJA
EXAMPLES::
sage: J = RealSymmetricEJA(2)
sage: id = identity_matrix(J.base_ring(), J.dimension())
- sage: f = FiniteDimensionalEuclideanJordanAlgebraOperator(J,J,id)
+ sage: f = FiniteDimensionalEJAOperator(J,J,id)
sage: ~f
Linear operator between finite-dimensional Euclidean Jordan
algebras represented by the matrix:
Codomain: Euclidean Jordan algebra of dimension 3 over...
"""
- return FiniteDimensionalEuclideanJordanAlgebraOperator(
+ return FiniteDimensionalEJAOperator(
self.codomain(),
self.domain(),
~self.matrix())
SETUP::
- sage: from mjo.eja.eja_operator import FiniteDimensionalEuclideanJordanAlgebraOperator
+ sage: from mjo.eja.eja_operator import FiniteDimensionalEJAOperator
sage: from mjo.eja.eja_algebra import RealSymmetricEJA
EXAMPLES:
We can scale an operator on a rational algebra by a rational number::
sage: J = RealSymmetricEJA(2)
- sage: e0,e1,e2 = J.gens()
- sage: x = 2*e0 + 4*e1 + 16*e2
+ sage: b0,b1,b2 = J.gens()
+ sage: x = 2*b0 + 4*b1 + 16*b2
sage: x.operator()
Linear operator between finite-dimensional Euclidean Jordan algebras
represented by the matrix:
"""
try:
if other in self.codomain().base_ring():
- return FiniteDimensionalEuclideanJordanAlgebraOperator(
+ return FiniteDimensionalEJAOperator(
self.domain(),
self.codomain(),
self.matrix()*other)
# This should eventually delegate to _composition_ after performing
# some sanity checks for us.
- mor = super(FiniteDimensionalEuclideanJordanAlgebraOperator,self)
- return mor.__mul__(other)
+ return super().__mul__(other)
def _neg_(self):
SETUP::
- sage: from mjo.eja.eja_operator import FiniteDimensionalEuclideanJordanAlgebraOperator
+ sage: from mjo.eja.eja_operator import FiniteDimensionalEJAOperator
sage: from mjo.eja.eja_algebra import RealSymmetricEJA
EXAMPLES::
sage: J = RealSymmetricEJA(2)
sage: id = identity_matrix(J.base_ring(), J.dimension())
- sage: f = FiniteDimensionalEuclideanJordanAlgebraOperator(J,J,id)
+ sage: f = FiniteDimensionalEJAOperator(J,J,id)
sage: -f
Linear operator between finite-dimensional Euclidean Jordan
algebras represented by the matrix:
Codomain: Euclidean Jordan algebra of dimension 3 over...
"""
- return FiniteDimensionalEuclideanJordanAlgebraOperator(
+ return FiniteDimensionalEJAOperator(
self.domain(),
self.codomain(),
-self.matrix())
SETUP::
- sage: from mjo.eja.eja_operator import FiniteDimensionalEuclideanJordanAlgebraOperator
+ sage: from mjo.eja.eja_operator import FiniteDimensionalEJAOperator
sage: from mjo.eja.eja_algebra import RealSymmetricEJA
TESTS:
sage: J = RealSymmetricEJA(2)
sage: id = identity_matrix(J.base_ring(), J.dimension())
- sage: f = FiniteDimensionalEuclideanJordanAlgebraOperator(J,J,id)
+ sage: f = FiniteDimensionalEJAOperator(J,J,id)
sage: f^0 + f^1 + f^2
Linear operator between finite-dimensional Euclidean Jordan
algebras represented by the matrix:
else:
mat = self.matrix()**n
- return FiniteDimensionalEuclideanJordanAlgebraOperator(
+ return FiniteDimensionalEJAOperator(
self.domain(),
self.codomain(),
mat)
SETUP::
- sage: from mjo.eja.eja_operator import FiniteDimensionalEuclideanJordanAlgebraOperator
+ sage: from mjo.eja.eja_operator import FiniteDimensionalEJAOperator
sage: from mjo.eja.eja_algebra import JordanSpinEJA
EXAMPLES::
sage: J = JordanSpinEJA(2)
sage: id = identity_matrix(J.base_ring(), J.dimension())
- sage: FiniteDimensionalEuclideanJordanAlgebraOperator(J,J,id)
+ sage: FiniteDimensionalEJAOperator(J,J,id)
Linear operator between finite-dimensional Euclidean Jordan
algebras represented by the matrix:
[1 0]
SETUP::
- sage: from mjo.eja.eja_operator import FiniteDimensionalEuclideanJordanAlgebraOperator
+ sage: from mjo.eja.eja_operator import FiniteDimensionalEJAOperator
sage: from mjo.eja.eja_algebra import RealSymmetricEJA
EXAMPLES::
sage: J = RealSymmetricEJA(2)
sage: id = identity_matrix(J.base_ring(),J.dimension())
- sage: f = FiniteDimensionalEuclideanJordanAlgebraOperator(J,J,id)
+ sage: f = FiniteDimensionalEJAOperator(J,J,id)
sage: f - (f*2)
Linear operator between finite-dimensional Euclidean Jordan
algebras represented by the matrix:
SETUP::
- sage: from mjo.eja.eja_operator import FiniteDimensionalEuclideanJordanAlgebraOperator
+ sage: from mjo.eja.eja_operator import FiniteDimensionalEJAOperator
sage: from mjo.eja.eja_algebra import (random_eja,
....: JordanSpinEJA,
....: RealSymmetricEJA)
sage: M = matrix(R, [ [0, 0],
....: [0, 0],
....: [0, 0] ])
- sage: L = FiniteDimensionalEuclideanJordanAlgebraOperator(J1,J2,M)
+ sage: L = FiniteDimensionalEJAOperator(J1,J2,M)
sage: L.is_zero()
True
sage: M = matrix(R, [ [0, 0],
....: [0, 1],
....: [0, 0] ])
- sage: L = FiniteDimensionalEuclideanJordanAlgebraOperator(J1,J2,M)
+ sage: L = FiniteDimensionalEJAOperator(J1,J2,M)
sage: L.is_zero()
False
SETUP::
- sage: from mjo.eja.eja_operator import FiniteDimensionalEuclideanJordanAlgebraOperator
+ sage: from mjo.eja.eja_operator import FiniteDimensionalEJAOperator
sage: from mjo.eja.eja_algebra import RealSymmetricEJA
EXAMPLES::
sage: J = RealSymmetricEJA(2)
sage: mat = matrix(J.base_ring(), J.dimension(), range(9))
- sage: f = FiniteDimensionalEuclideanJordanAlgebraOperator(J,J,mat)
+ sage: f = FiniteDimensionalEJAOperator(J,J,mat)
sage: f.matrix()
[0 1 2]
[3 4 5]
SETUP::
- sage: from mjo.eja.eja_operator import FiniteDimensionalEuclideanJordanAlgebraOperator
+ sage: from mjo.eja.eja_operator import FiniteDimensionalEJAOperator
sage: from mjo.eja.eja_algebra import RealSymmetricEJA
EXAMPLES::
sage: J = RealSymmetricEJA(4)
sage: x = sum(J.gens())
- sage: A = x.subalgebra_generated_by(orthonormalize_basis=True)
+ sage: A = x.subalgebra_generated_by()
sage: L0x = A(x).operator()
sage: sd = L0x.spectral_decomposition()
sage: l0 = sd[0][0]
# for the spectral theorem to work.
us[i] = us[i]/us[i].norm()
mat = us[i].column()*us[i].row()
- Pi = FiniteDimensionalEuclideanJordanAlgebraOperator(
+ Pi = FiniteDimensionalEJAOperator(
self.domain(),
self.codomain(),
mat)