




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


UpperCAmelCase_		:					int          =  get_tests_dir("fixtures/test_sentencepiece_bpe_char.model")




@require_sentencepiece
@require_tokenizers
class 		__A   (      UpperCamelCase__       ,    unittest.TestCase      ):
						UpperCamelCase      =       SpeechTaTokenizer
						UpperCamelCase      =       False
						UpperCamelCase      =       True

						def      A__    (		self :Dict			):
										'''simple docstring'''

										super().setUp()

										# We have a SentencePiece fixture for testing
										__magic_name__						:						int										=SpeechTaTokenizer(__snake_case			)

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

										tokenizer.save_pretrained(self.tmpdirname			)

						def      A__    (		self :List[Any]     ,			__snake_case :List[Any]			):
										'''simple docstring'''

										__magic_name__						:						Union[str, Any]										="""this is a test"""
										__magic_name__						:						Tuple										="""this is a test"""
										return input_text, output_text

						def      A__    (		self :str     ,			__snake_case :Tuple     ,			__snake_case :Union[str, Any]=False     ,			__snake_case :List[str]=20     ,			__snake_case :str=5			):
										'''simple docstring'''

										__magic_name__					,			__magic_name__						:						List[str]										=self.get_input_output_texts(__snake_case			)
										__magic_name__						:						Tuple										=tokenizer.encode(__snake_case     ,			add_special_tokens=__snake_case			)
										__magic_name__						:						Optional[int]										=tokenizer.decode(__snake_case     ,			clean_up_tokenization_spaces=__snake_case			)
										return text, ids

						def      A__    (		self :str			):
										'''simple docstring'''

										__magic_name__						:						int										="""<pad>"""
										__magic_name__						:						Union[str, Any]										=1

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

						def      A__    (		self :int			):
										'''simple docstring'''

										__magic_name__						:						Optional[int]										=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(__snake_case			)     ,			81			)

						def      A__    (		self :str			):
										'''simple docstring'''

										self.assertEqual(self.get_tokenizer().vocab_size     ,			79			)

						def      A__    (		self :List[str]			):
										'''simple docstring'''

										__magic_name__						:						List[Any]										=self.get_tokenizers(do_lower_case=__snake_case			)
										for tokenizer in tokenizers:
														with self.subTest(f"{tokenizer.__class__.__name__}"			):
																		__magic_name__						:						Tuple										=tokenizer.vocab_size
																		__magic_name__						:						Optional[Any]										=len(__snake_case			)

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

																		__magic_name__						:						Optional[Any]										=["""aaaaa bbbbbb""", """cccccccccdddddddd"""]
																		__magic_name__						:						Dict										=tokenizer.add_tokens(__snake_case			)
																		__magic_name__						:						List[str]										=tokenizer.vocab_size
																		__magic_name__						:						Tuple										=len(__snake_case			)

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

																		__magic_name__						:						Any										=tokenizer.encode("""aaaaa bbbbbb low cccccccccdddddddd l"""     ,			add_special_tokens=__snake_case			)

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

																		__magic_name__						:						Any										={"""eos_token""": """>>>>|||<||<<|<<""", """pad_token""": """<<<<<|||>|>>>>|>"""}
																		__magic_name__						:						Any										=tokenizer.add_special_tokens(__snake_case			)
																		__magic_name__						:						Dict										=tokenizer.vocab_size
																		__magic_name__						:						str										=len(__snake_case			)

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

																		__magic_name__						:						Optional[int]										=tokenizer.encode(
																		    """>>>>|||<||<<|<< aaaaabbbbbb low cccccccccdddddddd <<<<<|||>|>>>>|> l"""     ,			add_special_tokens=__snake_case			)

																		self.assertGreaterEqual(len(__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      A__    (		self :Optional[int]			):
										'''simple docstring'''

										pass

						def      A__    (		self :List[str]			):
										'''simple docstring'''

										pass

						def      A__    (		self :Dict			):
										'''simple docstring'''

										__magic_name__						:						Optional[int]										=self.get_tokenizer()

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

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

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

										__magic_name__						:						List[str]										=tokenizer.convert_ids_to_tokens(__snake_case			)
										self.assertListEqual(
										    __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      A__    (		self :Optional[Any]			):
										'''simple docstring'''

										__magic_name__						:						Dict										=[
										    """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
										__magic_name__						:						Tuple										={
										    """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=__snake_case     ,			model_name="""microsoft/speecht5_asr"""     ,			revision="""c5ef64c71905caeccde0e4462ef3f9077224c524"""     ,			sequences=__snake_case     ,			)










import gc
import random
import unittest

import numpy as np
import torch
from PIL import Image
from transformers import XLMRobertaTokenizerFast

from diffusers import DDIMScheduler, KandinskyInpaintPipeline, KandinskyPriorPipeline, UNetaDConditionModel, VQModel
from diffusers.pipelines.kandinsky.text_encoder import MCLIPConfig, MultilingualCLIP
from diffusers.utils import floats_tensor, load_image, load_numpy, slow, torch_device
from diffusers.utils.testing_utils import enable_full_determinism, require_torch_gpu

from ..test_pipelines_common import PipelineTesterMixin, assert_mean_pixel_difference


enable_full_determinism()




class 		__A   (      UpperCamelCase__       ,    unittest.TestCase      ):
						UpperCamelCase      =       KandinskyInpaintPipeline
						UpperCamelCase      =       ["""prompt""", """image_embeds""", """negative_image_embeds""", """image""", """mask_image"""]
						UpperCamelCase      =       [
						    """prompt""",
						    """negative_prompt""",
						    """image_embeds""",
						    """negative_image_embeds""",
						    """image""",
						    """mask_image""",
						]
						UpperCamelCase      =       [
						    """generator""",
						    """height""",
						    """width""",
						    """latents""",
						    """guidance_scale""",
						    """negative_prompt""",
						    """num_inference_steps""",
						    """return_dict""",
						    """guidance_scale""",
						    """num_images_per_prompt""",
						    """output_type""",
						    """return_dict""",
						]
						UpperCamelCase      =       False

						@property
						def      A__    (		self :Union[str, Any]			):
										'''simple docstring'''

										return 32

						@property
						def      A__    (		self :Optional[Any]			):
										'''simple docstring'''

										return 32

						@property
						def      A__    (		self :List[Any]			):
										'''simple docstring'''

										return self.time_input_dim

						@property
						def      A__    (		self :Dict			):
										'''simple docstring'''

										return self.time_input_dim * 4

						@property
						def      A__    (		self :List[Any]			):
										'''simple docstring'''

										return 1_00

						@property
						def      A__    (		self :Dict			):
										'''simple docstring'''

										__magic_name__						:						Dict										=XLMRobertaTokenizerFast.from_pretrained("""YiYiXu/tiny-random-mclip-base"""			)
										return tokenizer

						@property
						def      A__    (		self :str			):
										'''simple docstring'''

										torch.manual_seed(0			)
										__magic_name__						:						str										=MCLIPConfig(
										    numDims=self.cross_attention_dim     ,			transformerDimensions=self.text_embedder_hidden_size     ,			hidden_size=self.text_embedder_hidden_size     ,			intermediate_size=37     ,			num_attention_heads=4     ,			num_hidden_layers=5     ,			vocab_size=10_05     ,			)

										__magic_name__						:						Tuple										=MultilingualCLIP(__snake_case			)
										__magic_name__						:						Optional[int]										=text_encoder.eval()

										return text_encoder

						@property
						def      A__    (		self :Dict			):
										'''simple docstring'''

										torch.manual_seed(0			)

										__magic_name__						:						Optional[Any]										={
										    """in_channels""": 9,
										    # Out channels is double in channels because predicts mean and variance
										    """out_channels""": 8,
										    """addition_embed_type""": """text_image""",
										    """down_block_types""": ("""ResnetDownsampleBlock2D""", """SimpleCrossAttnDownBlock2D"""),
										    """up_block_types""": ("""SimpleCrossAttnUpBlock2D""", """ResnetUpsampleBlock2D"""),
										    """mid_block_type""": """UNetMidBlock2DSimpleCrossAttn""",
										    """block_out_channels""": (self.block_out_channels_a, self.block_out_channels_a * 2),
										    """layers_per_block""": 1,
										    """encoder_hid_dim""": self.text_embedder_hidden_size,
										    """encoder_hid_dim_type""": """text_image_proj""",
										    """cross_attention_dim""": self.cross_attention_dim,
										    """attention_head_dim""": 4,
										    """resnet_time_scale_shift""": """scale_shift""",
										    """class_embed_type""": None,
										}

										__magic_name__						:						Union[str, Any]										=UNetaDConditionModel(**__snake_case			)
										return model

						@property
						def      A__    (		self :List[str]			):
										'''simple docstring'''

										return {
										    "block_out_channels": [32, 64],
										    "down_block_types": ["DownEncoderBlock2D", "AttnDownEncoderBlock2D"],
										    "in_channels": 3,
										    "latent_channels": 4,
										    "layers_per_block": 1,
										    "norm_num_groups": 8,
										    "norm_type": "spatial",
										    "num_vq_embeddings": 12,
										    "out_channels": 3,
										    "up_block_types": [
										        "AttnUpDecoderBlock2D",
										        "UpDecoderBlock2D",
										    ],
										    "vq_embed_dim": 4,
										}

						@property
						def      A__    (		self :Tuple			):
										'''simple docstring'''

										torch.manual_seed(0			)
										__magic_name__						:						Dict										=VQModel(**self.dummy_movq_kwargs			)
										return model

						def      A__    (		self :Optional[Any]			):
										'''simple docstring'''

										__magic_name__						:						List[str]										=self.dummy_text_encoder
										__magic_name__						:						Optional[Any]										=self.dummy_tokenizer
										__magic_name__						:						Optional[Any]										=self.dummy_unet
										__magic_name__						:						Tuple										=self.dummy_movq

										__magic_name__						:						List[str]										=DDIMScheduler(
										    num_train_timesteps=10_00     ,			beta_schedule="""linear"""     ,			beta_start=0.00085     ,			beta_end=0.012     ,			clip_sample=__snake_case     ,			set_alpha_to_one=__snake_case     ,			steps_offset=1     ,			prediction_type="""epsilon"""     ,			thresholding=__snake_case     ,			)

										__magic_name__						:						str										={
										    """text_encoder""": text_encoder,
										    """tokenizer""": tokenizer,
										    """unet""": unet,
										    """scheduler""": scheduler,
										    """movq""": movq,
										}

										return components

						def      A__    (		self :str     ,			__snake_case :Optional[Any]     ,			__snake_case :int=0			):
										'''simple docstring'''

										__magic_name__						:						Union[str, Any]										=floats_tensor((1, self.cross_attention_dim)     ,			rng=random.Random(__snake_case			)			).to(__snake_case			)
										__magic_name__						:						Dict										=floats_tensor((1, self.cross_attention_dim)     ,			rng=random.Random(seed + 1			)			).to(__snake_case			)
										# create init_image
										__magic_name__						:						str										=floats_tensor((1, 3, 64, 64)     ,			rng=random.Random(__snake_case			)			).to(__snake_case			)
										__magic_name__						:						int										=image.cpu().permute(0     ,			2     ,			3     ,			1			)[0]
										__magic_name__						:						str										=Image.fromarray(np.uinta(__snake_case			)			).convert("""RGB"""			).resize((2_56, 2_56)			)
										# create mask
										__magic_name__						:						Dict										=np.ones((64, 64)     ,			dtype=np.floataa			)
										__magic_name__						:						Any										=0

										if str(__snake_case			).startswith("""mps"""			):
														__magic_name__						:						Dict										=torch.manual_seed(__snake_case			)
										else:
														__magic_name__						:						Tuple										=torch.Generator(device=__snake_case			).manual_seed(__snake_case			)
										__magic_name__						:						List[Any]										={
										    """prompt""": """horse""",
										    """image""": init_image,
										    """mask_image""": mask,
										    """image_embeds""": image_embeds,
										    """negative_image_embeds""": negative_image_embeds,
										    """generator""": generator,
										    """height""": 64,
										    """width""": 64,
										    """num_inference_steps""": 2,
										    """guidance_scale""": 4.0,
										    """output_type""": """np""",
										}
										return inputs

						def      A__    (		self :List[str]			):
										'''simple docstring'''

										__magic_name__						:						Tuple										="""cpu"""

										__magic_name__						:						List[Any]										=self.get_dummy_components()

										__magic_name__						:						Union[str, Any]										=self.pipeline_class(**__snake_case			)
										__magic_name__						:						Tuple										=pipe.to(__snake_case			)

										pipe.set_progress_bar_config(disable=__snake_case			)

										__magic_name__						:						Tuple										=pipe(**self.get_dummy_inputs(__snake_case			)			)
										__magic_name__						:						List[Any]										=output.images

										__magic_name__						:						Any										=pipe(
										    **self.get_dummy_inputs(__snake_case			)     ,			return_dict=__snake_case     ,			)[0]

										__magic_name__						:						int										=image[0, -3:, -3:, -1]
										__magic_name__						:						str										=image_from_tuple[0, -3:, -3:, -1]

										print(f"image.shape {image.shape}"			)

										assert image.shape == (1, 64, 64, 3)

										__magic_name__						:						Optional[Any]										=np.array(
										    [0.8326919, 0.73790467, 0.20918581, 0.9309612, 0.5511791, 0.43713328, 0.5513321, 0.49922934, 0.59497786]			)

										assert (
										    np.abs(image_slice.flatten() - expected_slice			).max() < 1E-2
										), f" expected_slice {expected_slice}, but got {image_slice.flatten()}"
										assert (
										    np.abs(image_from_tuple_slice.flatten() - expected_slice			).max() < 1E-2
										), f" expected_slice {expected_slice}, but got {image_from_tuple_slice.flatten()}"


						def      A__    (		self :Dict			):
										'''simple docstring'''

										super().test_inference_batch_single_identical(expected_max_diff=3E-3			)




@slow
@require_torch_gpu
class 		__A   (      unittest.TestCase      ):

						def      A__    (		self :List[Any]			):
										'''simple docstring'''

										super().tearDown()
										gc.collect()
										torch.cuda.empty_cache()


						def      A__    (		self :Union[str, Any]			):
										'''simple docstring'''

										__magic_name__						:						List[str]										=load_numpy(
										    """https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main"""
										    """/kandinsky/kandinsky_inpaint_cat_with_hat_fp16.npy"""			)

										__magic_name__						:						int										=load_image(
										    """https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main""" """/kandinsky/cat.png"""			)
										__magic_name__						:						List[Any]										=np.ones((7_68, 7_68)     ,			dtype=np.floataa			)
										__magic_name__						:						Any										=0

										__magic_name__						:						int										="""a hat"""

										__magic_name__						:						int										=KandinskyPriorPipeline.from_pretrained(
										    """kandinsky-community/kandinsky-2-1-prior"""     ,			torch_dtype=torch.floataa			)
										pipe_prior.to(__snake_case			)

										__magic_name__						:						Dict										=KandinskyInpaintPipeline.from_pretrained(
										    """kandinsky-community/kandinsky-2-1-inpaint"""     ,			torch_dtype=torch.floataa			)
										__magic_name__						:						int										=pipeline.to(__snake_case			)
										pipeline.set_progress_bar_config(disable=__snake_case			)

										__magic_name__						:						Union[str, Any]										=torch.Generator(device="""cpu"""			).manual_seed(0			)
										__magic_name__					,			__magic_name__						:						Dict										=pipe_prior(
										    __snake_case     ,			generator=__snake_case     ,			num_inference_steps=5     ,			negative_prompt=""""""     ,			).to_tuple()

										__magic_name__						:						Optional[Any]										=pipeline(
										    __snake_case     ,			image=__snake_case     ,			mask_image=__snake_case     ,			image_embeds=__snake_case     ,			negative_image_embeds=__snake_case     ,			generator=__snake_case     ,			num_inference_steps=1_00     ,			height=7_68     ,			width=7_68     ,			output_type="""np"""     ,			)

										__magic_name__						:						Optional[int]										=output.images[0]

										assert image.shape == (7_68, 7_68, 3)

										assert_mean_pixel_difference(__snake_case     ,			__snake_case			)




