




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


A_      			=       get_tests_dir('''fixtures''')






class       lowercase(  unittest.TestCase				):







 '''simple docstring'''





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




   '''simple docstring'''



   _snake_case							:	int			=						mock.Mock()
   _snake_case							:	Optional[int]			=						500
   _snake_case							:	Union[str, Any]			=						{}
   _snake_case							:	Tuple			=						HTTPError
   _snake_case							:	Any			=						{}

   # Download this model to make sure it's in the cache.
   _snake_case							:	Tuple			=						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:
     _snake_case							:	List[Any]			=						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:	Dict	):




   '''simple docstring'''



   _snake_case							:	Union[str, Any]			=						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:	Union[str, Any]	):




   '''simple docstring'''



   _snake_case							:	Optional[int]			=						TOKEN
   HfFolder.save_token(a_	)


 @classmethod
 def 				UpperCamelCase_     (       cls:	Tuple	):




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



   _snake_case							:	Dict			=						WavaVecaFeatureExtractor.from_pretrained(a_	)
   feature_extractor.push_to_hub("""test-feature-extractor""",   use_auth_token=self._token	)

   _snake_case							:	Tuple			=						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	)

   _snake_case							:	str			=						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:	str	):




   '''simple docstring'''



   _snake_case							:	Tuple			=						WavaVecaFeatureExtractor.from_pretrained(a_	)
   feature_extractor.push_to_hub("""valid_org/test-feature-extractor""",   use_auth_token=self._token	)

   _snake_case							:	Any			=						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	)

   _snake_case							:	Optional[int]			=						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:	Dict	):




   '''simple docstring'''



   CustomFeatureExtractor.register_for_auto_class()
   _snake_case							:	int			=						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"""},   )

   _snake_case							:	List[Any]			=						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"""


from abc import ABC, abstractmethod
from argparse import ArgumentParser






class       lowercase(  __a				):







 '''simple docstring'''





 @staticmethod
 @abstractmethod
 def 				UpperCamelCase_     (       a_:	ArgumentParser	):




   '''simple docstring'''



   raise NotImplementedError()


 @abstractmethod
 def 				UpperCamelCase_     (       self:	List[str]	):




   '''simple docstring'''



   raise NotImplementedError()


