

'''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 AutoImageProcessor, ViTImageProcessor
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_image_processing import CustomImageProcessor  # noqa E402


lowerCAmelCase__											=	get_tests_dir('''fixtures''')






class 			lowercase_	(unittest.TestCase      ):




  """simple docstring"""




  def 					SCREAMING_SNAKE_CASE      (      self   :     Tuple			):
   # A mock response for an HTTP head request to emulate server down
   __lowercase							  = mock.Mock()
   __lowercase							  = 5_0_0
   __lowercase							  = {}
   __lowercase							  = HTTPError
   __lowercase							  = {}

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






  def 					SCREAMING_SNAKE_CASE      (      self   :     Optional[int]			):
   # This test is for deprecated behavior and can be removed in v5
   __lowercase							  = ViTImageProcessor.from_pretrained(
       '''https://huggingface.co/hf-internal-testing/tiny-random-vit/resolve/main/preprocessor_config.json'''			)






  def 					SCREAMING_SNAKE_CASE      (      self   :     Dict			):
   with self.assertRaises(lowercase__			):
    # config is in subfolder, the following should not work without specifying the subfolder
    __lowercase							  = AutoImageProcessor.from_pretrained('''hf-internal-testing/stable-diffusion-all-variants'''			)

   __lowercase							  = AutoImageProcessor.from_pretrained(
       '''hf-internal-testing/stable-diffusion-all-variants'''					,subfolder='''feature_extractor'''			)

   self.assertIsNotNone(lowercase__			)






@is_staging_test
class 			lowercase_	(unittest.TestCase      ):




  """simple docstring"""




  @classmethod
  def 					SCREAMING_SNAKE_CASE      (      cls   :     Tuple			):
   __lowercase							  = TOKEN
   HfFolder.save_token(lowercase__			)






  @classmethod
  def 					SCREAMING_SNAKE_CASE      (      cls   :     Dict			):
   try:
    delete_repo(token=cls._token					,repo_id='''test-image-processor'''			)
   except HTTPError:
    pass

   try:
    delete_repo(token=cls._token					,repo_id='''valid_org/test-image-processor-org'''			)
   except HTTPError:
    pass

   try:
    delete_repo(token=cls._token					,repo_id='''test-dynamic-image-processor'''			)
   except HTTPError:
    pass






  def 					SCREAMING_SNAKE_CASE      (      self   :     Optional[int]			):
   __lowercase							  = ViTImageProcessor.from_pretrained(lowercase__			)
   image_processor.push_to_hub('''test-image-processor'''					,use_auth_token=self._token			)

   __lowercase							  = ViTImageProcessor.from_pretrained(F"{USER}/test-image-processor"			)
   for k, v in image_processor.__dict__.items():
    self.assertEqual(lowercase__					,getattr(lowercase__					,lowercase__			)			)

   # Reset repo
   delete_repo(token=self._token					,repo_id='''test-image-processor'''			)

   # Push to hub via save_pretrained
   with tempfile.TemporaryDirectory() as tmp_dir:
    image_processor.save_pretrained(
        lowercase__					,repo_id='''test-image-processor'''					,push_to_hub=lowercase__					,use_auth_token=self._token			)

   __lowercase							  = ViTImageProcessor.from_pretrained(F"{USER}/test-image-processor"			)
   for k, v in image_processor.__dict__.items():
    self.assertEqual(lowercase__					,getattr(lowercase__					,lowercase__			)			)






  def 					SCREAMING_SNAKE_CASE      (      self   :     Optional[int]			):
   __lowercase							  = ViTImageProcessor.from_pretrained(lowercase__			)
   image_processor.push_to_hub('''valid_org/test-image-processor'''					,use_auth_token=self._token			)

   __lowercase							  = ViTImageProcessor.from_pretrained('''valid_org/test-image-processor'''			)
   for k, v in image_processor.__dict__.items():
    self.assertEqual(lowercase__					,getattr(lowercase__					,lowercase__			)			)

   # Reset repo
   delete_repo(token=self._token					,repo_id='''valid_org/test-image-processor'''			)

   # Push to hub via save_pretrained
   with tempfile.TemporaryDirectory() as tmp_dir:
    image_processor.save_pretrained(
        lowercase__					,repo_id='''valid_org/test-image-processor-org'''					,push_to_hub=lowercase__					,use_auth_token=self._token			)

   __lowercase							  = ViTImageProcessor.from_pretrained('''valid_org/test-image-processor-org'''			)
   for k, v in image_processor.__dict__.items():
    self.assertEqual(lowercase__					,getattr(lowercase__					,lowercase__			)			)






  def 					SCREAMING_SNAKE_CASE      (      self   :     Tuple			):
   CustomImageProcessor.register_for_auto_class()
   __lowercase							  = CustomImageProcessor.from_pretrained(lowercase__			)

   image_processor.push_to_hub('''test-dynamic-image-processor'''					,use_auth_token=self._token			)

   # This has added the proper auto_map field to the config
   self.assertDictEqual(
       image_processor.auto_map					,{'''AutoImageProcessor''': '''custom_image_processing.CustomImageProcessor'''}					,)

   __lowercase							  = AutoImageProcessor.from_pretrained(
       F"{USER}/test-dynamic-image-processor"					,trust_remote_code=lowercase__			)
   # Can't make an isinstance check because the new_image_processor is from the CustomImageProcessor class of a dynamic module
   self.assertEqual(new_image_processor.__class__.__name__					,'''CustomImageProcessor'''			)




'''simple docstring'''






import pytest
import requests

from datasets.utils.file_utils import http_head

from .utils import OfflineSimulationMode, RequestWouldHangIndefinitelyError, offline


@pytest.mark.integration
def 		_A     (    ):






 """simple docstring"""



 with offline(OfflineSimulationMode.CONNECTION_TIMES_OUT      ):
  with pytest.raises(A__      ):
   requests.request('''GET'''     ,				'''https://huggingface.co'''      )
  with pytest.raises(requests.exceptions.ConnectTimeout      ):
   requests.request('''GET'''     ,				'''https://huggingface.co'''     ,				timeout=1.0      )


@pytest.mark.integration
def 		_A     (    ):






 """simple docstring"""



 with offline(OfflineSimulationMode.CONNECTION_FAILS      ):
  with pytest.raises(requests.exceptions.ConnectionError      ):
   requests.request('''GET'''     ,				'''https://huggingface.co'''      )






def 		_A     (    ):






 """simple docstring"""



 with offline(OfflineSimulationMode.HF_DATASETS_OFFLINE_SET_TO_1      ):
  with pytest.raises(A__      ):
   http_head('''https://huggingface.co'''      )

