
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


_UpperCAmelCase					: Tuple      =       get_tests_dir("fixtures")


class 				lowercase					(		unittest.TestCase   ):



		def __UpperCamelCase ( self       )  ->					List[Any]:
				"""simple docstring"""
				# A mock response for an HTTP head request to emulate server down
				UpperCamelCase		=     mock.Mock()
				UpperCamelCase		=     500
				UpperCamelCase		=     {}
				UpperCamelCase		=     HTTPError
				UpperCamelCase		=     {}

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



		def __UpperCamelCase ( self       )  ->					List[Any]:
				"""simple docstring"""
				# This test is for deprecated behavior and can be removed in v5
				UpperCamelCase		=     ViTImageProcessor.from_pretrained(
				    'https://huggingface.co/hf-internal-testing/tiny-random-vit/resolve/main/preprocessor_config.json'       )



		def __UpperCamelCase ( self       )  ->					List[Any]:
				"""simple docstring"""
				with self.assertRaises(A_       ):
						# config is in subfolder, the following should not work without specifying the subfolder
						UpperCamelCase		=     AutoImageProcessor.from_pretrained('hf-internal-testing/stable-diffusion-all-variants'       )

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

				self.assertIsNotNone(A_       )






@is_staging_test
class 				lowercase					(		unittest.TestCase   ):



		@classmethod
		def __UpperCamelCase ( cls       )  ->					str:
				"""simple docstring"""
				UpperCamelCase		=     TOKEN
				HfFolder.save_token(A_       )



		@classmethod
		def __UpperCamelCase ( cls       )  ->					List[str]:
				"""simple docstring"""
				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 __UpperCamelCase ( self       )  ->					Any:
				"""simple docstring"""
				UpperCamelCase		=     ViTImageProcessor.from_pretrained(A_       )
				image_processor.push_to_hub('test-image-processor'				,      use_auth_token=self._token       )

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

				# 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(
						    A_				,      repo_id='test-image-processor'				,      push_to_hub=A_				,      use_auth_token=self._token       )

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



		def __UpperCamelCase ( self       )  ->					Optional[Any]:
				"""simple docstring"""
				UpperCamelCase		=     ViTImageProcessor.from_pretrained(A_       )
				image_processor.push_to_hub('valid_org/test-image-processor'				,      use_auth_token=self._token       )

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

				# 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(
						    A_				,      repo_id='valid_org/test-image-processor-org'				,      push_to_hub=A_				,      use_auth_token=self._token       )

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



		def __UpperCamelCase ( self       )  ->					Optional[Any]:
				"""simple docstring"""
				CustomImageProcessor.register_for_auto_class()
				UpperCamelCase		=     CustomImageProcessor.from_pretrained(A_       )

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

				UpperCamelCase		=     AutoImageProcessor.from_pretrained(
				    F'''{USER}/test-dynamic-image-processor'''				,      trust_remote_code=A_       )
				# 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'       )


import os

from huggingface_hub.constants import HUGGINGFACE_HUB_CACHE, hf_cache_home


_UpperCAmelCase					: Optional[int]      =       HUGGINGFACE_HUB_CACHE


_UpperCAmelCase					: List[str]      =       "config.json"
_UpperCAmelCase					: Union[str, Any]      =       "diffusion_pytorch_model.bin"
_UpperCAmelCase					: List[Any]      =       "diffusion_flax_model.msgpack"
_UpperCAmelCase					: Optional[Any]      =       "model.onnx"
_UpperCAmelCase					: int      =       "diffusion_pytorch_model.safetensors"
_UpperCAmelCase					: Optional[Any]      =       "weights.pb"
_UpperCAmelCase					: Tuple      =       "https://huggingface.co"
_UpperCAmelCase					: Union[str, Any]      =       default_cache_path
_UpperCAmelCase					: Optional[Any]      =       "diffusers_modules"
_UpperCAmelCase					: List[Any]      =       os.getenv("HF_MODULES_CACHE", os.path.join(hf_cache_home, "modules"))
_UpperCAmelCase					: Tuple      =       ["fp16", "non-ema"]
_UpperCAmelCase					: Any      =       ".self_attn"
