





"""simple docstring"""


import random
import timeit
from functools import wraps
from typing import Callable, Optional

from ..configuration_utils import PretrainedConfig
from ..models.auto.modeling_tf_auto import TF_MODEL_MAPPING, TF_MODEL_WITH_LM_HEAD_MAPPING
from ..utils import is_pyanvml_available, is_tf_available, logging
from .benchmark_utils import (
    Benchmark,
    Memory,
    MemorySummary,
    measure_peak_memory_cpu,
    start_memory_tracing,
    stop_memory_tracing,
)


if is_tf_available():
		import tensorflow as tf
		from tensorflow.python.framework.errors_impl import ResourceExhaustedError

		from .benchmark_args_tf import TensorFlowBenchmarkArguments

if is_pyanvml_available():
		import pyanvml.pyanvml as nvml

__magic_name__       :					Optional[Any]						=			logging.get_logger(__name__)

def      UpperCamelCase							(SCREAMING_SNAKE_CASE							,     SCREAMING_SNAKE_CASE     ):
						def run_func(SCREAMING_SNAKE_CASE     ):
												@wraps(SCREAMING_SNAKE_CASE     )
												def run_in_eager_mode(*SCREAMING_SNAKE_CASE							,     **SCREAMING_SNAKE_CASE     ):
																		return func(*SCREAMING_SNAKE_CASE							,     **SCREAMING_SNAKE_CASE     )

												@wraps(SCREAMING_SNAKE_CASE     )
												@tf.function(experimental_compile=SCREAMING_SNAKE_CASE     )
												def run_in_graph_mode(*SCREAMING_SNAKE_CASE							,     **SCREAMING_SNAKE_CASE     ):
																		return func(*SCREAMING_SNAKE_CASE							,     **SCREAMING_SNAKE_CASE     )

												if do_eager_mode is True:
																		if use_xla is not False:
																								raise ValueError(
																								    """Cannot run model in XLA, if `args.eager_mode` is set to `True`. Please set `args.eager_mode=False`."""     )
																		return run_in_eager_mode
												else:
																		return run_in_graph_mode

						return run_func

def      UpperCamelCase							(SCREAMING_SNAKE_CASE							,     SCREAMING_SNAKE_CASE							,     SCREAMING_SNAKE_CASE     ):
						UpperCamelCase				:		Optional[int]				   =			random.Random()
						UpperCamelCase				:		Tuple				   =			[rng.randint(0							,     vocab_size - 1     ) for i in range(batch_size * sequence_length     )]
						return tf.constant(SCREAMING_SNAKE_CASE							,     shape=(batch_size, sequence_length)							,     dtype=tf.intaa     )






class 							lowercase__			(   __SCREAMING_SNAKE_CASE	):

			"""simple docstring"""
			__lowerCAmelCase     :				TensorFlowBenchmarkArguments
			__lowerCAmelCase     :				PretrainedConfig
			__lowerCAmelCase     :				str										=  "TensorFlow"







			@property
			def   _a      (      self    ):






									'''simple docstring'''







									return tf.__version__







			def   _a      (      self						,   _A						,   _A						,   _A    ):






									'''simple docstring'''







									UpperCamelCase				:		Optional[Any]				   =			self.args.strategy
									if strategy is None:
															raise ValueError("""A device strategy has to be initialized before using TensorFlow."""    )
									UpperCamelCase				:		Optional[int]				   =			self._prepare_inference_func(_A						,   _A						,   _A    )
									return self._measure_speed(_inference    )







			def   _a      (      self						,   _A						,   _A						,   _A    ):






									'''simple docstring'''







									UpperCamelCase				:		Dict				   =			self.args.strategy
									if strategy is None:
															raise ValueError("""A device strategy has to be initialized before using TensorFlow."""    )
									UpperCamelCase				:		str				   =			self._prepare_train_func(_A						,   _A						,   _A    )
									return self._measure_speed(_train    )







			def   _a      (      self						,   _A						,   _A						,   _A    ):






									'''simple docstring'''







									if self.args.is_gpu:
															tf.config.experimental.set_memory_growth(self.args.gpu_list[self.args.device_idx]						,   _A    )
									UpperCamelCase				:		int				   =			self.args.strategy
									if strategy is None:
															raise ValueError("""A device strategy has to be initialized before using TensorFlow."""    )
									UpperCamelCase				:		Dict				   =			self._prepare_inference_func(_A						,   _A						,   _A    )
									return self._measure_memory(_inference    )







			def   _a      (      self						,   _A						,   _A						,   _A    ):






									'''simple docstring'''







									if self.args.is_gpu:
															tf.config.experimental.set_memory_growth(self.args.gpu_list[self.args.device_idx]						,   _A    )
									UpperCamelCase				:		List[str]				   =			self.args.strategy
									if strategy is None:
															raise ValueError("""A device strategy has to be initialized before using TensorFlow."""    )

									UpperCamelCase				:		Any				   =			self._prepare_train_func(_A						,   _A						,   _A    )
									return self._measure_memory(_train    )







			def   _a      (      self						,   _A						,   _A						,   _A    ):






									'''simple docstring'''







									UpperCamelCase				:		List[str]				   =			self.config_dict[model_name]

									if self.args.fpaa:
															raise NotImplementedError("""Mixed precision is currently not supported."""    )

									UpperCamelCase				:		Optional[int]				   =			(
									    hasattr(_A						,   """architectures"""    )
									    and isinstance(config.architectures						,   _A    )
									    and len(config.architectures    ) > 0
									)
									if not self.args.only_pretrain_model and has_model_class_in_config:
															try:
																					UpperCamelCase				:		List[str]				   =			"""TF""" + config.architectures[0]  # prepend 'TF' for tensorflow model
																					UpperCamelCase				:		Optional[int]				   =			__import__("""transformers"""						,   fromlist=[model_class]    )
																					UpperCamelCase				:		str				   =			getattr(_A						,   _A    )
																					UpperCamelCase				:		Dict				   =			model_cls(_A    )
															except ImportError:
																					raise ImportError(
																					    f"""{model_class} does not exist. If you just want to test the pretrained model, you might want to"""
																					    """ set `--only_pretrain_model` or `args.only_pretrain_model=True`."""    )
									else:
															UpperCamelCase				:		Optional[int]				   =			TF_MODEL_MAPPING[config.__class__](_A    )

									# encoder-decoder has vocab size saved differently
									UpperCamelCase				:		Optional[Any]				   =			config.vocab_size if hasattr(_A						,   """vocab_size"""    ) else config.encoder.vocab_size
									UpperCamelCase				:		Dict				   =			random_input_ids(_A						,   _A						,   _A    )

									@run_with_tf_optimizations(self.args.eager_mode						,   self.args.use_xla    )
									def encoder_decoder_forward():
															return model(_A						,   decoder_input_ids=_A						,   training=_A    )

									@run_with_tf_optimizations(self.args.eager_mode						,   self.args.use_xla    )
									def encoder_forward():
															return model(_A						,   training=_A    )

									UpperCamelCase				:		str				   =			encoder_decoder_forward if config.is_encoder_decoder else encoder_forward

									return _inference







			def   _a      (      self						,   _A						,   _A						,   _A    ):






									'''simple docstring'''







									UpperCamelCase				:		Tuple				   =			self.config_dict[model_name]

									if self.args.eager_mode is not False:
															raise ValueError("""Training cannot be done in eager mode. Please make sure that `args.eager_mode = False`."""    )

									if self.args.fpaa:
															raise NotImplementedError("""Mixed precision is currently not supported."""    )

									UpperCamelCase				:		int				   =			(
									    hasattr(_A						,   """architectures"""    )
									    and isinstance(config.architectures						,   _A    )
									    and len(config.architectures    ) > 0
									)
									if not self.args.only_pretrain_model and has_model_class_in_config:
															try:
																					UpperCamelCase				:		Optional[int]				   =			"""TF""" + config.architectures[0]  # prepend 'TF' for tensorflow model
																					UpperCamelCase				:		Any				   =			__import__("""transformers"""						,   fromlist=[model_class]    )
																					UpperCamelCase				:		Optional[int]				   =			getattr(_A						,   _A    )
																					UpperCamelCase				:		Union[str, Any]				   =			model_cls(_A    )
															except ImportError:
																					raise ImportError(
																					    f"""{model_class} does not exist. If you just want to test the pretrained model, you might want to"""
																					    """ set `--only_pretrain_model` or `args.only_pretrain_model=True`."""    )
									else:
															UpperCamelCase				:		str				   =			TF_MODEL_WITH_LM_HEAD_MAPPING[config.__class__](_A    )

									# encoder-decoder has vocab size saved differently
									UpperCamelCase				:		str				   =			config.vocab_size if hasattr(_A						,   """vocab_size"""    ) else config.encoder.vocab_size
									UpperCamelCase				:		Union[str, Any]				   =			random_input_ids(_A						,   _A						,   _A    )

									@run_with_tf_optimizations(self.args.eager_mode						,   self.args.use_xla    )
									def encoder_decoder_train():
															UpperCamelCase				:		str				   =			model(_A						,   decoder_input_ids=_A						,   labels=_A						,   training=_A    )[0]
															UpperCamelCase				:		Any				   =			tf.gradients(_A						,   model.trainable_variables    )
															return gradients

									@run_with_tf_optimizations(self.args.eager_mode						,   self.args.use_xla    )
									def encoder_train():
															UpperCamelCase				:		List[str]				   =			model(_A						,   labels=_A						,   training=_A    )[0]
															UpperCamelCase				:		int				   =			tf.gradients(_A						,   model.trainable_variables    )
															return gradients

									UpperCamelCase				:		Tuple				   =			encoder_decoder_train if config.is_encoder_decoder else encoder_train

									return _train







			def   _a      (      self						,   _A    ):






									'''simple docstring'''







									with self.args.strategy.scope():
															try:
																					if self.args.is_tpu or self.args.use_xla:
																											# run additional 10 times to stabilize compilation for tpu
																											logger.info("""Do inference on TPU. Running model 5 times to stabilize compilation"""    )
																											timeit.repeat(_A						,   repeat=1						,   number=5    )

																					# as written in https://docs.python.org/2/library/timeit.html#timeit.Timer.repeat, min should be taken rather than the average
																					UpperCamelCase				:		int				   =			timeit.repeat(
																					    _A						,   repeat=self.args.repeat						,   number=1_0						,   )

																					return min(_A    ) / 10.0
															except ResourceExhaustedError as e:
																					self.print_fn(f"""Doesn't fit on GPU. {e}"""    )







			def   _a      (      self						,   _A    ):






									'''simple docstring'''







									logger.info(
									    """Note that TensorFlow allocates more memory than """
									    """it might need to speed up computation. """
									    """The memory reported here corresponds to the memory """
									    """reported by `nvidia-smi`, which can vary depending """
									    """on total available memory on the GPU that is used."""    )
									with self.args.strategy.scope():
															try:
																					if self.args.trace_memory_line_by_line:
																											if not self.args.eager_mode:
																																	raise ValueError(
																																	    """`args.eager_mode` is set to `False`. Make sure to run model in eager mode to measure memory"""
																																	    """ consumption line by line."""    )
																											UpperCamelCase				:		List[str]				   =			start_memory_tracing("""transformers"""    )

																					if self.args.is_tpu:
																											# tpu
																											raise NotImplementedError(
																											    """Memory Benchmarking is currently not implemented for TPU. Please disable memory benchmarking"""
																											    """ with `args.memory=False`"""    )
																					elif self.args.is_gpu:
																											# gpu
																											if not is_pyanvml_available():
																																	logger.warning(
																																	    """py3nvml not installed, we won't log GPU memory usage. """
																																	    """Install py3nvml (pip install py3nvml) to log information about GPU."""    )
																																	UpperCamelCase				:		str				   =			"""N/A"""
																											else:
																																	logger.info(
																																	    """Measuring total GPU usage on GPU device. Make sure to not have additional processes"""
																																	    """ running on the same GPU."""    )
																																	# init nvml
																																	nvml.nvmlInit()
																																	func()
																																	UpperCamelCase				:		Dict				   =			nvml.nvmlDeviceGetHandleByIndex(self.args.device_idx    )
																																	UpperCamelCase				:		List[str]				   =			nvml.nvmlDeviceGetMemoryInfo(_A    )
																																	UpperCamelCase				:		Union[str, Any]				   =			meminfo.used
																																	UpperCamelCase				:		Tuple				   =			Memory(_A    )
																																	# shutdown nvml
																																	nvml.nvmlShutdown()
																					else:
																											# cpu
																											if self.args.trace_memory_line_by_line:
																																	logger.info(
																																	    """When enabling line by line tracing, the max peak memory for CPU is inaccurate in"""
																																	    """ TensorFlow."""    )
																																	UpperCamelCase				:		Dict				   =			None
																											else:
																																	UpperCamelCase				:		List[Any]				   =			measure_peak_memory_cpu(_A    )
																																	UpperCamelCase				:		Dict				   =			Memory(_A    ) if isinstance(_A						,   _A    ) else memory_bytes
																					if self.args.trace_memory_line_by_line:
																											UpperCamelCase				:		List[str]				   =			stop_memory_tracing(_A    )
																											if memory is None:
																																	UpperCamelCase				:		str				   =			summary.total
																					else:
																											UpperCamelCase				:		Tuple				   =			None

																					return memory, summary
															except ResourceExhaustedError as e:
																					self.print_fn(f"""Doesn't fit on GPU. {e}"""    )
																					return "N/A", None










"""simple docstring"""


import json
import os
import re
import shutil
import tempfile
import unittest
from typing import Tuple

from transformers import AddedToken, BatchEncoding, PerceiverTokenizer
from transformers.utils import cached_property, is_tf_available, is_torch_available

from ...test_tokenization_common import TokenizerTesterMixin


if is_torch_available():
		__magic_name__       :					Any						=			"""pt"""
elif is_tf_available():
		__magic_name__       :					Optional[Any]						=			"""tf"""
else:
		__magic_name__       :					int						=			"""jax"""






class 							lowercase__			(   __SCREAMING_SNAKE_CASE					,     unittest.TestCase	):

			"""simple docstring"""
			__lowerCAmelCase     :				Any										=  PerceiverTokenizer
			__lowerCAmelCase     :				int										=  False







			def   _a      (      self    ):






									'''simple docstring'''







									super().setUp()
									UpperCamelCase				:		List[Any]				   =			PerceiverTokenizer()
									tokenizer.save_pretrained(self.tmpdirname    )







			@cached_property
			def   _a      (      self    ):






									'''simple docstring'''







									return PerceiverTokenizer.from_pretrained("""deepmind/language-perceiver"""    )







			def   _a      (      self						,   **_A    ):






									'''simple docstring'''







									return self.tokenizer_class.from_pretrained(self.tmpdirname						,   **_A    )







			def   _a      (      self						,   _A						,   _A=False						,   _A=2_0						,   _A=5    ):






									'''simple docstring'''







									UpperCamelCase				:		Tuple				   =			[]
									for i in range(len(_A    )    ):
															try:
																					UpperCamelCase				:		List[str]				   =			tokenizer.decode([i]						,   clean_up_tokenization_spaces=_A    )
															except UnicodeDecodeError:
																					pass
															toks.append((i, tok)    )

									UpperCamelCase				:		Dict				   =			list(filter(lambda _A    : re.match(r"""^[ a-zA-Z]+$"""						,   t[1]    )						,   _A    )    )
									UpperCamelCase				:		List[str]				   =			list(filter(lambda _A    : [t[0]] == tokenizer.encode(t[1]						,   add_special_tokens=_A    )						,   _A    )    )
									if max_length is not None and len(_A    ) > max_length:
															UpperCamelCase				:		int				   =			toks[:max_length]
									if min_length is not None and len(_A    ) < min_length and len(_A    ) > 0:
															while len(_A    ) < min_length:
																					UpperCamelCase				:		List[str]				   =			toks + toks
        # toks_str = [t[1] for t in toks]
									UpperCamelCase				:		Any				   =			[t[0] for t in toks]

									# Ensure consistency
									UpperCamelCase				:		List[str]				   =			tokenizer.decode(_A						,   clean_up_tokenization_spaces=_A    )
									if " " not in output_txt and len(_A    ) > 1:
															UpperCamelCase				:		Optional[Any]				   =			(
															    tokenizer.decode([toks_ids[0]]						,   clean_up_tokenization_spaces=_A    )
															    + """ """
															    + tokenizer.decode(toks_ids[1:]						,   clean_up_tokenization_spaces=_A    )
															)
									if with_prefix_space:
															UpperCamelCase				:		Dict				   =			""" """ + output_txt
									UpperCamelCase				:		List[Any]				   =			tokenizer.encode(_A						,   add_special_tokens=_A    )
									return output_txt, output_ids







			def   _a      (      self    ):






									'''simple docstring'''







									UpperCamelCase				:		Any				   =			self.perceiver_tokenizer
									UpperCamelCase				:		str				   =			"""Unicode €."""
									UpperCamelCase				:		Dict				   =			tokenizer(_A    )
									UpperCamelCase				:		Optional[Any]				   =			[4, 9_1, 1_1_6, 1_1_1, 1_0_5, 1_1_7, 1_0_6, 1_0_7, 3_8, 2_3_2, 1_3_6, 1_7_8, 5_2, 5]
									self.assertEqual(encoded["""input_ids"""]						,   _A    )

									# decoding
									UpperCamelCase				:		Optional[int]				   =			tokenizer.decode(_A    )
									self.assertEqual(_A						,   """[CLS]Unicode €.[SEP]"""    )

									UpperCamelCase				:		str				   =			tokenizer("""e è é ê ë"""    )
									UpperCamelCase				:		str				   =			[4, 1_0_7, 3_8, 2_0_1, 1_7_4, 3_8, 2_0_1, 1_7_5, 3_8, 2_0_1, 1_7_6, 3_8, 2_0_1, 1_7_7, 5]
									self.assertEqual(encoded["""input_ids"""]						,   _A    )
									# decoding
									UpperCamelCase				:		Any				   =			tokenizer.decode(_A    )
									self.assertEqual(_A						,   """[CLS]e è é ê ë[SEP]"""    )

									# encode/decode, but with `encode` instead of `__call__`
									self.assertEqual(tokenizer.decode(tokenizer.encode("""e è é ê ë"""    )    )						,   """[CLS]e è é ê ë[SEP]"""    )







			def   _a      (      self    ):






									'''simple docstring'''







									UpperCamelCase				:		Optional[int]				   =			self.perceiver_tokenizer
									UpperCamelCase				:		Optional[Any]				   =			["""A long paragraph for summarization.""", """Another paragraph for summarization."""]
									# fmt: off
									UpperCamelCase				:		List[Any]				   =			[4, 7_1, 3_8, 1_1_4, 1_1_7, 1_1_6, 1_0_9, 3_8, 1_1_8, 1_0_3, 1_2_0, 1_0_3, 1_0_9, 1_2_0, 1_0_3, 1_1_8, 1_1_0, 3_8, 1_0_8, 1_1_7, 1_2_0, 3_8, 1_2_1, 1_2_3, 1_1_5, 1_1_5, 1_0_3, 1_2_0, 1_1_1, 1_2_8, 1_0_3, 1_2_2, 1_1_1, 1_1_7, 1_1_6, 5_2, 5, 0]
									# fmt: on
									UpperCamelCase				:		Dict				   =			tokenizer(_A						,   padding=_A						,   return_tensors=_A    )
									self.assertIsInstance(_A						,   _A    )

									if FRAMEWORK != "jax":
															UpperCamelCase				:		Dict				   =			list(batch.input_ids.numpy()[0]    )
									else:
															UpperCamelCase				:		Optional[int]				   =			list(batch.input_ids.tolist()[0]    )

									self.assertListEqual(_A						,   _A    )

									self.assertEqual((2, 3_8)						,   batch.input_ids.shape    )
									self.assertEqual((2, 3_8)						,   batch.attention_mask.shape    )







			def   _a      (      self    ):






									'''simple docstring'''







									UpperCamelCase				:		Any				   =			self.perceiver_tokenizer
									UpperCamelCase				:		Optional[int]				   =			["""A long paragraph for summarization.""", """Another paragraph for summarization."""]
									UpperCamelCase				:		Any				   =			tokenizer(_A						,   padding=_A						,   return_tensors=_A    )
									# check if input_ids are returned and no decoder_input_ids
									self.assertIn("""input_ids"""						,   _A    )
									self.assertIn("""attention_mask"""						,   _A    )
									self.assertNotIn("""decoder_input_ids"""						,   _A    )
									self.assertNotIn("""decoder_attention_mask"""						,   _A    )







			def   _a      (      self    ):






									'''simple docstring'''







									UpperCamelCase				:		Optional[Any]				   =			self.perceiver_tokenizer
									UpperCamelCase				:		int				   =			[
									    """Summary of the text.""",
									    """Another summary.""",
									]
									UpperCamelCase				:		int				   =			tokenizer(
									    text_target=_A						,   max_length=3_2						,   padding="""max_length"""						,   truncation=_A						,   return_tensors=_A    )
									self.assertEqual(3_2						,   targets["""input_ids"""].shape[1]    )







			def   _a      (      self    ):






									'''simple docstring'''







									UpperCamelCase				:		Any				   =			self.get_tokenizers()
									for tokenizer in tokenizers:
															with self.subTest(f"""{tokenizer.__class__.__name__}"""    ):
																					self.assertNotEqual(tokenizer.model_max_length						,   4_2    )

        # Now let's start the test
									UpperCamelCase				:		Any				   =			self.get_tokenizers()
									for tokenizer in tokenizers:
															with self.subTest(f"""{tokenizer.__class__.__name__}"""    ):
																					# Isolate this from the other tests because we save additional tokens/etc
																					UpperCamelCase				:		int				   =			tempfile.mkdtemp()

																					UpperCamelCase				:		Tuple				   =			""" He is very happy, UNwant\u00E9d,running"""
																					UpperCamelCase				:		Dict				   =			tokenizer.encode(_A						,   add_special_tokens=_A    )
																					tokenizer.save_pretrained(_A    )

																					UpperCamelCase				:		Any				   =			tokenizer.__class__.from_pretrained(_A    )
																					UpperCamelCase				:		Tuple				   =			after_tokenizer.encode(_A						,   add_special_tokens=_A    )
																					self.assertListEqual(_A						,   _A    )

																					shutil.rmtree(_A    )

									UpperCamelCase				:		Union[str, Any]				   =			self.get_tokenizers(model_max_length=4_2    )
									for tokenizer in tokenizers:
															with self.subTest(f"""{tokenizer.__class__.__name__}"""    ):
																					# Isolate this from the other tests because we save additional tokens/etc
																					UpperCamelCase				:		List[Any]				   =			tempfile.mkdtemp()

																					UpperCamelCase				:		Union[str, Any]				   =			""" He is very happy, UNwant\u00E9d,running"""
																					tokenizer.add_tokens(["""bim""", """bambam"""]    )
																					UpperCamelCase				:		int				   =			tokenizer.additional_special_tokens
																					additional_special_tokens.append("""new_additional_special_token"""    )
																					tokenizer.add_special_tokens({"""additional_special_tokens""": additional_special_tokens}    )
																					UpperCamelCase				:		List[str]				   =			tokenizer.encode(_A						,   add_special_tokens=_A    )
																					tokenizer.save_pretrained(_A    )

																					UpperCamelCase				:		List[str]				   =			tokenizer.__class__.from_pretrained(_A    )
																					UpperCamelCase				:		Tuple				   =			after_tokenizer.encode(_A						,   add_special_tokens=_A    )
																					self.assertListEqual(_A						,   _A    )
																					self.assertIn("""new_additional_special_token"""						,   after_tokenizer.additional_special_tokens    )
																					self.assertEqual(after_tokenizer.model_max_length						,   4_2    )

																					UpperCamelCase				:		Any				   =			tokenizer.__class__.from_pretrained(_A						,   model_max_length=4_3    )
																					self.assertEqual(tokenizer.model_max_length						,   4_3    )

																					shutil.rmtree(_A    )







			def   _a      (      self    ):






									'''simple docstring'''







									UpperCamelCase				:		int				   =			[]
									if self.test_slow_tokenizer:
															tokenizer_list.append((self.tokenizer_class, self.get_tokenizer())    )

									if self.test_rust_tokenizer:
															tokenizer_list.append((self.rust_tokenizer_class, self.get_rust_tokenizer())    )

									for tokenizer_class, tokenizer_utils in tokenizer_list:
															with tempfile.TemporaryDirectory() as tmp_dir:
																					tokenizer_utils.save_pretrained(_A    )

																					with open(os.path.join(_A						,   """special_tokens_map.json"""    )						,   encoding="""utf-8"""    ) as json_file:
																											UpperCamelCase				:		Union[str, Any]				   =			json.load(_A    )

																					with open(os.path.join(_A						,   """tokenizer_config.json"""    )						,   encoding="""utf-8"""    ) as json_file:
																											UpperCamelCase				:		List[Any]				   =			json.load(_A    )

																					UpperCamelCase				:		Optional[int]				   =			[f"""<extra_id_{i}>""" for i in range(1_2_5    )]

																					UpperCamelCase				:		List[Any]				   =			added_tokens_extra_ids + [
																					    """an_additional_special_token"""
																					]
																					UpperCamelCase				:		int				   =			added_tokens_extra_ids + [
																					    """an_additional_special_token"""
																					]

																					with open(os.path.join(_A						,   """special_tokens_map.json"""    )						,   """w"""						,   encoding="""utf-8"""    ) as outfile:
																											json.dump(_A						,   _A    )
																					with open(os.path.join(_A						,   """tokenizer_config.json"""    )						,   """w"""						,   encoding="""utf-8"""    ) as outfile:
																											json.dump(_A						,   _A    )

																					# the following checks allow us to verify that our test works as expected, i.e. that the tokenizer takes
																					# into account the new value of additional_special_tokens given in the "tokenizer_config.json" and
																					# "special_tokens_map.json" files
																					UpperCamelCase				:		Tuple				   =			tokenizer_class.from_pretrained(
																					    _A						,   )
																					self.assertIn(
																					    """an_additional_special_token"""						,   tokenizer_without_change_in_init.additional_special_tokens    )
																					self.assertEqual(
																					    ["""an_additional_special_token"""]						,   tokenizer_without_change_in_init.convert_ids_to_tokens(
																					        tokenizer_without_change_in_init.convert_tokens_to_ids(["""an_additional_special_token"""]    )    )						,   )

																					# Now we test that we can change the value of additional_special_tokens in the from_pretrained
																					UpperCamelCase				:		List[str]				   =			added_tokens_extra_ids + [AddedToken("""a_new_additional_special_token"""						,   lstrip=_A    )]
																					UpperCamelCase				:		Optional[Any]				   =			tokenizer_class.from_pretrained(
																					    _A						,   additional_special_tokens=_A						,   )

																					self.assertIn("""a_new_additional_special_token"""						,   tokenizer.additional_special_tokens    )
																					self.assertEqual(
																					    ["""a_new_additional_special_token"""]						,   tokenizer.convert_ids_to_tokens(
																					        tokenizer.convert_tokens_to_ids(["""a_new_additional_special_token"""]    )    )						,   )







			def   _a      (      self    ):






									'''simple docstring'''







									UpperCamelCase				:		Dict				   =			self.perceiver_tokenizer
									self.assertEqual(tokenizer.decode([1_7_8]    )						,   """�"""    )







			def   _a      (      self    ):






									'''simple docstring'''







									pass







			def   _a      (      self    ):






									'''simple docstring'''







									pass







			def   _a      (      self    ):






									'''simple docstring'''







									pass







			def   _a      (      self    ):






									'''simple docstring'''







									pass







			def   _a      (      self    ):






									'''simple docstring'''







									UpperCamelCase				:		List[Any]				   =			self.get_tokenizers(fast=_A						,   do_lower_case=_A    )
									for tokenizer in tokenizers:
															with self.subTest(f"""{tokenizer.__class__.__name__}"""    ):
																					UpperCamelCase				:		Optional[Any]				   =			["""[CLS]""", """t""", """h""", """i""", """s""", """ """, """i""", """s""", """ """, """a""", """ """, """t""", """e""", """s""", """t""", """[SEP]"""]
																					UpperCamelCase				:		Dict				   =			tokenizer.convert_tokens_to_string(_A    )

																					self.assertIsInstance(_A						,   _A    )



