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


lowercase_     		= get_tests_dir('''fixtures''')
class   SCREAMING_SNAKE_CASE			(						unittest.TestCase):







		"""simple docstring"""






		def 		UpperCamelCase__       (   self				) ->     str:
								# A mock response for an HTTP head request to emulate server down
								_lowerCAmelCase										=mock.Mock()
								_lowerCAmelCase										=500
								_lowerCAmelCase										={}
								_lowerCAmelCase										=HTTPError
								_lowerCAmelCase										={}

								# Download this model to make sure it's in the cache.
								_lowerCAmelCase										=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=__A				) as mock_head:
														_lowerCAmelCase										=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				) ->     Optional[int]:
								# This test is for deprecated behavior and can be removed in v5
								_lowerCAmelCase										=WavaVecaFeatureExtractor.from_pretrained(
								    'https://huggingface.co/hf-internal-testing/tiny-random-wav2vec2/resolve/main/preprocessor_config.json'				)

@is_staging_test
class   SCREAMING_SNAKE_CASE			(						unittest.TestCase):







		"""simple docstring"""






		@classmethod
		def 		UpperCamelCase__       (   cls				) ->     Union[str, Any]:
								_lowerCAmelCase										=TOKEN
								HfFolder.save_token(__A				)






		@classmethod
		def 		UpperCamelCase__       (   cls				) ->     Optional[Any]:
								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				) ->     Any:
								_lowerCAmelCase										=WavaVecaFeatureExtractor.from_pretrained(__A				)
								feature_extractor.push_to_hub('test-feature-extractor'		,						use_auth_token=self._token				)

								_lowerCAmelCase										=WavaVecaFeatureExtractor.from_pretrained(F'''{USER}/test-feature-extractor'''				)
								for k, v in feature_extractor.__dict__.items():
														self.assertEqual(__A		,						getattr(__A		,						__A				)				)

								# 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(
														    __A		,						repo_id='test-feature-extractor'		,						push_to_hub=__A		,						use_auth_token=self._token				)

								_lowerCAmelCase										=WavaVecaFeatureExtractor.from_pretrained(F'''{USER}/test-feature-extractor'''				)
								for k, v in feature_extractor.__dict__.items():
														self.assertEqual(__A		,						getattr(__A		,						__A				)				)






		def 		UpperCamelCase__       (   self				) ->     int:
								_lowerCAmelCase										=WavaVecaFeatureExtractor.from_pretrained(__A				)
								feature_extractor.push_to_hub('valid_org/test-feature-extractor'		,						use_auth_token=self._token				)

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

								# 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(
														    __A		,						repo_id='valid_org/test-feature-extractor-org'		,						push_to_hub=__A		,						use_auth_token=self._token				)

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






		def 		UpperCamelCase__       (   self				) ->     Any:
								CustomFeatureExtractor.register_for_auto_class()
								_lowerCAmelCase										=CustomFeatureExtractor.from_pretrained(__A				)

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

								_lowerCAmelCase										=AutoFeatureExtractor.from_pretrained(
								    F'''{USER}/test-dynamic-feature-extractor'''		,						trust_remote_code=__A				)
								# 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'''

lowercase_     		= '''
# Installazione di Transformers
! pip install transformers datasets
# Per installare dalla fonte invece dell\'ultima versione rilasciata, commenta il comando sopra e
# rimuovi la modalità commento al comando seguente.
# ! pip install git+https://github.com/huggingface/transformers.git
'''

lowercase_     		= [{'''type''': '''code''', '''content''': INSTALL_CONTENT}]
lowercase_     		= {
    '''{processor_class}''': '''FakeProcessorClass''',
    '''{model_class}''': '''FakeModelClass''',
    '''{object_class}''': '''FakeObjectClass''',
}





