





from __future__ import annotations

import unittest

from transformers import MobileBertConfig, is_tf_available
from transformers.models.auto import get_values
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 (
       TF_MODEL_FOR_PRETRAINING_MAPPING,
       TFMobileBertForMaskedLM,
       TFMobileBertForMultipleChoice,
       TFMobileBertForNextSentencePrediction,
       TFMobileBertForPreTraining,
       TFMobileBertForQuestionAnswering,
       TFMobileBertForSequenceClassification,
       TFMobileBertForTokenClassification,
       TFMobileBertModel,
   )






@require_tf
class       __A					(					lowerCAmelCase    ,       lowerCAmelCase    ,       unittest.TestCase				):

   '''simple docstring'''







   lowerCAmelCase_							  =		(
       (
           TFMobileBertModel,
           TFMobileBertForMaskedLM,
           TFMobileBertForNextSentencePrediction,
           TFMobileBertForPreTraining,
           TFMobileBertForQuestionAnswering,
           TFMobileBertForSequenceClassification,
           TFMobileBertForTokenClassification,
           TFMobileBertForMultipleChoice,
       )
       if is_tf_available()
       else ()
   )
   lowerCAmelCase_							  =		(
       {
           """feature-extraction""": TFMobileBertModel,
           """fill-mask""": TFMobileBertForMaskedLM,
           """question-answering""": TFMobileBertForQuestionAnswering,
           """text-classification""": TFMobileBertForSequenceClassification,
           """token-classification""": TFMobileBertForTokenClassification,
           """zero-shot""": TFMobileBertForSequenceClassification,
       }
       if is_tf_available()
       else {}
   )
   lowerCAmelCase_							  =		False
   lowerCAmelCase_							  =		False





   def 	__lowerCamelCase       (					self ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase=False							):



    '''simple docstring'''







    lowerCamelCase__              =	super()._prepare_for_class(__lowerCAmelCase ,						__lowerCAmelCase ,						return_labels=__lowerCAmelCase							)

    if return_labels:
     if model_class in get_values(__lowerCAmelCase							):
      lowerCamelCase__              =	tf.zeros(self.model_tester.batch_size ,						dtype=tf.intaa							)

    return inputs_dict






   class       __A					(					lowerCAmelCase				):

      '''simple docstring'''







      def __init__(					self ,						__lowerCAmelCase ,						__lowerCAmelCase=1_3 ,						__lowerCAmelCase=7 ,						__lowerCAmelCase=True ,						__lowerCAmelCase=True ,						__lowerCAmelCase=True ,						__lowerCAmelCase=True ,						__lowerCAmelCase=9_9 ,						__lowerCAmelCase=3_2 ,						__lowerCAmelCase=3_2 ,						__lowerCAmelCase=2 ,						__lowerCAmelCase=4 ,						__lowerCAmelCase=3_7 ,						__lowerCAmelCase="gelu" ,						__lowerCAmelCase=0.1 ,						__lowerCAmelCase=0.1 ,						__lowerCAmelCase=5_1_2 ,						__lowerCAmelCase=1_6 ,						__lowerCAmelCase=2 ,						__lowerCAmelCase=0.02 ,						__lowerCAmelCase=3 ,						__lowerCAmelCase=4 ,						__lowerCAmelCase=None ,						):



       '''simple docstring'''







       lowerCamelCase__              =	parent
       lowerCamelCase__              =	batch_size
       lowerCamelCase__              =	seq_length
       lowerCamelCase__              =	is_training
       lowerCamelCase__              =	use_input_mask
       lowerCamelCase__              =	use_token_type_ids
       lowerCamelCase__              =	use_labels
       lowerCamelCase__              =	vocab_size
       lowerCamelCase__              =	hidden_size
       lowerCamelCase__              =	num_hidden_layers
       lowerCamelCase__              =	num_attention_heads
       lowerCamelCase__              =	intermediate_size
       lowerCamelCase__              =	hidden_act
       lowerCamelCase__              =	hidden_dropout_prob
       lowerCamelCase__              =	attention_probs_dropout_prob
       lowerCamelCase__              =	max_position_embeddings
       lowerCamelCase__              =	type_vocab_size
       lowerCamelCase__              =	type_sequence_label_size
       lowerCamelCase__              =	initializer_range
       lowerCamelCase__              =	num_labels
       lowerCamelCase__              =	num_choices
       lowerCamelCase__              =	scope
       lowerCamelCase__              =	embedding_size





      def 	__lowerCamelCase       (					self							):



       '''simple docstring'''







       lowerCamelCase__              =	ids_tensor([self.batch_size, self.seq_length] ,						self.vocab_size							)

       lowerCamelCase__              =	None
       if self.use_input_mask:
        lowerCamelCase__              =	random_attention_mask([self.batch_size, self.seq_length]							)

       lowerCamelCase__              =	None
       if self.use_token_type_ids:
        lowerCamelCase__              =	ids_tensor([self.batch_size, self.seq_length] ,						self.type_vocab_size							)

       lowerCamelCase__              =	None
       lowerCamelCase__              =	None
       lowerCamelCase__              =	None
       if self.use_labels:
        lowerCamelCase__              =	ids_tensor([self.batch_size] ,						self.type_sequence_label_size							)
        lowerCamelCase__              =	ids_tensor([self.batch_size, self.seq_length] ,						self.num_labels							)
        lowerCamelCase__              =	ids_tensor([self.batch_size] ,						self.num_choices							)

       lowerCamelCase__              =	MobileBertConfig(
           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 ,						embedding_size=self.embedding_size ,						)

       return config, input_ids, token_type_ids, input_mask, sequence_labels, token_labels, choice_labels





      def 	__lowerCamelCase       (					self ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase							):



       '''simple docstring'''







       lowerCamelCase__              =	TFMobileBertModel(config=__lowerCAmelCase							)
       lowerCamelCase__              =	{'''input_ids''': input_ids, '''attention_mask''': input_mask, '''token_type_ids''': token_type_ids}
       lowerCamelCase__              =	model(__lowerCAmelCase							)

       lowerCamelCase__              =	[input_ids, input_mask]
       lowerCamelCase__              =	model(__lowerCAmelCase							)

       lowerCamelCase__              =	model(__lowerCAmelCase							)

       self.parent.assertEqual(
           result.last_hidden_state.shape ,						(self.batch_size, self.seq_length, self.hidden_size)							)
       self.parent.assertEqual(result.pooler_output.shape ,						(self.batch_size, self.hidden_size)							)





      def 	__lowerCamelCase       (					self ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase							):



       '''simple docstring'''







       lowerCamelCase__              =	TFMobileBertForMaskedLM(config=__lowerCAmelCase							)
       lowerCamelCase__              =	{'''input_ids''': input_ids, '''attention_mask''': input_mask, '''token_type_ids''': token_type_ids}
       lowerCamelCase__              =	model(__lowerCAmelCase							)
       self.parent.assertEqual(result.logits.shape ,						(self.batch_size, self.seq_length, self.vocab_size)							)





      def 	__lowerCamelCase       (					self ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase							):



       '''simple docstring'''







       lowerCamelCase__              =	TFMobileBertForNextSentencePrediction(config=__lowerCAmelCase							)
       lowerCamelCase__              =	{'''input_ids''': input_ids, '''attention_mask''': input_mask, '''token_type_ids''': token_type_ids}
       lowerCamelCase__              =	model(__lowerCAmelCase							)
       self.parent.assertEqual(result.logits.shape ,						(self.batch_size, 2)							)





      def 	__lowerCamelCase       (					self ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase							):



       '''simple docstring'''







       lowerCamelCase__              =	TFMobileBertForPreTraining(config=__lowerCAmelCase							)
       lowerCamelCase__              =	{'''input_ids''': input_ids, '''attention_mask''': input_mask, '''token_type_ids''': token_type_ids}
       lowerCamelCase__              =	model(__lowerCAmelCase							)
       self.parent.assertEqual(
           result.prediction_logits.shape ,						(self.batch_size, self.seq_length, self.vocab_size)							)
       self.parent.assertEqual(result.seq_relationship_logits.shape ,						(self.batch_size, 2)							)





      def 	__lowerCamelCase       (					self ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase							):



       '''simple docstring'''







       lowerCamelCase__              =	self.num_labels
       lowerCamelCase__              =	TFMobileBertForSequenceClassification(config=__lowerCAmelCase							)
       lowerCamelCase__              =	{'''input_ids''': input_ids, '''attention_mask''': input_mask, '''token_type_ids''': token_type_ids}
       lowerCamelCase__              =	model(__lowerCAmelCase							)
       self.parent.assertEqual(result.logits.shape ,						(self.batch_size, self.num_labels)							)





      def 	__lowerCamelCase       (					self ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase							):



       '''simple docstring'''







       lowerCamelCase__              =	self.num_choices
       lowerCamelCase__              =	TFMobileBertForMultipleChoice(config=__lowerCAmelCase							)
       lowerCamelCase__              =	tf.tile(tf.expand_dims(__lowerCAmelCase ,						1							) ,						(1, self.num_choices, 1)							)
       lowerCamelCase__              =	tf.tile(tf.expand_dims(__lowerCAmelCase ,						1							) ,						(1, self.num_choices, 1)							)
       lowerCamelCase__              =	tf.tile(tf.expand_dims(__lowerCAmelCase ,						1							) ,						(1, self.num_choices, 1)							)
       lowerCamelCase__              =	{
           '''input_ids''': multiple_choice_inputs_ids,
           '''attention_mask''': multiple_choice_input_mask,
           '''token_type_ids''': multiple_choice_token_type_ids,
       }
       lowerCamelCase__              =	model(__lowerCAmelCase							)
       self.parent.assertEqual(result.logits.shape ,						(self.batch_size, self.num_choices)							)





      def 	__lowerCamelCase       (					self ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase							):



       '''simple docstring'''







       lowerCamelCase__              =	self.num_labels
       lowerCamelCase__              =	TFMobileBertForTokenClassification(config=__lowerCAmelCase							)
       lowerCamelCase__              =	{'''input_ids''': input_ids, '''attention_mask''': input_mask, '''token_type_ids''': token_type_ids}
       lowerCamelCase__              =	model(__lowerCAmelCase							)
       self.parent.assertEqual(result.logits.shape ,						(self.batch_size, self.seq_length, self.num_labels)							)





      def 	__lowerCamelCase       (					self ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase ,						__lowerCAmelCase							):



       '''simple docstring'''







       lowerCamelCase__              =	TFMobileBertForQuestionAnswering(config=__lowerCAmelCase							)
       lowerCamelCase__              =	{'''input_ids''': input_ids, '''attention_mask''': input_mask, '''token_type_ids''': token_type_ids}
       lowerCamelCase__              =	model(__lowerCAmelCase							)
       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 	__lowerCamelCase       (					self							):



       '''simple docstring'''







       lowerCamelCase__              =	self.prepare_config_and_inputs()
       (
           (
           lowerCamelCase__			
       )       ,			(
           lowerCamelCase__			
       )       ,			(
           lowerCamelCase__			
       )       ,			(
           lowerCamelCase__			
       )       ,			(
           lowerCamelCase__			
       )       ,			(
           lowerCamelCase__			
       )       ,			(
           lowerCamelCase__			
       )       ,						
       )              =	config_and_inputs
       lowerCamelCase__              =	{'''input_ids''': input_ids, '''token_type_ids''': token_type_ids, '''attention_mask''': input_mask}
       return config, inputs_dict





   def 	__lowerCamelCase       (					self							):



    '''simple docstring'''







    lowerCamelCase__              =	TFMobileBertModelTest.TFMobileBertModelTester(self							)
    lowerCamelCase__              =	ConfigTester(self ,						config_class=__lowerCAmelCase ,						hidden_size=3_7							)





   def 	__lowerCamelCase       (					self							):



    '''simple docstring'''







    self.config_tester.run_common_tests()





   def 	__lowerCamelCase       (					self							):



    '''simple docstring'''







    lowerCamelCase__              =	self.model_tester.prepare_config_and_inputs()
    self.model_tester.create_and_check_mobilebert_model(*__lowerCAmelCase							)





   def 	__lowerCamelCase       (					self							):



    '''simple docstring'''







    lowerCamelCase__              =	self.model_tester.prepare_config_and_inputs()
    self.model_tester.create_and_check_mobilebert_for_masked_lm(*__lowerCAmelCase							)





   def 	__lowerCamelCase       (					self							):



    '''simple docstring'''







    lowerCamelCase__              =	self.model_tester.prepare_config_and_inputs()
    self.model_tester.create_and_check_mobilebert_for_multiple_choice(*__lowerCAmelCase							)





   def 	__lowerCamelCase       (					self							):



    '''simple docstring'''







    lowerCamelCase__              =	self.model_tester.prepare_config_and_inputs()
    self.model_tester.create_and_check_mobilebert_for_next_sequence_prediction(*__lowerCAmelCase							)





   def 	__lowerCamelCase       (					self							):



    '''simple docstring'''







    lowerCamelCase__              =	self.model_tester.prepare_config_and_inputs()
    self.model_tester.create_and_check_mobilebert_for_pretraining(*__lowerCAmelCase							)





   def 	__lowerCamelCase       (					self							):



    '''simple docstring'''







    lowerCamelCase__              =	self.model_tester.prepare_config_and_inputs()
    self.model_tester.create_and_check_mobilebert_for_question_answering(*__lowerCAmelCase							)





   def 	__lowerCamelCase       (					self							):



    '''simple docstring'''







    lowerCamelCase__              =	self.model_tester.prepare_config_and_inputs()
    self.model_tester.create_and_check_mobilebert_for_sequence_classification(*__lowerCAmelCase							)





   def 	__lowerCamelCase       (					self							):



    '''simple docstring'''







    lowerCamelCase__              =	self.model_tester.prepare_config_and_inputs()
    self.model_tester.create_and_check_mobilebert_for_token_classification(*__lowerCAmelCase							)





   @slow
   def 	__lowerCamelCase       (					self							):



    '''simple docstring'''







    for model_name in ["google/mobilebert-uncased"]:
     lowerCamelCase__              =	TFMobileBertModel.from_pretrained(__lowerCAmelCase							)
     self.assertIsNotNone(__lowerCAmelCase							)






@require_tf
class       __A					(					unittest.TestCase				):

   '''simple docstring'''







   @slow
   def 	__lowerCamelCase       (					self							):



    '''simple docstring'''







    lowerCamelCase__              =	TFMobileBertForPreTraining.from_pretrained('''google/mobilebert-uncased'''							)
    lowerCamelCase__              =	tf.constant([[0, 1, 2, 3, 4, 5]]							)
    lowerCamelCase__              =	model(__lowerCAmelCase							)[0]

    lowerCamelCase__              =	[1, 6, 3_0_5_2_2]
    self.assertEqual(output.shape ,						__lowerCAmelCase							)

    lowerCamelCase__              =	tf.constant(
        [
            [
                [-4.591_9547, -9.24_8295, -9.64_5256],
                [-6.730_6175, -6.44_0284, -6.605_2837],
                [-7.274_3506, -6.784_7915, -6.02_4673],
            ]
        ]							)
    tf.debugging.assert_near(output[:, :3, :3] ,						__lowerCAmelCase ,						atol=1E-4							)










from ...processing_utils import ProcessorMixin
from ...tokenization_utils_base import BatchEncoding






class       __A					(					lowerCAmelCase				):

			'''simple docstring'''







			lowerCAmelCase_							  =		"""ClapFeatureExtractor"""
			lowerCAmelCase_							  =		("""RobertaTokenizer""", """RobertaTokenizerFast""")





			def __init__(					self ,						__lowerCAmelCase ,						__lowerCAmelCase							):



				'''simple docstring'''







				super().__init__(__lowerCAmelCase ,						__lowerCAmelCase							)





			def __call__(					self ,						__lowerCAmelCase=None ,						__lowerCAmelCase=None ,						__lowerCAmelCase=None ,						**__lowerCAmelCase							):



				'''simple docstring'''







				lowerCamelCase__              =	kwargs.pop('''sampling_rate''' ,						__lowerCAmelCase							)

				if text is None and audios is None:
					raise ValueError('''You have to specify either text or audios. Both cannot be none.'''							)

				if text is not None:
					lowerCamelCase__              =	self.tokenizer(__lowerCAmelCase ,						return_tensors=__lowerCAmelCase ,						**__lowerCAmelCase							)

				if audios is not None:
					lowerCamelCase__              =	self.feature_extractor(
					    __lowerCAmelCase ,						sampling_rate=__lowerCAmelCase ,						return_tensors=__lowerCAmelCase ,						**__lowerCAmelCase							)

				if text is not None and audios is not None:
					lowerCamelCase__              =	audio_features.input_features
					return encoding
				elif text is not None:
					return encoding
				else:
					return BatchEncoding(data=dict(**__lowerCAmelCase							) ,						tensor_type=__lowerCAmelCase							)





			def 	__lowerCamelCase       (					self ,						*__lowerCAmelCase ,						**__lowerCAmelCase							):



				'''simple docstring'''







				return self.tokenizer.batch_decode(*__lowerCAmelCase ,						**__lowerCAmelCase							)





			def 	__lowerCamelCase       (					self ,						*__lowerCAmelCase ,						**__lowerCAmelCase							):



				'''simple docstring'''







				return self.tokenizer.decode(*__lowerCAmelCase ,						**__lowerCAmelCase							)





			@property
			def 	__lowerCamelCase       (					self							):



				'''simple docstring'''







				lowerCamelCase__              =	self.tokenizer.model_input_names
				lowerCamelCase__              =	self.feature_extractor.model_input_names
				return list(dict.fromkeys(tokenizer_input_names + feature_extractor_input_names							)							)



