class FiniteDimensionalEuclideanJordanElementSubalgebra(FiniteDimensionalEuclideanJordanAlgebra):
"""
The subalgebra of an EJA generated by a single element.
+
+ SETUP::
+
+ sage: from mjo.eja.eja_algebra import FiniteDimensionalEuclideanJordanAlgebra
+
+ TESTS:
+
+ Ensure that non-clashing names are chosen::
+
+ sage: m1 = matrix.identity(QQ,2)
+ sage: m2 = matrix(QQ, [[0,1],
+ ....: [1,0]])
+ sage: J = FiniteDimensionalEuclideanJordanAlgebra(QQ,
+ ....: [m1,m2],
+ ....: 2,
+ ....: names='f')
+ sage: J.variable_names()
+ ('f0', 'f1')
+ sage: A = sum(J.gens()).subalgebra_generated_by()
+ sage: A.variable_names()
+ ('g0', 'g1')
+
"""
@staticmethod
def __classcall_private__(cls, elt):
# powers.
assume_associative=True
- # TODO: Un-hard-code this. It should be possible to get the "next"
- # name based on the parent's generator names.
- names = 'f'
- names = normalize_names(W.dimension(), names)
+ # Figure out a non-conflicting set of names to use.
+ valid_names = ['f','g','h','a','b','c','d']
+ name_idx = 0
+ names = normalize_names(W.dimension(), valid_names[0])
+ # This loops so long as the list of collisions is nonempty.
+ # Just crash if we run out of names without finding a set that
+ # don't conflict with the parent algebra.
+ while [y for y in names if y in superalgebra.variable_names()]:
+ name_idx += 1
+ names = normalize_names(W.dimension(), valid_names[name_idx])
cat = superalgebra.category().Associative()
-
- # TODO: compute this and actually specify it.
- natural_basis = None
+ natural_basis = tuple( b.natural_representation()
+ for b in superalgebra_basis )
fdeja = super(FiniteDimensionalEuclideanJordanElementSubalgebra, cls)
return fdeja.__classcall__(cls,
class Element(FiniteDimensionalEuclideanJordanAlgebraElement):
+ """
+
+ SETUP::
+
+ sage: from mjo.eja.eja_algebra import random_eja
+
+ TESTS::
+
+ The natural representation of an element in the subalgebra is
+ the same as its natural representation in the superalgebra::
+
+ sage: set_random_seed()
+ sage: A = random_eja().random_element().subalgebra_generated_by()
+ sage: y = A.random_element()
+ sage: actual = y.natural_representation()
+ sage: expected = y.superalgebra_element().natural_representation()
+ sage: actual == expected
+ True
+
+ """
def __init__(self, A, elt=None):
"""
SETUP::