


import json
import sys
import tempfile
import unittest
from pathlib import Path

import transformers
from transformers import (
    CONFIG_MAPPING,
    IMAGE_PROCESSOR_MAPPING,
    AutoConfig,
    AutoImageProcessor,
    CLIPConfig,
    CLIPImageProcessor,
)
from transformers.testing_utils import DUMMY_UNKNOWN_IDENTIFIER


sys.path.append(str(Path(__file__).parent.parent.parent.parent / "utils"))

from test_module.custom_configuration import CustomConfig  # noqa E402
from test_module.custom_image_processing import CustomImageProcessor  # noqa E402




class    UpperCAmelCase					(       unittest.TestCase    ):




			def   lowerCamelCase_					(						self							:		Dict						):







						"""simple docstring"""







						UpperCamelCase         =					0




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







						"""simple docstring"""







						UpperCamelCase         =					AutoImageProcessor.from_pretrained("""openai/clip-vit-base-patch32"""						)
						self.assertIsInstance(__magic_name__       ,       __magic_name__						)




			def   lowerCamelCase_					(						self							:		Any						):







						"""simple docstring"""







						with tempfile.TemporaryDirectory() as tmpdirname:
									UpperCamelCase         =					Path(__magic_name__						) / """preprocessor_config.json"""
									UpperCamelCase         =					Path(__magic_name__						) / """config.json"""
									json.dump(
									    {"""image_processor_type""": """CLIPImageProcessor""", """processor_class""": """CLIPProcessor"""}       ,       open(__magic_name__       ,       """w"""						)       ,       )
									json.dump({"""model_type""": """clip"""}       ,       open(__magic_name__       ,       """w"""						)						)

									UpperCamelCase         =					AutoImageProcessor.from_pretrained(__magic_name__						)
									self.assertIsInstance(__magic_name__       ,       __magic_name__						)




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







						"""simple docstring"""







						with tempfile.TemporaryDirectory() as tmpdirname:
									UpperCamelCase         =					Path(__magic_name__						) / """preprocessor_config.json"""
									UpperCamelCase         =					Path(__magic_name__						) / """config.json"""
									json.dump(
									    {"""feature_extractor_type""": """CLIPFeatureExtractor""", """processor_class""": """CLIPProcessor"""}       ,       open(__magic_name__       ,       """w"""						)       ,       )
									json.dump({"""model_type""": """clip"""}       ,       open(__magic_name__       ,       """w"""						)						)

									UpperCamelCase         =					AutoImageProcessor.from_pretrained(__magic_name__						)
									self.assertIsInstance(__magic_name__       ,       __magic_name__						)




			def   lowerCamelCase_					(						self							:		Optional[int]						):







						"""simple docstring"""







						with tempfile.TemporaryDirectory() as tmpdirname:
									UpperCamelCase         =					CLIPConfig()

									# Create a dummy config file with image_proceesor_type
									UpperCamelCase         =					Path(__magic_name__						) / """preprocessor_config.json"""
									UpperCamelCase         =					Path(__magic_name__						) / """config.json"""
									json.dump(
									    {"""image_processor_type""": """CLIPImageProcessor""", """processor_class""": """CLIPProcessor"""}       ,       open(__magic_name__       ,       """w"""						)       ,       )
									json.dump({"""model_type""": """clip"""}       ,       open(__magic_name__       ,       """w"""						)						)

									# remove image_processor_type to make sure config.json alone is enough to load image processor locally
									UpperCamelCase         =					AutoImageProcessor.from_pretrained(__magic_name__						).to_dict()

									config_dict.pop("""image_processor_type"""						)
									UpperCamelCase         =					CLIPImageProcessor(**__magic_name__						)

									# save in new folder
									model_config.save_pretrained(__magic_name__						)
									config.save_pretrained(__magic_name__						)

									UpperCamelCase         =					AutoImageProcessor.from_pretrained(__magic_name__						)

									# make sure private variable is not incorrectly saved
									UpperCamelCase         =					json.loads(config.to_json_string()						)
									self.assertTrue("""_processor_class""" not in dict_as_saved						)

						self.assertIsInstance(__magic_name__       ,       __magic_name__						)




			def   lowerCamelCase_					(						self							:		Dict						):







						"""simple docstring"""







						with tempfile.TemporaryDirectory() as tmpdirname:
									UpperCamelCase         =					Path(__magic_name__						) / """preprocessor_config.json"""
									json.dump(
									    {"""image_processor_type""": """CLIPImageProcessor""", """processor_class""": """CLIPProcessor"""}       ,       open(__magic_name__       ,       """w"""						)       ,       )

									UpperCamelCase         =					AutoImageProcessor.from_pretrained(__magic_name__						)
									self.assertIsInstance(__magic_name__       ,       __magic_name__						)




			def   lowerCamelCase_					(						self							:		str						):







						"""simple docstring"""







						with self.assertRaisesRegex(
						    __magic_name__       ,       """clip-base is not a local folder and is not a valid model identifier"""						):
									UpperCamelCase         =					AutoImageProcessor.from_pretrained("""clip-base"""						)




			def   lowerCamelCase_					(						self							:		List[Any]						):







						"""simple docstring"""







						with self.assertRaisesRegex(
						    __magic_name__       ,       R"""aaaaaa is not a valid git identifier \(branch name, tag name or commit id\)"""						):
									UpperCamelCase         =					AutoImageProcessor.from_pretrained(__magic_name__       ,       revision="""aaaaaa"""						)




			def   lowerCamelCase_					(						self							:		Any						):







						"""simple docstring"""







						with self.assertRaisesRegex(
						    __magic_name__       ,       """hf-internal-testing/config-no-model does not appear to have a file named preprocessor_config.json."""       ,       ):
									UpperCamelCase         =					AutoImageProcessor.from_pretrained("""hf-internal-testing/config-no-model"""						)




			def   lowerCamelCase_					(						self							:		Optional[Any]						):







						"""simple docstring"""







						with self.assertRaises(__magic_name__						):
									UpperCamelCase         =					AutoImageProcessor.from_pretrained("""hf-internal-testing/test_dynamic_image_processor"""						)
						# If remote code is disabled, we can't load this config.
						with self.assertRaises(__magic_name__						):
									UpperCamelCase         =					AutoImageProcessor.from_pretrained(
									    """hf-internal-testing/test_dynamic_image_processor"""       ,       trust_remote_code=__magic_name__						)

						UpperCamelCase         =					AutoImageProcessor.from_pretrained(
						    """hf-internal-testing/test_dynamic_image_processor"""       ,       trust_remote_code=__magic_name__						)
						self.assertEqual(image_processor.__class__.__name__       ,       """NewImageProcessor"""						)

						# Test image processor can be reloaded.
						with tempfile.TemporaryDirectory() as tmp_dir:
									image_processor.save_pretrained(__magic_name__						)
									UpperCamelCase         =					AutoImageProcessor.from_pretrained(__magic_name__       ,       trust_remote_code=__magic_name__						)
						self.assertEqual(reloaded_image_processor.__class__.__name__       ,       """NewImageProcessor"""						)




			def   lowerCamelCase_					(						self							:		List[Any]						):







						"""simple docstring"""







						try:
									AutoConfig.register("""custom"""       ,       __magic_name__						)
									AutoImageProcessor.register(__magic_name__       ,       __magic_name__						)
									# Trying to register something existing in the Transformers library will raise an error
									with self.assertRaises(__magic_name__						):
												AutoImageProcessor.register(__magic_name__       ,       __magic_name__						)

									with tempfile.TemporaryDirectory() as tmpdirname:
												UpperCamelCase         =					Path(__magic_name__						) / """preprocessor_config.json"""
												UpperCamelCase         =					Path(__magic_name__						) / """config.json"""
												json.dump(
												    {"""feature_extractor_type""": """CLIPFeatureExtractor""", """processor_class""": """CLIPProcessor"""}       ,       open(__magic_name__       ,       """w"""						)       ,       )
												json.dump({"""model_type""": """clip"""}       ,       open(__magic_name__       ,       """w"""						)						)

												UpperCamelCase         =					CustomImageProcessor.from_pretrained(__magic_name__						)

									# Now that the config is registered, it can be used as any other config with the auto-API
									with tempfile.TemporaryDirectory() as tmp_dir:
												image_processor.save_pretrained(__magic_name__						)
												UpperCamelCase         =					AutoImageProcessor.from_pretrained(__magic_name__						)
												self.assertIsInstance(__magic_name__       ,       __magic_name__						)

						finally:
									if "custom" in CONFIG_MAPPING._extra_content:
												del CONFIG_MAPPING._extra_content["custom"]
									if CustomConfig in IMAGE_PROCESSOR_MAPPING._extra_content:
												del IMAGE_PROCESSOR_MAPPING._extra_content[CustomConfig]





			def   lowerCamelCase_					(						self							:		Tuple						):







						"""simple docstring"""







						class    UpperCAmelCase					(       __snake_case    ):
									lowercase						= True

						try:
									AutoConfig.register("""custom"""       ,       __magic_name__						)
									AutoImageProcessor.register(__magic_name__       ,       __magic_name__						)
									# If remote code is not set, the default is to use local
									UpperCamelCase         =					AutoImageProcessor.from_pretrained("""hf-internal-testing/test_dynamic_image_processor"""						)
									self.assertEqual(image_processor.__class__.__name__       ,       """NewImageProcessor"""						)
									self.assertTrue(image_processor.is_local						)

									# If remote code is disabled, we load the local one.
									UpperCamelCase         =					AutoImageProcessor.from_pretrained(
									    """hf-internal-testing/test_dynamic_image_processor"""       ,       trust_remote_code=__magic_name__						)
									self.assertEqual(image_processor.__class__.__name__       ,       """NewImageProcessor"""						)
									self.assertTrue(image_processor.is_local						)

									# If remote is enabled, we load from the Hub
									UpperCamelCase         =					AutoImageProcessor.from_pretrained(
									    """hf-internal-testing/test_dynamic_image_processor"""       ,       trust_remote_code=__magic_name__						)
									self.assertEqual(image_processor.__class__.__name__       ,       """NewImageProcessor"""						)
									self.assertTrue(not hasattr(__magic_name__       ,       """is_local"""						)						)

						finally:
									if "custom" in CONFIG_MAPPING._extra_content:
												del CONFIG_MAPPING._extra_content["custom"]
									if CustomConfig in IMAGE_PROCESSOR_MAPPING._extra_content:
												del IMAGE_PROCESSOR_MAPPING._extra_content[CustomConfig]








from ..utils import DummyObject, requires_backends




class    UpperCAmelCase					(       metaclass=__snake_case    ):
			lowercase						= ["""keras_nlp"""]




			def __init__(						self							:		List[str]       ,       *__magic_name__							:		str       ,       **__magic_name__							:		int						):







						"""simple docstring"""







						requires_backends(self       ,       ["""keras_nlp"""]						)




