'''simple docstring'''




from __future__ import annotations

import copy
import tempfile
import unittest

from transformers import CONFIG_MAPPING, AutoConfig, BertConfig, GPTaConfig, TaConfig, TapasConfig, is_tf_available
from transformers.testing_utils import (
    DUMMY_UNKNOWN_IDENTIFIER,
    SMALL_MODEL_IDENTIFIER,
    RequestCounter,
    require_tensorflow_probability,
    require_tf,
    slow,
)

from ..bert.test_modeling_bert import BertModelTester


if is_tf_available():
						from transformers import (
						    TFAutoModel,
						    TFAutoModelForCausalLM,
						    TFAutoModelForMaskedLM,
						    TFAutoModelForPreTraining,
						    TFAutoModelForQuestionAnswering,
						    TFAutoModelForSeqaSeqLM,
						    TFAutoModelForSequenceClassification,
						    TFAutoModelForTableQuestionAnswering,
						    TFAutoModelForTokenClassification,
						    TFAutoModelWithLMHead,
						    TFBertForMaskedLM,
						    TFBertForPreTraining,
						    TFBertForQuestionAnswering,
						    TFBertForSequenceClassification,
						    TFBertModel,
						    TFFunnelBaseModel,
						    TFFunnelModel,
						    TFGPTaLMHeadModel,
						    TFRobertaForMaskedLM,
						    TFTaForConditionalGeneration,
						    TFTapasForQuestionAnswering,
						)
						from transformers.models.auto.modeling_tf_auto import (
						    TF_MODEL_FOR_CAUSAL_LM_MAPPING,
						    TF_MODEL_FOR_MASKED_LM_MAPPING,
						    TF_MODEL_FOR_PRETRAINING_MAPPING,
						    TF_MODEL_FOR_QUESTION_ANSWERING_MAPPING,
						    TF_MODEL_FOR_SEQUENCE_CLASSIFICATION_MAPPING,
						    TF_MODEL_FOR_TOKEN_CLASSIFICATION_MAPPING,
						    TF_MODEL_MAPPING,
						)
						from transformers.models.bert.modeling_tf_bert import TF_BERT_PRETRAINED_MODEL_ARCHIVE_LIST
						from transformers.models.gpta.modeling_tf_gpta import TF_GPT2_PRETRAINED_MODEL_ARCHIVE_LIST
						from transformers.models.ta.modeling_tf_ta import TF_T5_PRETRAINED_MODEL_ARCHIVE_LIST
						from transformers.models.tapas.modeling_tf_tapas import TF_TAPAS_PRETRAINED_MODEL_ARCHIVE_LIST






class 							a__(   lowerCAmelCase__      ):


			'''simple docstring'''






			UpperCAmelCase_     :	Dict						=			'''new-model'''


if is_tf_available():






						class 							a__(   lowerCAmelCase__      ):


									'''simple docstring'''






									UpperCAmelCase_     :	Optional[Any]						=			NewModelConfig






@require_tf
class 							a__(   unittest.TestCase      ):


			'''simple docstring'''






			@slow
			def 				a_			(  self):




					"""simple docstring"""


					lowerCAmelCase     =    """bert-base-cased"""
					lowerCAmelCase     =    AutoConfig.from_pretrained(__lowerCAmelCase)
					self.assertIsNotNone(__lowerCAmelCase)
					self.assertIsInstance(__lowerCAmelCase			,       __lowerCAmelCase)

					lowerCAmelCase     =    TFAutoModel.from_pretrained(__lowerCAmelCase)
					self.assertIsNotNone(__lowerCAmelCase)
					self.assertIsInstance(__lowerCAmelCase			,       __lowerCAmelCase)



			@slow
			def 				a_			(  self):




					"""simple docstring"""


					lowerCAmelCase     =    """bert-base-cased"""
					lowerCAmelCase     =    AutoConfig.from_pretrained(__lowerCAmelCase)
					self.assertIsNotNone(__lowerCAmelCase)
					self.assertIsInstance(__lowerCAmelCase			,       __lowerCAmelCase)

					lowerCAmelCase     =    TFAutoModelForPreTraining.from_pretrained(__lowerCAmelCase)
					self.assertIsNotNone(__lowerCAmelCase)
					self.assertIsInstance(__lowerCAmelCase			,       __lowerCAmelCase)



			@slow
			def 				a_			(  self):




					"""simple docstring"""


					for model_name in TF_GPT2_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
							lowerCAmelCase     =    AutoConfig.from_pretrained(__lowerCAmelCase)
							self.assertIsNotNone(__lowerCAmelCase)
							self.assertIsInstance(__lowerCAmelCase			,       __lowerCAmelCase)

							lowerCAmelCase     =    TFAutoModelForCausalLM.from_pretrained(__lowerCAmelCase)
							lowerCAmelCase   ,	lowerCAmelCase     =    TFAutoModelForCausalLM.from_pretrained(__lowerCAmelCase			,       output_loading_info=__lowerCAmelCase)
							self.assertIsNotNone(__lowerCAmelCase)
							self.assertIsInstance(__lowerCAmelCase			,       __lowerCAmelCase)



			@slow
			def 				a_			(  self):




					"""simple docstring"""


					for model_name in TF_BERT_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
							lowerCAmelCase     =    AutoConfig.from_pretrained(__lowerCAmelCase)
							self.assertIsNotNone(__lowerCAmelCase)
							self.assertIsInstance(__lowerCAmelCase			,       __lowerCAmelCase)

							lowerCAmelCase     =    TFAutoModelWithLMHead.from_pretrained(__lowerCAmelCase)
							self.assertIsNotNone(__lowerCAmelCase)
							self.assertIsInstance(__lowerCAmelCase			,       __lowerCAmelCase)



			@slow
			def 				a_			(  self):




					"""simple docstring"""


					for model_name in TF_BERT_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
							lowerCAmelCase     =    AutoConfig.from_pretrained(__lowerCAmelCase)
							self.assertIsNotNone(__lowerCAmelCase)
							self.assertIsInstance(__lowerCAmelCase			,       __lowerCAmelCase)

							lowerCAmelCase     =    TFAutoModelForMaskedLM.from_pretrained(__lowerCAmelCase)
							lowerCAmelCase   ,	lowerCAmelCase     =    TFAutoModelForMaskedLM.from_pretrained(__lowerCAmelCase			,       output_loading_info=__lowerCAmelCase)
							self.assertIsNotNone(__lowerCAmelCase)
							self.assertIsInstance(__lowerCAmelCase			,       __lowerCAmelCase)



			@slow
			def 				a_			(  self):




					"""simple docstring"""


					for model_name in TF_T5_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
							lowerCAmelCase     =    AutoConfig.from_pretrained(__lowerCAmelCase)
							self.assertIsNotNone(__lowerCAmelCase)
							self.assertIsInstance(__lowerCAmelCase			,       __lowerCAmelCase)

							lowerCAmelCase     =    TFAutoModelForSeqaSeqLM.from_pretrained(__lowerCAmelCase)
							lowerCAmelCase   ,	lowerCAmelCase     =    TFAutoModelForSeqaSeqLM.from_pretrained(__lowerCAmelCase			,       output_loading_info=__lowerCAmelCase)
							self.assertIsNotNone(__lowerCAmelCase)
							self.assertIsInstance(__lowerCAmelCase			,       __lowerCAmelCase)



			@slow
			def 				a_			(  self):




					"""simple docstring"""


					for model_name in ["bert-base-uncased"]:
							lowerCAmelCase     =    AutoConfig.from_pretrained(__lowerCAmelCase)
							self.assertIsNotNone(__lowerCAmelCase)
							self.assertIsInstance(__lowerCAmelCase			,       __lowerCAmelCase)

							lowerCAmelCase     =    TFAutoModelForSequenceClassification.from_pretrained(__lowerCAmelCase)
							self.assertIsNotNone(__lowerCAmelCase)
							self.assertIsInstance(__lowerCAmelCase			,       __lowerCAmelCase)



			@slow
			def 				a_			(  self):




					"""simple docstring"""


					for model_name in ["bert-base-uncased"]:
							lowerCAmelCase     =    AutoConfig.from_pretrained(__lowerCAmelCase)
							self.assertIsNotNone(__lowerCAmelCase)
							self.assertIsInstance(__lowerCAmelCase			,       __lowerCAmelCase)

							lowerCAmelCase     =    TFAutoModelForQuestionAnswering.from_pretrained(__lowerCAmelCase)
							self.assertIsNotNone(__lowerCAmelCase)
							self.assertIsInstance(__lowerCAmelCase			,       __lowerCAmelCase)



			@slow
			@require_tensorflow_probability
			def 				a_			(  self):




					"""simple docstring"""


					for model_name in TF_TAPAS_PRETRAINED_MODEL_ARCHIVE_LIST[5:6]:
							lowerCAmelCase     =    AutoConfig.from_pretrained(__lowerCAmelCase)
							self.assertIsNotNone(__lowerCAmelCase)
							self.assertIsInstance(__lowerCAmelCase			,       __lowerCAmelCase)

							lowerCAmelCase     =    TFAutoModelForTableQuestionAnswering.from_pretrained(__lowerCAmelCase)
							lowerCAmelCase   ,	lowerCAmelCase     =    TFAutoModelForTableQuestionAnswering.from_pretrained(
							    __lowerCAmelCase			,       output_loading_info=__lowerCAmelCase)
							self.assertIsNotNone(__lowerCAmelCase)
							self.assertIsInstance(__lowerCAmelCase			,       __lowerCAmelCase)



			def 				a_			(  self):




					"""simple docstring"""


					lowerCAmelCase     =    TFAutoModelWithLMHead.from_pretrained(__lowerCAmelCase)
					self.assertIsInstance(__lowerCAmelCase			,       __lowerCAmelCase)
					self.assertEqual(model.num_parameters()			,       14410)
					self.assertEqual(model.num_parameters(only_trainable=__lowerCAmelCase)			,       14410)



			def 				a_			(  self):




					"""simple docstring"""


					lowerCAmelCase     =    TFAutoModelWithLMHead.from_pretrained(__lowerCAmelCase)
					self.assertIsInstance(__lowerCAmelCase			,       __lowerCAmelCase)
					self.assertEqual(model.num_parameters()			,       14410)
					self.assertEqual(model.num_parameters(only_trainable=__lowerCAmelCase)			,       14410)



			def 				a_			(  self):




					"""simple docstring"""


					lowerCAmelCase     =    TFAutoModel.from_pretrained("""sgugger/funnel-random-tiny""")
					self.assertIsInstance(__lowerCAmelCase			,       __lowerCAmelCase)

					lowerCAmelCase     =    copy.deepcopy(model.config)
					lowerCAmelCase     =    ["""FunnelBaseModel"""]
					lowerCAmelCase     =    TFAutoModel.from_config(__lowerCAmelCase)
					self.assertIsInstance(__lowerCAmelCase			,       __lowerCAmelCase)

					with tempfile.TemporaryDirectory() as tmp_dir:
							model.save_pretrained(__lowerCAmelCase)
							lowerCAmelCase     =    TFAutoModel.from_pretrained(__lowerCAmelCase)
							self.assertIsInstance(__lowerCAmelCase			,       __lowerCAmelCase)



			def 				a_			(  self):




					"""simple docstring"""


					try:
							AutoConfig.register("""new-model"""			,       __lowerCAmelCase)

							lowerCAmelCase     =    [
							    TFAutoModel,
							    TFAutoModelForCausalLM,
							    TFAutoModelForMaskedLM,
							    TFAutoModelForPreTraining,
							    TFAutoModelForQuestionAnswering,
							    TFAutoModelForSequenceClassification,
							    TFAutoModelForTokenClassification,
							]

							for auto_class in auto_classes:
									with self.subTest(auto_class.__name__):
											# Wrong config class will raise an error
											with self.assertRaises(__lowerCAmelCase):
													auto_class.register(__lowerCAmelCase			,       __lowerCAmelCase)
											auto_class.register(__lowerCAmelCase			,       __lowerCAmelCase)
											# Trying to register something existing in the Transformers library will raise an error
											with self.assertRaises(__lowerCAmelCase):
													auto_class.register(__lowerCAmelCase			,       __lowerCAmelCase)

											# Now that the config is registered, it can be used as any other config with the auto-API
											lowerCAmelCase     =    BertModelTester(self).get_config()
											lowerCAmelCase     =    NewModelConfig(**tiny_config.to_dict())
											lowerCAmelCase     =    auto_class.from_config(__lowerCAmelCase)
											self.assertIsInstance(__lowerCAmelCase			,       __lowerCAmelCase)

											with tempfile.TemporaryDirectory() as tmp_dir:
													model.save_pretrained(__lowerCAmelCase)
													lowerCAmelCase     =    auto_class.from_pretrained(__lowerCAmelCase)
													self.assertIsInstance(__lowerCAmelCase			,       __lowerCAmelCase)

					finally:
							if "new-model" in CONFIG_MAPPING._extra_content:
									del CONFIG_MAPPING._extra_content["new-model"]
							for mapping in (
							    TF_MODEL_MAPPING,
							    TF_MODEL_FOR_PRETRAINING_MAPPING,
							    TF_MODEL_FOR_QUESTION_ANSWERING_MAPPING,
							    TF_MODEL_FOR_SEQUENCE_CLASSIFICATION_MAPPING,
							    TF_MODEL_FOR_TOKEN_CLASSIFICATION_MAPPING,
							    TF_MODEL_FOR_CAUSAL_LM_MAPPING,
							    TF_MODEL_FOR_MASKED_LM_MAPPING,
							):
									if NewModelConfig in mapping._extra_content:
											del mapping._extra_content[NewModelConfig]



			def 				a_			(  self):




					"""simple docstring"""


					with self.assertRaisesRegex(
					    __lowerCAmelCase			,       """bert-base is not a local folder and is not a valid model identifier"""):
							lowerCAmelCase     =    TFAutoModel.from_pretrained("""bert-base""")



			def 				a_			(  self):




					"""simple docstring"""


					with self.assertRaisesRegex(
					    __lowerCAmelCase			,       r"""aaaaaa is not a valid git identifier \(branch name, tag name or commit id\)"""):
							lowerCAmelCase     =    TFAutoModel.from_pretrained(__lowerCAmelCase			,       revision="""aaaaaa""")



			def 				a_			(  self):




					"""simple docstring"""


					with self.assertRaisesRegex(
					    __lowerCAmelCase			,       """hf-internal-testing/config-no-model does not appear to have a file named pytorch_model.bin"""			,       ):
							lowerCAmelCase     =    TFAutoModel.from_pretrained("""hf-internal-testing/config-no-model""")



			def 				a_			(  self):




					"""simple docstring"""


					with self.assertRaisesRegex(__lowerCAmelCase			,       """Use `from_pt=True` to load this model"""):
							lowerCAmelCase     =    TFAutoModel.from_pretrained("""hf-internal-testing/tiny-bert-pt-only""")







			def 				a_			(  self):




					"""simple docstring"""


					lowerCAmelCase     =    TFAutoModel.from_pretrained("""hf-internal-testing/tiny-random-bert""")
					with RequestCounter() as counter:
							lowerCAmelCase     =    TFAutoModel.from_pretrained("""hf-internal-testing/tiny-random-bert""")
							self.assertEqual(counter.get_request_count			,       0)
							self.assertEqual(counter.head_request_count			,       1)
							self.assertEqual(counter.other_request_count			,       0)

					# With a sharded checkpoint
					lowerCAmelCase     =    TFAutoModel.from_pretrained("""ArthurZ/tiny-random-bert-sharded""")
					with RequestCounter() as counter:
							lowerCAmelCase     =    TFAutoModel.from_pretrained("""ArthurZ/tiny-random-bert-sharded""")
							self.assertEqual(counter.get_request_count			,       0)
							self.assertEqual(counter.head_request_count			,       1)
							self.assertEqual(counter.other_request_count			,       0)





'''simple docstring'''




from collections import OrderedDict
from typing import Mapping

from packaging import version

from ...configuration_utils import PretrainedConfig
from ...onnx import OnnxConfig
from ...utils import logging


__lowercase        =    logging.get_logger(__name__)

__lowercase        =    {
    '''google/mobilenet_v1_1.0_224''': '''https://huggingface.co/google/mobilenet_v1_1.0_224/resolve/main/config.json''',
    '''google/mobilenet_v1_0.75_192''': '''https://huggingface.co/google/mobilenet_v1_0.75_192/resolve/main/config.json''',
    # See all MobileNetV1 models at https://huggingface.co/models?filter=mobilenet_v1
}






class 							a__(   lowerCAmelCase__      ):


			'''simple docstring'''






			UpperCAmelCase_     :	List[str]						=			'''mobilenet_v1'''



			def __init__(  self			,       __lowerCAmelCase=3			,       __lowerCAmelCase=224			,       __lowerCAmelCase=1.0			,       __lowerCAmelCase=8			,       __lowerCAmelCase="relu6"			,       __lowerCAmelCase=True			,       __lowerCAmelCase=0.999			,       __lowerCAmelCase=0.02			,       __lowerCAmelCase=0.001			,       **__lowerCAmelCase			,       ):




					"""simple docstring"""


					super().__init__(**__lowerCAmelCase)

					if depth_multiplier <= 0:
							raise ValueError("""depth_multiplier must be greater than zero.""")

					lowerCAmelCase     =    num_channels
					lowerCAmelCase     =    image_size
					lowerCAmelCase     =    depth_multiplier
					lowerCAmelCase     =    min_depth
					lowerCAmelCase     =    hidden_act
					lowerCAmelCase     =    tf_padding
					lowerCAmelCase     =    classifier_dropout_prob
					lowerCAmelCase     =    initializer_range
					lowerCAmelCase     =    layer_norm_eps







class 							a__(   lowerCAmelCase__      ):


			'''simple docstring'''






			UpperCAmelCase_     :	Dict						=			version.parse('''1.11'''      )



			@property
			def 				a_			(  self):




					"""simple docstring"""


					return OrderedDict([("""pixel_values""", {0: """batch"""})])



			@property
			def 				a_			(  self):




					"""simple docstring"""


					if self.task == "image-classification":
							return OrderedDict([("""logits""", {0: """batch"""})])
					else:
							return OrderedDict([("""last_hidden_state""", {0: """batch"""}), ("""pooler_output""", {0: """batch"""})])







			@property
			def 				a_			(  self):




					"""simple docstring"""


					return 1E-4




