Plane Partitions

AUTHORS:

  • Jang Soo Kim (2016): Initial implementation
  • Jessica Striker (2016): Added additional methods
class sage.combinat.plane_partition.PlanePartition(parent, PP, check=True)

Bases: sage.structure.list_clone.ClonableArray

A plane partition.

A plane partition is a stack of cubes in the positive orthant.

INPUT:

  • PP – a list of lists which represents a tableau
  • box_size – (optional) a list [A, B, C] of 3 positive integers, where A, B, C are the lengths of the box in the \(x\)-axis, \(y\)-axis, \(z\)-axis, respectively; if this is not given, it is determined by the smallest box bounding PP

OUTPUT:

The plane partition whose tableau representation is PP.

EXAMPLES:

sage: PP = PlanePartition([[4,3,3,1],[2,1,1],[1,1]])
sage: PP
Plane partition [[4, 3, 3, 1], [2, 1, 1], [1, 1]]
cells()

Return the list of cells inside self.

EXAMPLES:

sage: PP = PlanePartition([[3,1],[2]])
sage: PP.cells()
[[0, 0, 0], [0, 0, 1], [0, 0, 2], [0, 1, 0], [1, 0, 0], [1, 0, 1]]
check()

Check to see that self is a valid plane partition.

EXAMPLES:

sage: PP = PlanePartition([[4,3,3,1],[2,1,1],[1,1]])
sage: PP.check()
complement(tableau_only=False)

Return the complement of self.

EXAMPLES:

sage: PP = PlanePartition([[4,3,3,1],[2,1,1],[1,1]])
sage: PP.complement()
Plane partition [[4, 4, 3, 3], [4, 3, 3, 2], [3, 1, 1, 0]]
sage: PP.complement(True)
[[4, 4, 3, 3], [4, 3, 3, 2], [3, 1, 1, 0]]
is_CSPP()

Return whether self is a cyclically symmetric plane partition.

A plane partition is cyclically symmetric if its \(x\), \(y\), and \(z\) tableaux are all equal.

EXAMPLES:

sage: PP = PlanePartition([[4,3,3,1],[2,1,1],[1,1]])
sage: PP.is_CSPP()
False
sage: PP = PlanePartition([[3,2,2],[3,1,0],[1,1,0]])
sage: PP.is_CSPP()
True
is_CSSCPP()

Return whether self is a cyclically symmetric and self-complementary plane partition.

EXAMPLES:

sage: PP = PlanePartition([[4,3,3,1],[2,1,1],[1,1]])
sage: PP.is_CSSCPP()
False
sage: PP = PlanePartition([[4,4,4,1],[3,3,2,1],[3,2,1,1],[3,0,0,0]])
sage: PP.is_CSSCPP()
True
is_CSTCPP()

Return whether self is a cyclically symmetric and transpose-complementary plane partition.

EXAMPLES:

sage: PP = PlanePartition([[4,3,3,1],[2,1,1],[1,1]])
sage: PP.is_CSTCPP()
False
sage: PP = PlanePartition([[4,4,3,2],[4,3,2,1],[3,2,1,0],[2,1,0,0]])
sage: PP.is_CSTCPP()
True
is_SCPP()

Return whether self is a self-complementary plane partition.

EXAMPLES:

sage: PP = PlanePartition([[4,3,3,1],[2,1,1],[1,1]])
sage: PP.is_SCPP()
False
sage: PP = PlanePartition([[4,4,4,4],[4,4,2,0],[4,2,0,0],[0,0,0,0]])
sage: PP.is_SCPP()
True
is_SPP()

Return whether self is a symmetric plane partition.

A plane partition is symmetric if the corresponding tableau is symmetric about the diagonal.

EXAMPLES:

sage: PP = PlanePartition([[4,3,3,1],[2,1,1],[1,1]])
sage: PP.is_SPP()
False
sage: PP = PlanePartition([[3,3,2],[3,3,2],[2,2,2]])
sage: PP.is_SPP()
True
sage: PP = PlanePartition([[3,2,1],[2,0,0]])
sage: PP.is_SPP()
False
sage: PP = PlanePartition([[3,2,0],[2,0,0]])
sage: PP.is_SPP()
True
sage: PP = PlanePartition([[3,2],[2,0],[1,0]])
sage: PP.is_SPP()
False
sage: PP = PlanePartition([[3,2],[2,0],[0,0]])
sage: PP.is_SPP()
True
is_SSCPP()

Return whether self is a symmetric, self-complementary plane partition.

EXAMPLES:

sage: PP = PlanePartition([[4,3,3,1],[2,1,1],[1,1]])
sage: PP.is_SSCPP()
False
sage: PP = PlanePartition([[4,3,3,2],[3,2,2,1],[3,2,2,1],[2,1,1,0]])
sage: PP.is_SSCPP()
True
sage: PP = PlanePartition([[2,1],[1,0]])
sage: PP.is_SSCPP()
True
sage: PP = PlanePartition([[4,3,2],[3,2,1],[2,1,0]])
sage: PP.is_SSCPP()
True
sage: PP = PlanePartition([[4,2,2,2],[2,2,2,2],[2,2,2,2],[2,2,2,0]])
sage: PP.is_SSCPP()
True
is_TCPP()

Return whether self is a transpose-complementary plane partition.

EXAMPLES:

sage: PP = PlanePartition([[4,3,3,1],[2,1,1],[1,1]])
sage: PP.is_TCPP()
False
sage: PP = PlanePartition([[4,4,3,2],[4,4,2,1],[4,2,0,0],[2,0,0,0]])
sage: PP.is_TCPP()
True
is_TSPP()

Return whether self is a totally symmetric plane partition.

A plane partition is totally symmetric if it is both symmetric and cyclically symmetric.

EXAMPLES:

sage: PP = PlanePartition([[4,3,3,1],[2,1,1],[1,1]])
sage: PP.is_TSPP()
False
sage: PP = PlanePartition([[3,3,3],[3,3,2],[3,2,1]])
sage: PP.is_TSPP()
True
is_TSSCPP()

Return whether self is a totally symmetric self-complementary plane partition.

EXAMPLES:

sage: PP = PlanePartition([[4,3,3,1],[2,1,1],[1,1]])
sage: PP.is_TSSCPP()
False
sage: PP = PlanePartition([[4,4,3,2],[4,3,2,1],[3,2,1,0],[2,1,0,0]])
sage: PP.is_TSSCPP()
True
plot(show_box=False, colors=['white', 'lightgray', 'darkgray'])

Return a plot of self.

INPUT:

  • show_box – boolean (default: False); if True, also shows the visible tiles on the \(xy\)-, \(yz\)-, \(zx\)-planes
  • colors – (default: ["white", "lightgray", "darkgray"]) list [A, B, C] of 3 strings representing colors

EXAMPLES:

sage: PP = PlanePartition([[4,3,3,1],[2,1,1],[1,1]])
sage: PP.plot()
Graphics object consisting of 27 graphics primitives
pp(show_box=False)

Return a pretty print of the plane partition.

INPUT:

  • show_box – boolean (default: False); if True, also shows the visible tiles on the \(xy\)-, \(yz\)-, \(zx\)-planes

OUTPUT:

A pretty print of the plane partition.

EXAMPLES:

sage: PlanePartition([[4,3,3,1],[2,1,1],[1,1]]).pp()
        __
       /\_\
    __/\/_/
 __/\_\/\_\
/\_\/_/\/\_\
\/\_\_\/\/_/
 \/_/\_\/_/
    \/_/\_\
       \/_/
sage: PlanePartition([[4,3,3,1],[2,1,1],[1,1]]).pp(True)
    ______
   /_/_/\_\
  /_/_/\/_/\
 /_/\_\/\_\/\
/\_\/_/\/\_\/\
\/\_\_\/\/_/\/
 \/_/\_\/_/\/
  \_\/_/\_\/
   \_\_\/_/
to_tableau()

Return the tableau class of self.

EXAMPLES:

sage: PP = PlanePartition([[4,3,3,1],[2,1,1],[1,1]])
sage: PP.to_tableau()
[[4, 3, 3, 1], [2, 1, 1], [1, 1]]
transpose(tableau_only=False)

Return the transpose of self.

EXAMPLES:

sage: PP = PlanePartition([[4,3,3,1],[2,1,1],[1,1]])
sage: PP.transpose()
Plane partition [[4, 2, 1], [3, 1, 1], [3, 1, 0], [1, 0, 0]]
sage: PP.transpose(True)
[[4, 2, 1], [3, 1, 1], [3, 1, 0], [1, 0, 0]]
x_tableau()

Return the projection of self in the \(x\) direction.

EXAMPLES:

sage: PP = PlanePartition([[4,3,3,1],[2,1,1],[1,1]])
sage: PP.x_tableau()
[[3, 2, 1, 1], [3, 1, 1, 0], [2, 1, 1, 0], [1, 0, 0, 0]]
y_tableau()

Return the projection of self in the \(y\) direction.

EXAMPLES:

sage: PP = PlanePartition([[4,3,3,1],[2,1,1],[1,1]])
sage: PP.y_tableau()
[[4, 3, 2], [3, 1, 0], [3, 0, 0], [1, 0, 0]]
z_tableau()

Return the projection of self in the \(z\) direction.

EXAMPLES:

sage: PP = PlanePartition([[4,3,3,1],[2,1,1],[1,1]])
sage: PP.z_tableau()
[[4, 3, 3, 1], [2, 1, 1, 0], [1, 1, 0, 0]]
class sage.combinat.plane_partition.PlanePartitions(box_size)

Bases: sage.structure.unique_representation.UniqueRepresentation, sage.structure.parent.Parent

All plane partitions inside a rectangular box of given side lengths.

INPUT:

  • box_size – a triple of positive integers indicating the size of the box containing the plane partition

EXAMPLES:

This will create an instance to manipulate the plane partitions in a \(4 \times 3 \times 2\) box:

sage: P = PlanePartitions((4,3,2))
sage: P
Plane partitions inside a 4 x 3 x 2 box
sage: P.cardinality()
490

See also

PlanePartition

Element

alias of PlanePartition

box()

Return the sizes of the box of the plane partitions of self are contained in.

EXAMPLES:

sage: P = PlanePartitions((4,3,5))
sage: P.box()
(4, 3, 5)
cardinality()

Return the cardinality of self.

The number of plane partitions inside an \(a \times b \times c\) box is equal to

\[\prod_{i=1}^{a} \prod_{j=1}^{b} \prod_{k=1}^{c} \frac{i+j+k-1}{i+j+k-2}.\]

EXAMPLES:

sage: P = PlanePartitions((4,3,5))
sage: P.cardinality()
116424
random_element()

Return a uniformly random element of self.

ALGORITHM:

This uses the random_order_ideal() method and the natural bijection with plane partitions.

EXAMPLES:

sage: P = PlanePartitions((4,3,5))
sage: P.random_element()
Plane partition [[4, 3, 3], [4, 0, 0], [2, 0, 0], [0, 0, 0]]