def __classcall_private__(cls, shape, weight): r""" Straighten arguments before unique representation. TESTS:: sage: LR = LittlewoodRichardsonTableaux([3,2,1],[[2,1],[2,1]]) sage: TestSuite(LR).run() sage: LittlewoodRichardsonTableaux([3,2,1],[[2,1]]) Traceback (most recent call last): ... ValueError: the sizes of shapes and sequence of weights do not match """ shape = Partition(shape) weight = tuple(Partition(a) for a in weight) if shape.size() != sum(a.size() for a in weight): raise ValueError("the sizes of shapes and sequence of weights do not match") return super(LittlewoodRichardsonTableaux, cls).__classcall__(cls, shape, weight)
def __classcall_private__(cls, shape, weight): r""" Straighten arguments before unique representation. TESTS:: sage: LR = LittlewoodRichardsonTableaux([3,2,1],[[2,1],[2,1]]) sage: TestSuite(LR).run() sage: LittlewoodRichardsonTableaux([3,2,1],[[2,1]]) Traceback (most recent call last): ... ValueError: the sizes of shapes and sequence of weights do not match """ shape = Partition(shape) weight = tuple(Partition(a) for a in weight) if shape.size() != sum(a.size() for a in weight): raise ValueError("the sizes of shapes and sequence of weights do not match") return super(LittlewoodRichardsonTableaux, cls).__classcall__(cls, shape, weight)
def __classcall_private__(cls, deg, par): r""" Create a primary similarity class type. EXAMPLES:: sage: PrimarySimilarityClassType(2, [3, 2, 1]) [2, [3, 2, 1]] The parent class is the class of primary similarity class types of order `d|\lambda\`:: sage: PT = PrimarySimilarityClassType(2, [3, 2, 1]) sage: PT.parent().size() 12 """ par = Partition(par) P = PrimarySimilarityClassTypes(par.size() * deg) return P(deg, par)
def __classcall_private__(cls, deg, par): r""" Create a primary similarity class type. EXAMPLES:: sage: PrimarySimilarityClassType(2, [3, 2, 1]) [2, [3, 2, 1]] The parent class is the class of primary similarity class types of order `d|\lambda\`:: sage: PT = PrimarySimilarityClassType(2, [3, 2, 1]) sage: PT.parent().size() 12 """ par = Partition(par) P = PrimarySimilarityClassTypes(par.size() * deg) return P(deg, par)
def coefficient_cycle_type(self, t): """ Returns the coefficient of a cycle type ``t`` in ``self``. EXAMPLES:: sage: from sage.combinat.species.generating_series import CycleIndexSeriesRing sage: p = SymmetricFunctions(QQ).power() sage: CIS = CycleIndexSeriesRing(QQ) sage: f = CIS([0, p([1]), 2*p([1,1]),3*p([2,1])]) sage: f.coefficient_cycle_type([1]) 1 sage: f.coefficient_cycle_type([1,1]) 2 sage: f.coefficient_cycle_type([2,1]) 3 """ t = Partition(t) p = self.coefficient(t.size()) return p.coefficient(t)
def coefficient_cycle_type(self, t): """ Returns the coefficient of a cycle type ``t`` in ``self``. EXAMPLES:: sage: from sage.combinat.species.generating_series import CycleIndexSeriesRing sage: p = SymmetricFunctions(QQ).power() sage: CIS = CycleIndexSeriesRing(QQ) sage: f = CIS([0, p([1]), 2*p([1,1]),3*p([2,1])]) sage: f.coefficient_cycle_type([1]) 1 sage: f.coefficient_cycle_type([1,1]) 2 sage: f.coefficient_cycle_type([2,1]) 3 """ t = Partition(t) p = self.coefficient(t.size()) return p.coefficient(t)
class SymmetricGroupRepresentation_generic_class(SageObject): r""" Generic methods for a representation of the symmetric group. """ _default_ring = None def __init__(self, partition, ring=None, cache_matrices=True): r""" An irreducible representation of the symmetric group corresponding to ``partition``. For more information, see the documentation for :func:`SymmetricGroupRepresentation`. EXAMPLES:: sage: spc = SymmetricGroupRepresentation([3]) sage: spc([3,2,1]) [1] sage: spc == loads(dumps(spc)) True sage: spc = SymmetricGroupRepresentation([3], cache_matrices=False) sage: spc([3,2,1]) [1] sage: spc == loads(dumps(spc)) True """ self._partition = Partition(partition) self._ring = ring if not ring is None else self._default_ring if cache_matrices is False: self.representation_matrix = self._representation_matrix_uncached def __eq__(self, other): r""" Test for equality. EXAMPLES:: sage: spc1 = SymmetricGroupRepresentation([3], cache_matrices=True) sage: spc1([3,1,2]) [1] sage: spc2 = loads(dumps(spc1)) sage: spc1 == spc2 True :: sage: spc3 = SymmetricGroupRepresentation([3], cache_matrices=False) sage: spc3([3,1,2]) [1] sage: spc4 = loads(dumps(spc3)) sage: spc3 == spc4 True TESTS: The following tests against some bug that was fixed in :trac:`8611`:: sage: spc = SymmetricGroupRepresentation([3]) sage: spc.important_info = 'Sage rules' sage: spc == SymmetricGroupRepresentation([3]) True """ if not isinstance(other, type(other)): return False return (self._ring,self._partition)==(other._ring,other._partition) # # both self and other must have caching enabled # if 'representation_matrix' in self.__dict__: # if 'representation_matrix' not in other.__dict__: # return False # else: # for key in self.__dict__: # if key != 'representation_matrix': # if self.__dict__[key] != other.__dict__[key]: # return False # else: # return True # else: # if 'representation_matrix' in other.__dict__: # return False # else: # return self.__dict__.__eq__(other.__dict__) def __call__(self, permutation): r""" Return the image of ``permutation`` in the representation. EXAMPLES:: sage: spc = SymmetricGroupRepresentation([2,1]) sage: spc([1,3,2]) [ 1 0] [ 1 -1] """ return self.representation_matrix(Permutation(permutation)) def __iter__(self): r""" Iterate over the matrices representing the elements of the symmetric group. EXAMPLES:: sage: spc = SymmetricGroupRepresentation([1,1,1]) sage: list(spc) [[1], [-1], [-1], [1], [1], [-1]] """ for permutation in Permutations(self._partition.size()): yield self.representation_matrix(permutation) def verify_representation(self): r""" Verify the representation: tests that the images of the simple transpositions are involutions and tests that the braid relations hold. EXAMPLES:: sage: spc = SymmetricGroupRepresentation([1,1,1]) sage: spc.verify_representation() True sage: spc = SymmetricGroupRepresentation([4,2,1]) sage: spc.verify_representation() True """ n = self._partition.size() transpositions = [] for i in range(1,n): si = Permutation(range(1,i) + [i+1,i] + range(i+2,n+1)) transpositions.append(si) repn_matrices = map(self.representation_matrix, transpositions) for (i,si) in enumerate(repn_matrices): for (j,sj) in enumerate(repn_matrices): if i == j: if si*sj != si.parent().identity_matrix(): return False, "si si != 1 for i = %s" % (i,) elif abs(i-j) > 1: if si*sj != sj*si: return False, "si sj != sj si for (i,j) =(%s,%s)" % (i,j) else: if si*sj*si != sj*si*sj: return False, "si sj si != sj si sj for (i,j) = (%s,%s)" % (i,j) return True def to_character(self): r""" Return the character of the representation. EXAMPLES: The trivial character:: sage: rho = SymmetricGroupRepresentation([3]) sage: chi = rho.to_character(); chi Character of Symmetric group of order 3! as a permutation group sage: chi.values() [1, 1, 1] sage: all(chi(g) == 1 for g in SymmetricGroup(3)) True The sign character:: sage: rho = SymmetricGroupRepresentation([1,1,1]) sage: chi = rho.to_character(); chi Character of Symmetric group of order 3! as a permutation group sage: chi.values() [1, -1, 1] sage: all(chi(g) == g.sign() for g in SymmetricGroup(3)) True The defining representation:: sage: triv = SymmetricGroupRepresentation([4]) sage: hook = SymmetricGroupRepresentation([3,1]) sage: def_rep = lambda p : triv(p).block_sum(hook(p)).trace() sage: map(def_rep, Permutations(4)) [4, 2, 2, 1, 1, 2, 2, 0, 1, 0, 0, 1, 1, 0, 2, 1, 0, 0, 0, 1, 1, 2, 0, 0] sage: [p.to_matrix().trace() for p in Permutations(4)] [4, 2, 2, 1, 1, 2, 2, 0, 1, 0, 0, 1, 1, 0, 2, 1, 0, 0, 0, 1, 1, 2, 0, 0] """ from sage.groups.perm_gps.permgroup_named import SymmetricGroup Sym = SymmetricGroup(sum(self._partition)) values = [self(g).trace() for g in Sym.conjugacy_classes_representatives()] return Sym.character(values)
class SymmetricGroupRepresentation_generic_class(SageObject): r""" Generic methods for a representation of the symmetric group. """ _default_ring = None def __init__(self, partition, ring=None, cache_matrices=True): r""" An irreducible representation of the symmetric group corresponding to ``partition``. For more information, see the documentation for :func:`SymmetricGroupRepresentation`. EXAMPLES:: sage: spc = SymmetricGroupRepresentation([3]) sage: spc([3,2,1]) [1] sage: spc == loads(dumps(spc)) True sage: spc = SymmetricGroupRepresentation([3], cache_matrices=False) sage: spc([3,2,1]) [1] sage: spc == loads(dumps(spc)) True """ self._partition = Partition(partition) self._ring = ring if not ring is None else self._default_ring if cache_matrices is False: self.representation_matrix = self._representation_matrix_uncached def __eq__(self, other): r""" Test for equality. EXAMPLES:: sage: spc1 = SymmetricGroupRepresentation([3], cache_matrices=True) sage: spc1([3,1,2]) [1] sage: spc2 = loads(dumps(spc1)) sage: spc1 == spc2 True :: sage: spc3 = SymmetricGroupRepresentation([3], cache_matrices=False) sage: spc3([3,1,2]) [1] sage: spc4 = loads(dumps(spc3)) sage: spc3 == spc4 True TESTS: The following tests against some bug that was fixed in :trac:`8611`:: sage: spc = SymmetricGroupRepresentation([3]) sage: spc.important_info = 'Sage rules' sage: spc == SymmetricGroupRepresentation([3]) True """ if not isinstance(other, type(other)): return False return (self._ring, self._partition) == (other._ring, other._partition) # # both self and other must have caching enabled # if self.__dict__.has_key('representation_matrix'): # if not other.__dict__.has_key('representation_matrix'): # return False # else: # for key in self.__dict__: # if key != 'representation_matrix': # if self.__dict__[key] != other.__dict__[key]: # return False # else: # return True # else: # if other.__dict__.has_key('representation_matrix'): # return False # else: # return self.__dict__.__eq__(other.__dict__) def __call__(self, permutation): r""" Return the image of ``permutation`` in the representation. EXAMPLES:: sage: spc = SymmetricGroupRepresentation([2,1]) sage: spc([1,3,2]) [ 1 0] [ 1 -1] """ return self.representation_matrix(Permutation(permutation)) def __iter__(self): r""" Iterate over the matrices representing the elements of the symmetric group. EXAMPLES:: sage: spc = SymmetricGroupRepresentation([1,1,1]) sage: list(spc) [[1], [-1], [-1], [1], [1], [-1]] """ for permutation in Permutations(self._partition.size()): yield self.representation_matrix(permutation) def verify_representation(self): r""" Verify the representation: tests that the images of the simple transpositions are involutions and tests that the braid relations hold. EXAMPLES:: sage: spc = SymmetricGroupRepresentation([1,1,1]) sage: spc.verify_representation() True sage: spc = SymmetricGroupRepresentation([4,2,1]) sage: spc.verify_representation() True """ n = self._partition.size() transpositions = [] for i in range(1, n): si = Permutation(range(1, i) + [i + 1, i] + range(i + 2, n + 1)) transpositions.append(si) repn_matrices = map(self.representation_matrix, transpositions) for (i, si) in enumerate(repn_matrices): for (j, sj) in enumerate(repn_matrices): if i == j: if si * sj != si.parent().identity_matrix(): return False, "si si != 1 for i = %s" % (i, ) elif abs(i - j) > 1: if si * sj != sj * si: return False, "si sj != sj si for (i,j) =(%s,%s)" % (i, j) else: if si * sj * si != sj * si * sj: return False, "si sj si != sj si sj for (i,j) = (%s,%s)" % ( i, j) return True def to_character(self): r""" Return the character of the representation. EXAMPLES: The trivial character:: sage: rho = SymmetricGroupRepresentation([3]) sage: chi = rho.to_character(); chi Character of Symmetric group of order 3! as a permutation group sage: chi.values() [1, 1, 1] sage: all(chi(g) == 1 for g in SymmetricGroup(3)) True The sign character:: sage: rho = SymmetricGroupRepresentation([1,1,1]) sage: chi = rho.to_character(); chi Character of Symmetric group of order 3! as a permutation group sage: chi.values() [1, -1, 1] sage: all(chi(g) == g.sign() for g in SymmetricGroup(3)) True The defining representation:: sage: triv = SymmetricGroupRepresentation([4]) sage: hook = SymmetricGroupRepresentation([3,1]) sage: def_rep = lambda p : triv(p).block_sum(hook(p)).trace() sage: map(def_rep, Permutations(4)) [4, 2, 2, 1, 1, 2, 2, 0, 1, 0, 0, 1, 1, 0, 2, 1, 0, 0, 0, 1, 1, 2, 0, 0] sage: [p.to_matrix().trace() for p in Permutations(4)] [4, 2, 2, 1, 1, 2, 2, 0, 1, 0, 0, 1, 1, 0, 2, 1, 0, 0, 0, 1, 1, 2, 0, 0] """ from sage.groups.perm_gps.permgroup_named import SymmetricGroup Sym = SymmetricGroup(sum(self._partition)) values = [ self(g).trace() for g in Sym.conjugacy_classes_representatives() ] return Sym.character(values)