

'''simple docstring'''

import argparse
import json
import os

import fairseq
import torch
from fairseq.data import Dictionary

from transformers import (
    WavaVecaConfig,
    WavaVecaCTCTokenizer,
    WavaVecaFeatureExtractor,
    WavaVecaForCTC,
    WavaVecaForPreTraining,
    WavaVecaProcessor,
    logging,
)
from transformers.models.wavaveca.modeling_wavaveca import WavaVecaForSequenceClassification


logging.set_verbosity_info()
SCREAMING_SNAKE_CASE							:				Optional[int]     	=			logging.get_logger(__name__)

SCREAMING_SNAKE_CASE							:				Dict     	=			{
    "post_extract_proj": "feature_projection.projection",
    "encoder.pos_conv.0": "encoder.pos_conv_embed.conv",
    "self_attn.k_proj": "encoder.layers.*.attention.k_proj",
    "self_attn.v_proj": "encoder.layers.*.attention.v_proj",
    "self_attn.q_proj": "encoder.layers.*.attention.q_proj",
    "self_attn.out_proj": "encoder.layers.*.attention.out_proj",
    "self_attn_layer_norm": "encoder.layers.*.layer_norm",
    "fc1": "encoder.layers.*.feed_forward.intermediate_dense",
    "fc2": "encoder.layers.*.feed_forward.output_dense",
    "final_layer_norm": "encoder.layers.*.final_layer_norm",
    "encoder.layer_norm": "encoder.layer_norm",
    "adapter_layer": "encoder.layers.*.adapter_layer",
    "w2v_model.layer_norm": "feature_projection.layer_norm",
    "quantizer.weight_proj": "quantizer.weight_proj",
    "quantizer.vars": "quantizer.codevectors",
    "project_q": "project_q",
    "final_proj": "project_hid",
    "w2v_encoder.proj": "lm_head",
    "mask_emb": "masked_spec_embed",
    "pooling_layer.linear": "projector",
    "pooling_layer.projection": "classifier",
}
SCREAMING_SNAKE_CASE							:				Optional[int]     	=			[
    "lm_head",
    "quantizer.weight_proj",
    "quantizer.codevectors",
    "project_q",
    "project_hid",
    "projector",
    "classifier",
]




def 							_UpperCamelCase				(   lowerCAmelCase__:					Optional[Any]   )      -> Optional[int]:
							SCREAMING_SNAKE_CASE_				=				{}
							with open(lowerCAmelCase__		,'r'   ) as file:
														for line_number, line in enumerate(lowerCAmelCase__   ):
																					SCREAMING_SNAKE_CASE_				=				line.strip()
																					if line:
																												SCREAMING_SNAKE_CASE_				=				line.split()
																												SCREAMING_SNAKE_CASE_				=				line_number
																												SCREAMING_SNAKE_CASE_				=				words[0]
																												SCREAMING_SNAKE_CASE_				=				value
							return result




def 							_UpperCamelCase				(   lowerCAmelCase__:					Optional[Any]		,lowerCAmelCase__:					List[str]		,lowerCAmelCase__:					int		,lowerCAmelCase__:					Optional[int]		,lowerCAmelCase__:					Optional[Any]   )      -> List[str]:
							for attribute in key.split('.'   ):
														SCREAMING_SNAKE_CASE_				=				getattr(lowerCAmelCase__		,lowerCAmelCase__   )

							SCREAMING_SNAKE_CASE_				=				None
							for param_key in PARAM_MAPPING.keys():
														if full_name.endswith(lowerCAmelCase__   ):
																					SCREAMING_SNAKE_CASE_				=				PARAM_MAPPING[full_name.split('.'   )[-1]]
																					SCREAMING_SNAKE_CASE_				=				'param'

							if weight_type is not None and weight_type != "param":
														SCREAMING_SNAKE_CASE_				=				getattr(lowerCAmelCase__		,lowerCAmelCase__   ).shape
							elif weight_type is not None and weight_type == "param":
														SCREAMING_SNAKE_CASE_				=				hf_pointer
														for attribute in hf_param_name.split('.'   ):
																					SCREAMING_SNAKE_CASE_				=				getattr(lowerCAmelCase__		,lowerCAmelCase__   )
														SCREAMING_SNAKE_CASE_				=				shape_pointer.shape

														# let's reduce dimension
														SCREAMING_SNAKE_CASE_				=				value[0]
							else:
														SCREAMING_SNAKE_CASE_				=				hf_pointer.shape

							if hf_shape != value.shape:
														raise ValueError(
														    F"""Shape of hf {key + "." + weight_type if weight_type is not None else ""} is {hf_shape}, but should be"""
														    F""" {value.shape} for {full_name}"""   )

							if weight_type == "weight":
														SCREAMING_SNAKE_CASE_				=				value
							elif weight_type == "weight_g":
														SCREAMING_SNAKE_CASE_				=				value
							elif weight_type == "weight_v":
														SCREAMING_SNAKE_CASE_				=				value
							elif weight_type == "bias":
														SCREAMING_SNAKE_CASE_				=				value
							elif weight_type == "param":
														for attribute in hf_param_name.split('.'   ):
																					SCREAMING_SNAKE_CASE_				=				getattr(lowerCAmelCase__		,lowerCAmelCase__   )
														SCREAMING_SNAKE_CASE_				=				value
							else:
														SCREAMING_SNAKE_CASE_				=				value

							logger.info(F"""{key + "." + weight_type if weight_type is not None else ""} was initialized from {full_name}."""   )




def 							_UpperCamelCase				(   lowerCAmelCase__:					List[str]		,lowerCAmelCase__:					List[Any]		,lowerCAmelCase__:					int		,lowerCAmelCase__:					List[Any]		,lowerCAmelCase__:					List[str]   )      -> Union[str, Any]:
							SCREAMING_SNAKE_CASE_				=				None
							for param_key in PARAM_MAPPING.keys():
														if full_name.endswith(lowerCAmelCase__   ):
																					SCREAMING_SNAKE_CASE_				=				PARAM_MAPPING[full_name.split('.'   )[-1]]
																					SCREAMING_SNAKE_CASE_				=				'param'

							if weight_type is not None and weight_type != "param":
														SCREAMING_SNAKE_CASE_				=				'.'.join([key, weight_type]   )
							elif weight_type is not None and weight_type == "param":
														SCREAMING_SNAKE_CASE_				=				'.'.join([key, hf_param_name]   )
							else:
														SCREAMING_SNAKE_CASE_				=				key

							SCREAMING_SNAKE_CASE_				=				value if 'lm_head' in full_key else value[0]


SCREAMING_SNAKE_CASE							:				Optional[Any]     	=			{
    "W_a": "linear_1.weight",
    "W_b": "linear_2.weight",
    "b_a": "linear_1.bias",
    "b_b": "linear_2.bias",
    "ln_W": "norm.weight",
    "ln_b": "norm.bias",
}




def 							_UpperCamelCase				(   lowerCAmelCase__:					Union[str, Any]		,lowerCAmelCase__:					Optional[int]		,lowerCAmelCase__:					Tuple=None		,lowerCAmelCase__:					str=None   )      -> List[Any]:
							SCREAMING_SNAKE_CASE_				=				False
							for key, mapped_key in MAPPING.items():
														SCREAMING_SNAKE_CASE_				=				'wav2vec2.' + mapped_key if mapped_key not in TOP_LEVEL_KEYS else mapped_key
														if key in name or key.split('w2v_model.'   )[-1] == name.split('.'   )[0]:
																					SCREAMING_SNAKE_CASE_				=				True
																					if "*" in mapped_key:
																												SCREAMING_SNAKE_CASE_				=				name.split(lowerCAmelCase__   )[0].split('.'   )[-2]
																												SCREAMING_SNAKE_CASE_				=				mapped_key.replace('*'		,lowerCAmelCase__   )
																					if "weight_g" in name:
																												SCREAMING_SNAKE_CASE_				=				'weight_g'
																					elif "weight_v" in name:
																												SCREAMING_SNAKE_CASE_				=				'weight_v'
																					elif "bias" in name:
																												SCREAMING_SNAKE_CASE_				=				'bias'
																					elif "weight" in name:
																												# TODO: don't match quantizer.weight_proj
																												SCREAMING_SNAKE_CASE_				=				'weight'
																					else:
																												SCREAMING_SNAKE_CASE_				=				None
																					if hf_dict is not None:
																												rename_dict(lowerCAmelCase__		,lowerCAmelCase__		,lowerCAmelCase__		,lowerCAmelCase__		,lowerCAmelCase__   )
																					else:
																												set_recursively(lowerCAmelCase__		,lowerCAmelCase__		,lowerCAmelCase__		,lowerCAmelCase__		,lowerCAmelCase__   )
																					return is_used
							return is_used




def 							_UpperCamelCase				(   lowerCAmelCase__:					str		,lowerCAmelCase__:					List[Any]		,lowerCAmelCase__:					List[Any]   )      -> List[Any]:
							SCREAMING_SNAKE_CASE_				=				[]
							SCREAMING_SNAKE_CASE_				=				fairseq_model.state_dict()

							SCREAMING_SNAKE_CASE_				=				hf_model.wavaveca.feature_extractor

							for name, value in fairseq_dict.items():
														SCREAMING_SNAKE_CASE_				=				False
														if "conv_layers" in name:
																					load_conv_layer(
																					    lowerCAmelCase__		,lowerCAmelCase__		,lowerCAmelCase__		,lowerCAmelCase__		,hf_model.config.feat_extract_norm == 'group'		,)
																					SCREAMING_SNAKE_CASE_				=				True
														else:
																					SCREAMING_SNAKE_CASE_				=				load_wavaveca_layer(lowerCAmelCase__		,lowerCAmelCase__		,lowerCAmelCase__   )
														if not is_used:
																					unused_weights.append(lowerCAmelCase__   )

							logger.warning(F"""Unused weights: {unused_weights}"""   )




def 							_UpperCamelCase				(   lowerCAmelCase__:					Union[str, Any]		,lowerCAmelCase__:					List[str]		,lowerCAmelCase__:					List[str]		,lowerCAmelCase__:					str		,lowerCAmelCase__:					str   )      -> int:
							SCREAMING_SNAKE_CASE_				=				full_name.split('conv_layers.'   )[-1]
							SCREAMING_SNAKE_CASE_				=				name.split('.'   )
							SCREAMING_SNAKE_CASE_				=				int(items[0]   )
							SCREAMING_SNAKE_CASE_				=				int(items[1]   )

							if type_id == 0:
														if "bias" in name:
																					if value.shape != feature_extractor.conv_layers[layer_id].conv.bias.data.shape:
																												raise ValueError(
																												    F"""{full_name} has size {value.shape}, but"""
																												    F""" {feature_extractor.conv_layers[layer_id].conv.bias.data.shape} was found."""   )
																					SCREAMING_SNAKE_CASE_				=				value
																					logger.info(F"""Feat extract conv layer {layer_id} was initialized from {full_name}."""   )
														elif "weight" in name:
																					if value.shape != feature_extractor.conv_layers[layer_id].conv.weight.data.shape:
																												raise ValueError(
																												    F"""{full_name} has size {value.shape}, but"""
																												    F""" {feature_extractor.conv_layers[layer_id].conv.weight.data.shape} was found."""   )
																					SCREAMING_SNAKE_CASE_				=				value
																					logger.info(F"""Feat extract conv layer {layer_id} was initialized from {full_name}."""   )
							elif (type_id == 2 and not use_group_norm) or (type_id == 2 and layer_id == 0 and use_group_norm):
														if "bias" in name:
																					if value.shape != feature_extractor.conv_layers[layer_id].layer_norm.bias.data.shape:
																												raise ValueError(
																												    F"""{full_name} has size {value.shape}, but"""
																												    F""" {feature_extractor.conv_layers[layer_id].layer_norm.bias.data.shape} was found."""   )
																					SCREAMING_SNAKE_CASE_				=				value
																					logger.info(F"""Feat extract layer norm weight of layer {layer_id} was initialized from {full_name}."""   )
														elif "weight" in name:
																					if value.shape != feature_extractor.conv_layers[layer_id].layer_norm.weight.data.shape:
																												raise ValueError(
																												    F"""{full_name} has size {value.shape}, but"""
																												    F""" {feature_extractor.conv_layers[layer_id].layer_norm.weight.data.shape} was found."""   )
																					SCREAMING_SNAKE_CASE_				=				value
																					logger.info(F"""Feat extract layer norm weight of layer {layer_id} was initialized from {full_name}."""   )
							else:
														unused_weights.append(lowerCAmelCase__   )




@torch.no_grad()
def 							_UpperCamelCase				(   lowerCAmelCase__:					int		,lowerCAmelCase__:					List[Any]		,lowerCAmelCase__:					Optional[Any]=None		,lowerCAmelCase__:					List[str]=None		,lowerCAmelCase__:					Dict=True		,lowerCAmelCase__:					Optional[Any]=False   )      -> Tuple:
							if config_path is not None:
														SCREAMING_SNAKE_CASE_				=				WavaVecaConfig.from_pretrained(lowerCAmelCase__   )
							else:
														SCREAMING_SNAKE_CASE_				=				WavaVecaConfig()

							if is_seq_class:
														SCREAMING_SNAKE_CASE_				=				read_txt_into_dict(lowerCAmelCase__   )
														SCREAMING_SNAKE_CASE_				=				idalabel
														SCREAMING_SNAKE_CASE_				=				WavaVecaForSequenceClassification(lowerCAmelCase__   )
														SCREAMING_SNAKE_CASE_				=				WavaVecaFeatureExtractor(
														    feature_size=1		,sampling_rate=1_6000		,padding_value=0		,do_normalize=lowerCAmelCase__		,return_attention_mask=lowerCAmelCase__		,)
														feature_extractor.save_pretrained(lowerCAmelCase__   )

							elif is_finetuned:
														if dict_path:
																					SCREAMING_SNAKE_CASE_				=				Dictionary.load(lowerCAmelCase__   )

																					# important change bos & pad token id since CTC symbol is <pad> and
																					# not <s> as in fairseq
																					SCREAMING_SNAKE_CASE_				=				target_dict.pad_index
																					SCREAMING_SNAKE_CASE_				=				target_dict.bos_index
																					SCREAMING_SNAKE_CASE_				=				target_dict.eos_index
																					SCREAMING_SNAKE_CASE_				=				len(target_dict.symbols   )
																					SCREAMING_SNAKE_CASE_				=				os.path.join(lowerCAmelCase__		,'vocab.json'   )
																					if not os.path.isdir(lowerCAmelCase__   ):
																												logger.error('--pytorch_dump_folder_path ({}) should be a directory'.format(lowerCAmelCase__   )   )
																												return
																					os.makedirs(lowerCAmelCase__		,exist_ok=lowerCAmelCase__   )
																					SCREAMING_SNAKE_CASE_				=				target_dict.indices

																					# fairseq has the <pad> and <s> switched
																					SCREAMING_SNAKE_CASE_				=				0
																					SCREAMING_SNAKE_CASE_				=				1
																					with open(lowerCAmelCase__		,'w'		,encoding='utf-8'   ) as vocab_handle:
																												json.dump(lowerCAmelCase__		,lowerCAmelCase__   )
																					SCREAMING_SNAKE_CASE_				=				WavaVecaCTCTokenizer(
																					    lowerCAmelCase__		,unk_token=target_dict.unk_word		,pad_token=target_dict.pad_word		,bos_token=target_dict.bos_word		,eos_token=target_dict.eos_word		,word_delimiter_token='|'		,do_lower_case=lowerCAmelCase__		,)
																					SCREAMING_SNAKE_CASE_				=				True if config.feat_extract_norm == 'layer' else False
																					SCREAMING_SNAKE_CASE_				=				WavaVecaFeatureExtractor(
																					    feature_size=1		,sampling_rate=1_6000		,padding_value=0		,do_normalize=lowerCAmelCase__		,return_attention_mask=lowerCAmelCase__		,)
																					SCREAMING_SNAKE_CASE_				=				WavaVecaProcessor(feature_extractor=lowerCAmelCase__		,tokenizer=lowerCAmelCase__   )
																					processor.save_pretrained(lowerCAmelCase__   )

														SCREAMING_SNAKE_CASE_				=				WavaVecaForCTC(lowerCAmelCase__   )
							else:
														SCREAMING_SNAKE_CASE_				=				WavaVecaForPreTraining(lowerCAmelCase__   )

							if is_finetuned or is_seq_class:
														SCREAMING_SNAKE_CASE_				,    SCREAMING_SNAKE_CASE_				,    SCREAMING_SNAKE_CASE_				=				fairseq.checkpoint_utils.load_model_ensemble_and_task(
														    [checkpoint_path]		,arg_overrides={'data': '/'.join(dict_path.split('/'   )[:-1]   )}   )
							else:
														SCREAMING_SNAKE_CASE_				=				argparse.Namespace(task='audio_pretraining'   )
														SCREAMING_SNAKE_CASE_				=				fairseq.tasks.setup_task(lowerCAmelCase__   )

														SCREAMING_SNAKE_CASE_				,    SCREAMING_SNAKE_CASE_				,    SCREAMING_SNAKE_CASE_				=				fairseq.checkpoint_utils.load_model_ensemble_and_task([checkpoint_path]		,task=lowerCAmelCase__   )

							SCREAMING_SNAKE_CASE_				=				model[0].eval()

							recursively_load_weights(lowerCAmelCase__		,lowerCAmelCase__		,not is_finetuned   )

							hf_wavavec.save_pretrained(lowerCAmelCase__   )


if __name__ == "__main__":
							SCREAMING_SNAKE_CASE							:				Any     	=			argparse.ArgumentParser()
							parser.add_argument("--pytorch_dump_folder_path", default=None, type=str, help="Path to the output PyTorch model.")
							parser.add_argument("--checkpoint_path", default=None, type=str, help="Path to fairseq checkpoint")
							parser.add_argument("--dict_path", default=None, type=str, help="Path to dict of fine-tuned model")
							parser.add_argument("--config_path", default=None, type=str, help="Path to hf config.json of model to convert")
							parser.add_argument(
							    "--not_finetuned", action="store_true", help="Whether the model to convert is a fine-tuned model or not"
							)
							parser.add_argument(
							    "--is_seq_class",
							    action="store_true",
							    help="Whether the model to convert is a fine-tuned sequence classification model or not",
							)
							SCREAMING_SNAKE_CASE							:				Tuple     	=			parser.parse_args()

							SCREAMING_SNAKE_CASE							:				Dict     	=			not args.not_finetuned and not args.is_seq_class
							convert_wavaveca_checkpoint(
							    args.checkpoint_path,
							    args.pytorch_dump_folder_path,
							    args.config_path,
							    args.dict_path,
							    is_finetuned,
							    args.is_seq_class,
							)








'''simple docstring'''

import json
import sys
import tempfile
import unittest
from pathlib import Path

import transformers
from transformers import (
    CONFIG_MAPPING,
    FEATURE_EXTRACTOR_MAPPING,
    AutoConfig,
    AutoFeatureExtractor,
    WavaVecaConfig,
    WavaVecaFeatureExtractor,
)
from transformers.testing_utils import DUMMY_UNKNOWN_IDENTIFIER, get_tests_dir


sys.path.append(str(Path(__file__).parent.parent.parent.parent / "utils"))

from test_module.custom_configuration import CustomConfig  # noqa E402
from test_module.custom_feature_extraction import CustomFeatureExtractor  # noqa E402


SCREAMING_SNAKE_CASE							:				int     	=			get_tests_dir("fixtures")
SCREAMING_SNAKE_CASE							:				str     	=			get_tests_dir("fixtures/dummy_feature_extractor_config.json")
SCREAMING_SNAKE_CASE							:				str     	=			get_tests_dir("fixtures/dummy-config.json")






class    snake_case     (      unittest.TestCase		):






				"""simple docstring"""



				def   a__					(    self       )     ->							str:
											SCREAMING_SNAKE_CASE_				=				0



				def   a__					(    self       )     ->							Tuple:
											SCREAMING_SNAKE_CASE_				=				AutoFeatureExtractor.from_pretrained('facebook/wav2vec2-base-960h'       )
											self.assertIsInstance(_lowercase,     _lowercase       )



				def   a__					(    self       )     ->							List[str]:
											SCREAMING_SNAKE_CASE_				=				AutoFeatureExtractor.from_pretrained(_lowercase       )
											self.assertIsInstance(_lowercase,     _lowercase       )



				def   a__					(    self       )     ->							str:
											with tempfile.TemporaryDirectory() as tmpdirname:
																		SCREAMING_SNAKE_CASE_				=				WavaVecaConfig()

																		# remove feature_extractor_type to make sure config.json alone is enough to load feature processor locally
																		SCREAMING_SNAKE_CASE_				=				AutoFeatureExtractor.from_pretrained(_lowercase       ).to_dict()

																		config_dict.pop('feature_extractor_type'       )
																		SCREAMING_SNAKE_CASE_				=				WavaVecaFeatureExtractor(**_lowercase       )

																		# save in new folder
																		model_config.save_pretrained(_lowercase       )
																		config.save_pretrained(_lowercase       )

																		SCREAMING_SNAKE_CASE_				=				AutoFeatureExtractor.from_pretrained(_lowercase       )

																		# make sure private variable is not incorrectly saved
																		SCREAMING_SNAKE_CASE_				=				json.loads(config.to_json_string()       )
																		self.assertTrue('_processor_class' not in dict_as_saved       )

											self.assertIsInstance(_lowercase,     _lowercase       )



				def   a__					(    self       )     ->							int:
											SCREAMING_SNAKE_CASE_				=				AutoFeatureExtractor.from_pretrained(_lowercase       )
											self.assertIsInstance(_lowercase,     _lowercase       )



				def   a__					(    self       )     ->							Any:
											with self.assertRaisesRegex(
											    _lowercase,     'bert-base is not a local folder and is not a valid model identifier'       ):
																		SCREAMING_SNAKE_CASE_				=				AutoFeatureExtractor.from_pretrained('bert-base'       )



				def   a__					(    self       )     ->							List[Any]:
											with self.assertRaisesRegex(
											    _lowercase,     R'aaaaaa is not a valid git identifier \(branch name, tag name or commit id\)'       ):
																		SCREAMING_SNAKE_CASE_				=				AutoFeatureExtractor.from_pretrained(_lowercase,     revision='aaaaaa'       )



				def   a__					(    self       )     ->							List[Any]:
											with self.assertRaisesRegex(
											    _lowercase,     'hf-internal-testing/config-no-model does not appear to have a file named preprocessor_config.json.',     ):
																		SCREAMING_SNAKE_CASE_				=				AutoFeatureExtractor.from_pretrained('hf-internal-testing/config-no-model'       )



				def   a__					(    self       )     ->							List[str]:
											# If remote code is not set, we will time out when asking whether to load the model.
											with self.assertRaises(_lowercase       ):
																		SCREAMING_SNAKE_CASE_				=				AutoFeatureExtractor.from_pretrained(
																		    'hf-internal-testing/test_dynamic_feature_extractor'       )
											# If remote code is disabled, we can't load this config.
											with self.assertRaises(_lowercase       ):
																		SCREAMING_SNAKE_CASE_				=				AutoFeatureExtractor.from_pretrained(
																		    'hf-internal-testing/test_dynamic_feature_extractor',     trust_remote_code=_lowercase       )

											SCREAMING_SNAKE_CASE_				=				AutoFeatureExtractor.from_pretrained(
											    'hf-internal-testing/test_dynamic_feature_extractor',     trust_remote_code=_lowercase       )
											self.assertEqual(feature_extractor.__class__.__name__,     'NewFeatureExtractor'       )

											# Test feature extractor can be reloaded.
											with tempfile.TemporaryDirectory() as tmp_dir:
																		feature_extractor.save_pretrained(_lowercase       )
																		SCREAMING_SNAKE_CASE_				=				AutoFeatureExtractor.from_pretrained(_lowercase,     trust_remote_code=_lowercase       )
											self.assertEqual(reloaded_feature_extractor.__class__.__name__,     'NewFeatureExtractor'       )



				def   a__					(    self       )     ->							int:
											try:
																		AutoConfig.register('custom',     _lowercase       )
																		AutoFeatureExtractor.register(_lowercase,     _lowercase       )
																		# Trying to register something existing in the Transformers library will raise an error
																		with self.assertRaises(_lowercase       ):
																									AutoFeatureExtractor.register(_lowercase,     _lowercase       )

																		# Now that the config is registered, it can be used as any other config with the auto-API
																		SCREAMING_SNAKE_CASE_				=				CustomFeatureExtractor.from_pretrained(_lowercase       )
																		with tempfile.TemporaryDirectory() as tmp_dir:
																									feature_extractor.save_pretrained(_lowercase       )
																									SCREAMING_SNAKE_CASE_				=				AutoFeatureExtractor.from_pretrained(_lowercase       )
																									self.assertIsInstance(_lowercase,     _lowercase       )

											finally:
																		if "custom" in CONFIG_MAPPING._extra_content:
																									del CONFIG_MAPPING._extra_content["custom"]
																		if CustomConfig in FEATURE_EXTRACTOR_MAPPING._extra_content:
																									del FEATURE_EXTRACTOR_MAPPING._extra_content[CustomConfig]





				def   a__					(    self       )     ->							str:






											class    snake_case     (      lowercase_		):






															"""simple docstring"""
															_a    	=     True

											try:
																		AutoConfig.register('custom',     _lowercase       )
																		AutoFeatureExtractor.register(_lowercase,     _lowercase       )
																		# If remote code is not set, the default is to use local
																		SCREAMING_SNAKE_CASE_				=				AutoFeatureExtractor.from_pretrained(
																		    'hf-internal-testing/test_dynamic_feature_extractor'       )
																		self.assertEqual(feature_extractor.__class__.__name__,     'NewFeatureExtractor'       )
																		self.assertTrue(feature_extractor.is_local       )

																		# If remote code is disabled, we load the local one.
																		SCREAMING_SNAKE_CASE_				=				AutoFeatureExtractor.from_pretrained(
																		    'hf-internal-testing/test_dynamic_feature_extractor',     trust_remote_code=_lowercase       )
																		self.assertEqual(feature_extractor.__class__.__name__,     'NewFeatureExtractor'       )
																		self.assertTrue(feature_extractor.is_local       )

																		# If remote is enabled, we load from the Hub
																		SCREAMING_SNAKE_CASE_				=				AutoFeatureExtractor.from_pretrained(
																		    'hf-internal-testing/test_dynamic_feature_extractor',     trust_remote_code=_lowercase       )
																		self.assertEqual(feature_extractor.__class__.__name__,     'NewFeatureExtractor'       )
																		self.assertTrue(not hasattr(_lowercase,     'is_local'       )       )

											finally:
																		if "custom" in CONFIG_MAPPING._extra_content:
																									del CONFIG_MAPPING._extra_content["custom"]
																		if CustomConfig in FEATURE_EXTRACTOR_MAPPING._extra_content:
																									del FEATURE_EXTRACTOR_MAPPING._extra_content[CustomConfig]





