

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


a__												=						get_tests_dir('''fixtures''')

class 							UpperCAmelCase_						(     unittest.TestCase  ):
							"""simple docstring"""







							def 							__lowercase							(     self			)       ->       Tuple:
												# A mock response for an HTTP head request to emulate server down
												_a      :       Optional[Any]   =						mock.Mock()
												_a      :       List[Any]   =						5_0_0
												_a      :       Optional[Any]   =						{}
												_a      :       List[Any]   =						HTTPError
												_a      :       Optional[Any]   =						{}

												# Download this model to make sure it's in the cache.
												_a      :       Dict   =						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:
																	_a      :       Tuple   =						WavaVecaFeatureExtractor.from_pretrained('''hf-internal-testing/tiny-random-wav2vec2'''			)
																	# This check we did call the fake head request
																	mock_head.assert_called()




							def 							__lowercase							(     self			)       ->       Tuple:
												# This test is for deprecated behavior and can be removed in v5
												_a      :       int   =						WavaVecaFeatureExtractor.from_pretrained(
												    '''https://huggingface.co/hf-internal-testing/tiny-random-wav2vec2/resolve/main/preprocessor_config.json'''			)



@is_staging_test
class 							UpperCAmelCase_						(     unittest.TestCase  ):
							"""simple docstring"""







							@classmethod
							def 							__lowercase							(     cls			)       ->       Optional[Any]:
												_a      :       str   =						TOKEN
												HfFolder.save_token(_a			)


							@classmethod
							def 							__lowercase							(     cls			)       ->       Tuple:
												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 							__lowercase							(     self			)       ->       str:
												_a      :       int   =						WavaVecaFeatureExtractor.from_pretrained(_a			)
												feature_extractor.push_to_hub('''test-feature-extractor'''			,				use_auth_token=self._token			)

												_a      :       Optional[Any]   =						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			)

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


							def 							__lowercase							(     self			)       ->       Dict:
												_a      :       str   =						WavaVecaFeatureExtractor.from_pretrained(_a			)
												feature_extractor.push_to_hub('''valid_org/test-feature-extractor'''			,				use_auth_token=self._token			)

												_a      :       Dict   =						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			)

												_a      :       Optional[Any]   =						WavaVecaFeatureExtractor.from_pretrained('''valid_org/test-feature-extractor-org'''			)
												for k, v in feature_extractor.__dict__.items():
																	self.assertEqual(_a			,				getattr(_a			,				_a			)			)




							def 							__lowercase							(     self			)       ->       Any:
												CustomFeatureExtractor.register_for_auto_class()
												_a      :       Dict   =						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'''}			,				)

												_a      :       Tuple   =						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''',
}





