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()