sage: e0*[[[[]]]]
[[[[]]]]*e0
-6. Figure out how to make OctonionHermitianEJA a RationalBasisEJA,
- and then convert the complex/quaternion algebras to avoid real-
- (un)embeddings.
+6. Can we convert the complex/quaternion algebras to avoid real-
+ (un)embeddings? Quaternions would need their own
+ QuaternionMatrixAlgebra, since Sage matrices have to have entries
+ in a commutative ring. Those and the octonion stuff could be moved
+ to hurwitz.py along with the HurwitzMatrixAlgebra.
7. Every once in a long while, the test
if check_field:
# Abuse the check_field parameter to check that the entries of
# out basis (in ambient coordinates) are in the field QQ.
- if not all( all(b_i in QQ for b_i in b.list()) for b in basis ):
+ # Use _all2list to get the vector coordinates of octonion
+ # entries and not the octonions themselves (which are not
+ # rational).
+ if not all( all(b_i in QQ for b_i in _all2list(b))
+ for b in basis ):
raise TypeError("basis not rational")
super().__init__(basis,
# as a REAL matrix will be 2*a = 2*Re(z_1). And so forth.
return (X*Y).trace()/cls.dimension_over_reals()
-class RealSymmetricEJA(ConcreteEJA, RationalBasisEJA, MatrixEJA):
+class RealSymmetricEJA(RationalBasisEJA, ConcreteEJA, MatrixEJA):
"""
The rank-n simple EJA consisting of real symmetric n-by-n
matrices, the usual symmetric Jordan product, and the trace inner
return matrix(F, n/d, elements)
-class ComplexHermitianEJA(ConcreteEJA, RationalBasisEJA, ComplexMatrixEJA):
+class ComplexHermitianEJA(RationalBasisEJA, ConcreteEJA, ComplexMatrixEJA):
"""
The rank-n simple EJA consisting of complex Hermitian n-by-n
matrices over the real numbers, the usual symmetric Jordan product,
return matrix(Q, n/d, elements)
-class QuaternionHermitianEJA(ConcreteEJA,
- RationalBasisEJA,
+class QuaternionHermitianEJA(RationalBasisEJA,
+ ConcreteEJA,
QuaternionMatrixEJA):
r"""
The rank-n simple EJA consisting of self-adjoint n-by-n quaternion
n = ZZ.random_element(cls._max_random_instance_size() + 1)
return cls(n, **kwargs)
-class OctonionHermitianEJA(ConcreteEJA, MatrixEJA):
+class OctonionHermitianEJA(RationalBasisEJA, ConcreteEJA, MatrixEJA):
r"""
SETUP::
SETUP::
- from mjo.eja.eja_algebra import AlbertEJA
+ sage: from mjo.eja.eja_algebra import AlbertEJA
EXAMPLES::
super().__init__(3, *args, **kwargs)
-class HadamardEJA(ConcreteEJA, RationalBasisEJA):
+class HadamardEJA(RationalBasisEJA, ConcreteEJA):
"""
Return the Euclidean Jordan Algebra corresponding to the set
`R^n` under the Hadamard product.
return cls(n, **kwargs)
-class BilinearFormEJA(ConcreteEJA, RationalBasisEJA):
+class BilinearFormEJA(RationalBasisEJA, ConcreteEJA):
r"""
The rank-2 simple EJA consisting of real vectors ``x=(x0, x_bar)``
with the half-trace inner product and jordan product ``x*y =
return cls(n, **kwargs)
-class TrivialEJA(ConcreteEJA, RationalBasisEJA):
+class TrivialEJA(RationalBasisEJA, ConcreteEJA):
"""
The trivial Euclidean Jordan algebra consisting of only a zero element.