
'''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 						__UpperCAmelCase      (					_lowerCamelCase						):
							__lowercase      		=       """new-model"""


if is_tf_available():


					class 						__UpperCAmelCase      (					_lowerCamelCase						):
												__lowercase      		=       NewModelConfig


@require_tf
class 						__UpperCAmelCase      (					unittest.TestCase						):


							@slow
							def  lowerCamelCase				(       self  ):





								"""simple docstring"""






								_snake_case   						=		'bert-base-cased'
								_snake_case   						=		AutoConfig.from_pretrained(lowerCAmelCase_  )
								self.assertIsNotNone(lowerCAmelCase_  )
								self.assertIsInstance(lowerCAmelCase_    ,   lowerCAmelCase_  )

								_snake_case   						=		TFAutoModel.from_pretrained(lowerCAmelCase_  )
								self.assertIsNotNone(lowerCAmelCase_  )
								self.assertIsInstance(lowerCAmelCase_    ,   lowerCAmelCase_  )


							@slow
							def  lowerCamelCase				(       self  ):





								"""simple docstring"""






								_snake_case   						=		'bert-base-cased'
								_snake_case   						=		AutoConfig.from_pretrained(lowerCAmelCase_  )
								self.assertIsNotNone(lowerCAmelCase_  )
								self.assertIsInstance(lowerCAmelCase_    ,   lowerCAmelCase_  )

								_snake_case   						=		TFAutoModelForPreTraining.from_pretrained(lowerCAmelCase_  )
								self.assertIsNotNone(lowerCAmelCase_  )
								self.assertIsInstance(lowerCAmelCase_    ,   lowerCAmelCase_  )


							@slow
							def  lowerCamelCase				(       self  ):





								"""simple docstring"""






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

									_snake_case   						=		TFAutoModelForCausalLM.from_pretrained(lowerCAmelCase_  )
									_snake_case						, _snake_case   						=		TFAutoModelForCausalLM.from_pretrained(lowerCAmelCase_    ,   output_loading_info=lowerCAmelCase_  )
									self.assertIsNotNone(lowerCAmelCase_  )
									self.assertIsInstance(lowerCAmelCase_    ,   lowerCAmelCase_  )


							@slow
							def  lowerCamelCase				(       self  ):





								"""simple docstring"""






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

									_snake_case   						=		TFAutoModelWithLMHead.from_pretrained(lowerCAmelCase_  )
									self.assertIsNotNone(lowerCAmelCase_  )
									self.assertIsInstance(lowerCAmelCase_    ,   lowerCAmelCase_  )


							@slow
							def  lowerCamelCase				(       self  ):





								"""simple docstring"""






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

									_snake_case   						=		TFAutoModelForMaskedLM.from_pretrained(lowerCAmelCase_  )
									_snake_case						, _snake_case   						=		TFAutoModelForMaskedLM.from_pretrained(lowerCAmelCase_    ,   output_loading_info=lowerCAmelCase_  )
									self.assertIsNotNone(lowerCAmelCase_  )
									self.assertIsInstance(lowerCAmelCase_    ,   lowerCAmelCase_  )


							@slow
							def  lowerCamelCase				(       self  ):





								"""simple docstring"""






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

									_snake_case   						=		TFAutoModelForSeqaSeqLM.from_pretrained(lowerCAmelCase_  )
									_snake_case						, _snake_case   						=		TFAutoModelForSeqaSeqLM.from_pretrained(lowerCAmelCase_    ,   output_loading_info=lowerCAmelCase_  )
									self.assertIsNotNone(lowerCAmelCase_  )
									self.assertIsInstance(lowerCAmelCase_    ,   lowerCAmelCase_  )


							@slow
							def  lowerCamelCase				(       self  ):





								"""simple docstring"""






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

									_snake_case   						=		TFAutoModelForSequenceClassification.from_pretrained(lowerCAmelCase_  )
									self.assertIsNotNone(lowerCAmelCase_  )
									self.assertIsInstance(lowerCAmelCase_    ,   lowerCAmelCase_  )


							@slow
							def  lowerCamelCase				(       self  ):





								"""simple docstring"""






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

									_snake_case   						=		TFAutoModelForQuestionAnswering.from_pretrained(lowerCAmelCase_  )
									self.assertIsNotNone(lowerCAmelCase_  )
									self.assertIsInstance(lowerCAmelCase_    ,   lowerCAmelCase_  )


							@slow
							@require_tensorflow_probability
							def  lowerCamelCase				(       self  ):





								"""simple docstring"""






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

									_snake_case   						=		TFAutoModelForTableQuestionAnswering.from_pretrained(lowerCAmelCase_  )
									_snake_case						, _snake_case   						=		TFAutoModelForTableQuestionAnswering.from_pretrained(
									    lowerCAmelCase_    ,   output_loading_info=lowerCAmelCase_  )
									self.assertIsNotNone(lowerCAmelCase_  )
									self.assertIsInstance(lowerCAmelCase_    ,   lowerCAmelCase_  )


							def  lowerCamelCase				(       self  ):





								"""simple docstring"""






								_snake_case   						=		TFAutoModelWithLMHead.from_pretrained(lowerCAmelCase_  )
								self.assertIsInstance(lowerCAmelCase_    ,   lowerCAmelCase_  )
								self.assertEqual(model.num_parameters()    ,   1_44_10  )
								self.assertEqual(model.num_parameters(only_trainable=lowerCAmelCase_  )    ,   1_44_10  )


							def  lowerCamelCase				(       self  ):





								"""simple docstring"""






								_snake_case   						=		TFAutoModelWithLMHead.from_pretrained(lowerCAmelCase_  )
								self.assertIsInstance(lowerCAmelCase_    ,   lowerCAmelCase_  )
								self.assertEqual(model.num_parameters()    ,   1_44_10  )
								self.assertEqual(model.num_parameters(only_trainable=lowerCAmelCase_  )    ,   1_44_10  )


							def  lowerCamelCase				(       self  ):





								"""simple docstring"""






								_snake_case   						=		TFAutoModel.from_pretrained('sgugger/funnel-random-tiny'  )
								self.assertIsInstance(lowerCAmelCase_    ,   lowerCAmelCase_  )

								_snake_case   						=		copy.deepcopy(model.config  )
								_snake_case   						=		['FunnelBaseModel']
								_snake_case   						=		TFAutoModel.from_config(lowerCAmelCase_  )
								self.assertIsInstance(lowerCAmelCase_    ,   lowerCAmelCase_  )

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


							def  lowerCamelCase				(       self  ):





								"""simple docstring"""






								try:
									AutoConfig.register('new-model'    ,   lowerCAmelCase_  )

									_snake_case   						=		[
									    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
											_snake_case   						=		BertModelTester(self  ).get_config()
											_snake_case   						=		NewModelConfig(**tiny_config.to_dict()  )
											_snake_case   						=		auto_class.from_config(lowerCAmelCase_  )
											self.assertIsInstance(lowerCAmelCase_    ,   lowerCAmelCase_  )

											with tempfile.TemporaryDirectory() as tmp_dir:
												model.save_pretrained(lowerCAmelCase_  )
												_snake_case   						=		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  lowerCamelCase				(       self  ):





								"""simple docstring"""






								with self.assertRaisesRegex(
								    lowerCAmelCase_    ,   'bert-base is not a local folder and is not a valid model identifier'  ):
									_snake_case   						=		TFAutoModel.from_pretrained('bert-base'  )


							def  lowerCamelCase				(       self  ):





								"""simple docstring"""






								with self.assertRaisesRegex(
								    lowerCAmelCase_    ,   R'aaaaaa is not a valid git identifier \(branch name, tag name or commit id\)'  ):
									_snake_case   						=		TFAutoModel.from_pretrained(lowerCAmelCase_    ,   revision='aaaaaa'  )


							def  lowerCamelCase				(       self  ):





								"""simple docstring"""






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


							def  lowerCamelCase				(       self  ):





								"""simple docstring"""






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




							def  lowerCamelCase				(       self  ):





								"""simple docstring"""






								_snake_case   						=		TFAutoModel.from_pretrained('hf-internal-testing/tiny-random-bert'  )
								with RequestCounter() as counter:
									_snake_case   						=		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
								_snake_case   						=		TFAutoModel.from_pretrained('ArthurZ/tiny-random-bert-sharded'  )
								with RequestCounter() as counter:
									_snake_case   						=		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 ...utils import is_torch_available, is_transformers_available


if is_transformers_available() and is_torch_available():
					from .pipeline_vq_diffusion import LearnedClassifierFreeSamplingEmbeddings, VQDiffusionPipeline

