






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      lowercase__     (			unittest.TestCase	):

	def 		UpperCAmelCase  (							self       )->					Any:







							'''simple docstring'''





							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=__UpperCAmelCase       ) 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       )->					int:







							'''simple docstring'''





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





@is_staging_test
class      lowercase__     (			unittest.TestCase	):

	@classmethod
	def 		UpperCAmelCase  (							cls       )->					Optional[int]:







							'''simple docstring'''





							lowerCAmelCase__       =						TOKEN
							HfFolder.save_token(__UpperCAmelCase       )

	@classmethod
	def 		UpperCAmelCase  (							cls       )->					str:







							'''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[str]:







							'''simple docstring'''





							lowerCAmelCase__       =						WavaVecaFeatureExtractor.from_pretrained(__UpperCAmelCase       )
							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(__UpperCAmelCase		,    getattr(__UpperCAmelCase		,    __UpperCAmelCase       )       )

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

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

	def 		UpperCAmelCase  (							self       )->					str:







							'''simple docstring'''





							lowerCAmelCase__       =						WavaVecaFeatureExtractor.from_pretrained(__UpperCAmelCase       )
							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(__UpperCAmelCase		,    getattr(__UpperCAmelCase		,    __UpperCAmelCase       )       )

							# 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(
													    __UpperCAmelCase		,    repo_id="valid_org/test-feature-extractor-org"		,    push_to_hub=__UpperCAmelCase		,    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(__UpperCAmelCase		,    getattr(__UpperCAmelCase		,    __UpperCAmelCase       )       )


	def 		UpperCAmelCase  (							self       )->					Dict:







							'''simple docstring'''





							CustomFeatureExtractor.register_for_auto_class()
							lowerCAmelCase__       =						CustomFeatureExtractor.from_pretrained(__UpperCAmelCase       )

							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=__UpperCAmelCase       )
							# 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"       )














# this script reports modified .py files under the desired list of top-level sub-dirs passed as a list of arguments, e.g.:
#   python ./utils/get_modified_files.py utils src tests examples
#
# it uses git to find the forking point and which files were modified - i.e. files not under git won't be considered
# since the output of this script is fed into Makefile commands it doesn't print a newline after the results

import re
import subprocess
import sys


a_							=    subprocess.check_output('''git merge-base main HEAD'''.split()).decode('''utf-8''')
a_							=    subprocess.check_output(F"git diff --name-only {fork_point_sha}".split()).decode('''utf-8''').split()

a_							=    '''|'''.join(sys.argv[1:])
a_							=    re.compile(rF"^({joined_dirs}).*?\.py$")

a_							=    [x for x in modified_files if regex.match(x)]
print(''' '''.join(relevant_modified_files), end='''''')






