





"""simple docstring"""





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 		SCREAMING_SNAKE_CASE_							(    unittest.TestCase   ):
				"""simple docstring"""




				def 					__lowercase  (     self  :int			):
											__lowerCamelCase      :      str         =0




				def 					__lowercase  (     self  :Union[str, Any]			):
											__lowerCamelCase      :      List[str]         =AutoImageProcessor.from_pretrained('''openai/clip-vit-base-patch32'''			)
											self.assertIsInstance(__lowercase						,    __lowercase			)




				def 					__lowercase  (     self  :Optional[Any]			):
											with tempfile.TemporaryDirectory() as tmpdirname:
																		__lowerCamelCase      :      Optional[Any]         =Path(__lowercase			) / '''preprocessor_config.json'''
																		__lowerCamelCase      :      Union[str, Any]         =Path(__lowercase			) / '''config.json'''
																		json.dump(
																		    {'''image_processor_type''': '''CLIPImageProcessor''', '''processor_class''': '''CLIPProcessor'''}						,    open(__lowercase						,    '''w'''			)						,    )
																		json.dump({'''model_type''': '''clip'''}						,    open(__lowercase						,    '''w'''			)			)

																		__lowerCamelCase      :      Union[str, Any]         =AutoImageProcessor.from_pretrained(__lowercase			)
																		self.assertIsInstance(__lowercase						,    __lowercase			)




				def 					__lowercase  (     self  :Tuple			):
											# Ensure we can load the image processor from the feature extractor config
											with tempfile.TemporaryDirectory() as tmpdirname:
																		__lowerCamelCase      :      Dict         =Path(__lowercase			) / '''preprocessor_config.json'''
																		__lowerCamelCase      :      Tuple         =Path(__lowercase			) / '''config.json'''
																		json.dump(
																		    {'''feature_extractor_type''': '''CLIPFeatureExtractor''', '''processor_class''': '''CLIPProcessor'''}						,    open(__lowercase						,    '''w'''			)						,    )
																		json.dump({'''model_type''': '''clip'''}						,    open(__lowercase						,    '''w'''			)			)

																		__lowerCamelCase      :      Tuple         =AutoImageProcessor.from_pretrained(__lowercase			)
																		self.assertIsInstance(__lowercase						,    __lowercase			)




				def 					__lowercase  (     self  :str			):
											with tempfile.TemporaryDirectory() as tmpdirname:
																		__lowerCamelCase      :      Tuple         =CLIPConfig()

																		# Create a dummy config file with image_proceesor_type
																		__lowerCamelCase      :      Any         =Path(__lowercase			) / '''preprocessor_config.json'''
																		__lowerCamelCase      :      int         =Path(__lowercase			) / '''config.json'''
																		json.dump(
																		    {'''image_processor_type''': '''CLIPImageProcessor''', '''processor_class''': '''CLIPProcessor'''}						,    open(__lowercase						,    '''w'''			)						,    )
																		json.dump({'''model_type''': '''clip'''}						,    open(__lowercase						,    '''w'''			)			)

																		# remove image_processor_type to make sure config.json alone is enough to load image processor locally
																		__lowerCamelCase      :      int         =AutoImageProcessor.from_pretrained(__lowercase			).to_dict()

																		config_dict.pop('''image_processor_type'''			)
																		__lowerCamelCase      :      List[Any]         =CLIPImageProcessor(**__lowercase			)

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

																		__lowerCamelCase      :      Optional[int]         =AutoImageProcessor.from_pretrained(__lowercase			)

																		# make sure private variable is not incorrectly saved
																		__lowerCamelCase      :      Optional[Any]         =json.loads(config.to_json_string()			)
																		self.assertTrue('''_processor_class''' not in dict_as_saved			)

											self.assertIsInstance(__lowercase						,    __lowercase			)




				def 					__lowercase  (     self  :int			):
											with tempfile.TemporaryDirectory() as tmpdirname:
																		__lowerCamelCase      :      List[str]         =Path(__lowercase			) / '''preprocessor_config.json'''
																		json.dump(
																		    {'''image_processor_type''': '''CLIPImageProcessor''', '''processor_class''': '''CLIPProcessor'''}						,    open(__lowercase						,    '''w'''			)						,    )

																		__lowerCamelCase      :      int         =AutoImageProcessor.from_pretrained(__lowercase			)
																		self.assertIsInstance(__lowercase						,    __lowercase			)




				def 					__lowercase  (     self  :Optional[Any]			):
											with self.assertRaisesRegex(
											    __lowercase						,    '''clip-base is not a local folder and is not a valid model identifier'''			):
																		__lowerCamelCase      :      Optional[int]         =AutoImageProcessor.from_pretrained('''clip-base'''			)




				def 					__lowercase  (     self  :int			):
											with self.assertRaisesRegex(
											    __lowercase						,    r'''aaaaaa is not a valid git identifier \(branch name, tag name or commit id\)'''			):
																		__lowerCamelCase      :      Any         =AutoImageProcessor.from_pretrained(__lowercase						,    revision='''aaaaaa'''			)




				def 					__lowercase  (     self  :Dict			):
											with self.assertRaisesRegex(
											    __lowercase						,    '''hf-internal-testing/config-no-model does not appear to have a file named preprocessor_config.json.'''						,    ):
																		__lowerCamelCase      :      List[Any]         =AutoImageProcessor.from_pretrained('''hf-internal-testing/config-no-model'''			)




				def 					__lowercase  (     self  :Any			):
											# If remote code is not set, we will time out when asking whether to load the model.
											with self.assertRaises(__lowercase			):
																		__lowerCamelCase      :      List[str]         =AutoImageProcessor.from_pretrained('''hf-internal-testing/test_dynamic_image_processor'''			)
											# If remote code is disabled, we can't load this config.
											with self.assertRaises(__lowercase			):
																		__lowerCamelCase      :      Optional[Any]         =AutoImageProcessor.from_pretrained(
																		    '''hf-internal-testing/test_dynamic_image_processor'''						,    trust_remote_code=__lowercase			)

											__lowerCamelCase      :      Optional[Any]         =AutoImageProcessor.from_pretrained(
											    '''hf-internal-testing/test_dynamic_image_processor'''						,    trust_remote_code=__lowercase			)
											self.assertEqual(image_processor.__class__.__name__						,    '''NewImageProcessor'''			)

											# Test image processor can be reloaded.
											with tempfile.TemporaryDirectory() as tmp_dir:
																		image_processor.save_pretrained(__lowercase			)
																		__lowerCamelCase      :      Union[str, Any]         =AutoImageProcessor.from_pretrained(__lowercase						,    trust_remote_code=__lowercase			)
											self.assertEqual(reloaded_image_processor.__class__.__name__						,    '''NewImageProcessor'''			)




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

																		with tempfile.TemporaryDirectory() as tmpdirname:
																									__lowerCamelCase      :      List[str]         =Path(__lowercase			) / '''preprocessor_config.json'''
																									__lowerCamelCase      :      Dict         =Path(__lowercase			) / '''config.json'''
																									json.dump(
																									    {'''feature_extractor_type''': '''CLIPFeatureExtractor''', '''processor_class''': '''CLIPProcessor'''}						,    open(__lowercase						,    '''w'''			)						,    )
																									json.dump({'''model_type''': '''clip'''}						,    open(__lowercase						,    '''w'''			)			)

																									__lowerCamelCase      :      str         =CustomImageProcessor.from_pretrained(__lowercase			)

																		# 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(__lowercase			)
																									__lowerCamelCase      :      Any         =AutoImageProcessor.from_pretrained(__lowercase			)
																									self.assertIsInstance(__lowercase						,    __lowercase			)

											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 					__lowercase  (     self  :Optional[Any]			):
											class 		SCREAMING_SNAKE_CASE_							(    snake_case__   ):
															"""simple docstring"""
															__snake_case   :       Tuple	 =		True

											try:
																		AutoConfig.register('''custom'''						,    __lowercase			)
																		AutoImageProcessor.register(__lowercase						,    __lowercase			)
																		# If remote code is not set, the default is to use local
																		__lowerCamelCase      :      Any         =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.
																		__lowerCamelCase      :      List[str]         =AutoImageProcessor.from_pretrained(
																		    '''hf-internal-testing/test_dynamic_image_processor'''						,    trust_remote_code=__lowercase			)
																		self.assertEqual(image_processor.__class__.__name__						,    '''NewImageProcessor'''			)
																		self.assertTrue(image_processor.is_local			)

																		# If remote is enabled, we load from the Hub
																		__lowerCamelCase      :      Union[str, Any]         =AutoImageProcessor.from_pretrained(
																		    '''hf-internal-testing/test_dynamic_image_processor'''						,    trust_remote_code=__lowercase			)
																		self.assertEqual(image_processor.__class__.__name__						,    '''NewImageProcessor'''			)
																		self.assertTrue(not hasattr(__lowercase						,    '''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]











"""simple docstring"""





from .glue import GlueDataset, GlueDataTrainingArguments
from .language_modeling import (
    LineByLineTextDataset,
    LineByLineWithRefDataset,
    LineByLineWithSOPTextDataset,
    TextDataset,
    TextDatasetForNextSentencePrediction,
)
from .squad import SquadDataset, SquadDataTrainingArguments




