


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				:       str      =  get_tests_dir('fixtures/test_sentencepiece_bpe_char.model')






@require_sentencepiece
@require_tokenizers
class      UpperCamelCase(	_a  ,				unittest.TestCase ):
					snake_case_		:					Any    					=						SpeechTaTokenizer
					snake_case_		:					List[str]    					=						False
					snake_case_		:					Dict    					=						True


					def 				SCREAMING_SNAKE_CASE_	(    self						:		Dict    )      ->						Optional[Any]:




											'''simple docstring'''

											super().setUp()

											# We have a SentencePiece fixture for testing
											__snake_case				=		SpeechTaTokenizer(SCREAMING_SNAKE_CASE    )

											__snake_case				=		AddedToken("<mask>"  ,     lstrip=SCREAMING_SNAKE_CASE  ,     rstrip=SCREAMING_SNAKE_CASE    )
											__snake_case				=		mask_token
											tokenizer.add_special_tokens({"mask_token": mask_token}    )
											tokenizer.add_tokens(["<ctc_blank>"]    )

											tokenizer.save_pretrained(self.tmpdirname    )


					def 				SCREAMING_SNAKE_CASE_	(    self						:		Optional[int]  ,     SCREAMING_SNAKE_CASE						:		Union[str, Any]    )      ->						Any:




											'''simple docstring'''

											__snake_case				=		"this is a test"
											__snake_case				=		"this is a test"
											return input_text, output_text


					def 				SCREAMING_SNAKE_CASE_	(    self						:		str  ,     SCREAMING_SNAKE_CASE						:		int  ,     SCREAMING_SNAKE_CASE						:		List[Any]=False  ,     SCREAMING_SNAKE_CASE						:		List[str]=2_0  ,     SCREAMING_SNAKE_CASE						:		Any=5    )      ->						Dict:




											'''simple docstring'''

											__snake_case		,       __snake_case				=		self.get_input_output_texts(SCREAMING_SNAKE_CASE    )
											__snake_case				=		tokenizer.encode(SCREAMING_SNAKE_CASE  ,     add_special_tokens=SCREAMING_SNAKE_CASE    )
											__snake_case				=		tokenizer.decode(SCREAMING_SNAKE_CASE  ,     clean_up_tokenization_spaces=SCREAMING_SNAKE_CASE    )
											return text, ids


					def 				SCREAMING_SNAKE_CASE_	(    self						:		str    )      ->						Tuple:




											'''simple docstring'''

											__snake_case				=		"<pad>"
											__snake_case				=		1

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


					def 				SCREAMING_SNAKE_CASE_	(    self						:		Tuple    )      ->						str:




											'''simple docstring'''

											__snake_case				=		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(SCREAMING_SNAKE_CASE    )  ,     8_1    )


					def 				SCREAMING_SNAKE_CASE_	(    self						:		Tuple    )      ->						str:




											'''simple docstring'''

											self.assertEqual(self.get_tokenizer().vocab_size  ,     7_9    )


					def 				SCREAMING_SNAKE_CASE_	(    self						:		Dict    )      ->						Tuple:




											'''simple docstring'''

											__snake_case				=		self.get_tokenizers(do_lower_case=SCREAMING_SNAKE_CASE    )
											for tokenizer in tokenizers:
																	with self.subTest(f'''{tokenizer.__class__.__name__}'''    ):
																							__snake_case				=		tokenizer.vocab_size
																							__snake_case				=		len(SCREAMING_SNAKE_CASE    )

																							self.assertNotEqual(SCREAMING_SNAKE_CASE  ,     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)

																							__snake_case				=		["aaaaa bbbbbb", "cccccccccdddddddd"]
																							__snake_case				=		tokenizer.add_tokens(SCREAMING_SNAKE_CASE    )
																							__snake_case				=		tokenizer.vocab_size
																							__snake_case				=		len(SCREAMING_SNAKE_CASE    )

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

																							__snake_case				=		tokenizer.encode("aaaaa bbbbbb low cccccccccdddddddd l"  ,     add_special_tokens=SCREAMING_SNAKE_CASE    )

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

																							__snake_case				=		{"eos_token": ">>>>|||<||<<|<<", "pad_token": "<<<<<|||>|>>>>|>"}
																							__snake_case				=		tokenizer.add_special_tokens(SCREAMING_SNAKE_CASE    )
																							__snake_case				=		tokenizer.vocab_size
																							__snake_case				=		len(SCREAMING_SNAKE_CASE    )

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

																							__snake_case				=		tokenizer.encode(
																							    ">>>>|||<||<<|<< aaaaabbbbbb low cccccccccdddddddd <<<<<|||>|>>>>|> l"  ,     add_special_tokens=SCREAMING_SNAKE_CASE    )

																							self.assertGreaterEqual(len(SCREAMING_SNAKE_CASE    )  ,     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 				SCREAMING_SNAKE_CASE_	(    self						:		str    )      ->						str:




											'''simple docstring'''

											pass


					def 				SCREAMING_SNAKE_CASE_	(    self						:		List[str]    )      ->						List[Any]:




											'''simple docstring'''

											pass


					def 				SCREAMING_SNAKE_CASE_	(    self						:		Tuple    )      ->						Optional[int]:




											'''simple docstring'''

											__snake_case				=		self.get_tokenizer()

											__snake_case				=		tokenizer.tokenize("This is a test"    )
											# fmt: off
											self.assertListEqual(SCREAMING_SNAKE_CASE  ,     [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(SCREAMING_SNAKE_CASE    )  ,     [4, 3_2, 1_1, 1_0, 1_2, 4, 1_0, 1_2, 4, 7, 4, 6, 5, 1_2, 6]  ,     )

											__snake_case				=		tokenizer.tokenize("I was born in 92000, and this is falsé."    )
											self.assertListEqual(
											    SCREAMING_SNAKE_CASE  ,     [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", "é", "."]    )

											__snake_case				=		tokenizer.convert_tokens_to_ids(SCREAMING_SNAKE_CASE    )
											# fmt: off
											self.assertListEqual(SCREAMING_SNAKE_CASE  ,     [4, 3_0, 4, 2_0, 7, 1_2, 4, 2_5, 8, 1_3, 9, 4, 1_0, 9, 4, 3, 2_3, 4, 7, 9, 1_4, 4, 6, 1_1, 1_0, 1_2, 4, 1_0, 1_2, 4, 1_9, 7, 1_5, 1_2, 7_3, 2_6]    )
											# fmt: on

											__snake_case				=		tokenizer.convert_ids_to_tokens(SCREAMING_SNAKE_CASE    )
											self.assertListEqual(
											    SCREAMING_SNAKE_CASE  ,     [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 				SCREAMING_SNAKE_CASE_	(    self						:		Any    )      ->						Tuple:




											'''simple docstring'''

											__snake_case				=		[
											    "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
											__snake_case				=		{
											    "input_ids": [
											        [4, 3_2, 1_3, 7, 9, 1_2, 1_9, 8, 1_3, 1_8, 5, 1_3, 1_2, 4, 6_4, 1_9, 8, 1_3, 1_8, 5, 1_3, 1_5, 2_2, 4, 2_8, 9, 8, 2_0, 9, 4, 7, 1_2, 4, 2_4, 2_2, 6, 8, 1_3, 1_7, 1_1, 3_9, 6, 1_3, 7, 9, 1_2, 1_9, 8, 1_3, 1_8, 5, 1_3, 1_2, 4, 7, 9, 1_4, 4, 2_4, 2_2, 6, 8, 1_3, 1_7, 1_1, 3_9, 2_4, 1_3, 5, 6, 1_3, 7, 1_0, 9, 5, 1_4, 3_9, 2_5, 5, 1_3, 6, 6_3, 4, 2_4, 1_3, 8, 2_7, 1_0, 1_4, 5, 1_2, 4, 2_1, 5, 9, 5, 1_3, 7, 1_5, 3_9, 2_4, 1_6, 1_3, 2_4, 8, 1_2, 5, 4, 7, 1_3, 1_7, 1_1, 1_0, 6, 5, 1_7, 6, 1_6, 1_3, 5, 1_2, 4, 6_4, 4_0, 4_7, 5_4, 3_2, 2_3, 4, 5_3, 4_9, 3_2, 2_3, 4, 5_4, 8, 4_0, 4_7, 5_4, 3_2, 7, 2_3, 4, 6_9, 5_2, 4_3, 2_3, 4, 5_1, 1_0, 1_2, 6, 1_0, 1_5, 4_0, 5, 1_3, 6, 2_3, 4, 6_9, 5_2, 4_8, 5, 6, 2_6, 2_6, 2_6, 6_3, 4, 1_9, 8, 1_3, 4, 4_8, 7, 6, 1_6, 1_3, 7, 1_5, 4, 5_2, 7, 9, 2_1, 1_6, 7, 2_1, 5, 4, 6_1, 9, 1_4, 5, 1_3, 1_2, 6, 7, 9, 1_4, 1_0, 9, 2_1, 4, 6_4, 4_8, 5_2, 6_1, 6_3, 4, 7, 9, 1_4, 4, 4_8, 7, 6, 1_6, 1_3, 7, 1_5, 4, 5_2, 7, 9, 2_1, 1_6, 7, 2_1, 5, 4, 5_3, 5, 9, 5, 1_3, 7, 6, 1_0, 8, 9, 4, 6_4, 4_8, 5_2, 5_3, 6_3, 4, 2_0, 1_0, 6, 1_1, 4, 8, 2_7, 5, 1_3, 4, 6, 1_1, 1_0, 1_3, 6, 2_2, 3_9, 6, 2_0, 8, 4, 2_4, 1_3, 5, 6, 1_3, 7, 1_0, 9, 5, 1_4, 4, 1_8, 8, 1_4, 5, 1_5, 1_2, 4, 1_0, 9, 4, 8, 9, 5, 4, 1_1, 1_6, 9, 1_4, 1_3, 5, 1_4, 4, 2_4, 1_5, 1_6, 1_2, 4, 1_5, 7, 9, 2_1, 1_6, 7, 2_1, 5, 1_2, 4, 7, 9, 1_4, 4, 1_4, 5, 5, 2_4, 4, 1_0, 9, 6, 5, 1_3, 8, 2_4, 5, 1_3, 7, 2_5, 1_0, 1_5, 1_0, 6, 2_2, 4, 2_5, 5, 6, 2_0, 5, 5, 9, 4, 5_8, 7, 3_7, 2_3, 4, 4_9, 2_2, 3_2, 8, 1_3, 1_7, 1_1, 4, 7, 9, 1_4, 4, 3_2, 5, 9, 1_2, 8, 1_3, 5_5, 1_5, 8, 2_0, 2_6, 2],
											        [4, 4_0, 4_7, 5_4, 3_2, 4, 1_0, 1_2, 4, 1_4, 5, 1_2, 1_0, 2_1, 9, 5, 1_4, 4, 6, 8, 4, 2_4, 1_3, 5, 3_9, 6, 1_3, 7, 1_0, 9, 4, 1_4, 5, 5, 2_4, 4, 2_5, 1_0, 1_4, 1_0, 1_3, 5, 1_7, 6, 1_0, 8, 9, 7, 1_5, 4, 1_3, 5, 2_4, 1_3, 5, 1_2, 5, 9, 6, 7, 6, 1_0, 8, 9, 1_2, 4, 1_9, 1_3, 8, 1_8, 4, 1_6, 9, 1_5, 7, 2_5, 5, 1_5, 5, 1_4, 4, 6, 5, 3_7, 6, 4, 2_5, 2_2, 4, 4_6, 8, 1_0, 9, 6, 1_5, 2_2, 4, 1_7, 8, 9, 1_4, 1_0, 6, 1_0, 8, 9, 1_0, 9, 2_1, 4, 8, 9, 4, 2_5, 8, 6, 1_1, 4, 1_5, 5, 1_9, 6, 4, 7, 9, 1_4, 4, 1_3, 1_0, 2_1, 1_1, 6, 4, 1_7, 8, 9, 6, 5, 3_7, 6, 4, 1_0, 9, 4, 7, 1_5, 1_5, 4, 1_5, 7, 2_2, 5, 1_3, 1_2, 2_6, 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, 3_2, 1_1, 5, 4, 4_5, 1_6, 1_0, 1_7, 2_8, 4, 2_5, 1_3, 8, 2_0, 9, 4, 1_9, 8, 3_7, 4, 4_6, 1_6, 1_8, 2_4, 1_2, 4, 8, 2_7, 5, 1_3, 4, 6, 1_1, 5, 4, 1_5, 7, 5_7, 2_2, 4, 1_4, 8, 2_1, 2_6, 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=SCREAMING_SNAKE_CASE  ,     model_name="microsoft/speecht5_asr"  ,     revision="c5ef64c71905caeccde0e4462ef3f9077224c524"  ,     sequences=SCREAMING_SNAKE_CASE  ,     )









import json
import os
import subprocess
import unittest
from ast import literal_eval

import pytest
from parameterized import parameterized_class

from . import is_sagemaker_available


if is_sagemaker_available():
	from sagemaker import Session, TrainingJobAnalytics
	from sagemaker.huggingface import HuggingFace






@pytest.mark.skipif(
    literal_eval(os.getenv("""TEST_SAGEMAKER"""  ,				"""False""" ) ) is not True  ,				reason="""Skipping test because should only be run when releasing minor transformers version"""  ,				)
@pytest.mark.usefixtures("""sm_env""" )
@parameterized_class(
    [
        {
            """framework""": """pytorch""",
            """script""": """run_glue.py""",
            """model_name_or_path""": """distilbert-base-cased""",
            """instance_type""": """ml.g4dn.xlarge""",
            """results""": {"""train_runtime""": 650, """eval_accuracy""": 0.6, """eval_loss""": 0.9},
        },
        {
            """framework""": """tensorflow""",
            """script""": """run_tf.py""",
            """model_name_or_path""": """distilbert-base-cased""",
            """instance_type""": """ml.g4dn.xlarge""",
            """results""": {"""train_runtime""": 600, """eval_accuracy""": 0.3, """eval_loss""": 0.9},
        },
    ] )
class      UpperCamelCase(	unittest.TestCase ):


					def 				SCREAMING_SNAKE_CASE_	(    self						:		List[str]    )      ->						Dict:




											'''simple docstring'''

											if self.framework == "pytorch":
																	subprocess.run(
																	    f'''cp ./examples/pytorch/text-classification/run_glue.py {self.env.test_path}/run_glue.py'''.split()  ,     encoding="utf-8"  ,     check=SCREAMING_SNAKE_CASE  ,     )
											assert hasattr(self  ,     "env"    )


					def 				SCREAMING_SNAKE_CASE_	(    self						:		Union[str, Any]  ,     SCREAMING_SNAKE_CASE						:		Any=1    )      ->						List[str]:




											'''simple docstring'''

											return HuggingFace(
											    entry_point=self.script  ,     source_dir=self.env.test_path  ,     role=self.env.role  ,     image_uri=self.env.image_uri  ,     base_job_name=f'''{self.env.base_job_name}-single'''  ,     instance_count=SCREAMING_SNAKE_CASE  ,     instance_type=self.instance_type  ,     debugger_hook_config=SCREAMING_SNAKE_CASE  ,     hyperparameters={**self.env.hyperparameters, "model_name_or_path": self.model_name_or_path}  ,     metric_definitions=self.env.metric_definitions  ,     py_version="py36"  ,     )


					def 				SCREAMING_SNAKE_CASE_	(    self						:		Optional[int]  ,     SCREAMING_SNAKE_CASE						:		Any    )      ->						List[str]:




											'''simple docstring'''

											TrainingJobAnalytics(SCREAMING_SNAKE_CASE    ).export_csv(f'''{self.env.test_path}/{job_name}_metrics.csv'''    )






					def 				SCREAMING_SNAKE_CASE_	(    self						:		Optional[Any]    )      ->						Optional[int]:




											'''simple docstring'''

											__snake_case				=		self.create_estimator()

											# run training
											estimator.fit()

											# result dataframe
											__snake_case				=		TrainingJobAnalytics(estimator.latest_training_job.name    ).dataframe()

											# extract kpis
											__snake_case				=		list(result_metrics_df[result_metrics_df.metric_name == "eval_accuracy"]["value"]    )
											__snake_case				=		list(result_metrics_df[result_metrics_df.metric_name == "eval_loss"]["value"]    )
											# get train time from SageMaker job, this includes starting, preprocessing, stopping
											__snake_case				=		(
											    Session().describe_training_job(estimator.latest_training_job.name    ).get("TrainingTimeInSeconds"  ,     9_9_9_9_9_9    )
											)

											# assert kpis
											assert train_runtime <= self.results["train_runtime"]
											assert all(t >= self.results["eval_accuracy"] for t in eval_accuracy    )
											assert all(t <= self.results["eval_loss"] for t in eval_loss    )

											# dump tests result into json file to share in PR
											with open(f'''{estimator.latest_training_job.name}.json'''  ,     "w"    ) as outfile:
																	json.dump({"train_time": train_runtime, "eval_accuracy": eval_accuracy, "eval_loss": eval_loss}  ,     SCREAMING_SNAKE_CASE    )





