]> gitweb.michael.orlitzky.com - sage.d.git/commitdiff
eja: use non-clashing generator names in subalgebras.
authorMichael Orlitzky <michael@orlitzky.com>
Tue, 30 Jul 2019 04:32:06 +0000 (00:32 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Tue, 30 Jul 2019 04:32:06 +0000 (00:32 -0400)
mjo/eja/eja_subalgebra.py

index 0ff3519fa15ba4eb1e968ca64d92e69326368b1e..9685defd95b1fdab00487ee1d719ab225e6812e7 100644 (file)
@@ -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()