





'''simple docstring'''



import sys
import tempfile
import unittest
import unittest.mock as mock
from pathlib import Path

from huggingface_hub import HfFolder, delete_repo
from requests.exceptions import HTTPError

from transformers import AutoFeatureExtractor, WavaVecaFeatureExtractor
from transformers.testing_utils import TOKEN, USER, get_tests_dir, is_staging_test


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

from test_module.custom_feature_extraction import CustomFeatureExtractor  # noqa E402


_SCREAMING_SNAKE_CASE					=    get_tests_dir('''fixtures''')






class 							__lowercase       (      unittest.TestCase						):







	'''simple docstring'''

	def 						_UpperCAmelCase     (self )							->							Dict:







				'''simple docstring'''





				__lowercase										=							mock.Mock()
				__lowercase										=							500
				__lowercase										=							{}
				__lowercase										=							HTTPError
				__lowercase										=							{}

				# Download this model to make sure it's in the cache.
				__lowercase										=							WavaVecaFeatureExtractor.from_pretrained('''hf-internal-testing/tiny-random-wav2vec2''' )
				# Under the mock environment we get a 500 error when trying to reach the model.
				with mock.patch('''requests.Session.request'''     ,return_value=snake_case__ ) as mock_head:
							__lowercase										=							WavaVecaFeatureExtractor.from_pretrained('''hf-internal-testing/tiny-random-wav2vec2''' )
							# This check we did call the fake head request
							mock_head.assert_called()


	def 						_UpperCAmelCase     (self )							->							Tuple:







				'''simple docstring'''





				__lowercase										=							WavaVecaFeatureExtractor.from_pretrained(
				    '''https://huggingface.co/hf-internal-testing/tiny-random-wav2vec2/resolve/main/preprocessor_config.json''' )






@is_staging_test
class 							__lowercase       (      unittest.TestCase						):







	'''simple docstring'''

	@classmethod
	def 						_UpperCAmelCase     (cls )							->							str:







				'''simple docstring'''





				__lowercase										=							TOKEN
				HfFolder.save_token(snake_case__ )


	@classmethod
	def 						_UpperCAmelCase     (cls )							->							Union[str, Any]:







				'''simple docstring'''





				try:
							delete_repo(token=cls._token     ,repo_id='''test-feature-extractor''' )
				except HTTPError:
							pass

				try:
							delete_repo(token=cls._token     ,repo_id='''valid_org/test-feature-extractor-org''' )
				except HTTPError:
							pass

				try:
							delete_repo(token=cls._token     ,repo_id='''test-dynamic-feature-extractor''' )
				except HTTPError:
							pass


	def 						_UpperCAmelCase     (self )							->							List[Any]:







				'''simple docstring'''





				__lowercase										=							WavaVecaFeatureExtractor.from_pretrained(snake_case__ )
				feature_extractor.push_to_hub('''test-feature-extractor'''     ,use_auth_token=self._token )

				__lowercase										=							WavaVecaFeatureExtractor.from_pretrained(f"{USER}/test-feature-extractor" )
				for k, v in feature_extractor.__dict__.items():
							self.assertEqual(snake_case__     ,getattr(snake_case__     ,snake_case__ ) )

				# Reset repo
				delete_repo(token=self._token     ,repo_id='''test-feature-extractor''' )

				# Push to hub via save_pretrained
				with tempfile.TemporaryDirectory() as tmp_dir:
							feature_extractor.save_pretrained(
							    snake_case__     ,repo_id='''test-feature-extractor'''     ,push_to_hub=snake_case__     ,use_auth_token=self._token )

				__lowercase										=							WavaVecaFeatureExtractor.from_pretrained(f"{USER}/test-feature-extractor" )
				for k, v in feature_extractor.__dict__.items():
							self.assertEqual(snake_case__     ,getattr(snake_case__     ,snake_case__ ) )


	def 						_UpperCAmelCase     (self )							->							Any:







				'''simple docstring'''





				__lowercase										=							WavaVecaFeatureExtractor.from_pretrained(snake_case__ )
				feature_extractor.push_to_hub('''valid_org/test-feature-extractor'''     ,use_auth_token=self._token )

				__lowercase										=							WavaVecaFeatureExtractor.from_pretrained('''valid_org/test-feature-extractor''' )
				for k, v in feature_extractor.__dict__.items():
							self.assertEqual(snake_case__     ,getattr(snake_case__     ,snake_case__ ) )

				# Reset repo
				delete_repo(token=self._token     ,repo_id='''valid_org/test-feature-extractor''' )

				# Push to hub via save_pretrained
				with tempfile.TemporaryDirectory() as tmp_dir:
							feature_extractor.save_pretrained(
							    snake_case__     ,repo_id='''valid_org/test-feature-extractor-org'''     ,push_to_hub=snake_case__     ,use_auth_token=self._token )

				__lowercase										=							WavaVecaFeatureExtractor.from_pretrained('''valid_org/test-feature-extractor-org''' )
				for k, v in feature_extractor.__dict__.items():
							self.assertEqual(snake_case__     ,getattr(snake_case__     ,snake_case__ ) )


	def 						_UpperCAmelCase     (self )							->							int:







				'''simple docstring'''





				CustomFeatureExtractor.register_for_auto_class()
				__lowercase										=							CustomFeatureExtractor.from_pretrained(snake_case__ )

				feature_extractor.push_to_hub('''test-dynamic-feature-extractor'''     ,use_auth_token=self._token )

				# This has added the proper auto_map field to the config
				self.assertDictEqual(
				    feature_extractor.auto_map     ,{'''AutoFeatureExtractor''': '''custom_feature_extraction.CustomFeatureExtractor'''}     ,)

				__lowercase										=							AutoFeatureExtractor.from_pretrained(
				    f"{USER}/test-dynamic-feature-extractor"     ,trust_remote_code=snake_case__ )
				# Can't make an isinstance check because the new_feature_extractor is from the CustomFeatureExtractor class of a dynamic module
				self.assertEqual(new_feature_extractor.__class__.__name__     ,'''CustomFeatureExtractor''' )









'''simple docstring'''



# flake8: noqa
# Lint as: python3
_SCREAMING_SNAKE_CASE					=    [
    '''VerificationMode''',
    '''Version''',
    '''disable_progress_bar''',
    '''enable_progress_bar''',
    '''is_progress_bar_enabled''',
    '''experimental''',
]

from .info_utils import VerificationMode
from .logging import disable_progress_bar, enable_progress_bar, is_progress_bar_enabled
from .version import Version
from .experimental import experimental





