


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







@require_sentencepiece
@require_tokenizers
class lowerCAmelCase_						(			lowerCamelCase__ ,						unittest.TestCase	):

 '''simple docstring'''

 __snake_case												=  SpeechTaTokenizer
 __snake_case												=  False
 __snake_case												=  True



 def 						UpperCamelCase__					(     self ):
       super().setUp()

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

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

       tokenizer.save_pretrained(self.tmpdirname )



 def 						UpperCamelCase__					(     self		,				_UpperCAmelCase ):
       snake_case_	=				'''this is a test'''
       snake_case_	=				'''this is a test'''
       return input_text, output_text



 def 						UpperCamelCase__					(     self		,				_UpperCAmelCase		,				_UpperCAmelCase=False		,				_UpperCAmelCase=20		,				_UpperCAmelCase=5 ):
       snake_case_	,   snake_case_	=				self.get_input_output_texts(_UpperCAmelCase )
       snake_case_	=				tokenizer.encode(_UpperCAmelCase		,				add_special_tokens=_UpperCAmelCase )
       snake_case_	=				tokenizer.decode(_UpperCAmelCase		,				clean_up_tokenization_spaces=_UpperCAmelCase )
       return text, ids



 def 						UpperCamelCase__					(     self ):
       snake_case_	=				'''<pad>'''
       snake_case_	=				1

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



 def 						UpperCamelCase__					(     self ):
       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(_UpperCAmelCase )		,				81 )



 def 						UpperCamelCase__					(     self ):
       self.assertEqual(self.get_tokenizer().vocab_size		,				79 )



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

                   self.assertNotEqual(_UpperCAmelCase		,				0 )

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

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

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

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

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

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

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

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

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



 def 						UpperCamelCase__					(     self ):
       pass



 def 						UpperCamelCase__					(     self ):
       pass



 def 						UpperCamelCase__					(     self ):
       snake_case_	=				self.get_tokenizer()

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

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

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

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

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





 @slow
 def 						UpperCamelCase__					(     self ):
       # Use custom sequence because this tokenizer does not handle numbers.
       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, 32, 13, 7, 9, 12, 19, 8, 13, 18, 5, 13, 12, 4, 64, 19, 8, 13, 18, 5, 13, 15, 22, 4, 28, 9, 8, 20, 9, 4, 7, 12, 4, 24, 22, 6, 8, 13, 17, 11, 39, 6, 13, 7, 9, 12, 19, 8, 13, 18, 5, 13, 12, 4, 7, 9, 14, 4, 24, 22, 6, 8, 13, 17, 11, 39, 24, 13, 5, 6, 13, 7, 10, 9, 5, 14, 39, 25, 5, 13, 6, 63, 4, 24, 13, 8, 27, 10, 14, 5, 12, 4, 21, 5, 9, 5, 13, 7, 15, 39, 24, 16, 13, 24, 8, 12, 5, 4, 7, 13, 17, 11, 10, 6, 5, 17, 6, 16, 13, 5, 12, 4, 64, 40, 47, 54, 32, 23, 4, 53, 49, 32, 23, 4, 54, 8, 40, 47, 54, 32, 7, 23, 4, 69, 52, 43, 23, 4, 51, 10, 12, 6, 10, 15, 40, 5, 13, 6, 23, 4, 69, 52, 48, 5, 6, 26, 26, 26, 63, 4, 19, 8, 13, 4, 48, 7, 6, 16, 13, 7, 15, 4, 52, 7, 9, 21, 16, 7, 21, 5, 4, 61, 9, 14, 5, 13, 12, 6, 7, 9, 14, 10, 9, 21, 4, 64, 48, 52, 61, 63, 4, 7, 9, 14, 4, 48, 7, 6, 16, 13, 7, 15, 4, 52, 7, 9, 21, 16, 7, 21, 5, 4, 53, 5, 9, 5, 13, 7, 6, 10, 8, 9, 4, 64, 48, 52, 53, 63, 4, 20, 10, 6, 11, 4, 8, 27, 5, 13, 4, 6, 11, 10, 13, 6, 22, 39, 6, 20, 8, 4, 24, 13, 5, 6, 13, 7, 10, 9, 5, 14, 4, 18, 8, 14, 5, 15, 12, 4, 10, 9, 4, 8, 9, 5, 4, 11, 16, 9, 14, 13, 5, 14, 4, 24, 15, 16, 12, 4, 15, 7, 9, 21, 16, 7, 21, 5, 12, 4, 7, 9, 14, 4, 14, 5, 5, 24, 4, 10, 9, 6, 5, 13, 8, 24, 5, 13, 7, 25, 10, 15, 10, 6, 22, 4, 25, 5, 6, 20, 5, 5, 9, 4, 58, 7, 37, 23, 4, 49, 22, 32, 8, 13, 17, 11, 4, 7, 9, 14, 4, 32, 5, 9, 12, 8, 13, 55, 15, 8, 20, 26, 2],
               [4, 40, 47, 54, 32, 4, 10, 12, 4, 14, 5, 12, 10, 21, 9, 5, 14, 4, 6, 8, 4, 24, 13, 5, 39, 6, 13, 7, 10, 9, 4, 14, 5, 5, 24, 4, 25, 10, 14, 10, 13, 5, 17, 6, 10, 8, 9, 7, 15, 4, 13, 5, 24, 13, 5, 12, 5, 9, 6, 7, 6, 10, 8, 9, 12, 4, 19, 13, 8, 18, 4, 16, 9, 15, 7, 25, 5, 15, 5, 14, 4, 6, 5, 37, 6, 4, 25, 22, 4, 46, 8, 10, 9, 6, 15, 22, 4, 17, 8, 9, 14, 10, 6, 10, 8, 9, 10, 9, 21, 4, 8, 9, 4, 25, 8, 6, 11, 4, 15, 5, 19, 6, 4, 7, 9, 14, 4, 13, 10, 21, 11, 6, 4, 17, 8, 9, 6, 5, 37, 6, 4, 10, 9, 4, 7, 15, 15, 4, 15, 7, 22, 5, 13, 12, 26, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
               [4, 32, 11, 5, 4, 45, 16, 10, 17, 28, 4, 25, 13, 8, 20, 9, 4, 19, 8, 37, 4, 46, 16, 18, 24, 12, 4, 8, 27, 5, 13, 4, 6, 11, 5, 4, 15, 7, 57, 22, 4, 14, 8, 21, 26, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
           ],
           '''attention_mask''': [
               [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
               [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
               [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
           ]
       }
       # fmt: on

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



import functools
import operator

from ...configuration_utils import PretrainedConfig
from ...utils import logging


UpperCAmelCase      =   logging.get_logger(__name__)

UpperCAmelCase      =   {
    """microsoft/wavlm-base""": """https://huggingface.co/microsoft/wavlm-base/resolve/main/config.json""",
    # See all WavLM models at https://huggingface.co/models?filter=wavlm
}







class lowerCAmelCase_						(			lowerCamelCase__	):

 '''simple docstring'''

 __snake_case												=  "wavlm"



 def __init__(     self		,				_UpperCAmelCase=32		,				_UpperCAmelCase=7_68		,				_UpperCAmelCase=12		,				_UpperCAmelCase=12		,				_UpperCAmelCase=30_72		,				_UpperCAmelCase="gelu"		,				_UpperCAmelCase=0.1		,				_UpperCAmelCase=0.1		,				_UpperCAmelCase=0.1		,				_UpperCAmelCase=0.0		,				_UpperCAmelCase=0.1		,				_UpperCAmelCase=0.1		,				_UpperCAmelCase=0.02		,				_UpperCAmelCase=1E-5		,				_UpperCAmelCase="group"		,				_UpperCAmelCase="gelu"		,				_UpperCAmelCase=(5_12, 5_12, 5_12, 5_12, 5_12, 5_12, 5_12)		,				_UpperCAmelCase=(5, 2, 2, 2, 2, 2, 2)		,				_UpperCAmelCase=(10, 3, 3, 3, 3, 2, 2)		,				_UpperCAmelCase=False		,				_UpperCAmelCase=1_28		,				_UpperCAmelCase=16		,				_UpperCAmelCase=3_20		,				_UpperCAmelCase=8_00		,				_UpperCAmelCase=False		,				_UpperCAmelCase=True		,				_UpperCAmelCase=0.05		,				_UpperCAmelCase=10		,				_UpperCAmelCase=2		,				_UpperCAmelCase=0.0		,				_UpperCAmelCase=10		,				_UpperCAmelCase=3_20		,				_UpperCAmelCase=2		,				_UpperCAmelCase=0.1		,				_UpperCAmelCase=1_00		,				_UpperCAmelCase=2_56		,				_UpperCAmelCase=2_56		,				_UpperCAmelCase=0.1		,				_UpperCAmelCase="mean"		,				_UpperCAmelCase=False		,				_UpperCAmelCase=False		,				_UpperCAmelCase=2_56		,				_UpperCAmelCase=(5_12, 5_12, 5_12, 5_12, 15_00)		,				_UpperCAmelCase=(5, 3, 3, 1, 1)		,				_UpperCAmelCase=(1, 2, 3, 1, 1)		,				_UpperCAmelCase=5_12		,				_UpperCAmelCase=80		,				_UpperCAmelCase=0		,				_UpperCAmelCase=1		,				_UpperCAmelCase=2		,				_UpperCAmelCase=False		,				_UpperCAmelCase=3		,				_UpperCAmelCase=2		,				_UpperCAmelCase=3		,				_UpperCAmelCase=None		,				**_UpperCAmelCase		,				):
       super().__init__(**_UpperCAmelCase		,				pad_token_id=_UpperCAmelCase		,				bos_token_id=_UpperCAmelCase		,				eos_token_id=_UpperCAmelCase )
       snake_case_	=				hidden_size
       snake_case_	=				feat_extract_norm
       snake_case_	=				feat_extract_activation
       snake_case_	=				list(_UpperCAmelCase )
       snake_case_	=				list(_UpperCAmelCase )
       snake_case_	=				list(_UpperCAmelCase )
       snake_case_	=				conv_bias
       snake_case_	=				num_buckets
       snake_case_	=				max_bucket_distance
       snake_case_	=				num_conv_pos_embeddings
       snake_case_	=				num_conv_pos_embedding_groups
       snake_case_	=				len(self.conv_dim )
       snake_case_	=				num_hidden_layers
       snake_case_	=				intermediate_size
       snake_case_	=				hidden_act
       snake_case_	=				num_attention_heads
       snake_case_	=				hidden_dropout
       snake_case_	=				attention_dropout
       snake_case_	=				activation_dropout
       snake_case_	=				feat_proj_dropout
       snake_case_	=				final_dropout
       snake_case_	=				layerdrop
       snake_case_	=				layer_norm_eps
       snake_case_	=				initializer_range
       snake_case_	=				num_ctc_classes
       snake_case_	=				vocab_size
       snake_case_	=				do_stable_layer_norm
       snake_case_	=				use_weighted_layer_sum
       snake_case_	=				classifier_proj_size

       if (
           (len(self.conv_stride ) != self.num_feat_extract_layers)
           or (len(self.conv_kernel ) != self.num_feat_extract_layers)
           or (len(self.conv_dim ) != self.num_feat_extract_layers)
       ):
             raise ValueError(
                 '''Configuration for convolutional layers is incorrect. It is required that `len(config.conv_dim)` =='''
                 ''' `len(config.conv_stride)` == `len(config.conv_kernel)`, but is `len(config.conv_dim) ='''
                 F''' {len(self.conv_dim )}`, `len(config.conv_stride) = {len(self.conv_stride )}`,'''
                 F''' `len(config.conv_kernel) = {len(self.conv_kernel )}`.''' )

       # fine-tuning config parameters for SpecAugment: https://arxiv.org/abs/1904.08779
       snake_case_	=				apply_spec_augment
       snake_case_	=				mask_time_prob
       snake_case_	=				mask_time_length
       snake_case_	=				mask_time_min_masks
       snake_case_	=				mask_feature_prob
       snake_case_	=				mask_feature_length

       # parameters for pretraining with codevector quantized representations
       snake_case_	=				num_codevectors_per_group
       snake_case_	=				num_codevector_groups
       snake_case_	=				contrastive_logits_temperature
       snake_case_	=				num_negatives
       snake_case_	=				codevector_dim
       snake_case_	=				proj_codevector_dim
       snake_case_	=				diversity_loss_weight

       # ctc loss
       snake_case_	=				ctc_loss_reduction
       snake_case_	=				ctc_zero_infinity

       # adapter
       snake_case_	=				add_adapter
       snake_case_	=				adapter_kernel_size
       snake_case_	=				adapter_stride
       snake_case_	=				num_adapter_layers
       snake_case_	=				output_hidden_size or hidden_size

       # SequenceClassification-specific parameter. Feel free to ignore for other classes.
       snake_case_	=				classifier_proj_size

       # XVector-specific parameters. Feel free to ignore for other classes.
       snake_case_	=				list(_UpperCAmelCase )
       snake_case_	=				list(_UpperCAmelCase )
       snake_case_	=				list(_UpperCAmelCase )
       snake_case_	=				xvector_output_dim





 @property
 def 						UpperCamelCase__					(     self ):
       return functools.reduce(operator.mul		,				self.conv_stride		,				1 )