






import functools
import operator

from ...configuration_utils import PretrainedConfig
from ...utils import logging


lowercase  :							List[Any]			  =    logging.get_logger(__name__)

lowercase  :							Any			  =    {
    '''asapp/sew-d-tiny-100k''': '''https://huggingface.co/asapp/sew-d-tiny-100k/resolve/main/config.json''',
    # See all SEW-D models at https://huggingface.co/models?filter=sew-d
}




class 		UpperCAmelCase_						(	SCREAMING_SNAKE_CASE__					):


						'''simple docstring'''




						A     :   Optional[int]						=					'sew-d'






						def __init__(	self		,				_SCREAMING_SNAKE_CASE=32		,				_SCREAMING_SNAKE_CASE=768		,				_SCREAMING_SNAKE_CASE=12		,				_SCREAMING_SNAKE_CASE=12		,				_SCREAMING_SNAKE_CASE=3072		,				_SCREAMING_SNAKE_CASE=2		,				_SCREAMING_SNAKE_CASE=512		,				_SCREAMING_SNAKE_CASE=256		,				_SCREAMING_SNAKE_CASE=True		,				_SCREAMING_SNAKE_CASE=True		,				_SCREAMING_SNAKE_CASE=("p2c", "c2p")		,				_SCREAMING_SNAKE_CASE="layer_norm"		,				_SCREAMING_SNAKE_CASE="gelu_python"		,				_SCREAMING_SNAKE_CASE=0.1		,				_SCREAMING_SNAKE_CASE=0.1		,				_SCREAMING_SNAKE_CASE=0.1		,				_SCREAMING_SNAKE_CASE=0.0		,				_SCREAMING_SNAKE_CASE=0.1		,				_SCREAMING_SNAKE_CASE=0.02		,				_SCREAMING_SNAKE_CASE=1e-7		,				_SCREAMING_SNAKE_CASE=1e-5		,				_SCREAMING_SNAKE_CASE="group"		,				_SCREAMING_SNAKE_CASE="gelu"		,				_SCREAMING_SNAKE_CASE=(64, 128, 128, 128, 128, 256, 256, 256, 256, 512, 512, 512, 512)		,				_SCREAMING_SNAKE_CASE=(5, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1)		,				_SCREAMING_SNAKE_CASE=(10, 3, 1, 3, 1, 3, 1, 3, 1, 2, 1, 2, 1)		,				_SCREAMING_SNAKE_CASE=False		,				_SCREAMING_SNAKE_CASE=128		,				_SCREAMING_SNAKE_CASE=16		,				_SCREAMING_SNAKE_CASE=True		,				_SCREAMING_SNAKE_CASE=0.05		,				_SCREAMING_SNAKE_CASE=10		,				_SCREAMING_SNAKE_CASE=2		,				_SCREAMING_SNAKE_CASE=0.0		,				_SCREAMING_SNAKE_CASE=10		,				_SCREAMING_SNAKE_CASE=0		,				_SCREAMING_SNAKE_CASE="mean"		,				_SCREAMING_SNAKE_CASE=False		,				_SCREAMING_SNAKE_CASE=False		,				_SCREAMING_SNAKE_CASE=256		,				_SCREAMING_SNAKE_CASE=0		,				_SCREAMING_SNAKE_CASE=1		,				_SCREAMING_SNAKE_CASE=2		,				**_SCREAMING_SNAKE_CASE		,				) ->				List[Any]:
								super().__init__(**_SCREAMING_SNAKE_CASE		,				pad_token_id=_SCREAMING_SNAKE_CASE		,				bos_token_id=_SCREAMING_SNAKE_CASE		,				eos_token_id=_SCREAMING_SNAKE_CASE				)
								snake_case_				:							Optional[Any]						 =       hidden_size
								snake_case_				:							Any						 =       feat_extract_norm
								snake_case_				:							Union[str, Any]						 =       feat_extract_activation
								snake_case_				:							Any						 =       list(_SCREAMING_SNAKE_CASE				)
								snake_case_				:							Any						 =       list(_SCREAMING_SNAKE_CASE				)
								snake_case_				:							Tuple						 =       list(_SCREAMING_SNAKE_CASE				)
								snake_case_				:							List[Any]						 =       conv_bias
								snake_case_				:							Union[str, Any]						 =       num_conv_pos_embeddings
								snake_case_				:							Tuple						 =       num_conv_pos_embedding_groups
								snake_case_				:							Optional[int]						 =       len(self.conv_dim				)
								snake_case_				:							str						 =       num_hidden_layers
								snake_case_				:							List[Any]						 =       intermediate_size
								snake_case_				:							List[Any]						 =       squeeze_factor
								snake_case_				:							Tuple						 =       max_position_embeddings
								snake_case_				:							Optional[int]						 =       position_buckets
								snake_case_				:							Union[str, Any]						 =       share_att_key
								snake_case_				:							Optional[int]						 =       relative_attention
								snake_case_				:							List[str]						 =       norm_rel_ebd
								snake_case_				:							Tuple						 =       list(_SCREAMING_SNAKE_CASE				)
								snake_case_				:							str						 =       hidden_act
								snake_case_				:							Any						 =       num_attention_heads
								snake_case_				:							Dict						 =       hidden_dropout
								snake_case_				:							int						 =       attention_dropout
								snake_case_				:							Any						 =       activation_dropout
								snake_case_				:							Optional[Any]						 =       feat_proj_dropout
								snake_case_				:							Tuple						 =       final_dropout
								snake_case_				:							Tuple						 =       layer_norm_eps
								snake_case_				:							Tuple						 =       feature_layer_norm_eps
								snake_case_				:							Any						 =       initializer_range
								snake_case_				:							Optional[int]						 =       vocab_size

								if (
								    (len(self.conv_stride				) != self.num_feat_extract_layers)
								    or (len(self.conv_kernel				) != self.num_feat_extract_layers)
								    or (len(self.conv_dim				) != self.num_feat_extract_layers)
								):
										raise ValueError(
										    "Configuration for convolutional layers is incorrect."
										    "It is required that `len(config.conv_dim)` == `len(config.conv_stride)` == `len(config.conv_kernel)`,"
										    f'''but is `len(config.conv_dim) = {len(self.conv_dim				)}`, `len(config.conv_stride)'''
										    f'''= {len(self.conv_stride				)}`, `len(config.conv_kernel) = {len(self.conv_kernel				)}`.'''				)

								# fine-tuning config parameters for SpecAugment: https://arxiv.org/abs/1904.08779
								snake_case_				:							List[str]						 =       apply_spec_augment
								snake_case_				:							List[Any]						 =       mask_time_prob
								snake_case_				:							str						 =       mask_time_length
								snake_case_				:							Optional[Any]						 =       mask_time_min_masks
								snake_case_				:							Optional[Any]						 =       mask_feature_prob
								snake_case_				:							str						 =       mask_feature_length
								snake_case_				:							Optional[int]						 =       mask_feature_min_masks

								# ctc loss
								snake_case_				:							Any						 =       ctc_loss_reduction
								snake_case_				:							Tuple						 =       ctc_zero_infinity

								# sequence classification
								snake_case_				:							int						 =       use_weighted_layer_sum
								snake_case_				:							List[Any]						 =       classifier_proj_size






						@property
						def       _lowerCAmelCase       (	self				) ->				Dict:
								return functools.reduce(operator.mul		,				self.conv_stride		,				1				)








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

import transformers
import transformers.models.auto
from transformers.models.auto.configuration_auto import CONFIG_MAPPING, AutoConfig
from transformers.models.bert.configuration_bert import BertConfig
from transformers.models.roberta.configuration_roberta import RobertaConfig
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


lowercase  :							Optional[Any]			  =    get_tests_dir('''fixtures/dummy-config.json''')




class 		UpperCAmelCase_						(	unittest.TestCase					):


						'''simple docstring'''




						def       _lowerCAmelCase       (	self				) ->				int:
								snake_case_				:							str						 =       0






						def       _lowerCAmelCase       (	self				) ->				str:
								self.assertIsNotNone(transformers.models.auto.__spec__				)
								self.assertIsNotNone(importlib.util.find_spec("transformers.models.auto"				)				)






						def       _lowerCAmelCase       (	self				) ->				int:
								snake_case_				:							List[Any]						 =       AutoConfig.from_pretrained("bert-base-uncased"				)
								self.assertIsInstance(_SCREAMING_SNAKE_CASE		,				_SCREAMING_SNAKE_CASE				)






						def       _lowerCAmelCase       (	self				) ->				Optional[int]:
								snake_case_				:							List[str]						 =       AutoConfig.from_pretrained(_SCREAMING_SNAKE_CASE				)
								self.assertIsInstance(_SCREAMING_SNAKE_CASE		,				_SCREAMING_SNAKE_CASE				)






						def       _lowerCAmelCase       (	self				) ->				str:
								snake_case_				:							str						 =       AutoConfig.from_pretrained(_SCREAMING_SNAKE_CASE				)
								self.assertIsInstance(_SCREAMING_SNAKE_CASE		,				_SCREAMING_SNAKE_CASE				)






						def       _lowerCAmelCase       (	self				) ->				Dict:
								snake_case_				:							Tuple						 =       AutoConfig.for_model("roberta"				)
								self.assertIsInstance(_SCREAMING_SNAKE_CASE		,				_SCREAMING_SNAKE_CASE				)






						def       _lowerCAmelCase       (	self				) ->				Tuple:
								with tempfile.TemporaryDirectory() as tmp_dir:
										# This model name contains bert and roberta, but roberta ends up being picked.
										snake_case_				:							str						 =       os.path.join(_SCREAMING_SNAKE_CASE		,				"fake-roberta"				)
										os.makedirs(_SCREAMING_SNAKE_CASE		,				exist_ok=_SCREAMING_SNAKE_CASE				)
										with open(os.path.join(_SCREAMING_SNAKE_CASE		,				"config.json"				)		,				"w"				) as f:
												f.write(json.dumps({}				)				)
										snake_case_				:							int						 =       AutoConfig.from_pretrained(_SCREAMING_SNAKE_CASE				)
										self.assertEqual(type(_SCREAMING_SNAKE_CASE				)		,				_SCREAMING_SNAKE_CASE				)






						def       _lowerCAmelCase       (	self				) ->				Dict:
								try:
										AutoConfig.register("custom"		,				_SCREAMING_SNAKE_CASE				)
										# Wrong model type will raise an error
										with self.assertRaises(_SCREAMING_SNAKE_CASE				):
												AutoConfig.register("model"		,				_SCREAMING_SNAKE_CASE				)
										# Trying to register something existing in the Transformers library will raise an error
										with self.assertRaises(_SCREAMING_SNAKE_CASE				):
												AutoConfig.register("bert"		,				_SCREAMING_SNAKE_CASE				)

										# Now that the config is registered, it can be used as any other config with the auto-API
										snake_case_				:							Union[str, Any]						 =       CustomConfig()
										with tempfile.TemporaryDirectory() as tmp_dir:
												config.save_pretrained(_SCREAMING_SNAKE_CASE				)
												snake_case_				:							int						 =       AutoConfig.from_pretrained(_SCREAMING_SNAKE_CASE				)
												self.assertIsInstance(_SCREAMING_SNAKE_CASE		,				_SCREAMING_SNAKE_CASE				)

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






						def       _lowerCAmelCase       (	self				) ->				int:
								with self.assertRaisesRegex(
								    _SCREAMING_SNAKE_CASE		,				"bert-base is not a local folder and is not a valid model identifier"				):
										snake_case_				:							Optional[Any]						 =       AutoConfig.from_pretrained("bert-base"				)






						def       _lowerCAmelCase       (	self				) ->				Tuple:
								with self.assertRaisesRegex(
								    _SCREAMING_SNAKE_CASE		,				r"aaaaaa is not a valid git identifier \(branch name, tag name or commit id\)"				):
										snake_case_				:							List[Any]						 =       AutoConfig.from_pretrained(_SCREAMING_SNAKE_CASE		,				revision="aaaaaa"				)






						def       _lowerCAmelCase       (	self				) ->				str:
								with self.assertRaisesRegex(
								    _SCREAMING_SNAKE_CASE		,				"hf-internal-testing/no-config-test-repo does not appear to have a file named config.json."		,				):
										snake_case_				:							Dict						 =       AutoConfig.from_pretrained("hf-internal-testing/no-config-test-repo"				)






						def       _lowerCAmelCase       (	self				) ->				Optional[int]:
								# If remote code is not set, we will time out when asking whether to load the model.
								with self.assertRaises(_SCREAMING_SNAKE_CASE				):
										snake_case_				:							Tuple						 =       AutoConfig.from_pretrained("hf-internal-testing/test_dynamic_model"				)
								# If remote code is disabled, we can't load this config.
								with self.assertRaises(_SCREAMING_SNAKE_CASE				):
										snake_case_				:							Optional[Any]						 =       AutoConfig.from_pretrained("hf-internal-testing/test_dynamic_model"		,				trust_remote_code=_SCREAMING_SNAKE_CASE				)

								snake_case_				:							List[Any]						 =       AutoConfig.from_pretrained("hf-internal-testing/test_dynamic_model"		,				trust_remote_code=_SCREAMING_SNAKE_CASE				)
								self.assertEqual(config.__class__.__name__		,				"NewModelConfig"				)

								# Test config can be reloaded.
								with tempfile.TemporaryDirectory() as tmp_dir:
										config.save_pretrained(_SCREAMING_SNAKE_CASE				)
										snake_case_				:							Optional[Any]						 =       AutoConfig.from_pretrained(_SCREAMING_SNAKE_CASE		,				trust_remote_code=_SCREAMING_SNAKE_CASE				)
								self.assertEqual(reloaded_config.__class__.__name__		,				"NewModelConfig"				)






						def       _lowerCAmelCase       (	self				) ->				Optional[Any]:




								class 		UpperCAmelCase_						(	SCREAMING_SNAKE_CASE__					):


														'''simple docstring'''




														A     :   List[Any]						=					'new-model'

								try:
										AutoConfig.register("new-model"		,				_SCREAMING_SNAKE_CASE				)
										# If remote code is not set, the default is to use local
										snake_case_				:							Union[str, Any]						 =       AutoConfig.from_pretrained("hf-internal-testing/test_dynamic_model"				)
										self.assertEqual(config.__class__.__name__		,				"NewModelConfigLocal"				)

										# If remote code is disabled, we load the local one.
										snake_case_				:							Optional[Any]						 =       AutoConfig.from_pretrained("hf-internal-testing/test_dynamic_model"		,				trust_remote_code=_SCREAMING_SNAKE_CASE				)
										self.assertEqual(config.__class__.__name__		,				"NewModelConfigLocal"				)

										# If remote is enabled, we load from the Hub
										snake_case_				:							List[str]						 =       AutoConfig.from_pretrained("hf-internal-testing/test_dynamic_model"		,				trust_remote_code=_SCREAMING_SNAKE_CASE				)
										self.assertEqual(config.__class__.__name__		,				"NewModelConfig"				)

								finally:
										if "new-model" in CONFIG_MAPPING._extra_content:
												del CONFIG_MAPPING._extra_content["new-model"]
