
from __future__ import annotations

import unittest

from transformers import RoFormerConfig, 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, random_attention_mask
from ...test_pipeline_mixin import PipelineTesterMixin


if is_tf_available():
  import tensorflow as tf

  from transformers import (
      TFRoFormerForCausalLM,
      TFRoFormerForMaskedLM,
      TFRoFormerForMultipleChoice,
      TFRoFormerForQuestionAnswering,
      TFRoFormerForSequenceClassification,
      TFRoFormerForTokenClassification,
      TFRoFormerModel,
  )
  from transformers.models.roformer.modeling_tf_roformer import (
      TFRoFormerSelfAttention,
      TFRoFormerSinusoidalPositionalEmbedding,
  )

class __snake_case		:
    def __init__(  self		,snake_case		,snake_case=13		,snake_case=7		,snake_case=True		,snake_case=True		,snake_case=True		,snake_case=True		,snake_case=99		,snake_case=32		,snake_case=2		,snake_case=4		,snake_case=37		,snake_case="gelu"		,snake_case=0.1		,snake_case=0.1		,snake_case=512		,snake_case=16		,snake_case=2		,snake_case=0.02		,snake_case=3		,snake_case=4		,snake_case=None		,):



           '''simple docstring'''







           lowercase							:					List[str]	     =				parent
           lowercase							:					Union[str, Any]	     =				13
           lowercase							:					str	     =				7
           lowercase							:					List[str]	     =				True
           lowercase							:					Any	     =				True
           lowercase							:					Tuple	     =				True
           lowercase							:					Tuple	     =				True
           lowercase							:					Tuple	     =				99
           lowercase							:					str	     =				32
           lowercase							:					Tuple	     =				2
           lowercase							:					Optional[int]	     =				4
           lowercase							:					Optional[int]	     =				37
           lowercase							:					List[Any]	     =				"""gelu"""
           lowercase							:					List[str]	     =				0.1
           lowercase							:					List[Any]	     =				0.1
           lowercase							:					List[str]	     =				512
           lowercase							:					List[Any]	     =				16
           lowercase							:					Dict	     =				2
           lowercase							:					Optional[int]	     =				0.02
           lowercase							:					List[str]	     =				3
           lowercase							:					Optional[int]	     =				4
           lowercase							:					Optional[Any]	     =				None
    def 				_SCREAMING_SNAKE_CASE	(  self				):



           '''simple docstring'''







           lowercase							:					int	     =				ids_tensor([self.batch_size, self.seq_length]		,self.vocab_size				)

           lowercase							:					str	     =				None
           if self.use_input_mask:
                  lowercase							:					List[str]	     =				random_attention_mask([self.batch_size, self.seq_length]				)

           lowercase							:					Any	     =				None
           if self.use_token_type_ids:
                  lowercase							:					List[str]	     =				ids_tensor([self.batch_size, self.seq_length]		,self.type_vocab_size				)

           lowercase							:					int	     =				None
           lowercase							:					List[Any]	     =				None
           lowercase							:					int	     =				None
           if self.use_labels:
                  lowercase							:					Any	     =				ids_tensor([self.batch_size]		,self.type_sequence_label_size				)
                  lowercase							:					Dict	     =				ids_tensor([self.batch_size, self.seq_length]		,self.num_labels				)
                  lowercase							:					int	     =				ids_tensor([self.batch_size]		,self.num_choices				)

           lowercase							:					int	     =				RoFormerConfig(
               vocab_size=self.vocab_size		,hidden_size=self.hidden_size		,num_hidden_layers=self.num_hidden_layers		,num_attention_heads=self.num_attention_heads		,intermediate_size=self.intermediate_size		,hidden_act=self.hidden_act		,hidden_dropout_prob=self.hidden_dropout_prob		,attention_probs_dropout_prob=self.attention_probs_dropout_prob		,max_position_embeddings=self.max_position_embeddings		,type_vocab_size=self.type_vocab_size		,initializer_range=self.initializer_range		,return_dict=snake_case		,)

           return config, input_ids, token_type_ids, input_mask, sequence_labels, token_labels, choice_labels
    def 				_SCREAMING_SNAKE_CASE	(  self		,snake_case		,snake_case		,snake_case		,snake_case		,snake_case		,snake_case		,snake_case				):



           '''simple docstring'''







           lowercase							:					Optional[Any]	     =				TFRoFormerModel(config=snake_case				)
           lowercase							:					Optional[int]	     =				{"""input_ids""": input_ids, """attention_mask""": input_mask, """token_type_ids""": token_type_ids}

           lowercase							:					int	     =				[input_ids, input_mask]
           lowercase							:					str	     =				model(snake_case				)

           lowercase							:					List[str]	     =				model(snake_case				)

           self.parent.assertEqual(result.last_hidden_state.shape		,(self.batch_size, self.seq_length, self.hidden_size)				)
    def 				_SCREAMING_SNAKE_CASE	(  self		,snake_case		,snake_case		,snake_case		,snake_case		,snake_case		,snake_case		,snake_case				):



           '''simple docstring'''







           lowercase							:					List[Any]	     =				True
           lowercase							:					Union[str, Any]	     =				TFRoFormerForCausalLM(config=snake_case				)
           lowercase							:					Union[str, Any]	     =				{
               """input_ids""": input_ids,
               """attention_mask""": input_mask,
               """token_type_ids""": token_type_ids,
           }
           lowercase							:					Tuple	     =				model(snake_case				)["""logits"""]
           self.parent.assertListEqual(
               list(prediction_scores.numpy().shape				)		,[self.batch_size, self.seq_length, self.vocab_size]				)
    def 				_SCREAMING_SNAKE_CASE	(  self		,snake_case		,snake_case		,snake_case		,snake_case		,snake_case		,snake_case		,snake_case				):



           '''simple docstring'''







           lowercase							:					List[str]	     =				TFRoFormerForMaskedLM(config=snake_case				)
           lowercase							:					Optional[Any]	     =				{
               """input_ids""": input_ids,
               """attention_mask""": input_mask,
               """token_type_ids""": token_type_ids,
           }
           lowercase							:					Dict	     =				model(snake_case				)
           self.parent.assertEqual(result.logits.shape		,(self.batch_size, self.seq_length, self.vocab_size)				)
    def 				_SCREAMING_SNAKE_CASE	(  self		,snake_case		,snake_case		,snake_case		,snake_case		,snake_case		,snake_case		,snake_case				):



           '''simple docstring'''







           lowercase							:					Dict	     =				self.num_labels
           lowercase							:					Union[str, Any]	     =				TFRoFormerForSequenceClassification(config=snake_case				)
           lowercase							:					Tuple	     =				{
               """input_ids""": input_ids,
               """attention_mask""": input_mask,
               """token_type_ids""": token_type_ids,
           }

           lowercase							:					int	     =				model(snake_case				)
           self.parent.assertEqual(result.logits.shape		,(self.batch_size, self.num_labels)				)
    def 				_SCREAMING_SNAKE_CASE	(  self		,snake_case		,snake_case		,snake_case		,snake_case		,snake_case		,snake_case		,snake_case				):



           '''simple docstring'''







           lowercase							:					List[Any]	     =				self.num_choices
           lowercase							:					Optional[Any]	     =				TFRoFormerForMultipleChoice(config=snake_case				)
           lowercase							:					Optional[Any]	     =				tf.tile(tf.expand_dims(snake_case		,1				)		,(1, self.num_choices, 1)				)
           lowercase							:					Optional[Any]	     =				tf.tile(tf.expand_dims(snake_case		,1				)		,(1, self.num_choices, 1)				)
           lowercase							:					List[str]	     =				tf.tile(tf.expand_dims(snake_case		,1				)		,(1, self.num_choices, 1)				)
           lowercase							:					Any	     =				{
               """input_ids""": multiple_choice_inputs_ids,
               """attention_mask""": multiple_choice_input_mask,
               """token_type_ids""": multiple_choice_token_type_ids,
           }
           lowercase							:					Tuple	     =				model(snake_case				)
           self.parent.assertEqual(result.logits.shape		,(self.batch_size, self.num_choices)				)
    def 				_SCREAMING_SNAKE_CASE	(  self		,snake_case		,snake_case		,snake_case		,snake_case		,snake_case		,snake_case		,snake_case				):



           '''simple docstring'''







           lowercase							:					List[str]	     =				self.num_labels
           lowercase							:					Optional[int]	     =				TFRoFormerForTokenClassification(config=snake_case				)
           lowercase							:					Tuple	     =				{
               """input_ids""": input_ids,
               """attention_mask""": input_mask,
               """token_type_ids""": token_type_ids,
           }
           lowercase							:					Optional[Any]	     =				model(snake_case				)
           self.parent.assertEqual(result.logits.shape		,(self.batch_size, self.seq_length, self.num_labels)				)
    def 				_SCREAMING_SNAKE_CASE	(  self		,snake_case		,snake_case		,snake_case		,snake_case		,snake_case		,snake_case		,snake_case				):



           '''simple docstring'''







           lowercase							:					Dict	     =				TFRoFormerForQuestionAnswering(config=snake_case				)
           lowercase							:					Optional[Any]	     =				{
               """input_ids""": input_ids,
               """attention_mask""": input_mask,
               """token_type_ids""": token_type_ids,
           }

           lowercase							:					List[Any]	     =				model(snake_case				)
           self.parent.assertEqual(result.start_logits.shape		,(self.batch_size, self.seq_length)				)
           self.parent.assertEqual(result.end_logits.shape		,(self.batch_size, self.seq_length)				)
    def 				_SCREAMING_SNAKE_CASE	(  self				):



           '''simple docstring'''







           lowercase							:					int	     =				self.prepare_config_and_inputs()
           (
               (
               lowercase
           )     ,      (
               lowercase
           )     ,      (
               lowercase
           )     ,      (
               lowercase
           )     ,      (
               lowercase
           )     ,      (
               lowercase
           )     ,      (
               lowercase
           )     ,      
           )							:					Optional[int]	     =				config_and_inputs
           lowercase							:					Tuple	     =				{"""input_ids""": input_ids, """token_type_ids""": token_type_ids, """attention_mask""": input_mask}
           return config, inputs_dict






@require_tf
class __snake_case		(				lowerCAmelCase ,     lowerCAmelCase ,     unittest.TestCase					):
    _a		:						Union[str, Any]=    (
        (
            TFRoFormerModel,
            TFRoFormerForCausalLM,
            TFRoFormerForMaskedLM,
            TFRoFormerForQuestionAnswering,
            TFRoFormerForSequenceClassification,
            TFRoFormerForTokenClassification,
            TFRoFormerForMultipleChoice,
        )
        if is_tf_available()
        else ()
    )
    _a		:						List[str]=    (
        {
            "feature-extraction": TFRoFormerModel,
            "fill-mask": TFRoFormerForMaskedLM,
            "question-answering": TFRoFormerForQuestionAnswering,
            "text-classification": TFRoFormerForSequenceClassification,
            "text-generation": TFRoFormerForCausalLM,
            "token-classification": TFRoFormerForTokenClassification,
            "zero-shot": TFRoFormerForSequenceClassification,
        }
        if is_tf_available()
        else {}
    )

    _a		:						Optional[int]=    False
    _a		:						Optional[int]=    False
    def 				_SCREAMING_SNAKE_CASE	(  self		,snake_case		,snake_case		,snake_case		,snake_case		,snake_case				):



           '''simple docstring'''







           if pipeline_test_casse_name == "TextGenerationPipelineTests":
                  return True

           return False
    def 				_SCREAMING_SNAKE_CASE	(  self				):



           '''simple docstring'''







           lowercase							:					List[str]	     =				TFRoFormerModelTester(self				)
           lowercase							:					List[str]	     =				ConfigTester(self		,config_class=snake_case		,hidden_size=37				)
    def 				_SCREAMING_SNAKE_CASE	(  self				):



           '''simple docstring'''







           self.config_tester.run_common_tests()
    def 				_SCREAMING_SNAKE_CASE	(  self				):



           '''simple docstring'''







           lowercase							:					str	     =				self.model_tester.prepare_config_and_inputs()
           self.model_tester.create_and_check_model(*snake_case				)
    def 				_SCREAMING_SNAKE_CASE	(  self				):



           '''simple docstring'''







           lowercase							:					int	     =				self.model_tester.prepare_config_and_inputs()
           self.model_tester.create_and_check_for_masked_lm(*snake_case				)
    def 				_SCREAMING_SNAKE_CASE	(  self				):



           '''simple docstring'''







           lowercase							:					List[Any]	     =				self.model_tester.prepare_config_and_inputs()
           self.model_tester.create_and_check_lm_head(*snake_case				)
    def 				_SCREAMING_SNAKE_CASE	(  self				):



           '''simple docstring'''







           lowercase							:					int	     =				self.model_tester.prepare_config_and_inputs()
           self.model_tester.create_and_check_for_multiple_choice(*snake_case				)
    def 				_SCREAMING_SNAKE_CASE	(  self				):



           '''simple docstring'''







           lowercase							:					Union[str, Any]	     =				self.model_tester.prepare_config_and_inputs()
           self.model_tester.create_and_check_for_question_answering(*snake_case				)
    def 				_SCREAMING_SNAKE_CASE	(  self				):



           '''simple docstring'''







           lowercase							:					Union[str, Any]	     =				self.model_tester.prepare_config_and_inputs()
           self.model_tester.create_and_check_for_sequence_classification(*snake_case				)
    def 				_SCREAMING_SNAKE_CASE	(  self				):



           '''simple docstring'''







           lowercase							:					Any	     =				self.model_tester.prepare_config_and_inputs()
           self.model_tester.create_and_check_for_token_classification(*snake_case				)
    @slow
    def 				_SCREAMING_SNAKE_CASE	(  self				):



           '''simple docstring'''







           lowercase							:					Any	     =				TFRoFormerModel.from_pretrained("""junnyu/roformer_chinese_base"""				)
           self.assertIsNotNone(snake_case				)






@require_tf
class __snake_case		(				unittest.TestCase					):
    @slow
    def 				_SCREAMING_SNAKE_CASE	(  self				):



           '''simple docstring'''







           lowercase							:					Union[str, Any]	     =				TFRoFormerForMaskedLM.from_pretrained("""junnyu/roformer_chinese_base"""				)
           lowercase							:					str	     =				tf.constant([[0, 1, 2, 3, 4, 5]]				)
           lowercase							:					Dict	     =				model(snake_case				)[0]

           # TODO Replace vocab size
           lowercase							:					Union[str, Any]	     =				50000

           lowercase							:					Tuple	     =				[1, 6, vocab_size]
           self.assertEqual(output.shape		,snake_case				)

           print(output[:, :3, :3]				)

           # TODO Replace values below with what was printed above.
           lowercase							:					Optional[int]	     =				tf.constant(
               [
                   [
                       [-0.12_053_341, -1.0_264_901, 0.29_221_946],
                       [-1.5_133_783, 0.197_433, 0.15_190_607],
                       [-5.0_135_403, -3.900_256, -0.84_038_764],
                   ]
               ]				)
           tf.debugging.assert_near(output[:, :3, :3]		,snake_case		,atol=1e-4				)






@require_tf
class __snake_case		(				unittest.TestCase					):
    _a		:						List[str]=    1E-4
    def 				_SCREAMING_SNAKE_CASE	(  self				):



           '''simple docstring'''







           lowercase							:					Dict	     =				tf.constant([[4, 10]]				)
           lowercase							:					Optional[Any]	     =				TFRoFormerSinusoidalPositionalEmbedding(num_positions=6		,embedding_dim=6				)

           lowercase							:					int	     =				emba(input_ids.shape				)
           lowercase							:					List[Any]	     =				tf.constant(
               [[0.0_000, 0.0_000, 0.0_000, 1.0_000, 1.0_000, 1.0_000], [0.8_415, 0.0_464, 0.0_022, 0.5_403, 0.9_989, 1.0_000]]				)

           tf.debugging.assert_near(snake_case		,snake_case		,atol=self.tolerance				)
    def 				_SCREAMING_SNAKE_CASE	(  self				):



           '''simple docstring'''







           lowercase							:					List[Any]	     =				tf.constant(
               [
                   [0.0_000, 0.0_000, 0.0_000, 0.0_000, 0.0_000],
                   [0.8_415, 0.8_219, 0.8_020, 0.7_819, 0.7_617],
                   [0.9_093, 0.9_364, 0.9_581, 0.9_749, 0.9_870],
               ]				)
           lowercase							:					Tuple	     =				TFRoFormerSinusoidalPositionalEmbedding(num_positions=512		,embedding_dim=512				)
           emba([2, 16, 512]				)
           lowercase							:					Optional[int]	     =				emba.weight[:3, :5]

           tf.debugging.assert_near(snake_case		,snake_case		,atol=self.tolerance				)






@require_tf
class __snake_case		(				unittest.TestCase					):
    _a		:						int=    1E-4
    def 				_SCREAMING_SNAKE_CASE	(  self				):



           '''simple docstring'''







           lowercase							:					Optional[int]	     =				tf.reshape(tf.range(2 * 12 * 16 * 64		,dtype=tf.floataa				)		,shape=(2, 12, 16, 64)				) / 100

           lowercase							:					Union[str, Any]	     =				-tf.reshape(tf.range(2 * 12 * 16 * 64		,dtype=tf.floataa				)		,shape=(2, 12, 16, 64)				) / 100

           lowercase							:					str	     =				TFRoFormerSinusoidalPositionalEmbedding(num_positions=32		,embedding_dim=64				)
           lowercase							:					Optional[Any]	     =				embed_positions([2, 16, 768]				)[None, None, :, :]

           lowercase     ,      lowercase							:					str	     =				TFRoFormerSelfAttention.apply_rotary_position_embeddings(
               snake_case		,snake_case		,snake_case				)

           lowercase							:					Any	     =				tf.constant(
               [
                   [0.0_000, 0.0_100, 0.0_200, 0.0_300, 0.0_400, 0.0_500, 0.0_600, 0.0_700],
                   [-0.2_012, 0.8_897, 0.0_263, 0.9_401, 0.2_074, 0.9_463, 0.3_481, 0.9_343],
                   [-1.7_057, 0.6_271, -1.2_145, 1.3_897, -0.6_303, 1.7_647, -0.1_173, 1.8_985],
                   [-2.1_731, -1.6_397, -2.7_358, 0.2_854, -2.1_840, 1.7_183, -1.3_018, 2.4_871],
                   [0.2_717, -3.6_173, -2.9_206, -2.1_988, -3.6_638, 0.3_858, -2.9_155, 2.2_980],
                   [3.9_859, -2.1_580, -0.7_984, -4.4_904, -4.1_181, -2.0_252, -4.4_782, 1.1_253],
               ]				)
           lowercase							:					Any	     =				tf.constant(
               [
                   [0.0_000, -0.0_100, -0.0_200, -0.0_300, -0.0_400, -0.0_500, -0.0_600, -0.0_700],
                   [0.2_012, -0.8_897, -0.0_263, -0.9_401, -0.2_074, -0.9_463, -0.3_481, -0.9_343],
                   [1.7_057, -0.6_271, 1.2_145, -1.3_897, 0.6_303, -1.7_647, 0.1_173, -1.8_985],
                   [2.1_731, 1.6_397, 2.7_358, -0.2_854, 2.1_840, -1.7_183, 1.3_018, -2.4_871],
                   [-0.2_717, 3.6_173, 2.9_206, 2.1_988, 3.6_638, -0.3_858, 2.9_155, -2.2_980],
                   [-3.9_859, 2.1_580, 0.7_984, 4.4_904, 4.1_181, 2.0_252, 4.4_782, -1.1_253],
               ]				)

           tf.debugging.assert_near(query_layer[0, 0, :6, :8]		,snake_case		,atol=self.tolerance				)
           tf.debugging.assert_near(key_layer[0, 0, :6, :8]		,snake_case		,atol=self.tolerance				)


from ...processing_utils import ProcessorMixin

class __snake_case		(				lowerCAmelCase					):
    _a		:						Union[str, Any]=    "WhisperFeatureExtractor"
    _a		:						int=    "WhisperTokenizer"
    def __init__(  self		,snake_case		,snake_case				):



           '''simple docstring'''







           super().__init__(snake_case		,snake_case				)
           lowercase							:					Optional[int]	     =				self.feature_extractor
           lowercase							:					Tuple	     =				False
    def 				_SCREAMING_SNAKE_CASE	(  self		,snake_case=None		,snake_case=None		,snake_case=True				):



           '''simple docstring'''







           return self.tokenizer.get_decoder_prompt_ids(task=snake_case		,language=snake_case		,no_timestamps=snake_case				)
    def __call__(  self		,*snake_case		,**snake_case				):



           '''simple docstring'''







           if self._in_target_context_manager:
                  return self.current_processor(*snake_case		,**snake_case				)

           lowercase							:					Optional[Any]	     =				kwargs.pop("""audio"""		,snake_case				)
           lowercase							:					str	     =				kwargs.pop("""sampling_rate"""		,snake_case				)
           lowercase							:					Dict	     =				kwargs.pop("""text"""		,snake_case				)
           if len(snake_case				) > 0:
                  lowercase							:					List[Any]	     =				args[0]
                  lowercase							:					Tuple	     =				args[1:]

           if audio is None and text is None:
                  raise ValueError("""You need to specify either an `audio` or `text` input to process."""				)

           if audio is not None:
                  lowercase							:					Any	     =				self.feature_extractor(snake_case		,*snake_case		,sampling_rate=snake_case		,**snake_case				)
           if text is not None:
                  lowercase							:					str	     =				self.tokenizer(snake_case		,**snake_case				)

           if text is None:
                  return inputs

           elif audio is None:
                  return encodings
           else:
                  lowercase							:					List[Any]	     =				encodings["""input_ids"""]
                  return inputs
    def 				_SCREAMING_SNAKE_CASE	(  self		,*snake_case		,**snake_case				):



           '''simple docstring'''







           return self.tokenizer.batch_decode(*snake_case		,**snake_case				)
    def 				_SCREAMING_SNAKE_CASE	(  self		,*snake_case		,**snake_case				):



           '''simple docstring'''







           return self.tokenizer.decode(*snake_case		,**snake_case				)
    def 				_SCREAMING_SNAKE_CASE	(  self		,snake_case		,snake_case="np"				):



           '''simple docstring'''







           return self.tokenizer.get_prompt_ids(snake_case		,return_tensors=snake_case				)
