Partition tuples¶
A PartitionTuple is a tuple of partitions. That is, an ordered
\(k\)-tuple of partitions \(\mu=(\mu^{(1)},\mu^{(2)},...,\mu^{(k)})\). If
then we say that \(\mu\) is a \(k\)-partition of \(n\).
In representation theory partition tuples arise as the natural indexing set for the ordinary irreducible representations of:
- the wreath products of cyclic groups with symmetric groups, 
- the Ariki-Koike algebras, or the cyclotomic Hecke algebras of the complex reflection groups of type \(G(r,1,n)\), 
- the degenerate cyclotomic Hecke algebras of type \(G(r,1,n)\). 
When these algebras are not semisimple, partition tuples index an important class of modules for the algebras, which are generalisations of the Specht modules of the symmetric groups.
Tuples of partitions also index the standard basis of the higher level combinatorial Fock spaces. As a consequence, the combinatorics of partition tuples encapsulates the canonical bases of crystal graphs for the irreducible integrable highest weight modules of the (quantized) affine special linear groups and the (quantized) affine general linear groups. By the categorification theorems of Ariki, Varagnolo-Vasserot, Stroppel-Webster and others, in characteristic zero the degenerate and non-degenerate cyclotomic Hecke algebras, via their Khovanov-Lauda-Rouquier grading, categorify the canonical bases of the quantum affine special and general linear groups.
Partitions are naturally in bijection with 1-tuples of partitions. Most of the combinatorial operations defined on partitions extend to partition tuples in a meaningful way. For example, the semisimple branching rules for the Specht modules are described by adding and removing cells from partition tuples and the modular branching rules correspond to adding and removing good and cogood nodes, which is the underlying combinatorics for the associated crystal graphs.
A PartitionTuple belongs to PartitionTuples and its derived
classes. PartitionTuples is the parent class for all partitions
tuples. Four different classes of tuples of partitions are currently supported:
- PartitionTuples(level=k,size=n)are \(k\)-tuple of partitions of \(n\).
- PartitionTuples(level=k)are \(k\)-tuple of partitions.
- PartitionTuples(size=n)are tuples of partitions of \(n\).
- PartitionTuples()are tuples of partitions.
Note
As with Partitions, in sage the cells, or nodes, of partition
tuples are 0-based. For example, the (lexicographically) first cell in
any non-empty partition tuple is \([0,0,0]\).
EXAMPLES:
sage: PartitionTuple([[2,2],[1,1],[2]]).cells()
[(0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 1, 0), (2, 0, 0), (2, 0, 1)]
>>> from sage.all import *
>>> PartitionTuple([[Integer(2),Integer(2)],[Integer(1),Integer(1)],[Integer(2)]]).cells()
[(0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 1, 0), (2, 0, 0), (2, 0, 1)]
Note
Many PartitionTuple methods take the individual coordinates \((k,r,c)\)
as their arguments, here \(k\) is the component, \(r\) is the row index and \(c\) is
the column index.  If your coordinates are in the form (k,r,c) then use
Python’s *-operator.
EXAMPLES:
sage: mu=PartitionTuple([[1,1],[2],[2,1]])
sage: [ mu.arm_length(*c) for c in mu.cells()]
[0, 0, 1, 0, 1, 0, 0]
>>> from sage.all import *
>>> mu=PartitionTuple([[Integer(1),Integer(1)],[Integer(2)],[Integer(2),Integer(1)]])
>>> [ mu.arm_length(*c) for c in mu.cells()]
[0, 0, 1, 0, 1, 0, 0]
Warning
In sage, if mu is a partition tuple then mu[k] most naturally refers
to the \(k\)-th component of mu, so we use the convention of the
\((k,r,c)\)-th cell in a partition tuple refers to the cell in component \(k\),
row \(r\), and column \(c\). In the literature, the cells of a partition tuple
are usually written in the form \((r,c,k)\), where \(r\) is the row index, \(c\)
is the column index, and \(k\) is the component index.
REFERENCES:
AUTHORS:
- Andrew Mathas (2012-06-01): Initial classes. 
EXAMPLES:
First is a finite enumerated set and the remaining classes are infinite enumerated sets:
sage: PartitionTuples().an_element()
([1, 1, 1, 1], [2, 1, 1], [3, 1], [4])
sage: PartitionTuples(4).an_element()
([], [1], [2], [3])
sage: PartitionTuples(size=5).an_element()
([1], [1], [1], [1], [1])
sage: PartitionTuples(4,5).an_element()
([1], [], [], [4])
sage: PartitionTuples(3,2)[:]                                                       # needs sage.libs.flint
[([2], [], []),
 ([1, 1], [], []),
 ([1], [1], []),
 ([1], [], [1]),
 ([], [2], []),
 ([], [1, 1], []),
 ([], [1], [1]),
 ([], [], [2]),
 ([], [], [1, 1])]
sage: PartitionTuples(2,3).list()                                                   # needs sage.libs.flint
[([3], []),
 ([2, 1], []),
 ([1, 1, 1], []),
 ([2], [1]),
 ([1, 1], [1]),
 ([1], [2]),
 ([1], [1, 1]),
 ([], [3]),
 ([], [2, 1]),
 ([], [1, 1, 1])]
>>> from sage.all import *
>>> PartitionTuples().an_element()
([1, 1, 1, 1], [2, 1, 1], [3, 1], [4])
>>> PartitionTuples(Integer(4)).an_element()
([], [1], [2], [3])
>>> PartitionTuples(size=Integer(5)).an_element()
([1], [1], [1], [1], [1])
>>> PartitionTuples(Integer(4),Integer(5)).an_element()
([1], [], [], [4])
>>> PartitionTuples(Integer(3),Integer(2))[:]                                                       # needs sage.libs.flint
[([2], [], []),
 ([1, 1], [], []),
 ([1], [1], []),
 ([1], [], [1]),
 ([], [2], []),
 ([], [1, 1], []),
 ([], [1], [1]),
 ([], [], [2]),
 ([], [], [1, 1])]
>>> PartitionTuples(Integer(2),Integer(3)).list()                                                   # needs sage.libs.flint
[([3], []),
 ([2, 1], []),
 ([1, 1, 1], []),
 ([2], [1]),
 ([1, 1], [1]),
 ([1], [2]),
 ([1], [1, 1]),
 ([], [3]),
 ([], [2, 1]),
 ([], [1, 1, 1])]
One tuples of partitions are naturally in bijection with partitions and, as far as possible, partition tuples attempts to identify one tuples with partitions:
sage: Partition([4,3]) == PartitionTuple([[4,3]])
True
sage: Partition([4,3]) == PartitionTuple([4,3])
True
sage: PartitionTuple([4,3])
[4, 3]
sage: Partition([4,3]) in PartitionTuples()
True
>>> from sage.all import *
>>> Partition([Integer(4),Integer(3)]) == PartitionTuple([[Integer(4),Integer(3)]])
True
>>> Partition([Integer(4),Integer(3)]) == PartitionTuple([Integer(4),Integer(3)])
True
>>> PartitionTuple([Integer(4),Integer(3)])
[4, 3]
>>> Partition([Integer(4),Integer(3)]) in PartitionTuples()
True
Partition tuples come equipped with many of the corresponding methods for partitions. For example, it is possible to add and remove cells, to conjugate partition tuples, to work with their diagrams, compare partition tuples in dominance and so:
sage: PartitionTuple([[4,1],[],[2,2,1],[3]]).pp()
   ****   -   **   ***
   *          **
              *
sage: PartitionTuple([[4,1],[],[2,2,1],[3]]).conjugate()
([1, 1, 1], [3, 2], [], [2, 1, 1, 1])
sage: PartitionTuple([[4,1],[],[2,2,1],[3]]).conjugate().pp()
   *   ***   -   **
   *   **        *
   *             *
                 *
sage: lam = PartitionTuples(3)([[3,2],[],[1,1,1,1]]); lam
([3, 2], [], [1, 1, 1, 1])
sage: lam.level()
3
sage: lam.size()
9
sage: lam.category()
Category of elements of Partition tuples of level 3
sage: lam.parent()
Partition tuples of level 3
sage: lam[0]
[3, 2]
sage: lam[1]
[]
sage: lam[2]
[1, 1, 1, 1]
sage: lam.pp()
   ***   -   *
   **        *
             *
             *
sage: lam.removable_cells()
[(0, 0, 2), (0, 1, 1), (2, 3, 0)]
sage: lam.down_list()
[([2, 2], [], [1, 1, 1, 1]),
 ([3, 1], [], [1, 1, 1, 1]),
 ([3, 2], [], [1, 1, 1])]
sage: lam.addable_cells()
[(0, 0, 3), (0, 1, 2), (0, 2, 0), (1, 0, 0), (2, 0, 1), (2, 4, 0)]
sage: lam.up_list()
[([4, 2], [], [1, 1, 1, 1]),
 ([3, 3], [], [1, 1, 1, 1]),
 ([3, 2, 1], [], [1, 1, 1, 1]),
 ([3, 2], [1], [1, 1, 1, 1]),
 ([3, 2], [], [2, 1, 1, 1]),
 ([3, 2], [], [1, 1, 1, 1, 1])]
sage: lam.conjugate()
([4], [], [2, 2, 1])
sage: lam.dominates( PartitionTuple([[3],[1],[2,2,1]]) )
False
sage: lam.dominates( PartitionTuple([[3],[2],[1,1,1]]))
True
>>> from sage.all import *
>>> PartitionTuple([[Integer(4),Integer(1)],[],[Integer(2),Integer(2),Integer(1)],[Integer(3)]]).pp()
   ****   -   **   ***
   *          **
              *
>>> PartitionTuple([[Integer(4),Integer(1)],[],[Integer(2),Integer(2),Integer(1)],[Integer(3)]]).conjugate()
([1, 1, 1], [3, 2], [], [2, 1, 1, 1])
>>> PartitionTuple([[Integer(4),Integer(1)],[],[Integer(2),Integer(2),Integer(1)],[Integer(3)]]).conjugate().pp()
   *   ***   -   **
   *   **        *
   *             *
                 *
>>> lam = PartitionTuples(Integer(3))([[Integer(3),Integer(2)],[],[Integer(1),Integer(1),Integer(1),Integer(1)]]); lam
([3, 2], [], [1, 1, 1, 1])
>>> lam.level()
3
>>> lam.size()
9
>>> lam.category()
Category of elements of Partition tuples of level 3
>>> lam.parent()
Partition tuples of level 3
>>> lam[Integer(0)]
[3, 2]
>>> lam[Integer(1)]
[]
>>> lam[Integer(2)]
[1, 1, 1, 1]
>>> lam.pp()
   ***   -   *
   **        *
             *
             *
>>> lam.removable_cells()
[(0, 0, 2), (0, 1, 1), (2, 3, 0)]
>>> lam.down_list()
[([2, 2], [], [1, 1, 1, 1]),
 ([3, 1], [], [1, 1, 1, 1]),
 ([3, 2], [], [1, 1, 1])]
>>> lam.addable_cells()
[(0, 0, 3), (0, 1, 2), (0, 2, 0), (1, 0, 0), (2, 0, 1), (2, 4, 0)]
>>> lam.up_list()
[([4, 2], [], [1, 1, 1, 1]),
 ([3, 3], [], [1, 1, 1, 1]),
 ([3, 2, 1], [], [1, 1, 1, 1]),
 ([3, 2], [1], [1, 1, 1, 1]),
 ([3, 2], [], [2, 1, 1, 1]),
 ([3, 2], [], [1, 1, 1, 1, 1])]
>>> lam.conjugate()
([4], [], [2, 2, 1])
>>> lam.dominates( PartitionTuple([[Integer(3)],[Integer(1)],[Integer(2),Integer(2),Integer(1)]]) )
False
>>> lam.dominates( PartitionTuple([[Integer(3)],[Integer(2)],[Integer(1),Integer(1),Integer(1)]]))
True
Every partition tuple behaves every much like a tuple of partitions:
sage: mu = PartitionTuple([[4,1],[],[2,2,1],[3]])
sage: [ nu for nu in mu ]
[[4, 1], [], [2, 2, 1], [3]]
sage: Set([ type(nu) for nu in mu ])
{<class 'sage.combinat.partition.Partitions_all_with_category.element_class'>}
sage: mu[2][2]
1
sage: mu[3]
[3]
sage: mu.components()
[[4, 1], [], [2, 2, 1], [3]]
sage: mu.components() == [ nu for nu in mu ]
True
sage: mu[0]
[4, 1]
sage: mu[1]
[]
sage: mu[2]
[2, 2, 1]
sage: mu[2][0]
2
sage: mu[2][1]
2
sage: mu.level()
4
sage: len(mu)
4
sage: mu.cells()
[(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 0, 3), (0, 1, 0), (2, 0, 0), (2, 0, 1),
 (2, 1, 0), (2, 1, 1), (2, 2, 0), (3, 0, 0), (3, 0, 1), (3, 0, 2)]
sage: mu.addable_cells()
[(0, 0, 4), (0, 1, 1), (0, 2, 0), (1, 0, 0), (2, 0, 2), (2, 2, 1),
 (2, 3, 0), (3, 0, 3), (3, 1, 0)]
sage: mu.removable_cells()
[(0, 0, 3), (0, 1, 0), (2, 1, 1), (2, 2, 0), (3, 0, 2)]
>>> from sage.all import *
>>> mu = PartitionTuple([[Integer(4),Integer(1)],[],[Integer(2),Integer(2),Integer(1)],[Integer(3)]])
>>> [ nu for nu in mu ]
[[4, 1], [], [2, 2, 1], [3]]
>>> Set([ type(nu) for nu in mu ])
{<class 'sage.combinat.partition.Partitions_all_with_category.element_class'>}
>>> mu[Integer(2)][Integer(2)]
1
>>> mu[Integer(3)]
[3]
>>> mu.components()
[[4, 1], [], [2, 2, 1], [3]]
>>> mu.components() == [ nu for nu in mu ]
True
>>> mu[Integer(0)]
[4, 1]
>>> mu[Integer(1)]
[]
>>> mu[Integer(2)]
[2, 2, 1]
>>> mu[Integer(2)][Integer(0)]
2
>>> mu[Integer(2)][Integer(1)]
2
>>> mu.level()
4
>>> len(mu)
4
>>> mu.cells()
[(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 0, 3), (0, 1, 0), (2, 0, 0), (2, 0, 1),
 (2, 1, 0), (2, 1, 1), (2, 2, 0), (3, 0, 0), (3, 0, 1), (3, 0, 2)]
>>> mu.addable_cells()
[(0, 0, 4), (0, 1, 1), (0, 2, 0), (1, 0, 0), (2, 0, 2), (2, 2, 1),
 (2, 3, 0), (3, 0, 3), (3, 1, 0)]
>>> mu.removable_cells()
[(0, 0, 3), (0, 1, 0), (2, 1, 1), (2, 2, 0), (3, 0, 2)]
Attached to a partition tuple is the corresponding Young, or parabolic, subgroup:
sage: mu.young_subgroup()                                                           # needs sage.groups
Permutation Group with generators
 [(), (12,13), (11,12), (8,9), (6,7), (3,4), (2,3), (1,2)]
sage: mu.young_subgroup_generators()                                                # needs sage.groups
[1, 2, 3, 6, 8, 11, 12]
>>> from sage.all import *
>>> mu.young_subgroup()                                                           # needs sage.groups
Permutation Group with generators
 [(), (12,13), (11,12), (8,9), (6,7), (3,4), (2,3), (1,2)]
>>> mu.young_subgroup_generators()                                                # needs sage.groups
[1, 2, 3, 6, 8, 11, 12]
- class sage.combinat.partition_tuple.PartitionTuple(parent, mu)[source]¶
- Bases: - CombinatorialElement- A tuple of - Partition.- A tuple of partition comes equipped with many of methods available to partitions. The - levelof the PartitionTuple is the length of the tuple.- This is an ordered \(k\)-tuple of partitions \(\mu=(\mu^{(1)},\mu^{(2)},...,\mu^{(k)})\). If \[n = \lvert \mu \rvert = \lvert \mu^{(1)} \rvert + \lvert \mu^{(2)} \rvert + \cdots + \lvert \mu^{(k)} \rvert\]- then \(\mu\) is a \(k\)-partition of \(n\). - In representation theory PartitionTuples arise as the natural indexing set for the ordinary irreducible representations of: - the wreath products of cyclic groups with symmetric groups 
- the Ariki-Koike algebras, or the cyclotomic Hecke algebras of the complex reflection groups of type \(G(r,1,n)\) 
- the degenerate cyclotomic Hecke algebras of type \(G(r,1,n)\) 
 - When these algebras are not semisimple, partition tuples index an important class of modules for the algebras which are generalisations of the Specht modules of the symmetric groups. - Tuples of partitions also index the standard basis of the higher level combinatorial Fock spaces. As a consequence, the combinatorics of partition tuples encapsulates the canonical bases of crystal graphs for the irreducible integrable highest weight modules of the (quantized) affine special linear groups and the (quantized) affine general linear groups. By the categorification theorems of Ariki, Varagnolo-Vasserot, Stroppel-Webster and others, in characteristic zero the degenerate and non-degenerate cyclotomic Hecke algebras, via their Khovanov-Lauda-Rouquier grading, categorify the canonical bases of the quantum affine special and general linear groups. - Partitions are naturally in bijection with 1-tuples of partitions. Most of the combinatorial operations defined on partitions extend to PartitionTuples in a meaningful way. For example, the semisimple branching rules for the Specht modules are described by adding and removing cells from partition tuples and the modular branching rules correspond to adding and removing good and cogood nodes, which is the underlying combinatorics for the associated crystal graphs. - Warning - In the literature, the cells of a partition tuple are usually written in the form \((r,c,k)\), where \(r\) is the row index, \(c\) is the column index, and \(k\) is the component index. In sage, if - muis a partition tuple then- mu[k]most naturally refers to the \(k\)-th component of- mu, so we use the convention of the \((k,r,c)\)-th cell in a partition tuple refers to the cell in component \(k\), row \(r\), and column \(c\).- INPUT: - Anything which can reasonably be interpreted as a tuple of partitions. That is, a list or tuple of partitions or valid input to - Partition.- EXAMPLES: - sage: mu=PartitionTuple( [[3,2],[2,1],[],[1,1,1,1]] ); mu ([3, 2], [2, 1], [], [1, 1, 1, 1]) sage: nu=PartitionTuple( ([3,2],[2,1],[],[1,1,1,1]) ); nu ([3, 2], [2, 1], [], [1, 1, 1, 1]) sage: mu == nu True sage: mu is nu False sage: mu in PartitionTuples() True sage: mu.parent() Partition tuples sage: lam=PartitionTuples(3)([[3,2],[],[1,1,1,1]]); lam ([3, 2], [], [1, 1, 1, 1]) sage: lam.level() 3 sage: lam.size() 9 sage: lam.category() Category of elements of Partition tuples of level 3 sage: lam.parent() Partition tuples of level 3 sage: lam[0] [3, 2] sage: lam[1] [] sage: lam[2] [1, 1, 1, 1] sage: lam.pp() *** - * ** * * * sage: lam.removable_cells() [(0, 0, 2), (0, 1, 1), (2, 3, 0)] sage: lam.down_list() [([2, 2], [], [1, 1, 1, 1]), ([3, 1], [], [1, 1, 1, 1]), ([3, 2], [], [1, 1, 1])] sage: lam.addable_cells() [(0, 0, 3), (0, 1, 2), (0, 2, 0), (1, 0, 0), (2, 0, 1), (2, 4, 0)] sage: lam.up_list() [([4, 2], [], [1, 1, 1, 1]), ([3, 3], [], [1, 1, 1, 1]), ([3, 2, 1], [], [1, 1, 1, 1]), ([3, 2], [1], [1, 1, 1, 1]), ([3, 2], [], [2, 1, 1, 1]), ([3, 2], [], [1, 1, 1, 1, 1])] sage: lam.conjugate() ([4], [], [2, 2, 1]) sage: lam.dominates( PartitionTuple([[3],[1],[2,2,1]]) ) False sage: lam.dominates( PartitionTuple([[3],[2],[1,1,1]])) True - >>> from sage.all import * >>> mu=PartitionTuple( [[Integer(3),Integer(2)],[Integer(2),Integer(1)],[],[Integer(1),Integer(1),Integer(1),Integer(1)]] ); mu ([3, 2], [2, 1], [], [1, 1, 1, 1]) >>> nu=PartitionTuple( ([Integer(3),Integer(2)],[Integer(2),Integer(1)],[],[Integer(1),Integer(1),Integer(1),Integer(1)]) ); nu ([3, 2], [2, 1], [], [1, 1, 1, 1]) >>> mu == nu True >>> mu is nu False >>> mu in PartitionTuples() True >>> mu.parent() Partition tuples >>> lam=PartitionTuples(Integer(3))([[Integer(3),Integer(2)],[],[Integer(1),Integer(1),Integer(1),Integer(1)]]); lam ([3, 2], [], [1, 1, 1, 1]) >>> lam.level() 3 >>> lam.size() 9 >>> lam.category() Category of elements of Partition tuples of level 3 >>> lam.parent() Partition tuples of level 3 >>> lam[Integer(0)] [3, 2] >>> lam[Integer(1)] [] >>> lam[Integer(2)] [1, 1, 1, 1] >>> lam.pp() *** - * ** * * * >>> lam.removable_cells() [(0, 0, 2), (0, 1, 1), (2, 3, 0)] >>> lam.down_list() [([2, 2], [], [1, 1, 1, 1]), ([3, 1], [], [1, 1, 1, 1]), ([3, 2], [], [1, 1, 1])] >>> lam.addable_cells() [(0, 0, 3), (0, 1, 2), (0, 2, 0), (1, 0, 0), (2, 0, 1), (2, 4, 0)] >>> lam.up_list() [([4, 2], [], [1, 1, 1, 1]), ([3, 3], [], [1, 1, 1, 1]), ([3, 2, 1], [], [1, 1, 1, 1]), ([3, 2], [1], [1, 1, 1, 1]), ([3, 2], [], [2, 1, 1, 1]), ([3, 2], [], [1, 1, 1, 1, 1])] >>> lam.conjugate() ([4], [], [2, 2, 1]) >>> lam.dominates( PartitionTuple([[Integer(3)],[Integer(1)],[Integer(2),Integer(2),Integer(1)]]) ) False >>> lam.dominates( PartitionTuple([[Integer(3)],[Integer(2)],[Integer(1),Integer(1),Integer(1)]])) True - See also - add_cell(k, r, c)[source]¶
- Return the partition tuple obtained by adding a cell in row - r, column- c, and component- k.- This does not change - self.- EXAMPLES: - sage: PartitionTuple([[1,1],[4,3],[2,1,1]]).add_cell(0,0,1) ([2, 1], [4, 3], [2, 1, 1]) - >>> from sage.all import * >>> PartitionTuple([[Integer(1),Integer(1)],[Integer(4),Integer(3)],[Integer(2),Integer(1),Integer(1)]]).add_cell(Integer(0),Integer(0),Integer(1)) ([2, 1], [4, 3], [2, 1, 1]) 
 - addable_cells()[source]¶
- Return a list of the removable cells of this partition tuple. - All indices are of the form - (k, r, c), where- ris the row-index,- cis the column index and- kis the component.- EXAMPLES: - sage: PartitionTuple([[1,1],[2],[2,1]]).addable_cells() [(0, 0, 1), (0, 2, 0), (1, 0, 2), (1, 1, 0), (2, 0, 2), (2, 1, 1), (2, 2, 0)] sage: PartitionTuple([[1,1],[4,3],[2,1,1]]).addable_cells() [(0, 0, 1), (0, 2, 0), (1, 0, 4), (1, 1, 3), (1, 2, 0), (2, 0, 2), (2, 1, 1), (2, 3, 0)] - >>> from sage.all import * >>> PartitionTuple([[Integer(1),Integer(1)],[Integer(2)],[Integer(2),Integer(1)]]).addable_cells() [(0, 0, 1), (0, 2, 0), (1, 0, 2), (1, 1, 0), (2, 0, 2), (2, 1, 1), (2, 2, 0)] >>> PartitionTuple([[Integer(1),Integer(1)],[Integer(4),Integer(3)],[Integer(2),Integer(1),Integer(1)]]).addable_cells() [(0, 0, 1), (0, 2, 0), (1, 0, 4), (1, 1, 3), (1, 2, 0), (2, 0, 2), (2, 1, 1), (2, 3, 0)] 
 - arm_length(k, r, c)[source]¶
- Return the length of the arm of cell - (k, r, c)in- self.- INPUT: - k– the component
- r– the row
- c– the cell
 - OUTPUT: the arm length as an integer - The arm of cell - (k, r, c)is the number of cells in the- k-th component which are to the right of the cell in row- rand column- c.- EXAMPLES: - sage: PartitionTuple([[],[2,1],[2,2,1],[3]]).arm_length(2,0,0) 1 sage: PartitionTuple([[],[2,1],[2,2,1],[3]]).arm_length(2,0,1) 0 sage: PartitionTuple([[],[2,1],[2,2,1],[3]]).arm_length(2,2,0) 0 - >>> from sage.all import * >>> PartitionTuple([[],[Integer(2),Integer(1)],[Integer(2),Integer(2),Integer(1)],[Integer(3)]]).arm_length(Integer(2),Integer(0),Integer(0)) 1 >>> PartitionTuple([[],[Integer(2),Integer(1)],[Integer(2),Integer(2),Integer(1)],[Integer(3)]]).arm_length(Integer(2),Integer(0),Integer(1)) 0 >>> PartitionTuple([[],[Integer(2),Integer(1)],[Integer(2),Integer(2),Integer(1)],[Integer(3)]]).arm_length(Integer(2),Integer(2),Integer(0)) 0 
 - block(e, multicharge)[source]¶
- Return a dictionary \(\beta\) that determines the block associated to the partition - selfand the- quantum_characteristic()- e.- INPUT: - e– the quantum characteristic
- multicharge– the multicharge (default: \((0,)\))
 - OUTPUT: - a dictionary giving the multiplicities of the residues in the partition tuple - self
 - In more detail, the value - beta[i]is equal to the number of nodes of residue- i. This corresponds to the positive root\[\sum_{i\in I} \beta_i \alpha_i \in Q^+,\]- a element of the positive root lattice of the corresponding Kac-Moody algebra. See [DJM1998] and [BK2009] for more details. - This is a useful statistics because two Specht modules for a cyclotomic Hecke algebra of type \(A\) belong to the same block if and only if they correspond to same element \(\beta\) of the root lattice, given above. - We return a dictionary because when the quantum characteristic is \(0\), the Cartan type is \(A_{\infty}\), in which case the simple roots are indexed by the integers. - EXAMPLES: - sage: PartitionTuple([[2,2],[2,2]]).block(0,(0,0)) {-1: 2, 0: 4, 1: 2} sage: PartitionTuple([[2,2],[2,2]]).block(2,(0,0)) {0: 4, 1: 4} sage: PartitionTuple([[2,2],[2,2]]).block(2,(0,1)) {0: 4, 1: 4} sage: PartitionTuple([[2,2],[2,2]]).block(3,(0,2)) {0: 3, 1: 2, 2: 3} sage: PartitionTuple([[2,2],[2,2]]).block(3,(0,2)) {0: 3, 1: 2, 2: 3} sage: PartitionTuple([[2,2],[2,2]]).block(3,(3,2)) {0: 3, 1: 2, 2: 3} sage: PartitionTuple([[2,2],[2,2]]).block(4,(0,0)) {0: 4, 1: 2, 3: 2} - >>> from sage.all import * >>> PartitionTuple([[Integer(2),Integer(2)],[Integer(2),Integer(2)]]).block(Integer(0),(Integer(0),Integer(0))) {-1: 2, 0: 4, 1: 2} >>> PartitionTuple([[Integer(2),Integer(2)],[Integer(2),Integer(2)]]).block(Integer(2),(Integer(0),Integer(0))) {0: 4, 1: 4} >>> PartitionTuple([[Integer(2),Integer(2)],[Integer(2),Integer(2)]]).block(Integer(2),(Integer(0),Integer(1))) {0: 4, 1: 4} >>> PartitionTuple([[Integer(2),Integer(2)],[Integer(2),Integer(2)]]).block(Integer(3),(Integer(0),Integer(2))) {0: 3, 1: 2, 2: 3} >>> PartitionTuple([[Integer(2),Integer(2)],[Integer(2),Integer(2)]]).block(Integer(3),(Integer(0),Integer(2))) {0: 3, 1: 2, 2: 3} >>> PartitionTuple([[Integer(2),Integer(2)],[Integer(2),Integer(2)]]).block(Integer(3),(Integer(3),Integer(2))) {0: 3, 1: 2, 2: 3} >>> PartitionTuple([[Integer(2),Integer(2)],[Integer(2),Integer(2)]]).block(Integer(4),(Integer(0),Integer(0))) {0: 4, 1: 2, 3: 2} 
 - cells()[source]¶
- Return the coordinates of the cells of - self. Coordinates are given as (component index, row index, column index) and are 0 based.- EXAMPLES: - sage: PartitionTuple([[2,1],[1],[1,1,1]]).cells() [(0, 0, 0), (0, 0, 1), (0, 1, 0), (1, 0, 0), (2, 0, 0), (2, 1, 0), (2, 2, 0)] - >>> from sage.all import * >>> PartitionTuple([[Integer(2),Integer(1)],[Integer(1)],[Integer(1),Integer(1),Integer(1)]]).cells() [(0, 0, 0), (0, 0, 1), (0, 1, 0), (1, 0, 0), (2, 0, 0), (2, 1, 0), (2, 2, 0)] 
 - components()[source]¶
- Return a list containing the shape of this partition. - This function exists in order to give a uniform way of iterating over the "components" of partition tuples of level 1 (partitions) and for higher levels. - EXAMPLES: - sage: for t in PartitionTuple([[2,1],[3,2],[3]]).components(): ....: print('%s\n' % t.ferrers_diagram()) ** * *** ** *** sage: for t in PartitionTuple([3,2]).components(): ....: print('%s\n' % t.ferrers_diagram()) *** ** - >>> from sage.all import * >>> for t in PartitionTuple([[Integer(2),Integer(1)],[Integer(3),Integer(2)],[Integer(3)]]).components(): ... print('%s\n' % t.ferrers_diagram()) ** * <BLANKLINE> *** ** <BLANKLINE> *** <BLANKLINE> >>> for t in PartitionTuple([Integer(3),Integer(2)]).components(): ... print('%s\n' % t.ferrers_diagram()) *** ** 
 - conjugate()[source]¶
- Return the conjugate partition tuple of - self.- The conjugate partition tuple is obtained by reversing the order of the components and then swapping the rows and columns in each component. - EXAMPLES: - sage: PartitionTuple([[2,1],[1],[1,1,1]]).conjugate() ([3], [1], [2, 1]) - >>> from sage.all import * >>> PartitionTuple([[Integer(2),Integer(1)],[Integer(1)],[Integer(1),Integer(1),Integer(1)]]).conjugate() ([3], [1], [2, 1]) 
 - contains(mu)[source]¶
- Return - Trueif this partition tuple contains \(\mu\).- If \(\lambda=(\lambda^{(1)}, \ldots, \lambda^{(l)})\) and \(\mu=(\mu^{(1)}, \ldots, \mu^{(m)})\) are two partition tuples then \(\lambda\) contains \(\mu\) if \(m \leq l\) and \(\mu^{(i)}_r \leq \lambda^{(i)}_r\) for \(1 \leq i \leq m\) and \(r \geq 0\). - EXAMPLES: - sage: PartitionTuple([[1,1],[2],[2,1]]).contains( PartitionTuple([[1,1],[2],[2,1]]) ) True - >>> from sage.all import * >>> PartitionTuple([[Integer(1),Integer(1)],[Integer(2)],[Integer(2),Integer(1)]]).contains( PartitionTuple([[Integer(1),Integer(1)],[Integer(2)],[Integer(2),Integer(1)]]) ) True 
 - content(k, r, c, multicharge)[source]¶
- Return the content of the cell. - Let \(m_k =\) - multicharge[k], then the content of a cell is \(m_k + c - r\).- If the - multichargeis a list of integers then it simply offsets the values of the contents in each component. On the other hand, if the- multichargebelongs to \(\ZZ/e\ZZ\) then the corresponding \(e\)-residue is returned (that is, the content mod \(e\)).- As with the content method for partitions, the content of a cell does not technically depend on the partition tuple, but this method is included because it is often useful. - EXAMPLES: - sage: PartitionTuple([[2,1],[2],[1,1,1]]).content(0,1,0, [0,0,0]) -1 sage: PartitionTuple([[2,1],[2],[1,1,1]]).content(0,1,0, [1,0,0]) 0 sage: PartitionTuple([[2,1],[2],[1,1,1]]).content(2,1,0, [0,0,0]) -1 - >>> from sage.all import * >>> PartitionTuple([[Integer(2),Integer(1)],[Integer(2)],[Integer(1),Integer(1),Integer(1)]]).content(Integer(0),Integer(1),Integer(0), [Integer(0),Integer(0),Integer(0)]) -1 >>> PartitionTuple([[Integer(2),Integer(1)],[Integer(2)],[Integer(1),Integer(1),Integer(1)]]).content(Integer(0),Integer(1),Integer(0), [Integer(1),Integer(0),Integer(0)]) 0 >>> PartitionTuple([[Integer(2),Integer(1)],[Integer(2)],[Integer(1),Integer(1),Integer(1)]]).content(Integer(2),Integer(1),Integer(0), [Integer(0),Integer(0),Integer(0)]) -1 - and now we return the 3-residue of a cell: - sage: multicharge = [IntegerModRing(3)(c) for c in [0,0,0]] sage: PartitionTuple([[2,1],[2],[1,1,1]]).content(0,1,0, multicharge) 2 - >>> from sage.all import * >>> multicharge = [IntegerModRing(Integer(3))(c) for c in [Integer(0),Integer(0),Integer(0)]] >>> PartitionTuple([[Integer(2),Integer(1)],[Integer(2)],[Integer(1),Integer(1),Integer(1)]]).content(Integer(0),Integer(1),Integer(0), multicharge) 2 
 - content_tableau(multicharge)[source]¶
- Return the tableau which has (k,r,c)th entry equal to the content - multicharge[k]-r+cof this cell.- As with the content function, by setting the - multichargeappropriately the tableau containing the residues is returned.- EXAMPLES: - sage: PartitionTuple([[2,1],[2],[1,1,1]]).content_tableau([0,0,0]) ([[0, 1], [-1]], [[0, 1]], [[0], [-1], [-2]]) sage: PartitionTuple([[2,1],[2],[1,1,1]]).content_tableau([0,0,1]).pp() 0 1 0 1 1 -1 0 -1 - >>> from sage.all import * >>> PartitionTuple([[Integer(2),Integer(1)],[Integer(2)],[Integer(1),Integer(1),Integer(1)]]).content_tableau([Integer(0),Integer(0),Integer(0)]) ([[0, 1], [-1]], [[0, 1]], [[0], [-1], [-2]]) >>> PartitionTuple([[Integer(2),Integer(1)],[Integer(2)],[Integer(1),Integer(1),Integer(1)]]).content_tableau([Integer(0),Integer(0),Integer(1)]).pp() 0 1 0 1 1 -1 0 -1 - as with the content function the multicharge can be used to return the tableau containing the residues of the cells: - sage: multicharge=[ IntegerModRing(3)(c) for c in [0,0,1] ] sage: PartitionTuple([[2,1],[2],[1,1,1]]).content_tableau(multicharge).pp() 0 1 0 1 1 2 0 2 - >>> from sage.all import * >>> multicharge=[ IntegerModRing(Integer(3))(c) for c in [Integer(0),Integer(0),Integer(1)] ] >>> PartitionTuple([[Integer(2),Integer(1)],[Integer(2)],[Integer(1),Integer(1),Integer(1)]]).content_tableau(multicharge).pp() 0 1 0 1 1 2 0 2 
 - corners()[source]¶
- Return a list of the removable cells of this partition tuple. - All indices are of the form - (k, r, c), where- ris the row-index,- cis the column index and- kis the component.- EXAMPLES: - sage: PartitionTuple([[1,1],[2],[2,1]]).removable_cells() [(0, 1, 0), (1, 0, 1), (2, 0, 1), (2, 1, 0)] sage: PartitionTuple([[1,1],[4,3],[2,1,1]]).removable_cells() [(0, 1, 0), (1, 0, 3), (1, 1, 2), (2, 0, 1), (2, 2, 0)] - >>> from sage.all import * >>> PartitionTuple([[Integer(1),Integer(1)],[Integer(2)],[Integer(2),Integer(1)]]).removable_cells() [(0, 1, 0), (1, 0, 1), (2, 0, 1), (2, 1, 0)] >>> PartitionTuple([[Integer(1),Integer(1)],[Integer(4),Integer(3)],[Integer(2),Integer(1),Integer(1)]]).removable_cells() [(0, 1, 0), (1, 0, 3), (1, 1, 2), (2, 0, 1), (2, 2, 0)] 
 - defect(e, multicharge)[source]¶
- Return the - e-defect or the- e-weight- self.- The \(e\)-defect is the number of (connected) \(e\)-rim hooks that can be removed from the partition. - The defect of a partition tuple is given by \[\text{defect}(\beta) = (\Lambda, \beta) - \tfrac12(\beta, \beta),\]- where \(\Lambda = \sum_r \Lambda_{\kappa_r}\) for the multicharge \((\kappa_1, \ldots, \kappa_{\ell})\) and \(\beta = \sum_{(r,c)} \alpha_{(c-r) \pmod e}\), with the sum being over the cells in the partition. - INPUT: - e– the quantum characteristic
- multicharge– the multicharge (default: \((0,)\))
 - OUTPUT: a nonnegative integer, which is the defect of the block containing the partition tuple - self- EXAMPLES: - sage: PartitionTuple([[2,2],[2,2]]).defect(0,(0,0)) 0 sage: PartitionTuple([[2,2],[2,2]]).defect(2,(0,0)) 8 sage: PartitionTuple([[2,2],[2,2]]).defect(2,(0,1)) 8 sage: PartitionTuple([[2,2],[2,2]]).defect(3,(0,2)) 5 sage: PartitionTuple([[2,2],[2,2]]).defect(3,(0,2)) 5 sage: PartitionTuple([[2,2],[2,2]]).defect(3,(3,2)) 2 sage: PartitionTuple([[2,2],[2,2]]).defect(4,(0,0)) 0 - >>> from sage.all import * >>> PartitionTuple([[Integer(2),Integer(2)],[Integer(2),Integer(2)]]).defect(Integer(0),(Integer(0),Integer(0))) 0 >>> PartitionTuple([[Integer(2),Integer(2)],[Integer(2),Integer(2)]]).defect(Integer(2),(Integer(0),Integer(0))) 8 >>> PartitionTuple([[Integer(2),Integer(2)],[Integer(2),Integer(2)]]).defect(Integer(2),(Integer(0),Integer(1))) 8 >>> PartitionTuple([[Integer(2),Integer(2)],[Integer(2),Integer(2)]]).defect(Integer(3),(Integer(0),Integer(2))) 5 >>> PartitionTuple([[Integer(2),Integer(2)],[Integer(2),Integer(2)]]).defect(Integer(3),(Integer(0),Integer(2))) 5 >>> PartitionTuple([[Integer(2),Integer(2)],[Integer(2),Integer(2)]]).defect(Integer(3),(Integer(3),Integer(2))) 2 >>> PartitionTuple([[Integer(2),Integer(2)],[Integer(2),Integer(2)]]).defect(Integer(4),(Integer(0),Integer(0))) 0 
 - degree(e)[source]¶
- Return the - e-th degree of- self.- The \(e\)-th degree is the sum of the degrees of the standard tableaux of shape \(\lambda\). The \(e\)-th degree is the exponent of \(\Phi_e(q)\) in the Gram determinant of the Specht module for a semisimple cyclotomic Hecke algebra of type \(A\) with parameter \(q\). - For this calculation the multicharge \((\kappa_1, \ldots, \kappa_l)\) is chosen so that \(\kappa_{r+1} - \kappa_r > n\), where \(n\) is the - size()of \(\lambda\) as this ensures that the Hecke algebra is semisimple.- INPUT: - e– integer \(e > 1\)
 - OUTPUT: nonnegative integer - EXAMPLES: - sage: PartitionTuple([[2,1],[2,2]]).degree(2) 532 sage: PartitionTuple([[2,1],[2,2]]).degree(3) 259 sage: PartitionTuple([[2,1],[2,2]]).degree(4) 196 sage: PartitionTuple([[2,1],[2,2]]).degree(5) 105 sage: PartitionTuple([[2,1],[2,2]]).degree(6) 105 sage: PartitionTuple([[2,1],[2,2]]).degree(7) 0 - >>> from sage.all import * >>> PartitionTuple([[Integer(2),Integer(1)],[Integer(2),Integer(2)]]).degree(Integer(2)) 532 >>> PartitionTuple([[Integer(2),Integer(1)],[Integer(2),Integer(2)]]).degree(Integer(3)) 259 >>> PartitionTuple([[Integer(2),Integer(1)],[Integer(2),Integer(2)]]).degree(Integer(4)) 196 >>> PartitionTuple([[Integer(2),Integer(1)],[Integer(2),Integer(2)]]).degree(Integer(5)) 105 >>> PartitionTuple([[Integer(2),Integer(1)],[Integer(2),Integer(2)]]).degree(Integer(6)) 105 >>> PartitionTuple([[Integer(2),Integer(1)],[Integer(2),Integer(2)]]).degree(Integer(7)) 0 - Therefore, the Gram determinant of \(S(2,1|2,2)\) when the Hecke parameter \(q\) is “generic” is \[q^N \Phi_2(q)^{532}\Phi_3(q)^{259}\Phi_4(q)^{196}\Phi_5(q)^{105}\Phi_6(q)^{105}\]- for some integer \(N\). Compare with - prime_degree().
 - diagram()[source]¶
- Return a string for the Ferrers diagram of - self.- EXAMPLES: - sage: print(PartitionTuple([[2,1],[3,2],[1,1,1]]).diagram()) ** *** * * ** * * sage: print(PartitionTuple([[3,2],[2,1],[],[1,1,1,1]]).diagram()) *** ** - * ** * * * * sage: PartitionTuples.options(convention='french') sage: print(PartitionTuple([[3,2],[2,1],[],[1,1,1,1]]).diagram()) * * ** * * *** ** - * sage: PartitionTuples.options._reset() - >>> from sage.all import * >>> print(PartitionTuple([[Integer(2),Integer(1)],[Integer(3),Integer(2)],[Integer(1),Integer(1),Integer(1)]]).diagram()) ** *** * * ** * * >>> print(PartitionTuple([[Integer(3),Integer(2)],[Integer(2),Integer(1)],[],[Integer(1),Integer(1),Integer(1),Integer(1)]]).diagram()) *** ** - * ** * * * * >>> PartitionTuples.options(convention='french') >>> print(PartitionTuple([[Integer(3),Integer(2)],[Integer(2),Integer(1)],[],[Integer(1),Integer(1),Integer(1),Integer(1)]]).diagram()) * * ** * * *** ** - * >>> PartitionTuples.options._reset() 
 - dominates(mu)[source]¶
- Return - Trueif the PartitionTuple dominates or equals \(\mu\) and- Falseotherwise.- Given partition tuples \(\mu=(\mu^{(1)},...,\mu^{(m)})\) and \(\nu=(\nu^{(1)},...,\nu^{(n)})\) then \(\mu\) dominates \(\nu\) if \[\sum_{k=1}^{l-1} |\mu^{(k)}| +\sum_{r \geq 1} \mu^{(l)}_r \geq \sum_{k=1}^{l-1} |\nu^{(k)}| + \sum_{r \geq 1} \nu^{(l)}_r\]- EXAMPLES: - sage: mu=PartitionTuple([[1,1],[2],[2,1]]) sage: nu=PartitionTuple([[1,1],[1,1],[2,1]]) sage: mu.dominates(mu) True sage: mu.dominates(nu) True sage: nu.dominates(mu) False sage: tau=PartitionTuple([[],[2,1],[]]) sage: tau.dominates([[2,1],[],[]]) False sage: tau.dominates([[],[],[2,1]]) True - >>> from sage.all import * >>> mu=PartitionTuple([[Integer(1),Integer(1)],[Integer(2)],[Integer(2),Integer(1)]]) >>> nu=PartitionTuple([[Integer(1),Integer(1)],[Integer(1),Integer(1)],[Integer(2),Integer(1)]]) >>> mu.dominates(mu) True >>> mu.dominates(nu) True >>> nu.dominates(mu) False >>> tau=PartitionTuple([[],[Integer(2),Integer(1)],[]]) >>> tau.dominates([[Integer(2),Integer(1)],[],[]]) False >>> tau.dominates([[],[],[Integer(2),Integer(1)]]) True 
 - down()[source]¶
- Generator (iterator) for the partition tuples that are obtained from - selfby removing a cell.- EXAMPLES: - sage: [mu for mu in PartitionTuple([[],[3,1],[1,1]]).down()] [([], [2, 1], [1, 1]), ([], [3], [1, 1]), ([], [3, 1], [1])] sage: [mu for mu in PartitionTuple([[],[],[]]).down()] [] - >>> from sage.all import * >>> [mu for mu in PartitionTuple([[],[Integer(3),Integer(1)],[Integer(1),Integer(1)]]).down()] [([], [2, 1], [1, 1]), ([], [3], [1, 1]), ([], [3, 1], [1])] >>> [mu for mu in PartitionTuple([[],[],[]]).down()] [] 
 - down_list()[source]¶
- Return a list of the partition tuples that can be formed from - selfby removing a cell.- EXAMPLES: - sage: PartitionTuple([[],[3,1],[1,1]]).down_list() [([], [2, 1], [1, 1]), ([], [3], [1, 1]), ([], [3, 1], [1])] sage: PartitionTuple([[],[],[]]).down_list() [] - >>> from sage.all import * >>> PartitionTuple([[],[Integer(3),Integer(1)],[Integer(1),Integer(1)]]).down_list() [([], [2, 1], [1, 1]), ([], [3], [1, 1]), ([], [3, 1], [1])] >>> PartitionTuple([[],[],[]]).down_list() [] 
 - ferrers_diagram()[source]¶
- Return a string for the Ferrers diagram of - self.- EXAMPLES: - sage: print(PartitionTuple([[2,1],[3,2],[1,1,1]]).diagram()) ** *** * * ** * * sage: print(PartitionTuple([[3,2],[2,1],[],[1,1,1,1]]).diagram()) *** ** - * ** * * * * sage: PartitionTuples.options(convention='french') sage: print(PartitionTuple([[3,2],[2,1],[],[1,1,1,1]]).diagram()) * * ** * * *** ** - * sage: PartitionTuples.options._reset() - >>> from sage.all import * >>> print(PartitionTuple([[Integer(2),Integer(1)],[Integer(3),Integer(2)],[Integer(1),Integer(1),Integer(1)]]).diagram()) ** *** * * ** * * >>> print(PartitionTuple([[Integer(3),Integer(2)],[Integer(2),Integer(1)],[],[Integer(1),Integer(1),Integer(1),Integer(1)]]).diagram()) *** ** - * ** * * * * >>> PartitionTuples.options(convention='french') >>> print(PartitionTuple([[Integer(3),Integer(2)],[Integer(2),Integer(1)],[],[Integer(1),Integer(1),Integer(1),Integer(1)]]).diagram()) * * ** * * *** ** - * >>> PartitionTuples.options._reset() 
 - garnir_tableau(*cell)[source]¶
- Return the Garnir tableau of shape - selfcorresponding to the cell- cell.- If - cell\(= (k,a,c)\) then \((k,a+1,c)\) must belong to the diagram of the- PartitionTuple. If this is not the case then we return- False.- Note - The function also sets - g._garnir_cellequal to- cellwhich is used by some other functions.- The Garnir tableaux play an important role in integral and non-semisimple representation theory because they determine the “straightening” rules for the Specht modules over an arbitrary ring. - The Garnir tableau are the “first” non-standard tableaux which arise when you act by simple transpositions. If \((k,a,c)\) is a cell in the Young diagram of a partition, which is not at the bottom of its column, then the corresponding Garnir tableau has the integers \(1, 2, \ldots, n\) entered in order from left to right along the rows of the diagram up to the cell \((k,a,c-1)\), then along the cells \((k,a+1,1)\) to \((k,a+1,c)\), then \((k,a,c)\) until the end of row \(a\) and then continuing from left to right in the remaining positions. The examples below probably make this clearer! - EXAMPLES: - sage: PartitionTuple([[5,3],[2,2],[4,3]]).garnir_tableau((0,0,2)).pp() 1 2 6 7 8 9 10 13 14 15 16 3 4 5 11 12 17 18 19 sage: PartitionTuple([[5,3,3],[2,2],[4,3]]).garnir_tableau((0,0,2)).pp() 1 2 6 7 8 12 13 16 17 18 19 3 4 5 14 15 20 21 22 9 10 11 sage: PartitionTuple([[5,3,3],[2,2],[4,3]]).garnir_tableau((0,1,2)).pp() 1 2 3 4 5 12 13 16 17 18 19 6 7 11 14 15 20 21 22 8 9 10 sage: PartitionTuple([[5,3,3],[2,2],[4,3]]).garnir_tableau((1,0,0)).pp() 1 2 3 4 5 13 14 16 17 18 19 6 7 8 12 15 20 21 22 9 10 11 sage: PartitionTuple([[5,3,3],[2,2],[4,3]]).garnir_tableau((1,0,1)).pp() 1 2 3 4 5 12 15 16 17 18 19 6 7 8 13 14 20 21 22 9 10 11 sage: PartitionTuple([[5,3,3],[2,2],[4,3]]).garnir_tableau((2,0,1)).pp() 1 2 3 4 5 12 13 16 19 20 21 6 7 8 14 15 17 18 22 9 10 11 sage: PartitionTuple([[5,3,3],[2,2],[4,3]]).garnir_tableau((2,1,1)).pp() Traceback (most recent call last): ... ValueError: (comp, row+1, col) must be inside the diagram - >>> from sage.all import * >>> PartitionTuple([[Integer(5),Integer(3)],[Integer(2),Integer(2)],[Integer(4),Integer(3)]]).garnir_tableau((Integer(0),Integer(0),Integer(2))).pp() 1 2 6 7 8 9 10 13 14 15 16 3 4 5 11 12 17 18 19 >>> PartitionTuple([[Integer(5),Integer(3),Integer(3)],[Integer(2),Integer(2)],[Integer(4),Integer(3)]]).garnir_tableau((Integer(0),Integer(0),Integer(2))).pp() 1 2 6 7 8 12 13 16 17 18 19 3 4 5 14 15 20 21 22 9 10 11 >>> PartitionTuple([[Integer(5),Integer(3),Integer(3)],[Integer(2),Integer(2)],[Integer(4),Integer(3)]]).garnir_tableau((Integer(0),Integer(1),Integer(2))).pp() 1 2 3 4 5 12 13 16 17 18 19 6 7 11 14 15 20 21 22 8 9 10 >>> PartitionTuple([[Integer(5),Integer(3),Integer(3)],[Integer(2),Integer(2)],[Integer(4),Integer(3)]]).garnir_tableau((Integer(1),Integer(0),Integer(0))).pp() 1 2 3 4 5 13 14 16 17 18 19 6 7 8 12 15 20 21 22 9 10 11 >>> PartitionTuple([[Integer(5),Integer(3),Integer(3)],[Integer(2),Integer(2)],[Integer(4),Integer(3)]]).garnir_tableau((Integer(1),Integer(0),Integer(1))).pp() 1 2 3 4 5 12 15 16 17 18 19 6 7 8 13 14 20 21 22 9 10 11 >>> PartitionTuple([[Integer(5),Integer(3),Integer(3)],[Integer(2),Integer(2)],[Integer(4),Integer(3)]]).garnir_tableau((Integer(2),Integer(0),Integer(1))).pp() 1 2 3 4 5 12 13 16 19 20 21 6 7 8 14 15 17 18 22 9 10 11 >>> PartitionTuple([[Integer(5),Integer(3),Integer(3)],[Integer(2),Integer(2)],[Integer(4),Integer(3)]]).garnir_tableau((Integer(2),Integer(1),Integer(1))).pp() Traceback (most recent call last): ... ValueError: (comp, row+1, col) must be inside the diagram - See also 
 - hook_length(k, r, c)[source]¶
- Return the length of the hook of cell - (k, r, c)in the partition.- The hook of cell - (k, r, c)is defined as the cells to the right or below (in the English convention). If your coordinates are in the form- (k,r,c), use Python’s *-operator.- EXAMPLES: - sage: mu=PartitionTuple([[1,1],[2],[2,1]]) sage: [ mu.hook_length(*c) for c in mu.cells()] [2, 1, 2, 1, 3, 1, 1] - >>> from sage.all import * >>> mu=PartitionTuple([[Integer(1),Integer(1)],[Integer(2)],[Integer(2),Integer(1)]]) >>> [ mu.hook_length(*c) for c in mu.cells()] [2, 1, 2, 1, 3, 1, 1] 
 - initial_column_tableau()[source]¶
- Return the initial column tableau of shape - self.- The initial column tableau of shape \(\lambda\) is the standard tableau that has the numbers \(1\) to \(n\), where \(n\) is the - size()of \(\lambda\), entered in order from top to bottom, and then left to right, down the columns of each component, starting from the rightmost component and working to the left.- EXAMPLES: - sage: PartitionTuple([ [3,1],[3,2] ]).initial_column_tableau() ([[6, 8, 9], [7]], [[1, 3, 5], [2, 4]]) - >>> from sage.all import * >>> PartitionTuple([ [Integer(3),Integer(1)],[Integer(3),Integer(2)] ]).initial_column_tableau() ([[6, 8, 9], [7]], [[1, 3, 5], [2, 4]]) 
 - initial_tableau()[source]¶
- Return the - StandardTableauTuplewhich has the numbers \(1, 2, \ldots, n\), where \(n\) is the- size()of- self, entered in order from left to right along the rows of each component, where the components are ordered from left to right.- EXAMPLES: - sage: PartitionTuple([ [2,1],[3,2] ]).initial_tableau() ([[1, 2], [3]], [[4, 5, 6], [7, 8]]) - >>> from sage.all import * >>> PartitionTuple([ [Integer(2),Integer(1)],[Integer(3),Integer(2)] ]).initial_tableau() ([[1, 2], [3]], [[4, 5, 6], [7, 8]]) 
 - leg_length(k, r, c)[source]¶
- Return the length of the leg of cell - (k, r, c)in- self.- INPUT: - k– the component
- r– the row
- c– the cell
 - OUTPUT: the leg length as an integer - The leg of cell - (k, r, c)is the number of cells in the- k-th component which are below the node in row- rand column- c.- EXAMPLES: - sage: PartitionTuple([[],[2,1],[2,2,1],[3]]).leg_length(2,0,0) 2 sage: PartitionTuple([[],[2,1],[2,2,1],[3]]).leg_length(2,0,1) 1 sage: PartitionTuple([[],[2,1],[2,2,1],[3]]).leg_length(2,2,0) 0 - >>> from sage.all import * >>> PartitionTuple([[],[Integer(2),Integer(1)],[Integer(2),Integer(2),Integer(1)],[Integer(3)]]).leg_length(Integer(2),Integer(0),Integer(0)) 2 >>> PartitionTuple([[],[Integer(2),Integer(1)],[Integer(2),Integer(2),Integer(1)],[Integer(3)]]).leg_length(Integer(2),Integer(0),Integer(1)) 1 >>> PartitionTuple([[],[Integer(2),Integer(1)],[Integer(2),Integer(2),Integer(1)],[Integer(3)]]).leg_length(Integer(2),Integer(2),Integer(0)) 0 
 - level()[source]¶
- Return the level of this partition tuple. - The level is the length of the tuple. - EXAMPLES: - sage: PartitionTuple([[2,1,1,0],[2,1]]).level() 2 sage: PartitionTuple([[],[],[2,1,1]]).level() 3 - >>> from sage.all import * >>> PartitionTuple([[Integer(2),Integer(1),Integer(1),Integer(0)],[Integer(2),Integer(1)]]).level() 2 >>> PartitionTuple([[],[],[Integer(2),Integer(1),Integer(1)]]).level() 3 
 - outside_corners()[source]¶
- Return a list of the removable cells of this partition tuple. - All indices are of the form - (k, r, c), where- ris the row-index,- cis the column index and- kis the component.- EXAMPLES: - sage: PartitionTuple([[1,1],[2],[2,1]]).addable_cells() [(0, 0, 1), (0, 2, 0), (1, 0, 2), (1, 1, 0), (2, 0, 2), (2, 1, 1), (2, 2, 0)] sage: PartitionTuple([[1,1],[4,3],[2,1,1]]).addable_cells() [(0, 0, 1), (0, 2, 0), (1, 0, 4), (1, 1, 3), (1, 2, 0), (2, 0, 2), (2, 1, 1), (2, 3, 0)] - >>> from sage.all import * >>> PartitionTuple([[Integer(1),Integer(1)],[Integer(2)],[Integer(2),Integer(1)]]).addable_cells() [(0, 0, 1), (0, 2, 0), (1, 0, 2), (1, 1, 0), (2, 0, 2), (2, 1, 1), (2, 2, 0)] >>> PartitionTuple([[Integer(1),Integer(1)],[Integer(4),Integer(3)],[Integer(2),Integer(1),Integer(1)]]).addable_cells() [(0, 0, 1), (0, 2, 0), (1, 0, 4), (1, 1, 3), (1, 2, 0), (2, 0, 2), (2, 1, 1), (2, 3, 0)] 
 - pp()[source]¶
- Pretty print this partition tuple. See - diagram().- EXAMPLES: - sage: PartitionTuple([[5,5,2,1],[3,2]]).pp() ***** *** ***** ** ** * - >>> from sage.all import * >>> PartitionTuple([[Integer(5),Integer(5),Integer(2),Integer(1)],[Integer(3),Integer(2)]]).pp() ***** *** ***** ** ** * 
 - prime_degree(p)[source]¶
- Return the - p-th prime degree of- self.- The degree of a partition \(\lambda\) is the sum of the \(e\)-degrees` of the standard tableaux of shape \(\lambda\) (see - degree()), for \(e\) a power of the prime \(p\). The prime degree gives the exponent of \(p\) in the Gram determinant of the integral Specht module of the symmetric group.- The \(p\)-th degree is the sum of the degrees of the standard tableaux of shape \(\lambda\). The \(p\)-th degree is the exponent of \(p\) in the Gram determinant of a semisimple cyclotomic Hecke algebra of type \(A\) with parameter \(q = 1\). - As with - degree(), for this calculation the multicharge \((\kappa_1, \ldots, \kappa_l)\) is chosen so that \(\kappa_{r+1} - \kappa_r > n\), where \(n\) is the- size()of \(\lambda\) as this ensures that the Hecke algebra is semisimple.- INPUT: - e– an integer \(e > 1\)
- multicharge– an \(l\)-tuple of integers, where \(l\) is the- level()of- self
 - OUTPUT: nonnegative integer - EXAMPLES: - sage: PartitionTuple([[2,1],[2,2]]).prime_degree(2) 728 sage: PartitionTuple([[2,1],[2,2]]).prime_degree(3) 259 sage: PartitionTuple([[2,1],[2,2]]).prime_degree(5) 105 sage: PartitionTuple([[2,1],[2,2]]).prime_degree(7) 0 - >>> from sage.all import * >>> PartitionTuple([[Integer(2),Integer(1)],[Integer(2),Integer(2)]]).prime_degree(Integer(2)) 728 >>> PartitionTuple([[Integer(2),Integer(1)],[Integer(2),Integer(2)]]).prime_degree(Integer(3)) 259 >>> PartitionTuple([[Integer(2),Integer(1)],[Integer(2),Integer(2)]]).prime_degree(Integer(5)) 105 >>> PartitionTuple([[Integer(2),Integer(1)],[Integer(2),Integer(2)]]).prime_degree(Integer(7)) 0 - Therefore, the Gram determinant of \(S(2,1|2,2)\) when \(q=1\) is \(2^{728} 3^{259}5^{105}\). Compare with - degree().
 - removable_cells()[source]¶
- Return a list of the removable cells of this partition tuple. - All indices are of the form - (k, r, c), where- ris the row-index,- cis the column index and- kis the component.- EXAMPLES: - sage: PartitionTuple([[1,1],[2],[2,1]]).removable_cells() [(0, 1, 0), (1, 0, 1), (2, 0, 1), (2, 1, 0)] sage: PartitionTuple([[1,1],[4,3],[2,1,1]]).removable_cells() [(0, 1, 0), (1, 0, 3), (1, 1, 2), (2, 0, 1), (2, 2, 0)] - >>> from sage.all import * >>> PartitionTuple([[Integer(1),Integer(1)],[Integer(2)],[Integer(2),Integer(1)]]).removable_cells() [(0, 1, 0), (1, 0, 1), (2, 0, 1), (2, 1, 0)] >>> PartitionTuple([[Integer(1),Integer(1)],[Integer(4),Integer(3)],[Integer(2),Integer(1),Integer(1)]]).removable_cells() [(0, 1, 0), (1, 0, 3), (1, 1, 2), (2, 0, 1), (2, 2, 0)] 
 - remove_cell(k, r, c)[source]¶
- Return the partition tuple obtained by removing a cell in row - r, column- c, and component- k.- This does not change - self.- EXAMPLES: - sage: PartitionTuple([[1,1],[4,3],[2,1,1]]).remove_cell(0,1,0) ([1], [4, 3], [2, 1, 1]) - >>> from sage.all import * >>> PartitionTuple([[Integer(1),Integer(1)],[Integer(4),Integer(3)],[Integer(2),Integer(1),Integer(1)]]).remove_cell(Integer(0),Integer(1),Integer(0)) ([1], [4, 3], [2, 1, 1]) 
 - row_standard_tableaux()[source]¶
- Return the - row standard tableau tuplesof shape- self.- EXAMPLES: - sage: PartitionTuple([[],[3,2,2,1],[2,2,1],[3]]).row_standard_tableaux() Row standard tableau tuples of shape ([], [3, 2, 2, 1], [2, 2, 1], [3]) - >>> from sage.all import * >>> PartitionTuple([[],[Integer(3),Integer(2),Integer(2),Integer(1)],[Integer(2),Integer(2),Integer(1)],[Integer(3)]]).row_standard_tableaux() Row standard tableau tuples of shape ([], [3, 2, 2, 1], [2, 2, 1], [3]) 
 - size()[source]¶
- Return the size of a partition tuple. - EXAMPLES: - sage: PartitionTuple([[2,1],[],[2,2]]).size() 7 sage: PartitionTuple([[],[],[1],[3,2,1]]).size() 7 - >>> from sage.all import * >>> PartitionTuple([[Integer(2),Integer(1)],[],[Integer(2),Integer(2)]]).size() 7 >>> PartitionTuple([[],[],[Integer(1)],[Integer(3),Integer(2),Integer(1)]]).size() 7 
 - standard_tableaux()[source]¶
- Return the - standard tableau tuplesof shape- self.- EXAMPLES: - sage: PartitionTuple([[],[3,2,2,1],[2,2,1],[3]]).standard_tableaux() Standard tableau tuples of shape ([], [3, 2, 2, 1], [2, 2, 1], [3]) - >>> from sage.all import * >>> PartitionTuple([[],[Integer(3),Integer(2),Integer(2),Integer(1)],[Integer(2),Integer(2),Integer(1)],[Integer(3)]]).standard_tableaux() Standard tableau tuples of shape ([], [3, 2, 2, 1], [2, 2, 1], [3]) 
 - to_exp(k=0)[source]¶
- Return a tuple of the multiplicities of the parts of a partition. - Use the optional parameter - kto get a return list of length at least- k.- EXAMPLES: - sage: PartitionTuple([[1,1],[2],[2,1]]).to_exp() ([2], [0, 1], [1, 1]) sage: PartitionTuple([[1,1],[2,2,2,2],[2,1]]).to_exp() ([2], [0, 4], [1, 1]) - >>> from sage.all import * >>> PartitionTuple([[Integer(1),Integer(1)],[Integer(2)],[Integer(2),Integer(1)]]).to_exp() ([2], [0, 1], [1, 1]) >>> PartitionTuple([[Integer(1),Integer(1)],[Integer(2),Integer(2),Integer(2),Integer(2)],[Integer(2),Integer(1)]]).to_exp() ([2], [0, 4], [1, 1]) 
 - to_list()[source]¶
- Return - selfas a list of lists.- EXAMPLES: - sage: PartitionTuple([[1,1],[4,3],[2,1,1]]).to_list() [[1, 1], [4, 3], [2, 1, 1]] - >>> from sage.all import * >>> PartitionTuple([[Integer(1),Integer(1)],[Integer(4),Integer(3)],[Integer(2),Integer(1),Integer(1)]]).to_list() [[1, 1], [4, 3], [2, 1, 1]] 
 - top_garnir_tableau(e, cell)[source]¶
- Return the most dominant standard tableau which dominates the corresponding Garnir tableau and has the same residue that has shape - selfand is determined by- eand- cell.- The Garnir tableau play an important role in integral and non-semisimple representation theory because they determine the “straightening” rules for the Specht modules over an arbitrary ring. The top Garnir tableaux arise in the graded representation theory of the symmetric groups and higher level Hecke algebras. They were introduced in [KMR2012]. - If the Garnir node is - cell=(k,r,c)and \(m\) and \(M\) are the entries in the cells- (k,r,c)and- (k,r+1,c), respectively, in the initial tableau then the top- e-Garnir tableau is obtained by inserting the numbers \(m, m+1, \ldots, M\) in order from left to right first in the cells in row- r+1which are not in the- e-Garnir belt, then in the cell in rows- rand- r+1which are in the Garnir belt and then, finally, in the remaining cells in row- rwhich are not in the Garnir belt. All other entries in the tableau remain unchanged.- If - e = 0, or if there are no- e-bricks in either row- ror- r+1, then the top Garnir tableau is the corresponding Garnir tableau.- EXAMPLES: - sage: PartitionTuple([[3,3,2],[5,4,3,2]]).top_garnir_tableau(2,(1,0,2)).pp() 1 2 3 9 10 12 13 16 4 5 6 11 14 15 17 7 8 18 19 20 21 22 sage: PartitionTuple([[3,3,2],[5,4,3,2]]).top_garnir_tableau(2,(1,0,1)).pp() 1 2 3 9 10 11 12 13 4 5 6 14 15 16 17 7 8 18 19 20 21 22 sage: PartitionTuple([[3,3,2],[5,4,3,2]]).top_garnir_tableau(3,(1,0,1)).pp() 1 2 3 9 12 13 14 15 4 5 6 10 11 16 17 7 8 18 19 20 21 22 sage: PartitionTuple([[3,3,2],[5,4,3,2]]).top_garnir_tableau(3,(3,0,1)).pp() Traceback (most recent call last): ... ValueError: (comp, row+1, col) must be inside the diagram - >>> from sage.all import * >>> PartitionTuple([[Integer(3),Integer(3),Integer(2)],[Integer(5),Integer(4),Integer(3),Integer(2)]]).top_garnir_tableau(Integer(2),(Integer(1),Integer(0),Integer(2))).pp() 1 2 3 9 10 12 13 16 4 5 6 11 14 15 17 7 8 18 19 20 21 22 >>> PartitionTuple([[Integer(3),Integer(3),Integer(2)],[Integer(5),Integer(4),Integer(3),Integer(2)]]).top_garnir_tableau(Integer(2),(Integer(1),Integer(0),Integer(1))).pp() 1 2 3 9 10 11 12 13 4 5 6 14 15 16 17 7 8 18 19 20 21 22 >>> PartitionTuple([[Integer(3),Integer(3),Integer(2)],[Integer(5),Integer(4),Integer(3),Integer(2)]]).top_garnir_tableau(Integer(3),(Integer(1),Integer(0),Integer(1))).pp() 1 2 3 9 12 13 14 15 4 5 6 10 11 16 17 7 8 18 19 20 21 22 >>> PartitionTuple([[Integer(3),Integer(3),Integer(2)],[Integer(5),Integer(4),Integer(3),Integer(2)]]).top_garnir_tableau(Integer(3),(Integer(3),Integer(0),Integer(1))).pp() Traceback (most recent call last): ... ValueError: (comp, row+1, col) must be inside the diagram - See also - garnir_tableau()
 
 - up()[source]¶
- Generator (iterator) for the partition tuples that are obtained from - selfby adding a cell.- EXAMPLES: - sage: [mu for mu in PartitionTuple([[],[3,1],[1,1]]).up()] [([1], [3, 1], [1, 1]), ([], [4, 1], [1, 1]), ([], [3, 2], [1, 1]), ([], [3, 1, 1], [1, 1]), ([], [3, 1], [2, 1]), ([], [3, 1], [1, 1, 1])] sage: [mu for mu in PartitionTuple([[],[],[],[]]).up()] [([1], [], [], []), ([], [1], [], []), ([], [], [1], []), ([], [], [], [1])] - >>> from sage.all import * >>> [mu for mu in PartitionTuple([[],[Integer(3),Integer(1)],[Integer(1),Integer(1)]]).up()] [([1], [3, 1], [1, 1]), ([], [4, 1], [1, 1]), ([], [3, 2], [1, 1]), ([], [3, 1, 1], [1, 1]), ([], [3, 1], [2, 1]), ([], [3, 1], [1, 1, 1])] >>> [mu for mu in PartitionTuple([[],[],[],[]]).up()] [([1], [], [], []), ([], [1], [], []), ([], [], [1], []), ([], [], [], [1])] 
 - up_list()[source]¶
- Return a list of the partition tuples that can be formed from - selfby adding a cell.- EXAMPLES: - sage: PartitionTuple([[],[3,1],[1,1]]).up_list() [([1], [3, 1], [1, 1]), ([], [4, 1], [1, 1]), ([], [3, 2], [1, 1]), ([], [3, 1, 1], [1, 1]), ([], [3, 1], [2, 1]), ([], [3, 1], [1, 1, 1])] sage: PartitionTuple([[],[],[],[]]).up_list() [([1], [], [], []), ([], [1], [], []), ([], [], [1], []), ([], [], [], [1])] - >>> from sage.all import * >>> PartitionTuple([[],[Integer(3),Integer(1)],[Integer(1),Integer(1)]]).up_list() [([1], [3, 1], [1, 1]), ([], [4, 1], [1, 1]), ([], [3, 2], [1, 1]), ([], [3, 1, 1], [1, 1]), ([], [3, 1], [2, 1]), ([], [3, 1], [1, 1, 1])] >>> PartitionTuple([[],[],[],[]]).up_list() [([1], [], [], []), ([], [1], [], []), ([], [], [1], []), ([], [], [], [1])] 
 - young_subgroup()[source]¶
- Return the corresponding Young, or parabolic, subgroup of the symmetric group. - EXAMPLES: - sage: PartitionTuple([[2,1],[4,2],[1]]).young_subgroup() # needs sage.groups Permutation Group with generators [(), (8,9), (6,7), (5,6), (4,5), (1,2)] - >>> from sage.all import * >>> PartitionTuple([[Integer(2),Integer(1)],[Integer(4),Integer(2)],[Integer(1)]]).young_subgroup() # needs sage.groups Permutation Group with generators [(), (8,9), (6,7), (5,6), (4,5), (1,2)] 
 - young_subgroup_generators()[source]¶
- Return an indexing set for the generators of the corresponding Young subgroup. - EXAMPLES: - sage: PartitionTuple([[2,1],[4,2],[1]]).young_subgroup_generators() [1, 4, 5, 6, 8] - >>> from sage.all import * >>> PartitionTuple([[Integer(2),Integer(1)],[Integer(4),Integer(2)],[Integer(1)]]).young_subgroup_generators() [1, 4, 5, 6, 8] 
 
- class sage.combinat.partition_tuple.PartitionTuples[source]¶
- Bases: - UniqueRepresentation,- Parent- Class of all partition tuples. - For more information about partition tuples, see - PartitionTuple.- This is a factory class which returns the appropriate parent based on the values of - level,- size, and- regular- INPUT: - level– the length of the tuple
- size– the total number of cells
- regular– positive integer or a tuple of nonnegative integers; if an integer, the highest multiplicity an entry may have in a component plus \(1\)
 - If a level \(k\) is specified and - regularis a tuple of integers \(\ell_1, \ldots, \ell_k\), then this specifies partition tuples \(\mu\) such that \(\mu_i\) is \(\ell_i\)-regular, where \(0\) here represents \(\infty\)-regular partitions (equivalently, partitions without restrictions). If- regularis an integer \(\ell\), then we set \(\ell_i = \ell\) for all \(i\).- Element[source]¶
- alias of - PartitionTuple
 - level()[source]¶
- Return the level or - Noneif it is not defined.- EXAMPLES: - sage: PartitionTuples().level() is None True sage: PartitionTuples(7).level() 7 - >>> from sage.all import * >>> PartitionTuples().level() is None True >>> PartitionTuples(Integer(7)).level() 7 
 
- class sage.combinat.partition_tuple.PartitionTuples_all[source]¶
- Bases: - PartitionTuples- Class of partition tuples of a arbitrary level and arbitrary sum. 
- class sage.combinat.partition_tuple.PartitionTuples_level(level, category=None)[source]¶
- Bases: - PartitionTuples- Class of partition tuples of a fixed level, but summing to an arbitrary integer. 
- class sage.combinat.partition_tuple.PartitionTuples_level_size(level, size)[source]¶
- Bases: - PartitionTuples- Class of partition tuples with a fixed level and a fixed size. - cardinality()[source]¶
- Return the number of - level-tuples of partitions of size- n.- Wraps a pari function call using pari:eta. - EXAMPLES: - sage: PartitionTuples(2,3).cardinality() # needs sage.libs.pari 10 sage: PartitionTuples(2,8).cardinality() # needs sage.libs.pari 185 - >>> from sage.all import * >>> PartitionTuples(Integer(2),Integer(3)).cardinality() # needs sage.libs.pari 10 >>> PartitionTuples(Integer(2),Integer(8)).cardinality() # needs sage.libs.pari 185 
 
- class sage.combinat.partition_tuple.PartitionTuples_size(size)[source]¶
- Bases: - PartitionTuples- Class of partition tuples of a fixed size, but arbitrary level. 
- class sage.combinat.partition_tuple.RegularPartitionTuples(regular, **kwds)[source]¶
- Bases: - PartitionTuples- Abstract base class for \(\ell\)-regular partition tuples. 
- class sage.combinat.partition_tuple.RegularPartitionTuples_all(regular)[source]¶
- Bases: - RegularPartitionTuples- Class of \(\ell\)-regular partition tuples. 
- class sage.combinat.partition_tuple.RegularPartitionTuples_level(level, regular)[source]¶
- Bases: - PartitionTuples_level- Regular Partition tuples of a fixed level. - INPUT: - level– nonnegative integer; the level
- regular– positive integer or a tuple of nonnegative integers; if an integer, the highest multiplicity an entry may have in a component plus \(1\) with \(0\) representing \(\infty\)-regular (equivalently, partitions without restrictions)
 - regularis a tuple of integers \((\ell_1, \ldots, \ell_k)\) that specifies partition tuples \(\mu\) such that \(\mu_i\) is \(\ell_i\)-regular. If- regularis an integer \(\ell\), then we set \(\ell_i = \ell\) for all \(i\).- EXAMPLES: - sage: RPT = PartitionTuples(level=4, regular=(2,3,0,2)) sage: RPT[:24] # needs sage.libs.flint [([], [], [], []), ([1], [], [], []), ([], [1], [], []), ([], [], [1], []), ([], [], [], [1]), ([2], [], [], []), ([1], [1], [], []), ([1], [], [1], []), ([1], [], [], [1]), ([], [2], [], []), ([], [1, 1], [], []), ([], [1], [1], []), ([], [1], [], [1]), ([], [], [2], []), ([], [], [1, 1], []), ([], [], [1], [1]), ([], [], [], [2]), ([3], [], [], []), ([2, 1], [], [], []), ([2], [1], [], []), ([2], [], [1], []), ([2], [], [], [1]), ([1], [2], [], []), ([1], [1, 1], [], [])] sage: [[1,1],[3],[5,5,5],[7,2]] in RPT False sage: [[3,1],[3],[5,5,5],[7,2]] in RPT True sage: [[3,1],[3],[5,5,5]] in RPT False - >>> from sage.all import * >>> RPT = PartitionTuples(level=Integer(4), regular=(Integer(2),Integer(3),Integer(0),Integer(2))) >>> RPT[:Integer(24)] # needs sage.libs.flint [([], [], [], []), ([1], [], [], []), ([], [1], [], []), ([], [], [1], []), ([], [], [], [1]), ([2], [], [], []), ([1], [1], [], []), ([1], [], [1], []), ([1], [], [], [1]), ([], [2], [], []), ([], [1, 1], [], []), ([], [1], [1], []), ([], [1], [], [1]), ([], [], [2], []), ([], [], [1, 1], []), ([], [], [1], [1]), ([], [], [], [2]), ([3], [], [], []), ([2, 1], [], [], []), ([2], [1], [], []), ([2], [], [1], []), ([2], [], [], [1]), ([1], [2], [], []), ([1], [1, 1], [], [])] >>> [[Integer(1),Integer(1)],[Integer(3)],[Integer(5),Integer(5),Integer(5)],[Integer(7),Integer(2)]] in RPT False >>> [[Integer(3),Integer(1)],[Integer(3)],[Integer(5),Integer(5),Integer(5)],[Integer(7),Integer(2)]] in RPT True >>> [[Integer(3),Integer(1)],[Integer(3)],[Integer(5),Integer(5),Integer(5)]] in RPT False 
- class sage.combinat.partition_tuple.RegularPartitionTuples_level_size(level, size, regular)[source]¶
- Bases: - PartitionTuples_level_size- Class of \(\ell\)-regular partition tuples with a fixed level and a fixed size. - INPUT: - level– nonnegative integer; the level
- size– nonnegative integer; the size
- regular– positive integer or a tuple of nonnegative integers; if an integer, the highest multiplicity an entry may have in a component plus \(1\) with \(0\) representing \(\infty\)-regular (equivalently, partitions without restrictions)
 - regularis a tuple of integers \((\ell_1, \ldots, \ell_k)\) that specifies partition tuples \(\mu\) such that \(\mu_i\) is \(\ell_i\)-regular. If- regularis an integer \(\ell\), then we set \(\ell_i = \ell\) for all \(i\).- EXAMPLES: - sage: PartitionTuples(level=3, size=7, regular=(2,1,3))[0:24] # needs sage.libs.flint [([7], [], []), ([6, 1], [], []), ([5, 2], [], []), ([4, 3], [], []), ([4, 2, 1], [], []), ([6], [], [1]), ([5, 1], [], [1]), ([4, 2], [], [1]), ([3, 2, 1], [], [1]), ([5], [], [2]), ([5], [], [1, 1]), ([4, 1], [], [2]), ([4, 1], [], [1, 1]), ([3, 2], [], [2]), ([3, 2], [], [1, 1]), ([4], [], [3]), ([4], [], [2, 1]), ([3, 1], [], [3]), ([3, 1], [], [2, 1]), ([3], [], [4]), ([3], [], [3, 1]), ([3], [], [2, 2]), ([3], [], [2, 1, 1]), ([2, 1], [], [4])] - >>> from sage.all import * >>> PartitionTuples(level=Integer(3), size=Integer(7), regular=(Integer(2),Integer(1),Integer(3)))[Integer(0):Integer(24)] # needs sage.libs.flint [([7], [], []), ([6, 1], [], []), ([5, 2], [], []), ([4, 3], [], []), ([4, 2, 1], [], []), ([6], [], [1]), ([5, 1], [], [1]), ([4, 2], [], [1]), ([3, 2, 1], [], [1]), ([5], [], [2]), ([5], [], [1, 1]), ([4, 1], [], [2]), ([4, 1], [], [1, 1]), ([3, 2], [], [2]), ([3, 2], [], [1, 1]), ([4], [], [3]), ([4], [], [2, 1]), ([3, 1], [], [3]), ([3, 1], [], [2, 1]), ([3], [], [4]), ([3], [], [3, 1]), ([3], [], [2, 2]), ([3], [], [2, 1, 1]), ([2, 1], [], [4])] 
- class sage.combinat.partition_tuple.RegularPartitionTuples_size(size, regular)[source]¶
- Bases: - RegularPartitionTuples- Class of \(\ell\)-regular partition tuples with a fixed size.