]> gitweb.michael.orlitzky.com - sage.d.git/commitdiff
mjo/eja/eja_operator.py: is_isomorphism() tests for the two easiest EJAs
authorMichael Orlitzky <michael@orlitzky.com>
Thu, 28 Nov 2024 14:22:44 +0000 (09:22 -0500)
committerMichael Orlitzky <michael@orlitzky.com>
Thu, 28 Nov 2024 14:22:44 +0000 (09:22 -0500)
mjo/eja/eja_operator.py

index 5eaa5b7bb7e7dc8cac8b27c10f520bb6f1e9004e..be22c4a88b438b10454b2a2992f9315b7ee3affb 100644 (file)
@@ -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()