Shifted primed tableaux¶
AUTHORS:
- Kirill Paramonov (2017-08-18): initial implementation 
- Chaman Agrawal (2019-08-12): add parameter to allow primed diagonal entry 
- class sage.combinat.shifted_primed_tableau.CrystalElementShiftedPrimedTableau(parent, T, skew=None, check=True, preprocessed=False)[source]¶
- Bases: - ShiftedPrimedTableau- Class for elements of - crystals.ShiftedPrimedTableau.- e(ind)[source]¶
- Compute the action of the crystal operator \(e_i\) on a shifted primed tableau using cases from the papers [HPS2017] and [AO2018]. - INPUT: - ind– an element in the index set of the crystal
 - OUTPUT: primed tableau or - None- EXAMPLES: - sage: SPT = ShiftedPrimedTableaux([5,4,2]) sage: t = SPT([[1,1,1,'2p','3p'], [2,'3p',3,3],[3,4]]) sage: t.pp() 1 1 1 2' 3' 2 3' 3 3 3 4 sage: s = t.e(2) sage: s.pp() 1 1 1 2' 3' 2 2 3 3 3 4 sage: t == s.f(2) True sage: SPT = ShiftedPrimedTableaux([2,1]) sage: t = SPT([[2,'3p'],[3]]) sage: t.e(-1).pp() 1 3' 3 sage: t.e(1).pp() 1 3' 3 sage: t.e(2).pp() 2 2 3 sage: r = SPT([[2, 2],[3]]) sage: r.e(-1).pp() 1 2 3 sage: r.e(1).pp() 1 2 3 sage: r.e(2) is None True sage: r = SPT([[1,'3p'],[3]]) sage: r.e(-1) is None True sage: r.e(1) is None True sage: r.e(2).pp() 1 2' 3 sage: r = SPT([[1,'2p'],[3]]) sage: r.e(-1).pp() 1 1 3 sage: r.e(1) is None True sage: r.e(2).pp() 1 2' 2 sage: t = SPT([[2,'3p'],[3]]) sage: t.e(-1).e(2).e(2).e(-1) == t.e(2).e(1).e(1).e(2) True sage: t.e(-1).e(2).e(2).e(-1).pp() 1 1 2 sage: all(t.e(-1).e(2).e(2).e(-1).e(i) is None for i in {-1, 1, 2}) True sage: SPT = ShiftedPrimedTableaux([4]) sage: t = SPT([[2,2,2,2]]) sage: t.e(-1).pp() 1 2 2 2 sage: t.e(1).pp() 1 2 2 2 sage: t.e(-1).e(-1) is None True sage: t.e(1).e(1).pp() 1 1 2 2 - >>> from sage.all import * >>> SPT = ShiftedPrimedTableaux([Integer(5),Integer(4),Integer(2)]) >>> t = SPT([[Integer(1),Integer(1),Integer(1),'2p','3p'], [Integer(2),'3p',Integer(3),Integer(3)],[Integer(3),Integer(4)]]) >>> t.pp() 1 1 1 2' 3' 2 3' 3 3 3 4 >>> s = t.e(Integer(2)) >>> s.pp() 1 1 1 2' 3' 2 2 3 3 3 4 >>> t == s.f(Integer(2)) True >>> SPT = ShiftedPrimedTableaux([Integer(2),Integer(1)]) >>> t = SPT([[Integer(2),'3p'],[Integer(3)]]) >>> t.e(-Integer(1)).pp() 1 3' 3 >>> t.e(Integer(1)).pp() 1 3' 3 >>> t.e(Integer(2)).pp() 2 2 3 >>> r = SPT([[Integer(2), Integer(2)],[Integer(3)]]) >>> r.e(-Integer(1)).pp() 1 2 3 >>> r.e(Integer(1)).pp() 1 2 3 >>> r.e(Integer(2)) is None True >>> r = SPT([[Integer(1),'3p'],[Integer(3)]]) >>> r.e(-Integer(1)) is None True >>> r.e(Integer(1)) is None True >>> r.e(Integer(2)).pp() 1 2' 3 >>> r = SPT([[Integer(1),'2p'],[Integer(3)]]) >>> r.e(-Integer(1)).pp() 1 1 3 >>> r.e(Integer(1)) is None True >>> r.e(Integer(2)).pp() 1 2' 2 >>> t = SPT([[Integer(2),'3p'],[Integer(3)]]) >>> t.e(-Integer(1)).e(Integer(2)).e(Integer(2)).e(-Integer(1)) == t.e(Integer(2)).e(Integer(1)).e(Integer(1)).e(Integer(2)) True >>> t.e(-Integer(1)).e(Integer(2)).e(Integer(2)).e(-Integer(1)).pp() 1 1 2 >>> all(t.e(-Integer(1)).e(Integer(2)).e(Integer(2)).e(-Integer(1)).e(i) is None for i in {-Integer(1), Integer(1), Integer(2)}) True >>> SPT = ShiftedPrimedTableaux([Integer(4)]) >>> t = SPT([[Integer(2),Integer(2),Integer(2),Integer(2)]]) >>> t.e(-Integer(1)).pp() 1 2 2 2 >>> t.e(Integer(1)).pp() 1 2 2 2 >>> t.e(-Integer(1)).e(-Integer(1)) is None True >>> t.e(Integer(1)).e(Integer(1)).pp() 1 1 2 2 
 - f(ind)[source]¶
- Compute the action of the crystal operator \(f_i\) on a shifted primed tableau using cases from the papers [HPS2017] and [AO2018]. - INPUT: - ind– element in the index set of the crystal
 - OUTPUT: primed tableau or - None- EXAMPLES: - sage: SPT = ShiftedPrimedTableaux([5,4,2]) sage: t = SPT([[1,1,1,1,'3p'],[2,2,2,'3p'],[3,3]]) sage: t.pp() 1 1 1 1 3' 2 2 2 3' 3 3 sage: s = t.f(2) sage: s is None True sage: t = SPT([[1,1,1,'2p','3p'],[2,2,3,3],[3,4]]) sage: t.pp() 1 1 1 2' 3' 2 2 3 3 3 4 sage: s = t.f(2) sage: s.pp() 1 1 1 2' 3' 2 3' 3 3 3 4 sage: SPT = ShiftedPrimedTableaux([2,1]) sage: t = SPT([[1,1],[2]]) sage: t.f(-1).pp() 1 2' 2 sage: t.f(1).pp() 1 2' 2 sage: t.f(2).pp() 1 1 3 sage: r = SPT([[1,'2p'],[2]]) sage: r.f(-1) is None True sage: r.f(1) is None True sage: r.f(2).pp() 1 2' 3 sage: r = SPT([[1,1],[3]]) sage: r.f(-1).pp() 1 2' 3 sage: r.f(1).pp() 1 2 3 sage: r.f(2) is None True sage: r = SPT([[1,2],[3]]) sage: r.f(-1).pp() 2 2 3 sage: r.f(1).pp() 2 2 3 sage: r.f(2) is None True sage: t = SPT([[1,1],[2]]) sage: t.f(-1).f(2).f(2).f(-1) == t.f(2).f(1).f(-1).f(2) True sage: t.f(-1).f(2).f(2).f(-1).pp() 2 3' 3 sage: all(t.f(-1).f(2).f(2).f(-1).f(i) is None for i in {-1, 1, 2}) True sage: SPT = ShiftedPrimedTableaux([4]) sage: t = SPT([[1,1,1,1]]) sage: t.f(-1).pp() 1 1 1 2' sage: t.f(1).pp() 1 1 1 2 sage: t.f(-1).f(-1) is None True sage: t.f(1).f(-1).pp() 1 1 2' 2 sage: t.f(1).f(1).pp() 1 1 2 2 sage: t.f(1).f(1).f(-1).pp() 1 2' 2 2 sage: t.f(1).f(1).f(1).pp() 1 2 2 2 sage: t.f(1).f(1).f(1).f(-1).pp() 2 2 2 2 sage: t.f(1).f(1).f(1).f(1).pp() 2 2 2 2 sage: t.f(1).f(1).f(1).f(1).f(-1) is None True - >>> from sage.all import * >>> SPT = ShiftedPrimedTableaux([Integer(5),Integer(4),Integer(2)]) >>> t = SPT([[Integer(1),Integer(1),Integer(1),Integer(1),'3p'],[Integer(2),Integer(2),Integer(2),'3p'],[Integer(3),Integer(3)]]) >>> t.pp() 1 1 1 1 3' 2 2 2 3' 3 3 >>> s = t.f(Integer(2)) >>> s is None True >>> t = SPT([[Integer(1),Integer(1),Integer(1),'2p','3p'],[Integer(2),Integer(2),Integer(3),Integer(3)],[Integer(3),Integer(4)]]) >>> t.pp() 1 1 1 2' 3' 2 2 3 3 3 4 >>> s = t.f(Integer(2)) >>> s.pp() 1 1 1 2' 3' 2 3' 3 3 3 4 >>> SPT = ShiftedPrimedTableaux([Integer(2),Integer(1)]) >>> t = SPT([[Integer(1),Integer(1)],[Integer(2)]]) >>> t.f(-Integer(1)).pp() 1 2' 2 >>> t.f(Integer(1)).pp() 1 2' 2 >>> t.f(Integer(2)).pp() 1 1 3 >>> r = SPT([[Integer(1),'2p'],[Integer(2)]]) >>> r.f(-Integer(1)) is None True >>> r.f(Integer(1)) is None True >>> r.f(Integer(2)).pp() 1 2' 3 >>> r = SPT([[Integer(1),Integer(1)],[Integer(3)]]) >>> r.f(-Integer(1)).pp() 1 2' 3 >>> r.f(Integer(1)).pp() 1 2 3 >>> r.f(Integer(2)) is None True >>> r = SPT([[Integer(1),Integer(2)],[Integer(3)]]) >>> r.f(-Integer(1)).pp() 2 2 3 >>> r.f(Integer(1)).pp() 2 2 3 >>> r.f(Integer(2)) is None True >>> t = SPT([[Integer(1),Integer(1)],[Integer(2)]]) >>> t.f(-Integer(1)).f(Integer(2)).f(Integer(2)).f(-Integer(1)) == t.f(Integer(2)).f(Integer(1)).f(-Integer(1)).f(Integer(2)) True >>> t.f(-Integer(1)).f(Integer(2)).f(Integer(2)).f(-Integer(1)).pp() 2 3' 3 >>> all(t.f(-Integer(1)).f(Integer(2)).f(Integer(2)).f(-Integer(1)).f(i) is None for i in {-Integer(1), Integer(1), Integer(2)}) True >>> SPT = ShiftedPrimedTableaux([Integer(4)]) >>> t = SPT([[Integer(1),Integer(1),Integer(1),Integer(1)]]) >>> t.f(-Integer(1)).pp() 1 1 1 2' >>> t.f(Integer(1)).pp() 1 1 1 2 >>> t.f(-Integer(1)).f(-Integer(1)) is None True >>> t.f(Integer(1)).f(-Integer(1)).pp() 1 1 2' 2 >>> t.f(Integer(1)).f(Integer(1)).pp() 1 1 2 2 >>> t.f(Integer(1)).f(Integer(1)).f(-Integer(1)).pp() 1 2' 2 2 >>> t.f(Integer(1)).f(Integer(1)).f(Integer(1)).pp() 1 2 2 2 >>> t.f(Integer(1)).f(Integer(1)).f(Integer(1)).f(-Integer(1)).pp() 2 2 2 2 >>> t.f(Integer(1)).f(Integer(1)).f(Integer(1)).f(Integer(1)).pp() 2 2 2 2 >>> t.f(Integer(1)).f(Integer(1)).f(Integer(1)).f(Integer(1)).f(-Integer(1)) is None True 
 - is_highest_weight(index_set=None)[source]¶
- Return whether - selfis a highest weight element of the crystal.- An element is highest weight if it vanishes under all crystal operators \(e_i\). - EXAMPLES: - sage: SPT = ShiftedPrimedTableaux([5,4,2]) sage: t = SPT([(1, 1, 1, 1, 1), (2, 2, 2, "3p"), (3, 3)]) sage: t.is_highest_weight() True sage: SPT = ShiftedPrimedTableaux([5,4]) sage: s = SPT([(1, 1, 1, 1, 1), (2, 2, "3p", 3)]) sage: s.is_highest_weight(index_set=[1]) True - >>> from sage.all import * >>> SPT = ShiftedPrimedTableaux([Integer(5),Integer(4),Integer(2)]) >>> t = SPT([(Integer(1), Integer(1), Integer(1), Integer(1), Integer(1)), (Integer(2), Integer(2), Integer(2), "3p"), (Integer(3), Integer(3))]) >>> t.is_highest_weight() True >>> SPT = ShiftedPrimedTableaux([Integer(5),Integer(4)]) >>> s = SPT([(Integer(1), Integer(1), Integer(1), Integer(1), Integer(1)), (Integer(2), Integer(2), "3p", Integer(3))]) >>> s.is_highest_weight(index_set=[Integer(1)]) True 
 - reading_word()[source]¶
- Return the reading word of - self.- The reading word of a shifted primed tableau is constructed as follows: - List all primed entries in the tableau, column by column, in decreasing order within each column, moving from the rightmost column to the left, and with all the primes removed (i.e. all entries are increased by half a unit). 
- Then list all unprimed entries, row by row, in increasing order within each row, moving from the bottommost row to the top. 
 - EXAMPLES: - sage: SPT = ShiftedPrimedTableaux([4,2]) sage: t = SPT([[1,'2p',2,2],[2,'3p']]) sage: t.reading_word() [3, 2, 2, 1, 2, 2] - >>> from sage.all import * >>> SPT = ShiftedPrimedTableaux([Integer(4),Integer(2)]) >>> t = SPT([[Integer(1),'2p',Integer(2),Integer(2)],[Integer(2),'3p']]) >>> t.reading_word() [3, 2, 2, 1, 2, 2] 
 - weight()[source]¶
- Return the weight of - self.- The weight of a shifted primed tableau is defined to be the vector with \(i\)-th component equal to the number of entries \(i\) and \(i'\) in the tableau. - EXAMPLES: - sage: t = ShiftedPrimedTableau([[1,'2p',2,2],[2,'3p']]) sage: t.weight() (1, 4, 1) - >>> from sage.all import * >>> t = ShiftedPrimedTableau([[Integer(1),'2p',Integer(2),Integer(2)],[Integer(2),'3p']]) >>> t.weight() (1, 4, 1) 
 
- class sage.combinat.shifted_primed_tableau.PrimedEntry(entry=None, double=None)[source]¶
- Bases: - SageObject- The class of entries in shifted primed tableaux. - An entry in a shifted primed tableau is an element in the alphabet \(\{1' < 1 < 2' < 2 < \cdots < n' < n\}\). The difference between two elements \(i\) and \(i-1\) counts as a whole unit, whereas the difference between \(i\) and \(i'\) counts as half a unit. Internally, we represent an unprimed element \(x\) as \(2x\) and the primed elements as the corresponding odd integer that respects the total order. - INPUT: - entry– half integer or string of an integer possibly ending in- por- '
- double– the doubled value
 
- class sage.combinat.shifted_primed_tableau.ShiftedPrimedTableau(parent, T, skew=None, check=True, preprocessed=False)[source]¶
- Bases: - ClonableArray- A shifted primed tableau. - A primed tableau is a tableau of shifted shape in the alphabet \(X' = \{1' < 1 < 2' < 2 < \cdots < n' < n\}\) such that - the entries are weakly increasing along rows and columns; 
- a row cannot have two repeated primed elements, and a column cannot have two repeated non-primed elements; 
 - Skew shape of the shifted primed tableaux is specified either with an optional argument - skewor with- Noneentries.- Primed entries in the main diagonal can be allowed with the optional boolean parameter - primed_diagonal``(default: ``False).- EXAMPLES: - sage: T = ShiftedPrimedTableaux([4,2]) sage: T([[1,"2'","3'",3],[2,"3'"]])[1] (2, 3') sage: t = ShiftedPrimedTableau([[1,"2p",2.5,3],[2,2.5]]) sage: t[1] (2, 3') sage: ShiftedPrimedTableau([["2p",2,3],["2p","3p"],[2]], skew=[2,1]) [(None, None, 2', 2, 3), (None, 2', 3'), (2,)] sage: ShiftedPrimedTableau([[None,None,"2p"],[None,"2p"]]) [(None, None, 2'), (None, 2')] sage: T = ShiftedPrimedTableaux([4,2], primed_diagonal=True) sage: T([[1,"2'","3'",3],["2'","3'"]])[1] # With primed diagonal entry (2', 3') - >>> from sage.all import * >>> T = ShiftedPrimedTableaux([Integer(4),Integer(2)]) >>> T([[Integer(1),"2'","3'",Integer(3)],[Integer(2),"3'"]])[Integer(1)] (2, 3') >>> t = ShiftedPrimedTableau([[Integer(1),"2p",RealNumber('2.5'),Integer(3)],[Integer(2),RealNumber('2.5')]]) >>> t[Integer(1)] (2, 3') >>> ShiftedPrimedTableau([["2p",Integer(2),Integer(3)],["2p","3p"],[Integer(2)]], skew=[Integer(2),Integer(1)]) [(None, None, 2', 2, 3), (None, 2', 3'), (2,)] >>> ShiftedPrimedTableau([[None,None,"2p"],[None,"2p"]]) [(None, None, 2'), (None, 2')] >>> T = ShiftedPrimedTableaux([Integer(4),Integer(2)], primed_diagonal=True) >>> T([[Integer(1),"2'","3'",Integer(3)],["2'","3'"]])[Integer(1)] # With primed diagonal entry (2', 3') - check()[source]¶
- Check that - selfis a valid primed tableau.- EXAMPLES: - sage: T = ShiftedPrimedTableaux([4,2]) sage: t = T([[1,'2p',2,2],[2,'3p']]) sage: t.check() sage: s = ShiftedPrimedTableau([["2p",2,3],["2p"],[2]],skew=[2,1]) sage: s.check() sage: t = T([['1p','2p',2,2],[2,'3p']]) Traceback (most recent call last): ... ValueError: [['1p', '2p', 2, 2], [2, '3p']] is not an element of Shifted Primed Tableaux of shape [4, 2] sage: T = ShiftedPrimedTableaux([4,2], primed_diagonal=True) sage: t = T([['1p','2p',2,2],[2,'3p']]) # primed_diagonal allowed sage: t.check() sage: t = T([['1p','1p',2,2],[2,'3p']]) Traceback (most recent call last): ... ValueError: [['1p', '1p', 2, 2], [2, '3p']] is not an element of Shifted Primed Tableaux of shape [4, 2] and maximum entry 6 - >>> from sage.all import * >>> T = ShiftedPrimedTableaux([Integer(4),Integer(2)]) >>> t = T([[Integer(1),'2p',Integer(2),Integer(2)],[Integer(2),'3p']]) >>> t.check() >>> s = ShiftedPrimedTableau([["2p",Integer(2),Integer(3)],["2p"],[Integer(2)]],skew=[Integer(2),Integer(1)]) >>> s.check() >>> t = T([['1p','2p',Integer(2),Integer(2)],[Integer(2),'3p']]) Traceback (most recent call last): ... ValueError: [['1p', '2p', 2, 2], [2, '3p']] is not an element of Shifted Primed Tableaux of shape [4, 2] >>> T = ShiftedPrimedTableaux([Integer(4),Integer(2)], primed_diagonal=True) >>> t = T([['1p','2p',Integer(2),Integer(2)],[Integer(2),'3p']]) # primed_diagonal allowed >>> t.check() >>> t = T([['1p','1p',Integer(2),Integer(2)],[Integer(2),'3p']]) Traceback (most recent call last): ... ValueError: [['1p', '1p', 2, 2], [2, '3p']] is not an element of Shifted Primed Tableaux of shape [4, 2] and maximum entry 6 
 - is_standard()[source]¶
- Return - Trueif the entries of- selfare in bijection with positive primed integers \(1', 1, 2', \ldots, n\).- EXAMPLES: - sage: ShiftedPrimedTableau([["1'", 1, "2'"], [2, "3'"]], ....: primed_diagonal=True).is_standard() True sage: ShiftedPrimedTableau([["1'", 1, 2], ["2'", "3'"]], ....: primed_diagonal=True).is_standard() True sage: ShiftedPrimedTableau([["1'", 1, 1], ["2'", 2]], ....: primed_diagonal=True).is_standard() False sage: ShiftedPrimedTableau([[1, "2'"], [2]]).is_standard() False sage: s = ShiftedPrimedTableau([[None, None,"1p","2p",2],[None,"1"]]) sage: s.is_standard() True - >>> from sage.all import * >>> ShiftedPrimedTableau([["1'", Integer(1), "2'"], [Integer(2), "3'"]], ... primed_diagonal=True).is_standard() True >>> ShiftedPrimedTableau([["1'", Integer(1), Integer(2)], ["2'", "3'"]], ... primed_diagonal=True).is_standard() True >>> ShiftedPrimedTableau([["1'", Integer(1), Integer(1)], ["2'", Integer(2)]], ... primed_diagonal=True).is_standard() False >>> ShiftedPrimedTableau([[Integer(1), "2'"], [Integer(2)]]).is_standard() False >>> s = ShiftedPrimedTableau([[None, None,"1p","2p",Integer(2)],[None,"1"]]) >>> s.is_standard() True 
 - max_entry()[source]¶
- Return the minimum unprimed letter \(x > y\) for all \(y\) in - self.- EXAMPLES: - sage: Tab = ShiftedPrimedTableau([(1,1,'2p','3p'),(2,2)]) sage: Tab.max_entry() 3 - >>> from sage.all import * >>> Tab = ShiftedPrimedTableau([(Integer(1),Integer(1),'2p','3p'),(Integer(2),Integer(2))]) >>> Tab.max_entry() 3 
 - pp()[source]¶
- Pretty print - self.- EXAMPLES: - sage: t = ShiftedPrimedTableau([[1,'2p',2,2],[2,'3p']]) sage: t.pp() 1 2' 2 2 2 3' sage: t = ShiftedPrimedTableau([[10,'11p',11,11],[11,'12']]) sage: t.pp() 10 11' 11 11 11 12 sage: s = ShiftedPrimedTableau([['2p',2,3],['2p']],skew=[2,1]) sage: s.pp() . . 2' 2 3 . 2' - >>> from sage.all import * >>> t = ShiftedPrimedTableau([[Integer(1),'2p',Integer(2),Integer(2)],[Integer(2),'3p']]) >>> t.pp() 1 2' 2 2 2 3' >>> t = ShiftedPrimedTableau([[Integer(10),'11p',Integer(11),Integer(11)],[Integer(11),'12']]) >>> t.pp() 10 11' 11 11 11 12 >>> s = ShiftedPrimedTableau([['2p',Integer(2),Integer(3)],['2p']],skew=[Integer(2),Integer(1)]) >>> s.pp() . . 2' 2 3 . 2' 
 - restrict(n)[source]¶
- Return the restriction of the shifted tableau to all the numbers less than or equal to - n.- Note - If only the outer shape of the restriction, rather than the whole restriction, is needed, then the faster method - restriction_outer_shape()is preferred. Similarly if only the skew shape is needed, use- restriction_shape().- EXAMPLES: - sage: t = ShiftedPrimedTableau([[1,'2p',2,2],[2,'3p']]) sage: t.restrict(2).pp() 1 2' 2 2 2 sage: t.restrict("2p").pp() 1 2' sage: s = ShiftedPrimedTableau([["2p",2,3],["2p"]], skew=[2,1]) sage: s.restrict(2).pp() . . 2' 2 . 2' sage: s.restrict(1.5).pp() . . 2' . 2' - >>> from sage.all import * >>> t = ShiftedPrimedTableau([[Integer(1),'2p',Integer(2),Integer(2)],[Integer(2),'3p']]) >>> t.restrict(Integer(2)).pp() 1 2' 2 2 2 >>> t.restrict("2p").pp() 1 2' >>> s = ShiftedPrimedTableau([["2p",Integer(2),Integer(3)],["2p"]], skew=[Integer(2),Integer(1)]) >>> s.restrict(Integer(2)).pp() . . 2' 2 . 2' >>> s.restrict(RealNumber('1.5')).pp() . . 2' . 2' 
 - restriction_outer_shape(n)[source]¶
- Return the outer shape of the restriction of the shifted tableau - selfto \(n\).- If \(T\) is a (skew) shifted tableau and \(n\) is a half-integer, then the restriction of \(T\) to \(n\) is defined as the (skew) shifted tableau obtained by removing all cells filled with entries greater than \(n\) from \(T\). - This method computes merely the outer shape of the restriction. For the restriction itself, use - restrict().- EXAMPLES: - sage: s = ShiftedPrimedTableau([["2p",2,3],["2p"]], skew=[2,1]) sage: s.pp() . . 2' 2 3 . 2' sage: s.restriction_outer_shape(2) [4, 2] sage: s.restriction_outer_shape("2p") [3, 2] - >>> from sage.all import * >>> s = ShiftedPrimedTableau([["2p",Integer(2),Integer(3)],["2p"]], skew=[Integer(2),Integer(1)]) >>> s.pp() . . 2' 2 3 . 2' >>> s.restriction_outer_shape(Integer(2)) [4, 2] >>> s.restriction_outer_shape("2p") [3, 2] 
 - restriction_shape(n)[source]¶
- Return the skew shape of the restriction of the skew tableau - selfto- n.- If \(T\) is a shifted tableau and \(n\) is a half-integer, then the restriction of \(T\) to \(n\) is defined as the (skew) shifted tableau obtained by removing all cells filled with entries greater than \(n\) from \(T\). - This method computes merely the skew shape of the restriction. For the restriction itself, use - restrict().- EXAMPLES: - sage: s = ShiftedPrimedTableau([["2p",2,3],["2p"]], skew=[2,1]) sage: s.pp() . . 2' 2 3 . 2' sage: s.restriction_shape(2) [4, 2] / [2, 1] - >>> from sage.all import * >>> s = ShiftedPrimedTableau([["2p",Integer(2),Integer(3)],["2p"]], skew=[Integer(2),Integer(1)]) >>> s.pp() . . 2' 2 3 . 2' >>> s.restriction_shape(Integer(2)) [4, 2] / [2, 1] 
 - shape()[source]¶
- Return the shape of the underlying partition of - self.- EXAMPLES: - sage: t = ShiftedPrimedTableau([[1,'2p',2,2],[2,'3p']]) sage: t.shape() [4, 2] sage: s = ShiftedPrimedTableau([["2p",2,3],["2p"]],skew=[2,1]) sage: s.shape() [5, 2] / [2, 1] - >>> from sage.all import * >>> t = ShiftedPrimedTableau([[Integer(1),'2p',Integer(2),Integer(2)],[Integer(2),'3p']]) >>> t.shape() [4, 2] >>> s = ShiftedPrimedTableau([["2p",Integer(2),Integer(3)],["2p"]],skew=[Integer(2),Integer(1)]) >>> s.shape() [5, 2] / [2, 1] 
 - to_chain()[source]¶
- Return the chain of partitions corresponding to the (skew) shifted tableau - self, interlaced by one of the colours- 1is the added cell is on the diagonal,- 2if an ordinary entry is added and- 3if a primed entry is added.- EXAMPLES: - sage: s = ShiftedPrimedTableau([(1, 2, 3.5, 5, 6.5), (3, 5.5)]) sage: s.pp() 1 2 4' 5 7' 3 6' sage: s.to_chain() [[], 1, [1], 2, [2], 1, [2, 1], 3, [3, 1], 2, [4, 1], 3, [4, 2], 3, [5, 2]] sage: s = ShiftedPrimedTableau([(1, 3.5), (2.5,), (6,)], skew=[2,1]) sage: s.pp() . . 1 4' . 3' 6 sage: s.to_chain() [[2, 1], 2, [3, 1], 0, [3, 1], 3, [3, 2], 3, [4, 2], 0, [4, 2], 1, [4, 2, 1]] - >>> from sage.all import * >>> s = ShiftedPrimedTableau([(Integer(1), Integer(2), RealNumber('3.5'), Integer(5), RealNumber('6.5')), (Integer(3), RealNumber('5.5'))]) >>> s.pp() 1 2 4' 5 7' 3 6' >>> s.to_chain() [[], 1, [1], 2, [2], 1, [2, 1], 3, [3, 1], 2, [4, 1], 3, [4, 2], 3, [5, 2]] >>> s = ShiftedPrimedTableau([(Integer(1), RealNumber('3.5')), (RealNumber('2.5'),), (Integer(6),)], skew=[Integer(2),Integer(1)]) >>> s.pp() . . 1 4' . 3' 6 >>> s.to_chain() [[2, 1], 2, [3, 1], 0, [3, 1], 3, [3, 2], 3, [4, 2], 0, [4, 2], 1, [4, 2, 1]] 
 - weight()[source]¶
- Return the weight of - self.- The weight of a shifted primed tableau is defined to be the vector with \(i\)-th component equal to the number of entries \(i\) and \(i'\) in the tableau. - EXAMPLES: - sage: t = ShiftedPrimedTableau([['2p',2,2],[2,'3p']], skew=[1]) sage: t.weight() (0, 4, 1) - >>> from sage.all import * >>> t = ShiftedPrimedTableau([['2p',Integer(2),Integer(2)],[Integer(2),'3p']], skew=[Integer(1)]) >>> t.weight() (0, 4, 1) 
 
- class sage.combinat.shifted_primed_tableau.ShiftedPrimedTableaux(skew=None, primed_diagonal=False)[source]¶
- Bases: - UniqueRepresentation,- Parent- Return the combinatorial class of shifted primed tableaux subject to the constraints given by the arguments. - A primed tableau is a tableau of shifted shape on the alphabet \(X' = \{1' < 1 < 2' < 2 < \cdots < n' < n\}\) such that - the entries are weakly increasing along rows and columns 
- a row cannot have two repeated primed entries, and a column cannot have two repeated non-primed entries 
 - INPUT: - Valid optional keywords: - shape– the (outer skew) shape of tableaux
- weight– the weight of tableaux
- max_entry– the maximum entry of tableaux
- skew– the inner skew shape of tableaux
- primed_diagonal– allow primed entries in main diagonal of tableaux
 - The weight of a tableau is defined to be the vector with \(i\)-th component equal to the number of entries \(i\) and \(i'\) in the tableau. The sum of the coordinates in the weight vector must be equal to the number of entries in the partition. - The - shapeand- skewmust be strictly decreasing partitions. The- primed_diagonalis a boolean (default:- False).- EXAMPLES: - sage: SPT = ShiftedPrimedTableaux(weight=(1,2,2), shape=[3,2]); SPT Shifted Primed Tableaux of weight (1, 2, 2) and shape [3, 2] sage: SPT.list() [[(1, 2, 2), (3, 3)], [(1, 2', 3'), (2, 3)], [(1, 2', 3'), (2, 3')], [(1, 2', 2), (3, 3)]] sage: SPT = ShiftedPrimedTableaux(weight=(1,2,2), shape=[3,2], ....: primed_diagonal=True); SPT Shifted Primed Tableaux of weight (1, 2, 2) and shape [3, 2] sage: SPT.list() [[(1, 2, 2), (3, 3)], [(1, 2, 2), (3', 3)], [(1, 2', 3'), (2, 3)], [(1, 2', 3'), (2, 3')], [(1, 2', 3'), (2', 3)], [(1, 2', 3'), (2', 3')], [(1, 2', 2), (3, 3)], [(1, 2', 2), (3', 3)], [(1', 2, 2), (3, 3)], [(1', 2, 2), (3', 3)], [(1', 2', 3'), (2, 3)], [(1', 2', 3'), (2, 3')], [(1', 2', 3'), (2', 3)], [(1', 2', 3'), (2', 3')], [(1', 2', 2), (3, 3)], [(1', 2', 2), (3', 3)]] sage: SPT = ShiftedPrimedTableaux(weight=(1,2)); SPT Shifted Primed Tableaux of weight (1, 2) sage: list(SPT) [[(1, 2, 2)], [(1, 2', 2)], [(1, 2'), (2,)]] sage: SPT = ShiftedPrimedTableaux(weight=(1,2), primed_diagonal=True) sage: list(SPT) [[(1, 2, 2)], [(1, 2', 2)], [(1', 2, 2)], [(1', 2', 2)], [(1, 2'), (2,)], [(1, 2'), (2',)], [(1', 2'), (2,)], [(1', 2'), (2',)]] sage: SPT = ShiftedPrimedTableaux([3,2], max_entry=2); SPT Shifted Primed Tableaux of shape [3, 2] and maximum entry 2 sage: list(SPT) [[(1, 1, 1), (2, 2)], [(1, 1, 2'), (2, 2)]] sage: SPT = ShiftedPrimedTableaux([3,2], max_entry=2, ....: primed_diagonal=True) sage: list(SPT) [[(1, 1, 1), (2, 2)], [(1, 1, 1), (2', 2)], [(1', 1, 1), (2, 2)], [(1', 1, 1), (2', 2)], [(1, 1, 2'), (2, 2)], [(1, 1, 2'), (2', 2)], [(1', 1, 2'), (2, 2)], [(1', 1, 2'), (2', 2)]] - >>> from sage.all import * >>> SPT = ShiftedPrimedTableaux(weight=(Integer(1),Integer(2),Integer(2)), shape=[Integer(3),Integer(2)]); SPT Shifted Primed Tableaux of weight (1, 2, 2) and shape [3, 2] >>> SPT.list() [[(1, 2, 2), (3, 3)], [(1, 2', 3'), (2, 3)], [(1, 2', 3'), (2, 3')], [(1, 2', 2), (3, 3)]] >>> SPT = ShiftedPrimedTableaux(weight=(Integer(1),Integer(2),Integer(2)), shape=[Integer(3),Integer(2)], ... primed_diagonal=True); SPT Shifted Primed Tableaux of weight (1, 2, 2) and shape [3, 2] >>> SPT.list() [[(1, 2, 2), (3, 3)], [(1, 2, 2), (3', 3)], [(1, 2', 3'), (2, 3)], [(1, 2', 3'), (2, 3')], [(1, 2', 3'), (2', 3)], [(1, 2', 3'), (2', 3')], [(1, 2', 2), (3, 3)], [(1, 2', 2), (3', 3)], [(1', 2, 2), (3, 3)], [(1', 2, 2), (3', 3)], [(1', 2', 3'), (2, 3)], [(1', 2', 3'), (2, 3')], [(1', 2', 3'), (2', 3)], [(1', 2', 3'), (2', 3')], [(1', 2', 2), (3, 3)], [(1', 2', 2), (3', 3)]] >>> SPT = ShiftedPrimedTableaux(weight=(Integer(1),Integer(2))); SPT Shifted Primed Tableaux of weight (1, 2) >>> list(SPT) [[(1, 2, 2)], [(1, 2', 2)], [(1, 2'), (2,)]] >>> SPT = ShiftedPrimedTableaux(weight=(Integer(1),Integer(2)), primed_diagonal=True) >>> list(SPT) [[(1, 2, 2)], [(1, 2', 2)], [(1', 2, 2)], [(1', 2', 2)], [(1, 2'), (2,)], [(1, 2'), (2',)], [(1', 2'), (2,)], [(1', 2'), (2',)]] >>> SPT = ShiftedPrimedTableaux([Integer(3),Integer(2)], max_entry=Integer(2)); SPT Shifted Primed Tableaux of shape [3, 2] and maximum entry 2 >>> list(SPT) [[(1, 1, 1), (2, 2)], [(1, 1, 2'), (2, 2)]] >>> SPT = ShiftedPrimedTableaux([Integer(3),Integer(2)], max_entry=Integer(2), ... primed_diagonal=True) >>> list(SPT) [[(1, 1, 1), (2, 2)], [(1, 1, 1), (2', 2)], [(1', 1, 1), (2, 2)], [(1', 1, 1), (2', 2)], [(1, 1, 2'), (2, 2)], [(1, 1, 2'), (2', 2)], [(1', 1, 2'), (2, 2)], [(1', 1, 2'), (2', 2)]] - See also - Element[source]¶
- alias of - ShiftedPrimedTableau
 
- class sage.combinat.shifted_primed_tableau.ShiftedPrimedTableaux_all(skew=None, primed_diagonal=False)[source]¶
- Bases: - ShiftedPrimedTableaux- The class of all shifted primed tableaux. 
- class sage.combinat.shifted_primed_tableau.ShiftedPrimedTableaux_shape(shape, max_entry=None, skew=None, primed_diagonal=False)[source]¶
- Bases: - ShiftedPrimedTableaux- Shifted primed tableaux of a fixed shape. - Shifted primed tableaux admit a type \(A_n\) classical crystal structure with highest weights corresponding to a given shape. - The list of module generators consists of all elements of the crystal with nonincreasing weight entries. - The crystal is constructed following operations described in [HPS2017] and [AO2018]. - The optional - primed_diagonalallows primed entries in the main diagonal of all the Shifted primed tableaux of a fixed shape. If the- max_entryis- Nonethen- max_entryis set to the total number of entries in the tableau if- primed_diagonalis- True.- EXAMPLES: - sage: ShiftedPrimedTableaux([4,3,1], max_entry=4) Shifted Primed Tableaux of shape [4, 3, 1] and maximum entry 4 sage: ShiftedPrimedTableaux([4,3,1], max_entry=4).cardinality() 384 - >>> from sage.all import * >>> ShiftedPrimedTableaux([Integer(4),Integer(3),Integer(1)], max_entry=Integer(4)) Shifted Primed Tableaux of shape [4, 3, 1] and maximum entry 4 >>> ShiftedPrimedTableaux([Integer(4),Integer(3),Integer(1)], max_entry=Integer(4)).cardinality() 384 - We compute some of the crystal structure: - sage: SPTC = crystals.ShiftedPrimedTableaux([3,2], 3) sage: T = SPTC.module_generators[-1] sage: T [(1, 1, 2'), (2, 3')] sage: T.f(2) [(1, 1, 3'), (2, 3')] sage: len(SPTC.module_generators) 7 sage: SPTC[0] [(1, 1, 1), (2, 2)] sage: SPTC.cardinality() 24 - >>> from sage.all import * >>> SPTC = crystals.ShiftedPrimedTableaux([Integer(3),Integer(2)], Integer(3)) >>> T = SPTC.module_generators[-Integer(1)] >>> T [(1, 1, 2'), (2, 3')] >>> T.f(Integer(2)) [(1, 1, 3'), (2, 3')] >>> len(SPTC.module_generators) 7 >>> SPTC[Integer(0)] [(1, 1, 1), (2, 2)] >>> SPTC.cardinality() 24 - We compare this implementation with the \(q(n)\)-crystal on (tensor products) of letters: - sage: tableau_crystal = crystals.ShiftedPrimedTableaux([4,1], 3) sage: tableau_digraph = tableau_crystal.digraph() sage: c = crystals.Letters(['Q', 3]) sage: tensor_crystal = tensor([c]*5) sage: u = tensor_crystal(c(1), c(1), c(1), c(2), c(1)) sage: subcrystal = tensor_crystal.subcrystal(generators=[u], ....: index_set=[1,2,-1]) sage: tensor_digraph = subcrystal.digraph() sage: tensor_digraph.is_isomorphic(tableau_digraph, edge_labels=True) True - >>> from sage.all import * >>> tableau_crystal = crystals.ShiftedPrimedTableaux([Integer(4),Integer(1)], Integer(3)) >>> tableau_digraph = tableau_crystal.digraph() >>> c = crystals.Letters(['Q', Integer(3)]) >>> tensor_crystal = tensor([c]*Integer(5)) >>> u = tensor_crystal(c(Integer(1)), c(Integer(1)), c(Integer(1)), c(Integer(2)), c(Integer(1))) >>> subcrystal = tensor_crystal.subcrystal(generators=[u], ... index_set=[Integer(1),Integer(2),-Integer(1)]) >>> tensor_digraph = subcrystal.digraph() >>> tensor_digraph.is_isomorphic(tableau_digraph, edge_labels=True) True - If we allow primed entries in the main diagonal: - sage: ShiftedPrimedTableaux([4,3,1], max_entry=4, ....: primed_diagonal=True) Shifted Primed Tableaux of shape [4, 3, 1] and maximum entry 4 sage: ShiftedPrimedTableaux([4,3,1], max_entry=4, ....: primed_diagonal=True).cardinality() 3072 sage: SPTC = ShiftedPrimedTableaux([3,2], max_entry=3, ....: primed_diagonal=True) sage: T = SPTC[-1] sage: T [(1', 2', 2), (3', 3)] sage: SPTC[0] [(1, 1, 1), (2, 2)] sage: SPTC.cardinality() 96 - >>> from sage.all import * >>> ShiftedPrimedTableaux([Integer(4),Integer(3),Integer(1)], max_entry=Integer(4), ... primed_diagonal=True) Shifted Primed Tableaux of shape [4, 3, 1] and maximum entry 4 >>> ShiftedPrimedTableaux([Integer(4),Integer(3),Integer(1)], max_entry=Integer(4), ... primed_diagonal=True).cardinality() 3072 >>> SPTC = ShiftedPrimedTableaux([Integer(3),Integer(2)], max_entry=Integer(3), ... primed_diagonal=True) >>> T = SPTC[-Integer(1)] >>> T [(1', 2', 2), (3', 3)] >>> SPTC[Integer(0)] [(1, 1, 1), (2, 2)] >>> SPTC.cardinality() 96 
- class sage.combinat.shifted_primed_tableau.ShiftedPrimedTableaux_weight(weight, skew=None, primed_diagonal=False)[source]¶
- Bases: - ShiftedPrimedTableaux- Shifted primed tableaux of fixed weight. - EXAMPLES: - sage: ShiftedPrimedTableaux(weight=(2,3,1)) Shifted Primed Tableaux of weight (2, 3, 1) sage: ShiftedPrimedTableaux(weight=(2,3,1)).cardinality() 17 sage: SPT = ShiftedPrimedTableaux(weight=(2,3,1), primed_diagonal=True) sage: SPT.cardinality() 64 sage: T = ShiftedPrimedTableaux(weight=(3,2), primed_diagonal=True) sage: T[:5] [[(1, 1, 1, 2, 2)], [(1, 1, 1, 2', 2)], [(1', 1, 1, 2, 2)], [(1', 1, 1, 2', 2)], [(1, 1, 1, 2), (2,)]] sage: T.cardinality() 16 - >>> from sage.all import * >>> ShiftedPrimedTableaux(weight=(Integer(2),Integer(3),Integer(1))) Shifted Primed Tableaux of weight (2, 3, 1) >>> ShiftedPrimedTableaux(weight=(Integer(2),Integer(3),Integer(1))).cardinality() 17 >>> SPT = ShiftedPrimedTableaux(weight=(Integer(2),Integer(3),Integer(1)), primed_diagonal=True) >>> SPT.cardinality() 64 >>> T = ShiftedPrimedTableaux(weight=(Integer(3),Integer(2)), primed_diagonal=True) >>> T[:Integer(5)] [[(1, 1, 1, 2, 2)], [(1, 1, 1, 2', 2)], [(1', 1, 1, 2, 2)], [(1', 1, 1, 2', 2)], [(1, 1, 1, 2), (2,)]] >>> T.cardinality() 16 
- class sage.combinat.shifted_primed_tableau.ShiftedPrimedTableaux_weight_shape(weight, shape, skew=None, primed_diagonal=False)[source]¶
- Bases: - ShiftedPrimedTableaux- Shifted primed tableaux of the fixed weight and shape. - EXAMPLES: - sage: ShiftedPrimedTableaux([4,2,1], weight=(2,3,2)) Shifted Primed Tableaux of weight (2, 3, 2) and shape [4, 2, 1] sage: ShiftedPrimedTableaux([4,2,1], weight=(2,3,2)).cardinality() 4 sage: T = ShiftedPrimedTableaux([4,2,1], weight=(2,3,2), ....: primed_diagonal=True) sage: T[:6] [[(1, 1, 2, 2), (2, 3'), (3,)], [(1, 1, 2, 2), (2, 3'), (3',)], [(1, 1, 2, 2), (2', 3'), (3,)], [(1, 1, 2, 2), (2', 3'), (3',)], [(1, 1, 2', 3), (2, 2), (3,)], [(1, 1, 2', 3), (2, 2), (3',)]] sage: T.cardinality() 32 - >>> from sage.all import * >>> ShiftedPrimedTableaux([Integer(4),Integer(2),Integer(1)], weight=(Integer(2),Integer(3),Integer(2))) Shifted Primed Tableaux of weight (2, 3, 2) and shape [4, 2, 1] >>> ShiftedPrimedTableaux([Integer(4),Integer(2),Integer(1)], weight=(Integer(2),Integer(3),Integer(2))).cardinality() 4 >>> T = ShiftedPrimedTableaux([Integer(4),Integer(2),Integer(1)], weight=(Integer(2),Integer(3),Integer(2)), ... primed_diagonal=True) >>> T[:Integer(6)] [[(1, 1, 2, 2), (2, 3'), (3,)], [(1, 1, 2, 2), (2, 3'), (3',)], [(1, 1, 2, 2), (2', 3'), (3,)], [(1, 1, 2, 2), (2', 3'), (3',)], [(1, 1, 2', 3), (2, 2), (3,)], [(1, 1, 2', 3), (2, 2), (3',)]] >>> T.cardinality() 32