





'''simple docstring'''





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 SCREAMING_SNAKE_CASE_ (					lowercase_							,       lowercase_							,       unittest.TestCase   ):





					"""simple docstring"""


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





					def 					__magic_name__ ( self	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase=False	):
										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 SCREAMING_SNAKE_CASE_ (					lowercase_   ):





										"""simple docstring"""


										def __init__( self	,  _lowerCAmelCase	,  _lowerCAmelCase=13	,  _lowerCAmelCase=7	,  _lowerCAmelCase=True	,  _lowerCAmelCase=True	,  _lowerCAmelCase=True	,  _lowerCAmelCase=True	,  _lowerCAmelCase=99	,  _lowerCAmelCase=32	,  _lowerCAmelCase=32	,  _lowerCAmelCase=2	,  _lowerCAmelCase=4	,  _lowerCAmelCase=37	,  _lowerCAmelCase="gelu"	,  _lowerCAmelCase=0.1	,  _lowerCAmelCase=0.1	,  _lowerCAmelCase=512	,  _lowerCAmelCase=16	,  _lowerCAmelCase=2	,  _lowerCAmelCase=0.02	,  _lowerCAmelCase=3	,  _lowerCAmelCase=4	,  _lowerCAmelCase=None	,  ):
															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 					__magic_name__ ( self	):
															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 					__magic_name__ ( self	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	):
															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 					__magic_name__ ( self	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	):
															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 					__magic_name__ ( self	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	):
															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 					__magic_name__ ( self	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	):
															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 					__magic_name__ ( self	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	):
															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 					__magic_name__ ( self	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	):
															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 					__magic_name__ ( self	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	):
															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 					__magic_name__ ( self	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	,  _lowerCAmelCase	):
															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 					__magic_name__ ( self	):
															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 					__magic_name__ ( self	):
										lowerCamelCase__       =       TFMobileBertModelTest.TFMobileBertModelTester(self	)
										lowerCamelCase__       =       ConfigTester(self	,  config_class=_lowerCAmelCase	,  hidden_size=37	)





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





					def 					__magic_name__ ( self	):
										lowerCamelCase__       =       self.model_tester.prepare_config_and_inputs()
										self.model_tester.create_and_check_mobilebert_model(*_lowerCAmelCase	)





					def 					__magic_name__ ( self	):
										lowerCamelCase__       =       self.model_tester.prepare_config_and_inputs()
										self.model_tester.create_and_check_mobilebert_for_masked_lm(*_lowerCAmelCase	)





					def 					__magic_name__ ( self	):
										lowerCamelCase__       =       self.model_tester.prepare_config_and_inputs()
										self.model_tester.create_and_check_mobilebert_for_multiple_choice(*_lowerCAmelCase	)





					def 					__magic_name__ ( self	):
										lowerCamelCase__       =       self.model_tester.prepare_config_and_inputs()
										self.model_tester.create_and_check_mobilebert_for_next_sequence_prediction(*_lowerCAmelCase	)





					def 					__magic_name__ ( self	):
										lowerCamelCase__       =       self.model_tester.prepare_config_and_inputs()
										self.model_tester.create_and_check_mobilebert_for_pretraining(*_lowerCAmelCase	)





					def 					__magic_name__ ( self	):
										lowerCamelCase__       =       self.model_tester.prepare_config_and_inputs()
										self.model_tester.create_and_check_mobilebert_for_question_answering(*_lowerCAmelCase	)





					def 					__magic_name__ ( self	):
										lowerCamelCase__       =       self.model_tester.prepare_config_and_inputs()
										self.model_tester.create_and_check_mobilebert_for_sequence_classification(*_lowerCAmelCase	)





					def 					__magic_name__ ( self	):
										lowerCamelCase__       =       self.model_tester.prepare_config_and_inputs()
										self.model_tester.create_and_check_mobilebert_for_token_classification(*_lowerCAmelCase	)






					@slow
					def 					__magic_name__ ( self	):
										# for model_name in TF_MOBILEBERT_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
										for model_name in ["google/mobilebert-uncased"]:
															lowerCamelCase__       =       TFMobileBertModel.from_pretrained(_lowerCAmelCase	)
															self.assertIsNotNone(_lowerCAmelCase	)

@require_tf
class SCREAMING_SNAKE_CASE_ (					unittest.TestCase   ):





					"""simple docstring"""


					@slow
					def 					__magic_name__ ( self	):
										lowerCamelCase__       =       TFMobileBertForPreTraining.from_pretrained("google/mobilebert-uncased"	)
										lowerCamelCase__       =       tf.constant([[0, 1, 2, 3, 4, 5]]	)
										lowerCamelCase__       =       model(_lowerCAmelCase	)[0]

										lowerCamelCase__       =       [1, 6, 3_0522]
										self.assertEqual(output.shape	,  _lowerCAmelCase	)

										lowerCamelCase__       =       tf.constant(
										    [
										        [
										            [-4.5_919_547, -9.248_295, -9.645_256],
										            [-6.7_306_175, -6.440_284, -6.6_052_837],
										            [-7.2_743_506, -6.7_847_915, -6.024_673],
										        ]
										    ]	)
										tf.debugging.assert_near(output[:, :3, :3]	,  _lowerCAmelCase	,  atol=1E-4	)








def    __UpperCamelCase      (    a = 100) ->int:
					lowerCamelCase__       =       (n * (n + 1) // 2) ** 2
					lowerCamelCase__       =       n * (n + 1) * (2 * n + 1) // 6
					return sum_cubes - sum_squares


if __name__ == "__main__":
						print(f"""{solution() = }""")

