


import os
from shutil import copyfile
from typing import List, Optional, Tuple

from tokenizers import processors

from ...tokenization_utils import AddedToken, BatchEncoding
from ...tokenization_utils_fast import PreTrainedTokenizerFast
from ...utils import is_sentencepiece_available, logging


if is_sentencepiece_available():
     from .tokenization_nllb import NllbTokenizer
else:
     __UpperCAmelCase : Any 			=				None


__UpperCAmelCase : str 			=				logging.get_logger(__name__)


__UpperCAmelCase : str 			=				{"vocab_file": "sentencepiece.bpe.model", "tokenizer_file": "tokenizer.json"}

__UpperCAmelCase : Any 			=				{
    "vocab_file": {
        "facebook/nllb-200-distilled-600M": (
            "https://huggingface.co/facebook/nllb-200-distilled-600M/resolve/main/sentencepiece.bpe.model"
        ),
    },
    "tokenizer_file": {
        "facebook/nllb-200-distilled-600M": (
            "https://huggingface.co/facebook/nllb-200-distilled-600M/resolve/main/tokenizer.json"
        ),
    },
}

__UpperCAmelCase : Tuple 			=				{
    "facebook/nllb-large-en-ro": 1024,
    "facebook/nllb-200-distilled-600M": 1024,
}

# fmt: off
__UpperCAmelCase : Tuple 			=				["ace_Arab", "ace_Latn", "acm_Arab", "acq_Arab", "aeb_Arab", "afr_Latn", "ajp_Arab", "aka_Latn", "amh_Ethi", "apc_Arab", "arb_Arab", "ars_Arab", "ary_Arab", "arz_Arab", "asm_Beng", "ast_Latn", "awa_Deva", "ayr_Latn", "azb_Arab", "azj_Latn", "bak_Cyrl", "bam_Latn", "ban_Latn", "bel_Cyrl", "bem_Latn", "ben_Beng", "bho_Deva", "bjn_Arab", "bjn_Latn", "bod_Tibt", "bos_Latn", "bug_Latn", "bul_Cyrl", "cat_Latn", "ceb_Latn", "ces_Latn", "cjk_Latn", "ckb_Arab", "crh_Latn", "cym_Latn", "dan_Latn", "deu_Latn", "dik_Latn", "dyu_Latn", "dzo_Tibt", "ell_Grek", "eng_Latn", "epo_Latn", "est_Latn", "eus_Latn", "ewe_Latn", "fao_Latn", "pes_Arab", "fij_Latn", "fin_Latn", "fon_Latn", "fra_Latn", "fur_Latn", "fuv_Latn", "gla_Latn", "gle_Latn", "glg_Latn", "grn_Latn", "guj_Gujr", "hat_Latn", "hau_Latn", "heb_Hebr", "hin_Deva", "hne_Deva", "hrv_Latn", "hun_Latn", "hye_Armn", "ibo_Latn", "ilo_Latn", "ind_Latn", "isl_Latn", "ita_Latn", "jav_Latn", "jpn_Jpan", "kab_Latn", "kac_Latn", "kam_Latn", "kan_Knda", "kas_Arab", "kas_Deva", "kat_Geor", "knc_Arab", "knc_Latn", "kaz_Cyrl", "kbp_Latn", "kea_Latn", "khm_Khmr", "kik_Latn", "kin_Latn", "kir_Cyrl", "kmb_Latn", "kon_Latn", "kor_Hang", "kmr_Latn", "lao_Laoo", "lvs_Latn", "lij_Latn", "lim_Latn", "lin_Latn", "lit_Latn", "lmo_Latn", "ltg_Latn", "ltz_Latn", "lua_Latn", "lug_Latn", "luo_Latn", "lus_Latn", "mag_Deva", "mai_Deva", "mal_Mlym", "mar_Deva", "min_Latn", "mkd_Cyrl", "plt_Latn", "mlt_Latn", "mni_Beng", "khk_Cyrl", "mos_Latn", "mri_Latn", "zsm_Latn", "mya_Mymr", "nld_Latn", "nno_Latn", "nob_Latn", "npi_Deva", "nso_Latn", "nus_Latn", "nya_Latn", "oci_Latn", "gaz_Latn", "ory_Orya", "pag_Latn", "pan_Guru", "pap_Latn", "pol_Latn", "por_Latn", "prs_Arab", "pbt_Arab", "quy_Latn", "ron_Latn", "run_Latn", "rus_Cyrl", "sag_Latn", "san_Deva", "sat_Beng", "scn_Latn", "shn_Mymr", "sin_Sinh", "slk_Latn", "slv_Latn", "smo_Latn", "sna_Latn", "snd_Arab", "som_Latn", "sot_Latn", "spa_Latn", "als_Latn", "srd_Latn", "srp_Cyrl", "ssw_Latn", "sun_Latn", "swe_Latn", "swh_Latn", "szl_Latn", "tam_Taml", "tat_Cyrl", "tel_Telu", "tgk_Cyrl", "tgl_Latn", "tha_Thai", "tir_Ethi", "taq_Latn", "taq_Tfng", "tpi_Latn", "tsn_Latn", "tso_Latn", "tuk_Latn", "tum_Latn", "tur_Latn", "twi_Latn", "tzm_Tfng", "uig_Arab", "ukr_Cyrl", "umb_Latn", "urd_Arab", "uzn_Latn", "vec_Latn", "vie_Latn", "war_Latn", "wol_Latn", "xho_Latn", "ydd_Hebr", "yor_Latn", "yue_Hant", "zho_Hans", "zho_Hant", "zul_Latn"]



class    UpperCAmelCase_	(							_a):
       '''simple docstring'''
       __UpperCamelCase      :     int							=					VOCAB_FILES_NAMES
       __UpperCamelCase      :     Any							=					PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES
       __UpperCamelCase      :     int							=					PRETRAINED_VOCAB_FILES_MAP
       __UpperCamelCase      :     str							=					["input_ids", "attention_mask"]
       __UpperCamelCase      :     int							=					NllbTokenizer

       __UpperCamelCase      :     List[int]							=					[]
       __UpperCamelCase      :     List[int]							=					[]






       def __init__(     self ,					__SCREAMING_SNAKE_CASE=None ,					__SCREAMING_SNAKE_CASE=None ,					__SCREAMING_SNAKE_CASE="<s>" ,					__SCREAMING_SNAKE_CASE="</s>" ,					__SCREAMING_SNAKE_CASE="</s>" ,					__SCREAMING_SNAKE_CASE="<s>" ,					__SCREAMING_SNAKE_CASE="<unk>" ,					__SCREAMING_SNAKE_CASE="<pad>" ,					__SCREAMING_SNAKE_CASE="<mask>" ,					__SCREAMING_SNAKE_CASE=None ,					__SCREAMING_SNAKE_CASE=None ,					__SCREAMING_SNAKE_CASE=None ,					__SCREAMING_SNAKE_CASE=False ,					**__SCREAMING_SNAKE_CASE ,					):




              """simple docstring"""




              UpperCamelCase    :	Optional[Any]   	=		AddedToken(__SCREAMING_SNAKE_CASE ,					lstrip=__SCREAMING_SNAKE_CASE ,					rstrip=__SCREAMING_SNAKE_CASE						) if isinstance(__SCREAMING_SNAKE_CASE ,					__SCREAMING_SNAKE_CASE						) else mask_token
              UpperCamelCase    :	Optional[Any]   	=		legacy_behaviour
              super().__init__(
                  vocab_file=__SCREAMING_SNAKE_CASE ,					tokenizer_file=__SCREAMING_SNAKE_CASE ,					bos_token=__SCREAMING_SNAKE_CASE ,					eos_token=__SCREAMING_SNAKE_CASE ,					sep_token=__SCREAMING_SNAKE_CASE ,					cls_token=__SCREAMING_SNAKE_CASE ,					unk_token=__SCREAMING_SNAKE_CASE ,					pad_token=__SCREAMING_SNAKE_CASE ,					mask_token=__SCREAMING_SNAKE_CASE ,					src_lang=__SCREAMING_SNAKE_CASE ,					tgt_lang=__SCREAMING_SNAKE_CASE ,					additional_special_tokens=__SCREAMING_SNAKE_CASE ,					legacy_behaviour=__SCREAMING_SNAKE_CASE ,					**__SCREAMING_SNAKE_CASE ,					)

              UpperCamelCase    :	Optional[int]   	=		vocab_file
              UpperCamelCase    :	str   	=		False if not self.vocab_file else True

              UpperCamelCase    :	Tuple   	=		FAIRSEQ_LANGUAGE_CODES.copy()

              if additional_special_tokens is not None:
                     # Only add those special tokens if they are not already there.
                     _additional_special_tokens.extend(
                         [t for t in additional_special_tokens if t not in _additional_special_tokens]						)

              self.add_special_tokens({'''additional_special_tokens''': _additional_special_tokens}						)
              UpperCamelCase    :	Optional[int]   	=		{
                  lang_code: self.convert_tokens_to_ids(__SCREAMING_SNAKE_CASE						) for lang_code in FAIRSEQ_LANGUAGE_CODES
              }

              UpperCamelCase    :	Any   	=		src_lang if src_lang is not None else '''eng_Latn'''
              UpperCamelCase    :	int   	=		self.convert_tokens_to_ids(self._src_lang						)
              UpperCamelCase    :	List[Any]   	=		tgt_lang
              self.set_src_lang_special_tokens(self._src_lang						)






       @property
       def  _lowercase   (     self						):




              """simple docstring"""




              return self._src_lang






       @src_lang.setter
       def  _lowercase   (     self ,					__SCREAMING_SNAKE_CASE						):




              """simple docstring"""




              UpperCamelCase    :	Optional[int]   	=		new_src_lang
              self.set_src_lang_special_tokens(self._src_lang						)






       def  _lowercase   (     self ,					__SCREAMING_SNAKE_CASE ,					__SCREAMING_SNAKE_CASE = None						):




              """simple docstring"""




              if token_ids_a is None:
                     return self.prefix_tokens + token_ids_a + self.suffix_tokens
              # We don't expect to process pairs, but leave the pair logic for API consistency
              return self.prefix_tokens + token_ids_a + token_ids_a + self.suffix_tokens






       def  _lowercase   (     self ,					__SCREAMING_SNAKE_CASE ,					__SCREAMING_SNAKE_CASE = None						):




              """simple docstring"""




              UpperCamelCase    :	List[str]   	=		[self.sep_token_id]
              UpperCamelCase    :	Optional[int]   	=		[self.cls_token_id]

              if token_ids_a is None:
                     return len(cls + token_ids_a + sep						) * [0]
              return len(cls + token_ids_a + sep + sep + token_ids_a + sep						) * [0]






       def  _lowercase   (     self ,					__SCREAMING_SNAKE_CASE ,					__SCREAMING_SNAKE_CASE ,					__SCREAMING_SNAKE_CASE ,					__SCREAMING_SNAKE_CASE ,					**__SCREAMING_SNAKE_CASE						):




              """simple docstring"""




              if src_lang is None or tgt_lang is None:
                     raise ValueError('''Translation requires a `src_lang` and a `tgt_lang` for this model'''						)
              UpperCamelCase    :	Dict   	=		src_lang
              UpperCamelCase    :	List[str]   	=		self(__SCREAMING_SNAKE_CASE ,					add_special_tokens=__SCREAMING_SNAKE_CASE ,					return_tensors=__SCREAMING_SNAKE_CASE ,					**__SCREAMING_SNAKE_CASE						)
              UpperCamelCase    :	str   	=		self.convert_tokens_to_ids(__SCREAMING_SNAKE_CASE						)
              UpperCamelCase    :	Any   	=		tgt_lang_id
              return inputs






       def  _lowercase   (     self ,					__SCREAMING_SNAKE_CASE ,					__SCREAMING_SNAKE_CASE = "eng_Latn" ,					__SCREAMING_SNAKE_CASE = None ,					__SCREAMING_SNAKE_CASE = "fra_Latn" ,					**__SCREAMING_SNAKE_CASE ,					):




              """simple docstring"""




              UpperCamelCase    :	List[str]   	=		src_lang
              UpperCamelCase    :	List[Any]   	=		tgt_lang
              return super().prepare_seqaseq_batch(__SCREAMING_SNAKE_CASE ,					__SCREAMING_SNAKE_CASE ,					**__SCREAMING_SNAKE_CASE						)






       def  _lowercase   (     self						):




              """simple docstring"""




              return self.set_src_lang_special_tokens(self.src_lang						)






       def  _lowercase   (     self						):




              """simple docstring"""




              return self.set_tgt_lang_special_tokens(self.tgt_lang						)






       def  _lowercase   (     self ,					__SCREAMING_SNAKE_CASE						):




              """simple docstring"""




              UpperCamelCase    :	Dict   	=		self.convert_tokens_to_ids(__SCREAMING_SNAKE_CASE						)

              if self.legacy_behaviour:
                     UpperCamelCase    :	Optional[Any]   	=		[]
                     UpperCamelCase    :	Union[str, Any]   	=		[self.eos_token_id, self.cur_lang_code]
              else:
                     UpperCamelCase    :	List[Any]   	=		[self.cur_lang_code]
                     UpperCamelCase    :	List[Any]   	=		[self.eos_token_id]

              UpperCamelCase    :	Union[str, Any]   	=		self.convert_ids_to_tokens(self.prefix_tokens						)
              UpperCamelCase    :	Dict   	=		self.convert_ids_to_tokens(self.suffix_tokens						)

              UpperCamelCase    :	List[Any]   	=		processors.TemplateProcessing(
                  single=prefix_tokens_str + ['''$A'''] + suffix_tokens_str ,					pair=prefix_tokens_str + ['''$A''', '''$B'''] + suffix_tokens_str ,					special_tokens=list(zip(prefix_tokens_str + suffix_tokens_str ,					self.prefix_tokens + self.suffix_tokens						)						) ,					)






       def  _lowercase   (     self ,					__SCREAMING_SNAKE_CASE						):




              """simple docstring"""




              UpperCamelCase    :	Dict   	=		self.convert_tokens_to_ids(__SCREAMING_SNAKE_CASE						)
              if self.legacy_behaviour:
                     UpperCamelCase    :	Any   	=		[]
                     UpperCamelCase    :	Optional[int]   	=		[self.eos_token_id, self.cur_lang_code]
              else:
                     UpperCamelCase    :	Union[str, Any]   	=		[self.cur_lang_code]
                     UpperCamelCase    :	List[str]   	=		[self.eos_token_id]

              UpperCamelCase    :	Dict   	=		self.convert_ids_to_tokens(self.prefix_tokens						)
              UpperCamelCase    :	Union[str, Any]   	=		self.convert_ids_to_tokens(self.suffix_tokens						)

              UpperCamelCase    :	Optional[int]   	=		processors.TemplateProcessing(
                  single=prefix_tokens_str + ['''$A'''] + suffix_tokens_str ,					pair=prefix_tokens_str + ['''$A''', '''$B'''] + suffix_tokens_str ,					special_tokens=list(zip(prefix_tokens_str + suffix_tokens_str ,					self.prefix_tokens + self.suffix_tokens						)						) ,					)






       def  _lowercase   (     self ,					__SCREAMING_SNAKE_CASE ,					__SCREAMING_SNAKE_CASE = None						):




              """simple docstring"""




              if not self.can_save_slow_tokenizer:
                     raise ValueError(
                         '''Your fast tokenizer does not have the necessary information to save the vocabulary for a slow '''
                         '''tokenizer.'''						)

              if not os.path.isdir(__SCREAMING_SNAKE_CASE						):
                     logger.error(f"""Vocabulary path ({save_directory}) should be a directory."""						)
                     return
              UpperCamelCase    :	Dict   	=		os.path.join(
                  __SCREAMING_SNAKE_CASE ,					(filename_prefix + '''-''' if filename_prefix else '''''') + VOCAB_FILES_NAMES['''vocab_file''']						)

              if os.path.abspath(self.vocab_file						) != os.path.abspath(__SCREAMING_SNAKE_CASE						):
                     copyfile(self.vocab_file ,					__SCREAMING_SNAKE_CASE						)

              return (out_vocab_file,)





from __future__ import annotations


def      a	(							SCREAMING_SNAKE_CASE_      :		list[int]       ):






       """simple docstring"""





       if len(SCREAMING_SNAKE_CASE_       ) == 0:
              return array

       UpperCamelCase	, UpperCamelCase    :	Union[str, Any]   	=		min(SCREAMING_SNAKE_CASE_       ), max(SCREAMING_SNAKE_CASE_       )

       # Compute the variables
       UpperCamelCase    :	Union[str, Any]   	=		_max - _min + 1
       UpperCamelCase	, UpperCamelCase    :	Optional[Any]   	=		[0] * holes_range, [0] * holes_range

       # Make the sorting.
       for i in array:
              UpperCamelCase    :	Optional[int]   	=		i - _min
              UpperCamelCase    :	Any   	=		i
              holes_repeat[index] += 1

       # Makes the array back by replacing the numbers.
       UpperCamelCase    :	str   	=		0
       for i in range(SCREAMING_SNAKE_CASE_       ):
              while holes_repeat[i] > 0:
                     UpperCamelCase    :	List[Any]   	=		holes[i]
                     index += 1
                     holes_repeat[i] -= 1

    # Returns the sorted array.
       return array


if __name__ == "__main__":
  import doctest

  doctest.testmod()
  __UpperCAmelCase : Any 			=				input("Enter numbers separated by comma:\n")
  __UpperCAmelCase : int 			=				[int(x) for x in user_input.split(",")]
  print(pigeon_sort(unsorted))

