Hi Jason!
For once, I am trying hard to procrastinate on the Sage-Combinat
e-mails in order to focus on finishing our paper with Florent and
Anne, instead of the converse; hence my slow answer.
Thanks for your long post! It sounds all fine to me. I'll just insert
a couple micro comments below. I hope someone goes on and implements
this! It would be great if you could do with Andrew as reviewer (or
the converse, or with whatever pair programming scheme fits you).
On Thu, Aug 19, 2010 at 12:11:47PM -0400, Jason Bandlow wrote:
> The 'metaclass' trick is so that both of these will work, and the
> parents will be set appropriately. Anyway, here is what I roughly think
> the element classes should look.
And I should mention that the "metaclass trick" is nothing but a
syntactic sugar so that one can use the same name Tableau for both:
- the function used to create a tableau
- the base class for all tableaux.
Currently in Sage, those two gadgets are usually distinct (think
Partition/Partition_class which makes it inconvenient for the user to
access Partition_class, say for an isinstance test.
> class Tableaux(UniqueRepresentation, Parent):
> ...
> class SemistandardTableaux(UR, Parent, Tableaux): # similar
> class StandardTableaux(UR, Parent, SemistandardTableaux): # similar
No need to specify again UR and Parent; those are inherited through
Tableaux.
> Finally we have the specific parent classes. I think they should look
> roughly as follows.
>
> **** The parent classes ****
>
> class Tableaux_all(Tableaux):
> def __init__(self):
> super(Tableaux_all, self).__init__()
> # I don't know a good category, since general tableaux (which
> # allow, for example, real-number entries) are not enumerable.
I guess Sets() is the best we can do.
> class SemistandardTableaux_all(DisjointUnionEnumeratedSets,
> SemistandardTableaux):
>
> def __init__(self):
> DisjointUnionEnumeratedSets.__init__(
> self, Family(NonNegativeIntegers(),
> SemistandardTableaux_size),
> facade=True, keepkey = False)
> # Note that I'm not clear on what facade and keepkey do.
> # They may not be necessary or advisable.
* With keekkey = True, the elements of the disjoint union would be of
the form (5, Partition([3,2])). That's only useful when one wants
to construct the disjoint union of a collection of sets which are
not originally disjoint (e.g. building n copies of a given set).
* facade = True/False controls whether, for x in
SemiStandardTableaux(), x.parent() is SemiStandardTableaux() or
SemiStandardTableaux(shape=...)
> class SemistandardTableaux_size(SemistandardTableaux):
>
> def __init__(self, size):
> super(SemistandardTableaux_size, self).__init__(
> category = InfiniteFiniteEnumeratedSets())
Interesting category :-) But yes, the category should be set to one or
the other depending on what makes sense.
Nicolas
--
Nicolas M. ThiƩry "Isil" <[email protected]>
http://Nicolas.Thiery.name/
--
You received this message because you are subscribed to the Google Groups
"sage-combinat-devel" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sage-combinat-devel?hl=en.