


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

import sentencepiece as spm

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


_lowercase							:   List[str]						=						logging.get_logger(__name__)

_lowercase							:   Optional[Any]						=						"▁"

_lowercase							:   Any						=						{"vocab_file": "sentencepiece.bpe.model"}

_lowercase							:   Any						=						{
    "vocab_file": {
        "facebook/nllb-200-distilled-600M": (
            "https://huggingface.co/facebook/nllb-200-distilled-600M/blob/main/sentencepiece.bpe.model"
        ),
    }
}

_lowercase							:   Dict						=						{
    "facebook/nllb-200-distilled-600M": 1024,
}

# fmt: off
_lowercase							:   str						=						["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     (       __lowerCAmelCase					):

				"""simple docstring"""







				lowerCAmelCase					=			VOCAB_FILES_NAMES
				lowerCAmelCase					=			PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES
				lowerCAmelCase					=			PRETRAINED_VOCAB_FILES_MAP
				lowerCAmelCase					=			['''input_ids''', '''attention_mask''']

				lowerCAmelCase					=			[]
				lowerCAmelCase					=			[]

				def __init__(    self					, a__					, a__="<s>"					, a__="</s>"					, a__="</s>"					, a__="<s>"					, a__="<unk>"					, a__="<pad>"					, a__="<mask>"					, a__=None					, a__=None					, a__=None					, a__ = None					, a__=None					, a__=False					, **a__					, )						->					Optional[int]:
					# Mask token behave like a normal word, i.e. include the space before it
					A             =					AddedToken(_UpperCAmelCase					, lstrip=_UpperCAmelCase					, rstrip=_UpperCAmelCase ) if isinstance(_UpperCAmelCase					, _UpperCAmelCase ) else mask_token

					A             =					{} if sp_model_kwargs is None else sp_model_kwargs
					A             =					legacy_behaviour

					super().__init__(
					    bos_token=_UpperCAmelCase					, eos_token=_UpperCAmelCase					, unk_token=_UpperCAmelCase					, sep_token=_UpperCAmelCase					, cls_token=_UpperCAmelCase					, pad_token=_UpperCAmelCase					, mask_token=_UpperCAmelCase					, tokenizer_file=_UpperCAmelCase					, src_lang=_UpperCAmelCase					, tgt_lang=_UpperCAmelCase					, additional_special_tokens=_UpperCAmelCase					, sp_model_kwargs=self.sp_model_kwargs					, legacy_behaviour=_UpperCAmelCase					, **_UpperCAmelCase					, )

					A             =					spm.SentencePieceProcessor(**self.sp_model_kwargs )
					self.sp_model.Load(str(_UpperCAmelCase ) )
					A             =					vocab_file
					# Original fairseq vocab and spm vocab must be "aligned":
					# Vocab    |    0    |    1    |   2    |    3    |  4   |  5   |  6   |   7  |   8  |  9
					# -------- | ------- | ------- | ------ | ------- | ---- | ---- | ---- | ---- | ---- | ----
					# fairseq  | '<s>'   | '<pad>' | '</s>' | '<unk>' | 'an' | '▁n' | '▁m' | '▁t' | '▁k' | '▁a'
					# spm      | '<unk>' | '<s>'   | '</s>' | 'an'    | '▁n' | '▁m' | '▁t' | '▁k' | '▁a' | '▁s'

					# Mimic fairseq token-to-id alignment for the first 4 token
					A             =					{"""<s>""": 0, """<pad>""": 1, """</s>""": 2, """<unk>""": 3}

					# The first "real" token "," has position 4 in the original fairseq vocab and position 3 in the spm vocab
					A             =					1

					A             =					len(self.sp_model )
					A             =					{
					    code: self.sp_model_size + i + self.fairseq_offset for i, code in enumerate(_UpperCAmelCase )
					}
					A             =					{v: k for k, v in self.lang_code_to_id.items()}
					A             =					len(self.sp_model ) + len(self.lang_code_to_id ) + self.fairseq_offset

					self.fairseq_tokens_to_ids.update(self.lang_code_to_id )
					A             =					{v: k for k, v in self.fairseq_tokens_to_ids.items()}
					A             =					list(self.lang_code_to_id.keys() )

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

					A             =					src_lang if src_lang is not None else """eng_Latn"""
					A             =					self.lang_code_to_id[self._src_lang]
					A             =					tgt_lang
					self.set_src_lang_special_tokens(self._src_lang )

				def __getstate__(    self )						->					Tuple:
					A             =					self.__dict__.copy()
					A             =					None
					A             =					self.sp_model.serialized_model_proto()
					return state

				def __setstate__(    self					, a__ )						->					Any:
					A             =					d

					# for backward compatibility
					if not hasattr(self					, """sp_model_kwargs""" ):
						A             =					{}

					A             =					spm.SentencePieceProcessor(**self.sp_model_kwargs )
					self.sp_model.LoadFromSerializedProto(self.sp_model_proto )

				@property
				def   _UpperCAmelCase       (    self )						->					Tuple:
					return len(self.sp_model ) + len(self.lang_code_to_id ) + self.fairseq_offset + 1  # Plus 1 for the mask token

				@property
				def   _UpperCAmelCase       (    self )						->					Optional[Any]:
					return self._src_lang

				@src_lang.setter
				def   _UpperCAmelCase       (    self					, a__ )						->					List[str]:
					A             =					new_src_lang
					self.set_src_lang_special_tokens(self._src_lang )

				def   _UpperCAmelCase       (    self					, a__					, a__ = None					, a__ = False )						->					List[Any]:

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

					A             =					[1] * len(self.prefix_tokens )
					A             =					[1] * len(self.suffix_tokens )
					if token_ids_a is None:
						return prefix_ones + ([0] * len(_UpperCAmelCase )) + suffix_ones
					return prefix_ones + ([0] * len(_UpperCAmelCase )) + ([0] * len(_UpperCAmelCase )) + suffix_ones

				def   _UpperCAmelCase       (    self					, a__					, a__ = None )						->					Optional[Any]:
					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   _UpperCAmelCase       (    self					, a__					, a__ = None )						->					Optional[int]:
					A             =					[self.sep_token_id]
					A             =					[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   _UpperCAmelCase       (    self					, a__					, a__					, a__					, a__					, **a__ )						->					int:
					if src_lang is None or tgt_lang is None:
						raise ValueError("""Translation requires a `src_lang` and a `tgt_lang` for this model""" )
					A             =					src_lang
					A             =					self(_UpperCAmelCase					, add_special_tokens=_UpperCAmelCase					, return_tensors=_UpperCAmelCase					, **_UpperCAmelCase )
					A             =					self.convert_tokens_to_ids(_UpperCAmelCase )
					A             =					tgt_lang_id
					return inputs

				def   _UpperCAmelCase       (    self )						->					Optional[Any]:
					A             =					{self.convert_ids_to_tokens(_UpperCAmelCase ): i for i in range(self.vocab_size )}
					vocab.update(self.added_tokens_encoder )
					return vocab

				def   _UpperCAmelCase       (    self					, a__ )						->					str:
					return self.sp_model.encode(_UpperCAmelCase					, out_type=_UpperCAmelCase )

				def   _UpperCAmelCase       (    self					, a__ )						->					Optional[Any]:
					if token in self.fairseq_tokens_to_ids:
						return self.fairseq_tokens_to_ids[token]
					A             =					self.sp_model.PieceToId(_UpperCAmelCase )

					# Need to return unknown token if the SP model returned 0
					return spm_id + self.fairseq_offset if spm_id else self.unk_token_id

				def   _UpperCAmelCase       (    self					, a__ )						->					int:
					if index in self.fairseq_ids_to_tokens:
						return self.fairseq_ids_to_tokens[index]
					return self.sp_model.IdToPiece(index - self.fairseq_offset )

				def   _UpperCAmelCase       (    self					, a__ )						->					List[str]:
					A             =					"""""".join(_UpperCAmelCase ).replace(_UpperCAmelCase					, """ """ ).strip()
					return out_string

				def   _UpperCAmelCase       (    self					, a__					, a__ = None )						->					List[Any]:
					if not os.path.isdir(_UpperCAmelCase ):
						logger.error(f'Vocabulary path ({save_directory}) should be a directory' )
						return
					A             =					os.path.join(
					    _UpperCAmelCase					, (filename_prefix + """-""" if filename_prefix else """""") + VOCAB_FILES_NAMES["""vocab_file"""] )

					if os.path.abspath(self.vocab_file ) != os.path.abspath(_UpperCAmelCase ) and os.path.isfile(self.vocab_file ):
						copyfile(self.vocab_file					, _UpperCAmelCase )
					elif not os.path.isfile(self.vocab_file ):
						with open(_UpperCAmelCase					, """wb""" ) as fi:
							A             =					self.sp_model.serialized_model_proto()
							fi.write(_UpperCAmelCase )

					return (out_vocab_file,)

				def   _UpperCAmelCase       (    self					, a__					, a__ = "eng_Latn"					, a__ = None					, a__ = "fra_Latn"					, **a__					, )						->					Optional[Any]:
					A             =					src_lang
					A             =					tgt_lang
					return super().prepare_seqaseq_batch(_UpperCAmelCase					, _UpperCAmelCase					, **_UpperCAmelCase )

				def   _UpperCAmelCase       (    self )						->					int:
					return self.set_src_lang_special_tokens(self.src_lang )

				def   _UpperCAmelCase       (    self )						->					Tuple:
					return self.set_tgt_lang_special_tokens(self.tgt_lang )

				def   _UpperCAmelCase       (    self					, a__ )						->					List[Any]:
					A             =					self.lang_code_to_id[src_lang]
					if self.legacy_behaviour:
						A             =					[]
						A             =					[self.eos_token_id, self.cur_lang_code]
					else:
						A             =					[self.cur_lang_code]
						A             =					[self.eos_token_id]

				def   _UpperCAmelCase       (    self					, a__ )						->					str:
					A             =					self.lang_code_to_id[lang]
					if self.legacy_behaviour:
						A             =					[]
						A             =					[self.eos_token_id, self.cur_lang_code]
					else:
						A             =					[self.cur_lang_code]
						A             =					[self.eos_token_id]









"""simple docstring"""

import unittest

from transformers import SPIECE_UNDERLINE
from transformers.models.speechta import SpeechTaTokenizer
from transformers.testing_utils import get_tests_dir, require_sentencepiece, require_tokenizers, slow
from transformers.tokenization_utils import AddedToken

from ...test_tokenization_common import TokenizerTesterMixin


a							      =     get_tests_dir('''fixtures/test_sentencepiece_bpe_char.model''')





@require_sentencepiece
@require_tokenizers
class 							lowercase_			(	__lowerCAmelCase     ,      unittest.TestCase				):



 '''simple docstring'''
 UpperCAmelCase       :	List[str]     =      SpeechTaTokenizer
 UpperCAmelCase       :	Tuple     =      False
 UpperCAmelCase       :	Optional[int]     =      True

 def      lowerCAmelCase_				(					self			:			Tuple						):
       super().setUp()

       # We have a SentencePiece fixture for testing
       _A     =  SpeechTaTokenizer(_UpperCAmelCase						)

       _A     =  AddedToken('<mask>'       ,				lstrip=_UpperCAmelCase       ,				rstrip=_UpperCAmelCase						)
       _A     =  mask_token
       tokenizer.add_special_tokens({'mask_token': mask_token}						)
       tokenizer.add_tokens(['<ctc_blank>']						)

       tokenizer.save_pretrained(self.tmpdirname						)

 def      lowerCAmelCase_				(					self			:			Optional[Any]       ,				_UpperCAmelCase			:			Tuple						):
       _A     =  'this is a test'
       _A     =  'this is a test'
       return input_text, output_text

 def      lowerCAmelCase_				(					self			:			List[Any]       ,				_UpperCAmelCase			:			Optional[int]       ,				_UpperCAmelCase			:			Union[str, Any]=False       ,				_UpperCAmelCase			:			Dict=20       ,				_UpperCAmelCase			:			str=5						):
       _A  ,       _A     =  self.get_input_output_texts(_UpperCAmelCase						)
       _A     =  tokenizer.encode(_UpperCAmelCase       ,				add_special_tokens=_UpperCAmelCase						)
       _A     =  tokenizer.decode(_UpperCAmelCase       ,				clean_up_tokenization_spaces=_UpperCAmelCase						)
       return text, ids

 def      lowerCAmelCase_				(					self			:			Optional[Any]						):
       _A     =  '<pad>'
       _A     =  1

       self.assertEqual(self.get_tokenizer()._convert_token_to_id(_UpperCAmelCase						)       ,				_UpperCAmelCase						)
       self.assertEqual(self.get_tokenizer()._convert_id_to_token(_UpperCAmelCase						)       ,				_UpperCAmelCase						)

 def      lowerCAmelCase_				(					self			:			Optional[Any]						):
       _A     =  list(self.get_tokenizer().get_vocab().keys()						)

       self.assertEqual(vocab_keys[0]       ,				'<s>'						)
       self.assertEqual(vocab_keys[1]       ,				'<pad>'						)
       self.assertEqual(vocab_keys[-4]       ,				'œ'						)
       self.assertEqual(vocab_keys[-2]       ,				'<mask>'						)
       self.assertEqual(vocab_keys[-1]       ,				'<ctc_blank>'						)
       self.assertEqual(len(_UpperCAmelCase						)       ,				81						)

 def      lowerCAmelCase_				(					self			:			Optional[Any]						):
       self.assertEqual(self.get_tokenizer().vocab_size       ,				79						)

 def      lowerCAmelCase_				(					self			:			Any						):
       _A     =  self.get_tokenizers(do_lower_case=_UpperCAmelCase						)
       for tokenizer in tokenizers:
             with self.subTest(F'''{tokenizer.__class__.__name__}'''						):
                   _A     =  tokenizer.vocab_size
                   _A     =  len(_UpperCAmelCase						)

                   self.assertNotEqual(_UpperCAmelCase       ,				0						)

                   # We usually have added tokens from the start in tests because our vocab fixtures are
                   # smaller than the original vocabs - let's not assert this
                   # self.assertEqual(vocab_size, all_size)

                   _A     =  ['aaaaa bbbbbb', 'cccccccccdddddddd']
                   _A     =  tokenizer.add_tokens(_UpperCAmelCase						)
                   _A     =  tokenizer.vocab_size
                   _A     =  len(_UpperCAmelCase						)

                   self.assertNotEqual(_UpperCAmelCase       ,				0						)
                   self.assertEqual(_UpperCAmelCase       ,				_UpperCAmelCase						)
                   self.assertEqual(_UpperCAmelCase       ,				len(_UpperCAmelCase						)						)
                   self.assertEqual(_UpperCAmelCase       ,				all_size + len(_UpperCAmelCase						)						)

                   _A     =  tokenizer.encode('aaaaa bbbbbb low cccccccccdddddddd l'       ,				add_special_tokens=_UpperCAmelCase						)

                   self.assertGreaterEqual(len(_UpperCAmelCase						)       ,				4						)
                   self.assertGreater(tokens[0]       ,				tokenizer.vocab_size - 1						)
                   self.assertGreater(tokens[-3]       ,				tokenizer.vocab_size - 1						)

                   _A     =  {'eos_token': '>>>>|||<||<<|<<', 'pad_token': '<<<<<|||>|>>>>|>'}
                   _A     =  tokenizer.add_special_tokens(_UpperCAmelCase						)
                   _A     =  tokenizer.vocab_size
                   _A     =  len(_UpperCAmelCase						)

                   self.assertNotEqual(_UpperCAmelCase       ,				0						)
                   self.assertEqual(_UpperCAmelCase       ,				_UpperCAmelCase						)
                   self.assertEqual(_UpperCAmelCase       ,				len(_UpperCAmelCase						)						)
                   self.assertEqual(_UpperCAmelCase       ,				all_size_a + len(_UpperCAmelCase						)						)

                   _A     =  tokenizer.encode(
                       '>>>>|||<||<<|<< aaaaabbbbbb low cccccccccdddddddd <<<<<|||>|>>>>|> l'       ,				add_special_tokens=_UpperCAmelCase						)

                   self.assertGreaterEqual(len(_UpperCAmelCase						)       ,				6						)
                   self.assertGreater(tokens[0]       ,				tokenizer.vocab_size - 1						)
                   self.assertGreater(tokens[0]       ,				tokens[1]						)
                   self.assertGreater(tokens[-3]       ,				tokenizer.vocab_size - 1						)
                   self.assertGreater(tokens[-3]       ,				tokens[-4]						)
                   self.assertEqual(tokens[0]       ,				tokenizer.eos_token_id						)
                   self.assertEqual(tokens[-3]       ,				tokenizer.pad_token_id						)

 def      lowerCAmelCase_				(					self			:			str						):
       pass

 def      lowerCAmelCase_				(					self			:			Any						):
       pass

 def      lowerCAmelCase_				(					self			:			Dict						):
       _A     =  self.get_tokenizer()

       _A     =  tokenizer.tokenize('This is a test'						)
       # fmt: off
       self.assertListEqual(_UpperCAmelCase       ,				[SPIECE_UNDERLINE, 'T', 'h', 'i', 's', SPIECE_UNDERLINE, 'i', 's', SPIECE_UNDERLINE, 'a', SPIECE_UNDERLINE, 't', 'e', 's', 't']						)
       # fmt: on

       self.assertListEqual(
           tokenizer.convert_tokens_to_ids(_UpperCAmelCase						)       ,				[4, 32, 11, 10, 12, 4, 10, 12, 4, 7, 4, 6, 5, 12, 6]       ,				)

       _A     =  tokenizer.tokenize('I was born in 92000, and this is falsé.'						)
       self.assertListEqual(
           _UpperCAmelCase       ,				[SPIECE_UNDERLINE, 'I', SPIECE_UNDERLINE, 'w', 'a', 's', SPIECE_UNDERLINE, 'b', 'o', 'r', 'n', SPIECE_UNDERLINE, 'i', 'n', SPIECE_UNDERLINE, '92000', ',', SPIECE_UNDERLINE, 'a', 'n', 'd', SPIECE_UNDERLINE, 't', 'h', 'i', 's', SPIECE_UNDERLINE, 'i', 's', SPIECE_UNDERLINE, 'f', 'a', 'l', 's', 'é', '.']						)

       _A     =  tokenizer.convert_tokens_to_ids(_UpperCAmelCase						)
       # fmt: off
       self.assertListEqual(_UpperCAmelCase       ,				[4, 30, 4, 20, 7, 12, 4, 25, 8, 13, 9, 4, 10, 9, 4, 3, 23, 4, 7, 9, 14, 4, 6, 11, 10, 12, 4, 10, 12, 4, 19, 7, 15, 12, 73, 26]						)
       # fmt: on

       _A     =  tokenizer.convert_ids_to_tokens(_UpperCAmelCase						)
       self.assertListEqual(
           _UpperCAmelCase       ,				[SPIECE_UNDERLINE, 'I', SPIECE_UNDERLINE, 'w', 'a', 's', SPIECE_UNDERLINE, 'b', 'o', 'r', 'n', SPIECE_UNDERLINE, 'i', 'n', SPIECE_UNDERLINE, '<unk>', ',', SPIECE_UNDERLINE, 'a', 'n', 'd', SPIECE_UNDERLINE, 't', 'h', 'i', 's', SPIECE_UNDERLINE, 'i', 's', SPIECE_UNDERLINE, 'f', 'a', 'l', 's', 'é', '.']						)



 @slow
 def      lowerCAmelCase_				(					self			:			List[Any]						):
       # Use custom sequence because this tokenizer does not handle numbers.
       _A     =  [
           'Transformers (formerly known as pytorch-transformers and pytorch-pretrained-bert) provides '
           'general-purpose architectures (BERT, GPT, RoBERTa, XLM, DistilBert, XLNet...) for Natural '
           'Language Understanding (NLU) and Natural Language Generation (NLG) with over thirty-two pretrained '
           'models in one hundred plus languages and deep interoperability between Jax, PyTorch and TensorFlow.',
           'BERT is designed to pre-train deep bidirectional representations from unlabeled text by jointly '
           'conditioning on both left and right context in all layers.',
           'The quick brown fox jumps over the lazy dog.',
       ]

       # fmt: off
       _A     =  {
           'input_ids': [
               [4, 32, 13, 7, 9, 12, 19, 8, 13, 18, 5, 13, 12, 4, 64, 19, 8, 13, 18, 5, 13, 15, 22, 4, 28, 9, 8, 20, 9, 4, 7, 12, 4, 24, 22, 6, 8, 13, 17, 11, 39, 6, 13, 7, 9, 12, 19, 8, 13, 18, 5, 13, 12, 4, 7, 9, 14, 4, 24, 22, 6, 8, 13, 17, 11, 39, 24, 13, 5, 6, 13, 7, 10, 9, 5, 14, 39, 25, 5, 13, 6, 63, 4, 24, 13, 8, 27, 10, 14, 5, 12, 4, 21, 5, 9, 5, 13, 7, 15, 39, 24, 16, 13, 24, 8, 12, 5, 4, 7, 13, 17, 11, 10, 6, 5, 17, 6, 16, 13, 5, 12, 4, 64, 40, 47, 54, 32, 23, 4, 53, 49, 32, 23, 4, 54, 8, 40, 47, 54, 32, 7, 23, 4, 69, 52, 43, 23, 4, 51, 10, 12, 6, 10, 15, 40, 5, 13, 6, 23, 4, 69, 52, 48, 5, 6, 26, 26, 26, 63, 4, 19, 8, 13, 4, 48, 7, 6, 16, 13, 7, 15, 4, 52, 7, 9, 21, 16, 7, 21, 5, 4, 61, 9, 14, 5, 13, 12, 6, 7, 9, 14, 10, 9, 21, 4, 64, 48, 52, 61, 63, 4, 7, 9, 14, 4, 48, 7, 6, 16, 13, 7, 15, 4, 52, 7, 9, 21, 16, 7, 21, 5, 4, 53, 5, 9, 5, 13, 7, 6, 10, 8, 9, 4, 64, 48, 52, 53, 63, 4, 20, 10, 6, 11, 4, 8, 27, 5, 13, 4, 6, 11, 10, 13, 6, 22, 39, 6, 20, 8, 4, 24, 13, 5, 6, 13, 7, 10, 9, 5, 14, 4, 18, 8, 14, 5, 15, 12, 4, 10, 9, 4, 8, 9, 5, 4, 11, 16, 9, 14, 13, 5, 14, 4, 24, 15, 16, 12, 4, 15, 7, 9, 21, 16, 7, 21, 5, 12, 4, 7, 9, 14, 4, 14, 5, 5, 24, 4, 10, 9, 6, 5, 13, 8, 24, 5, 13, 7, 25, 10, 15, 10, 6, 22, 4, 25, 5, 6, 20, 5, 5, 9, 4, 58, 7, 37, 23, 4, 49, 22, 32, 8, 13, 17, 11, 4, 7, 9, 14, 4, 32, 5, 9, 12, 8, 13, 55, 15, 8, 20, 26, 2],
               [4, 40, 47, 54, 32, 4, 10, 12, 4, 14, 5, 12, 10, 21, 9, 5, 14, 4, 6, 8, 4, 24, 13, 5, 39, 6, 13, 7, 10, 9, 4, 14, 5, 5, 24, 4, 25, 10, 14, 10, 13, 5, 17, 6, 10, 8, 9, 7, 15, 4, 13, 5, 24, 13, 5, 12, 5, 9, 6, 7, 6, 10, 8, 9, 12, 4, 19, 13, 8, 18, 4, 16, 9, 15, 7, 25, 5, 15, 5, 14, 4, 6, 5, 37, 6, 4, 25, 22, 4, 46, 8, 10, 9, 6, 15, 22, 4, 17, 8, 9, 14, 10, 6, 10, 8, 9, 10, 9, 21, 4, 8, 9, 4, 25, 8, 6, 11, 4, 15, 5, 19, 6, 4, 7, 9, 14, 4, 13, 10, 21, 11, 6, 4, 17, 8, 9, 6, 5, 37, 6, 4, 10, 9, 4, 7, 15, 15, 4, 15, 7, 22, 5, 13, 12, 26, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
               [4, 32, 11, 5, 4, 45, 16, 10, 17, 28, 4, 25, 13, 8, 20, 9, 4, 19, 8, 37, 4, 46, 16, 18, 24, 12, 4, 8, 27, 5, 13, 4, 6, 11, 5, 4, 15, 7, 57, 22, 4, 14, 8, 21, 26, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
           ],
           'attention_mask': [
               [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
               [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
               [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
           ]
       }
       # fmt: on

       self.tokenizer_integration_test_util(
           expected_encoding=_UpperCAmelCase       ,				model_name='microsoft/speecht5_asr'       ,				revision='c5ef64c71905caeccde0e4462ef3f9077224c524'       ,				sequences=_UpperCAmelCase       ,				)

