Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
r""" Abstract classes for the rigged configuration bijections
This file contains two sets of classes, one for the bijection from KR tableaux to rigged configurations and the other for the reverse bijection. We do this for two reasons, one is because we can store a state in the bijection locally, so we do not have to constantly pass it around between functions. The other is because it makes the code easier to read in the \*_element.py files.
These classes are not meant to be used by the user and are only supposed to be used internally to perform the bijections between :class:`~sage.combinat.rigged_configurations.tensor_product_kr_tableaux.TensorProductOfKirillovReshetikhinTableaux` and :class:`RiggedConfigurations`.
AUTHORS:
- Travis Scrimshaw (2011-04-15): Initial version """
#***************************************************************************** # Copyright (C) 2011, 2012 Travis Scrimshaw <tscrim@ucdavis.edu> # # Distributed under the terms of the GNU General Public License (GPL) # # This code is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # The full text of the GPL is available at: # # http://www.gnu.org/licenses/ #*****************************************************************************
""" Root abstract class for the bijection from KR tableaux to rigged configurations.
This class holds the state of the bijection and generates the next state. This class should never be created directly. """
""" Initialize the bijection by obtaining the important information from the KR tableaux.
INPUT:
- ``parent`` -- The parent of tensor product of KR tableaux
EXAMPLES::
sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['A', 4, 1], [[2,1]]) sage: from sage.combinat.rigged_configurations.bij_type_A import KRTToRCBijectionTypeA sage: bijection = KRTToRCBijectionTypeA(KRT(pathlist=[[3,1]])) sage: TestSuite(bijection).run() """ # We allow this to be mutable to make the bijection easier to program. # Upon completing the bijection, this will be set to immutable. # Do not call this, the object could be in a mutable state and ultimately # be placed in an unstable state. # The user will (and should) never know about this temporary mutable state. # self.L = {}
r""" Check equality.
This is only here for pickling check. This is a temporary placeholder class, and as such, should never be compared.
TESTS::
sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['A', 4, 1], [[2,1]]) sage: from sage.combinat.rigged_configurations.bij_type_A import KRTToRCBijectionTypeA sage: bijection = KRTToRCBijectionTypeA(KRT(pathlist=[[5,3]])) sage: bijection2 = KRTToRCBijectionTypeA(KRT(pathlist=[[5,3]])) sage: bijection == bijection2 True """
""" Run the bijection from a tensor product of KR tableaux to a rigged configuration.
INPUT:
- ``tp_krt`` -- A tensor product of KR tableaux
- ``verbose`` -- (Default: ``False``) Display each step in the bijection
EXAMPLES::
sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['A', 4, 1], [[2, 1]]) sage: from sage.combinat.rigged_configurations.bij_type_A import KRTToRCBijectionTypeA sage: KRTToRCBijectionTypeA(KRT(pathlist=[[5,2]])).run() <BLANKLINE> -1[ ]-1 <BLANKLINE> 1[ ]1 <BLANKLINE> 0[ ]0 <BLANKLINE> -1[ ]-1 <BLANKLINE> """ from sage.combinat.rigged_configurations.tensor_product_kr_tableaux_element \ import TensorProductOfKirillovReshetikhinTableauxElement
# Iterate through the columns
print("====================") print(repr(TensorProductOfKirillovReshetikhinTableauxElement(self.tp_krt.parent(), self.cur_path))) print("--------------------") print(repr(self.ret_rig_con)) print("--------------------\n")
# Build the next state
# If we've split off a column, we need to merge the current column # to the current crystal tableau print("====================") print(repr(TensorProductOfKirillovReshetikhinTableauxElement(self.tp_krt.parent(), self.cur_path))) print("--------------------") print(repr(self.ret_rig_con)) print("--------------------\n") print("Applying column merge")
# And perform the inverse column splitting map on the RC
def next_state(self, val): r""" Build the next state in the bijection.
INPUT:
- ``val`` -- The value we are adding
TESTS::
sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['A', 4, 1], [[2,1]]) sage: from sage.combinat.rigged_configurations.bij_type_A import KRTToRCBijectionTypeA sage: bijection = KRTToRCBijectionTypeA(KRT(pathlist=[[5,3]])) sage: bijection.cur_path.insert(0, []) sage: bijection.cur_dims.insert(0, [0, 1]) sage: bijection.cur_path[0].insert(0, [3]) sage: bijection.next_state(3) sage: bijection.ret_rig_con <BLANKLINE> -1[ ]-1 <BLANKLINE> -1[ ]-1 <BLANKLINE> (/) <BLANKLINE> (/) <BLANKLINE> """
r""" Update the vacancy numbers of a rigged partition.
Helper function to (batch) update the vacancy numbers of the rigged partition at position `a` in the rigged configuration stored by this bijection.
INPUT:
- ``a`` -- The index of the partition to update
TESTS::
sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['A', 4, 1], [[2,1]]) sage: from sage.combinat.rigged_configurations.bij_abstract_class import KRTToRCBijectionAbstract sage: bijection = KRTToRCBijectionAbstract(KRT(pathlist=[[3,2]])) sage: bijection._update_vacancy_nums(2) """ # Check to make sure we have a valid index (currently removed) # If the current tableau is empty, there is nothing to do
# Setup the first block dims=self.cur_dims)
# If we've gone to a different sized block, then update the # values which change when moving to a new block size dims=self.cur_dims)
r""" Update the partition values of a rigged partition.
Helper function to update the partition values of a given rigged partition row. This will go through all of our partition values and set them to our vacancy number if the corresponding row has been changed (indicated by being set to ``None``).
INPUT:
- ``a`` -- The index of the partition to update
TESTS::
sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['A', 4, 1], [[2,1]]) sage: from sage.combinat.rigged_configurations.bij_abstract_class import KRTToRCBijectionAbstract sage: bijection = KRTToRCBijectionAbstract(KRT(pathlist=[[5,2]])) sage: bijection._update_partition_values(2) """ and rigged_partition.rigging[index - 1] < rigged_partition.rigging[index]: # If we need to reorder
""" Return the next index after ``r`` when performing a step in the bijection going towards ``target``.
TESTS::
sage: KRT = crystals.TensorProductOfKirillovReshetikhinTableaux(['A', 4, 1], [[2,1]]) sage: from sage.combinat.rigged_configurations.bij_abstract_class import KRTToRCBijectionAbstract sage: bijection = KRTToRCBijectionAbstract(KRT(pathlist=[[5,2]])) sage: bijection._next_index(1, 2) 2 """
""" Root abstract class for the bijection from rigged configurations to tensor product of Kirillov-Reshetikhin tableaux.
This class holds the state of the bijection and generates the next state. This class should never be created directly. """
""" Initialize the bijection helper.
INPUT:
- ``RC_element`` -- The rigged configuration
EXAMPLES::
sage: RC = RiggedConfigurations(['A', 4, 1], [[2, 1]]) sage: from sage.combinat.rigged_configurations.bij_abstract_class import RCToKRTBijectionAbstract sage: bijection = RCToKRTBijectionAbstract(RC(partition_list=[[1],[1],[1],[1]])) sage: TestSuite(bijection).run() """ # Make a mutable clone of the rigged configuration for the bijection # This will be deleted when the bijection is completed
# Make a (deep) copy of the dimensions for the bijection
# Note that this implementation of the bijection is destructive to cur_partitions, # therefore we will make a (deep) copy of the partitions. # TODO: Convert from cur_partitions to rigged_con
# This is a dummy edge to start the process
r""" Check equality.
This is only here for pickling check. This is a temporary placeholder class, and as such, should never be compared.
TESTS::
sage: RC = RiggedConfigurations(['A', 4, 1], [[2, 1]]) sage: from sage.combinat.rigged_configurations.bij_type_A import RCToKRTBijectionTypeA sage: bijection = RCToKRTBijectionTypeA(RC(partition_list=[[1],[1],[1],[1]])) sage: bijection2 = RCToKRTBijectionTypeA(RC(partition_list=[[1],[1],[1],[1]])) sage: bijection == bijection2 True """
""" Run the bijection from rigged configurations to tensor product of KR tableaux.
INPUT:
- ``verbose`` -- (default: ``False``) display each step in the bijection - ``build_graph`` -- (default: ``False``) build the graph of each step of the bijection
EXAMPLES::
sage: RC = RiggedConfigurations(['A', 4, 1], [[2, 1]]) sage: x = RC(partition_list=[[1],[1],[1],[1]]) sage: from sage.combinat.rigged_configurations.bij_type_A import RCToKRTBijectionTypeA sage: RCToKRTBijectionTypeA(x).run() [[2], [5]] sage: bij = RCToKRTBijectionTypeA(x) sage: bij.run(build_graph=True) [[2], [5]] sage: bij._graph Digraph on 3 vertices """
# This is technically bad, but because the first thing we do is append # an empty list to ret_crystal_path, we correct this. We do it this # way so that we do not have to remove an empty list after the # bijection has been performed.
# Iterate over each column # Split off a new column if necessary print("====================") print(repr(self.rigged_con.parent()(*self.cur_partitions, use_vacancy_numbers=True))) print("--------------------") print(ret_crystal_path) print("--------------------\n") print("Applying column split")
# Perform the corresponding splitting map on rigged configurations # All it does is update the vacancy numbers on the RC side
y = self.rigged_con.parent()(*[x._clone() for x in self.cur_partitions], use_vacancy_numbers=True) self._graph.append([self._graph[-1][1], (y, len(self._graph)), 'ls'])
print("====================") print(repr(self.rigged_con.parent()(*self.cur_partitions, use_vacancy_numbers=True))) print("--------------------") print(ret_crystal_path) print("--------------------\n")
# Make sure we have a crystal letter
self._graph.set_latex_options(format="dot2tex", edge_labels=True)
def next_state(self, height): """ Build the next state in the bijection.
TESTS::
sage: RC = RiggedConfigurations(['A', 4, 1], [[2, 1]]) sage: from sage.combinat.rigged_configurations.bij_type_A import RCToKRTBijectionTypeA sage: bijection = RCToKRTBijectionTypeA(RC(partition_list=[[1],[1],[1],[1]])) sage: bijection.next_state(1) 5 sage: bijection.cur_partitions [(/) , (/) , (/) , (/) ] """
r""" Update the vacancy numbers during the bijection.
INPUT:
- ``a`` -- The index of the partition to update
TESTS::
sage: RC = RiggedConfigurations(['A', 4, 1], [[2, 1]]) sage: from sage.combinat.rigged_configurations.bij_abstract_class import RCToKRTBijectionAbstract sage: bijection = RCToKRTBijectionAbstract(RC(partition_list=[[1],[1],[1],[1]])) sage: bijection._update_vacancy_numbers(2) """
# Nothing to do if there the rigged partition is empty
# Setup the first block a, partition[0], dims=self.cur_dims)
# If we've gone to a different sized block, then update the # values which change when moving to a new block size a, row_len, dims=self.cur_dims)
r""" Return the index of the singular string or ``None`` if not found.
Helper method to find a singular string at least as long as ``last_size``.
INPUT:
- ``partition`` -- The partition to look in
- ``last_size`` -- The last size found
TESTS::
sage: RC = RiggedConfigurations(['A', 4, 1], [[2, 1]]) sage: from sage.combinat.rigged_configurations.bij_abstract_class import RCToKRTBijectionAbstract sage: bijection = RCToKRTBijectionAbstract(RC(partition_list=[[1],[1],[1],[1]])) sage: bijection._find_singular_string(bijection.cur_partitions[2], 2) sage: bijection._find_singular_string(bijection.cur_partitions[2], 0) 0 """ and partition.vacancy_numbers[i] == partition.rigging[i]):
""" Return the next index after ``r`` when performing a step in the bijection.
TESTS::
sage: RC = RiggedConfigurations(['A', 4, 1], [[2, 1]]) sage: from sage.combinat.rigged_configurations.bij_abstract_class import RCToKRTBijectionAbstract sage: bijection = RCToKRTBijectionAbstract(RC(partition_list=[[1],[1],[1],[1]])) sage: bijection._next_index(2) 1 """
|