



"""simple docstring"""

from ...configuration_utils import PretrainedConfig
from ...utils import logging
from ...utils.backbone_utils import BackboneConfigMixin, get_aligned_output_features_output_indices


A_						:    List[str]				=      logging.get_logger(__name__)
class     lowerCAmelCase__						(	_lowerCamelCase							,							_lowerCamelCase ):


	'''simple docstring'''







	_SCREAMING_SNAKE_CASE	:		Union[str, Any]  						= '''maskformer-swin'''

	_SCREAMING_SNAKE_CASE	:		Optional[int]  						= {
	    '''num_attention_heads''': '''num_heads''',
	    '''num_hidden_layers''': '''num_layers''',
	}





	def __init__(      self				:       List[str]     ,       _SCREAMING_SNAKE_CASE				:       Union[str, Any]=224     ,       _SCREAMING_SNAKE_CASE				:       int=4     ,       _SCREAMING_SNAKE_CASE				:       Optional[Any]=3     ,       _SCREAMING_SNAKE_CASE				:       List[str]=96     ,       _SCREAMING_SNAKE_CASE				:       Dict=[2, 2, 6, 2]     ,       _SCREAMING_SNAKE_CASE				:       List[Any]=[3, 6, 12, 24]     ,       _SCREAMING_SNAKE_CASE				:       str=7     ,       _SCREAMING_SNAKE_CASE				:       Dict=4.0     ,       _SCREAMING_SNAKE_CASE				:       int=True     ,       _SCREAMING_SNAKE_CASE				:       Optional[Any]=0.0     ,       _SCREAMING_SNAKE_CASE				:       List[Any]=0.0     ,       _SCREAMING_SNAKE_CASE				:       List[Any]=0.1     ,       _SCREAMING_SNAKE_CASE				:       Any="gelu"     ,       _SCREAMING_SNAKE_CASE				:       Tuple=False     ,       _SCREAMING_SNAKE_CASE				:       Optional[int]=0.0_2     ,       _SCREAMING_SNAKE_CASE				:       Optional[int]=1E-5     ,       _SCREAMING_SNAKE_CASE				:       Tuple=None     ,       _SCREAMING_SNAKE_CASE				:       List[Any]=None     ,       **_SCREAMING_SNAKE_CASE				:       str     ,       )						->	str:





					"""simple docstring"""


					super().__init__(**_SCREAMING_SNAKE_CASE    )

					SCREAMING_SNAKE_CASE						:							Any							=     image_size
					SCREAMING_SNAKE_CASE						:							int							=     patch_size
					SCREAMING_SNAKE_CASE						:							Tuple							=     num_channels
					SCREAMING_SNAKE_CASE						:							List[Any]							=     embed_dim
					SCREAMING_SNAKE_CASE						:							str							=     depths
					SCREAMING_SNAKE_CASE						:							Any							=     len(_SCREAMING_SNAKE_CASE    )
					SCREAMING_SNAKE_CASE						:							Tuple							=     num_heads
					SCREAMING_SNAKE_CASE						:							List[str]							=     window_size
					SCREAMING_SNAKE_CASE						:							Union[str, Any]							=     mlp_ratio
					SCREAMING_SNAKE_CASE						:							Optional[int]							=     qkv_bias
					SCREAMING_SNAKE_CASE						:							List[Any]							=     hidden_dropout_prob
					SCREAMING_SNAKE_CASE						:							Dict							=     attention_probs_dropout_prob
					SCREAMING_SNAKE_CASE						:							List[str]							=     drop_path_rate
					SCREAMING_SNAKE_CASE						:							List[str]							=     hidden_act
					SCREAMING_SNAKE_CASE						:							str							=     use_absolute_embeddings
					SCREAMING_SNAKE_CASE						:							Optional[int]							=     layer_norm_eps
					SCREAMING_SNAKE_CASE						:							Any							=     initializer_range
					# we set the hidden_size attribute in order to make Swin work with VisionEncoderDecoderModel
					# this indicates the channel dimension after the last stage of the model
					SCREAMING_SNAKE_CASE						:							Optional[int]							=     int(embed_dim * 2 ** (len(_SCREAMING_SNAKE_CASE    ) - 1)    )
					SCREAMING_SNAKE_CASE						:							int							=     ['stem'] + [f"""stage{idx}""" for idx in range(1     ,       len(_SCREAMING_SNAKE_CASE    ) + 1    )]
					SCREAMING_SNAKE_CASE				,						SCREAMING_SNAKE_CASE						:							List[str]							=     get_aligned_output_features_output_indices(
					    out_features=_SCREAMING_SNAKE_CASE     ,       out_indices=_SCREAMING_SNAKE_CASE     ,       stage_names=self.stage_names    )










"""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


A_						:    int				=      get_tests_dir('fixtures')
A_						:    int				=      get_tests_dir('fixtures/dummy_feature_extractor_config.json')
A_						:    Dict				=      get_tests_dir('fixtures/dummy-config.json')
class     lowerCAmelCase__						(	unittest.TestCase ):


	'''simple docstring'''







	def 			_lowerCAmelCase     (      self				:       int    )						->	Tuple:





					"""simple docstring"""


					SCREAMING_SNAKE_CASE						:							Tuple							=     0





	def 			_lowerCAmelCase     (      self				:       List[str]    )						->	Tuple:





					"""simple docstring"""


					SCREAMING_SNAKE_CASE						:							Any							=     AutoFeatureExtractor.from_pretrained('facebook/wav2vec2-base-960h'    )
					self.assertIsInstance(_SCREAMING_SNAKE_CASE     ,       _SCREAMING_SNAKE_CASE    )





	def 			_lowerCAmelCase     (      self				:       Dict    )						->	Dict:





					"""simple docstring"""


					SCREAMING_SNAKE_CASE						:							str							=     AutoFeatureExtractor.from_pretrained(_SCREAMING_SNAKE_CASE    )
					self.assertIsInstance(_SCREAMING_SNAKE_CASE     ,       _SCREAMING_SNAKE_CASE    )





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





					"""simple docstring"""


					with tempfile.TemporaryDirectory() as tmpdirname:
									SCREAMING_SNAKE_CASE						:							List[Any]							=     WavaVecaConfig()

									# remove feature_extractor_type to make sure config.json alone is enough to load feature processor locally
									SCREAMING_SNAKE_CASE						:							Optional[Any]							=     AutoFeatureExtractor.from_pretrained(_SCREAMING_SNAKE_CASE    ).to_dict()

									config_dict.pop('feature_extractor_type'    )
									SCREAMING_SNAKE_CASE						:							int							=     WavaVecaFeatureExtractor(**_SCREAMING_SNAKE_CASE    )

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

									SCREAMING_SNAKE_CASE						:							List[Any]							=     AutoFeatureExtractor.from_pretrained(_SCREAMING_SNAKE_CASE    )

									# make sure private variable is not incorrectly saved
									SCREAMING_SNAKE_CASE						:							Optional[int]							=     json.loads(config.to_json_string()    )
									self.assertTrue('_processor_class' not in dict_as_saved    )

					self.assertIsInstance(_SCREAMING_SNAKE_CASE     ,       _SCREAMING_SNAKE_CASE    )





	def 			_lowerCAmelCase     (      self				:       List[str]    )						->	int:





					"""simple docstring"""


					SCREAMING_SNAKE_CASE						:							List[Any]							=     AutoFeatureExtractor.from_pretrained(_SCREAMING_SNAKE_CASE    )
					self.assertIsInstance(_SCREAMING_SNAKE_CASE     ,       _SCREAMING_SNAKE_CASE    )





	def 			_lowerCAmelCase     (      self				:       Dict    )						->	Union[str, Any]:





					"""simple docstring"""


					with self.assertRaisesRegex(
					    _SCREAMING_SNAKE_CASE     ,       'bert-base is not a local folder and is not a valid model identifier'    ):
									SCREAMING_SNAKE_CASE						:							str							=     AutoFeatureExtractor.from_pretrained('bert-base'    )





	def 			_lowerCAmelCase     (      self				:       str    )						->	str:





					"""simple docstring"""


					with self.assertRaisesRegex(
					    _SCREAMING_SNAKE_CASE     ,       R'aaaaaa is not a valid git identifier \(branch name, tag name or commit id\)'    ):
									SCREAMING_SNAKE_CASE						:							List[str]							=     AutoFeatureExtractor.from_pretrained(_SCREAMING_SNAKE_CASE     ,       revision='aaaaaa'    )





	def 			_lowerCAmelCase     (      self				:       List[str]    )						->	List[Any]:





					"""simple docstring"""


					with self.assertRaisesRegex(
					    _SCREAMING_SNAKE_CASE     ,       'hf-internal-testing/config-no-model does not appear to have a file named preprocessor_config.json.'     ,       ):
									SCREAMING_SNAKE_CASE						:							int							=     AutoFeatureExtractor.from_pretrained('hf-internal-testing/config-no-model'    )





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





					"""simple docstring"""


					with self.assertRaises(_SCREAMING_SNAKE_CASE    ):
									SCREAMING_SNAKE_CASE						:							Union[str, Any]							=     AutoFeatureExtractor.from_pretrained(
									    'hf-internal-testing/test_dynamic_feature_extractor'    )
					# If remote code is disabled, we can't load this config.
					with self.assertRaises(_SCREAMING_SNAKE_CASE    ):
									SCREAMING_SNAKE_CASE						:							int							=     AutoFeatureExtractor.from_pretrained(
									    'hf-internal-testing/test_dynamic_feature_extractor'     ,       trust_remote_code=_SCREAMING_SNAKE_CASE    )

					SCREAMING_SNAKE_CASE						:							Optional[int]							=     AutoFeatureExtractor.from_pretrained(
					    'hf-internal-testing/test_dynamic_feature_extractor'     ,       trust_remote_code=_SCREAMING_SNAKE_CASE    )
					self.assertEqual(feature_extractor.__class__.__name__     ,       'NewFeatureExtractor'    )

					# Test feature extractor can be reloaded.
					with tempfile.TemporaryDirectory() as tmp_dir:
									feature_extractor.save_pretrained(_SCREAMING_SNAKE_CASE    )
									SCREAMING_SNAKE_CASE						:							List[str]							=     AutoFeatureExtractor.from_pretrained(_SCREAMING_SNAKE_CASE     ,       trust_remote_code=_SCREAMING_SNAKE_CASE    )
					self.assertEqual(reloaded_feature_extractor.__class__.__name__     ,       'NewFeatureExtractor'    )





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





					"""simple docstring"""


					try:
									AutoConfig.register('custom'     ,       _SCREAMING_SNAKE_CASE    )
									AutoFeatureExtractor.register(_SCREAMING_SNAKE_CASE     ,       _SCREAMING_SNAKE_CASE    )
									# Trying to register something existing in the Transformers library will raise an error
									with self.assertRaises(_SCREAMING_SNAKE_CASE    ):
													AutoFeatureExtractor.register(_SCREAMING_SNAKE_CASE     ,       _SCREAMING_SNAKE_CASE    )

									# Now that the config is registered, it can be used as any other config with the auto-API
									SCREAMING_SNAKE_CASE						:							Union[str, Any]							=     CustomFeatureExtractor.from_pretrained(_SCREAMING_SNAKE_CASE    )
									with tempfile.TemporaryDirectory() as tmp_dir:
													feature_extractor.save_pretrained(_SCREAMING_SNAKE_CASE    )
													SCREAMING_SNAKE_CASE						:							Dict							=     AutoFeatureExtractor.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"]
									if CustomConfig in FEATURE_EXTRACTOR_MAPPING._extra_content:
													del FEATURE_EXTRACTOR_MAPPING._extra_content[CustomConfig]







	def 			_lowerCAmelCase     (      self				:       Tuple    )						->	str:





					"""simple docstring"""


					class     lowerCAmelCase__						(	_lowerCamelCase ):


						'''simple docstring'''







						_SCREAMING_SNAKE_CASE	:		str  						= True

					try:
									AutoConfig.register('custom'     ,       _SCREAMING_SNAKE_CASE    )
									AutoFeatureExtractor.register(_SCREAMING_SNAKE_CASE     ,       _SCREAMING_SNAKE_CASE    )
									# If remote code is not set, the default is to use local
									SCREAMING_SNAKE_CASE						:							str							=     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						:							List[Any]							=     AutoFeatureExtractor.from_pretrained(
									    'hf-internal-testing/test_dynamic_feature_extractor'     ,       trust_remote_code=_SCREAMING_SNAKE_CASE    )
									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						:							Optional[int]							=     AutoFeatureExtractor.from_pretrained(
									    'hf-internal-testing/test_dynamic_feature_extractor'     ,       trust_remote_code=_SCREAMING_SNAKE_CASE    )
									self.assertEqual(feature_extractor.__class__.__name__     ,       'NewFeatureExtractor'    )
									self.assertTrue(not hasattr(_SCREAMING_SNAKE_CASE     ,       '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]





