




'''simple docstring'''




import json
import os
from functools import lru_cache
from typing import List, Optional, Tuple

import regex as re

from ...tokenization_utils import AddedToken, PreTrainedTokenizer
from ...utils import logging


a_   :	Optional[int]							   = logging.get_logger(__name__)

a_   :	Union[str, Any]							   = {
    """vocab_file""": """vocab.json""",
    """merges_file""": """merges.txt""",
}

a_   :	List[Any]							   = {
    """vocab_file""": {
        """roberta-base""": """https://huggingface.co/roberta-base/resolve/main/vocab.json""",
        """roberta-large""": """https://huggingface.co/roberta-large/resolve/main/vocab.json""",
        """roberta-large-mnli""": """https://huggingface.co/roberta-large-mnli/resolve/main/vocab.json""",
        """distilroberta-base""": """https://huggingface.co/distilroberta-base/resolve/main/vocab.json""",
        """roberta-base-openai-detector""": """https://huggingface.co/roberta-base-openai-detector/resolve/main/vocab.json""",
        """roberta-large-openai-detector""": (
            """https://huggingface.co/roberta-large-openai-detector/resolve/main/vocab.json"""
        ),
    },
    """merges_file""": {
        """roberta-base""": """https://huggingface.co/roberta-base/resolve/main/merges.txt""",
        """roberta-large""": """https://huggingface.co/roberta-large/resolve/main/merges.txt""",
        """roberta-large-mnli""": """https://huggingface.co/roberta-large-mnli/resolve/main/merges.txt""",
        """distilroberta-base""": """https://huggingface.co/distilroberta-base/resolve/main/merges.txt""",
        """roberta-base-openai-detector""": """https://huggingface.co/roberta-base-openai-detector/resolve/main/merges.txt""",
        """roberta-large-openai-detector""": (
            """https://huggingface.co/roberta-large-openai-detector/resolve/main/merges.txt"""
        ),
    },
}

a_   :	Optional[int]							   = {
    """roberta-base""": 5_12,
    """roberta-large""": 5_12,
    """roberta-large-mnli""": 5_12,
    """distilroberta-base""": 5_12,
    """roberta-base-openai-detector""": 5_12,
    """roberta-large-openai-detector""": 5_12,
}





@lru_cache()
def   a_							(   )							->		Optional[int]:



       """simple docstring"""
       lowerCamelCase_							=(
           list(range(ord('''!'''     )     , ord('''~'''     ) + 1     )     ) + list(range(ord('''¡'''     )     , ord('''¬'''     ) + 1     )     ) + list(range(ord('''®'''     )     , ord('''ÿ'''     ) + 1     )     )
       )
       lowerCamelCase_							=bs[:]
       lowerCamelCase_							=0
       for b in range(2**8     ):
              if b not in bs:
                     bs.append(__snake_case     )
                     cs.append(2**8 + n     )
                     n += 1
       lowerCamelCase_							=[chr(__snake_case     ) for n in cs]
       return dict(zip(__snake_case     , __snake_case     )     )





def   a_							(   __snake_case							:    str     )							->		Optional[int]:



       """simple docstring"""
       lowerCamelCase_							=set()
       lowerCamelCase_							=word[0]
       for char in word[1:]:
              pairs.add((prev_char, char)     )
              lowerCamelCase_							=char
       return pairs


class 						__UpperCamelCase (				lowerCamelCase__       ):
       lowercase			:					Union[str, Any]   		=VOCAB_FILES_NAMES
       lowercase			:					Any   		=PRETRAINED_VOCAB_FILES_MAP
       lowercase			:					List[str]   		=PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES
       lowercase			:					Dict   		=['input_ids', 'attention_mask']






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



              """simple docstring"""







              lowerCamelCase_							=AddedToken(lowerCAmelCase,	lstrip=lowerCAmelCase,	rstrip=lowerCAmelCase						) if isinstance(lowerCAmelCase,	lowerCAmelCase						) else bos_token
              lowerCamelCase_							=AddedToken(lowerCAmelCase,	lstrip=lowerCAmelCase,	rstrip=lowerCAmelCase						) if isinstance(lowerCAmelCase,	lowerCAmelCase						) else eos_token
              lowerCamelCase_							=AddedToken(lowerCAmelCase,	lstrip=lowerCAmelCase,	rstrip=lowerCAmelCase						) if isinstance(lowerCAmelCase,	lowerCAmelCase						) else sep_token
              lowerCamelCase_							=AddedToken(lowerCAmelCase,	lstrip=lowerCAmelCase,	rstrip=lowerCAmelCase						) if isinstance(lowerCAmelCase,	lowerCAmelCase						) else cls_token
              lowerCamelCase_							=AddedToken(lowerCAmelCase,	lstrip=lowerCAmelCase,	rstrip=lowerCAmelCase						) if isinstance(lowerCAmelCase,	lowerCAmelCase						) else unk_token
              lowerCamelCase_							=AddedToken(lowerCAmelCase,	lstrip=lowerCAmelCase,	rstrip=lowerCAmelCase						) if isinstance(lowerCAmelCase,	lowerCAmelCase						) else pad_token

              # Mask token behave like a normal word, i.e. include the space before it
              lowerCamelCase_							=AddedToken(lowerCAmelCase,	lstrip=lowerCAmelCase,	rstrip=lowerCAmelCase						) if isinstance(lowerCAmelCase,	lowerCAmelCase						) else mask_token

              super().__init__(
                  errors=lowerCAmelCase,	bos_token=lowerCAmelCase,	eos_token=lowerCAmelCase,	unk_token=lowerCAmelCase,	sep_token=lowerCAmelCase,	cls_token=lowerCAmelCase,	pad_token=lowerCAmelCase,	mask_token=lowerCAmelCase,	add_prefix_space=lowerCAmelCase,	**lowerCAmelCase,	)

              with open(lowerCAmelCase,	encoding='''utf-8'''						) as vocab_handle:
                     lowerCamelCase_							=json.load(lowerCAmelCase						)
              lowerCamelCase_							={v: k for k, v in self.encoder.items()}
              lowerCamelCase_							=errors  # how to handle errors in decoding
              lowerCamelCase_							=bytes_to_unicode()
              lowerCamelCase_							={v: k for k, v in self.byte_encoder.items()}
              with open(lowerCAmelCase,	encoding='''utf-8'''						) as merges_handle:
                     lowerCamelCase_							=merges_handle.read().split('''\n'''						)[1:-1]
              lowerCamelCase_							=[tuple(merge.split()						) for merge in bpe_merges]
              lowerCamelCase_							=dict(zip(lowerCAmelCase,	range(len(lowerCAmelCase						)						)						)						)
              lowerCamelCase_							={}
              lowerCamelCase_							=add_prefix_space

              # Should have added re.IGNORECASE so BPE merges can happen for capitalized versions of contractions
              lowerCamelCase_							=re.compile(R'''\'s|\'t|\'re|\'ve|\'m|\'ll|\'d| ?\p{L}+| ?\p{N}+| ?[^\s\p{L}\p{N}]+|\s+(?!\S)|\s+'''						)






       @property
       def   lowercase__  (							self						):



              """simple docstring"""







              return len(self.encoder						)






       def   lowercase__  (							self						):



              """simple docstring"""







              return dict(self.encoder,	**self.added_tokens_encoder						)






       def   lowercase__  (							self,	lowerCAmelCase						):



              """simple docstring"""







              if token in self.cache:
                     return self.cache[token]
              lowerCamelCase_							=tuple(lowerCAmelCase						)
              lowerCamelCase_							=get_pairs(lowerCAmelCase						)

              if not pairs:
                     return token

              while True:
                     lowerCamelCase_							=min(lowerCAmelCase,	key=lambda lowerCAmelCase						: self.bpe_ranks.get(lowerCAmelCase,	float('''inf'''						)						)						)
                     if bigram not in self.bpe_ranks:
                            break
                     lowerCamelCase_,   lowerCamelCase_							=bigram
                     lowerCamelCase_							=[]
                     lowerCamelCase_							=0
                     while i < len(lowerCAmelCase						):
                            try:
                                   lowerCamelCase_							=word.index(lowerCAmelCase,	lowerCAmelCase						)
                            except ValueError:
                                   new_word.extend(word[i:]						)
                                   break
                            else:
                                   new_word.extend(word[i:j]						)
                                   lowerCamelCase_							=j

                            if word[i] == first and i < len(lowerCAmelCase						) - 1 and word[i + 1] == second:
                                   new_word.append(first + second						)
                                   i += 2
                            else:
                                   new_word.append(word[i]						)
                                   i += 1
                     lowerCamelCase_							=tuple(lowerCAmelCase						)
                     lowerCamelCase_							=new_word
                     if len(lowerCAmelCase						) == 1:
                            break
                     else:
                            lowerCamelCase_							=get_pairs(lowerCAmelCase						)
              lowerCamelCase_							=''' '''.join(lowerCAmelCase						)
              lowerCamelCase_							=word
              return word






       def   lowercase__  (							self,	lowerCAmelCase						):



              """simple docstring"""







              lowerCamelCase_							=[]
              for token in re.findall(self.pat,	lowerCAmelCase						):
                     lowerCamelCase_							=''''''.join(
                         self.byte_encoder[b] for b in token.encode('''utf-8'''						)						)  # Maps all our bytes to unicode strings, avoiding control tokens of the BPE (spaces in our case)
                     bpe_tokens.extend(bpe_token for bpe_token in self.bpe(lowerCAmelCase						).split(''' '''						)						)
              return bpe_tokens






       def   lowercase__  (							self,	lowerCAmelCase						):



              """simple docstring"""







              return self.encoder.get(lowerCAmelCase,	self.encoder.get(self.unk_token						)						)






       def   lowercase__  (							self,	lowerCAmelCase						):



              """simple docstring"""







              return self.decoder.get(lowerCAmelCase						)






       def   lowercase__  (							self,	lowerCAmelCase						):



              """simple docstring"""







              lowerCamelCase_							=''''''.join(lowerCAmelCase						)
              lowerCamelCase_							=bytearray([self.byte_decoder[c] for c in text]						).decode('''utf-8''',	errors=self.errors						)
              return text






       def   lowercase__  (							self,	lowerCAmelCase,	lowerCAmelCase = None						):



              """simple docstring"""







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

              with open(lowerCAmelCase,	'''w''',	encoding='''utf-8'''						) as f:
                     f.write(json.dumps(self.encoder,	indent=2,	sort_keys=lowerCAmelCase,	ensure_ascii=lowerCAmelCase						) + '''\n'''						)

              lowerCamelCase_							=0
              with open(lowerCAmelCase,	'''w''',	encoding='''utf-8'''						) as writer:
                     writer.write('''#version: 0.2\n'''						)
                     for bpe_tokens, token_index in sorted(self.bpe_ranks.items(),	key=lambda lowerCAmelCase						: kv[1]						):
                            if index != token_index:
                                   logger.warning(
                                       f'''Saving vocabulary to {merge_file}: BPE merge indices are not consecutive.'''
                                       ''' Please check that the tokenizer is not corrupted!'''						)
                                   lowerCamelCase_							=token_index
                            writer.write(''' '''.join(lowerCAmelCase						) + '''\n'''						)
                            index += 1

              return vocab_file, merge_file






       def   lowercase__  (							self,	lowerCAmelCase,	lowerCAmelCase = None						):



              """simple docstring"""







              if token_ids_a is None:
                     return [self.cls_token_id] + token_ids_a + [self.sep_token_id]
              lowerCamelCase_							=[self.cls_token_id]
              lowerCamelCase_							=[self.sep_token_id]
              return cls + token_ids_a + sep + sep + token_ids_a + sep






       def   lowercase__  (							self,	lowerCAmelCase,	lowerCAmelCase = None,	lowerCAmelCase = False						):



              """simple docstring"""







              if already_has_special_tokens:
                     return super().get_special_tokens_mask(
                         token_ids_a=lowerCAmelCase,	token_ids_a=lowerCAmelCase,	already_has_special_tokens=lowerCAmelCase						)

              if token_ids_a is None:
                     return [1] + ([0] * len(lowerCAmelCase						)) + [1]
              return [1] + ([0] * len(lowerCAmelCase						)) + [1, 1] + ([0] * len(lowerCAmelCase						)) + [1]






       def   lowercase__  (							self,	lowerCAmelCase,	lowerCAmelCase = None						):



              """simple docstring"""







              lowerCamelCase_							=[self.sep_token_id]
              lowerCamelCase_							=[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,	lowerCAmelCase,	lowerCAmelCase=False,	**lowerCAmelCase						):



              """simple docstring"""







              lowerCamelCase_							=kwargs.pop('''add_prefix_space''',	self.add_prefix_space						)
              if (is_split_into_words or add_prefix_space) and (len(lowerCAmelCase						) > 0 and not text[0].isspace()):
                     lowerCamelCase_							=''' ''' + text
              return (text, kwargs)










'''simple docstring'''




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_mbartaa import MBartaaTokenizer
else:
     a_   :	Tuple							   = None


a_   :	List[Any]							   = logging.get_logger(__name__)

a_   :	Any							   = {"""vocab_file""": """sentencepiece.bpe.model""", """tokenizer_file""": """tokenizer.json"""}

a_   :	Any							   = {
    """vocab_file""": {
        """facebook/mbart-large-50-one-to-many-mmt""": (
            """https://huggingface.co/facebook/mbart-large-50-one-to-many-mmt/resolve/main/sentencepiece.bpe.model"""
        ),
    },
    """tokenizer_file""": {
        """facebook/mbart-large-50-one-to-many-mmt""": (
            """https://huggingface.co/facebook/mbart-large-50-one-to-many-mmt/resolve/main/tokenizer.json"""
        ),
    },
}

a_   :	Dict							   = {
    """facebook/mbart-large-50-one-to-many-mmt""": 10_24,
}

# fmt: off
a_   :	List[str]							   = ["""ar_AR""", """cs_CZ""", """de_DE""", """en_XX""", """es_XX""", """et_EE""", """fi_FI""", """fr_XX""", """gu_IN""", """hi_IN""", """it_IT""", """ja_XX""", """kk_KZ""", """ko_KR""", """lt_LT""", """lv_LV""", """my_MM""", """ne_NP""", """nl_XX""", """ro_RO""", """ru_RU""", """si_LK""", """tr_TR""", """vi_VN""", """zh_CN""", """af_ZA""", """az_AZ""", """bn_IN""", """fa_IR""", """he_IL""", """hr_HR""", """id_ID""", """ka_GE""", """km_KH""", """mk_MK""", """ml_IN""", """mn_MN""", """mr_IN""", """pl_PL""", """ps_AF""", """pt_XX""", """sv_SE""", """sw_KE""", """ta_IN""", """te_IN""", """th_TH""", """tl_XX""", """uk_UA""", """ur_PK""", """xh_ZA""", """gl_ES""", """sl_SI"""]


class 						__UpperCamelCase (				lowerCamelCase__       ):
       lowercase			:					Any   		=VOCAB_FILES_NAMES
       lowercase			:					str   		=PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES
       lowercase			:					Dict   		=PRETRAINED_VOCAB_FILES_MAP
       lowercase			:					str   		=['input_ids', 'attention_mask']
       lowercase			:					List[Any]   		=MBartaaTokenizer

       lowercase			:					List[int]   		=[]
       lowercase			:					List[int]   		=[]






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



              """simple docstring"""







              lowerCamelCase_							=AddedToken(lowerCAmelCase,	lstrip=lowerCAmelCase,	rstrip=lowerCAmelCase						) if isinstance(lowerCAmelCase,	lowerCAmelCase						) else mask_token

              lowerCamelCase_							=kwargs.get('''additional_special_tokens''',	[]						)
              kwargs["additional_special_tokens"] += [
                  code for code in FAIRSEQ_LANGUAGE_CODES if code not in kwargs["additional_special_tokens"]
              ]

              super().__init__(
                  lowerCAmelCase,	src_lang=lowerCAmelCase,	tgt_lang=lowerCAmelCase,	tokenizer_file=lowerCAmelCase,	eos_token=lowerCAmelCase,	sep_token=lowerCAmelCase,	cls_token=lowerCAmelCase,	unk_token=lowerCAmelCase,	pad_token=lowerCAmelCase,	mask_token=lowerCAmelCase,	**lowerCAmelCase,	)

              lowerCamelCase_							=vocab_file
              lowerCamelCase_							=False if not self.vocab_file else True

              lowerCamelCase_							={
                  lang_code: self.convert_tokens_to_ids(lowerCAmelCase						) for lang_code in FAIRSEQ_LANGUAGE_CODES
              }

              lowerCamelCase_							=src_lang if src_lang is not None else '''en_XX'''
              lowerCamelCase_							=tgt_lang
              lowerCamelCase_							=self.lang_code_to_id[self._src_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,	lowerCAmelCase						):



              """simple docstring"""







              lowerCamelCase_							=new_src_lang
              self.set_src_lang_special_tokens(self._src_lang						)






       def   lowercase__  (							self,	lowerCAmelCase,	lowerCAmelCase = 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,	lowerCAmelCase,	lowerCAmelCase = "en_XX",	lowerCAmelCase = None,	lowerCAmelCase = "ro_RO",	**lowerCAmelCase,	):



              """simple docstring"""







              lowerCamelCase_							=src_lang
              lowerCamelCase_							=tgt_lang
              return super().prepare_seqaseq_batch(lowerCAmelCase,	lowerCAmelCase,	**lowerCAmelCase						)






       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,	lowerCAmelCase						):



              """simple docstring"""







              lowerCamelCase_							=self.convert_tokens_to_ids(lowerCAmelCase						)
              lowerCamelCase_							=[self.cur_lang_code_id]
              lowerCamelCase_							=[self.eos_token_id]

              lowerCamelCase_							=self.convert_ids_to_tokens(self.prefix_tokens						)
              lowerCamelCase_							=self.convert_ids_to_tokens(self.suffix_tokens						)

              lowerCamelCase_							=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,	lowerCAmelCase						):



              """simple docstring"""







              lowerCamelCase_							=self.convert_tokens_to_ids(lowerCAmelCase						)
              lowerCamelCase_							=[self.cur_lang_code_id]
              lowerCamelCase_							=[self.eos_token_id]

              lowerCamelCase_							=self.convert_ids_to_tokens(self.prefix_tokens						)
              lowerCamelCase_							=self.convert_ids_to_tokens(self.suffix_tokens						)

              lowerCamelCase_							=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,	lowerCAmelCase,	lowerCAmelCase,	lowerCAmelCase,	lowerCAmelCase,	**lowerCAmelCase						):



              """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'''						)
              lowerCamelCase_							=src_lang
              lowerCamelCase_							=self(lowerCAmelCase,	add_special_tokens=lowerCAmelCase,	return_tensors=lowerCAmelCase,	**lowerCAmelCase						)
              lowerCamelCase_							=self.convert_tokens_to_ids(lowerCAmelCase						)
              lowerCamelCase_							=tgt_lang_id
              return inputs






       def   lowercase__  (							self,	lowerCAmelCase,	lowerCAmelCase = 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(lowerCAmelCase						):
                     logger.error(f'''Vocabulary path ({save_directory}) should be a directory'''						)
                     return
              lowerCamelCase_							=os.path.join(
                  lowerCAmelCase,	(filename_prefix + '''-''' if filename_prefix else '''''') + VOCAB_FILES_NAMES['''vocab_file''']						)

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

              return (out_vocab_file,)




