-
-
Notifications
You must be signed in to change notification settings - Fork 543
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implement group cycle indices #14347
Comments
Author: Andrew Gainer-Dewar |
comment:2
I seem to have made a mess of the attachments. If someone with permissions to do so happens by, could you delete everything but group_cycle_index_series-agd.patch? Thanks! |
comment:3
Replying to @sagetrac-agd:
Done! |
comment:4
Hi Andrew! Thanks for your patch; this sounds interesting! I am not sure I'll have the time to make a complete review, so if anyone wants to jump in, please do! In the mean time, here are some little comments: A G-cycle index can be interpreted as a formal linear combination of elements of G, with coefficients which are symmetric powersum functions, right? If so, may I recommend to build on top of:
Then you would get the data structure and the additive structure for free. And all the neat little accessors and such provided by CombinatorialFreeModule. You may want to explore the tutorials "Using Free Modules and Vector Spaces" and "Implementing Algebraic Structures" from:
See also
which is now in Sage's official thematic tutorials. You probably also want to link back to the cycle_index method of permutation groups. Cheers, |
comment:5
Nicolas, Thanks for the feedback! I'll take a look at those tutorials. Implementing the ring of G-cycle indices as a CombinatorialFreeModule is an interesting idea. It's definitely appropriate from a formal perspective. At first glance, I'm concerned that it will make it harder to work with the (ordinary) cycle indices associated to the various elements of G, which are really the point of these objects, but maybe that's actually more straightforward than it looks to my naïve eyes. I'll have a go at it, in any case. |
comment:6
Replying to @sagetrac-agd:
If you stumble on a concrete use case where the syntax seems to go in By the way: we are in the process of finalizing those two first Cheers, |
comment:7
Nicolas, After spending a bit of time with the documentation, it looks like CombinatorialFreeModule is a great foundation for this code. I'm currently working on re-implementing it. The tutorials you linked were very helpful, although I expect I'm going to need some time figuring out the whole morphism-coersion system (if only because there are some decisions to be made about how things should work with subgroups). If there's a straightforward way to bake morphism-generation into a CombinatorialFreeModule, it would be great to see that in the tutorials. (Specifically, if G1 has a natural morphism to G2, is there a way to make CombinatorialFreeModule(R, G1) inherit a natural morphism to CombinatorialFreeModule(R, G2)? It seems like a reasonable thing to want to do, but I have no idea how to approach it.) It appears to me, though, that the correct structure to use is CombinatorialFreeModule(CycleIndexSeriesRing(QQ), G), because then I get to take advantage of (1) the CycleIndexSeries(Ring) code for dealing nicely with these things being infinite (using LazyPowerSeries(Ring)) and (2) lots of semantics for doing combinatorial enumeration with those objects. Is this obviously wrong in some way I haven't yet picked up on? Thanks again for your help! --Andrew |
Re-implement using CombinatorialFreeModule |
comment:8
Attachment: group_cycle_index_series-agd.patch.gz I've re-implemented this class using CombinatorialFreeModule(CycleIndexSeriesRing(QQ), G). The new code is less than half the length of the old and is (in my opinion) much more readable and maintainable. Big props to Nicolas for that idea! |
comment:9
Replying to @sagetrac-agd:
That's probably correct! I have not looked enough at the details of Cheers, |
comment:10
Replying to @sagetrac-agd:
Glad to hear that was the right infrastructure for you! For a quick implementation of morphism between the two things you can probably do something like:
(where KG1 / KG2 are the cycle index rings for G1 / G2). I can be more precise later ... Then comes the question of whether you want to have those morphism be defined automatically. I tend to be conservative and not add them until it really itches me so much that I can't do otherwise. It's easier for backward compatibility to add coercions than remove them! Jumping on my train! |
comment:12
Per discussions elsewhere, I've added a new version of the patch which was generated using "hg export tip". The content is the same. |
This comment has been minimized.
This comment has been minimized.
comment:13
Add bot instructions. |
comment:14
The bot instructions should be put here (namely in comments): apply trac_14347_group_cycle_index_series.patch |
Work Issues: coverage, doctest |
comment:15
|
comment:16
Replying to @fchapoton: Thanks for your comments!
This appears to be a regression in 5.10 related to the string representations of linear combinations. It appears to be caused by a change in the misc.repr_lincomb method, which now assumes that the coefficients of abstract linear combinations can be compared to 0. I've submitted a ticket (#14751) to try to sort this out.
I have uploaded a new version of the patch which adds the missing doctests. |
Dependencies: #14751 |
comment:17
A preliminary patch has been submitted to fix the issue. I'm adding a dependency. |
Branch pushed to git repo; I updated commit sha1. New commits:
|
comment:53
if its not too late, I'd review this in the first or second week of july, together with #14846) Martin |
comment:54
That would be splendid! Please let me know if you have any questions or concerns. |
comment:55
I'm already two weeks late :-( |
Changed branch from u/agd/gcis to u/mantepse/gcis |
Branch pushed to git repo; I updated commit sha1. New commits:
|
comment:58
There were a few trivial formatting fixes to do, which I did ( So, the code looks fine, thanks for contributing and thanks for your patience! |
Changed work issues from coverage, doctest to none |
comment:62
Fails on OSX
|
Changed branch from u/mantepse/gcis to u/agd/gcis |
comment:63
Replying to @vbraun: New commits:
|
Changed branch from u/agd/gcis to u/mantepse/gcis |
Let G be a group. A G-cycle index is a map from G to the ring of cycle index series. These objects are useful for enumerating G-species (species equipped with an equivariant G-action), where they serve a role analogous to the cycle indices of species.
This patch offers an implementation of G-cycle indices with their most important algebraic features (sum, product, and composition/plethysm). (The plethysm of G-cycle indices is defined in a funny way that really depends on having access to the whole G-cycle index at once; otherwise, there wouldn't be much point in having this code.)
This code is (believed to be) complete and functional. It could use a bit of attention of someone who understand the coersion system better than I do, though.
(This code weakly depends on #14846; the class implemented here has a
derivative
method which calls down toCycleIndexSeries.derivative
, which does not currently do what it should.)Depends on #14846
CC: @sagetrac-sage-combinat
Component: combinatorics
Keywords: cycle index, species
Author: Andrew Gainer-Dewar
Branch/Commit: u/mantepse/gcis @
7b3cb8b
Reviewer: Martin Rubey
Issue created by migration from https://trac.sagemath.org/ticket/14347
The text was updated successfully, but these errors were encountered: