X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=mjo%2Feja%2Feja_subalgebra.py;h=5ac0a77c7a9ab27929f4c3e1d73238d93e1ccd1b;hb=a7cf81951d0cb51ea40d9362a75385204596df42;hp=0ff3519fa15ba4eb1e968ca64d92e69326368b1e;hpb=8b70663d4c5e51aa5bd0a567c289f67e5ff8c000;p=sage.d.git diff --git a/mjo/eja/eja_subalgebra.py b/mjo/eja/eja_subalgebra.py index 0ff3519..5ac0a77 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,15 +94,20 @@ 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() - - # 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, @@ -156,6 +183,26 @@ class FiniteDimensionalEuclideanJordanElementSubalgebra(FiniteDimensionalEuclide 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::