On Wed, May 4, 2022 at 5:02 AM 'Martin R' via sage-devel
<sage-devel@googlegroups.com> wrote:
>
> https://trac.sagemath.org/ticket/33784 is now ready for review.
>

Thank you!

Here's another example, for those following this thread:

sage: A = lambda g, x: g(x)
sage: Gamma = graphs.ButterflyGraph()
sage: G = Gamma.automorphism_group()
sage: H = PermutationGroup(G.gens(), action=A, domain=Gamma.vertices())
sage: H.orbits()
[[0, 1, 2, 3], [4]]
sage: G.orbits()
[[0, 1, 2, 3], [4]]


> I am still open for discussion, of course.  In particular, we might want to 
> discuss whether we should also provide a separate class which models a group 
> action, and not only the homomorphic image of the acting group.
>
> Martin
>
> On Tuesday, 3 May 2022 at 15:57:49 UTC+2 Martin R wrote:
>>
>> You just need to git Trac try the branch, there are examples in the 
>> docstring of PermutationGroup
>>
>> On Tuesday, 3 May 2022 at 15:27:06 UTC+2 David Joyner wrote:
>>>
>>> On Tue, May 3, 2022 at 7:12 AM 'Martin R' via sage-devel
>>> <sage-...@googlegroups.com> wrote:
>>> >
>>> > I implemented (well, the implementation is trivial) the following, and 
>>> > I'd like feedback. I am not completely sure whether the interface for the 
>>> > second variant, where the generators of the acting group are required, is 
>>> > ideal, but I think it looks useable.
>>> >
>>> > A more serious problem is that orbits are currently computed twice: once 
>>> > when creating the generators of the permutation group, and another time, 
>>> > when asking for them.
>>> >
>>> > Martin
>>> >
>>>
>>> Hi Martin:
>>>
>>> Thanks for programming this. I'd like to test it's functionality but
>>> don't know your function's syntax. Something like
>>>
>>> def PermutationGroup2(gens=None, gap_group=None, domain=None,
>>> canonicalize=True, category=None, action=None):
>>>
>>> maybe?
>>>
>>> - David
>>>
>>>
>>> > """
>>> > ...
>>> > We can create a permutation group from a group action::
>>> >
>>> > sage: A = lambda x: (2*x) % 6
>>> > sage: X = [0,1,2,3,4,5]
>>> > sage: G = PermutationGroup(action=A, domain=X)
>>> > sage: G.orbits()
>>> > [[0], [1, 2, 4], [3], [5]]
>>> >
>>> > sage: A = lambda g, x: vector(g*x, immutable=True)
>>> > sage: X = [vector(x, immutable=True) for x in GF(3)^2]
>>> > sage: G = SL(2,3); G.gens()
>>> > (
>>> > [1 1] [0 1]
>>> > [0 1], [2 0]
>>> > )
>>> > sage: H = PermutationGroup(G.gens(), action=A, domain=X)
>>> > sage: H.orbits()
>>> > [[(0, 0)], [(1, 0), (0, 2), (2, 2), (2, 0), (1, 2), (2, 1), (0, 1), (1, 
>>> > 1)]]
>>> > sage: H.gens()
>>> > [((0,1),(1,1),(2,1))((0,2),(2,2),(1,2)),
>>> > ((1,0),(0,2),(2,0),(0,1))((1,1),(1,2),(2,2),(2,1))]
>>> > ...
>>> > """
>>> > if not is_ExpectElement(gens) and hasattr(gens, '_permgroup_'):
>>> > return gens._permgroup_()
>>> > if gens is not None and not isinstance(gens, (tuple, list, GapElement)):
>>> > raise TypeError("gens must be a tuple, list, or GapElement")
>>> > gap_group = kwds.get("gap_group", None)
>>> > domain = kwds.get("domain", None)
>>> > canonicalize = kwds.get("canonicalize", True)
>>> > category = kwds.get("category", None)
>>> > action = kwds.get("action", None)
>>> > if action is not None:
>>> > if domain is None:
>>> > raise ValueError("you must specify the domain for an action")
>>> > from sage.combinat.cyclic_sieving_phenomenon import orbit_decomposition
>>> > if gap_group is not None:
>>> > raise ValueError("gap_group is not supported with action")
>>> > if gens is None and gap_group is None:
>>> > gens = [tuple(o) for o in orbit_decomposition(domain, action)]
>>> > else:
>>> > gens = [[tuple(o) for o in orbit_decomposition(domain, lambda x: 
>>> > action(g, x))]
>>> > for g in gens]
>>> > if args:
>>> > from sage.misc.superseded import deprecation
>>> > deprecation(31510, "gap_group, domain, canonicalize, category will become 
>>> > keyword only")
>>> > if len(args) > 4:
>>> > raise ValueError("invalid input")
>>> > args = list(args)
>>> > gap_group = args.pop(0)
>>> > if args:
>>> > domain = args.pop(0)
>>> > if args:
>>> > canonicalize = args.pop(0)
>>> > if args:
>>> > category = args.pop(0)
>>> > return PermutationGroup_generic(gens=gens, gap_group=gap_group, 
>>> > domain=domain,
>>> > canonicalize=canonicalize, category=category)
>>> >
>>> >
>>> > On Monday, 2 May 2022 at 23:01:42 UTC+2 David Joyner wrote:
>>> >>
>>> >> On Mon, May 2, 2022 at 11:24 AM 'Martin R' via sage-devel
>>> >> <sage-...@googlegroups.com> wrote:
>>> >> >
>>> >> > I am actually not sure anymore, which methods or functionality this 
>>> >> > class should provide.
>>> >> >
>>> >> > Would it possibly be better to enhance PermutationGroup with an 
>>> >> > additional optional "from_action" and "from_cyclic_action" argument? 
>>> >> > Eg.:
>>> >> >
>>> >> > PermutationGroup(domain = X, cyclic_action = lambda x: f(x))
>>> >> >
>>> >> > PermutationGroup(domain = X, group_action = (G, lambda g, x: f(g, x)))
>>> >> >
>>> >>
>>> >> I like this idea!
>>> >>
>>> >> > Martin
>>> >> > On Monday, 2 May 2022 at 14:20:57 UTC+2 kcrisman wrote:
>>> >> >>
>>> >> >> On Sunday, May 1, 2022 at 7:32:01 PM UTC-4 Travis Scrimshaw wrote:
>>> >> >>>>>
>>> >> >>>>> Sorry, I don't know an easy way. I've always just defined them by 
>>> >> >>>>> hand
>>> >> >>>>> whenever needed.
>>> >> >>>>> However, I agree with you that a better way is needed.
>>> >> >>>>
>>> >> >>>>
>>> >> >>>> I would love for there to be some standard way to define a group 
>>> >> >>>> action on a set - preferably maintaining other algebraic properties 
>>> >> >>>> of the set, such as addition! But I don't know if there is even 
>>> >> >>>> close to a standard way to do this either.
>>> >> >>>
>>> >> >>>
>>> >> >>> - There is a standard way to do this, but not a generic method/class 
>>> >> >>> for it IIRC. You can do this by implementing an _act_on_() method on 
>>> >> >>> a wrapper class. Yet, this requires some manual input.
>>> >> >>> - For cyclic actions, there is the DiscreteDynamicalSystem class 
>>> >> >>> introduced in https://trac.sagemath.org/ticket/24128.
>>> >> >>> - There is also the Representation class in 
>>> >> >>> modules/with_basis/representation.py if you want to want to extend 
>>> >> >>> the action on the set to the module with a basis given by that set.
>>> >> >>>
>>> >> >>> Likely we will want to implement a class SetWithAction that 
>>> >> >>> automates a collects the orbit_decomposition functions and similar 
>>> >> >>> together as methods as a single global entry point.
>>> >> >>>
>>> >> >>
>>> >> >> Hmm, maybe a tutorial is needed for this. I would imagine that a lot 
>>> >> >> of people who aren't familiar with how to create a new wrapper class 
>>> >> >> would be the ones who need this. Of course, the FiniteGroupAction 
>>> >> >> suggestion sounds quite welcome, too, though really having both 
>>> >> >> options would be best.
>>> >> >
>>> >> > --
>>> >> > You received this message because you are subscribed to the Google 
>>> >> > Groups "sage-devel" group.
>>> >> > To unsubscribe from this group and stop receiving emails from it, send 
>>> >> > an email to sage-devel+...@googlegroups.com.
>>> >> > To view this discussion on the web visit 
>>> >> > https://groups.google.com/d/msgid/sage-devel/694a16d8-b59d-43bc-8b68-033c704284abn%40googlegroups.com.
>>> >
>>> > --
>>> > You received this message because you are subscribed to the Google Groups 
>>> > "sage-devel" group.
>>> > To unsubscribe from this group and stop receiving emails from it, send an 
>>> > email to sage-devel+...@googlegroups.com.
>>> > To view this discussion on the web visit 
>>> > https://groups.google.com/d/msgid/sage-devel/641f204b-f89c-49f5-97d2-4ce8741ef04cn%40googlegroups.com.
>
> --
> You received this message because you are subscribed to the Google Groups 
> "sage-devel" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to sage-devel+unsubscr...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/sage-devel/46e0ca70-1be0-469d-bafc-b35117b9f5d1n%40googlegroups.com.

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sage-devel/CAEQuuAV%2BoFPELkgRi2GuYP__Smd0ZYeYqXQHhU27HvArG5bK3w%40mail.gmail.com.

Reply via email to