skew partition

Sage has a builtin SkewPartition object (a.k.a. skew-shape). This module adds extra useful functions for skew partitions:

AUTHORS:

  • Matthew Lancellotti (2018): Initial version

REFERENCES:

[mem](1, 2, 3, 4, 5, 6) Lam, T., Lapointe, L., Morse, J., & Shimozono, M. (2013). The poset of k-shapes and branching rules for k-Schur functions. Memoirs of the American Mathematical Society, 223(1050), 1-113. DOI: 10.1090/S0065-9266-2012-00655-1
skew_partition.bottom(sp, col_index)[source]

Given a SkewPartition and a 0-based column index, return the 0-based row index of the bottommost cell in the corresponding column. (Section 2.1 of [mem])

EXAMPLES:

sage: bottom(SkewPartition([[4, 1, 1], [2]]), 0)
1

An in-bounds col_index where no cells exist will return None:

sage: bottom(SkewPartition([[4, 1, 1], [2]]), 1) == None
True

sage: bottom(SkewPartition([[4, 1, 1], [2]]), 2)
0

sage: bottom(SkewPartition([[4, 1, 1], [2]]), 3)
0

A col_index that is out-of-bounds of the skew partition will throw an error:

sage: bottom(SkewPartition([[4, 1, 1], [2]]), 4)
IndexError: list index out of range

See also

right(), left(), top()

skew_partition.is_k_boundary(sp, k=None)[source]

Given a skew-shape sp and natural number k, return True if and only if sp is a \(k\)-boundary. (Section 2.2 of [mem])

Given a skew-shape sp only, return True if and only if there exists some \(k\) such that sp is a \(k\)-boundary.

TODO: test

EXAMPLES:

sage: is_k_boundary(SkewPartition([[3, 2, 1], [2, 1]]))
True
sage: is_k_boundary(SkewPartition([[3, 2, 1], [2, 1]]), k=1)
True
sage: is_k_boundary(SkewPartition([[3, 2, 1], [2, 1]]), k=2)
False

See also

Partition.k_boundary()

skew_partition.is_linked(sp)[source]

A skew-shape sp is a skew-linked diagram if both the row-shape and column-shape of \(sp\) are partitions.

EXAMPLES:

Both row shape and column shape are valid:

sage: is_linked(SkewPartition([[2, 1], [1]]))
True

Valid row shape but invalid column shape:

sage: is_linked(SkewPartition([[3, 2], [1]]))
False

See also

row_lengths(), column_lengths()

skew_partition.is_symmetric(sp)[source]

A SkewPartition is symmetric if its inner and outer shapes are symmetric.

Return True if and only if the SkewPartition sp is equal to its own conjugate.

EXAMPLES:

sage: SkewPartition([[], []]).is_symmetric()
sage: True
sage: SkewPartition([[1], []]).is_symmetric()
sage: True
sage: SkewPartition([[4, 3, 3, 1], [1]]).is_symmetric()
sage: True
sage: SkewPartition([[4, 3, 3, 1], [1, 1]]).is_symmetric()
sage: False
sage: SkewPartition([[5, 3, 3, 1], [2, 2]]).is_symmetric()
sage: False

See also

Partition.is_symmetric()

skew_partition.k_boundary_to_partition(sp, k=None, check=True)[source]

Given a k-boundary sp (\(k\)-boundaries are a specific type of skew-shape), output the original partition whose \(k\)-boundary is sp.

(For the definition of \(k\)-boundary, see Section 2.2 of [mem])

If check is set to True, the program will assert that the skew-shape really is a \(k\)-boundary.

TODO: test

EXAMPLES:

sage: k_boundary_to_partition(SkewPartition([[3, 2, 1], [2, 1]]))
[3, 2, 1]

sage: k_boundary_to_partition(SkewPartition([[3, 1], [2]]), k=2)
Error
sage: k_boundary_to_partition(SkewPartition([[3, 1], [2]]), check=False)
[3, 1]

See also

is_k_boundary(), outer()

skew_partition.left(sp, row_index)[source]

Given a SkewPartition and a 0-based row index, return the 0-based column index of the leftmost cell in the corresponding row. (Section 2.1 of [mem])

EXAMPLES:

sage: left(SkewPartition([[4, 1], [2]]), 0)
2

sage: left(SkewPartition([[4, 1], [2]]), 1)
0

An input index that is out of the bounds of the skew partition will throw an error:

sage: left(SkewPartition([[4, 1], [2]]), 2)
IndexError: list index out of range

An in-bounds index where no cells exist will return None:

sage: left(SkewPartition([[2, 1, 1, 1], [1, 1]]), 1) == None
True

See also

right(), top(), bottom()

skew_partition.right(sp, row_index)[source]

Given a SkewPartition and a 0-based row index, return the 0-based column index of the rightmost cell in the corresponding row. (Section 2.1 of [mem])

EXAMPLES:

sage: right(SkewPartition([[4, 1], [2]]), 0)
3

sage: right(SkewPartition([[4, 1], [2]]), 1)
0

An input index that is out of the bounds of the skew partition will throw an error:

sage: right(SkewPartition([[4, 1], [2]]), 2)
IndexError: list index out of range

An in-bounds index where no cells exist will return None:

sage: right(SkewPartition([[2, 1, 1, 1], [1, 1]]), 1) == None
True

See also

left(), top(), bottom()

skew_partition.row_shape_to_linked_skew_partitions(rs)[source]

Given a partition rs, find all linked SkewPartitions whose row-shape is rs.

EXAMPLES:

Note that [4, 2, 1] / [1, 1] is not linked and hence doesn’t appear in the list below:

sage: row_shape_to_linked_skew_partitions(Partition([3, 1, 1]))
[[3, 1, 1] / [], [4, 1, 1] / [1], [5, 2, 1] / [2, 1]]

See also

is_linked(), row_lengths()

skew_partition.size_to_linked_skew_partitions(size)[source]

Given a natural number size, return all linked SkewPartitions of size size.

EXAMPLES:

sage: size_to_linked_skew_partitions(3)
[[3] / [], [2, 1] / [], [3, 1] / [1], [1, 1, 1] / [], [2, 1, 1] / [1], [3, 2, 1] / [2, 1]]

See also

is_linked(), size()

skew_partition.top(sp, col_index)[source]

Given a SkewPartition and a 0-based column index, return the 0-based row index of the topmost cell in the corresponding column. (Section 2.1 of [mem])

EXAMPLES:

sage: top(SkewPartition([[4, 1, 1], [2]]), 0)
2

An in-bounds col_index where no cells exist will return None:

sage: top(SkewPartition([[4, 1, 1], [2]]), 1) == None
True

sage: top(SkewPartition([[4, 1, 1], [2]]), 2)
0

sage: top(SkewPartition([[4, 1, 1], [2]]), 3)
0

A col_index that is out-of-bounds of the skew partition will throw an error:

sage: top(SkewPartition([[4, 1, 1], [2]]), 4)
IndexError: list index out of range

See also

right(), left(), bottom()