### Navigation

- index
- modules |
- next |
- previous |
- Combinatorics »
- Crystals »

# Kirillov-Reshetikhin Crystals

class `sage.combinat.crystals.kirillov_reshetikhin.``KR_type_A`(cartan_type, r, s)

  Bases: `sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinCrystalFromPromotion`

  Class of Kirillov-Reshetikhin crystals of type \(A_n^{(1)}\).

  EXAMPLES:

      sage: K = crystals.KirillovReshetikhin(['A',3,1], 2,2)
      sage: b = K(rows=[[1,2],[2,4]])
      sage: b.f(0)
      [[1, 1], [2, 2]]

  `classical_decomposition`()

    Specifies the classical crystal underlying the KR crystal of type A.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['A',3,1], 2,2)
        sage: K.classical_decomposition()
        The crystal of tableaux of type ['A', 3] and shape(s) [[2, 2]]

  `dynkin_diagram_automorphism`(i)

    Specifies the Dynkin diagram automorphism underlying the promotion action on the crystal elements. The automorphism needs to map node 0 to some other Dynkin node.

    For type A we use the Dynkin diagram automorphism which maps i to i+1 mod n+1, where n is the rank.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['A',3,1], 2,2)
        sage: K.dynkin_diagram_automorphism(0)
        1
        sage: K.dynkin_diagram_automorphism(3)
        0

  `promotion`()

    Specifies the promotion operator used to construct the affine type A crystal. For type A this corresponds to the Dynkin diagram automorphism which maps i to i+1 mod n+1, where n is the rank.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['A',3,1], 2,2)
        sage: b = K.classical_decomposition()(rows=[[1,2],[3,4]])
        sage: K.promotion()(b)
        [[1, 3], [2, 4]]

  `promotion_inverse`()

    Specifies the inverse promotion operator used to construct the affine type A crystal. For type A this corresponds to the Dynkin diagram automorphism which maps i to i-1 mod n+1, where n is the rank.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['A',3,1], 2,2)
        sage: b = K.classical_decomposition()(rows=[[1,3],[2,4]])
        sage: K.promotion_inverse()(b)
        [[1, 2], [3, 4]]
        sage: b = K.classical_decomposition()(rows=[[1,2],[3,3]])
        sage: K.promotion_inverse()(K.promotion()(b))
        [[1, 2], [3, 3]]

class `sage.combinat.crystals.kirillov_reshetikhin.``KR_type_A2`(cartan_type, r, s, dual=None)

  Bases: `sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinGenericCrystal`

  Class of Kirillov-Reshetikhin crystals \(B^{r,s}\) of type \(A_{2n}^{(2)}\) for \(1\le r \le n\) in the realization with classical subalgebra \(B_n\). The Cartan type in this case is inputted as the dual of \(A_{2n}^{(2)}\).

  This is an alternative implementation to `KR_type_box` which uses the classical decomposition into type \(C_n\) crystals.

  EXAMPLES:

      sage: C = CartanType(['A',4,2]).dual()
      sage: K = sage.combinat.crystals.kirillov_reshetikhin.KR_type_A2(C, 1, 1)
      sage: K
      Kirillov-Reshetikhin crystal of type ['BC', 2, 2]^* with (r,s)=(1,1)
      sage: b = K(rows=[[-1]])
      sage: b.f(0)
      [[1]]
      sage: b.e(0)

  We can now check whether the two KR crystals of type \(A_4^{(2)}\) (namely the KR crystal and its dual construction) are isomorphic up to relabelling of the edges:

      sage: C = CartanType(['A',4,2])
      sage: K = crystals.KirillovReshetikhin(C,1,1)
      sage: Kdual = crystals.KirillovReshetikhin(C.dual(),1,1)
      sage: G = K.digraph()
      sage: Gdual = Kdual.digraph()
      sage: f = {0:2, 1:1, 2:0}
      sage: Gnew = DiGraph(); Gnew.add_vertices(Gdual.vertices()); Gnew.add_edges([(u,v,f[i]) for (u,v,i) in Gdual.edges()])
      sage: G.is_isomorphic(Gnew, edge_labels = True)
      True

  `Element`

    alias of `KR_type_A2Element`

  `ambient_crystal`()

    Returns the ambient crystal \(B^{r,s}\) of type \(B_{n+1}^{(1)}\) associated to the Kirillov-Reshetikhin crystal of type \(A_{2n}^{(2)}\) dual. This ambient crystal is used to construct the zero arrows.

    EXAMPLES:

        sage: C = CartanType(['A',4,2]).dual()
        sage: K = sage.combinat.crystals.kirillov_reshetikhin.KR_type_A2(C, 2, 3)
        sage: K.ambient_crystal()
        Kirillov-Reshetikhin crystal of type ['B', 3, 1] with (r,s)=(2,3)

  `ambient_dict_pm_diagrams`()

    Gives a dictionary of all self-dual \(\pm\) diagrams for the ambient crystal. Their key is their inner shape.

    EXAMPLES:

        sage: C = CartanType(['A',4,2]).dual()
        sage: K = sage.combinat.crystals.kirillov_reshetikhin.KR_type_A2(C, 1, 1)
        sage: K.ambient_dict_pm_diagrams()
        {[1]: [[0, 0], [1]]}
        sage: K = sage.combinat.crystals.kirillov_reshetikhin.KR_type_A2(C, 1, 2)
        sage: K.ambient_dict_pm_diagrams()
        {[]: [[1, 1], [0]], [2]: [[0, 0], [2]]}
        sage: K = sage.combinat.crystals.kirillov_reshetikhin.KR_type_A2(C, 2, 2)
        sage: K.ambient_dict_pm_diagrams()
        {[]: [[1, 1], [0, 0], [0]],
         [2]: [[0, 0], [1, 1], [0]],
         [2, 2]: [[0, 0], [0, 0], [2]]}

  `ambient_highest_weight_dict`()

    Gives a dictionary of all \({2,...,n+1}\)-highest weight vectors in the ambient crystal. Their key is the inner shape of their corresponding \(\pm\) diagram, or equivalently, their \({2,...,n+1}\) weight.

    EXAMPLES:

        sage: C = CartanType(['A',4,2]).dual()
        sage: K = sage.combinat.crystals.kirillov_reshetikhin.KR_type_A2(C, 1, 2)
        sage: K.ambient_highest_weight_dict()
        {[]: [[1, -1]], [2]: [[2, 2]]}

  `classical_decomposition`()

    Specifies the classical crystal underlying the Kirillov-Reshetikhin crystal of type \(A_{2n}^{(2)}\) with \(B_n\) as classical subdiagram.

    It is given by \(B^{r,s} \cong \bigoplus_\Lambda B(\Lambda)\) where \(B(\Lambda)\) is a highest weight crystal of type \(B_n\) of highest weight \(\Lambda\). The sum is over all weights \(\Lambda\) obtained from a rectangle of width \(s\) and height \(r\) by removing horizontal dominoes. Here we identify the fundamental weight \(\Lambda_i\) with a column of height \(i\).

    EXAMPLES:

        sage: C = CartanType(['A',4,2]).dual()
        sage: K = sage.combinat.crystals.kirillov_reshetikhin.KR_type_A2(C, 2, 2)
        sage: K.classical_decomposition()
        The crystal of tableaux of type ['B', 2] and shape(s) [[], [2], [2, 2]]

  `from_ambient_crystal`()

    Provides a map from the ambient crystal of type \(B_{n+1}^{(1)}\) to the Kirillov-Reshetikhin crystal of type \(A_{2n}^{(2)}\).

    Note that this map is only well-defined on type \(A_{2n}^{(2)}\) elements that are in the image under `to_ambient_crystal()`.

    EXAMPLES:

        sage: C = CartanType(['A',4,2]).dual()
        sage: K = sage.combinat.crystals.kirillov_reshetikhin.KR_type_A2(C, 1, 2)
        sage: b = K.ambient_crystal()(rows=[[2,2]])
        sage: K.from_ambient_crystal()(b)
        [[1, 1]]

  `highest_weight_dict`()

    Gives a dictionary of the classical highest weight vectors of self. Their key is their shape.

    EXAMPLES:

        sage: C = CartanType(['A',4,2]).dual()
        sage: K = sage.combinat.crystals.kirillov_reshetikhin.KR_type_A2(C, 1, 2)
        sage: K.highest_weight_dict()
        {[]: [], [2]: [[1, 1]]}

  `to_ambient_crystal`()

    Provides a map from the Kirillov-Reshetikhin crystal of type \(A_{2n}^{(2)}\) to the ambient crystal of type \(B_{n+1}^{(1)}\).

    EXAMPLES:

        sage: C = CartanType(['A',4,2]).dual()
        sage: K = sage.combinat.crystals.kirillov_reshetikhin.KR_type_A2(C, 1, 2)
        sage: b=K(rows=[[1,1]])
        sage: K.to_ambient_crystal()(b)
        [[2, 2]]
        sage: K = sage.combinat.crystals.kirillov_reshetikhin.KR_type_A2(C, 2, 2)
        sage: b=K(rows=[[1,1]])
        sage: K.to_ambient_crystal()(b)
        [[1, 2], [2, -1]]
        sage: K.to_ambient_crystal()(b).parent()
        Kirillov-Reshetikhin crystal of type ['B', 3, 1] with (r,s)=(2,2)

class `sage.combinat.crystals.kirillov_reshetikhin.``KR_type_A2Element`

  Bases: `sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinGenericCrystalElement`

  Class for the elements in the Kirillov-Reshetikhin crystals \(B^{r,s}\) of type \(A_{2n}^{(2)}\) for \(r<n\) with underlying classcial algebra \(B_n\).

  EXAMPLES:

      sage: C = CartanType(['A',4,2]).dual()
      sage: K = sage.combinat.crystals.kirillov_reshetikhin.KR_type_A2(C, 1, 2)
      sage: type(K.module_generators[0])
      <class 'sage.combinat.crystals.kirillov_reshetikhin.KR_type_A2_with_category.element_class'>

  `e0`()

    Gives \(e_0\) on self by mapping self to the ambient crystal, calculating \(e_1 e_0\) there and pulling the element back.

    EXAMPLES:

        sage: C = CartanType(['A',4,2]).dual()
        sage: K = sage.combinat.crystals.kirillov_reshetikhin.KR_type_A2(C, 1, 1)
        sage: b = K(rows=[[1]])
        sage: b.e(0) # indirect doctest
        [[-1]]

  `epsilon0`()

    Calculates \(\epsilon_0\) of self by mapping the element to the ambient crystal and calculating \(\epsilon_1\) there.

    EXAMPLES:

        sage: C = CartanType(['A',4,2]).dual()
        sage: K = sage.combinat.crystals.kirillov_reshetikhin.KR_type_A2(C, 1, 1)
        sage: b=K(rows=[[1]])
        sage: b.epsilon(0) # indirect doctest
        1

  `f0`()

    Gives \(f_0\) on self by mapping self to the ambient crystal, calculating \(f_1 f_0\) there and pulling the element back.

    EXAMPLES:

        sage: C = CartanType(['A',4,2]).dual()
        sage: K = sage.combinat.crystals.kirillov_reshetikhin.KR_type_A2(C, 1, 1)
        sage: b = K(rows=[[-1]])
        sage: b.f(0) # indirect doctest
        [[1]]

  `phi0`()

    Calculates \(\phi_0\) of self by mapping the element to the ambient crystal and calculating \(\phi_1\) there.

    EXAMPLES:

        sage: C = CartanType(['A',4,2]).dual()
        sage: K = sage.combinat.crystals.kirillov_reshetikhin.KR_type_A2(C, 1, 1)
        sage: b=K(rows=[[-1]])
        sage: b.phi(0) # indirect doctest
        1

class `sage.combinat.crystals.kirillov_reshetikhin.``KR_type_Bn`(cartan_type, r, s, dual=None)

  Bases: `sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinGenericCrystal`

  Class of Kirillov-Reshetikhin crystals \(B^{n,s}\) of type \(B_{n}^{(1)}\).

  EXAMPLES:

      sage: K = crystals.KirillovReshetikhin(['B',3,1],3,2)
      sage: K
      Kirillov-Reshetikhin crystal of type ['B', 3, 1] with (r,s)=(3,2)
      sage: b = K(rows=[[1],[2],[3]])
      sage: b.f(0)
      sage: b.e(0)
      [[3]]

      sage: K = crystals.KirillovReshetikhin(['B',3,1],3,2)
      sage: [b.weight() for b in K if b.is_highest_weight([1,2,3])]
      [-Lambda[0] + Lambda[1], -2*Lambda[0] + 2*Lambda[3]]
      sage: [b.weight() for b in K if b.is_highest_weight([0,2,3])]
      [Lambda[0] - Lambda[1], -2*Lambda[1] + 2*Lambda[3]]

  `Element`

    alias of `KR_type_BnElement`

  `ambient_crystal`()

    Returns the ambient crystal \(B^{n,s}\) of type \(A_{2n-1}^{(2)}\) associated to the Kirillov-Reshetikhin crystal; see Lemma 4.2 of reference [4]. This ambient crystal is used to construct the zero arrows.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['B',3,1],3,2)
        sage: K.ambient_crystal()
        Kirillov-Reshetikhin crystal of type ['B', 3, 1]^* with (r,s)=(3,2)

  `ambient_highest_weight_dict`()

    Gives a dictionary of the classical highest weight vectors of the ambient crystal of self. Their key is their shape.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['B',3,1],3,2)
        sage: K.ambient_highest_weight_dict()
        {(2,): [[1, 1]], (2, 1, 1): [[1, 1], [2], [3]], (2, 2, 2): [[1, 1], [2, 2], [3, 3]]}

        sage: K = crystals.KirillovReshetikhin(['B',3,1],3,3)
        sage: K.ambient_highest_weight_dict()
        {(3,): [[1, 1, 1]],
         (3, 1, 1): [[1, 1, 1], [2], [3]],
         (3, 2, 2): [[1, 1, 1], [2, 2], [3, 3]],
         (3, 3, 3): [[1, 1, 1], [2, 2, 2], [3, 3, 3]]}

  `classical_decomposition`()

    Specifies the classical crystal underlying the Kirillov-Reshetikhin crystal \(B^{n,s}\) of type \(B_n^{(1)}\).

    It is the same as for \(r<n\), given by \(B^{n,s} \cong \bigoplus_\Lambda B(\Lambda)\) where \(\Lambda\) are weights obtained from a rectangle of width \(s/2\) and height \(n\) by removing horizontal dominoes. Here we identify the fundamental weight \(\Lambda_i\) with a column of height \(i\) for \(i<n\) and a column of width \(1/2\) for \(i=n\).

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['B',3,1], 3, 2)
        sage: K.classical_decomposition()
        The crystal of tableaux of type ['B', 3] and shape(s) [[1], [1, 1, 1]]
        sage: K = crystals.KirillovReshetikhin(['B',3,1], 3, 3)
        sage: K.classical_decomposition()
        The crystal of tableaux of type ['B', 3] and shape(s) [[3/2, 1/2, 1/2], [3/2, 3/2, 3/2]]

  `from_ambient_crystal`()

    Provides a map from the ambient crystal of type \(A_{2n-1}^{(2)}\) to the Kirillov-Reshetikhin crystal `self`.

    Note that this map is only well-defined on elements that are in the image under `to_ambient_crystal()`.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['B',3,1],3,1)
        sage: [b == K.from_ambient_crystal()(K.to_ambient_crystal()(b)) for b in K]
        [True, True, True, True, True, True, True, True]
        sage: b = K.ambient_crystal()(rows=[[1],[2],[-3]])
        sage: K.from_ambient_crystal()(b)
        [++-, []]

  `highest_weight_dict`()

    Gives a dictionary of the classical highest weight vectors of self. Their key is 2 times their shape.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['B',3,1],3,2)
        sage: K.highest_weight_dict()
        {(2,): [[1]], (2, 2, 2): [[1], [2], [3]]}
        sage: K = crystals.KirillovReshetikhin(['B',3,1],3,3)
        sage: K.highest_weight_dict()
        {(3, 1, 1): [+++, [[1]]], (3, 3, 3): [+++, [[1], [2], [3]]]}

  `similarity_factor`()

    Sets the similarity factor used to map to the ambient crystal.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['B',3,1],3,2)
        sage: K.similarity_factor()
        {1: 2, 2: 2, 3: 1}

  `to_ambient_crystal`()

    Provides a map from self to the ambient crystal of type \(A_{2n-1}^{(2)}\).

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['B',3,1],3,1)
        sage: [K.to_ambient_crystal()(b) for b in K]
        [[[1], [2], [3]], [[1], [2], [-3]], [[1], [3], [-2]], [[2], [3], [-1]], [[1], [-3], [-2]],
        [[2], [-3], [-1]], [[3], [-2], [-1]], [[-3], [-2], [-1]]]

class `sage.combinat.crystals.kirillov_reshetikhin.``KR_type_BnElement`

  Bases: `sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinGenericCrystalElement`

  Class for the elements in the Kirillov-Reshetikhin crystals \(B^{n,s}\) of type \(B_n^{(1)}\).

  EXAMPLES:

      sage: K=crystals.KirillovReshetikhin(['B',3,1],3,2)
      sage: type(K.module_generators[0])
      <class 'sage.combinat.crystals.kirillov_reshetikhin.KR_type_Bn_with_category.element_class'>

  `e0`()

    Gives \(e_0\) on self by mapping self to the ambient crystal, calculating \(e_0\) there and pulling the element back.

    EXAMPLES:

        sage: K=crystals.KirillovReshetikhin(['B',3,1],3,1)
        sage: b = K.module_generators[0]
        sage: b.e(0) # indirect doctest
        [--+, []]

  `epsilon0`()

    Calculates \(\epsilon_0\) of self by mapping the element to the ambient crystal and calculating \(\epsilon_0\) there.

    EXAMPLES:

        sage: K=crystals.KirillovReshetikhin(['B',3,1],3,1)
        sage: b = K.module_generators[0]
        sage: b.epsilon(0) # indirect doctest
        1

  `f0`()

    Gives \(f_0\) on self by mapping self to the ambient crystal, calculating \(f_0\) there and pulling the element back.

    EXAMPLES:

        sage: K=crystals.KirillovReshetikhin(['B',3,1],3,1)
        sage: b = K.module_generators[0]
        sage: b.f(0) # indirect doctest

  `phi0`()

    Calculates \(\phi_0\) of self by mapping the element to the ambient crystal and calculating \(\phi_0\) there.

    EXAMPLES:

        sage: K=crystals.KirillovReshetikhin(['B',3,1],3,1)
        sage: b = K.module_generators[0]
        sage: b.phi(0) # indirect doctest
        0

class `sage.combinat.crystals.kirillov_reshetikhin.``KR_type_C`(cartan_type, r, s, dual=None)

  Bases: `sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinGenericCrystal`

  Class of Kirillov-Reshetikhin crystals \(B^{r,s}\) of type \(C_n^{(1)}\) for \(r<n\).

  EXAMPLES:

      sage: K = crystals.KirillovReshetikhin(['C',2,1], 1,2)
      sage: K
      Kirillov-Reshetikhin crystal of type ['C', 2, 1] with (r,s)=(1,2)
      sage: b = K(rows=[])
      sage: b.f(0)
      [[1, 1]]
      sage: b.e(0)
      [[-1, -1]]

  `Element`

    alias of `KR_type_CElement`

  `ambient_crystal`()

    Returns the ambient crystal \(B^{r,s}\) of type \(A_{2n+1}^{(2)}\) associated to the Kirillov-Reshetikhin crystal of type \(C_n^{(1)}\). This ambient crystal is used to construct the zero arrows.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['C',3,1], 2,3)
        sage: K.ambient_crystal()
        Kirillov-Reshetikhin crystal of type ['B', 4, 1]^* with (r,s)=(2,3)

  `ambient_dict_pm_diagrams`()

    Gives a dictionary of all self-dual \(\pm\) diagrams for the ambient crystal. Their key is their inner shape.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['C',2,1], 1,2)
        sage: K.ambient_dict_pm_diagrams()
        {[]: [[1, 1], [0]], [2]: [[0, 0], [2]]}
        sage: K = crystals.KirillovReshetikhin(['C',3,1], 2,2)
        sage: K.ambient_dict_pm_diagrams()
        {[]: [[1, 1], [0, 0], [0]],
         [2]: [[0, 0], [1, 1], [0]],
         [2, 2]: [[0, 0], [0, 0], [2]]}
        sage: K = crystals.KirillovReshetikhin(['C',3,1], 2,3)
        sage: K.ambient_dict_pm_diagrams()
        {[1, 1]: [[1, 1], [0, 0], [1]],
         [3, 1]: [[0, 0], [1, 1], [1]],
         [3, 3]: [[0, 0], [0, 0], [3]]}

  `ambient_highest_weight_dict`()

    Gives a dictionary of all \({2,...,n+1}\)-highest weight vectors in the ambient crystal. Their key is the inner shape of their corresponding \(\pm\) diagram, or equivalently, their \({2,...,n+1}\) weight.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['C',3,1], 2,2)
        sage: K.ambient_highest_weight_dict()
        {[]: [[2], [-2]], [2]: [[1, 2], [2, -1]], [2, 2]: [[2, 2], [3, 3]]}

  `classical_decomposition`()

    Specifies the classical crystal underlying the Kirillov-Reshetikhin crystal of type \(C_n^{(1)}\).

    It is given by \(B^{r,s} \cong \bigoplus_\Lambda B(\Lambda)\) where \(\Lambda\) are weights obtained from a rectangle of width \(s\) and height \(r\) by removing horizontal dominoes. Here we identify the fundamental weight \(\Lambda_i\) with a column of height \(i\).

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['C',3,1], 2,2)
        sage: K.classical_decomposition()
        The crystal of tableaux of type ['C', 3] and shape(s) [[], [2], [2, 2]]

  `from_ambient_crystal`()

    Provides a map from the ambient crystal of type \(A_{2n+1}^{(2)}\) to the Kirillov-Reshetikhin crystal of type \(C_n^{(1)}\).

    Note that this map is only well-defined on type \(C_n^{(1)}\) elements that are in the image under `to_ambient_crystal()`.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['C',3,1], 2,2)
        sage: b=K.ambient_crystal()(rows=[[2,2],[3,3]])
        sage: K.from_ambient_crystal()(b)
        [[1, 1], [2, 2]]

  `highest_weight_dict`()

    Gives a dictionary of the classical highest weight vectors of self. Their key is their shape.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['C',3,1], 2,2)
        sage: K.highest_weight_dict()
        {[]: [], [2]: [[1, 1]], [2, 2]: [[1, 1], [2, 2]]}

  `to_ambient_crystal`()

    Provides a map from the Kirillov-Reshetikhin crystal of type \(C_n^{(1)}\) to the ambient crystal of type \(A_{2n+1}^{(2)}\).

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['C',3,1], 2,2)
        sage: b=K(rows=[[1,1]])
        sage: K.to_ambient_crystal()(b)
        [[1, 2], [2, -1]]
        sage: b=K(rows=[])
        sage: K.to_ambient_crystal()(b)
        [[2], [-2]]
        sage: K.to_ambient_crystal()(b).parent()
        Kirillov-Reshetikhin crystal of type ['B', 4, 1]^* with (r,s)=(2,2)

class `sage.combinat.crystals.kirillov_reshetikhin.``KR_type_CElement`

  Bases: `sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinGenericCrystalElement`

  Class for the elements in the Kirillov-Reshetikhin crystals \(B^{r,s}\) of type \(C_n^{(1)}\) for \(r<n\).

  EXAMPLES:

      sage: K=crystals.KirillovReshetikhin(['C',3,1],1,2)
      sage: type(K.module_generators[0])
      <class 'sage.combinat.crystals.kirillov_reshetikhin.KR_type_C_with_category.element_class'>

  `e0`()

    Gives \(e_0\) on self by mapping self to the ambient crystal, calculating \(e_1 e_0\) there and pulling the element back.

    EXAMPLES:

        sage: K=crystals.KirillovReshetikhin(['C',3,1],1,2)
        sage: b = K(rows=[])
        sage: b.e(0) # indirect doctest
        [[-1, -1]]

  `epsilon0`()

    Calculates \(\epsilon_0\) of self by mapping the element to the ambient crystal and calculating \(\epsilon_1\) there.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['C',2,1], 1,2)
        sage: b=K(rows=[[1,1]])
        sage: b.epsilon(0) # indirect doctest
        2

  `f0`()

    Gives \(f_0\) on self by mapping self to the ambient crystal, calculating \(f_1 f_0\) there and pulling the element back.

    EXAMPLES:

        sage: K=crystals.KirillovReshetikhin(['C',3,1],1,2)
        sage: b = K(rows=[])
        sage: b.f(0) # indirect doctest
        [[1, 1]]

  `phi0`()

    Calculates \(\phi_0\) of self by mapping the element to the ambient crystal and calculating \(\phi_1\) there.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['C',2,1], 1,2)
        sage: b=K(rows=[[-1,-1]])
        sage: b.phi(0) # indirect doctest
        2

class `sage.combinat.crystals.kirillov_reshetikhin.``KR_type_Cn`(cartan_type, r, s, dual=None)

  Bases: `sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinGenericCrystal`

  Class of Kirillov-Reshetikhin crystals \(B^{n,s}\) of type \(C_n^{(1)}\).

  EXAMPLES:

      sage: K = crystals.KirillovReshetikhin(['C',3,1],3,1)
      sage: [[b,b.f(0)] for b in K]
      [[[[1], [2], [3]], None], [[[1], [2], [-3]], None], [[[1], [3], [-3]], None],
      [[[2], [3], [-3]], None], [[[1], [3], [-2]], None], [[[2], [3], [-2]], None],
      [[[2], [3], [-1]], [[1], [2], [3]]], [[[1], [-3], [-2]], None], [[[2], [-3], [-2]], None],
      [[[2], [-3], [-1]], [[1], [2], [-3]]], [[[3], [-3], [-2]], None], [[[3], [-3], [-1]],
      [[1], [3], [-3]]], [[[3], [-2], [-1]], [[1], [3], [-2]]], [[[-3], [-2], [-1]], [[1], [-3], [-2]]]]

  `Element`

    alias of `KR_type_CnElement`

  `classical_decomposition`()

    Specifies the classical crystal underlying the Kirillov-Reshetikhin crystal \(B^{n,s}\) of type \(C_n^{(1)}\). It is given by \(B^{n,s} \cong B(s \Lambda_n)\).

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['C',3,1],3,2)
        sage: K.classical_decomposition()
        The crystal of tableaux of type ['C', 3] and shape(s) [[2, 2, 2]]

  `from_highest_weight_vector_to_pm_diagram`(b)

    This gives the bijection between an element b in the classical decomposition of the KR crystal that is \({2,3,..,n}\)-highest weight and \(\pm\) diagrams.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['C',3,1],3,2)
        sage: T = K.classical_decomposition()
        sage: b = T(rows=[[2, 2], [3, 3], [-3, -1]])
        sage: pm = K.from_highest_weight_vector_to_pm_diagram(b); pm
        [[0, 0], [1, 0], [0, 1], [0]]
        sage: pm.pp()
        .  .
        .  +
        -  -

        sage: hw = [ b for b in T if all(b.epsilon(i)==0 for i in [2,3]) ]
        sage: all(K.from_pm_diagram_to_highest_weight_vector(K.from_highest_weight_vector_to_pm_diagram(b)) == b for b in hw)
        True

  `from_pm_diagram_to_highest_weight_vector`(pm)

    This gives the bijection between a \(\pm\) diagram and an element b in the classical decomposition of the KR crystal that is {2,3,..,n}-highest weight.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['C',3,1],3,2)
        sage: pm = sage.combinat.crystals.kirillov_reshetikhin.PMDiagram([[0, 0], [1, 0], [0, 1], [0]])
        sage: K.from_pm_diagram_to_highest_weight_vector(pm)
        [[2, 2], [3, 3], [-3, -1]]

class `sage.combinat.crystals.kirillov_reshetikhin.``KR_type_CnElement`

  Bases: `sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinGenericCrystalElement`

  Class for the elements in the Kirillov-Reshetikhin crystals \(B^{n,s}\) of type \(C_n^{(1)}\).

  EXAMPLES:

      sage: K=crystals.KirillovReshetikhin(['C',3,1],3,2)
      sage: type(K.module_generators[0])
      <class 'sage.combinat.crystals.kirillov_reshetikhin.KR_type_Cn_with_category.element_class'>

  `e0`()

    Gives \(e_0\) on self by going to the \(\pm\)-diagram corresponding to the \({2,...,n}\)-highest weight vector in the component of \(self\), then applying [Definition 6.1, 4], and pulling back from \(\pm\)-diagrams.

    EXAMPLES:

        sage: K=crystals.KirillovReshetikhin(['C',3,1],3,2)
        sage: b = K.module_generators[0]
        sage: b.e(0) # indirect doctest
        [[1, 2], [2, 3], [3, -1]]
        sage: b = K(rows=[[1,2],[2,3],[3,-1]])
        sage: b.e(0)
        [[2, 2], [3, 3], [-1, -1]]
        sage: b=K(rows=[[1, -3], [3, -2], [-3, -1]])
        sage: b.e(0)
        [[3, -3], [-3, -2], [-1, -1]]

  `epsilon0`()

    Calculates \(\epsilon_0\) of self using Lemma 6.1 of [4].

    EXAMPLES:

        sage: K=crystals.KirillovReshetikhin(['C',3,1],3,1)
        sage: b = K.module_generators[0]
        sage: b.epsilon(0) # indirect doctest
        1

  `f0`()

    Gives \(e_0\) on self by going to the \(\pm\)-diagram corresponding to the \({2,...,n}\)-highest weight vector in the component of \(self\), then applying [Definition 6.1, 4], and pulling back from \(\pm\)-diagrams.

    EXAMPLES:

        sage: K=crystals.KirillovReshetikhin(['C',3,1],3,1)
        sage: b = K.module_generators[0]
        sage: b.f(0) # indirect doctest

  `phi0`()

    Calculates \(\phi_0\) of self.

    EXAMPLES:

        sage: K=crystals.KirillovReshetikhin(['C',3,1],3,1)
        sage: b = K.module_generators[0]
        sage: b.phi(0) # indirect doctest
        0

class `sage.combinat.crystals.kirillov_reshetikhin.``KR_type_Dn_twisted`(cartan_type, r, s, dual=None)

  Bases: `sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinGenericCrystal`

  Class of Kirillov-Reshetikhin crystals \(B^{n,s}\) of type \(D_{n+1}^{(2)}\).

  EXAMPLES:

      sage: K = crystals.KirillovReshetikhin(['D',4,2],3,1)
      sage: [[b,b.f(0)] for b in K]
      [[[+++, []], None], [[++-, []], None], [[+-+, []], None], [[-++, []],
      [+++, []]], [[+--, []], None], [[-+-, []], [++-, []]], [[--+, []], [+-+, []]],
      [[---, []], [+--, []]]]

  `Element`

    alias of `KR_type_Dn_twistedElement`

  `classical_decomposition`()

    Specifies the classical crystal underlying the Kirillov-Reshetikhin crystal \(B^{n,s}\) of type \(D_{n+1}^{(2)}\). It is given by \(B^{n,s} \cong B(s \Lambda_n)\).

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['D',4,2],3,1)
        sage: K.classical_decomposition()
        The crystal of tableaux of type ['B', 3] and shape(s) [[1/2, 1/2, 1/2]]
        sage: K = crystals.KirillovReshetikhin(['D',4,2],3,2)
        sage: K.classical_decomposition()
        The crystal of tableaux of type ['B', 3] and shape(s) [[1, 1, 1]]

  `from_highest_weight_vector_to_pm_diagram`(b)

    This gives the bijection between an element b in the classical decomposition of the KR crystal that is \({2,3,..,n}\)-highest weight and \(\pm\) diagrams.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['D',4,2],3,1)
        sage: T = K.classical_decomposition()
        sage: hw = [ b for b in T if all(b.epsilon(i)==0 for i in [2,3]) ]
        sage: [K.from_highest_weight_vector_to_pm_diagram(b) for b in hw]
        [[[0, 0], [0, 0], [1, 0], [0]], [[0, 0], [0, 0], [0, 1], [0]]]

        sage: K = crystals.KirillovReshetikhin(['D',4,2],3,2)
        sage: T = K.classical_decomposition()
        sage: hw = [ b for b in T if all(b.epsilon(i)==0 for i in [2,3]) ]
        sage: [K.from_highest_weight_vector_to_pm_diagram(b) for b in hw]
        [[[0, 0], [0, 0], [2, 0], [0]], [[0, 0], [0, 0], [0, 0], [2]], [[0, 0], [2, 0], [0, 0], [0]],
        [[0, 0], [0, 0], [0, 2], [0]]]

    Note that, since the classical decomposition of this crystal is of type \(B_n\), there can be (at most one) entry \(0\) in the \({2,3,...,n}\)-highest weight elements at height \(n\). In the following implementation this is realized as an empty column of height \(n\) since this uniquely specifies the existence of the \(0\):

    EXAMPLES:

        sage: b = hw[1]
        sage: pm = K.from_highest_weight_vector_to_pm_diagram(b)
        sage: pm.pp()
        .  .
        .  .
        .  .

    TESTS:

        sage: all(K.from_pm_diagram_to_highest_weight_vector(K.from_highest_weight_vector_to_pm_diagram(b)) == b for b in hw)
        True
        sage: K = crystals.KirillovReshetikhin(['D',4,2],3,2)
        sage: T = K.classical_decomposition()
        sage: hw = [ b for b in T if all(b.epsilon(i)==0 for i in [2,3]) ]
        sage: all(K.from_pm_diagram_to_highest_weight_vector(K.from_highest_weight_vector_to_pm_diagram(b)) == b for b in hw)
        True
        sage: K = crystals.KirillovReshetikhin(['D',4,2],3,3)
        sage: T = K.classical_decomposition()
        sage: hw = [ b for b in T if all(b.epsilon(i)==0 for i in [2,3]) ]
        sage: all(K.from_pm_diagram_to_highest_weight_vector(K.from_highest_weight_vector_to_pm_diagram(b)) == b for b in hw)
        True

  `from_pm_diagram_to_highest_weight_vector`(pm)

    This gives the bijection between a \(\pm\) diagram and an element b in the classical decomposition of the KR crystal that is {2,3,..,n}-highest weight.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['D',4,2],3,2)
        sage: pm = sage.combinat.crystals.kirillov_reshetikhin.PMDiagram([[0, 0], [0, 0], [0, 0], [2]])
        sage: K.from_pm_diagram_to_highest_weight_vector(pm)
        [[2], [3], [0]]

class `sage.combinat.crystals.kirillov_reshetikhin.``KR_type_Dn_twistedElement`

  Bases: `sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinGenericCrystalElement`

  Class for the elements in the Kirillov-Reshetikhin crystals \(B^{n,s}\) of type \(D_{n+1}^{(2)}\).

  EXAMPLES:

      sage: K=crystals.KirillovReshetikhin(['D',4,2],3,2)
      sage: type(K.module_generators[0])
      <class 'sage.combinat.crystals.kirillov_reshetikhin.KR_type_Dn_twisted_with_category.element_class'>

  `e0`()

    Gives \(e_0\) on self by going to the \(\pm\)-diagram corresponding to the \({2,...,n}\)-highest weight vector in the component of \(self\), then applying [Definition 6.2, 4], and pulling back from \(\pm\)-diagrams.

    EXAMPLES:

        sage: K=crystals.KirillovReshetikhin(['D',4,2],3,3)
        sage: b = K.module_generators[0]
        sage: b.e(0) # indirect doctest
        [+++, [[2], [3], [0]]]

  `epsilon0`()

    Calculates \(\epsilon_0\) of self using Lemma 6.2 of [4].

    EXAMPLES:

        sage: K=crystals.KirillovReshetikhin(['D',4,2],3,1)
        sage: b = K.module_generators[0]
        sage: b.epsilon(0) # indirect doctest
        1

  `f0`()

    Gives \(e_0\) on self by going to the \(\pm\)-diagram corresponding to the \({2,...,n}\)-highest weight vector in the component of \(self\), then applying [Definition 6.2, 4], and pulling back from \(\pm\)-diagrams.

    EXAMPLES:

        sage: K=crystals.KirillovReshetikhin(['D',4,2],3,2)
        sage: b = K.module_generators[0]
        sage: b.f(0) # indirect doctest

  `phi0`()

    Calculates \(\phi_0\) of self.

    EXAMPLES:

        sage: K=crystals.KirillovReshetikhin(['D',4,2],3,1)
        sage: b = K.module_generators[0]
        sage: b.phi(0) # indirect doctest
        0

class `sage.combinat.crystals.kirillov_reshetikhin.``KR_type_E6`(cartan_type, r, s)

  Bases: `sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinCrystalFromPromotion`

  Class of Kirillov-Reshetikhin crystals of type \(E_6^{(1)}\) for \(r=1,2,6\).

  EXAMPLES:

      sage: K = crystals.KirillovReshetikhin(['E',6,1],2,1)
      sage: K.module_generator().e(0)
      []
      sage: K.module_generator().e(0).f(0)
      [[(2, -1), (1,)]]
      sage: K = crystals.KirillovReshetikhin(['E',6,1], 1,1)
      sage: b = K.module_generator()
      sage: b
      [(1,)]
      sage: b.e(0)
      [(-2, 1)]
      sage: b = [t for t in K if t.epsilon(1) == 1 and t.phi(3) == 1 and t.phi(2) == 0 and t.epsilon(2) == 0][0]
      sage: b
      [(-1, 3)]
      sage: b.e(0)
      [(-1, -2, 3)]

  The elements of the Kirillov-Reshetikhin crystals can be constructed from a classical crystal element using `retract()`.

  EXAMPLES:

      sage: K = crystals.KirillovReshetikhin(['E',6,1],2,1)
      sage: La = K.cartan_type().classical().root_system().weight_lattice().fundamental_weights()
      sage: H = crystals.HighestWeight(La[2])
      sage: t = H.module_generator()
      sage: t
      [[(2, -1), (1,)]]
      sage: type(K.retract(t))
      <class 'sage.combinat.crystals.kirillov_reshetikhin.KR_type_E6_with_category.element_class'>
      sage: K.retract(t).e(0)
      []

  TESTS:

      sage: K = crystals.KirillovReshetikhin(['E',6,1], 2,1)
      sage: La = K.weight_lattice_realization().fundamental_weights()
      sage: all(b.weight() == sum( (K.affine_weight(b.lift())[i] * La[i] for i in K.index_set()), 0*La[0]) for b in K)  # long time (26s on sage.math, 2011)
      True

  `affine_weight`(b)

    Returns the affine level zero weight corresponding to the element b of the classical crystal underlying self. For the coefficients to calculate the level, see Kac pg. 48.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['E',6,1],2,1)
        sage: [K.affine_weight(x.lift()) for x in K if all(x.epsilon(i) == 0 for i in [2,3,4,5])]
        [(0, 0, 0, 0, 0, 0, 0),
        (-2, 0, 1, 0, 0, 0, 0),
        (-1, -1, 0, 0, 0, 1, 0),
        (0, 0, 0, 0, 0, 0, 0),
        (0, 0, 0, 0, 0, 1, -2),
        (0, -1, 1, 0, 0, 0, -1),
        (-1, 0, 0, 1, 0, 0, -1),
        (-1, -1, 0, 0, 1, 0, -1),
        (0, 0, 0, 0, 0, 0, 0),
        (0, -2, 0, 1, 0, 0, 0)]

  `automorphism_on_affine_weight`(weight)

    Acts with the Dynkin diagram automorphism on affine weights as outputted by the affine_weight method.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['E',6,1],2,1)
        sage: [[x[0], K.automorphism_on_affine_weight(x[0])] for x in K.highest_weight_dict().values()]
        [[(0, 0, 0, 0, 0, 1, -2), (-2, 0, 1, 0, 0, 0, 0)],
         [(-1, 0, 0, 1, 0, 0, -1), (-1, -1, 0, 0, 0, 1, 0)],
         [(0, 0, 0, 0, 0, 0, 0), (0, 0, 0, 0, 0, 0, 0)],
         [(-2, 0, 1, 0, 0, 0, 0), (0, -2, 0, 1, 0, 0, 0)],
         [(0, 0, 0, 0, 0, 0, 0), (0, 0, 0, 0, 0, 0, 0)]]

  `classical_decomposition`()

    Specifies the classical crystal underlying the KR crystal of type \(E_6^{(1)}\).

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['E',6,1], 2,2)
        sage: K.classical_decomposition()
        Direct sum of the crystals Family (Finite dimensional highest weight crystal of type ['E', 6] and highest weight 0, Finite dimensional highest weight crystal of type ['E', 6] and highest weight Lambda[2], Finite dimensional highest weight crystal of type ['E', 6] and highest weight 2*Lambda[2])
        sage: K = crystals.KirillovReshetikhin(['E',6,1], 1,2)
        sage: K.classical_decomposition()
        Direct sum of the crystals Family (Finite dimensional highest weight crystal of type ['E', 6] and highest weight 2*Lambda[1],)

  `dynkin_diagram_automorphism`(i)

    Specifies the Dynkin diagram automorphism underlying the promotion action on the crystal elements. The automorphism needs to map node 0 to some other Dynkin node.

    Here we use the Dynkin diagram automorphism of order 3 which maps node 0 to node 1.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['E',6,1],2,1)
        sage: [K.dynkin_diagram_automorphism(i) for i in K.index_set()]
        [1, 6, 3, 5, 4, 2, 0]

  `highest_weight_dict`()

    Returns a dictionary between \({1,2,3,4,5}\) highest weight elements, and a tuple of affine weights and its classical component.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['E',6,1],2,1)
        sage: K.highest_weight_dict()
        {[[(2, -1), (1,)]]: ((-2, 0, 1, 0, 0, 0, 0), 1),
         [[(3, -1, -6), (1,)]]: ((-1, 0, 0, 1, 0, 0, -1), 1),
         [[(6, -2), (-6, 2)]]: ((0, 0, 0, 0, 0, 0, 0), 1),
         [[(5, -2, -6), (-6, 2)]]: ((0, 0, 0, 0, 0, 1, -2), 1),
         []: ((0, 0, 0, 0, 0, 0, 0), 0)}

  `highest_weight_dict_inv`()

    Returns a dictionary between a tuple of affine weights and a classical component, and \({2,3,4,5,6}\) highest weight elements.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['E',6,1],2,1)
        sage: K.highest_weight_dict_inv()
        {((-2, 0, 1, 0, 0, 0, 0), 1): [[(2, -1), (1,)]],
         ((-1, -1, 0, 0, 0, 1, 0), 1): [[(5, -3), (-1, 3)]],
         ((0, -2, 0, 1, 0, 0, 0), 1): [[(-1,), (-1, 3)]],
         ((0, 0, 0, 0, 0, 0, 0), 0): [],
         ((0, 0, 0, 0, 0, 0, 0), 1): [[(1, -3), (-1, 3)]]}

  `hw_auxiliary`()

    Returns the \({2,3,4,5}\) highest weight elements of self.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['E',6,1],2,1)
        sage: K.hw_auxiliary()
        [[], [[(2, -1), (1,)]],
         [[(5, -3), (-1, 3)]],
         [[(6, -2), (-6, 2)]],
         [[(5, -2, -6), (-6, 2)]],
         [[(-1,), (-6, 2)]],
         [[(3, -1, -6), (1,)]],
         [[(4, -3, -6), (-1, 3)]],
         [[(1, -3), (-1, 3)]],
         [[(-1,), (-1, 3)]]]

  `promotion`()

    Specifies the promotion operator used to construct the affine type \(E_6^{(1)}\) crystal.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['E',6,1], 2,1)
        sage: promotion = K.promotion()
        sage: all(promotion(promotion(promotion(b))) == b for b in K.classical_decomposition())
        True
        sage: K = crystals.KirillovReshetikhin(['E',6,1],1,1)
        sage: promotion = K.promotion()
        sage: all(promotion(promotion(promotion(b))) == b for b in K.classical_decomposition())
        True

  `promotion_inverse`()

    Returns the inverse promotion. Since promotion is of order 3, the inverse promotion is the same as promotion applied twice.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['E',6,1], 2,1)
        sage: p = K.promotion()
        sage: p_inv = K.promotion_inverse()
        sage: all(p_inv(p(b)) == b for b in K.classical_decomposition())
        True

  `promotion_on_highest_weight_vectors`()

    Gives a dictionary of the promotion map on \({1,2,3,4,5}\) highest weight elements to \({2,3,4,5,6}\) elements in self.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['E',6,1],2,1)
        sage: dic = K.promotion_on_highest_weight_vectors()
        sage: dic
        {[[(2, -1), (1,)]]: [[(-1,), (-1, 3)]],
         [[(3, -1, -6), (1,)]]: [[(5, -3), (-1, 3)]],
         [[(6, -2), (-6, 2)]]: [],
         [[(5, -2, -6), (-6, 2)]]: [[(2, -1), (1,)]],
         []: [[(1, -3), (-1, 3)]]}

  `promotion_on_highest_weight_vectors_function`()

    Return a lambda function on `x` defined by `self.promotion_on_highest_weight_vectors()[x]`.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['E',6,1], 2,1)
        sage: f = K.promotion_on_highest_weight_vectors_function()
        sage: f(K.module_generator().lift())
        [[(-1,), (-1, 3)]]

class `sage.combinat.crystals.kirillov_reshetikhin.``KR_type_box`(cartan_type, r, s)

  Bases: `sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinGenericCrystal`, `sage.combinat.crystals.affine.AffineCrystalFromClassical`

  Class of Kirillov-Reshetikhin crystals \(B^{r,s}\) of type \(A_{2n}^{(2)}\) for \(r\le n\) and type \(D_{n+1}^{(2)}\) for \(r<n\).

  EXAMPLES:

      sage: K = crystals.KirillovReshetikhin(['A',4,2], 1,1)
      sage: K
      Kirillov-Reshetikhin crystal of type ['BC', 2, 2] with (r,s)=(1,1)
      sage: b = K(rows=[])
      sage: b.f(0)
      [[1]]
      sage: b.e(0)
      [[-1]]

  `Element`

    alias of `KR_type_boxElement`

  `ambient_crystal`()

    Returns the ambient crystal \(B^{r,2s}\) of type \(C_n^{(1)}\) associated to the Kirillov-Reshetikhin crystal. This ambient crystal is used to construct the zero arrows.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['A',4,2], 2,2)
        sage: K.ambient_crystal()
        Kirillov-Reshetikhin crystal of type ['C', 2, 1] with (r,s)=(2,4)

  `ambient_highest_weight_dict`()

    Gives a dictionary of the classical highest weight vectors of the ambient crystal of self. Their key is their shape.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['A',6,2], 2,2)
        sage: K.ambient_highest_weight_dict()
        {[]: [],
         [2]: [[1, 1]],
         [2, 2]: [[1, 1], [2, 2]],
         [4]: [[1, 1, 1, 1]],
         [4, 2]: [[1, 1, 1, 1], [2, 2]],
         [4, 4]: [[1, 1, 1, 1], [2, 2, 2, 2]]}

  `classical_decomposition`()

    Specifies the classical crystal underlying the Kirillov-Reshetikhin crystal of type \(A_{2n}^{(2)}\) and \(D_{n+1}^{(2)}\).

    It is given by \(B^{r,s} \cong \bigoplus_\Lambda B(\Lambda)\) where \(\Lambda\) are weights obtained from a rectangle of width \(s\) and height \(r\) by removing boxes. Here we identify the fundamental weight \(\Lambda_i\) with a column of height \(i\).

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['A',4,2], 2,2)
        sage: K.classical_decomposition()
        The crystal of tableaux of type ['C', 2] and shape(s) [[], [1], [2], [1, 1], [2, 1], [2, 2]]
        sage: K = crystals.KirillovReshetikhin(['D',4,2], 2,3)
        sage: K.classical_decomposition()
        The crystal of tableaux of type ['B', 3] and shape(s) [[], [1], [2], [1, 1], [3], [2, 1], [3, 1], [2, 2], [3, 2], [3, 3]]

  `from_ambient_crystal`()

    Provides a map from the ambient crystal of type \(C_n^{(1)}\) to the Kirillov-Reshetikhin crystal `self`.

    Note that this map is only well-defined on elements that are in the image under `to_ambient_crystal()`.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['D',4,2], 1,1)
        sage: b = K.ambient_crystal()(rows=[[3,-3]])
        sage: K.from_ambient_crystal()(b)
        [[0]]
        sage: K = crystals.KirillovReshetikhin(['A',4,2], 1,1)
        sage: b = K.ambient_crystal()(rows=[])
        sage: K.from_ambient_crystal()(b)
        []

  `highest_weight_dict`()

    Gives a dictionary of the classical highest weight vectors of self. Their key is 2 times their shape.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['A',6,2], 2,2)
        sage: K.highest_weight_dict()
        {[]: [],
         [2]: [[1]],
         [2, 2]: [[1], [2]],
         [4]: [[1, 1]],
         [4, 2]: [[1, 1], [2]],
         [4, 4]: [[1, 1], [2, 2]]}

  `similarity_factor`()

    Sets the similarity factor used to map to the ambient crystal.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['A',6,2], 2,2)
        sage: K.similarity_factor()
        {1: 2, 2: 2, 3: 2}
        sage: K = crystals.KirillovReshetikhin(['D',5,2], 1,1)
        sage: K.similarity_factor()
        {1: 2, 2: 2, 3: 2, 4: 1}

  `to_ambient_crystal`()

    Provides a map from self to the ambient crystal of type \(C_n^{(1)}\).

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['D',4,2], 1,1)
        sage: [K.to_ambient_crystal()(b) for b in K]
        [[], [[1, 1]], [[2, 2]], [[3, 3]], [[3, -3]], [[-3, -3]], [[-2, -2]], [[-1, -1]]]
        sage: K = crystals.KirillovReshetikhin(['A',4,2], 1,1)
        sage: [K.to_ambient_crystal()(b) for b in K]
        [[], [[1, 1]], [[2, 2]], [[-2, -2]], [[-1, -1]]]

class `sage.combinat.crystals.kirillov_reshetikhin.``KR_type_boxElement`

  Bases: `sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinGenericCrystalElement`

  Class for the elements in the Kirillov-Reshetikhin crystals \(B^{r,s}\) of type \(A_{2n}^{(2)}\) for \(r\le n\) and type \(D_{n+1}^{(2)}\) for \(r<n\).

  EXAMPLES:

      sage: K=crystals.KirillovReshetikhin(['A',4,2],1,2)
      sage: type(K.module_generators[0])
      <class 'sage.combinat.crystals.kirillov_reshetikhin.KR_type_box_with_category.element_class'>

  `e0`()

    Gives \(e_0\) on self by mapping self to the ambient crystal, calculating \(e_0\) there and pulling the element back.

    EXAMPLES:

        sage: K=crystals.KirillovReshetikhin(['A',4,2],1,1)
        sage: b = K(rows=[])
        sage: b.e(0) # indirect doctest
        [[-1]]

  `epsilon0`()

    Calculates \(\epsilon_0\) of self by mapping the element to the ambient crystal and calculating \(\epsilon_0\) there.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['A',4,2], 1,1)
        sage: b=K(rows=[[1]])
        sage: b.epsilon(0) # indirect doctest
        2

  `f0`()

    Gives \(f_0\) on self by mapping self to the ambient crystal, calculating \(f_0\) there and pulling the element back.

    EXAMPLES:

        sage: K=crystals.KirillovReshetikhin(['A',4,2],1,1)
        sage: b = K(rows=[])
        sage: b.f(0) # indirect doctest
        [[1]]

  `phi0`()

    Calculates \(\phi_0\) of self by mapping the element to the ambient crystal and calculating \(\phi_0\) there.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['D',3,2], 1,1)
        sage: b=K(rows=[[-1]])
        sage: b.phi(0) # indirect doctest
        2

class `sage.combinat.crystals.kirillov_reshetikhin.``KR_type_spin`(cartan_type, r, s)

  Bases: `sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinCrystalFromPromotion`

  Class of Kirillov-Reshetikhin crystals \(B^{n,s}\) of type \(D_n^{(1)}\).

  EXAMPLES:

      sage: K = crystals.KirillovReshetikhin(['D',4,1],4,1); K
      Kirillov-Reshetikhin crystal of type ['D', 4, 1] with (r,s)=(4,1)
      sage: [[b,b.f(0)] for b in K]
      [[[++++, []], None], [[++--, []], None], [[+-+-, []], None], [[-++-, []], None],
      [[+--+, []], None], [[-+-+, []], None], [[--++, []], [++++, []]], [[----, []], [++--, []]]]

      sage: K = crystals.KirillovReshetikhin(['D',4,1],4,2); K
      Kirillov-Reshetikhin crystal of type ['D', 4, 1] with (r,s)=(4,2)
      sage: [[b,b.f(0)] for b in K]
      [[[[1], [2], [3], [4]], None], [[[1], [2], [-4], [4]], None], [[[1], [3], [-4], [4]], None],
      [[[2], [3], [-4], [4]], None], [[[1], [4], [-4], [4]], None], [[[2], [4], [-4], [4]], None],
      [[[3], [4], [-4], [4]], [[1], [2], [3], [4]]], [[[-4], [4], [-4], [4]], [[1], [2], [-4], [4]]],
      [[[-4], [4], [-4], [-3]], [[1], [2], [-4], [-3]]], [[[-4], [4], [-4], [-2]], [[1], [3], [-4], [-3]]],
      [[[-4], [4], [-4], [-1]], [[2], [3], [-4], [-3]]], [[[-4], [4], [-3], [-2]], [[1], [4], [-4], [-3]]],
      [[[-4], [4], [-3], [-1]], [[2], [4], [-4], [-3]]], [[[-4], [4], [-2], [-1]], [[-4], [4], [-4], [4]]],
      [[[-4], [-3], [-2], [-1]], [[-4], [4], [-4], [-3]]], [[[1], [2], [-4], [-3]], None], [[[1], [3], [-4], [-3]], None],
      [[[2], [3], [-4], [-3]], None], [[[1], [3], [-4], [-2]], None], [[[2], [3], [-4], [-2]], None],
      [[[2], [3], [-4], [-1]], None], [[[1], [4], [-4], [-3]], None], [[[2], [4], [-4], [-3]], None],
      [[[3], [4], [-4], [-3]], None], [[[3], [4], [-4], [-2]], [[1], [3], [-4], [4]]],
      [[[3], [4], [-4], [-1]], [[2], [3], [-4], [4]]], [[[1], [4], [-4], [-2]], None], [[[2], [4], [-4], [-2]], None],
      [[[2], [4], [-4], [-1]], None], [[[1], [4], [-3], [-2]], None], [[[2], [4], [-3], [-2]], None],
      [[[2], [4], [-3], [-1]], None], [[[3], [4], [-3], [-2]], [[1], [4], [-4], [4]]],
      [[[3], [4], [-3], [-1]], [[2], [4], [-4], [4]]], [[[3], [4], [-2], [-1]], [[3], [4], [-4], [4]]]]

  TESTS:

      sage: K = crystals.KirillovReshetikhin(['D',4,1],3,1)
      sage: all(b.e(0).f(0) == b for b in K if b.epsilon(0)>0)
      True

      sage: K = crystals.KirillovReshetikhin(['D',5,1],5,2)
      sage: all(b.f(0).e(0) == b for b in K if b.phi(0)>0)
      True

  `classical_decomposition`()

    Returns the classical crystal underlying the Kirillov-Reshetikhin crystal \(B^{r,s}\) of type \(D_n^{(1)}\) for \(r=n-1,n\). It is given by \(B^{n,s} \cong B(s \Lambda_r)\).

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['D',4,1],4,1)
        sage: K.classical_decomposition()
        The crystal of tableaux of type ['D', 4] and shape(s) [[1/2, 1/2, 1/2, 1/2]]
        sage: K = crystals.KirillovReshetikhin(['D',4,1],3,1)
        sage: K.classical_decomposition()
        The crystal of tableaux of type ['D', 4] and shape(s) [[1/2, 1/2, 1/2, -1/2]]
        sage: K = crystals.KirillovReshetikhin(['D',4,1],3,2)
        sage: K.classical_decomposition()
        The crystal of tableaux of type ['D', 4] and shape(s) [[1, 1, 1, -1]]

  `dynkin_diagram_automorphism`(i)

    Specifies the Dynkin diagram automorphism underlying the promotion action on the crystal elements. The automorphism needs to map node 0 to some other Dynkin node.

    Here we use the Dynkin diagram automorphism which interchanges nodes 0 and 1 and leaves all other nodes unchanged.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['D',4,1],4,1)
        sage: K.dynkin_diagram_automorphism(0)
        1
        sage: K.dynkin_diagram_automorphism(1)
        0
        sage: K.dynkin_diagram_automorphism(4)
        4

  `promotion`()

    Returns the promotion operator on \(B^{r,s}\) of type \(D_n^{(1)}\) for \(r=n-1,n\).

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['D',4,1],3,1)
        sage: T = K.classical_decomposition()
        sage: promotion = K.promotion()
        sage: for t in T:
        ....:     print t, promotion(t)
        [+++-, []] [-++-, []]
        [++-+, []] [-+-+, []]
        [+-++, []] [--++, []]
        [-+++, []] [++++, []]
        [+---, []] [----, []]
        [-+--, []] [++--, []]
        [--+-, []] [+-+-, []]
        [---+, []] [+--+, []]

  `promotion_inverse`()

    Returns the inverse promotion operator on \(B^{r,s}\) of type \(D_n^{(1)}\) for \(r=n-1,n\).

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['D',4,1],3,1)
        sage: T = K.classical_decomposition()
        sage: promotion = K.promotion()
        sage: promotion_inverse = K.promotion_inverse()
        sage: all(promotion_inverse(promotion(t)) == t for t in T)
        True

  `promotion_on_highest_weight_vectors`()

    Returns the promotion operator on \(\{2,3,\ldots,n\}\)-highest weight vectors.

    A \(\{2,3,\ldots,n\}\)-highest weight vector in \(B(s\Lambda_n)\) of weight \(w=(w_1,\ldots,w_n)\) is mapped to a \(\{2,3,\ldots,n\}\)-highest weight vector in \(B(s\Lambda_{n-1})\) of weight \((-w_1,w_2,\ldots,w_n)\) and vice versa.

    See also `promotion_on_highest_weight_vectors_inverse()` and `promotion()`.

    EXAMPLES:

        sage: KR = crystals.KirillovReshetikhin(['D',4,1],4,2)
        sage: prom = KR.promotion_on_highest_weight_vectors()
        sage: T = KR.classical_decomposition()
        sage: HW = [t for t in T if t.is_highest_weight([2,3,4])]
        sage: for t in HW:
        ....:     print t, prom[t]
        [4, 3, 2, 1] [-1, 4, 3, 2]
        [4, -4, 3, 2] [-4, 4, 3, 2]
        [-1, -4, 3, 2] [-4, 3, 2, 1]

        sage: KR = crystals.KirillovReshetikhin(['D',4,1],4,1)
        sage: prom = KR.promotion_on_highest_weight_vectors()
        sage: T = KR.classical_decomposition()
        sage: HW = [t for t in T if t.is_highest_weight([2,3,4])]
        sage: for t in HW:
        ....:     print t, prom[t]
        [++++, []] [-+++, []]
        [-++-, []] [+++-, []]

  `promotion_on_highest_weight_vectors_inverse`()

    Returns the inverse promotion operator on \(\{2,3,\ldots,n\}\)-highest weight vectors.

    See also `promotion_on_highest_weight_vectors()` and `promotion_inverse()`.

    EXAMPLES:

        sage: KR = crystals.KirillovReshetikhin(['D',4,1],3,2)
        sage: prom = KR.promotion_on_highest_weight_vectors()
        sage: prom_inv = KR.promotion_on_highest_weight_vectors_inverse()
        sage: T = KR.classical_decomposition()
        sage: HW = [t for t in T if t.is_highest_weight([2,3,4])]
        sage: all(prom_inv[prom[t]] == t for t in HW)
        True

class `sage.combinat.crystals.kirillov_reshetikhin.``KR_type_vertical`(cartan_type, r, s)

  Bases: `sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinCrystalFromPromotion`

  Class of Kirillov-Reshetikhin crystals \(B^{r,s}\) of type \(D_n^{(1)}\) for \(r\le n-2\), \(B_n^{(1)}\) for \(r<n\), and \(A_{2n-1}^{(2)}\) for \(r\le n\).

  EXAMPLES:

      sage: K = crystals.KirillovReshetikhin(['D',4,1], 2,2)
      sage: b = K(rows=[])
      sage: b.f(0)
      [[1], [2]]
      sage: b.f(0).f(0)
      [[1, 1], [2, 2]]
      sage: b.e(0)
      [[-2], [-1]]
      sage: b.e(0).e(0)
      [[-2, -2], [-1, -1]]

      sage: K = crystals.KirillovReshetikhin(['D',5,1], 3,1)
      sage: b = K(rows=[[1]])
      sage: b.e(0)
      [[3], [-3], [-2]]

      sage: K = crystals.KirillovReshetikhin(['B',3,1], 1,1)
      sage: [[b,b.f(0)] for b in K]
      [[[[1]], None], [[[2]], None], [[[3]], None], [[[0]], None], [[[-3]], None], [[[-2]], [[1]]], [[[-1]], [[2]]]]

      sage: K = crystals.KirillovReshetikhin(['A',5,2], 1,1)
      sage: [[b,b.f(0)] for b in K]
      [[[[1]], None], [[[2]], None], [[[3]], None], [[[-3]], None], [[[-2]], [[1]]], [[[-1]], [[2]]]]

  `classical_decomposition`()

    Specifies the classical crystal underlying the Kirillov-Reshetikhin crystal of type \(D_n^{(1)}\), \(B_n^{(1)}\), and \(A_{2n-1}^{(2)}\).

    It is given by \(B^{r,s} \cong \bigoplus_\Lambda B(\Lambda)\) where \(\Lambda\) are weights obtained from a rectangle of width \(s\) and height \(r\) by removing verticle dominoes. Here we identify the fundamental weight \(\Lambda_i\) with a column of height \(i\).

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['D',4,1], 2,2)
        sage: K.classical_decomposition()
        The crystal of tableaux of type ['D', 4] and shape(s) [[], [1, 1], [2, 2]]

  `dynkin_diagram_automorphism`(i)

    Specifies the Dynkin diagram automorphism underlying the promotion action on the crystal elements. The automorphism needs to map node 0 to some other Dynkin node.

    Here we use the Dynkin diagram automorphism which interchanges nodes 0 and 1 and leaves all other nodes unchanged.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['D',4,1],1,1)
        sage: K.dynkin_diagram_automorphism(0)
        1
        sage: K.dynkin_diagram_automorphism(1)
        0
        sage: K.dynkin_diagram_automorphism(4)
        4

  `from_highest_weight_vector_to_pm_diagram`(b)

    This gives the bijection between an element b in the classical decomposition of the KR crystal that is \({2,3,..,n}\)-highest weight and \(\pm\) diagrams.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['D',4,1], 2,2)
        sage: T = K.classical_decomposition()
        sage: b = T(rows=[[2],[-2]])
        sage: pm = K.from_highest_weight_vector_to_pm_diagram(b); pm
        [[1, 1], [0, 0], [0]]
        sage: pm.pp()
        +
        -
        sage: b = T(rows=[])
        sage: pm=K.from_highest_weight_vector_to_pm_diagram(b); pm
        [[0, 2], [0, 0], [0]]
        sage: pm.pp()

        sage: hw = [ b for b in T if all(b.epsilon(i)==0 for i in [2,3,4]) ]
        sage: all(K.from_pm_diagram_to_highest_weight_vector(K.from_highest_weight_vector_to_pm_diagram(b)) == b for b in hw)
        True

  `from_pm_diagram_to_highest_weight_vector`(pm)

    This gives the bijection between a \(\pm\) diagram and an element b in the classical decomposition of the KR crystal that is {2,3,..,n}-highest weight.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['D',4,1], 2,2)
        sage: pm = sage.combinat.crystals.kirillov_reshetikhin.PMDiagram([[1, 1], [0, 0], [0]])
        sage: K.from_pm_diagram_to_highest_weight_vector(pm)
        [[2], [-2]]

  `promotion`()

    Specifies the promotion operator used to construct the affine type \(D_n^{(1)}\) etc. crystal. This corresponds to the Dynkin diagram automorphism which interchanges nodes 0 and 1, and leaves all other nodes unchanged. On the level of crystals it is constructed using \(\pm\) diagrams.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['D',4,1], 2,2)
        sage: promotion = K.promotion()
        sage: b = K.classical_decomposition()(rows=[])
        sage: promotion(b)
        [[1, 2], [-2, -1]]
        sage: b = K.classical_decomposition()(rows=[[1,3],[2,-1]])
        sage: promotion(b)
        [[1, 3], [2, -1]]
        sage: b = K.classical_decomposition()(rows=[[1],[-3]])
        sage: promotion(b)
        [[2, -3], [-2, -1]]

  `promotion_inverse`()

    Return inverse of promotion.

    In this case promotion is an involution, so promotion inverse equals promotion.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['D',4,1], 2,2)
        sage: promotion = K.promotion()
        sage: promotion_inverse = K.promotion_inverse()
        sage: all( promotion_inverse(promotion(b.lift())) == b.lift() for b in K )
        True

  `promotion_on_highest_weight_vectors`()

    Calculates promotion on \({2,3,...,n}\) highest weight vectors.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['D',4,1], 2,2)
        sage: T = K.classical_decomposition()
        sage: hw = [ b for b in T if all(b.epsilon(i)==0 for i in [2,3,4]) ]
        sage: [K.promotion_on_highest_weight_vectors()(b) for b in hw]
        [[[1, 2], [-2, -1]], [[2, 2], [-2, -1]], [[1, 2], [3, -1]], [[2], [-2]],
        [[1, 2], [2, -2]], [[2, 2], [-1, -1]], [[2, 2], [3, -1]], [[2, 2], [3, 3]],
        [], [[1], [2]], [[1, 1], [2, 2]], [[2], [-1]], [[1, 2], [2, -1]], [[2], [3]],
        [[1, 2], [2, 3]]]

`sage.combinat.crystals.kirillov_reshetikhin.``KashiwaraNakashimaTableaux`(cartan_type, r, s)

  Return the Kashiwara-Nakashima model for the Kirillov-Reshetikhin crystal \(B^{r,s}\) in the given type.

  The Kashiwara-Nakashima (KN) model constructs the KR crystal from the KN tableaux model for the corresponding classical crystals. This model is named for the underlying KN tableaux.

  Many Kirillov-Reshetikhin crystals are constructed from a classical crystal together with an automorphism \(p\) on the level of crystals which corresponds to a Dynkin diagram automorphism mapping node 0 to some other node \(i\). The action of \(f_0\) and \(e_0\) is then constructed using \(f_0 = p^{-1} \circ f_i \circ p\).

  For example, for type \(A_n^{(1)}\) the Kirillov-Reshetikhin crystal \(B^{r,s}\) is obtained from the classical crystal \(B(s \omega_r)\) using the promotion operator. For other types, see [Shimozono02], [Schilling08], and [JS2010].

  Other Kirillov-Reshetikhin crystals are constructed using similarity methods. See Section 4 of [FOS09].

  For more information on Kirillov-Reshetikhin crystals, see `KirillovReshetikhinCrystal()`.

  EXAMPLES:

      sage: K = crystals.KirillovReshetikhin(['A',3,1], 2, 1)
      sage: K2 = crystals.kirillov_reshetikhin.KashiwaraNakashimaTableaux(['A',3,1], 2, 1)
      sage: K is K2
      True

`sage.combinat.crystals.kirillov_reshetikhin.``KirillovReshetikhinCrystal`(cartan_type, r, s, model='KN')

  Return the Kirillov-Reshetikhin crystal \(B^{r,s}\) of the given type in the given model.

  For more information about general crystals see `sage.combinat.crystals.crystals`.

  There are a variety of models for Kirillov-Reshetikhin crystals. There is one using the classical crystal with `Kashiwara-Nakashima tableaux`. There is one using `rigged configurations`. Another tableaux model comes from the bijection between rigged configurations and tensor products of tableaux called `Kirillov-Reshetikhin tableaux` Lastly there is a model of Kirillov-Reshetikhin crystals for \(s = 1\) from crystals of `LS paths`.

  INPUT:

  - `cartan_type` – an affine Cartan type
  - `r` – a label of finite Dynkin diagram
  - `s` – a positive integer
  - `model` – (default: `'KN'`) can be one of the following:
    - `'KN'` or `'KashiwaraNakashimaTableaux'` - use the Kashiwara-Nakashima tableaux model
    - `'KR'` or `'KirillovReshetkihinTableaux'` - use the Kirillov-Reshetkihin tableaux model
    - `'RC'` or `'RiggedConfiguration'` - use the rigged configuration model
    - `'LSPaths'` - use the LS path model

  EXAMPLES:

      sage: K = crystals.KirillovReshetikhin(['A',3,1], 2, 1)
      sage: K.index_set()
      (0, 1, 2, 3)
      sage: K.list()
      [[[1], [2]], [[1], [3]], [[2], [3]], [[1], [4]], [[2], [4]], [[3], [4]]]
      sage: b=K(rows=[[1],[2]])
      sage: b.weight()
      -Lambda[0] + Lambda[2]

      sage: K = crystals.KirillovReshetikhin(['A',3,1], 2,2)
      sage: K.automorphism(K.module_generators[0])
      [[2, 2], [3, 3]]
      sage: K.module_generators[0].e(0)
      [[1, 2], [2, 4]]
      sage: K.module_generators[0].f(2)
      [[1, 1], [2, 3]]
      sage: K.module_generators[0].f(1)
      sage: K.module_generators[0].phi(0)
      0
      sage: K.module_generators[0].phi(1)
      0
      sage: K.module_generators[0].phi(2)
      2
      sage: K.module_generators[0].epsilon(0)
      2
      sage: K.module_generators[0].epsilon(1)
      0
      sage: K.module_generators[0].epsilon(2)
      0
      sage: b = K(rows=[[1,2],[2,3]])
      sage: b
      [[1, 2], [2, 3]]
      sage: b.f(2)
      [[1, 2], [3, 3]]

      sage: K = crystals.KirillovReshetikhin(['D',4,1], 2, 1)
      sage: K.cartan_type()
      ['D', 4, 1]
      sage: type(K.module_generators[0])
      <class 'sage.combinat.crystals.kirillov_reshetikhin.KR_type_vertical_with_category.element_class'>

  The following gives some tests with regards to Lemma 3.11 in [LOS12].

  TESTS:

      sage: K = crystals.KirillovReshetikhin(['A',4,2],2,1)
      sage: Lambda = K.weight_lattice_realization().fundamental_weights()
      sage: [b for b in K if b.Epsilon() == Lambda[0]]
      [[]]

      sage: K = crystals.KirillovReshetikhin(['D',4,2],1,2)
      sage: Lambda = K.weight_lattice_realization().fundamental_weights()
      sage: [b for b in K if b.Epsilon() == 2*Lambda[0]]
      [[]]
      sage: [b for b in K if b.Epsilon() == 2*Lambda[3]]
      [[[3, -3]]]
      sage: K = crystals.KirillovReshetikhin(['D',4,2],1,1)
      sage: [b for b in K if b.Epsilon() == Lambda[3]]
      [[[0]]]

      sage: K = crystals.KirillovReshetikhin(['B',3,1],2,1)
      sage: Lambda = K.weight_lattice_realization().fundamental_weights()
      sage: [b for b in K if b.Epsilon() == Lambda[0]]
      [[]]
      sage: [b for b in K if b.Epsilon() == Lambda[1]]
      [[[2], [-2]]]
      sage: K = crystals.KirillovReshetikhin(['B',3,1],2,2)
      sage: [b for b in K if b.Epsilon() == 2*Lambda[0]]
      [[]]
      sage: [b for b in K if b.Epsilon() == 2*Lambda[1]]
      [[[1, 2], [-2, -1]]]
      sage: K = crystals.KirillovReshetikhin(['B',3,1],2,3)
      sage: [b for b in K if b.Epsilon() == 3*Lambda[1]] # long time
      [[[1, 2, 2], [-2, -2, -1]]]

      sage: K = crystals.KirillovReshetikhin(['D',4,1],2,2)
      sage: Lambda = K.weight_lattice_realization().fundamental_weights()
      sage: [b for b in K if b.Epsilon() == 2*Lambda[0]] # long time
      [[]]
      sage: [b for b in K if b.Epsilon() == 2*Lambda[4]] # long time
      [[[3, -4], [4, -3]]]

      sage: K = crystals.KirillovReshetikhin(['B',3,1],3,1)
      sage: Lambda = K.weight_lattice_realization().fundamental_weights()
      sage: [b for b in K if b.Epsilon() == Lambda[0]]
      [[+++, []]]
      sage: [b for b in K if b.Epsilon() == Lambda[1]]
      [[-++, []]]
      sage: K = crystals.KirillovReshetikhin(['B',3,1],3,3)
      sage: [b for b in K if b.Epsilon() == 2*Lambda[0]] # long time
      [[+++, [[1]]]]
      sage: [b for b in K if b.Epsilon() == 2*Lambda[1]] # long time
      [[-++, [[-1]]]]

      sage: K = crystals.KirillovReshetikhin(['B',4,1],4,1)
      sage: Lambda = K.weight_lattice_realization().fundamental_weights()
      sage: [b for b in K if b.Epsilon() == Lambda[0]]
      [[++++, []]]
      sage: [b for b in K if b.Epsilon() == Lambda[1]]
      [[-+++, []]]

      sage: K = crystals.KirillovReshetikhin(['C',3,1],1,1)
      sage: Lambda = K.weight_lattice_realization().fundamental_weights()
      sage: [b for b in K if b.Epsilon() == Lambda[0]]
      [[[1]]]
      sage: [b for b in K if b.Epsilon() == Lambda[3]]
      [[[-3]]]
      sage: K = crystals.KirillovReshetikhin(['C',3,1],1,3)
      sage: [b for b in K if b.Epsilon() == 2*Lambda[3]] # long time
      [[[3, -3, -3]]]
      sage: [b for b in K if b.Epsilon() == 2*Lambda[0]] # long time
      [[[1]]]

  We check the various models agree:

      sage: KN = crystals.KirillovReshetikhin(['D',4,1], 2, 1)
      sage: KR = crystals.KirillovReshetikhin(['D',4,1], 2, 1, model='KR')
      sage: RC = crystals.KirillovReshetikhin(['D',4,1], 2, 1, model='RC')
      sage: LS = crystals.KirillovReshetikhin(['D',4,1], 2, 1, model='LSPaths')
      sage: G = KN.digraph()
      sage: G.is_isomorphic(KR.digraph(), edge_labels=True)
      True
      sage: G.is_isomorphic(RC.digraph(), edge_labels=True)
      True
      sage: G.is_isomorphic(LS.digraph(), edge_labels=True)
      True

      sage: KN = crystals.KirillovReshetikhin(['D',4,1], 2, 1)
      sage: KN2 = crystals.KirillovReshetikhin(['D',4,1], 2, 1, model='KN')
      sage: KN3 = crystals.KirillovReshetikhin(['D',4,1], 2, 1, model='KashiwaraNakashimaTableaux')
      sage: KN is KN2 and KN is KN3
      True

  REFERENCES:

  [Shimozono02] | M. Shimozono Affine type A crystal structure on tensor products of rectangles, Demazure characters, and nilpotent varieties, J. Algebraic Combin. 15 (2002). no. 2. 151-187. Arxiv math.QA/9804039.

  [Schilling08] | (1, 2) A. Schilling. “Combinatorial structure of Kirillov-Reshetikhin crystals of type \(D_n(1)\), \(B_n(1)\), \(A_{2n-1}(2)\)”. J. Algebra. 319 (2008). 2938-2962. Arxiv 0704.2046.

  [JS2010] | B. Jones, A. Schilling. “Affine structures and a tableau model for \(E_6\) crystals”, J. Algebra. 324 (2010). 2512-2542. doi:10.1016/j.bbr.2011.03.031, Arxiv 0909.2442.

  [FOS09] | G. Fourier, M. Okado, A. Schilling. Kirillov-Reshetikhin crystals for nonexceptional types. Advances in Mathematics. 222 (2009). Issue 3. 1080-1116. Arxiv 0810.5067.

  [LOS12] | C. Lecouvey, M. Okado, M. Shimozono. “Affine crystals, one-dimensional sums and parabolic Lusztig \(q\)-analogues”. Mathematische Zeitschrift. 271 (2012). Issue 3-4. 819-865. doi:10.1007/s00209-011-0892-9, Arxiv 1002.3715.

`sage.combinat.crystals.kirillov_reshetikhin.``KirillovReshetikhinCrystalFromLSPaths`(cartan_type, r, s=1)

  Single column Kirillov-Reshetikhin crystals.

  This yields the single column Kirillov-Reshetikhin crystals from the projected level zero LS paths, see `CrystalOfLSPaths`. This works for all types (even exceptional types). The weight of the canonical element in this crystal is \(\Lambda_r\). For other implementation see `KirillovReshetikhinCrystal()`.

  EXAMPLES:

      sage: K = crystals.kirillov_reshetikhin.LSPaths(['A',2,1],2)
      sage: KR = crystals.KirillovReshetikhin(['A',2,1],2,1)
      sage: G = K.digraph()
      sage: GR = KR.digraph()
      sage: G.is_isomorphic(GR, edge_labels = True)
      True

      sage: K = crystals.kirillov_reshetikhin.LSPaths(['C',3,1],2)
      sage: KR = crystals.KirillovReshetikhin(['C',3,1],2,1)
      sage: G = K.digraph()
      sage: GR = KR.digraph()
      sage: G.is_isomorphic(GR, edge_labels = True)
      True

      sage: K = crystals.kirillov_reshetikhin.LSPaths(['E',6,1],1)
      sage: KR = crystals.KirillovReshetikhin(['E',6,1],1,1)
      sage: G = K.digraph()
      sage: GR = KR.digraph()
      sage: G.is_isomorphic(GR, edge_labels = True)
      True
      sage: K.cardinality()
      27

      sage: K = crystals.kirillov_reshetikhin.LSPaths(['G',2,1],1)
      sage: K.cardinality()
      7

      sage: K = crystals.kirillov_reshetikhin.LSPaths(['B',3,1],2)
      sage: KR = crystals.KirillovReshetikhin(['B',3,1],2,1)
      sage: KR.cardinality()
      22
      sage: K.cardinality()
      22
      sage: G = K.digraph()
      sage: GR = KR.digraph()
      sage: G.is_isomorphic(GR, edge_labels = True)
      True

  TESTS:

      sage: K = crystals.kirillov_reshetikhin.LSPaths(['G',2,1],2)
      sage: K.cardinality()
      15

  For \(s > 1\) these crystals yield \(s\)-fold tensor products of Kirillov-Reshetikhin crystals:

      sage: K = crystals.kirillov_reshetikhin.LSPaths(['A',1,1],1,3)
      sage: B = crystals.KirillovReshetikhin(['A',1,1],1,1)
      sage: T = crystals.TensorProduct(B,B,B)
      sage: G = K.digraph()
      sage: GT = T.digraph()
      sage: G.is_isomorphic(GT, edge_labels = True)
      True

      sage: K = crystals.kirillov_reshetikhin.LSPaths(['B',2,1],1,2)
      sage: B = crystals.KirillovReshetikhin(['B',2,1],1,1)
      sage: T = crystals.TensorProduct(B,B)
      sage: G = K.digraph()
      sage: GT = T.digraph()
      sage: G.is_isomorphic(GT, edge_labels = True)
      True

      sage: K = crystals.kirillov_reshetikhin.LSPaths(['B',2,1],2,3)
      sage: B = crystals.KirillovReshetikhin(['B',2,1],2,1)
      sage: T = crystals.TensorProduct(B,B,B)
      sage: GT = T.digraph()
      sage: G = K.digraph()
      sage: G.is_isomorphic(GT, edge_labels = True)
      True

class `sage.combinat.crystals.kirillov_reshetikhin.``KirillovReshetikhinCrystalFromPromotion`(cartan_type, r, s)

  Bases: `sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinGenericCrystal`, `sage.combinat.crystals.affine.AffineCrystalFromClassicalAndPromotion`

  This generic class assumes that the Kirillov-Reshetikhin crystal is constructed from a classical crystal ‘classical_decomposition’ and an automorphism ‘promotion’ and its inverse which corresponds to a Dynkin diagram automorphism ‘dynkin_diagram_automorphism’.

  Each instance using this class needs to implement the methods:

  - classical_decomposition
  - promotion
  - promotion_inverse
  - dynkin_diagram_automorphism
  `Element`

    alias of `KirillovReshetikhinCrystalFromPromotionElement`

class `sage.combinat.crystals.kirillov_reshetikhin.``KirillovReshetikhinCrystalFromPromotionElement`

  Bases: `sage.combinat.crystals.affine.AffineCrystalFromClassicalAndPromotionElement`, `sage.combinat.crystals.kirillov_reshetikhin.KirillovReshetikhinGenericCrystalElement`

  Element for a Kirillov-Reshetikhin crystal from promotion.

class `sage.combinat.crystals.kirillov_reshetikhin.``KirillovReshetikhinGenericCrystal`(cartan_type, r, s, dual=None)

  Bases: `sage.combinat.crystals.affine.AffineCrystalFromClassical`

  Generic class for Kirillov-Reshetikhin crystal \(B^{r,s}\) of the given type.

  Input is a Dynkin node `r`, a positive integer `s`, and a Cartan type `cartan_type`.

  `Element`

    alias of `KirillovReshetikhinGenericCrystalElement`

  `R_matrix`(K)

    INPUT:

    - `self` – a crystal \(L\)
    - `K` – a Kirillov-Reshetikhin crystal of the same type as \(L\).

    Returns the combinatorial `R`-matrix from \(L \otimes K \to K \otimes L\), where the combinatorial \(R\)-matrix is the affine crystal isomorphism which maps \(u_{L} \otimes u_K\) to \(u_K \otimes u_{L}\), where \(u_K\) is the unique element in \(K = B^{r,s}\) of weight \(s\Lambda_r - s c \Lambda_0\) (see module_generator).

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['A',2,1],1,1)
        sage: L = crystals.KirillovReshetikhin(['A',2,1],1,2)
        sage: f = K.R_matrix(L)
        sage: [[b,f(b)] for b in crystals.TensorProduct(K,L)]
        [[[[[1]], [[1, 1]]], [[[1, 1]], [[1]]]],
        [[[[1]], [[1, 2]]], [[[1, 1]], [[2]]]],
        [[[[1]], [[2, 2]]], [[[1, 2]], [[2]]]],
        [[[[1]], [[1, 3]]], [[[1, 1]], [[3]]]],
        [[[[1]], [[2, 3]]], [[[1, 2]], [[3]]]],
        [[[[1]], [[3, 3]]], [[[1, 3]], [[3]]]],
        [[[[2]], [[1, 1]]], [[[1, 2]], [[1]]]],
        [[[[2]], [[1, 2]]], [[[2, 2]], [[1]]]],
        [[[[2]], [[2, 2]]], [[[2, 2]], [[2]]]],
        [[[[2]], [[1, 3]]], [[[2, 3]], [[1]]]],
        [[[[2]], [[2, 3]]], [[[2, 2]], [[3]]]],
        [[[[2]], [[3, 3]]], [[[2, 3]], [[3]]]],
        [[[[3]], [[1, 1]]], [[[1, 3]], [[1]]]],
        [[[[3]], [[1, 2]]], [[[1, 3]], [[2]]]],
        [[[[3]], [[2, 2]]], [[[2, 3]], [[2]]]],
        [[[[3]], [[1, 3]]], [[[3, 3]], [[1]]]],
        [[[[3]], [[2, 3]]], [[[3, 3]], [[2]]]],
        [[[[3]], [[3, 3]]], [[[3, 3]], [[3]]]]]

        sage: K = crystals.KirillovReshetikhin(['D',4,1],1,1)
        sage: L = crystals.KirillovReshetikhin(['D',4,1],2,1)
        sage: f = K.R_matrix(L)
        sage: T = crystals.TensorProduct(K,L)
        sage: b = T( K(rows=[[1]]), L(rows=[]) )
        sage: f(b)
        [[[2], [-2]], [[1]]]

    Alternatively, one can compute the combinatorial \(R\)-matrix using the isomorphism method of digraphs:

        sage: K1 = crystals.KirillovReshetikhin(['A',2,1],1,1)
        sage: K2 = crystals.KirillovReshetikhin(['A',2,1],2,1)
        sage: T1 = crystals.TensorProduct(K1,K2)
        sage: T2 = crystals.TensorProduct(K2,K1)
        sage: T1.digraph().is_isomorphic(T2.digraph(), edge_labels = True, certify = True) #todo: not implemented (see #10904 and #10549)
        (True, {[[[1]], [[2], [3]]]: [[[1], [3]], [[2]]], [[[3]], [[2], [3]]]: [[[2], [3]], [[3]]],
        [[[3]], [[1], [3]]]: [[[1], [3]], [[3]]], [[[1]], [[1], [3]]]: [[[1], [3]], [[1]]], [[[1]],
        [[1], [2]]]: [[[1], [2]], [[1]]], [[[2]], [[1], [2]]]: [[[1], [2]], [[2]]], [[[3]],
        [[1], [2]]]: [[[2], [3]], [[1]]], [[[2]], [[1], [3]]]: [[[1], [2]], [[3]]], [[[2]], [[2], [3]]]: [[[2], [3]], [[2]]]})

  `classical_decomposition`()

    Return the classical decomposition of `self`.

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['A',3,1], 2,2)
        sage: K.classical_decomposition()
        The crystal of tableaux of type ['A', 3] and shape(s) [[2, 2]]

  `is_perfect`()

    Returns True or False depending on whether `self` is a perfect crystal or not, respectively.

    If `self` is the Kirillov-Reshetikhin crystal \(B^{r,s}\), then it was proven in [FOS2010] that it is perfect if and only if \(s/c_r\) is an integer (where \(c_r\) is a constant related to the type of the crystal).

    REFERENCES:

    > [FOS2010] | (1, 2) G. Fourier, M. Okado, A. Schilling. Perfectness of Kirillov-Reshetikhin crystals for nonexceptional types Contemp. Math. 506 (2010) 127-143 ( arXiv:0811.1604 [math.RT] )

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['A',2,1], 1, 1)
        sage: K.is_perfect()
        True

        sage: K = crystals.KirillovReshetikhin(['C',2,1], 1, 1)
        sage: K.is_perfect()
        False

        sage: K = crystals.KirillovReshetikhin(['C',2,1], 1, 2)
        sage: K.is_perfect()
        True

  `kirillov_reshetikhin_tableaux`()

    Return the corresponding set of `KirillovReshetikhinTableaux`.

    EXAMPLES:

        sage: KRC = crystals.KirillovReshetikhin(['D', 4, 1], 2, 2)
        sage: KRC.kirillov_reshetikhin_tableaux()
        Kirillov-Reshetikhin tableaux of type ['D', 4, 1] and shape (2, 2)

  `level`()

    Returns the level of `self` assuming that it is a perfect crystal.

    If `self` is the Kirillov-Reshetikhin crystal \(B^{r,s}\), then it was proven in [FOS2010] that its level is \(s/c_r\) which is an integer if `self` is perfect (here \(c_r\) is a constant related to the type of the crystal).

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['A',2,1], 1, 1)
        sage: K.level()
        1
        sage: K = crystals.KirillovReshetikhin(['C',2,1], 1, 2)
        sage: K.level()
        1
        sage: K = crystals.KirillovReshetikhin(['D',4,1], 1, 3)
        sage: K.level()
        3

        sage: K = crystals.KirillovReshetikhin(['C',2,1], 1, 1)
        sage: K.level()
        Traceback (most recent call last):
        ...
        ValueError: this crystal is not perfect

  `module_generator`()

    Returns the unique module generator of classical weight \(s \Lambda_r\) of a Kirillov-Reshetikhin crystal \(B^{r,s}\)

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['C',2,1],1,2)
        sage: K.module_generator()
        [[1, 1]]
        sage: K = crystals.KirillovReshetikhin(['E',6,1],1,1)
        sage: K.module_generator()
        [(1,)]

        sage: K = crystals.KirillovReshetikhin(['D',4,1],2,1)
        sage: K.module_generator()
        [[1], [2]]

  `q_dimension`(q=None, prec=None, use_product=False)

    Return the \(q\)-dimension of `self`.

    The \(q\)-dimension of a KR crystal is defined as the \(q\)-dimension of the underlying classical crystal.

    EXAMPLES:

        sage: KRC = crystals.KirillovReshetikhin(['A',2,1], 2,2)
        sage: KRC.q_dimension()
        q^4 + q^3 + 2*q^2 + q + 1
        sage: KRC = crystals.KirillovReshetikhin(['D',4,1], 2,1)
        sage: KRC.q_dimension()
        q^10 + q^9 + 3*q^8 + 3*q^7 + 4*q^6 + 4*q^5 + 4*q^4 + 3*q^3 + 3*q^2 + q + 2

  `r`()

    Returns r of the underlying Kirillov-Reshetikhin crystal \(B^{r,s}\)

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['D',4,1], 2, 1)
        sage: K.r()
        2

  `s`()

    Returns s of the underlying Kirillov-Reshetikhin crystal \(B^{r,s}\)

    EXAMPLES:

        sage: K = crystals.KirillovReshetikhin(['D',4,1], 2, 1)
        sage: K.s()
        1

class `sage.combinat.crystals.kirillov_reshetikhin.``KirillovReshetikhinGenericCrystalElement`

  Bases: `sage.combinat.crystals.affine.AffineCrystalFromClassicalElement`

  Abstract class for all Kirillov-Reshetikhin crystal elements.

  `lusztig_involution`()

    Return the classical Lusztig involution on `self`.

    EXAMPLES:

        sage: KRC = crystals.KirillovReshetikhin(['D',4,1], 2,2)
        sage: elt = KRC(-1,2); elt
        [[2], [-1]]
        sage: elt.lusztig_involution()
        [[1], [-2]]

  `pp`()

    Pretty print `self`.

    EXAMPLES:

        sage: C = crystals.KirillovReshetikhin(['D',4,1], 2,1)
        sage: C(2,1).pp()
          1
          2
        sage: C = crystals.KirillovReshetikhin(['B',3,1], 3,3)
        sage: C.module_generators[0].pp()
        + (X)   1
        +
        +

  `to_kirillov_reshetikhin_tableau`()

    Construct the corresponding `KirillovReshetikhinTableauxElement` from `self`.

    We construct the Kirillov-Reshetikhin tableau element as follows:

    1. Let \(\lambda\) be the shape of `self`.
    2. Determine a path \(e_{i_1} e_{i_2} \cdots e_{i_k}\) to the highest weight.
    3. Apply \(f_{i_k} \cdots f_{i_2} f_{i_1}\) to a highest weight KR tableau from filling the shape \(\lambda\).

    EXAMPLES:

        sage: KRC = crystals.KirillovReshetikhin(['A', 4, 1], 2, 1)
        sage: KRC(columns=[[2,1]]).to_kirillov_reshetikhin_tableau()
        [[1], [2]]
        sage: KRC = crystals.KirillovReshetikhin(['D', 4, 1], 2, 1)
        sage: KRC(rows=[]).to_kirillov_reshetikhin_tableau()
        [[1], [-1]]

  `to_tableau`()

    Return the `Tableau` corresponding to `self`.

    EXAMPLES:

        sage: C = crystals.KirillovReshetikhin(['D',4,1], 2,1)
        sage: t = C(2,1).to_tableau(); t
        [[1], [2]]
        sage: type(t)
        <class 'sage.combinat.tableau.Tableaux_all_with_category.element_class'>

class `sage.combinat.crystals.kirillov_reshetikhin.``PMDiagram`(pm_diagram, from_shapes=None)

  Bases: `sage.combinat.combinat.CombinatorialObject`

  Class of \(\pm\) diagrams. These diagrams are in one-to-one bijection with \(X_{n-1}\) highest weight vectors in an \(X_n\) highest weight crystal \(X=B,C,D\). See Section 4.1 of [Schilling08].

  The input is a list \(pm = [[a_0,b_0], [a_1,b_1], ..., [a_{n-1},b_{n-1}], [b_n]]\) of pairs and a last 1-tuple (or list of length 1). The pair \([a_i,b_i]\) specifies the number of \(a_i\) \(+\) and \(b_i\) \(-\) in the \(i\)-th row of the \(\pm\) diagram if \(n-i\) is odd and the number of \(a_i\) \(\pm\) pairs above row \(i\) and \(b_i\) columns of height \(i\) not containing any \(+\) or \(-\) if \(n-i\) is even.

  Setting the option `from_shapes = True` one can also input a \(\pm\) diagram in terms of its outer, intermediate, and inner shape by specifying a list `[n, s, outer, intermediate, inner]` where `s` is the width of the \(\pm\) diagram, and `outer`, `intermediate`, and `inner` are the outer, intermediate, and inner shapes, respectively.

  EXAMPLES:

      sage: from sage.combinat.crystals.kirillov_reshetikhin import PMDiagram
      sage: pm = PMDiagram([[0,1],[1,2],[1]])
      sage: pm.pm_diagram
      [[0, 1], [1, 2], [1]]
      sage: pm._list
      [1, 1, 2, 0, 1]
      sage: pm.n
      2
      sage: pm.width
      5
      sage: pm.pp()
      .  .  .  .
      .  +  -  -
      sage: PMDiagram([2,5,[4,4],[4,2],[4,1]], from_shapes=True)
      [[0, 1], [1, 2], [1]]

  TESTS:

      sage: from sage.combinat.crystals.kirillov_reshetikhin import PMDiagram
      sage: pm = PMDiagram([[1,2],[1,1],[1,1],[1,1],[1]])
      sage: PMDiagram([pm.n, pm.width, pm.outer_shape(), pm.intermediate_shape(), pm.inner_shape()], from_shapes=True) == pm
      True
      sage: pm = PMDiagram([[1,2],[1,2],[1,1],[1,1],[1,1],[1]])
      sage: PMDiagram([pm.n, pm.width, pm.outer_shape(), pm.intermediate_shape(), pm.inner_shape()], from_shapes=True) == pm
      True

  `heights_of_addable_plus`()

    Return a list with the heights of all addable plus in the \(\pm\) diagram.

    EXAMPLES:

        sage: from sage.combinat.crystals.kirillov_reshetikhin import PMDiagram
        sage: pm = PMDiagram([[1,2],[1,2],[1,1],[1,1],[1,1],[1]])
        sage: pm.heights_of_addable_plus()
        [1, 1, 2, 3, 4, 5]
        sage: pm = PMDiagram([[1,2],[1,1],[1,1],[1,1],[1]])
        sage: pm.heights_of_addable_plus()
        [1, 2, 3, 4]

  `heights_of_minus`()

    Return a list with the heights of all minus in the \(\pm\) diagram.

    EXAMPLES:

        sage: from sage.combinat.crystals.kirillov_reshetikhin import PMDiagram
        sage: pm = PMDiagram([[1,2],[1,2],[1,1],[1,1],[1,1],[1]])
        sage: pm.heights_of_minus()
        [5, 5, 3, 3, 1, 1]
        sage: pm = PMDiagram([[1,2],[1,1],[1,1],[1,1],[1]])
        sage: pm.heights_of_minus()
        [4, 4, 2, 2]

  `inner_shape`()

    Return the inner shape of the pm diagram

    EXAMPLES:

        sage: from sage.combinat.crystals.kirillov_reshetikhin import PMDiagram
        sage: pm = PMDiagram([[0,1],[1,2],[1]])
        sage: pm.inner_shape()
        [4, 1]
        sage: pm = PMDiagram([[1,2],[1,1],[1,1],[1,1],[1]])
        sage: pm.inner_shape()
        [7, 5, 3, 1]
        sage: pm = PMDiagram([[1,2],[1,2],[1,1],[1,1],[1,1],[1]])
        sage: pm.inner_shape()
        [10, 7, 5, 3, 1]

  `intermediate_shape`()

    Return the intermediate shape of the pm diagram (inner shape plus positions of plusses)

    EXAMPLES:

        sage: from sage.combinat.crystals.kirillov_reshetikhin import PMDiagram
        sage: pm = PMDiagram([[0,1],[1,2],[1]])
        sage: pm.intermediate_shape()
        [4, 2]
        sage: pm = PMDiagram([[1,2],[1,1],[1,1],[1,1],[1]])
        sage: pm.intermediate_shape()
        [8, 6, 4, 2]
        sage: pm = PMDiagram([[1,2],[1,2],[1,1],[1,1],[1,1],[1]])
        sage: pm.intermediate_shape()
        [11, 8, 6, 4, 2]
        sage: pm = PMDiagram([[1,0],[0,1],[2,0],[0,0],[0]])
        sage: pm.intermediate_shape()
        [4, 2, 2]
        sage: pm = PMDiagram([[1, 0], [0, 0], [0, 0], [0, 0], [0]])
        sage: pm.intermediate_shape()
        [1]

  `outer_shape`()

    Return the outer shape of the \(\pm\) diagram

    EXAMPLES:

        sage: from sage.combinat.crystals.kirillov_reshetikhin import PMDiagram
        sage: pm = PMDiagram([[0,1],[1,2],[1]])
        sage: pm.outer_shape()
        [4, 4]
        sage: pm = PMDiagram([[1,2],[1,1],[1,1],[1,1],[1]])
        sage: pm.outer_shape()
        [8, 8, 4, 4]
        sage: pm = PMDiagram([[1,2],[1,2],[1,1],[1,1],[1,1],[1]])
        sage: pm.outer_shape()
        [13, 8, 8, 4, 4]

  `pp`()

    Pretty print `self`.

    EXAMPLES:

        sage: from sage.combinat.crystals.kirillov_reshetikhin import PMDiagram
        sage: pm = PMDiagram([[1,0],[0,1],[2,0],[0,0],[0]])
        sage: pm.pp()
        .  .  .  +
        .  .  -  -
        +  +
        -  -
        sage: pm = PMDiagram([[0,2], [0,0], [0]])
        sage: pm.pp()

  `sigma`()

    Return sigma on pm diagrams as needed for the analogue of the Dynkin diagram automorphism that interchanges nodes \(0\) and \(1\) for type \(D_n(1)\), \(B_n(1)\), \(A_{2n-1}(2)\) for Kirillov-Reshetikhin crystals.

    EXAMPLES:

        sage: pm = sage.combinat.crystals.kirillov_reshetikhin.PMDiagram([[0,1],[1,2],[1]])
        sage: pm.sigma()
        [[1, 0], [2, 1], [1]]

`sage.combinat.crystals.kirillov_reshetikhin.``horizontal_dominoes_removed`(r, s)

  Returns all partitions obtained from a rectangle of width s and height r by removing horizontal dominoes.

  EXAMPLES:

      sage: sage.combinat.crystals.kirillov_reshetikhin.horizontal_dominoes_removed(2,2)
      [[], [2], [2, 2]]
      sage: sage.combinat.crystals.kirillov_reshetikhin.horizontal_dominoes_removed(3,2)
      [[], [2], [2, 2], [2, 2, 2]]

`sage.combinat.crystals.kirillov_reshetikhin.``partitions_in_box`(r, s)

  Returns all partitions in a box of width s and height r.

  EXAMPLES:

      sage: sage.combinat.crystals.kirillov_reshetikhin.partitions_in_box(3,2)
      [[], [1], [2], [1, 1], [2, 1], [1, 1, 1], [2, 2], [2, 1, 1],
      [2, 2, 1], [2, 2, 2]]

`sage.combinat.crystals.kirillov_reshetikhin.``vertical_dominoes_removed`(r, s)

  Returns all partitions obtained from a rectangle of width s and height r by removing vertical dominoes.

  EXAMPLES:

      sage: sage.combinat.crystals.kirillov_reshetikhin.vertical_dominoes_removed(2,2)
      [[], [1, 1], [2, 2]]
      sage: sage.combinat.crystals.kirillov_reshetikhin.vertical_dominoes_removed(3,2)
      [[2], [2, 1, 1], [2, 2, 2]]
      sage: sage.combinat.crystals.kirillov_reshetikhin.vertical_dominoes_removed(4,2)
      [[], [1, 1], [1, 1, 1, 1], [2, 2], [2, 2, 1, 1], [2, 2, 2, 2]]

### Navigation

- index
- modules |
- next |
- previous |
- Combinatorics »
- Crystals »