
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


lowerCamelCase__	=							get_tests_dir("fixtures")







class        lowerCAmelCase__      (   unittest.TestCase	):

      def  A_				(			self				)					->      int:


        '''simple docstring'''

        _UpperCamelCase						    =	mock.Mock()
        _UpperCamelCase						    =	5_00
        _UpperCamelCase						    =	{}
        _UpperCamelCase						    =	HTTPError
        _UpperCamelCase						    =	{}

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







      def  A_				(			self				)					->      List[Any]:


        '''simple docstring'''

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







@is_staging_test
class        lowerCAmelCase__      (   unittest.TestCase	):

      @classmethod
      def  A_				(			cls				)					->      int:


        '''simple docstring'''

        _UpperCamelCase						    =	TOKEN
        HfFolder.save_token(lowercase__				)

      @classmethod
      def  A_				(			cls				)					->      Optional[Any]:


        '''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  A_				(			self				)					->      Any:


        '''simple docstring'''

        _UpperCamelCase						    =	WavaVecaFeatureExtractor.from_pretrained(lowercase__				)
        feature_extractor.push_to_hub("""test-feature-extractor"""       ,							use_auth_token=self._token				)

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

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

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

      def  A_				(			self				)					->      Optional[Any]:


        '''simple docstring'''

        _UpperCamelCase						    =	WavaVecaFeatureExtractor.from_pretrained(lowercase__				)
        feature_extractor.push_to_hub("""valid_org/test-feature-extractor"""       ,							use_auth_token=self._token				)

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

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

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







      def  A_				(			self				)					->      int:


        '''simple docstring'''

        CustomFeatureExtractor.register_for_auto_class()
        _UpperCamelCase						    =	CustomFeatureExtractor.from_pretrained(lowercase__				)

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

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





import warnings

from ...utils import logging
from .image_processing_beit import BeitImageProcessor


lowerCamelCase__	=							logging.get_logger(__name__)







class        lowerCAmelCase__      (   __lowercase	):

						def __init__(			self       ,							*a       ,							**a				)					->      None:


								'''simple docstring'''

								warnings.warn(
								    """The class BeitFeatureExtractor is deprecated and will be removed in version 5 of Transformers. Please"""
								    """ use BeitImageProcessor instead."""       ,							a       ,							)
								super().__init__(*a       ,							**a				)



