


'''simple docstring'''


import unittest

from transformers import ElectraConfig, is_torch_available
from transformers.models.auto import get_values
from transformers.testing_utils import require_torch, slow, torch_device

from ...test_configuration_common import ConfigTester
from ...test_modeling_common import ModelTesterMixin, floats_tensor, ids_tensor, random_attention_mask
from ...test_pipeline_mixin import PipelineTesterMixin


if is_torch_available():
				import torch

				from transformers import (
				    MODEL_FOR_PRETRAINING_MAPPING,
				    ElectraForCausalLM,
				    ElectraForMaskedLM,
				    ElectraForMultipleChoice,
				    ElectraForPreTraining,
				    ElectraForQuestionAnswering,
				    ElectraForSequenceClassification,
				    ElectraForTokenClassification,
				    ElectraModel,
				)
				from transformers.models.electra.modeling_electra import ELECTRA_PRETRAINED_MODEL_ARCHIVE_LIST





class 					lowercase__						:





							'''simple docstring'''


							def __init__(					self					,      __snake_case					,      __snake_case=13					,      __snake_case=7					,      __snake_case=True					,      __snake_case=True					,      __snake_case=True					,      __snake_case=True					,      __snake_case=99					,      __snake_case=32					,      __snake_case=5					,      __snake_case=4					,      __snake_case=37					,      __snake_case="gelu"					,      __snake_case=0.1					,      __snake_case=0.1					,      __snake_case=512					,      __snake_case=16					,      __snake_case=2					,      __snake_case=0.02					,      __snake_case=3					,      __snake_case=4					,      __snake_case=None					,      ):
											_SCREAMING_SNAKE_CASE				: List[Any]  	=   parent
											_SCREAMING_SNAKE_CASE				: str  	=   batch_size
											_SCREAMING_SNAKE_CASE				: Tuple  	=   seq_length
											_SCREAMING_SNAKE_CASE				: List[Any]  	=   is_training
											_SCREAMING_SNAKE_CASE				: str  	=   use_input_mask
											_SCREAMING_SNAKE_CASE				: Optional[int]  	=   use_token_type_ids
											_SCREAMING_SNAKE_CASE				: Dict  	=   use_labels
											_SCREAMING_SNAKE_CASE				: List[Any]  	=   vocab_size
											_SCREAMING_SNAKE_CASE				: Tuple  	=   hidden_size
											_SCREAMING_SNAKE_CASE				: Tuple  	=   num_hidden_layers
											_SCREAMING_SNAKE_CASE				: Tuple  	=   num_attention_heads
											_SCREAMING_SNAKE_CASE				: Tuple  	=   intermediate_size
											_SCREAMING_SNAKE_CASE				: Optional[int]  	=   hidden_act
											_SCREAMING_SNAKE_CASE				: Union[str, Any]  	=   hidden_dropout_prob
											_SCREAMING_SNAKE_CASE				: List[Any]  	=   attention_probs_dropout_prob
											_SCREAMING_SNAKE_CASE				: str  	=   max_position_embeddings
											_SCREAMING_SNAKE_CASE				: Tuple  	=   type_vocab_size
											_SCREAMING_SNAKE_CASE				: List[str]  	=   type_sequence_label_size
											_SCREAMING_SNAKE_CASE				: str  	=   initializer_range
											_SCREAMING_SNAKE_CASE				: Any  	=   num_labels
											_SCREAMING_SNAKE_CASE				: Union[str, Any]  	=   num_choices
											_SCREAMING_SNAKE_CASE				: Union[str, Any]  	=   scope






							def UpperCAmelCase_			(					self						):
											_SCREAMING_SNAKE_CASE				: int  	=   ids_tensor([self.batch_size, self.seq_length]					,      self.vocab_size						)

											_SCREAMING_SNAKE_CASE				: List[str]  	=   None
											if self.use_input_mask:
															_SCREAMING_SNAKE_CASE				: List[str]  	=   random_attention_mask([self.batch_size, self.seq_length]						)

											_SCREAMING_SNAKE_CASE				: Union[str, Any]  	=   None
											if self.use_token_type_ids:
															_SCREAMING_SNAKE_CASE				: int  	=   ids_tensor([self.batch_size, self.seq_length]					,      self.type_vocab_size						)

											_SCREAMING_SNAKE_CASE				: Tuple  	=   None
											_SCREAMING_SNAKE_CASE				: List[str]  	=   None
											_SCREAMING_SNAKE_CASE				: Optional[int]  	=   None
											if self.use_labels:
															_SCREAMING_SNAKE_CASE				: List[str]  	=   ids_tensor([self.batch_size]					,      self.type_sequence_label_size						)
															_SCREAMING_SNAKE_CASE				: List[str]  	=   ids_tensor([self.batch_size, self.seq_length]					,      self.num_labels						)
															_SCREAMING_SNAKE_CASE				: int  	=   ids_tensor([self.batch_size]					,      self.num_choices						)
															_SCREAMING_SNAKE_CASE				: List[Any]  	=   ids_tensor([self.batch_size, self.seq_length]					,      1						)

											_SCREAMING_SNAKE_CASE				: Tuple  	=   self.get_config()

											return (
											    config,
											    input_ids,
											    token_type_ids,
											    input_mask,
											    sequence_labels,
											    token_labels,
											    choice_labels,
											    fake_token_labels,
											)






							def UpperCAmelCase_			(					self						):
											return ElectraConfig(
											    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					,      is_decoder=__snake_case					,      initializer_range=self.initializer_range					,      )






							def UpperCAmelCase_			(					self						):
											(
											    (
											    _SCREAMING_SNAKE_CASE
											)	, (
											    _SCREAMING_SNAKE_CASE
											)	, (
											    _SCREAMING_SNAKE_CASE
											)	, (
											    _SCREAMING_SNAKE_CASE
											)	, (
											    _SCREAMING_SNAKE_CASE
											)	, (
											    _SCREAMING_SNAKE_CASE
											)	, (
											    _SCREAMING_SNAKE_CASE
											)	, (
											    _SCREAMING_SNAKE_CASE
											)	, 
											)				: Any  	=   self.prepare_config_and_inputs()

											_SCREAMING_SNAKE_CASE				: int  	=   True
											_SCREAMING_SNAKE_CASE				: Tuple  	=   floats_tensor([self.batch_size, self.seq_length, self.hidden_size]						)
											_SCREAMING_SNAKE_CASE				: int  	=   ids_tensor([self.batch_size, self.seq_length]					,      vocab_size=2						)

											return (
											    config,
											    input_ids,
											    token_type_ids,
											    input_mask,
											    sequence_labels,
											    token_labels,
											    choice_labels,
											    encoder_hidden_states,
											    encoder_attention_mask,
											)






							def UpperCAmelCase_			(					self					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      ):
											_SCREAMING_SNAKE_CASE				: int  	=   ElectraModel(config=__snake_case						)
											model.to(__snake_case						)
											model.eval()
											_SCREAMING_SNAKE_CASE				: Any  	=   model(__snake_case					,      attention_mask=__snake_case					,      token_type_ids=__snake_case						)
											_SCREAMING_SNAKE_CASE				: Optional[int]  	=   model(__snake_case					,      token_type_ids=__snake_case						)
											_SCREAMING_SNAKE_CASE				: str  	=   model(__snake_case						)
											self.parent.assertEqual(result.last_hidden_state.shape					,      (self.batch_size, self.seq_length, self.hidden_size)						)






							def UpperCAmelCase_			(					self					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      ):
											_SCREAMING_SNAKE_CASE				: int  	=   True
											_SCREAMING_SNAKE_CASE				: Optional[int]  	=   ElectraModel(__snake_case						)
											model.to(__snake_case						)
											model.eval()
											_SCREAMING_SNAKE_CASE				: int  	=   model(
											    __snake_case					,      attention_mask=__snake_case					,      token_type_ids=__snake_case					,      encoder_hidden_states=__snake_case					,      encoder_attention_mask=__snake_case					,      )
											_SCREAMING_SNAKE_CASE				: Optional[int]  	=   model(
											    __snake_case					,      attention_mask=__snake_case					,      token_type_ids=__snake_case					,      encoder_hidden_states=__snake_case					,      )
											_SCREAMING_SNAKE_CASE				: Union[str, Any]  	=   model(__snake_case					,      attention_mask=__snake_case					,      token_type_ids=__snake_case						)
											self.parent.assertEqual(result.last_hidden_state.shape					,      (self.batch_size, self.seq_length, self.hidden_size)						)






							def UpperCAmelCase_			(					self					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      ):
											_SCREAMING_SNAKE_CASE				: List[str]  	=   ElectraForMaskedLM(config=__snake_case						)
											model.to(__snake_case						)
											model.eval()
											_SCREAMING_SNAKE_CASE				: str  	=   model(__snake_case					,      attention_mask=__snake_case					,      token_type_ids=__snake_case					,      labels=__snake_case						)
											self.parent.assertEqual(result.logits.shape					,      (self.batch_size, self.seq_length, self.vocab_size)						)






							def UpperCAmelCase_			(					self					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      ):
											_SCREAMING_SNAKE_CASE				: Dict  	=   ElectraForCausalLM(config=__snake_case						)
											model.to(__snake_case						)
											model.eval()
											_SCREAMING_SNAKE_CASE				: int  	=   model(__snake_case					,      attention_mask=__snake_case					,      token_type_ids=__snake_case					,      labels=__snake_case						)
											self.parent.assertEqual(result.logits.shape					,      (self.batch_size, self.seq_length, self.vocab_size)						)






							def UpperCAmelCase_			(					self					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      ):
											_SCREAMING_SNAKE_CASE				: List[Any]  	=   self.num_labels
											_SCREAMING_SNAKE_CASE				: Any  	=   ElectraForTokenClassification(config=__snake_case						)
											model.to(__snake_case						)
											model.eval()
											_SCREAMING_SNAKE_CASE				: Any  	=   model(__snake_case					,      attention_mask=__snake_case					,      token_type_ids=__snake_case					,      labels=__snake_case						)
											self.parent.assertEqual(result.logits.shape					,      (self.batch_size, self.seq_length, self.num_labels)						)






							def UpperCAmelCase_			(					self					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      ):
											_SCREAMING_SNAKE_CASE				: List[str]  	=   self.num_labels
											_SCREAMING_SNAKE_CASE				: Any  	=   ElectraForPreTraining(config=__snake_case						)
											model.to(__snake_case						)
											model.eval()
											_SCREAMING_SNAKE_CASE				: Optional[int]  	=   model(__snake_case					,      attention_mask=__snake_case					,      token_type_ids=__snake_case					,      labels=__snake_case						)
											self.parent.assertEqual(result.logits.shape					,      (self.batch_size, self.seq_length)						)






							def UpperCAmelCase_			(					self					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      ):
											_SCREAMING_SNAKE_CASE				: int  	=   self.num_labels
											_SCREAMING_SNAKE_CASE				: Any  	=   ElectraForSequenceClassification(__snake_case						)
											model.to(__snake_case						)
											model.eval()
											_SCREAMING_SNAKE_CASE				: List[str]  	=   model(__snake_case					,      attention_mask=__snake_case					,      token_type_ids=__snake_case					,      labels=__snake_case						)
											self.parent.assertEqual(result.logits.shape					,      (self.batch_size, self.num_labels)						)






							def UpperCAmelCase_			(					self					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      ):
											_SCREAMING_SNAKE_CASE				: List[str]  	=   ElectraForQuestionAnswering(config=__snake_case						)
											model.to(__snake_case						)
											model.eval()
											_SCREAMING_SNAKE_CASE				: List[str]  	=   model(
											    __snake_case					,      attention_mask=__snake_case					,      token_type_ids=__snake_case					,      start_positions=__snake_case					,      end_positions=__snake_case					,      )
											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 UpperCAmelCase_			(					self					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      __snake_case					,      ):
											_SCREAMING_SNAKE_CASE				: Optional[Any]  	=   self.num_choices
											_SCREAMING_SNAKE_CASE				: int  	=   ElectraForMultipleChoice(config=__snake_case						)
											model.to(__snake_case						)
											model.eval()
											_SCREAMING_SNAKE_CASE				: Any  	=   input_ids.unsqueeze(1						).expand(-1					,      self.num_choices					,      -1						).contiguous()
											_SCREAMING_SNAKE_CASE				: List[str]  	=   token_type_ids.unsqueeze(1						).expand(-1					,      self.num_choices					,      -1						).contiguous()
											_SCREAMING_SNAKE_CASE				: Optional[int]  	=   input_mask.unsqueeze(1						).expand(-1					,      self.num_choices					,      -1						).contiguous()
											_SCREAMING_SNAKE_CASE				: Optional[Any]  	=   model(
											    __snake_case					,      attention_mask=__snake_case					,      token_type_ids=__snake_case					,      labels=__snake_case					,      )
											self.parent.assertEqual(result.logits.shape					,      (self.batch_size, self.num_choices)						)






							def UpperCAmelCase_			(					self						):
											_SCREAMING_SNAKE_CASE				: List[Any]  	=   self.prepare_config_and_inputs()
											(
											    (
											    _SCREAMING_SNAKE_CASE
											)	, (
											    _SCREAMING_SNAKE_CASE
											)	, (
											    _SCREAMING_SNAKE_CASE
											)	, (
											    _SCREAMING_SNAKE_CASE
											)	, (
											    _SCREAMING_SNAKE_CASE
											)	, (
											    _SCREAMING_SNAKE_CASE
											)	, (
											    _SCREAMING_SNAKE_CASE
											)	, (
											    _SCREAMING_SNAKE_CASE
											)	, 
											)				: List[str]  	=   config_and_inputs
											_SCREAMING_SNAKE_CASE				: Union[str, Any]  	=   {"""input_ids""": input_ids, """token_type_ids""": token_type_ids, """attention_mask""": input_mask}
											return config, inputs_dict





@require_torch
class 					lowercase__						(		_snake_case  ,  _snake_case  ,  unittest.TestCase      ):





							'''simple docstring'''


							A_							:   List[Any]   			=						(
							    (
							        ElectraModel,
							        ElectraForPreTraining,
							        ElectraForMaskedLM,
							        ElectraForCausalLM,
							        ElectraForMultipleChoice,
							        ElectraForTokenClassification,
							        ElectraForSequenceClassification,
							        ElectraForQuestionAnswering,
							    )
							    if is_torch_available()
							    else ()
							)
							A_							:   Optional[Any]   			=						(
							    {
							        """feature-extraction""": ElectraModel,
							        """fill-mask""": ElectraForMaskedLM,
							        """question-answering""": ElectraForQuestionAnswering,
							        """text-classification""": ElectraForSequenceClassification,
							        """text-generation""": ElectraForCausalLM,
							        """token-classification""": ElectraForTokenClassification,
							        """zero-shot""": ElectraForSequenceClassification,
							    }
							    if is_torch_available()
							    else {}
							)
							A_							:   Tuple   			=						True






							def UpperCAmelCase_			(					self					,      __snake_case					,      __snake_case					,      __snake_case=False						):
											_SCREAMING_SNAKE_CASE				: List[Any]  	=   super()._prepare_for_class(__snake_case					,      __snake_case					,      return_labels=__snake_case						)

											if return_labels:
															if model_class in get_values(__snake_case						):
																			_SCREAMING_SNAKE_CASE				: Union[str, Any]  	=   torch.zeros(
																			    (self.model_tester.batch_size, self.model_tester.seq_length)					,      dtype=torch.long					,      device=__snake_case						)
											return inputs_dict






							def UpperCAmelCase_			(					self						):
											_SCREAMING_SNAKE_CASE				: List[str]  	=   ElectraModelTester(self						)
											_SCREAMING_SNAKE_CASE				: int  	=   ConfigTester(self					,      config_class=__snake_case					,      hidden_size=37						)






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






							def UpperCAmelCase_			(					self						):
											_SCREAMING_SNAKE_CASE				: List[Any]  	=   self.model_tester.prepare_config_and_inputs()
											self.model_tester.create_and_check_electra_model(*__snake_case						)






							def UpperCAmelCase_			(					self						):
											_SCREAMING_SNAKE_CASE				: Optional[int]  	=   self.model_tester.prepare_config_and_inputs_for_decoder()
											self.model_tester.create_and_check_electra_model_as_decoder(*__snake_case						)






							def UpperCAmelCase_			(					self						):
											_SCREAMING_SNAKE_CASE				: Tuple  	=   self.model_tester.prepare_config_and_inputs()
											for type in ["absolute", "relative_key", "relative_key_query"]:
															_SCREAMING_SNAKE_CASE				: Optional[Any]  	=   type
															self.model_tester.create_and_check_electra_model(*__snake_case						)






							def UpperCAmelCase_			(					self						):
											_SCREAMING_SNAKE_CASE				: Tuple  	=   self.model_tester.prepare_config_and_inputs()
											self.model_tester.create_and_check_electra_for_masked_lm(*__snake_case						)






							def UpperCAmelCase_			(					self						):
											_SCREAMING_SNAKE_CASE				: Union[str, Any]  	=   self.model_tester.prepare_config_and_inputs()
											self.model_tester.create_and_check_electra_for_token_classification(*__snake_case						)






							def UpperCAmelCase_			(					self						):
											_SCREAMING_SNAKE_CASE				: Union[str, Any]  	=   self.model_tester.prepare_config_and_inputs()
											self.model_tester.create_and_check_electra_for_pretraining(*__snake_case						)






							def UpperCAmelCase_			(					self						):
											_SCREAMING_SNAKE_CASE				: Dict  	=   self.model_tester.prepare_config_and_inputs()
											self.model_tester.create_and_check_electra_for_sequence_classification(*__snake_case						)






							def UpperCAmelCase_			(					self						):
											_SCREAMING_SNAKE_CASE				: Tuple  	=   self.model_tester.prepare_config_and_inputs()
											self.model_tester.create_and_check_electra_for_question_answering(*__snake_case						)






							def UpperCAmelCase_			(					self						):
											_SCREAMING_SNAKE_CASE				: List[Any]  	=   self.model_tester.prepare_config_and_inputs()
											self.model_tester.create_and_check_electra_for_multiple_choice(*__snake_case						)






							@slow
							def UpperCAmelCase_			(					self						):
											for model_name in ELECTRA_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
															_SCREAMING_SNAKE_CASE				: Tuple  	=   ElectraModel.from_pretrained(__snake_case						)
															self.assertIsNotNone(__snake_case						)






							def UpperCAmelCase_			(					self						):
											_SCREAMING_SNAKE_CASE				: Any  	=   self.model_tester.prepare_config_and_inputs_for_decoder()
											self.model_tester.create_and_check_electra_for_causal_lm(*__snake_case						)





@require_torch
class 					lowercase__						(		unittest.TestCase      ):





							'''simple docstring'''


							@slow
							def UpperCAmelCase_			(					self						):
											_SCREAMING_SNAKE_CASE				: int  	=   ElectraModel.from_pretrained("""google/electra-small-discriminator"""						)
											_SCREAMING_SNAKE_CASE				: str  	=   torch.tensor([[0, 345, 232, 328, 740, 140, 1695, 69, 6078, 1588, 2]]						)
											_SCREAMING_SNAKE_CASE				: Dict  	=   torch.tensor([[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]						)
											_SCREAMING_SNAKE_CASE				: int  	=   model(__snake_case					,      attention_mask=__snake_case						)[0]
											_SCREAMING_SNAKE_CASE				: int  	=   torch.Size((1, 11, 256)						)
											self.assertEqual(output.shape					,      __snake_case						)
											_SCREAMING_SNAKE_CASE				: List[str]  	=   torch.tensor(
											    [[[0.4471, 0.6821, -0.3265], [0.4627, 0.5255, -0.3668], [0.4532, 0.3313, -0.4344]]]						)

											self.assertTrue(torch.allclose(output[:, 1:4, 1:4]					,      __snake_case					,      atol=1e-4						)						)








'''simple docstring'''


import argparse
import copy
import json
import multiprocessing
import os
import time

from create_dummy_models import COMPOSITE_MODELS, create_tiny_models
from huggingface_hub import ModelFilter, hf_api

import transformers
from transformers import AutoFeatureExtractor, AutoImageProcessor, AutoTokenizer
from transformers.image_processing_utils import BaseImageProcessor







def     snake_case_     (						):







				"""simple docstring"""





				_SCREAMING_SNAKE_CASE				: str  	=   set()
				# Each auto modeling files contains multiple mappings. Let's get them in a dynamic way.
				for module_name in ["modeling_auto", "modeling_tf_auto", "modeling_flax_auto"]:
								_SCREAMING_SNAKE_CASE				: Any  	=   getattr(transformers.models.auto							,   SCREAMING_SNAKE_CASE__							,   SCREAMING_SNAKE_CASE__  )
								if module is None:
												continue
								# all mappings in a single auto modeling file
								_SCREAMING_SNAKE_CASE				: str  	=   [
								    x
								    for x in dir(SCREAMING_SNAKE_CASE__  )
								    if x.endswith("""_MAPPING_NAMES"""  )
								    and (x.startswith("""MODEL_"""  ) or x.startswith("""TF_MODEL_"""  ) or x.startswith("""FLAX_MODEL_"""  ))
								]
								for name in mapping_names:
												_SCREAMING_SNAKE_CASE				: Optional[int]  	=   getattr(SCREAMING_SNAKE_CASE__							,   SCREAMING_SNAKE_CASE__  )
												if mapping is not None:
																for v in mapping.values():
																				if isinstance(SCREAMING_SNAKE_CASE__							,   (list, tuple)  ):
																								model_names.update(SCREAMING_SNAKE_CASE__  )
																				elif isinstance(SCREAMING_SNAKE_CASE__							,   SCREAMING_SNAKE_CASE__  ):
																								model_names.add(SCREAMING_SNAKE_CASE__  )

				return sorted(SCREAMING_SNAKE_CASE__  )







def     snake_case_     (						):







				"""simple docstring"""





				_SCREAMING_SNAKE_CASE				: Optional[Any]  	=   set(get_all_model_names()  )

				with open("""tests/utils/tiny_model_summary.json"""  ) as fp:
								_SCREAMING_SNAKE_CASE				: Optional[Any]  	=   json.load(SCREAMING_SNAKE_CASE__  )
				_SCREAMING_SNAKE_CASE				: str  	=   set()
				for model_base_name in tiny_model_info:
								tiny_models_names.update(tiny_model_info[model_base_name]["""model_classes"""]  )

				# Remove a tiny model name if one of its framework implementation hasn't yet a tiny version on the Hub.
				_SCREAMING_SNAKE_CASE				: str  	=   model_names.difference(SCREAMING_SNAKE_CASE__  )
				for model_name in copy.copy(SCREAMING_SNAKE_CASE__  ):
								if not model_name.startswith("""TF"""  ) and f"""TF{model_name}""" in not_on_hub:
												tiny_models_names.remove(SCREAMING_SNAKE_CASE__  )
								elif model_name.startswith("""TF"""  ) and model_name[2:] in not_on_hub:
												tiny_models_names.remove(SCREAMING_SNAKE_CASE__  )

				return sorted(SCREAMING_SNAKE_CASE__  )







def     snake_case_     (						SCREAMING_SNAKE_CASE__  ):







				"""simple docstring"""





				_SCREAMING_SNAKE_CASE				: Optional[int]  	=   COMPOSITE_MODELS.values()

				# All tiny model base names on Hub
				_SCREAMING_SNAKE_CASE				: Optional[Any]  	=   get_all_model_names()
				_SCREAMING_SNAKE_CASE				: Optional[int]  	=   hf_api.list_models(
				    filter=ModelFilter(
				        author="""hf-internal-testing"""							,   )  )
				_SCREAMING_SNAKE_CASE				: Optional[Any]  	=   set()
				for x in models:
								_SCREAMING_SNAKE_CASE				: Tuple  	=   x.modelId
								_SCREAMING_SNAKE_CASE	, _SCREAMING_SNAKE_CASE				: Union[str, Any]  	=   model.split("""/"""  )
								if not model.startswith("""tiny-random-"""  ):
												continue
								_SCREAMING_SNAKE_CASE				: List[Any]  	=   model.replace("""tiny-random-"""							,   """"""  )
								if not model[0].isupper():
												continue
								if model not in model_names and model not in special_models:
												continue
								_models.add(SCREAMING_SNAKE_CASE__  )

				_SCREAMING_SNAKE_CASE				: Optional[int]  	=   sorted(_models  )
				# All tiny model names on Hub
				_SCREAMING_SNAKE_CASE				: Dict  	=   {}
				for model in models:
								_SCREAMING_SNAKE_CASE				: str  	=   f"""hf-internal-testing/tiny-random-{model}"""
								_SCREAMING_SNAKE_CASE				: List[Any]  	=   model.split("""-"""  )[0]
								try:
												_SCREAMING_SNAKE_CASE				: Tuple  	=   hf_api.repo_info(SCREAMING_SNAKE_CASE__  )
												_SCREAMING_SNAKE_CASE				: Optional[int]  	=   {
												    """tokenizer_classes""": set(),
												    """processor_classes""": set(),
												    """model_classes""": set(),
												    """sha""": repo_info.sha,
												}
								except Exception:
												continue
								try:
												time.sleep(1  )
												_SCREAMING_SNAKE_CASE				: Optional[int]  	=   AutoTokenizer.from_pretrained(SCREAMING_SNAKE_CASE__  )
												content["tokenizer_classes"].add(tokenizer_fast.__class__.__name__  )
								except Exception:
												pass
								try:
												time.sleep(1  )
												_SCREAMING_SNAKE_CASE				: int  	=   AutoTokenizer.from_pretrained(SCREAMING_SNAKE_CASE__							,   use_fast=SCREAMING_SNAKE_CASE__  )
												content["tokenizer_classes"].add(tokenizer_slow.__class__.__name__  )
								except Exception:
												pass
								try:
												time.sleep(1  )
												_SCREAMING_SNAKE_CASE				: str  	=   AutoImageProcessor.from_pretrained(SCREAMING_SNAKE_CASE__  )
												content["processor_classes"].add(img_p.__class__.__name__  )
								except Exception:
												pass
								try:
												time.sleep(1  )
												_SCREAMING_SNAKE_CASE				: Any  	=   AutoFeatureExtractor.from_pretrained(SCREAMING_SNAKE_CASE__  )
												if not isinstance(SCREAMING_SNAKE_CASE__							,   SCREAMING_SNAKE_CASE__  ):
																content["processor_classes"].add(feat_p.__class__.__name__  )
								except Exception:
												pass
								try:
												time.sleep(1  )
												_SCREAMING_SNAKE_CASE				: int  	=   getattr(SCREAMING_SNAKE_CASE__							,   SCREAMING_SNAKE_CASE__  )
												_SCREAMING_SNAKE_CASE				: Tuple  	=   model_class.from_pretrained(SCREAMING_SNAKE_CASE__  )
												content["model_classes"].add(m.__class__.__name__  )
								except Exception:
												pass
								try:
												time.sleep(1  )
												_SCREAMING_SNAKE_CASE				: List[Any]  	=   getattr(SCREAMING_SNAKE_CASE__							,   f"""TF{model}"""  )
												_SCREAMING_SNAKE_CASE				: Union[str, Any]  	=   model_class.from_pretrained(SCREAMING_SNAKE_CASE__  )
												content["model_classes"].add(m.__class__.__name__  )
								except Exception:
												pass

								_SCREAMING_SNAKE_CASE				: List[Any]  	=   sorted(content["""tokenizer_classes"""]  )
								_SCREAMING_SNAKE_CASE				: Union[str, Any]  	=   sorted(content["""processor_classes"""]  )
								_SCREAMING_SNAKE_CASE				: List[Any]  	=   sorted(content["""model_classes"""]  )

								_SCREAMING_SNAKE_CASE				: List[Any]  	=   content
								with open(os.path.join(SCREAMING_SNAKE_CASE__							,   """hub_tiny_model_summary.json"""  )							,   """w"""  ) as fp:
												json.dump(SCREAMING_SNAKE_CASE__							,   SCREAMING_SNAKE_CASE__							,   ensure_ascii=SCREAMING_SNAKE_CASE__							,   indent=4  )


if __name__ == "__main__":
				UpperCAmelCase_	:     Any							     =	argparse.ArgumentParser()
				parser.add_argument('--num_workers', default=1, type=int, help='The number of workers to run.')
				UpperCAmelCase_	:     Optional[int]							     =	parser.parse_args()

				# This has to be `spawn` to avoid hanging forever!
				multiprocessing.set_start_method('spawn')

				UpperCAmelCase_	:     Any							     =	'tiny_models'
				UpperCAmelCase_	:     Tuple							     =	True
				UpperCAmelCase_	:     Tuple							     =	None
				UpperCAmelCase_	:     Optional[int]							     =	get_tiny_model_names_from_repo()
				UpperCAmelCase_	:     Dict							     =	True
				UpperCAmelCase_	:     str							     =	True
				UpperCAmelCase_	:     Optional[int]							     =	'hf-internal-testing'

				create_tiny_models(
				    output_path,
				    all,
				    model_types,
				    models_to_skip,
				    no_check,
				    upload,
				    organization,
				    token=os.environ.get('TOKEN', None),
				    num_workers=args.num_workers,
				)




