SETUP::
- sage: from mjo.eja.eja_algebra import (HadamardEJA,
+ sage: from mjo.basis_repr import basis_repr_of_operator
+ sage: from mjo.eja.eja_algebra import (JordanSpinEJA,
+ ....: HadamardEJA,
+ ....: RealSymmetricEJA,
....: TrivialEJA,
....: random_eja)
sage: from mjo.eja.eja_operator import EJAOperator
+ sage: from mjo.random import random_unitary_matrix
EXAMPLES:
sage: L.is_isomorphism()
True
+ The isomorphisms on the spin algebras are known explicitly
+ (see, for example, "Jordan automorphisms and derivatives of
+ symmetric cones")::
+
+ sage: J = JordanSpinEJA.random_instance(field=QQ,
+ ....: orthonormalize=False)
+ sage: n = J.dimension()
+ sage: I = identity_matrix(J.base_ring(), 1)
+ sage: U = random_unitary_matrix(J.base_ring(), n-1)
+ sage: M = block_matrix(2, [I,0,0,U])
+ sage: L = EJAOperator(J,J,M)
+ sage: L.is_isomorphism()
+ True
+ sage: L.inverse().is_isomorphism()
+ True
+ sage: (L^2).is_isomorphism()
+ True
+
+ Likewise for the isomorphisms of the real symmetric algebra::
+
+ sage: J = RealSymmetricEJA.random_instance()
+ sage: n = J.one().to_matrix().nrows()
+ sage: U = random_unitary_matrix(J.base_ring(), n)
+ sage: f = lambda X: U.conjugate_transpose()*X*U
+ sage: if n == 0:
+ ....: M = matrix.zero(J.base_ring(), 0)
+ ....: else:
+ ....: M = basis_repr_of_operator(J.matrix_basis(), f)
+ sage: L = EJAOperator(J,J,M)
+ sage: L.is_isomorphism()
+ True
+ sage: L.inverse().is_isomorphism()
+ True
+ sage: (L^2).is_isomorphism()
+ True
+
TESTS:
The identity operator is always a Jordan isomorphism::
sage: J = random_eja()
sage: not J.is_trivial() and J.zero().operator().is_isomorphism()
False
-
"""
return self.is_invertible() and self.is_homomorphism()