




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       SCREAMING_SNAKE_CASE__					(					_a						,				unittest.TestCase					):
						_a    						=						SpeechTaTokenizer
						_a    						=						False
						_a    						=						True


						def   __lowercase (							self				:			str					):
										super().setUp()

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

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

										tokenizer.save_pretrained(self.tmpdirname					)


						def   __lowercase (							self				:			Optional[int]						,						lowerCAmelCase				:			Optional[int]					):
										lowerCAmelCase  =				"""this is a test"""
										lowerCAmelCase  =				"""this is a test"""
										return input_text, output_text


						def   __lowercase (							self				:			List[Any]						,						lowerCAmelCase				:			Any						,						lowerCAmelCase				:			Optional[int]=False						,						lowerCAmelCase				:			int=20						,						lowerCAmelCase				:			str=5					):
										lowerCAmelCase ,						lowerCAmelCase  =				self.get_input_output_texts(lowerCAmelCase					)
										lowerCAmelCase  =				tokenizer.encode(lowerCAmelCase						,						add_special_tokens=lowerCAmelCase					)
										lowerCAmelCase  =				tokenizer.decode(lowerCAmelCase						,						clean_up_tokenization_spaces=lowerCAmelCase					)
										return text, ids


						def   __lowercase (							self				:			int					):
										lowerCAmelCase  =				"""<pad>"""
										lowerCAmelCase  =				1

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


						def   __lowercase (							self				:			Tuple					):
										lowerCAmelCase  =				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(lowerCAmelCase					)						,						81					)


						def   __lowercase (							self				:			List[Any]					):
										self.assertEqual(self.get_tokenizer().vocab_size						,						79					)


						def   __lowercase (							self				:			Tuple					):
										lowerCAmelCase  =				self.get_tokenizers(do_lower_case=lowerCAmelCase					)
										for tokenizer in tokenizers:
														with self.subTest(f'''{tokenizer.__class__.__name__}'''					):
																		lowerCAmelCase  =				tokenizer.vocab_size
																		lowerCAmelCase  =				len(lowerCAmelCase					)

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

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

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

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

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

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

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

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

																		self.assertGreaterEqual(len(lowerCAmelCase					)						,						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   __lowercase (							self				:			str					):
										pass


						def   __lowercase (							self				:			Any					):
										pass


						def   __lowercase (							self				:			List[Any]					):
										lowerCAmelCase  =				self.get_tokenizer()

										lowerCAmelCase  =				tokenizer.tokenize("""This is a test"""					)
										# fmt: off
										self.assertListEqual(lowerCAmelCase						,						[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(lowerCAmelCase					)						,						[4, 32, 11, 10, 12, 4, 10, 12, 4, 7, 4, 6, 5, 12, 6]						,						)

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

										lowerCAmelCase  =				tokenizer.convert_tokens_to_ids(lowerCAmelCase					)
										# fmt: off
										self.assertListEqual(lowerCAmelCase						,						[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

										lowerCAmelCase  =				tokenizer.convert_ids_to_tokens(lowerCAmelCase					)
										self.assertListEqual(
										    lowerCAmelCase						,						[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   __lowercase (							self				:			List[Any]					):
										# Use custom sequence because this tokenizer does not handle numbers.
										lowerCAmelCase  =				[
										    """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
										lowerCAmelCase  =				{
										    """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=lowerCAmelCase						,						model_name="""microsoft/speecht5_asr"""						,						revision="""c5ef64c71905caeccde0e4462ef3f9077224c524"""						,						sequences=lowerCAmelCase						,						)











"""simple docstring"""







from __future__ import annotations

import math
import random
from collections.abc import Collection
from typing import overload






class       SCREAMING_SNAKE_CASE__					:


						def __init__(							self				:			Dict						,						lowerCAmelCase				:			Collection[float] | None = None					):
										if components is None:
														lowerCAmelCase  =				[]
										lowerCAmelCase  =				list(lowerCAmelCase					)


						def __len__(							self				:			List[Any]					):
										return len(self.__components					)


						def __str__(							self				:			str					):
										return "(" + ",".join(map(lowerCAmelCase						,						self.__components					)					) + ")"


						def __add__(							self				:			Any						,						lowerCAmelCase				:			Vector					):
										lowerCAmelCase  =				len(self					)
										if size == len(lowerCAmelCase					):
														lowerCAmelCase  =				[self.__components[i] + other.component(lowerCAmelCase					) for i in range(lowerCAmelCase					)]
														return Vector(lowerCAmelCase					)
										else:
														raise Exception("""must have the same size"""					)


						def __sub__(							self				:			List[Any]						,						lowerCAmelCase				:			Vector					):
										lowerCAmelCase  =				len(self					)
										if size == len(lowerCAmelCase					):
														lowerCAmelCase  =				[self.__components[i] - other.component(lowerCAmelCase					) for i in range(lowerCAmelCase					)]
														return Vector(lowerCAmelCase					)
										else:  # error case
														raise Exception("""must have the same size"""					)


						@overload
						def __mul__(							self				:			Optional[int]						,						lowerCAmelCase				:			float					):
										...


						@overload
						def __mul__(							self				:			List[Any]						,						lowerCAmelCase				:			Vector					):
										...


						def __mul__(							self				:			Dict						,						lowerCAmelCase				:			float | Vector					):
										if isinstance(lowerCAmelCase						,						(float, int)					):
														lowerCAmelCase  =				[c * other for c in self.__components]
														return Vector(lowerCAmelCase					)
										elif isinstance(lowerCAmelCase						,						lowerCAmelCase					) and len(self					) == len(lowerCAmelCase					):
														lowerCAmelCase  =				len(self					)
														lowerCAmelCase  =				[self.__components[i] * other.component(lowerCAmelCase					) for i in range(lowerCAmelCase					)]
														return sum(lowerCAmelCase					)
										else:  # error case
														raise Exception("""invalid operand!"""					)


						def   __lowercase (							self				:			Tuple					):
										return Vector(self.__components					)


						def   __lowercase (							self				:			Dict						,						lowerCAmelCase				:			int					):
										if isinstance(lowerCAmelCase						,						lowerCAmelCase					) and -len(self.__components					) <= i < len(self.__components					):
														return self.__components[i]
										else:
														raise Exception("""index out of range"""					)


						def   __lowercase (							self				:			Any						,						lowerCAmelCase				:			int						,						lowerCAmelCase				:			float					):
										assert -len(self.__components					) <= pos < len(self.__components					)
										lowerCAmelCase  =				value


						def   __lowercase (							self				:			Optional[int]					):
										if len(self.__components					) == 0:
														raise Exception("""Vector is empty"""					)
										lowerCAmelCase  =				[c**2 for c in self.__components]
										return math.sqrt(sum(lowerCAmelCase					)					)




						def   __lowercase (							self				:			str						,						lowerCAmelCase				:			Vector						,						lowerCAmelCase				:			bool = False					):
										lowerCAmelCase  =				self * other
										lowerCAmelCase  =				self.euclidean_length() * other.euclidean_length()
										if deg:
														return math.degrees(math.acos(num / den					)					)
										else:
														return math.acos(num / den					)





def 							lowercase					(snake_case__   : int )     ->  Vector:


				'''simple docstring'''






				assert isinstance(snake_case__      ,       snake_case__ )
				return Vector([0] * dimension )





def 							lowercase					(snake_case__   : int      ,       snake_case__   : int )     ->  Vector:


				'''simple docstring'''






				assert isinstance(snake_case__      ,       snake_case__ ) and (isinstance(snake_case__      ,       snake_case__ ))
				lowerCAmelCase  =				[0] * dimension
				lowerCAmelCase  =				1
				return Vector(snake_case__ )





def 							lowercase					(snake_case__   : float      ,       snake_case__   : Vector      ,       snake_case__   : Vector )     ->  Vector:


				'''simple docstring'''






				assert (
				    isinstance(snake_case__      ,       snake_case__ )
				    and isinstance(snake_case__      ,       snake_case__ )
				    and (isinstance(snake_case__      ,       (int, float) ))
				)
				return x * scalar + y





def 							lowercase					(snake_case__   : int      ,       snake_case__   : int      ,       snake_case__   : int )     ->  Vector:


				'''simple docstring'''






				random.seed(snake_case__ )
				lowerCAmelCase  =				[random.randint(snake_case__      ,       snake_case__ ) for _ in range(snake_case__ )]
				return Vector(snake_case__ )






class       SCREAMING_SNAKE_CASE__					:


						def __init__(							self				:			Any						,						lowerCAmelCase				:			list[list[float]]						,						lowerCAmelCase				:			int						,						lowerCAmelCase				:			int					):
										lowerCAmelCase  =				matrix
										lowerCAmelCase  =				w
										lowerCAmelCase  =				h


						def __str__(							self				:			List[str]					):
										lowerCAmelCase  =				""""""
										for i in range(self.__height					):
														ans += "|"
														for j in range(self.__width					):
																		if j < self.__width - 1:
																						ans += str(self.__matrix[i][j]					) + ","
																		else:
																						ans += str(self.__matrix[i][j]					) + "|\n"
										return ans


						def __add__(							self				:			Optional[Any]						,						lowerCAmelCase				:			Matrix					):
										if self.__width == other.width() and self.__height == other.height():
														lowerCAmelCase  =				[]
														for i in range(self.__height					):
																		lowerCAmelCase  =				[
																		    self.__matrix[i][j] + other.component(lowerCAmelCase						,						lowerCAmelCase					)
																		    for j in range(self.__width					)
																		]
																		matrix.append(lowerCAmelCase					)
														return Matrix(lowerCAmelCase						,						self.__width						,						self.__height					)
										else:
														raise Exception("""matrix must have the same dimension!"""					)


						def __sub__(							self				:			Union[str, Any]						,						lowerCAmelCase				:			Matrix					):
										if self.__width == other.width() and self.__height == other.height():
														lowerCAmelCase  =				[]
														for i in range(self.__height					):
																		lowerCAmelCase  =				[
																		    self.__matrix[i][j] - other.component(lowerCAmelCase						,						lowerCAmelCase					)
																		    for j in range(self.__width					)
																		]
																		matrix.append(lowerCAmelCase					)
														return Matrix(lowerCAmelCase						,						self.__width						,						self.__height					)
										else:
														raise Exception("""matrices must have the same dimension!"""					)


						@overload
						def __mul__(							self				:			Any						,						lowerCAmelCase				:			float					):
										...


						@overload
						def __mul__(							self				:			Optional[int]						,						lowerCAmelCase				:			Vector					):
										...


						def __mul__(							self				:			Dict						,						lowerCAmelCase				:			float | Vector					):
										if isinstance(lowerCAmelCase						,						lowerCAmelCase					):  # matrix-vector
														if len(lowerCAmelCase					) == self.__width:
																		lowerCAmelCase  =				zero_vector(self.__height					)
																		for i in range(self.__height					):
																						lowerCAmelCase  =				[
																						    self.__matrix[i][j] * other.component(lowerCAmelCase					)
																						    for j in range(self.__width					)
																						]
																						ans.change_component(lowerCAmelCase						,						sum(lowerCAmelCase					)					)
																		return ans
														else:
																		raise Exception(
																		    """vector must have the same size as the """
																		    """number of columns of the matrix!"""					)
										elif isinstance(lowerCAmelCase						,						(int, float)					):  # matrix-scalar
														lowerCAmelCase  =				[
														    [self.__matrix[i][j] * other for j in range(self.__width					)]
														    for i in range(self.__height					)
														]
														return Matrix(lowerCAmelCase						,						self.__width						,						self.__height					)
										return None


						def   __lowercase (							self				:			Any					):
										return self.__height


						def   __lowercase (							self				:			int					):
										return self.__width


						def   __lowercase (							self				:			Optional[Any]						,						lowerCAmelCase				:			int						,						lowerCAmelCase				:			int					):
										if 0 <= x < self.__height and 0 <= y < self.__width:
														return self.__matrix[x][y]
										else:
														raise Exception("""change_component: indices out of bounds"""					)


						def   __lowercase (							self				:			int						,						lowerCAmelCase				:			int						,						lowerCAmelCase				:			int						,						lowerCAmelCase				:			float					):
										if 0 <= x < self.__height and 0 <= y < self.__width:
														lowerCAmelCase  =				value
										else:
														raise Exception("""change_component: indices out of bounds"""					)


						def   __lowercase (							self				:			int						,						lowerCAmelCase				:			int						,						lowerCAmelCase				:			int					):
										if self.__height != self.__width:
														raise Exception("""Matrix is not square"""					)
										lowerCAmelCase  =				self.__matrix[:x] + self.__matrix[x + 1 :]
										for i in range(len(lowerCAmelCase					)					):
														lowerCAmelCase  =				minor[i][:y] + minor[i][y + 1 :]
										return Matrix(lowerCAmelCase						,						self.__width - 1						,						self.__height - 1					).determinant()


						def   __lowercase (							self				:			Optional[Any]						,						lowerCAmelCase				:			int						,						lowerCAmelCase				:			int					):
										if self.__height != self.__width:
														raise Exception("""Matrix is not square"""					)
										if 0 <= x < self.__height and 0 <= y < self.__width:
														return (-1) ** (x + y) * self.minor(lowerCAmelCase						,						lowerCAmelCase					)
										else:
														raise Exception("""Indices out of bounds"""					)




						def   __lowercase (							self				:			List[Any]					):
										if self.__height != self.__width:
														raise Exception("""Matrix is not square"""					)
										if self.__height < 1:
														raise Exception("""Matrix has no element"""					)
										elif self.__height == 1:
														return self.__matrix[0][0]
										elif self.__height == 2:
														return (
														    self.__matrix[0][0] * self.__matrix[1][1]
														    - self.__matrix[0][1] * self.__matrix[1][0]
														)
										else:
														lowerCAmelCase  =				[
														    self.__matrix[0][y] * self.cofactor(0						,						lowerCAmelCase					) for y in range(self.__width					)
														]
														return sum(lowerCAmelCase					)





def 							lowercase					(snake_case__   : int )     ->  Matrix:


				'''simple docstring'''






				lowerCAmelCase  =				[[0] * n for _ in range(snake_case__ )]
				return Matrix(snake_case__      ,       snake_case__      ,       snake_case__ )






def 							lowercase					(snake_case__   : int      ,       snake_case__   : int      ,       snake_case__   : int      ,       snake_case__   : int )     ->  Matrix:


				'''simple docstring'''






				random.seed(snake_case__ )
				lowerCAmelCase  =				[
				    [random.randint(snake_case__      ,       snake_case__ ) for _ in range(snake_case__ )] for _ in range(snake_case__ )
				]
				return Matrix(snake_case__      ,       snake_case__      ,       snake_case__ )





