what can be supported in a general Jordan Algebra.
"""
+from itertools import repeat
+
from sage.algebras.quatalg.quaternion_algebra import QuaternionAlgebra
from sage.categories.magmatic_algebras import MagmaticAlgebras
from sage.combinat.free_module import CombinatorialFreeModule
sage: set_random_seed()
sage: J = random_eja()
- sage: x = J.random_element()
- sage: y = J.random_element()
+ sage: x,y = J.random_elements(2)
sage: x*y == y*x
True
EXAMPLES:
- The inner product must satisfy its axiom for this algebra to truly
- be a Euclidean Jordan Algebra::
+ Our inner product satisfies the Jordan axiom, which is also
+ referred to as "associativity" for a symmetric bilinear form::
sage: set_random_seed()
sage: J = random_eja()
- sage: x = J.random_element()
- sage: y = J.random_element()
- sage: z = J.random_element()
+ sage: x,y,z = J.random_elements(3)
sage: (x*y).inner_product(z) == y.inner_product(x*z)
True
s = super(FiniteDimensionalEuclideanJordanAlgebra, self)
return s.random_element()
+ def random_elements(self, count):
+ """
+ Return ``count`` random elements as a tuple.
+
+ SETUP::
+
+ sage: from mjo.eja.eja_algebra import JordanSpinEJA
+
+ EXAMPLES::
+
+ sage: J = JordanSpinEJA(3)
+ sage: x,y,z = J.random_elements(3)
+ sage: all( [ x in J, y in J, z in J ])
+ True
+ sage: len( J.random_elements(10) ) == 10
+ True
+
+ """
+ return tuple( self.random_element() for idx in xrange(count) )
@classmethod
def random_instance(cls, field=QQ, **kwargs):
sage: RealCartesianProductEJA(3, prefix='r').gens()
(r0, r1, r2)
- Our inner product satisfies the Jordan axiom::
-
- sage: set_random_seed()
- sage: J = RealCartesianProductEJA.random_instance()
- sage: x = J.random_element()
- sage: y = J.random_element()
- sage: z = J.random_element()
- sage: (x*y).inner_product(z) == y.inner_product(x*z)
- True
-
"""
def __init__(self, n, field=QQ, **kwargs):
V = VectorSpace(field, n)
sage: set_random_seed()
sage: J = RealCartesianProductEJA.random_instance()
- sage: x = J.random_element()
- sage: y = J.random_element()
+ sage: x,y = J.random_elements(2)
sage: X = x.natural_representation()
sage: Y = y.natural_representation()
sage: x.inner_product(y) == J.natural_inner_product(X,Y)
sage: set_random_seed()
sage: J = RealSymmetricEJA.random_instance()
- sage: x = J.random_element()
- sage: y = J.random_element()
+ sage: x,y = J.random_elements(2)
sage: actual = (x*y).natural_representation()
sage: X = x.natural_representation()
sage: Y = y.natural_representation()
sage: RealSymmetricEJA(3, prefix='q').gens()
(q0, q1, q2, q3, q4, q5)
- Our inner product satisfies the Jordan axiom::
-
- sage: set_random_seed()
- sage: J = RealSymmetricEJA.random_instance()
- sage: x = J.random_element()
- sage: y = J.random_element()
- sage: z = J.random_element()
- sage: (x*y).inner_product(z) == y.inner_product(x*z)
- True
-
Our natural basis is normalized with respect to the natural inner
product unless we specify otherwise::
sage: set_random_seed()
sage: J = ComplexHermitianEJA.random_instance()
- sage: x = J.random_element()
- sage: y = J.random_element()
+ sage: x,y = J.random_elements(2)
sage: actual = (x*y).natural_representation()
sage: X = x.natural_representation()
sage: Y = y.natural_representation()
sage: ComplexHermitianEJA(2, prefix='z').gens()
(z0, z1, z2, z3)
- Our inner product satisfies the Jordan axiom::
-
- sage: set_random_seed()
- sage: J = ComplexHermitianEJA.random_instance()
- sage: x = J.random_element()
- sage: y = J.random_element()
- sage: z = J.random_element()
- sage: (x*y).inner_product(z) == y.inner_product(x*z)
- True
-
Our natural basis is normalized with respect to the natural inner
product unless we specify otherwise::
sage: set_random_seed()
sage: J = QuaternionHermitianEJA.random_instance()
- sage: x = J.random_element()
- sage: y = J.random_element()
+ sage: x,y = J.random_elements(2)
sage: actual = (x*y).natural_representation()
sage: X = x.natural_representation()
sage: Y = y.natural_representation()
sage: QuaternionHermitianEJA(2, prefix='a').gens()
(a0, a1, a2, a3, a4, a5)
- Our inner product satisfies the Jordan axiom::
-
- sage: set_random_seed()
- sage: J = QuaternionHermitianEJA.random_instance()
- sage: x = J.random_element()
- sage: y = J.random_element()
- sage: z = J.random_element()
- sage: (x*y).inner_product(z) == y.inner_product(x*z)
- True
-
Our natural basis is normalized with respect to the natural inner
product unless we specify otherwise::
sage: JordanSpinEJA(2, prefix='B').gens()
(B0, B1)
- Our inner product satisfies the Jordan axiom::
-
- sage: set_random_seed()
- sage: J = JordanSpinEJA.random_instance()
- sage: x = J.random_element()
- sage: y = J.random_element()
- sage: z = J.random_element()
- sage: (x*y).inner_product(z) == y.inner_product(x*z)
- True
-
"""
def __init__(self, n, field=QQ, **kwargs):
V = VectorSpace(field, n)
sage: set_random_seed()
sage: J = JordanSpinEJA.random_instance()
- sage: x = J.random_element()
- sage: y = J.random_element()
+ sage: x,y = J.random_elements(2)
sage: X = x.natural_representation()
sage: Y = y.natural_representation()
sage: x.inner_product(y) == J.natural_inner_product(X,Y)