





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


_SCREAMING_SNAKE_CASE   =      get_tests_dir('''fixtures''')






class 							__lowercase    ( unittest.TestCase  ):







 '''simple docstring'''

 def   _UpperCAmelCase       (self	)							->							str:







    '''simple docstring'''





    __lowercase			  =							mock.Mock()
    __lowercase			  =							500
    __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=_lowerCamelCase	) 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   _UpperCAmelCase       (self	)							->							Optional[int]:







    '''simple docstring'''





    __lowercase			  =							ViTImageProcessor.from_pretrained(
        '''https://huggingface.co/hf-internal-testing/tiny-random-vit/resolve/main/preprocessor_config.json'''	)


 def   _UpperCAmelCase       (self	)							->							Dict:







    '''simple docstring'''





    with self.assertRaises(_lowerCamelCase	):
       # 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(_lowerCamelCase	)






@is_staging_test
class 							__lowercase    ( unittest.TestCase  ):







 '''simple docstring'''

 @classmethod
 def   _UpperCAmelCase       (cls	)							->							Dict:







    '''simple docstring'''





    __lowercase			  =							TOKEN
    HfFolder.save_token(_lowerCamelCase	)


 @classmethod
 def   _UpperCAmelCase       (cls	)							->							List[Any]:







    '''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	)							->							str:







    '''simple docstring'''





    __lowercase			  =							ViTImageProcessor.from_pretrained(_lowerCamelCase	)
    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(_lowerCamelCase       ,getattr(_lowerCamelCase       ,_lowerCamelCase	)	)

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

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


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







    '''simple docstring'''





    __lowercase			  =							ViTImageProcessor.from_pretrained(_lowerCamelCase	)
    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(_lowerCamelCase       ,getattr(_lowerCamelCase       ,_lowerCamelCase	)	)

    # 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(
           _lowerCamelCase       ,repo_id='''valid_org/test-image-processor-org'''       ,push_to_hub=_lowerCamelCase       ,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(_lowerCamelCase       ,getattr(_lowerCamelCase       ,_lowerCamelCase	)	)


 def   _UpperCAmelCase       (self	)							->							Any:







    '''simple docstring'''





    CustomImageProcessor.register_for_auto_class()
    __lowercase			  =							CustomImageProcessor.from_pretrained(_lowerCamelCase	)

    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=_lowerCamelCase	)
    # 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'''



from dataclasses import dataclass
from enum import Enum
from typing import List, Optional, Union

import numpy as np
import PIL
from PIL import Image

from ...utils import BaseOutput, is_torch_available, is_transformers_available






@dataclass
class 							__lowercase    ( lowerCAmelCase__  ):







	'''simple docstring'''

	a      :			Union[List[PIL.Image.Image], np.ndarray]
	a      :			Optional[List[bool]]


if is_transformers_available() and is_torch_available():
	from .pipeline_semantic_stable_diffusion import SemanticStableDiffusionPipeline





