From a3244ad3dc1b984585b219e4978214ed2c0e0a69 Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Thu, 28 Nov 2024 09:22:44 -0500 Subject: [PATCH] mjo/eja/eja_operator.py: is_isomorphism() tests for the two easiest EJAs --- mjo/eja/eja_operator.py | 43 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/mjo/eja/eja_operator.py b/mjo/eja/eja_operator.py index 5eaa5b7..be22c4a 100644 --- a/mjo/eja/eja_operator.py +++ b/mjo/eja/eja_operator.py @@ -723,10 +723,14 @@ class EJAOperator(Map): 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: @@ -749,6 +753,42 @@ class EJAOperator(Map): 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:: @@ -763,7 +803,6 @@ class EJAOperator(Map): sage: J = random_eja() sage: not J.is_trivial() and J.zero().operator().is_isomorphism() False - """ return self.is_invertible() and self.is_homomorphism() -- 2.49.0