


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 lowerCAmelCase_						(			lowerCamelCase__	):

 '''simple docstring'''

 __snake_case												=  "new-model"


if is_tf_available():







   class lowerCAmelCase_						(			lowerCamelCase__	):

    '''simple docstring'''

    __snake_case												=  NewModelConfig







@require_tf
class lowerCAmelCase_						(			unittest.TestCase	):

 '''simple docstring'''

 @slow
 def 						UpperCamelCase__					(     self ):
       snake_case_	=				'''bert-base-cased'''
       snake_case_	=				AutoConfig.from_pretrained(_UpperCAmelCase )
       self.assertIsNotNone(_UpperCAmelCase )
       self.assertIsInstance(_UpperCAmelCase		,				_UpperCAmelCase )

       snake_case_	=				TFAutoModel.from_pretrained(_UpperCAmelCase )
       self.assertIsNotNone(_UpperCAmelCase )
       self.assertIsInstance(_UpperCAmelCase		,				_UpperCAmelCase )



 @slow
 def 						UpperCamelCase__					(     self ):
       snake_case_	=				'''bert-base-cased'''
       snake_case_	=				AutoConfig.from_pretrained(_UpperCAmelCase )
       self.assertIsNotNone(_UpperCAmelCase )
       self.assertIsInstance(_UpperCAmelCase		,				_UpperCAmelCase )

       snake_case_	=				TFAutoModelForPreTraining.from_pretrained(_UpperCAmelCase )
       self.assertIsNotNone(_UpperCAmelCase )
       self.assertIsInstance(_UpperCAmelCase		,				_UpperCAmelCase )



 @slow
 def 						UpperCamelCase__					(     self ):
       for model_name in TF_GPT2_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
             snake_case_	=				AutoConfig.from_pretrained(_UpperCAmelCase )
             self.assertIsNotNone(_UpperCAmelCase )
             self.assertIsInstance(_UpperCAmelCase		,				_UpperCAmelCase )

             snake_case_	=				TFAutoModelForCausalLM.from_pretrained(_UpperCAmelCase )
             snake_case_	,   snake_case_	=				TFAutoModelForCausalLM.from_pretrained(_UpperCAmelCase		,				output_loading_info=_UpperCAmelCase )
             self.assertIsNotNone(_UpperCAmelCase )
             self.assertIsInstance(_UpperCAmelCase		,				_UpperCAmelCase )



 @slow
 def 						UpperCamelCase__					(     self ):
       for model_name in TF_BERT_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
             snake_case_	=				AutoConfig.from_pretrained(_UpperCAmelCase )
             self.assertIsNotNone(_UpperCAmelCase )
             self.assertIsInstance(_UpperCAmelCase		,				_UpperCAmelCase )

             snake_case_	=				TFAutoModelWithLMHead.from_pretrained(_UpperCAmelCase )
             self.assertIsNotNone(_UpperCAmelCase )
             self.assertIsInstance(_UpperCAmelCase		,				_UpperCAmelCase )



 @slow
 def 						UpperCamelCase__					(     self ):
       for model_name in TF_BERT_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
             snake_case_	=				AutoConfig.from_pretrained(_UpperCAmelCase )
             self.assertIsNotNone(_UpperCAmelCase )
             self.assertIsInstance(_UpperCAmelCase		,				_UpperCAmelCase )

             snake_case_	=				TFAutoModelForMaskedLM.from_pretrained(_UpperCAmelCase )
             snake_case_	,   snake_case_	=				TFAutoModelForMaskedLM.from_pretrained(_UpperCAmelCase		,				output_loading_info=_UpperCAmelCase )
             self.assertIsNotNone(_UpperCAmelCase )
             self.assertIsInstance(_UpperCAmelCase		,				_UpperCAmelCase )



 @slow
 def 						UpperCamelCase__					(     self ):
       for model_name in TF_T5_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
             snake_case_	=				AutoConfig.from_pretrained(_UpperCAmelCase )
             self.assertIsNotNone(_UpperCAmelCase )
             self.assertIsInstance(_UpperCAmelCase		,				_UpperCAmelCase )

             snake_case_	=				TFAutoModelForSeqaSeqLM.from_pretrained(_UpperCAmelCase )
             snake_case_	,   snake_case_	=				TFAutoModelForSeqaSeqLM.from_pretrained(_UpperCAmelCase		,				output_loading_info=_UpperCAmelCase )
             self.assertIsNotNone(_UpperCAmelCase )
             self.assertIsInstance(_UpperCAmelCase		,				_UpperCAmelCase )



 @slow
 def 						UpperCamelCase__					(     self ):
       # for model_name in TF_BERT_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
       for model_name in ["bert-base-uncased"]:
             snake_case_	=				AutoConfig.from_pretrained(_UpperCAmelCase )
             self.assertIsNotNone(_UpperCAmelCase )
             self.assertIsInstance(_UpperCAmelCase		,				_UpperCAmelCase )

             snake_case_	=				TFAutoModelForSequenceClassification.from_pretrained(_UpperCAmelCase )
             self.assertIsNotNone(_UpperCAmelCase )
             self.assertIsInstance(_UpperCAmelCase		,				_UpperCAmelCase )



 @slow
 def 						UpperCamelCase__					(     self ):
       # for model_name in TF_BERT_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
       for model_name in ["bert-base-uncased"]:
             snake_case_	=				AutoConfig.from_pretrained(_UpperCAmelCase )
             self.assertIsNotNone(_UpperCAmelCase )
             self.assertIsInstance(_UpperCAmelCase		,				_UpperCAmelCase )

             snake_case_	=				TFAutoModelForQuestionAnswering.from_pretrained(_UpperCAmelCase )
             self.assertIsNotNone(_UpperCAmelCase )
             self.assertIsInstance(_UpperCAmelCase		,				_UpperCAmelCase )



 @slow
 @require_tensorflow_probability
 def 						UpperCamelCase__					(     self ):
       for model_name in TF_TAPAS_PRETRAINED_MODEL_ARCHIVE_LIST[5:6]:
             snake_case_	=				AutoConfig.from_pretrained(_UpperCAmelCase )
             self.assertIsNotNone(_UpperCAmelCase )
             self.assertIsInstance(_UpperCAmelCase		,				_UpperCAmelCase )

             snake_case_	=				TFAutoModelForTableQuestionAnswering.from_pretrained(_UpperCAmelCase )
             snake_case_	,   snake_case_	=				TFAutoModelForTableQuestionAnswering.from_pretrained(
                 _UpperCAmelCase		,				output_loading_info=_UpperCAmelCase )
             self.assertIsNotNone(_UpperCAmelCase )
             self.assertIsInstance(_UpperCAmelCase		,				_UpperCAmelCase )



 def 						UpperCamelCase__					(     self ):
       snake_case_	=				TFAutoModelWithLMHead.from_pretrained(_UpperCAmelCase )
       self.assertIsInstance(_UpperCAmelCase		,				_UpperCAmelCase )
       self.assertEqual(model.num_parameters()		,				1_44_10 )
       self.assertEqual(model.num_parameters(only_trainable=_UpperCAmelCase )		,				1_44_10 )



 def 						UpperCamelCase__					(     self ):
       snake_case_	=				TFAutoModelWithLMHead.from_pretrained(_UpperCAmelCase )
       self.assertIsInstance(_UpperCAmelCase		,				_UpperCAmelCase )
       self.assertEqual(model.num_parameters()		,				1_44_10 )
       self.assertEqual(model.num_parameters(only_trainable=_UpperCAmelCase )		,				1_44_10 )



 def 						UpperCamelCase__					(     self ):
       # For the auto model mapping, FunnelConfig has two models: FunnelModel and FunnelBaseModel
       snake_case_	=				TFAutoModel.from_pretrained('''sgugger/funnel-random-tiny''' )
       self.assertIsInstance(_UpperCAmelCase		,				_UpperCAmelCase )

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

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



 def 						UpperCamelCase__					(     self ):
       try:
             AutoConfig.register('''new-model'''		,				_UpperCAmelCase )

             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(_UpperCAmelCase ):
                               auto_class.register(_UpperCAmelCase		,				_UpperCAmelCase )
                         auto_class.register(_UpperCAmelCase		,				_UpperCAmelCase )
                         # Trying to register something existing in the Transformers library will raise an error
                         with self.assertRaises(_UpperCAmelCase ):
                               auto_class.register(_UpperCAmelCase		,				_UpperCAmelCase )

                         # 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(_UpperCAmelCase )
                         self.assertIsInstance(_UpperCAmelCase		,				_UpperCAmelCase )

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

       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 ):
       with self.assertRaisesRegex(
           _UpperCAmelCase		,				'''bert-base is not a local folder and is not a valid model identifier''' ):
             snake_case_	=				TFAutoModel.from_pretrained('''bert-base''' )



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



 def 						UpperCamelCase__					(     self ):
       with self.assertRaisesRegex(
           _UpperCAmelCase		,				'''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 						UpperCamelCase__					(     self ):
       with self.assertRaisesRegex(_UpperCAmelCase		,				'''Use `from_pt=True` to load this model''' ):
             snake_case_	=				TFAutoModel.from_pretrained('''hf-internal-testing/tiny-bert-pt-only''' )





 def 						UpperCamelCase__					(     self ):
       # Make sure we have cached the model.
       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 )



import os






def 	__lowerCAmelCase   ()->  List[Any]:




      """simple docstring"""

      snake_case_	=				os.path.join(os.path.dirname(SCREAMING_SNAKE_CASE ) , '''num.txt''' )
      with open(SCREAMING_SNAKE_CASE ) as file_hand:
            return str(sum(int(SCREAMING_SNAKE_CASE ) for line in file_hand ) )[:10]


if __name__ == "__main__":
   print(solution())