On Dec 3, 2009, at 10:04 AM, javier wrote: > Hi there, > > On Dec 3, 5:08 pm, Florent Hivert <florent.hiv...@univ-rouen.fr> > wrote: >> However, I thing it should be a method of the group: >> G.conjugacy_class(g). > > that was my original idea, to keep it close to GAP original > definition. > >> Or even of the element itself since it knows G as it's parent: >> g.conjugacy_class() >> >> def conjugacy_class(self): >> GG = self.parent()._gap_() >> gg = self._gap_() >> cc = GG.ConjugacyClass(gg).AsList().sage() >> return Set([G(x) for x in cc]) > > This also makes sense. I don't really know which choice would be > better. Maybe having both, doing something like > > def conjugacy_class(self): > G = self.parent() > return G.conjugacy_class(g) > > does that sound reasonable or would it be better to stick just to one > of them?
Yes, that makes sense. >> And finally for those groups who are not known to gap, the fallback >> (sage-only) method should be in the category FiniteGroups to be >> inherited by >> any group. > > I hadn't thought of that. Since all the groups I used are defined as > permutation groups I never ran into trouble, but now that you mention > it I see that GAP function doesn't work for matrix groups: > > sage: F = GF(5) > sage: gens = [matrix(F,2,[1,2, -1, 1]), matrix(F,2, [1,1, 0,1])] > sage: G = MatrixGroup(gens) > sage: g = G(matrix(F,2,[1,2, -1, 1])) > sage: conjugacy_class_gap(g,G) > Traceback (most recent call last): > ... > NotImplementedError > > > So I guess the right thing to do is something like > > sage: def conjugacy_class(g,G): > ... try: # Try to use GAP function if defined > ... GG = G._gap_() > ... gg = g._gap_() > ... cc = GG.ConjugacyClass(gg).AsList().sage() > ... return Set([G(x) for x in cc]) > ... except NotImplementedError: # If GAP doesn´t work, use > naive method > ... return Set([x*g*x^(-1) for x in G]) > > maybe with some added checks to deal with abelian groups (trivial > conjugacy classes) and not using the naive method on infinite groups. > > In which file should the code be included? > $SAGE_ROOT/devel/sage/sage/generic.py or somewhere else? Almost certainly as a method on the Group object in sage/groups/ group.pyx - Robert -- To post to this group, send an email to sage-devel@googlegroups.com To unsubscribe from this group, send an email to sage-devel-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-devel URL: http://www.sagemath.org