


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,
)


a			:			Tuple												=					logging.get_logger(__name__)

a			:			Tuple												=					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'''),
    ]
)

a			:			Any												=					_LazyAutoMapping(CONFIG_MAPPING_NAMES, FEATURE_EXTRACTOR_MAPPING_NAMES)


def 		lowercase_	(  _UpperCamelCase	):


			'''simple docstring'''







			for module_name, extractors in FEATURE_EXTRACTOR_MAPPING_NAMES.items():
						if class_name in extractors:
									__lowercase			       = model_type_to_module_name(_UpperCamelCase	)

									__lowercase			       = importlib.import_module(F'.{module_name}'							,      '''transformers.models'''	)
									try:
												return getattr(_UpperCamelCase							,      _UpperCamelCase	)
									except AttributeError:
												continue

			for _, extractor in FEATURE_EXTRACTOR_MAPPING._extra_content.items():
						if getattr(_UpperCamelCase							,      '''__name__'''							,      _UpperCamelCase	) == 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.
			__lowercase			       = importlib.import_module('''transformers'''	)
			if hasattr(_UpperCamelCase							,      _UpperCamelCase	):
						return getattr(_UpperCamelCase							,      _UpperCamelCase	)

			return None


def 		lowercase_	(  _UpperCamelCase							,      _UpperCamelCase = None							,      _UpperCamelCase = False							,      _UpperCamelCase = False							,      _UpperCamelCase = None							,      _UpperCamelCase = None							,      _UpperCamelCase = None							,      _UpperCamelCase = False							,      **_UpperCamelCase							,      ):


			'''simple docstring'''







			__lowercase			       = get_file_from_repo(
			    _UpperCamelCase							,      _UpperCamelCase							,      cache_dir=_UpperCamelCase							,      force_download=_UpperCamelCase							,      resume_download=_UpperCamelCase							,      proxies=_UpperCamelCase							,      use_auth_token=_UpperCamelCase							,      revision=_UpperCamelCase							,      local_files_only=_UpperCamelCase							,      )
			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(_UpperCamelCase							,      encoding='''utf-8'''	) as reader:
						return json.load(_UpperCamelCase	)





class 						lowerCamelCase_							:



					'''simple docstring'''







					def __init__(					self    ) ->      Tuple:







								'''simple docstring'''

								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(snake_case_    )
					def A   (					cls			,							snake_case_			,							**snake_case_    ) ->      str:







								'''simple docstring'''

								__lowercase			       = kwargs.pop('''config'''			,							snake_case_    )
								__lowercase			       = kwargs.pop('''trust_remote_code'''			,							snake_case_    )
								__lowercase			       = True

								__lowercase       ,			__lowercase			       = FeatureExtractionMixin.get_feature_extractor_dict(snake_case_			,							**snake_case_    )
								__lowercase			       = config_dict.get('''feature_extractor_type'''			,							snake_case_    )
								__lowercase			       = None
								if "AutoFeatureExtractor" in config_dict.get('''auto_map'''			,							{}    ):
											__lowercase			       = 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(snake_case_			,							snake_case_    ):
														__lowercase			       = AutoConfig.from_pretrained(snake_case_			,							**snake_case_    )
											# It could be in `config.feature_extractor_type``
											__lowercase			       = getattr(snake_case_			,							'''feature_extractor_type'''			,							snake_case_    )
											if hasattr(snake_case_			,							'''auto_map'''    ) and "AutoFeatureExtractor" in config.auto_map:
														__lowercase			       = config.auto_map['''AutoFeatureExtractor''']

								if feature_extractor_class is not None:
											__lowercase			       = feature_extractor_class_from_name(snake_case_    )

								__lowercase			       = feature_extractor_auto_map is not None
								__lowercase			       = feature_extractor_class is not None or type(snake_case_    ) in FEATURE_EXTRACTOR_MAPPING
								__lowercase			       = resolve_trust_remote_code(
								    snake_case_			,							snake_case_			,							snake_case_			,							snake_case_    )

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

								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 A   (					snake_case_			,							snake_case_    ) ->      List[str]:







								'''simple docstring'''

								FEATURE_EXTRACTOR_MAPPING.register(snake_case_			,							snake_case_    )






import copy
from dataclasses import dataclass, field
from typing import ClassVar, Dict

from ..features import Audio, Features, Value
from .base import TaskTemplate
@dataclass(frozen=lowerCAmelCase__					)
class 						lowerCamelCase_							(					lowerCAmelCase__					):



					'''simple docstring'''







					__UpperCAmelCase							  =					field(default="automatic-speech-recognition"  ,  metadata={"include_in_asdict_even_if_is_default": True}					)
					__UpperCAmelCase							  =					Features({"audio": Audio()}					)
					__UpperCAmelCase							  =					Features({"transcription": Value("string"					)}					)
					__UpperCAmelCase							  =					"audio"
					__UpperCAmelCase							  =					"transcription"






					def A   (					self			,							snake_case_    ) ->      Any:







								'''simple docstring'''

								if self.audio_column not in features:
											raise ValueError(F'Column {self.audio_column} is not present in features.'    )
								if not isinstance(features[self.audio_column]			,							snake_case_    ):
											raise ValueError(F'Column {self.audio_column} is not an Audio type.'    )
								__lowercase			       = copy.deepcopy(self    )
								__lowercase			       = self.input_schema.copy()
								__lowercase			       = features[self.audio_column]
								__lowercase			       = input_schema
								return task_template






					@property
					def A   (					self    ) ->      Dict[str, str]:







								'''simple docstring'''

								return {self.audio_column: "audio", self.transcription_column: "transcription"}


