




from __future__ import annotations

import random
import unittest

from transformers import TransfoXLConfig, is_tf_available
from transformers.testing_utils import require_tf, slow

from ...test_configuration_common import ConfigTester
from ...test_modeling_tf_common import TFModelTesterMixin, ids_tensor
from ...test_pipeline_mixin import PipelineTesterMixin


if is_tf_available():
   import tensorflow as tf

   from transformers import (
       TF_TRANSFO_XL_PRETRAINED_MODEL_ARCHIVE_LIST,
       TFTransfoXLForSequenceClassification,
       TFTransfoXLLMHeadModel,
       TFTransfoXLModel,
   )





class        lowerCamelCase_							:


 '''simple docstring'''







 def __init__(							self  :		List[Any]				,				_lowerCAmelCase  :		Any				,				):
       SCREAMING_SNAKE_CASE_							=			parent
       SCREAMING_SNAKE_CASE_							=			13
       SCREAMING_SNAKE_CASE_							=			7
       SCREAMING_SNAKE_CASE_							=			30
       SCREAMING_SNAKE_CASE_							=			self.seq_length + self.mem_len
       SCREAMING_SNAKE_CASE_							=			15
       SCREAMING_SNAKE_CASE_							=			True
       SCREAMING_SNAKE_CASE_							=			True
       SCREAMING_SNAKE_CASE_							=			99
       SCREAMING_SNAKE_CASE_							=			[10, 50, 80]
       SCREAMING_SNAKE_CASE_							=			32
       SCREAMING_SNAKE_CASE_							=			32
       SCREAMING_SNAKE_CASE_							=			4
       SCREAMING_SNAKE_CASE_							=			8
       SCREAMING_SNAKE_CASE_							=			128
       SCREAMING_SNAKE_CASE_							=			2
       SCREAMING_SNAKE_CASE_							=			2
       SCREAMING_SNAKE_CASE_							=			None
       SCREAMING_SNAKE_CASE_							=			1
       SCREAMING_SNAKE_CASE_							=			0
       SCREAMING_SNAKE_CASE_							=			3
       SCREAMING_SNAKE_CASE_							=			self.vocab_size - 1
       SCREAMING_SNAKE_CASE_							=			0.01



 def       lowerCAmelCase_  (							self  :		int						):
       SCREAMING_SNAKE_CASE_							=			ids_tensor([self.batch_size, self.seq_length]				,				self.vocab_size						)
       SCREAMING_SNAKE_CASE_							=			ids_tensor([self.batch_size, self.seq_length]				,				self.vocab_size						)

       SCREAMING_SNAKE_CASE_							=			None
       if self.use_labels:
             SCREAMING_SNAKE_CASE_							=			ids_tensor([self.batch_size, self.seq_length]				,				self.vocab_size						)

       SCREAMING_SNAKE_CASE_							=			TransfoXLConfig(
           vocab_size=self.vocab_size				,				mem_len=self.mem_len				,				clamp_len=self.clamp_len				,				cutoffs=self.cutoffs				,				d_model=self.hidden_size				,				d_embed=self.d_embed				,				n_head=self.num_attention_heads				,				d_head=self.d_head				,				d_inner=self.d_inner				,				div_val=self.div_val				,				n_layer=self.num_hidden_layers				,				eos_token_id=self.eos_token_id				,				pad_token_id=self.vocab_size - 1				,				init_range=self.init_range				,				num_labels=self.num_labels				,				)

       return (config, input_ids_a, input_ids_a, lm_labels)



 def       lowerCAmelCase_  (							self  :		Tuple						):
       random.seed(self.seed						)
       tf.random.set_seed(self.seed						)



 def       lowerCAmelCase_  (							self  :		Optional[Any]				,				_lowerCAmelCase  :		List[Any]				,				_lowerCAmelCase  :		int				,				_lowerCAmelCase  :		int				,				_lowerCAmelCase  :		Tuple						):
       SCREAMING_SNAKE_CASE_							=			TFTransfoXLModel(_lowerCAmelCase						)

       SCREAMING_SNAKE_CASE_						, SCREAMING_SNAKE_CASE_							=			model(_lowerCAmelCase						).to_tuple()

       SCREAMING_SNAKE_CASE_							=			{'input_ids': input_ids_a, 'mems': mems_a}

       SCREAMING_SNAKE_CASE_						, SCREAMING_SNAKE_CASE_							=			model(_lowerCAmelCase						).to_tuple()

       self.parent.assertEqual(hidden_states_a.shape				,				(self.batch_size, self.seq_length, self.hidden_size)						)
       self.parent.assertEqual(hidden_states_a.shape				,				(self.batch_size, self.seq_length, self.hidden_size)						)
       self.parent.assertListEqual(
           [mem.shape for mem in mems_a]				,				[(self.mem_len, self.batch_size, self.hidden_size)] * self.num_hidden_layers				,				)
       self.parent.assertListEqual(
           [mem.shape for mem in mems_a]				,				[(self.mem_len, self.batch_size, self.hidden_size)] * self.num_hidden_layers				,				)



 def       lowerCAmelCase_  (							self  :		Union[str, Any]				,				_lowerCAmelCase  :		List[Any]				,				_lowerCAmelCase  :		int				,				_lowerCAmelCase  :		str				,				_lowerCAmelCase  :		Dict						):
       SCREAMING_SNAKE_CASE_							=			TFTransfoXLLMHeadModel(_lowerCAmelCase						)

       SCREAMING_SNAKE_CASE_						, SCREAMING_SNAKE_CASE_							=			model(_lowerCAmelCase						).to_tuple()

       SCREAMING_SNAKE_CASE_							=			{'input_ids': input_ids_a, 'labels': lm_labels}
       SCREAMING_SNAKE_CASE_						, SCREAMING_SNAKE_CASE_							=			model(_lowerCAmelCase						).to_tuple()

       SCREAMING_SNAKE_CASE_						, SCREAMING_SNAKE_CASE_							=			model([input_ids_a, mems_a]						).to_tuple()

       SCREAMING_SNAKE_CASE_							=			{'input_ids': input_ids_a, 'mems': mems_a, 'labels': lm_labels}

       SCREAMING_SNAKE_CASE_						, SCREAMING_SNAKE_CASE_							=			model(_lowerCAmelCase						).to_tuple()

       self.parent.assertEqual(lm_logits_a.shape				,				(self.batch_size, self.seq_length, self.vocab_size)						)
       self.parent.assertListEqual(
           [mem.shape for mem in mems_a]				,				[(self.mem_len, self.batch_size, self.hidden_size)] * self.num_hidden_layers				,				)

       self.parent.assertEqual(lm_logits_a.shape				,				(self.batch_size, self.seq_length, self.vocab_size)						)
       self.parent.assertListEqual(
           [mem.shape for mem in mems_a]				,				[(self.mem_len, self.batch_size, self.hidden_size)] * self.num_hidden_layers				,				)



 def       lowerCAmelCase_  (							self  :		int				,				_lowerCAmelCase  :		List[str]				,				_lowerCAmelCase  :		Dict				,				_lowerCAmelCase  :		Tuple				,				_lowerCAmelCase  :		List[Any]						):
       SCREAMING_SNAKE_CASE_							=			TFTransfoXLForSequenceClassification(_lowerCAmelCase						)
       SCREAMING_SNAKE_CASE_							=			model(_lowerCAmelCase						)
       self.parent.assertEqual(result.logits.shape				,				(self.batch_size, self.num_labels)						)




 def       lowerCAmelCase_  (							self  :		List[str]						):
       SCREAMING_SNAKE_CASE_							=			self.prepare_config_and_inputs()
       ((SCREAMING_SNAKE_CASE_)						, (SCREAMING_SNAKE_CASE_)						, (SCREAMING_SNAKE_CASE_)						, (SCREAMING_SNAKE_CASE_))							=			config_and_inputs
       SCREAMING_SNAKE_CASE_							=			{'input_ids': input_ids_a}
       return config, inputs_dict





@require_tf
class        lowerCamelCase_							(      _SCREAMING_SNAKE_CASE       ,   _SCREAMING_SNAKE_CASE       ,   unittest.TestCase					):


 '''simple docstring'''







 lowercase_				    =    (
     (TFTransfoXLModel, TFTransfoXLLMHeadModel, TFTransfoXLForSequenceClassification) if is_tf_available() else ()
 )
 lowercase_				    =    () if is_tf_available() else ()
 lowercase_				    =    (
     {
         "feature-extraction": TFTransfoXLModel,
         "text-classification": TFTransfoXLForSequenceClassification,
         "text-generation": TFTransfoXLLMHeadModel,
         "zero-shot": TFTransfoXLForSequenceClassification,
     }
     if is_tf_available()
     else {}
 )
 # TODO: add this test when TFTransfoXLLMHead has a linear output layer implemented
 lowercase_				    =    False
 lowercase_				    =    False
 lowercase_				    =    False
 lowercase_				    =    False



 def       lowerCAmelCase_  (							self  :		List[Any]				,				_lowerCAmelCase  :		Optional[Any]				,				_lowerCAmelCase  :		Tuple				,				_lowerCAmelCase  :		List[str]				,				_lowerCAmelCase  :		int				,				_lowerCAmelCase  :		Any						):
       if pipeline_test_casse_name == "TextGenerationPipelineTests":
             # Get `ValueError: AttributeError: 'NoneType' object has no attribute 'new_ones'` or `AssertionError`.
             # `TransfoXLConfig` was never used in pipeline tests: cannot create a simple
             # tokenizer.
             return True

       return False



 def       lowerCAmelCase_  (							self  :		int						):
       SCREAMING_SNAKE_CASE_							=			TFTransfoXLModelTester(self						)
       SCREAMING_SNAKE_CASE_							=			ConfigTester(self				,				config_class=_lowerCAmelCase				,				d_embed=37						)



 def       lowerCAmelCase_  (							self  :		int						):
       self.config_tester.run_common_tests()



 def       lowerCAmelCase_  (							self  :		List[Any]						):
       self.model_tester.set_seed()
       SCREAMING_SNAKE_CASE_							=			self.model_tester.prepare_config_and_inputs()
       self.model_tester.create_and_check_transfo_xl_model(*_lowerCAmelCase						)



 def       lowerCAmelCase_  (							self  :		Any						):
       self.model_tester.set_seed()
       SCREAMING_SNAKE_CASE_							=			self.model_tester.prepare_config_and_inputs()
       self.model_tester.create_and_check_transfo_xl_lm_head(*_lowerCAmelCase						)



 def       lowerCAmelCase_  (							self  :		Optional[Any]						):
       SCREAMING_SNAKE_CASE_							=			self.model_tester.prepare_config_and_inputs()
       self.model_tester.create_and_check_transfo_xl_for_sequence_classification(*_lowerCAmelCase						)



 def       lowerCAmelCase_  (							self  :		int						):
       SCREAMING_SNAKE_CASE_						, SCREAMING_SNAKE_CASE_							=			self.model_tester.prepare_config_and_inputs_for_common()
       SCREAMING_SNAKE_CASE_							=			[TFTransfoXLForSequenceClassification]

       for model_class in self.all_model_classes:
             SCREAMING_SNAKE_CASE_							=			model_class(_lowerCAmelCase						)
             assert isinstance(model.get_input_embeddings()				,				tf.keras.layers.Layer						)
             if model_class in list_other_models_with_output_ebd:
                   SCREAMING_SNAKE_CASE_							=			model.get_output_embeddings()
                   assert isinstance(_lowerCAmelCase				,				tf.keras.layers.Layer						)
                   SCREAMING_SNAKE_CASE_							=			model.get_bias()
                   assert name is None
             else:
                   SCREAMING_SNAKE_CASE_							=			model.get_output_embeddings()
                   assert x is None
                   SCREAMING_SNAKE_CASE_							=			model.get_bias()
                   assert name is None



 def       lowerCAmelCase_  (							self  :		Optional[int]						):
       # TODO JP: Make TransfoXL XLA compliant
       pass



 @slow
 def       lowerCAmelCase_  (							self  :		Dict						):
       for model_name in TF_TRANSFO_XL_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
             SCREAMING_SNAKE_CASE_							=			TFTransfoXLModel.from_pretrained(_lowerCAmelCase						)
             self.assertIsNotNone(_lowerCAmelCase						)




 @unittest.skip(reason='This model doesn\'t play well with fit() due to not returning a single loss.'						)
 def       lowerCAmelCase_  (							self  :		Dict						):
       pass





@require_tf
class        lowerCamelCase_							(      unittest.TestCase					):


 '''simple docstring'''







 @unittest.skip('Skip test until #12651 is resolved.'						)
 @slow
 def       lowerCAmelCase_  (							self  :		Dict						):
       SCREAMING_SNAKE_CASE_							=			TFTransfoXLLMHeadModel.from_pretrained('transfo-xl-wt103'						)
       # fmt: off
       SCREAMING_SNAKE_CASE_							=			tf.convert_to_tensor([[33,1_297,2,1,1_009,4,1_109,11_739,4_762,358,5,25,245,22,1_706,17,20_098,5,3_215,21,37,1_110,3,13,1_041,4,24,603,490,2,71_477,20_098,104_447,2,20_961,1,2_604,4,1,329,3,6_224,831,16_002,2,8,603,78_967,29_546,23,803,20,25,416,5,8,232,4,277,6,1_855,4_601,3,29_546,54,8,3_609,5,57_211,49,4,1,277,18,8,1_755,15_691,3,341,25,416,693,42_573,71,17,401,94,31,17_919,2,29_546,7_873,18,1,435,23,11_011,755,5,5_167,3,7_983,98,84,2,29_546,3_267,8,3_609,4,1,4_865,1_075,2,6_087,71,6,346,8,5_854,3,29_546,824,1_400,1_868,2,19,160,2,311,8,5_496,2,20_920,17,25,15_097,3,24,24,0]]				,				dtype=tf.intaa						)  # noqa: E231
       # fmt: on
       #  In 1991 , the remains of Russian Tsar Nicholas II and his family
       #  ( except for Alexei and Maria ) are discovered .
       #  The voice of Nicholas's young son , Tsarevich Alexei Nikolaevich , narrates the
       #  remainder of the story . 1883 Western Siberia ,
       #  a young Grigori Rasputin is asked by his father and a group of men to perform magic .
       #  Rasputin has a vision and denounces one of the men as a horse thief . Although his
       #  father initially slaps him for making such an accusation , Rasputin watches as the
       #  man is chased outside and beaten . Twenty years later , Rasputin sees a vision of
       #  the Virgin Mary , prompting him to become a priest . Rasputin quickly becomes famous ,
       #  with people , even a bishop , begging for his blessing . <eod> </s> <eos>

       # fmt: off
       SCREAMING_SNAKE_CASE_							=			[33,1_297,2,1,1_009,4,1_109,11_739,4_762,358,5,25,245,22,1_706,17,20_098,5,3_215,21,37,1_110,3,13,1_041,4,24,603,490,2,71_477,20_098,104_447,2,20_961,1,2_604,4,1,329,3,6_224,831,16_002,2,8,603,78_967,29_546,23,803,20,25,416,5,8,232,4,277,6,1_855,4_601,3,29_546,54,8,3_609,5,57_211,49,4,1,277,18,8,1_755,15_691,3,341,25,416,693,42_573,71,17,401,94,31,17_919,2,29_546,7_873,18,1,435,23,11_011,755,5,5_167,3,7_983,98,84,2,29_546,3_267,8,3_609,4,1,4_865,1_075,2,6_087,71,6,346,8,5_854,3,29_546,824,1_400,1_868,2,19,160,2,311,8,5_496,2,20_920,17,25,15_097,3,24,24,0,33,1,1_857,2,1,1_009,4,1_109,11_739,4_762,358,5,25,245,28,1_110,3,13,1_041,4,24,603,490,2,71_477,20_098,104_447,2,20_961,1,2_604,4,1,329,3,0]  # noqa: E231
       # fmt: on
       #  In 1991, the remains of Russian Tsar Nicholas II and his family (
       #  except for Alexei and Maria ) are discovered. The voice of young son,
       #  Tsarevich Alexei Nikolaevich, narrates the remainder of the story.
       #  1883 Western Siberia, a young Grigori Rasputin is asked by his father
       #  and a group of men to perform magic. Rasputin has a vision and
       #  denounces one of the men as a horse thief. Although his father initially
       #  slaps him for making such an accusation, Rasputin watches as the man
       #  is chased outside and beaten. Twenty years later, Rasputin sees a vision
       #  of the Virgin Mary, prompting him to become a priest.
       #  Rasputin quickly becomes famous, with people, even a bishop, begging for
       #  his blessing. <unk> <unk> <eos> In the 1990s, the remains of Russian Tsar
       # Nicholas II and his family were discovered. The voice of <unk> young son,
       # Tsarevich Alexei Nikolaevich, narrates the remainder of the story.<eos>

       SCREAMING_SNAKE_CASE_							=			model.generate(_lowerCAmelCase				,				max_length=200				,				do_sample=_lowerCAmelCase						)
       self.assertListEqual(output_ids[0].numpy().tolist()				,				_lowerCAmelCase						)





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


lowerCamelCase__ :   List[str]					=							logging.get_logger(__name__)

lowerCamelCase__ :   List[str]					=							{
    'facebook/s2t-small-librispeech-asr': (
        'https://huggingface.co/facebook/s2t-small-librispeech-asr/resolve/main/config.json'
    ),
    # See all Speech2Text models at https://huggingface.co/models?filter=speech_to_text
}





class        lowerCamelCase_							(      _SCREAMING_SNAKE_CASE					):


 '''simple docstring'''







 lowercase_				    =    "speech_to_text"
 lowercase_				    =    ["past_key_values"]
 lowercase_				    =    {"num_attention_heads": "encoder_attention_heads", "hidden_size": "d_model"}



 def __init__(							self  :		Tuple				,				_lowerCAmelCase  :		List[Any]=10_000				,				_lowerCAmelCase  :		List[Any]=12				,				_lowerCAmelCase  :		Union[str, Any]=2_048				,				_lowerCAmelCase  :		Optional[int]=4				,				_lowerCAmelCase  :		Union[str, Any]=6				,				_lowerCAmelCase  :		Optional[int]=2_048				,				_lowerCAmelCase  :		Optional[Any]=4				,				_lowerCAmelCase  :		Any=0.0				,				_lowerCAmelCase  :		Optional[Any]=0.0				,				_lowerCAmelCase  :		List[str]=True				,				_lowerCAmelCase  :		List[Any]=True				,				_lowerCAmelCase  :		int="relu"				,				_lowerCAmelCase  :		Union[str, Any]=256				,				_lowerCAmelCase  :		List[str]=0.1				,				_lowerCAmelCase  :		str=0.0				,				_lowerCAmelCase  :		Tuple=0.0				,				_lowerCAmelCase  :		List[str]=0.02				,				_lowerCAmelCase  :		List[str]=2				,				_lowerCAmelCase  :		Tuple=True				,				_lowerCAmelCase  :		List[str]=1				,				_lowerCAmelCase  :		str=0				,				_lowerCAmelCase  :		str=2				,				_lowerCAmelCase  :		Union[str, Any]=6_000				,				_lowerCAmelCase  :		List[str]=1_024				,				_lowerCAmelCase  :		str=2				,				_lowerCAmelCase  :		Optional[Any]=(5, 5)				,				_lowerCAmelCase  :		str=1_024				,				_lowerCAmelCase  :		str=80				,				_lowerCAmelCase  :		Tuple=1				,				**_lowerCAmelCase  :		Any				,				):
       SCREAMING_SNAKE_CASE_							=			vocab_size
       SCREAMING_SNAKE_CASE_							=			d_model
       SCREAMING_SNAKE_CASE_							=			encoder_ffn_dim
       SCREAMING_SNAKE_CASE_							=			encoder_layers
       SCREAMING_SNAKE_CASE_							=			encoder_attention_heads
       SCREAMING_SNAKE_CASE_							=			decoder_ffn_dim
       SCREAMING_SNAKE_CASE_							=			decoder_layers
       SCREAMING_SNAKE_CASE_							=			decoder_attention_heads
       SCREAMING_SNAKE_CASE_							=			dropout
       SCREAMING_SNAKE_CASE_							=			attention_dropout
       SCREAMING_SNAKE_CASE_							=			activation_dropout
       SCREAMING_SNAKE_CASE_							=			activation_function
       SCREAMING_SNAKE_CASE_							=			init_std
       SCREAMING_SNAKE_CASE_							=			encoder_layerdrop
       SCREAMING_SNAKE_CASE_							=			decoder_layerdrop
       SCREAMING_SNAKE_CASE_							=			use_cache
       SCREAMING_SNAKE_CASE_							=			encoder_layers
       SCREAMING_SNAKE_CASE_							=			scale_embedding  # scale factor will be sqrt(d_model) if True
       SCREAMING_SNAKE_CASE_							=			max_source_positions
       SCREAMING_SNAKE_CASE_							=			max_target_positions
       SCREAMING_SNAKE_CASE_							=			num_conv_layers
       SCREAMING_SNAKE_CASE_							=			list(_lowerCAmelCase						)
       SCREAMING_SNAKE_CASE_							=			conv_channels
       SCREAMING_SNAKE_CASE_							=			input_feat_per_channel
       SCREAMING_SNAKE_CASE_							=			input_channels

       if len(self.conv_kernel_sizes						) != self.num_conv_layers:
             raise ValueError(
                 'Configuration for convolutional module is incorrect. '
                 'It is required that `len(config.conv_kernel_sizes)` == `config.num_conv_layers` '
                 F"but is `len(config.conv_kernel_sizes) = {len(self.conv_kernel_sizes						)}`, "
                 F"`config.num_conv_layers = {self.num_conv_layers}`."						)

       super().__init__(
           pad_token_id=_lowerCAmelCase				,				bos_token_id=_lowerCAmelCase				,				eos_token_id=_lowerCAmelCase				,				is_encoder_decoder=_lowerCAmelCase				,				decoder_start_token_id=_lowerCAmelCase				,				**_lowerCAmelCase				,				)