def automorphism_group(self): """ EXAMPLES:: sage: p = PermutationGroupElement((2,3)) sage: S = species.SetSpecies() sage: F = S * S sage: a = F.structures([1,2,3,4]).random_element(); a {1}*{2, 3, 4} sage: a.automorphism_group() Permutation Group with generators [(2,3), (2,3,4)] :: sage: [a.transport(g) for g in a.automorphism_group()] [{1}*{2, 3, 4}, {1}*{2, 3, 4}, {1}*{2, 3, 4}, {1}*{2, 3, 4}, {1}*{2, 3, 4}, {1}*{2, 3, 4}] :: sage: a = F.structures([1,2,3,4]).random_element(); a {2, 3}*{1, 4} sage: [a.transport(g) for g in a.automorphism_group()] [{2, 3}*{1, 4}, {2, 3}*{1, 4}, {2, 3}*{1, 4}, {2, 3}*{1, 4}] """ from sage.groups.all import PermutationGroupElement, PermutationGroup, SymmetricGroup from sage.misc.misc import uniq from sage.combinat.species.misc import change_support left, right = self._list n = len(self._labels) #Get the supports for each of the sides l_support = self._subset._list r_support = self._subset.complement()._list #Get the automorphism group for the left object and #make it have the correct support. Do the same to the #right side. l_aut = change_support(left.automorphism_group(), l_support) r_aut = change_support(right.automorphism_group(), r_support) identity = PermutationGroupElement([]) gens = l_aut.gens() + r_aut.gens() gens = [g for g in gens if g != identity] gens = uniq(gens) if len(gens) > 0 else [[]] return PermutationGroup(gens)