def __iter__(self): """ TESTS:: sage: [ p for p in OrderedSetPartitions([1,2,3,4], [2,1,1]) ] [[{1, 2}, {3}, {4}], [{1, 2}, {4}, {3}], [{1, 3}, {2}, {4}], [{1, 4}, {2}, {3}], [{1, 3}, {4}, {2}], [{1, 4}, {3}, {2}], [{2, 3}, {1}, {4}], [{2, 4}, {1}, {3}], [{3, 4}, {1}, {2}], [{2, 3}, {4}, {1}], [{2, 4}, {3}, {1}], [{3, 4}, {2}, {1}]] """ comp = self.c lset = [x for x in self._set] l = len(self.c) dcomp = [-1] + comp.descents(final_descent=True) p = [] for j in range(l): p += [j + 1] * comp[j] for x in permutation.Permutations(p): res = permutation.Permutation(range( 1, len(lset))) * Word(x).standard_permutation().inverse() res = [lset[x - 1] for x in res] yield self.element_class( self, [Set(res[dcomp[i] + 1:dcomp[i + 1] + 1]) for i in range(l)])
def __iter__(self): """ TESTS:: sage: [ p for p in OrderedSetPartitions([1,2,3,4], [2,1,1]) ] [[{1, 2}, {3}, {4}], [{1, 2}, {4}, {3}], [{1, 3}, {2}, {4}], [{1, 4}, {2}, {3}], [{1, 3}, {4}, {2}], [{1, 4}, {3}, {2}], [{2, 3}, {1}, {4}], [{2, 4}, {1}, {3}], [{3, 4}, {1}, {2}], [{2, 3}, {4}, {1}], [{2, 4}, {3}, {1}], [{3, 4}, {2}, {1}]] sage: len(OrderedSetPartitions([1,2,3,4], [1,1,1,1])) 24 sage: [ x for x in OrderedSetPartitions([1,4,7], [3]) ] [[{1, 4, 7}]] sage: [ x for x in OrderedSetPartitions([1,4,7], [1,2]) ] [[{1}, {4, 7}], [{4}, {1, 7}], [{7}, {1, 4}]] sage: [ p for p in OrderedSetPartitions([], []) ] [[]] sage: [ p for p in OrderedSetPartitions([1], [1]) ] [[{1}]] Let us check that it works for large size (:trac:`16646`):: sage: OrderedSetPartitions(42).first() [{1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10}, {11}, {12}, {13}, {14}, {15}, {16}, {17}, {18}, {19}, {20}, {21}, {22}, {23}, {24}, {25}, {26}, {27}, {28}, {29}, {30}, {31}, {32}, {33}, {34}, {35}, {36}, {37}, {38}, {39}, {40}, {41}, {42}] """ comp = self.c lset = [x for x in self._set] l = len(self.c) dcomp = [-1] + comp.descents(final_descent=True) p = [] for j in range(l): p += [j + 1] * comp[j] for x in permutation.Permutations(p): res = permutation.to_standard(x).inverse() res = [lset[x - 1] for x in res] yield self.element_class( self, [Set(res[dcomp[i] + 1:dcomp[i + 1] + 1]) for i in range(l)])