



'''simple docstring'''



import importlib
import json
import os
from collections import OrderedDict
from typing import Dict, Optional, Union

# Build the list of all feature extractors
from ...configuration_utils import PretrainedConfig
from ...dynamic_module_utils import get_class_from_dynamic_module, resolve_trust_remote_code
from ...feature_extraction_utils import FeatureExtractionMixin
from ...utils import CONFIG_NAME, FEATURE_EXTRACTOR_NAME, get_file_from_repo, logging
from .auto_factory import _LazyAutoMapping
from .configuration_auto import (
    CONFIG_MAPPING_NAMES,
    AutoConfig,
    model_type_to_module_name,
    replace_list_option_in_docstrings,
)


lowerCAmelCase	:		Union[str, Any]				=   logging.get_logger(__name__)

lowerCAmelCase	:		str				=   OrderedDict(
    [
        ('''audio-spectrogram-transformer''', '''ASTFeatureExtractor'''),
        ('''beit''', '''BeitFeatureExtractor'''),
        ('''chinese_clip''', '''ChineseCLIPFeatureExtractor'''),
        ('''clap''', '''ClapFeatureExtractor'''),
        ('''clip''', '''CLIPFeatureExtractor'''),
        ('''clipseg''', '''ViTFeatureExtractor'''),
        ('''conditional_detr''', '''ConditionalDetrFeatureExtractor'''),
        ('''convnext''', '''ConvNextFeatureExtractor'''),
        ('''cvt''', '''ConvNextFeatureExtractor'''),
        ('''data2vec-audio''', '''Wav2Vec2FeatureExtractor'''),
        ('''data2vec-vision''', '''BeitFeatureExtractor'''),
        ('''deformable_detr''', '''DeformableDetrFeatureExtractor'''),
        ('''deit''', '''DeiTFeatureExtractor'''),
        ('''detr''', '''DetrFeatureExtractor'''),
        ('''dinat''', '''ViTFeatureExtractor'''),
        ('''donut-swin''', '''DonutFeatureExtractor'''),
        ('''dpt''', '''DPTFeatureExtractor'''),
        ('''encodec''', '''EncodecFeatureExtractor'''),
        ('''flava''', '''FlavaFeatureExtractor'''),
        ('''glpn''', '''GLPNFeatureExtractor'''),
        ('''groupvit''', '''CLIPFeatureExtractor'''),
        ('''hubert''', '''Wav2Vec2FeatureExtractor'''),
        ('''imagegpt''', '''ImageGPTFeatureExtractor'''),
        ('''layoutlmv2''', '''LayoutLMv2FeatureExtractor'''),
        ('''layoutlmv3''', '''LayoutLMv3FeatureExtractor'''),
        ('''levit''', '''LevitFeatureExtractor'''),
        ('''maskformer''', '''MaskFormerFeatureExtractor'''),
        ('''mctct''', '''MCTCTFeatureExtractor'''),
        ('''mobilenet_v1''', '''MobileNetV1FeatureExtractor'''),
        ('''mobilenet_v2''', '''MobileNetV2FeatureExtractor'''),
        ('''mobilevit''', '''MobileViTFeatureExtractor'''),
        ('''nat''', '''ViTFeatureExtractor'''),
        ('''owlvit''', '''OwlViTFeatureExtractor'''),
        ('''perceiver''', '''PerceiverFeatureExtractor'''),
        ('''poolformer''', '''PoolFormerFeatureExtractor'''),
        ('''regnet''', '''ConvNextFeatureExtractor'''),
        ('''resnet''', '''ConvNextFeatureExtractor'''),
        ('''segformer''', '''SegformerFeatureExtractor'''),
        ('''sew''', '''Wav2Vec2FeatureExtractor'''),
        ('''sew-d''', '''Wav2Vec2FeatureExtractor'''),
        ('''speech_to_text''', '''Speech2TextFeatureExtractor'''),
        ('''speecht5''', '''SpeechT5FeatureExtractor'''),
        ('''swiftformer''', '''ViTFeatureExtractor'''),
        ('''swin''', '''ViTFeatureExtractor'''),
        ('''swinv2''', '''ViTFeatureExtractor'''),
        ('''table-transformer''', '''DetrFeatureExtractor'''),
        ('''timesformer''', '''VideoMAEFeatureExtractor'''),
        ('''tvlt''', '''TvltFeatureExtractor'''),
        ('''unispeech''', '''Wav2Vec2FeatureExtractor'''),
        ('''unispeech-sat''', '''Wav2Vec2FeatureExtractor'''),
        ('''van''', '''ConvNextFeatureExtractor'''),
        ('''videomae''', '''VideoMAEFeatureExtractor'''),
        ('''vilt''', '''ViltFeatureExtractor'''),
        ('''vit''', '''ViTFeatureExtractor'''),
        ('''vit_mae''', '''ViTFeatureExtractor'''),
        ('''vit_msn''', '''ViTFeatureExtractor'''),
        ('''wav2vec2''', '''Wav2Vec2FeatureExtractor'''),
        ('''wav2vec2-conformer''', '''Wav2Vec2FeatureExtractor'''),
        ('''wavlm''', '''Wav2Vec2FeatureExtractor'''),
        ('''whisper''', '''WhisperFeatureExtractor'''),
        ('''xclip''', '''CLIPFeatureExtractor'''),
        ('''yolos''', '''YolosFeatureExtractor'''),
    ]
)

lowerCAmelCase	:		Any				=   _LazyAutoMapping(CONFIG_MAPPING_NAMES, FEATURE_EXTRACTOR_MAPPING_NAMES)



def   __lowerCAmelCase					(							lowerCamelCase   :						str					):






	'''simple docstring'''




	for module_name, extractors in FEATURE_EXTRACTOR_MAPPING_NAMES.items():
		if class_name in extractors:
			__lowerCAmelCase												=  model_type_to_module_name(lowerCamelCase					)

			__lowerCAmelCase												=  importlib.import_module(f'''.{module_name}'''				,		"transformers.models"					)
			try:
				return getattr(lowerCamelCase				,		lowerCamelCase					)
			except AttributeError:
				continue

	for _, extractor in FEATURE_EXTRACTOR_MAPPING._extra_content.items():
		if getattr(lowerCamelCase				,		"__name__"				,		lowerCamelCase					) == class_name:
			return extractor

    # We did not fine the class, but maybe it's because a dep is missing. In that case, the class will be in the main
    # init and we return the proper dummy to get an appropriate error message.
	__lowerCAmelCase												=  importlib.import_module("transformers"					)
	if hasattr(lowerCamelCase				,		lowerCamelCase					):
		return getattr(lowerCamelCase				,		lowerCamelCase					)

	return None



def   __lowerCAmelCase					(							lowerCamelCase   :						Union[str, os.PathLike]				,		lowerCamelCase   :						Optional[Union[str, os.PathLike]] = None				,		lowerCamelCase   :						bool = False				,		lowerCamelCase   :						bool = False				,		lowerCamelCase   :						Optional[Dict[str, str]] = None				,		lowerCamelCase   :						Optional[Union[bool, str]] = None				,		lowerCamelCase   :						Optional[str] = None				,		lowerCamelCase   :						bool = False				,		**lowerCamelCase   :						Any				,		):






	'''simple docstring'''




	__lowerCAmelCase												=  get_file_from_repo(
	    lowerCamelCase				,		lowerCamelCase				,		cache_dir=lowerCamelCase				,		force_download=lowerCamelCase				,		resume_download=lowerCamelCase				,		proxies=lowerCamelCase				,		use_auth_token=lowerCamelCase				,		revision=lowerCamelCase				,		local_files_only=lowerCamelCase				,		)
	if resolved_config_file is None:
		logger.info(
		    "Could not locate the feature extractor configuration file, will try to use the model config instead."					)
		return {}

	with open(lowerCamelCase				,		encoding="utf-8"					) as reader:
		return json.load(lowerCamelCase					)






class 					UpperCAmelCase__	:



					def __init__(    self     )     ->			Optional[Any]:
						raise EnvironmentError(
						    "AutoFeatureExtractor is designed to be instantiated "
						    "using the `AutoFeatureExtractor.from_pretrained(pretrained_model_name_or_path)` method."     )



					@classmethod
					@replace_list_option_in_docstrings(UpperCamelCase     )
					def        UpperCAmelCase_ (    cls			,				UpperCamelCase			,				**UpperCamelCase     )     ->			int:
						__lowerCAmelCase												=  kwargs.pop("config"			,				UpperCamelCase     )
						__lowerCAmelCase												=  kwargs.pop("trust_remote_code"			,				UpperCamelCase     )
						__lowerCAmelCase												=  True

						__lowerCAmelCase							,       __lowerCAmelCase												=  FeatureExtractionMixin.get_feature_extractor_dict(UpperCamelCase			,				**UpperCamelCase     )
						__lowerCAmelCase												=  config_dict.get("feature_extractor_type"			,				UpperCamelCase     )
						__lowerCAmelCase												=  None
						if "AutoFeatureExtractor" in config_dict.get("auto_map"			,				{}     ):
							__lowerCAmelCase												=  config_dict["auto_map"]["AutoFeatureExtractor"]

						# If we don't find the feature extractor class in the feature extractor config, let's try the model config.
						if feature_extractor_class is None and feature_extractor_auto_map is None:
							if not isinstance(UpperCamelCase			,				UpperCamelCase     ):
								__lowerCAmelCase												=  AutoConfig.from_pretrained(UpperCamelCase			,				**UpperCamelCase     )
							# It could be in `config.feature_extractor_type``
							__lowerCAmelCase												=  getattr(UpperCamelCase			,				"feature_extractor_type"			,				UpperCamelCase     )
							if hasattr(UpperCamelCase			,				"auto_map"     ) and "AutoFeatureExtractor" in config.auto_map:
								__lowerCAmelCase												=  config.auto_map["AutoFeatureExtractor"]

						if feature_extractor_class is not None:
							__lowerCAmelCase												=  feature_extractor_class_from_name(UpperCamelCase     )

						__lowerCAmelCase												=  feature_extractor_auto_map is not None
						__lowerCAmelCase												=  feature_extractor_class is not None or type(UpperCamelCase     ) in FEATURE_EXTRACTOR_MAPPING
						__lowerCAmelCase												=  resolve_trust_remote_code(
						    UpperCamelCase			,				UpperCamelCase			,				UpperCamelCase			,				UpperCamelCase     )

						if has_remote_code and trust_remote_code:
							__lowerCAmelCase												=  get_class_from_dynamic_module(
							    UpperCamelCase			,				UpperCamelCase			,				**UpperCamelCase     )
							__lowerCAmelCase												=  kwargs.pop("code_revision"			,				UpperCamelCase     )
							if os.path.isdir(UpperCamelCase     ):
								feature_extractor_class.register_for_auto_class()
							return feature_extractor_class.from_dict(UpperCamelCase			,				**UpperCamelCase     )
						elif feature_extractor_class is not None:
							return feature_extractor_class.from_dict(UpperCamelCase			,				**UpperCamelCase     )
						# Last try: we use the FEATURE_EXTRACTOR_MAPPING.
						elif type(UpperCamelCase     ) in FEATURE_EXTRACTOR_MAPPING:
							__lowerCAmelCase												=  FEATURE_EXTRACTOR_MAPPING[type(UpperCamelCase     )]
							return feature_extractor_class.from_dict(UpperCamelCase			,				**UpperCamelCase     )

						raise ValueError(
						    F'''Unrecognized feature extractor in {pretrained_model_name_or_path}. Should have a '''
						    F'''`feature_extractor_type` key in its {FEATURE_EXTRACTOR_NAME} of {CONFIG_NAME}, or one of the following '''
						    F'''`model_type` keys in its {CONFIG_NAME}: {', '.join(c for c in FEATURE_EXTRACTOR_MAPPING_NAMES.keys()     )}'''     )



					@staticmethod
					def        UpperCAmelCase_ (    UpperCamelCase			,				UpperCamelCase     )     ->			Any:
						FEATURE_EXTRACTOR_MAPPING.register(UpperCamelCase			,				UpperCamelCase     )




'''simple docstring'''



from typing import TYPE_CHECKING

from ...utils import (
    OptionalDependencyNotAvailable,
    _LazyModule,
    is_flax_available,
    is_tf_available,
    is_tokenizers_available,
    is_torch_available,
)


lowerCAmelCase	:		Union[str, Any]				=   {
    '''configuration_distilbert''': [
        '''DISTILBERT_PRETRAINED_CONFIG_ARCHIVE_MAP''',
        '''DistilBertConfig''',
        '''DistilBertOnnxConfig''',
    ],
    '''tokenization_distilbert''': ['''DistilBertTokenizer'''],
}

try:
	if not is_tokenizers_available():
		raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
	pass
else:
	lowerCAmelCase	:		Tuple				=   ['''DistilBertTokenizerFast''']

try:
	if not is_torch_available():
		raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
	pass
else:
	lowerCAmelCase	:		Tuple				=   [
	    '''DISTILBERT_PRETRAINED_MODEL_ARCHIVE_LIST''',
	    '''DistilBertForMaskedLM''',
	    '''DistilBertForMultipleChoice''',
	    '''DistilBertForQuestionAnswering''',
	    '''DistilBertForSequenceClassification''',
	    '''DistilBertForTokenClassification''',
	    '''DistilBertModel''',
	    '''DistilBertPreTrainedModel''',
	]

try:
	if not is_tf_available():
		raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
	pass
else:
	lowerCAmelCase	:		List[str]				=   [
	    '''TF_DISTILBERT_PRETRAINED_MODEL_ARCHIVE_LIST''',
	    '''TFDistilBertForMaskedLM''',
	    '''TFDistilBertForMultipleChoice''',
	    '''TFDistilBertForQuestionAnswering''',
	    '''TFDistilBertForSequenceClassification''',
	    '''TFDistilBertForTokenClassification''',
	    '''TFDistilBertMainLayer''',
	    '''TFDistilBertModel''',
	    '''TFDistilBertPreTrainedModel''',
	]

try:
	if not is_flax_available():
		raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
	pass
else:
	lowerCAmelCase	:		Optional[int]				=   [
	    '''FlaxDistilBertForMaskedLM''',
	    '''FlaxDistilBertForMultipleChoice''',
	    '''FlaxDistilBertForQuestionAnswering''',
	    '''FlaxDistilBertForSequenceClassification''',
	    '''FlaxDistilBertForTokenClassification''',
	    '''FlaxDistilBertModel''',
	    '''FlaxDistilBertPreTrainedModel''',
	]


if TYPE_CHECKING:
	from .configuration_distilbert import (
	    DISTILBERT_PRETRAINED_CONFIG_ARCHIVE_MAP,
	    DistilBertConfig,
	    DistilBertOnnxConfig,
	)
	from .tokenization_distilbert import DistilBertTokenizer

	try:
		if not is_tokenizers_available():
			raise OptionalDependencyNotAvailable()
	except OptionalDependencyNotAvailable:
		pass
	else:
		from .tokenization_distilbert_fast import DistilBertTokenizerFast

	try:
		if not is_torch_available():
			raise OptionalDependencyNotAvailable()
	except OptionalDependencyNotAvailable:
		pass
	else:
		from .modeling_distilbert import (
		    DISTILBERT_PRETRAINED_MODEL_ARCHIVE_LIST,
		    DistilBertForMaskedLM,
		    DistilBertForMultipleChoice,
		    DistilBertForQuestionAnswering,
		    DistilBertForSequenceClassification,
		    DistilBertForTokenClassification,
		    DistilBertModel,
		    DistilBertPreTrainedModel,
		)

	try:
		if not is_tf_available():
			raise OptionalDependencyNotAvailable()
	except OptionalDependencyNotAvailable:
		pass
	else:
		from .modeling_tf_distilbert import (
		    TF_DISTILBERT_PRETRAINED_MODEL_ARCHIVE_LIST,
		    TFDistilBertForMaskedLM,
		    TFDistilBertForMultipleChoice,
		    TFDistilBertForQuestionAnswering,
		    TFDistilBertForSequenceClassification,
		    TFDistilBertForTokenClassification,
		    TFDistilBertMainLayer,
		    TFDistilBertModel,
		    TFDistilBertPreTrainedModel,
		)

	try:
		if not is_flax_available():
			raise OptionalDependencyNotAvailable()
	except OptionalDependencyNotAvailable:
		pass
	else:
		from .modeling_flax_distilbert import (
		    FlaxDistilBertForMaskedLM,
		    FlaxDistilBertForMultipleChoice,
		    FlaxDistilBertForQuestionAnswering,
		    FlaxDistilBertForSequenceClassification,
		    FlaxDistilBertForTokenClassification,
		    FlaxDistilBertModel,
		    FlaxDistilBertPreTrainedModel,
		)

else:
	import sys

	lowerCAmelCase	:		List[str]				=   _LazyModule(__name__, globals()['''__file__'''], _import_structure, module_spec=__spec__)