From: Michael Orlitzky Date: Tue, 30 Jul 2019 04:32:06 +0000 (-0400) Subject: eja: use non-clashing generator names in subalgebras. X-Git-Url: https://gitweb.michael.orlitzky.com/?a=commitdiff_plain;h=344bd1421dda06fea3c8d748cff27b3b23a64332;p=sage.d.git eja: use non-clashing generator names in subalgebras. --- diff --git a/mjo/eja/eja_subalgebra.py b/mjo/eja/eja_subalgebra.py index 0ff3519..9685def 100644 --- a/mjo/eja/eja_subalgebra.py +++ b/mjo/eja/eja_subalgebra.py @@ -8,6 +8,28 @@ from mjo.eja.eja_element import FiniteDimensionalEuclideanJordanAlgebraElement 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): @@ -72,10 +94,16 @@ class FiniteDimensionalEuclideanJordanElementSubalgebra(FiniteDimensionalEuclide # 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()