



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


__snake_case						:List[Any]						=					get_tests_dir('''fixtures''')

class    _A	(     unittest.TestCase   ):



       def 		_lowerCamelCase      (		self							:					Union[str, Any]):


           '''simple docstring'''

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

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





       def 		_lowerCamelCase      (		self							:					List[Any]):


           '''simple docstring'''

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


@is_staging_test
class    _A	(     unittest.TestCase   ):



       @classmethod
       def 		_lowerCamelCase      (		cls							:					List[str]):


           '''simple docstring'''

           __a							=    TOKEN
           HfFolder.save_token(__SCREAMING_SNAKE_CASE)



       @classmethod
       def 		_lowerCamelCase      (		cls							:					Optional[int]):


           '''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 		_lowerCamelCase      (		self							:					Dict):


           '''simple docstring'''

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

           __a							=    WavaVecaFeatureExtractor.from_pretrained(F'{USER}/test-feature-extractor')
           for k, v in feature_extractor.__dict__.items():
               self.assertEqual(__SCREAMING_SNAKE_CASE					,		getattr(__SCREAMING_SNAKE_CASE					,		__SCREAMING_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(
                   __SCREAMING_SNAKE_CASE					,		repo_id='''test-feature-extractor'''					,		push_to_hub=__SCREAMING_SNAKE_CASE					,		use_auth_token=self._token)

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



       def 		_lowerCamelCase      (		self							:					Dict):


           '''simple docstring'''

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

           __a							=    WavaVecaFeatureExtractor.from_pretrained('''valid_org/test-feature-extractor''')
           for k, v in feature_extractor.__dict__.items():
               self.assertEqual(__SCREAMING_SNAKE_CASE					,		getattr(__SCREAMING_SNAKE_CASE					,		__SCREAMING_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(
                   __SCREAMING_SNAKE_CASE					,		repo_id='''valid_org/test-feature-extractor-org'''					,		push_to_hub=__SCREAMING_SNAKE_CASE					,		use_auth_token=self._token)

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





       def 		_lowerCamelCase      (		self							:					List[str]):


           '''simple docstring'''

           CustomFeatureExtractor.register_for_auto_class()
           __a							=    CustomFeatureExtractor.from_pretrained(__SCREAMING_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'''}					,		)

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










def 					__snake_case     (      _UpperCAmelCase       ,			_UpperCAmelCase    ):
    return base * power(_UpperCAmelCase       ,			(exponent - 1)    ) if exponent else 1


if __name__ == "__main__":
 print('''Raise base to the power of exponent using recursion...''')
 __snake_case						:List[Any]						=					int(input('''Enter the base: ''').strip())
 __snake_case						:Dict						=					int(input('''Enter the exponent: ''').strip())
 __snake_case						:int						=					power(base, abs(exponent))
 if exponent < 0:  # power() does not properly deal w/ negative exponents
  __snake_case						:Optional[Any]						=					1 / result
 print(f'{base} to the power of {exponent} is {result}')





