Pieri factors - Combinatorics

Skip to content
Back to top
View this page
Edit this page

# Pieri factors

class sage.combinat.root_system.pieri_factors.PieriFactors

  Bases: `UniqueRepresentation`, `Parent`

  An abstract class for sets of Pieri factors, used for constructing Stanley symmetric functions. The set of Pieri factors for a given type can be realized as an order ideal of the Bruhat order poset generated by a certain set of maximal elements.

  See also

  - `WeylGroups.ParentMethods.pieri_factors()`

  - `WeylGroups.ElementMethods.stanley_symmetric_function()`

  EXAMPLES:

  Sage

      sage: W = WeylGroup(['A',4])
      sage: PF = W.pieri_factors()
      sage: PF.an_element().reduced_word()
      [4, 3, 2, 1]
      sage: Waff = WeylGroup(['A',4,1])
      sage: PFaff = Waff.pieri_factors()
      sage: Waff.from_reduced_word(PF.an_element().reduced_word()) in PFaff
      True

      sage: W = WeylGroup(['B',3,1])
      sage: PF = W.pieri_factors()
      sage: W.from_reduced_word([2,3,2]) in PF.elements()
      True
      sage: PF.cardinality()
      47

      sage: W = WeylGroup(['C',3,1])
      sage: PF = W.pieri_factors()
      sage: PF.generating_series()
      6*z^6 + 14*z^5 + 18*z^4 + 15*z^3 + 9*z^2 + 4*z + 1
      sage: sorted(w.reduced_word() for w in PF if w.length() == 2)
      [[0, 1], [1, 0], [1, 2], [2, 0], [2, 1],
      [2, 3], [3, 0], [3, 1], [3, 2]]

  Python

      >>> from sage.all import *
      >>> W = WeylGroup(['A',Integer(4)])
      >>> PF = W.pieri_factors()
      >>> PF.an_element().reduced_word()
      [4, 3, 2, 1]
      >>> Waff = WeylGroup(['A',Integer(4),Integer(1)])
      >>> PFaff = Waff.pieri_factors()
      >>> Waff.from_reduced_word(PF.an_element().reduced_word()) in PFaff
      True

      >>> W = WeylGroup(['B',Integer(3),Integer(1)])
      >>> PF = W.pieri_factors()
      >>> W.from_reduced_word([Integer(2),Integer(3),Integer(2)]) in PF.elements()
      True
      >>> PF.cardinality()
      47

      >>> W = WeylGroup(['C',Integer(3),Integer(1)])
      >>> PF = W.pieri_factors()
      >>> PF.generating_series()
      6*z^6 + 14*z^5 + 18*z^4 + 15*z^3 + 9*z^2 + 4*z + 1
      >>> sorted(w.reduced_word() for w in PF if w.length() == Integer(2))
      [[0, 1], [1, 0], [1, 2], [2, 0], [2, 1],
      [2, 3], [3, 0], [3, 1], [3, 2]]

  REFERENCES:

  - [FoSta1994]

  - [BH1994]

  - [Lam1996]

  - [Lam2008]

  - [LSS2009]

  - [Pon2010]

  default_weight()

    Return the function \(i\mapsto z^i\), where \(z\) is the generator of `QQ['z']`.

    EXAMPLES:

    Sage

        sage: W = WeylGroup(["A", 3, 1])
        sage: weight = W.pieri_factors().default_weight()
        sage: weight(1)
        z
        sage: weight(5)
        z^5

    Python

        >>> from sage.all import *
        >>> W = WeylGroup(["A", Integer(3), Integer(1)])
        >>> weight = W.pieri_factors().default_weight()
        >>> weight(Integer(1))
        z
        >>> weight(Integer(5))
        z^5

  elements()

    Return the elements of `self`.

    Those are constructed as the elements below the maximal elements of `self` in Bruhat order.

    OUTPUT: a `RecursivelyEnumeratedSet_generic` object

    EXAMPLES:

    Sage

        sage: PF = WeylGroup(['A',3]).pieri_factors()
        sage: sorted(w.reduced_word() for w in PF.elements())
        [[], [1], [2], [2, 1], [3], [3, 1], [3, 2], [3, 2, 1]]

    Python

        >>> from sage.all import *
        >>> PF = WeylGroup(['A',Integer(3)]).pieri_factors()
        >>> sorted(w.reduced_word() for w in PF.elements())
        [[], [1], [2], [2, 1], [3], [3, 1], [3, 2], [3, 2, 1]]

    See also

    `maximal_elements()`

    Todo

    Possibly remove this method and instead have this class inherit from `RecursivelyEnumeratedSet_generic`.

  generating_series(weight=None)

    Return a length generating series for the elements of `self`.

    EXAMPLES:

    Sage

        sage: PF = WeylGroup(['C',3,1]).pieri_factors()
        sage: PF.generating_series()
        6*z^6 + 14*z^5 + 18*z^4 + 15*z^3 + 9*z^2 + 4*z + 1

        sage: PF = WeylGroup(['B',4]).pieri_factors()
        sage: PF.generating_series()
        z^7 + 6*z^6 + 14*z^5 + 18*z^4 + 15*z^3 + 9*z^2 + 4*z + 1

    Python

        >>> from sage.all import *
        >>> PF = WeylGroup(['C',Integer(3),Integer(1)]).pieri_factors()
        >>> PF.generating_series()
        6*z^6 + 14*z^5 + 18*z^4 + 15*z^3 + 9*z^2 + 4*z + 1

        >>> PF = WeylGroup(['B',Integer(4)]).pieri_factors()
        >>> PF.generating_series()
        z^7 + 6*z^6 + 14*z^5 + 18*z^4 + 15*z^3 + 9*z^2 + 4*z + 1

  max_length()

    Return the maximal length of a Pieri factor.

    EXAMPLES:

    In type A and A affine, this is \(n\):

    Sage

        sage: WeylGroup(['A',5]).pieri_factors().max_length()
        5
        sage: WeylGroup(['A',5,1]).pieri_factors().max_length()
        5

    Python

        >>> from sage.all import *
        >>> WeylGroup(['A',Integer(5)]).pieri_factors().max_length()
        5
        >>> WeylGroup(['A',Integer(5),Integer(1)]).pieri_factors().max_length()
        5

    In type B and B affine, this is \(2n-1\):

    Sage

        sage: WeylGroup(['B',5,1]).pieri_factors().max_length()
        9
        sage: WeylGroup(['B',5]).pieri_factors().max_length()
        9

    [Python]

        >>> from sage.all import *
        >>> WeylGroup(['B',Integer(5),Integer(1)]).pieri_factors().max_length()
        9
        >>> WeylGroup(['B',Integer(5)]).pieri_factors().max_length()
        9

    In type C affine this is \(2n\):

    Sage

        sage: WeylGroup(['C',5,1]).pieri_factors().max_length()
        10

    Python

        >>> from sage.all import *
        >>> WeylGroup(['C',Integer(5),Integer(1)]).pieri_factors().max_length()
        10

    In type D affine this is \(2n-2\):

    Sage

        sage: WeylGroup(['D',5,1]).pieri_factors().max_length()
        8

    [Python]

        >>> from sage.all import *
        >>> WeylGroup(['D',Integer(5),Integer(1)]).pieri_factors().max_length()
        8

class sage.combinat.root_system.pieri_factors.PieriFactors_affine_type

  Bases: `PieriFactors`

  maximal_elements()

    Return the maximal elements of `self` with respect to Bruhat order.

    The current implementation is via a conjectural type-free formula. Use `maximal_elements_combinatorial()` for proven type-specific implementations. To compare type-free and type-specific (combinatorial) implementations, use method `_test_maximal_elements()`.

    EXAMPLES:

    Sage

        sage: W = WeylGroup(['A',4,1])
        sage: PF = W.pieri_factors()
        sage: sorted([w.reduced_word() for w in PF.maximal_elements()], key=str)
        [[0, 4, 3, 2], [1, 0, 4, 3], [2, 1, 0, 4], [3, 2, 1, 0], [4, 3, 2, 1]]

        sage: W = WeylGroup(RootSystem(["C",3,1]).weight_space())
        sage: PF = W.pieri_factors()
        sage: sorted([w.reduced_word() for w in PF.maximal_elements()], key=str)
        [[0, 1, 2, 3, 2, 1], [1, 0, 1, 2, 3, 2], [1, 2, 3, 2, 1, 0],
         [2, 1, 0, 1, 2, 3], [2, 3, 2, 1, 0, 1], [3, 2, 1, 0, 1, 2]]

        sage: W = WeylGroup(RootSystem(["B",3,1]).weight_space())
        sage: PF = W.pieri_factors()
        sage: sorted([w.reduced_word() for w in PF.maximal_elements()], key=str)
        [[0, 2, 3, 2, 0], [1, 0, 2, 3, 2], [1, 2, 3, 2, 1],
         [2, 1, 0, 2, 3], [2, 3, 2, 1, 0], [3, 2, 1, 0, 2]]

        sage: W = WeylGroup(['D',4,1])
        sage: PF = W.pieri_factors()
        sage: sorted([w.reduced_word() for w in PF.maximal_elements()], key=str)
        [[0, 2, 4, 3, 2, 0], [1, 0, 2, 4, 3, 2], [1, 2, 4, 3, 2, 1],
         [2, 1, 0, 2, 4, 3], [2, 4, 3, 2, 1, 0], [3, 2, 1, 0, 2, 3],
         [4, 2, 1, 0, 2, 4], [4, 3, 2, 1, 0, 2]]

    Python

        >>> from sage.all import *
        >>> W = WeylGroup(['A',Integer(4),Integer(1)])
        >>> PF = W.pieri_factors()
        >>> sorted([w.reduced_word() for w in PF.maximal_elements()], key=str)
        [[0, 4, 3, 2], [1, 0, 4, 3], [2, 1, 0, 4], [3, 2, 1, 0], [4, 3, 2, 1]]

        >>> W = WeylGroup(RootSystem(["C",Integer(3),Integer(1)]).weight_space())
        >>> PF = W.pieri_factors()
        >>> sorted([w.reduced_word() for w in PF.maximal_elements()], key=str)
        [[0, 1, 2, 3, 2, 1], [1, 0, 1, 2, 3, 2], [1, 2, 3, 2, 1, 0],
         [2, 1, 0, 1, 2, 3], [2, 3, 2, 1, 0, 1], [3, 2, 1, 0, 1, 2]]

        >>> W = WeylGroup(RootSystem(["B",Integer(3),Integer(1)]).weight_space())
        >>> PF = W.pieri_factors()
        >>> sorted([w.reduced_word() for w in PF.maximal_elements()], key=str)
        [[0, 2, 3, 2, 0], [1, 0, 2, 3, 2], [1, 2, 3, 2, 1],
         [2, 1, 0, 2, 3], [2, 3, 2, 1, 0], [3, 2, 1, 0, 2]]

        >>> W = WeylGroup(['D',Integer(4),Integer(1)])
        >>> PF = W.pieri_factors()
        >>> sorted([w.reduced_word() for w in PF.maximal_elements()], key=str)
        [[0, 2, 4, 3, 2, 0], [1, 0, 2, 4, 3, 2], [1, 2, 4, 3, 2, 1],
         [2, 1, 0, 2, 4, 3], [2, 4, 3, 2, 1, 0], [3, 2, 1, 0, 2, 3],
         [4, 2, 1, 0, 2, 4], [4, 3, 2, 1, 0, 2]]

class sage.combinat.root_system.pieri_factors.PieriFactors_finite_type

  Bases: `PieriFactors`

  The Pieri factors of finite type A are the restriction of the Pieri factors of affine type A to finite permutations (under the canonical embedding of finite type A into the affine Weyl group), and the Pieri factors of finite type B are the restriction of the Pieri factors of affine type C. The finite type D Pieri factors are (weakly) conjectured to be the restriction of the Pieri factors of affine type D.

  maximal_elements()

    The current algorithm uses the fact that the maximal Pieri factors of affine type A,B,C, or D either contain a finite Weyl group element, or contain an affine Weyl group element whose reflection by \(s_0\) gets a finite Weyl group element, and that either of these finite group elements will serve as a maximal element for finite Pieri factors. A better algorithm is desirable.

    EXAMPLES:

    Sage

        sage: PF = WeylGroup(['A',5]).pieri_factors()
        sage: [v.reduced_word() for v in PF.maximal_elements()]
        [[5, 4, 3, 2, 1]]

        sage: WeylGroup(['B',4]).pieri_factors().maximal_elements()
        [
        [-1  0  0  0]
        [ 0  1  0  0]
        [ 0  0  1  0]
        [ 0  0  0  1]
        ]

    Python

        >>> from sage.all import *
        >>> PF = WeylGroup(['A',Integer(5)]).pieri_factors()
        >>> [v.reduced_word() for v in PF.maximal_elements()]
        [[5, 4, 3, 2, 1]]

        >>> WeylGroup(['B',Integer(4)]).pieri_factors().maximal_elements()
        [
        [-1  0  0  0]
        [ 0  1  0  0]
        [ 0  0  1  0]
        [ 0  0  0  1]
        ]

class sage.combinat.root_system.pieri_factors.PieriFactors_type_A(W)

  Bases: `PieriFactors_finite_type`

  The set of Pieri factors for finite type A.

  This is the set of elements of the Weyl group that have a reduced word that is strictly decreasing. This may also be viewed as the restriction of affine type A Pieri factors to finite Weyl group elements.

  maximal_elements_combinatorial()

    Return the maximal Pieri factors, using the type A combinatorial description.

    EXAMPLES:

    Sage

        sage: W = WeylGroup(['A',4])
        sage: PF = W.pieri_factors()
        sage: PF.maximal_elements_combinatorial()[0].reduced_word()
        [4, 3, 2, 1]

    Python

        >>> from sage.all import *
        >>> W = WeylGroup(['A',Integer(4)])
        >>> PF = W.pieri_factors()
        >>> PF.maximal_elements_combinatorial()[Integer(0)].reduced_word()
        [4, 3, 2, 1]

  stanley_symm_poly_weight(w)

    EXAMPLES:

    Sage

        sage: W = WeylGroup(['A',4])
        sage: PF = W.pieri_factors()
        sage: PF.stanley_symm_poly_weight(W.from_reduced_word([3,1]))
        0

    Python

        >>> from sage.all import *
        >>> W = WeylGroup(['A',Integer(4)])
        >>> PF = W.pieri_factors()
        >>> PF.stanley_symm_poly_weight(W.from_reduced_word([Integer(3),Integer(1)]))
        0

class sage.combinat.root_system.pieri_factors.PieriFactors_type_A_affine(W, min_length, max_length, min_support, max_support)

  Bases: `PieriFactors_affine_type`

  The set of Pieri factors for type A affine, that is the set of elements of the Weyl Group which are cyclically decreasing.

  Those are used for constructing (affine) Stanley symmetric functions.

  The Pieri factors are in bijection with the proper subsets of the `index_set`. The bijection is given by the support. Namely, let \(f\) be a Pieri factor, and \(red\) a reduced word for \(f\). No simple reflection appears twice in red, and the support \(S\) of \(red\) (that is the \(i\) such that \(s_i\) appears in \(red\)) does not depend on the reduced word).

  cardinality()

    Return the cardinality of `self`.

    EXAMPLES:

    Sage

        sage: WeylGroup(["A", 3, 1]).pieri_factors().cardinality()
        15

    Python

        >>> from sage.all import *
        >>> WeylGroup(["A", Integer(3), Integer(1)]).pieri_factors().cardinality()
        15

  generating_series(weight=None)

    Return a length generating series for the elements of `self`.

    EXAMPLES:

    Sage

        sage: W = WeylGroup(["A", 3, 1])
        sage: W.pieri_factors().cardinality()
        15
        sage: W.pieri_factors().generating_series()
        4*z^3 + 6*z^2 + 4*z + 1

    Python

        >>> from sage.all import *
        >>> W = WeylGroup(["A", Integer(3), Integer(1)])
        >>> W.pieri_factors().cardinality()
        15
        >>> W.pieri_factors().generating_series()
        4*z^3 + 6*z^2 + 4*z + 1

  maximal_elements_combinatorial()

    Return the maximal Pieri factors, using the affine type A combinatorial description.

    EXAMPLES:

    Sage

        sage: W = WeylGroup(['A',4,1])
        sage: PF = W.pieri_factors()
        sage: [w.reduced_word() for w in PF.maximal_elements_combinatorial()]
        [[3, 2, 1, 0], [2, 1, 0, 4], [1, 0, 4, 3], [0, 4, 3, 2], [4, 3, 2, 1]]

    Python

        >>> from sage.all import *
        >>> W = WeylGroup(['A',Integer(4),Integer(1)])
        >>> PF = W.pieri_factors()
        >>> [w.reduced_word() for w in PF.maximal_elements_combinatorial()]
        [[3, 2, 1, 0], [2, 1, 0, 4], [1, 0, 4, 3], [0, 4, 3, 2], [4, 3, 2, 1]]

  stanley_symm_poly_weight(w)

    Weight used in computing (affine) Stanley symmetric polynomials for affine type A.

    EXAMPLES:

    Sage

        sage: W = WeylGroup(['A',5,1])
        sage: PF = W.pieri_factors()
        sage: PF.stanley_symm_poly_weight(W.one())
        0
        sage: PF.stanley_symm_poly_weight(W.from_reduced_word([5,4,2,1,0]))
        0

    Python

        >>> from sage.all import *
        >>> W = WeylGroup(['A',Integer(5),Integer(1)])
        >>> PF = W.pieri_factors()
        >>> PF.stanley_symm_poly_weight(W.one())
        0
        >>> PF.stanley_symm_poly_weight(W.from_reduced_word([Integer(5),Integer(4),Integer(2),Integer(1),Integer(0)]))
        0

  subset(length)

    Return the subset of the elements of `self` of length `length`.

    INPUT:

    - `length` – nonnegative integer

    EXAMPLES:

    Sage

        sage: PF = WeylGroup(["A", 3, 1]).pieri_factors(); PF
        Pieri factors for Weyl Group of type ['A', 3, 1] (as a matrix group acting on the root space)
        sage: PF3 = PF.subset(length = 2)
        sage: PF3.cardinality()
        6

    Python

        >>> from sage.all import *
        >>> PF = WeylGroup(["A", Integer(3), Integer(1)]).pieri_factors(); PF
        Pieri factors for Weyl Group of type ['A', 3, 1] (as a matrix group acting on the root space)
        >>> PF3 = PF.subset(length = Integer(2))
        >>> PF3.cardinality()
        6

class sage.combinat.root_system.pieri_factors.PieriFactors_type_B(W)

  Bases: `PieriFactors_finite_type`

  The type B finite Pieri factors are realized as the set of elements that have a reduced word that is a subword of \(12...(n-1)n(n-1)...21\). They are the restriction of the type C affine Pieri factors to the set of finite Weyl group elements under the usual embedding.

  maximal_elements_combinatorial()

    Return the maximal Pieri factors, using the type B combinatorial description.

    EXAMPLES:

    Sage

        sage: PF = WeylGroup(['B',4]).pieri_factors()
        sage: PF.maximal_elements_combinatorial()[0].reduced_word()
        [1, 2, 3, 4, 3, 2, 1]

    Python

        >>> from sage.all import *
        >>> PF = WeylGroup(['B',Integer(4)]).pieri_factors()
        >>> PF.maximal_elements_combinatorial()[Integer(0)].reduced_word()
        [1, 2, 3, 4, 3, 2, 1]

  stanley_symm_poly_weight(w)

    Weight used in computing Stanley symmetric polynomials of type \(B\).

    The weight for finite type B is the number of components of the support of an element minus the number of occurrences of \(n\) in a reduced word.

    EXAMPLES:

    Sage

        sage: W = WeylGroup(['B',5])
        sage: PF = W.pieri_factors()
        sage: PF.stanley_symm_poly_weight(W.from_reduced_word([3,1,5]))
        2
        sage: PF.stanley_symm_poly_weight(W.from_reduced_word([3,4,5]))
        0
        sage: PF.stanley_symm_poly_weight(W.from_reduced_word([1,2,3,4,5,4]))
        0

    Python

        >>> from sage.all import *
        >>> W = WeylGroup(['B',Integer(5)])
        >>> PF = W.pieri_factors()
        >>> PF.stanley_symm_poly_weight(W.from_reduced_word([Integer(3),Integer(1),Integer(5)]))
        2
        >>> PF.stanley_symm_poly_weight(W.from_reduced_word([Integer(3),Integer(4),Integer(5)]))
        0
        >>> PF.stanley_symm_poly_weight(W.from_reduced_word([Integer(1),Integer(2),Integer(3),Integer(4),Integer(5),Integer(4)]))
        0

class sage.combinat.root_system.pieri_factors.PieriFactors_type_B_affine(W)

  Bases: `PieriFactors_affine_type`

  The type B affine Pieri factors are realized as the order ideal (in Bruhat order) generated by the following elements:

  - cyclic rotations of the element with reduced word \(234...(n-1)n(n-1)...3210\), except for \(123...n...320\) and \(023...n...321\).

  - \(123...(n-1)n(n-1)...321\)

  - \(023...(n-1)n(n-1)...320\)

  EXAMPLES:

  Sage

      sage: W = WeylGroup(['B',4,1])
      sage: PF = W.pieri_factors()
      sage: W.from_reduced_word([2,3,4,3,2,1,0]) in PF.maximal_elements()
      True
      sage: W.from_reduced_word([0,2,3,4,3,2,1]) in PF.maximal_elements()
      False
      sage: W.from_reduced_word([1,0,2,3,4,3,2]) in PF.maximal_elements()
      True
      sage: W.from_reduced_word([0,2,3,4,3,2,0]) in PF.maximal_elements()
      True
      sage: W.from_reduced_word([0,2,0]) in PF
      True

  Python

      >>> from sage.all import *
      >>> W = WeylGroup(['B',Integer(4),Integer(1)])
      >>> PF = W.pieri_factors()
      >>> W.from_reduced_word([Integer(2),Integer(3),Integer(4),Integer(3),Integer(2),Integer(1),Integer(0)]) in PF.maximal_elements()
      True
      >>> W.from_reduced_word([Integer(0),Integer(2),Integer(3),Integer(4),Integer(3),Integer(2),Integer(1)]) in PF.maximal_elements()
      False
      >>> W.from_reduced_word([Integer(1),Integer(0),Integer(2),Integer(3),Integer(4),Integer(3),Integer(2)]) in PF.maximal_elements()
      True
      >>> W.from_reduced_word([Integer(0),Integer(2),Integer(3),Integer(4),Integer(3),Integer(2),Integer(0)]) in PF.maximal_elements()
      True
      >>> W.from_reduced_word([Integer(0),Integer(2),Integer(0)]) in PF
      True

  maximal_elements_combinatorial()

    Return the maximal Pieri factors, using the affine type B combinatorial description.

    EXAMPLES:

    Sage

        sage: W = WeylGroup(['B',4,1])
        sage: [u.reduced_word() for u in W.pieri_factors().maximal_elements_combinatorial()]
        [[1, 0, 2, 3, 4, 3, 2], [2, 1, 0, 2, 3, 4, 3], [3, 2, 1, 0, 2, 3, 4], [4, 3, 2, 1, 0, 2, 3], [3, 4, 3, 2, 1, 0, 2], [2, 3, 4, 3, 2, 1, 0], [1, 2, 3, 4, 3, 2, 1], [0, 2, 3, 4, 3, 2, 0]]

    Python

        >>> from sage.all import *
        >>> W = WeylGroup(['B',Integer(4),Integer(1)])
        >>> [u.reduced_word() for u in W.pieri_factors().maximal_elements_combinatorial()]
        [[1, 0, 2, 3, 4, 3, 2], [2, 1, 0, 2, 3, 4, 3], [3, 2, 1, 0, 2, 3, 4], [4, 3, 2, 1, 0, 2, 3], [3, 4, 3, 2, 1, 0, 2], [2, 3, 4, 3, 2, 1, 0], [1, 2, 3, 4, 3, 2, 1], [0, 2, 3, 4, 3, 2, 0]]

  stanley_symm_poly_weight(w)

    Return the weight of a Pieri factor to be used in the definition of Stanley symmetric functions.

    For type B, this weight involves the number of components of the complement of the support of an element, where we consider 0 and 1 to be one node – if 1 is in the support, then we pretend 0 in the support, and vice versa. We also consider 0 and 1 to be one node for the purpose of counting components of the complement (as if the Dynkin diagram were that of type C). Let n be the rank of the affine Weyl group in question (if type `['B',k,1]` then we have n = k+1). Let `chi(v.length() < n-1)` be the indicator function that is 1 if the length of v is smaller than n-1, and 0 if the length of v is greater than or equal to n-1. If we call `c'(v)` the number of components of the complement of the support of v, then the type B weight is given by `weight = c'(v) - chi(v.length() < n-1)`.

    EXAMPLES:

    Sage

        sage: W = WeylGroup(['B',5,1])
        sage: PF = W.pieri_factors()
        sage: PF.stanley_symm_poly_weight(W.from_reduced_word([0,3]))
        1
        sage: PF.stanley_symm_poly_weight(W.from_reduced_word([0,1,3]))
        1
        sage: PF.stanley_symm_poly_weight(W.from_reduced_word([2,3]))
        1
        sage: PF.stanley_symm_poly_weight(W.from_reduced_word([2,3,4,5]))
        0
        sage: PF.stanley_symm_poly_weight(W.from_reduced_word([0,5]))
        0
        sage: PF.stanley_symm_poly_weight(W.from_reduced_word([2,4,5,4,3,0]))
        -1
        sage: PF.stanley_symm_poly_weight(W.from_reduced_word([4,5,4,3,0]))
        0

    Python

        >>> from sage.all import *
        >>> W = WeylGroup(['B',Integer(5),Integer(1)])
        >>> PF = W.pieri_factors()
        >>> PF.stanley_symm_poly_weight(W.from_reduced_word([Integer(0),Integer(3)]))
        1
        >>> PF.stanley_symm_poly_weight(W.from_reduced_word([Integer(0),Integer(1),Integer(3)]))
        1
        >>> PF.stanley_symm_poly_weight(W.from_reduced_word([Integer(2),Integer(3)]))
        1
        >>> PF.stanley_symm_poly_weight(W.from_reduced_word([Integer(2),Integer(3),Integer(4),Integer(5)]))
        0
        >>> PF.stanley_symm_poly_weight(W.from_reduced_word([Integer(0),Integer(5)]))
        0
        >>> PF.stanley_symm_poly_weight(W.from_reduced_word([Integer(2),Integer(4),Integer(5),Integer(4),Integer(3),Integer(0)]))
        -1
        >>> PF.stanley_symm_poly_weight(W.from_reduced_word([Integer(4),Integer(5),Integer(4),Integer(3),Integer(0)]))
        0

class sage.combinat.root_system.pieri_factors.PieriFactors_type_C_affine(W)

  Bases: `PieriFactors_affine_type`

  The type C affine Pieri factors are realized as the order ideal (in Bruhat order) generated by cyclic rotations of the element with unique reduced word \(123...(n-1)n(n-1)...3210\).

  EXAMPLES:

  Sage

      sage: W = WeylGroup(['C',3,1])
      sage: PF = W.pieri_factors()
      sage: sorted([u.reduced_word() for u in PF.maximal_elements()], key=str)
      [[0, 1, 2, 3, 2, 1], [1, 0, 1, 2, 3, 2], [1, 2, 3, 2, 1, 0],
       [2, 1, 0, 1, 2, 3], [2, 3, 2, 1, 0, 1], [3, 2, 1, 0, 1, 2]]

  Python

      >>> from sage.all import *
      >>> W = WeylGroup(['C',Integer(3),Integer(1)])
      >>> PF = W.pieri_factors()
      >>> sorted([u.reduced_word() for u in PF.maximal_elements()], key=str)
      [[0, 1, 2, 3, 2, 1], [1, 0, 1, 2, 3, 2], [1, 2, 3, 2, 1, 0],
       [2, 1, 0, 1, 2, 3], [2, 3, 2, 1, 0, 1], [3, 2, 1, 0, 1, 2]]

  maximal_elements_combinatorial()

    Return the maximal Pieri factors, using the affine type C combinatorial description.

    EXAMPLES:

    Sage

        sage: PF = WeylGroup(['C',3,1]).pieri_factors()
        sage: [w.reduced_word() for w in PF.maximal_elements_combinatorial()]
        [[0, 1, 2, 3, 2, 1], [1, 0, 1, 2, 3, 2], [2, 1, 0, 1, 2, 3], [3, 2, 1, 0, 1, 2], [2, 3, 2, 1, 0, 1], [1, 2, 3, 2, 1, 0]]

    Python

        >>> from sage.all import *
        >>> PF = WeylGroup(['C',Integer(3),Integer(1)]).pieri_factors()
        >>> [w.reduced_word() for w in PF.maximal_elements_combinatorial()]
        [[0, 1, 2, 3, 2, 1], [1, 0, 1, 2, 3, 2], [2, 1, 0, 1, 2, 3], [3, 2, 1, 0, 1, 2], [2, 3, 2, 1, 0, 1], [1, 2, 3, 2, 1, 0]]

  stanley_symm_poly_weight(w)

    Return the weight of a Pieri factor to be used in the definition of Stanley symmetric functions.

    For type C, this weight is the number of connected components of the support (the indices appearing in a reduced word) of an element.

    EXAMPLES:

    Sage

        sage: W = WeylGroup(['C',5,1])
        sage: PF = W.pieri_factors()
        sage: PF.stanley_symm_poly_weight(W.from_reduced_word([1,3]))
        2
        sage: PF.stanley_symm_poly_weight(W.from_reduced_word([1,3,2,0]))
        1
        sage: PF.stanley_symm_poly_weight(W.from_reduced_word([5,3,0]))
        3
        sage: PF.stanley_symm_poly_weight(W.one())
        0

    Python

        >>> from sage.all import *
        >>> W = WeylGroup(['C',Integer(5),Integer(1)])
        >>> PF = W.pieri_factors()
        >>> PF.stanley_symm_poly_weight(W.from_reduced_word([Integer(1),Integer(3)]))
        2
        >>> PF.stanley_symm_poly_weight(W.from_reduced_word([Integer(1),Integer(3),Integer(2),Integer(0)]))
        1
        >>> PF.stanley_symm_poly_weight(W.from_reduced_word([Integer(5),Integer(3),Integer(0)]))
        3
        >>> PF.stanley_symm_poly_weight(W.one())
        0

class sage.combinat.root_system.pieri_factors.PieriFactors_type_D_affine(W)

  Bases: `PieriFactors_affine_type`

  The type D affine Pieri factors are realized as the order ideal (in Bruhat order) generated by the following elements:

  > - cyclic rotations of the element with reduced word \(234...(n-2)n(n-1)(n-2)...3210\) such that 1 and 0 are always adjacent and (n-1) and n are always adjacent.

  > - \(123...(n-2)n(n-1)(n-2)...321\)

  > - \(023...(n-2)n(n-1)(n-2)...320\)

  > - \(n(n-2)...2102...(n-2)n\)

  > - \((n-1)(n-2)...2102...(n-2)(n-1)\)

  EXAMPLES:

  Sage

      sage: W = WeylGroup(['D',5,1])
      sage: PF = W.pieri_factors()
      sage: W.from_reduced_word([3,2,1,0]) in PF
      True
      sage: W.from_reduced_word([0,3,2,1]) in PF
      False
      sage: W.from_reduced_word([0,1,3,2]) in PF
      True
      sage: W.from_reduced_word([2,0,1,3]) in PF
      True
      sage: sorted([u.reduced_word() for u in PF.maximal_elements()], key=str)
      [[0, 2, 3, 5, 4, 3, 2, 0], [1, 0, 2, 3, 5, 4, 3, 2], [1, 2, 3, 5, 4, 3, 2, 1],
       [2, 1, 0, 2, 3, 5, 4, 3], [2, 3, 5, 4, 3, 2, 1, 0], [3, 2, 1, 0, 2, 3, 5, 4],
       [3, 5, 4, 3, 2, 1, 0, 2], [4, 3, 2, 1, 0, 2, 3, 4], [5, 3, 2, 1, 0, 2, 3, 5],
       [5, 4, 3, 2, 1, 0, 2, 3]]

  Python

      >>> from sage.all import *
      >>> W = WeylGroup(['D',Integer(5),Integer(1)])
      >>> PF = W.pieri_factors()
      >>> W.from_reduced_word([Integer(3),Integer(2),Integer(1),Integer(0)]) in PF
      True
      >>> W.from_reduced_word([Integer(0),Integer(3),Integer(2),Integer(1)]) in PF
      False
      >>> W.from_reduced_word([Integer(0),Integer(1),Integer(3),Integer(2)]) in PF
      True
      >>> W.from_reduced_word([Integer(2),Integer(0),Integer(1),Integer(3)]) in PF
      True
      >>> sorted([u.reduced_word() for u in PF.maximal_elements()], key=str)
      [[0, 2, 3, 5, 4, 3, 2, 0], [1, 0, 2, 3, 5, 4, 3, 2], [1, 2, 3, 5, 4, 3, 2, 1],
       [2, 1, 0, 2, 3, 5, 4, 3], [2, 3, 5, 4, 3, 2, 1, 0], [3, 2, 1, 0, 2, 3, 5, 4],
       [3, 5, 4, 3, 2, 1, 0, 2], [4, 3, 2, 1, 0, 2, 3, 4], [5, 3, 2, 1, 0, 2, 3, 5],
       [5, 4, 3, 2, 1, 0, 2, 3]]

  maximal_elements_combinatorial()

    Return the maximal Pieri factors, using the affine type D combinatorial description.

    EXAMPLES:

    Sage

        sage: W = WeylGroup(['D',5,1])
        sage: PF = W.pieri_factors()
        sage: set(PF.maximal_elements_combinatorial()) == set(PF.maximal_elements())
        True

    Python

        >>> from sage.all import *
        >>> W = WeylGroup(['D',Integer(5),Integer(1)])
        >>> PF = W.pieri_factors()
        >>> set(PF.maximal_elements_combinatorial()) == set(PF.maximal_elements())
        True

  stanley_symm_poly_weight(w)

    Return the weight of \(w\), to be used in the definition of Stanley symmetric functions.

    INPUT:

    - `w` – a Pieri factor for this type

    For type \(D\), this weight involves the number of components of the complement of the support of an element, where we consider \(0\) and \(1\) to be one node – if \(1\) is in the support, then we pretend \(0\) in the support, and vice versa. Similarly with \(n-1\) and \(n\). We also consider \(0\) and \(1\), \(n-1\) and \(n\) to be one node for the purpose of counting components of the complement (as if the Dynkin diagram were that of type \(C\)).

    Type D Stanley symmetric polynomial weights are still conjectural. The given weight comes from conditions on elements of the affine Fomin-Stanley subalgebra, but work is needed to show this weight is correct for affine Stanley symmetric functions – see [LSS2009, Pon2010]_ for details.

    EXAMPLES:

    Sage

        sage: W = WeylGroup(['D', 5, 1])
        sage: PF = W.pieri_factors()
        sage: PF.stanley_symm_poly_weight(W.from_reduced_word([5,2,1]))
        0
        sage: PF.stanley_symm_poly_weight(W.from_reduced_word([5,2,1,0]))
        0
        sage: PF.stanley_symm_poly_weight(W.from_reduced_word([5,2]))
        1
        sage: PF.stanley_symm_poly_weight(W.from_reduced_word([]))
        0

        sage: W = WeylGroup(['D',7,1])
        sage: PF = W.pieri_factors()
        sage: PF.stanley_symm_poly_weight(W.from_reduced_word([2,4,6]))
        2

    Python

        >>> from sage.all import *
        >>> W = WeylGroup(['D', Integer(5), Integer(1)])
        >>> PF = W.pieri_factors()
        >>> PF.stanley_symm_poly_weight(W.from_reduced_word([Integer(5),Integer(2),Integer(1)]))
        0
        >>> PF.stanley_symm_poly_weight(W.from_reduced_word([Integer(5),Integer(2),Integer(1),Integer(0)]))
        0
        >>> PF.stanley_symm_poly_weight(W.from_reduced_word([Integer(5),Integer(2)]))
        1
        >>> PF.stanley_symm_poly_weight(W.from_reduced_word([]))
        0

        >>> W = WeylGroup(['D',Integer(7),Integer(1)])
        >>> PF = W.pieri_factors()
        >>> PF.stanley_symm_poly_weight(W.from_reduced_word([Integer(2),Integer(4),Integer(6)]))
        2