





'''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 							__lowercase    ( lowerCAmelCase__  ):







	'''simple docstring'''

	a      :			List[Any]     =    "new-model"


if is_tf_available():






	class 							__lowercase    ( lowerCAmelCase__  ):







		'''simple docstring'''

		a      :			Union[str, Any]     =    NewModelConfig






@require_tf
class 							__lowercase    ( unittest.TestCase  ):







	'''simple docstring'''

	@slow
	def   _UpperCAmelCase       (self	)							->							Optional[Any]:







				'''simple docstring'''





				__lowercase			  =							'''bert-base-cased'''
				__lowercase			  =							AutoConfig.from_pretrained(_lowerCamelCase	)
				self.assertIsNotNone(_lowerCamelCase	)
				self.assertIsInstance(_lowerCamelCase       ,_lowerCamelCase	)

				__lowercase			  =							TFAutoModel.from_pretrained(_lowerCamelCase	)
				self.assertIsNotNone(_lowerCamelCase	)
				self.assertIsInstance(_lowerCamelCase       ,_lowerCamelCase	)


	@slow
	def   _UpperCAmelCase       (self	)							->							Optional[int]:







				'''simple docstring'''





				__lowercase			  =							'''bert-base-cased'''
				__lowercase			  =							AutoConfig.from_pretrained(_lowerCamelCase	)
				self.assertIsNotNone(_lowerCamelCase	)
				self.assertIsInstance(_lowerCamelCase       ,_lowerCamelCase	)

				__lowercase			  =							TFAutoModelForPreTraining.from_pretrained(_lowerCamelCase	)
				self.assertIsNotNone(_lowerCamelCase	)
				self.assertIsInstance(_lowerCamelCase       ,_lowerCamelCase	)


	@slow
	def   _UpperCAmelCase       (self	)							->							int:







				'''simple docstring'''





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

							__lowercase			  =							TFAutoModelForCausalLM.from_pretrained(_lowerCamelCase	)
							__lowercase  ,						__lowercase			  =							TFAutoModelForCausalLM.from_pretrained(_lowerCamelCase       ,output_loading_info=_lowerCamelCase	)
							self.assertIsNotNone(_lowerCamelCase	)
							self.assertIsInstance(_lowerCamelCase       ,_lowerCamelCase	)


	@slow
	def   _UpperCAmelCase       (self	)							->							Optional[int]:







				'''simple docstring'''





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

							__lowercase			  =							TFAutoModelWithLMHead.from_pretrained(_lowerCamelCase	)
							self.assertIsNotNone(_lowerCamelCase	)
							self.assertIsInstance(_lowerCamelCase       ,_lowerCamelCase	)


	@slow
	def   _UpperCAmelCase       (self	)							->							List[str]:







				'''simple docstring'''





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

							__lowercase			  =							TFAutoModelForMaskedLM.from_pretrained(_lowerCamelCase	)
							__lowercase  ,						__lowercase			  =							TFAutoModelForMaskedLM.from_pretrained(_lowerCamelCase       ,output_loading_info=_lowerCamelCase	)
							self.assertIsNotNone(_lowerCamelCase	)
							self.assertIsInstance(_lowerCamelCase       ,_lowerCamelCase	)


	@slow
	def   _UpperCAmelCase       (self	)							->							Optional[int]:







				'''simple docstring'''





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

							__lowercase			  =							TFAutoModelForSeqaSeqLM.from_pretrained(_lowerCamelCase	)
							__lowercase  ,						__lowercase			  =							TFAutoModelForSeqaSeqLM.from_pretrained(_lowerCamelCase       ,output_loading_info=_lowerCamelCase	)
							self.assertIsNotNone(_lowerCamelCase	)
							self.assertIsInstance(_lowerCamelCase       ,_lowerCamelCase	)


	@slow
	def   _UpperCAmelCase       (self	)							->							int:







				'''simple docstring'''





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

							__lowercase			  =							TFAutoModelForSequenceClassification.from_pretrained(_lowerCamelCase	)
							self.assertIsNotNone(_lowerCamelCase	)
							self.assertIsInstance(_lowerCamelCase       ,_lowerCamelCase	)


	@slow
	def   _UpperCAmelCase       (self	)							->							Union[str, Any]:







				'''simple docstring'''





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

							__lowercase			  =							TFAutoModelForQuestionAnswering.from_pretrained(_lowerCamelCase	)
							self.assertIsNotNone(_lowerCamelCase	)
							self.assertIsInstance(_lowerCamelCase       ,_lowerCamelCase	)


	@slow
	@require_tensorflow_probability
	def   _UpperCAmelCase       (self	)							->							List[Any]:







				'''simple docstring'''





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

							__lowercase			  =							TFAutoModelForTableQuestionAnswering.from_pretrained(_lowerCamelCase	)
							__lowercase  ,						__lowercase			  =							TFAutoModelForTableQuestionAnswering.from_pretrained(
							    _lowerCamelCase       ,output_loading_info=_lowerCamelCase	)
							self.assertIsNotNone(_lowerCamelCase	)
							self.assertIsInstance(_lowerCamelCase       ,_lowerCamelCase	)


	def   _UpperCAmelCase       (self	)							->							str:







				'''simple docstring'''





				__lowercase			  =							TFAutoModelWithLMHead.from_pretrained(_lowerCamelCase	)
				self.assertIsInstance(_lowerCamelCase       ,_lowerCamelCase	)
				self.assertEqual(model.num_parameters()       ,14410	)
				self.assertEqual(model.num_parameters(only_trainable=_lowerCamelCase	)       ,14410	)


	def   _UpperCAmelCase       (self	)							->							Optional[int]:







				'''simple docstring'''





				__lowercase			  =							TFAutoModelWithLMHead.from_pretrained(_lowerCamelCase	)
				self.assertIsInstance(_lowerCamelCase       ,_lowerCamelCase	)
				self.assertEqual(model.num_parameters()       ,14410	)
				self.assertEqual(model.num_parameters(only_trainable=_lowerCamelCase	)       ,14410	)


	def   _UpperCAmelCase       (self	)							->							List[str]:







				'''simple docstring'''





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

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

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


	def   _UpperCAmelCase       (self	)							->							int:







				'''simple docstring'''





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

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

													with tempfile.TemporaryDirectory() as tmp_dir:
																model.save_pretrained(_lowerCamelCase	)
																__lowercase			  =							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   _UpperCAmelCase       (self	)							->							List[Any]:







				'''simple docstring'''





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


	def   _UpperCAmelCase       (self	)							->							List[str]:







				'''simple docstring'''





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


	def   _UpperCAmelCase       (self	)							->							Optional[int]:







				'''simple docstring'''





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


	def   _UpperCAmelCase       (self	)							->							List[Any]:







				'''simple docstring'''





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


	def   _UpperCAmelCase       (self	)							->							Any:







				'''simple docstring'''





				__lowercase			  =							TFAutoModel.from_pretrained('''hf-internal-testing/tiny-random-bert'''	)
				with RequestCounter() as counter:
							__lowercase			  =							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
				__lowercase			  =							TFAutoModel.from_pretrained('''ArthurZ/tiny-random-bert-sharded'''	)
				with RequestCounter() as counter:
							__lowercase			  =							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 ...configuration_utils import PretrainedConfig
from ...utils import logging


_SCREAMING_SNAKE_CASE   =      logging.get_logger(__name__)

_SCREAMING_SNAKE_CASE   =      {
    '''abeja/gpt-neox-japanese-2.7b''': '''https://huggingface.co/abeja/gpt-neox-japanese-2.7b/resolve/main/config.json''',
}






class 							__lowercase    ( lowerCAmelCase__  ):







	'''simple docstring'''

	a      :			Union[str, Any]     =    "gpt_neox_japanese"


	def __init__(self       ,_lowerCamelCase=32000       ,_lowerCamelCase=2560       ,_lowerCamelCase=32       ,_lowerCamelCase=32       ,_lowerCamelCase=4       ,_lowerCamelCase="gelu"       ,_lowerCamelCase=1.0_0       ,_lowerCamelCase=10000       ,_lowerCamelCase=2048       ,_lowerCamelCase=0.0_2       ,_lowerCamelCase=1E-5       ,_lowerCamelCase=True       ,_lowerCamelCase=31996       ,_lowerCamelCase=31999       ,_lowerCamelCase=0.1       ,_lowerCamelCase=0.0       ,**_lowerCamelCase       ,)							->							Optional[int]:







				'''simple docstring'''





				super().__init__(bos_token_id=_lowerCamelCase       ,eos_token_id=_lowerCamelCase       ,**_lowerCamelCase	)
				__lowercase			  =							vocab_size
				__lowercase			  =							max_position_embeddings
				__lowercase			  =							hidden_size
				__lowercase			  =							num_hidden_layers
				__lowercase			  =							num_attention_heads
				__lowercase			  =							intermediate_multiple_size
				__lowercase			  =							hidden_act
				__lowercase			  =							rotary_pct
				__lowercase			  =							rotary_emb_base
				__lowercase			  =							initializer_range
				__lowercase			  =							layer_norm_eps
				__lowercase			  =							use_cache
				__lowercase			  =							attention_dropout
				__lowercase			  =							hidden_dropout





