





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 				__lowerCAmelCase       (    unittest.TestCase):







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



        '''simple docstring'''




        a__	:					Union[str, Any]										=0







      def    _lowercase  (    self							)   ->						Optional[int]:



        '''simple docstring'''




        a__	:					Any										=AutoImageProcessor.from_pretrained("openai/clip-vit-base-patch32"							)
        self.assertIsInstance(lowerCAmelCase__		,      lowerCAmelCase__							)







      def    _lowercase  (    self							)   ->						str:



        '''simple docstring'''




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

          a__	:					Any										=AutoImageProcessor.from_pretrained(lowerCAmelCase__							)
          self.assertIsInstance(lowerCAmelCase__		,      lowerCAmelCase__							)







      def    _lowercase  (    self							)   ->						int:



        '''simple docstring'''




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

          a__	:					str										=AutoImageProcessor.from_pretrained(lowerCAmelCase__							)
          self.assertIsInstance(lowerCAmelCase__		,      lowerCAmelCase__							)







      def    _lowercase  (    self							)   ->						Union[str, Any]:



        '''simple docstring'''




        with tempfile.TemporaryDirectory() as tmpdirname:
          a__	:					Optional[int]										=CLIPConfig()

          # Create a dummy config file with image_proceesor_type
          a__	:					Tuple										=Path(lowerCAmelCase__							) / "preprocessor_config.json"
          a__	:					Union[str, Any]										=Path(lowerCAmelCase__							) / "config.json"
          json.dump(
              {"image_processor_type": "CLIPImageProcessor", "processor_class": "CLIPProcessor"}		,      open(lowerCAmelCase__		,      "w"							)		,      )
          json.dump({"model_type": "clip"}		,      open(lowerCAmelCase__		,      "w"							)							)

          # remove image_processor_type to make sure config.json alone is enough to load image processor locally
          a__	:					List[Any]										=AutoImageProcessor.from_pretrained(lowerCAmelCase__							).to_dict()

          config_dict.pop("image_processor_type"							)
          a__	:					int										=CLIPImageProcessor(**lowerCAmelCase__							)

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

          a__	:					Tuple										=AutoImageProcessor.from_pretrained(lowerCAmelCase__							)

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

        self.assertIsInstance(lowerCAmelCase__		,      lowerCAmelCase__							)







      def    _lowercase  (    self							)   ->						List[Any]:



        '''simple docstring'''




        with tempfile.TemporaryDirectory() as tmpdirname:
          a__	:					List[str]										=Path(lowerCAmelCase__							) / "preprocessor_config.json"
          json.dump(
              {"image_processor_type": "CLIPImageProcessor", "processor_class": "CLIPProcessor"}		,      open(lowerCAmelCase__		,      "w"							)		,      )

          a__	:					Optional[int]										=AutoImageProcessor.from_pretrained(lowerCAmelCase__							)
          self.assertIsInstance(lowerCAmelCase__		,      lowerCAmelCase__							)







      def    _lowercase  (    self							)   ->						int:



        '''simple docstring'''




        with self.assertRaisesRegex(
            lowerCAmelCase__		,      "clip-base is not a local folder and is not a valid model identifier"							):
          a__	:					Optional[Any]										=AutoImageProcessor.from_pretrained("clip-base"							)







      def    _lowercase  (    self							)   ->						Optional[int]:



        '''simple docstring'''




        with self.assertRaisesRegex(
            lowerCAmelCase__		,      r"aaaaaa is not a valid git identifier \(branch name, tag name or commit id\)"							):
          a__	:					Tuple										=AutoImageProcessor.from_pretrained(lowerCAmelCase__		,      revision="aaaaaa"							)







      def    _lowercase  (    self							)   ->						int:



        '''simple docstring'''




        with self.assertRaisesRegex(
            lowerCAmelCase__		,      "hf-internal-testing/config-no-model does not appear to have a file named preprocessor_config.json."		,      ):
          a__	:					List[str]										=AutoImageProcessor.from_pretrained("hf-internal-testing/config-no-model"							)







      def    _lowercase  (    self							)   ->						Optional[int]:



        '''simple docstring'''




        with self.assertRaises(lowerCAmelCase__							):
          a__	:					Optional[int]										=AutoImageProcessor.from_pretrained("hf-internal-testing/test_dynamic_image_processor"							)
        # If remote code is disabled, we can't load this config.
        with self.assertRaises(lowerCAmelCase__							):
          a__	:					Any										=AutoImageProcessor.from_pretrained(
              "hf-internal-testing/test_dynamic_image_processor"		,      trust_remote_code=lowerCAmelCase__							)

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

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







      def    _lowercase  (    self							)   ->						Dict:



        '''simple docstring'''




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

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

            a__	:					List[Any]										=CustomImageProcessor.from_pretrained(lowerCAmelCase__							)

          # 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(lowerCAmelCase__							)
            a__	:					Tuple										=AutoImageProcessor.from_pretrained(lowerCAmelCase__							)
            self.assertIsInstance(lowerCAmelCase__		,      lowerCAmelCase__							)

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



        '''simple docstring'''




        class 				__lowerCAmelCase       (    UpperCamelCase__):
              _lowercase				:					Union[str, Any]						=			True

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

          # If remote is enabled, we load from the Hub
          a__	:					List[str]										=AutoImageProcessor.from_pretrained(
              "hf-internal-testing/test_dynamic_image_processor"		,      trust_remote_code=lowerCAmelCase__							)
          self.assertEqual(image_processor.__class__.__name__		,      "NewImageProcessor"							)
          self.assertTrue(not hasattr(lowerCAmelCase__		,      "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 ...configuration_utils import PretrainedConfig
from ...utils import logging


UpperCAmelCase	:	Optional[Any]		     =       logging.get_logger(__name__)

UpperCAmelCase	:	Optional[int]		     =       {
    """google/canine-s""": """https://huggingface.co/google/canine-s/resolve/main/config.json""",
    # See all CANINE models at https://huggingface.co/models?filter=canine
}







class 				__lowerCAmelCase       (    UpperCamelCase__):
      _lowercase				:					List[Any]						=			"""canine"""







      def __init__(    self		,      lowerCAmelCase__=7_6_8		,      lowerCAmelCase__=1_2		,      lowerCAmelCase__=1_2		,      lowerCAmelCase__=3_0_7_2		,      lowerCAmelCase__="gelu"		,      lowerCAmelCase__=0.1		,      lowerCAmelCase__=0.1		,      lowerCAmelCase__=1_6_3_8_4		,      lowerCAmelCase__=1_6		,      lowerCAmelCase__=0.02		,      lowerCAmelCase__=1E-12		,      lowerCAmelCase__=0		,      lowerCAmelCase__=0XE0_00		,      lowerCAmelCase__=0XE0_01		,      lowerCAmelCase__=4		,      lowerCAmelCase__=4		,      lowerCAmelCase__=8		,      lowerCAmelCase__=1_6_3_8_4		,      lowerCAmelCase__=1_2_8		,      **lowerCAmelCase__		,      )   ->						Dict:



        '''simple docstring'''




        super().__init__(pad_token_id=lowerCAmelCase__		,      bos_token_id=lowerCAmelCase__		,      eos_token_id=lowerCAmelCase__		,      **lowerCAmelCase__							)

        a__	:					Optional[int]										=max_position_embeddings
        a__	:					str										=hidden_size
        a__	:					Optional[Any]										=num_hidden_layers
        a__	:					Tuple										=num_attention_heads
        a__	:					Optional[Any]										=intermediate_size
        a__	:					Optional[int]										=hidden_act
        a__	:					List[Any]										=hidden_dropout_prob
        a__	:					Union[str, Any]										=attention_probs_dropout_prob
        a__	:					Optional[Any]										=initializer_range
        a__	:					Union[str, Any]										=type_vocab_size
        a__	:					Optional[int]										=layer_norm_eps

        # Character config:
        a__	:					int										=downsampling_rate
        a__	:					Optional[Any]										=upsampling_kernel_size
        a__	:					Union[str, Any]										=num_hash_functions
        a__	:					Any										=num_hash_buckets
        a__	:					int										=local_transformer_stride






