

import argparse
import json
from pathlib import Path

import requests
import torch
from huggingface_hub import cached_download, hf_hub_url
from PIL import Image

from transformers import DPTConfig, DPTForDepthEstimation, DPTForSemanticSegmentation, DPTImageProcessor
from transformers.utils import logging


logging.set_verbosity_info()
_snake_case						: List[str]											=							logging.get_logger(__name__)





def    _A							(						__snake_case  :List[Any]  )   -> List[str]:



   """simple docstring"""


   __SCREAMING_SNAKE_CASE       =				DPTConfig()

   if "large" in checkpoint_url:
      __SCREAMING_SNAKE_CASE       =				1024
      __SCREAMING_SNAKE_CASE       =				4096
      __SCREAMING_SNAKE_CASE       =				24
      __SCREAMING_SNAKE_CASE       =				16
      __SCREAMING_SNAKE_CASE       =				[5, 11, 17, 23]
      __SCREAMING_SNAKE_CASE       =				[256, 512, 1024, 1024]
      __SCREAMING_SNAKE_CASE       =				(1, 384, 384)

   if "ade" in checkpoint_url:
      __SCREAMING_SNAKE_CASE       =				True

      __SCREAMING_SNAKE_CASE       =				150
      __SCREAMING_SNAKE_CASE       =				"""huggingface/label-files"""
      __SCREAMING_SNAKE_CASE       =				"""ade20k-id2label.json"""
      __SCREAMING_SNAKE_CASE       =				json.load(open(cached_download(hf_hub_url(lowerCamelCase__   , lowerCamelCase__   , repo_type="dataset"  )  )   , "r"  )  )
      __SCREAMING_SNAKE_CASE       =				{int(lowerCamelCase__  ): v for k, v in idalabel.items()}
      __SCREAMING_SNAKE_CASE       =				idalabel
      __SCREAMING_SNAKE_CASE       =				{v: k for k, v in idalabel.items()}
      __SCREAMING_SNAKE_CASE       =				[1, 150, 480, 480]

   return config, expected_shape





def    _A							(						__snake_case  :List[str]  )   -> int:



   """simple docstring"""


   __SCREAMING_SNAKE_CASE       =				["""pretrained.model.head.weight""", """pretrained.model.head.bias"""]
   for k in ignore_keys:
      state_dict.pop(lowerCamelCase__   , lowerCamelCase__  )





def    _A							(						__snake_case  :List[Any]  )   -> Optional[int]:



   """simple docstring"""


   if (
       "pretrained.model" in name
       and "cls_token" not in name
       and "pos_embed" not in name
       and "patch_embed" not in name
   ):
      __SCREAMING_SNAKE_CASE       =				name.replace("pretrained.model"   , "dpt.encoder"  )
   if "pretrained.model" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("pretrained.model"   , "dpt.embeddings"  )
   if "patch_embed" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("patch_embed"   , "patch_embeddings"  )
   if "pos_embed" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("pos_embed"   , "position_embeddings"  )
   if "attn.proj" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("attn.proj"   , "attention.output.dense"  )
   if "proj" in name and "project" not in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("proj"   , "projection"  )
   if "blocks" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("blocks"   , "layer"  )
   if "mlp.fc1" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("mlp.fc1"   , "intermediate.dense"  )
   if "mlp.fc2" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("mlp.fc2"   , "output.dense"  )
   if "norm1" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("norm1"   , "layernorm_before"  )
   if "norm2" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("norm2"   , "layernorm_after"  )
   if "scratch.output_conv" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("scratch.output_conv"   , "head"  )
   if "scratch" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("scratch"   , "neck"  )
   if "layer1_rn" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("layer1_rn"   , "convs.0"  )
   if "layer2_rn" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("layer2_rn"   , "convs.1"  )
   if "layer3_rn" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("layer3_rn"   , "convs.2"  )
   if "layer4_rn" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("layer4_rn"   , "convs.3"  )
   if "refinenet" in name:
      __SCREAMING_SNAKE_CASE       =				int(name[len("neck.refinenet"  ) : len("neck.refinenet"  ) + 1]  )
      # tricky here: we need to map 4 to 0, 3 to 1, 2 to 2 and 1 to 3
      __SCREAMING_SNAKE_CASE       =				name.replace(f'''refinenet{layer_idx}'''   , f'''fusion_stage.layers.{abs(layer_idx-4  )}'''  )
   if "out_conv" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("out_conv"   , "projection"  )
   if "resConfUnit1" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("resConfUnit1"   , "residual_layer1"  )
   if "resConfUnit2" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("resConfUnit2"   , "residual_layer2"  )
   if "conv1" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("conv1"   , "convolution1"  )
   if "conv2" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("conv2"   , "convolution2"  )
   # readout blocks
   if "pretrained.act_postprocess1.0.project.0" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("pretrained.act_postprocess1.0.project.0"   , "neck.reassemble_stage.readout_projects.0.0"  )
   if "pretrained.act_postprocess2.0.project.0" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("pretrained.act_postprocess2.0.project.0"   , "neck.reassemble_stage.readout_projects.1.0"  )
   if "pretrained.act_postprocess3.0.project.0" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("pretrained.act_postprocess3.0.project.0"   , "neck.reassemble_stage.readout_projects.2.0"  )
   if "pretrained.act_postprocess4.0.project.0" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("pretrained.act_postprocess4.0.project.0"   , "neck.reassemble_stage.readout_projects.3.0"  )
   # resize blocks
   if "pretrained.act_postprocess1.3" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("pretrained.act_postprocess1.3"   , "neck.reassemble_stage.layers.0.projection"  )
   if "pretrained.act_postprocess1.4" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("pretrained.act_postprocess1.4"   , "neck.reassemble_stage.layers.0.resize"  )
   if "pretrained.act_postprocess2.3" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("pretrained.act_postprocess2.3"   , "neck.reassemble_stage.layers.1.projection"  )
   if "pretrained.act_postprocess2.4" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("pretrained.act_postprocess2.4"   , "neck.reassemble_stage.layers.1.resize"  )
   if "pretrained.act_postprocess3.3" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("pretrained.act_postprocess3.3"   , "neck.reassemble_stage.layers.2.projection"  )
   if "pretrained.act_postprocess4.3" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("pretrained.act_postprocess4.3"   , "neck.reassemble_stage.layers.3.projection"  )
   if "pretrained.act_postprocess4.4" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("pretrained.act_postprocess4.4"   , "neck.reassemble_stage.layers.3.resize"  )
   if "pretrained" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("pretrained"   , "dpt"  )
   if "bn" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("bn"   , "batch_norm"  )
   if "head" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("head"   , "head.head"  )
   if "encoder.norm" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("encoder.norm"   , "layernorm"  )
   if "auxlayer" in name:
      __SCREAMING_SNAKE_CASE       =				name.replace("auxlayer"   , "auxiliary_head.head"  )

   return name





def    _A							(						__snake_case  :List[Any]   , __snake_case  :Any  )   -> Union[str, Any]:



   """simple docstring"""


   for i in range(config.num_hidden_layers  ):
      # read in weights + bias of input projection layer (in timm, this is a single matrix + bias)
      __SCREAMING_SNAKE_CASE       =				state_dict.pop(f'''dpt.encoder.layer.{i}.attn.qkv.weight'''  )
      __SCREAMING_SNAKE_CASE       =				state_dict.pop(f'''dpt.encoder.layer.{i}.attn.qkv.bias'''  )
      # next, add query, keys and values (in that order) to the state dict
      __SCREAMING_SNAKE_CASE       =				in_proj_weight[: config.hidden_size, :]
      __SCREAMING_SNAKE_CASE       =				in_proj_bias[: config.hidden_size]
      __SCREAMING_SNAKE_CASE       =				in_proj_weight[
          config.hidden_size : config.hidden_size * 2, :
      ]
      __SCREAMING_SNAKE_CASE       =				in_proj_bias[
          config.hidden_size : config.hidden_size * 2
      ]
      __SCREAMING_SNAKE_CASE       =				in_proj_weight[
          -config.hidden_size :, :
      ]
      __SCREAMING_SNAKE_CASE       =				in_proj_bias[-config.hidden_size :]





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



   """simple docstring"""


   __SCREAMING_SNAKE_CASE       =				"""http://images.cocodataset.org/val2017/000000039769.jpg"""
   __SCREAMING_SNAKE_CASE       =				Image.open(requests.get(lowerCamelCase__   , stream=lowerCamelCase__  ).raw  )
   return im





@torch.no_grad()
def    _A							(						__snake_case  :Union[str, Any]   , __snake_case  :Optional[int]   , __snake_case  :Optional[Any]   , __snake_case  :Any  )   -> int:



   """simple docstring"""


   __SCREAMING_SNAKE_CASE       =				get_dpt_config(lowerCamelCase__  )
   # load original state_dict from URL
   __SCREAMING_SNAKE_CASE       =				torch.hub.load_state_dict_from_url(lowerCamelCase__   , map_location="cpu"  )
   # remove certain keys
   remove_ignore_keys_(lowerCamelCase__  )
   # rename keys
   for key in state_dict.copy().keys():
      __SCREAMING_SNAKE_CASE       =				state_dict.pop(lowerCamelCase__  )
      __SCREAMING_SNAKE_CASE       =				val
   # read in qkv matrices
   read_in_q_k_v(lowerCamelCase__   , lowerCamelCase__  )

   # load HuggingFace model
   __SCREAMING_SNAKE_CASE       =				DPTForSemanticSegmentation(lowerCamelCase__  ) if """ade""" in checkpoint_url else DPTForDepthEstimation(lowerCamelCase__  )
   model.load_state_dict(lowerCamelCase__  )
   model.eval()

   # Check outputs on an image
   __SCREAMING_SNAKE_CASE       =				480 if """ade""" in checkpoint_url else 384
   __SCREAMING_SNAKE_CASE       =				DPTImageProcessor(size=lowerCamelCase__  )

   __SCREAMING_SNAKE_CASE       =				prepare_img()
   __SCREAMING_SNAKE_CASE       =				image_processor(lowerCamelCase__   , return_tensors="pt"  )

   # forward pass
   __SCREAMING_SNAKE_CASE       =				model(**lowerCamelCase__  ).logits if """ade""" in checkpoint_url else model(**lowerCamelCase__  ).predicted_depth

   # Assert logits
   __SCREAMING_SNAKE_CASE       =				torch.tensor([[6.3_1_9_9, 6.3_6_2_9, 6.4_1_4_8], [6.3_8_5_0, 6.3_6_1_5, 6.4_1_6_6], [6.3_5_1_9, 6.3_1_7_6, 6.3_5_7_5]]  )
   if "ade" in checkpoint_url:
      __SCREAMING_SNAKE_CASE       =				torch.tensor([[4.0_4_8_0, 4.2_4_2_0, 4.4_3_6_0], [4.3_1_2_4, 4.5_6_9_3, 4.8_2_6_1], [4.5_7_6_8, 4.8_9_6_5, 5.2_1_6_3]]  )
   assert outputs.shape == torch.Size(lowerCamelCase__  )
   assert (
       torch.allclose(outputs[0, 0, :3, :3]   , lowerCamelCase__   , atol=1e-4  )
       if "ade" in checkpoint_url
       else torch.allclose(outputs[0, :3, :3]   , lowerCamelCase__  )
   )

   Path(lowerCamelCase__  ).mkdir(exist_ok=lowerCamelCase__  )
   print(f'''Saving model to {pytorch_dump_folder_path}'''  )
   model.save_pretrained(lowerCamelCase__  )
   print(f'''Saving image processor to {pytorch_dump_folder_path}'''  )
   image_processor.save_pretrained(lowerCamelCase__  )

   if push_to_hub:
      print("Pushing model to hub..."  )
      model.push_to_hub(
          repo_path_or_name=Path(lowerCamelCase__   , lowerCamelCase__  )   , organization="nielsr"   , commit_message="Add model"   , use_temp_dir=lowerCamelCase__   , )
      image_processor.push_to_hub(
          repo_path_or_name=Path(lowerCamelCase__   , lowerCamelCase__  )   , organization="nielsr"   , commit_message="Add image processor"   , use_temp_dir=lowerCamelCase__   , )


if __name__ == "__main__":
     _snake_case						: Any											=							argparse.ArgumentParser()
     # Required parameters
     parser.add_argument(
         '--checkpoint_url',
         default='https://github.com/intel-isl/DPT/releases/download/1_0/dpt_large-midas-2f21e586.pt',
         type=str,
         help='URL of the original DPT checkpoint you\'d like to convert.',
     )
     parser.add_argument(
         '--pytorch_dump_folder_path',
         default=None,
         type=str,
         required=True,
         help='Path to the output PyTorch model directory.',
     )
     parser.add_argument(
         '--push_to_hub',
         action='store_true',
     )
     parser.add_argument(
         '--model_name',
         default='dpt-large',
         type=str,
         help='Name of the model, in case you\'re pushing to the hub.',
     )

     _snake_case						: str											=							parser.parse_args()
     convert_dpt_checkpoint(args.checkpoint_url, args.pytorch_dump_folder_path, args.push_to_hub, args.model_name)





"""simple docstring"""


import json
import os
import sys
import tempfile
import unittest
from pathlib import Path
from shutil import copyfile

from huggingface_hub import HfFolder, Repository, create_repo, delete_repo
from requests.exceptions import HTTPError

import transformers
from transformers import (
    CONFIG_MAPPING,
    FEATURE_EXTRACTOR_MAPPING,
    PROCESSOR_MAPPING,
    TOKENIZER_MAPPING,
    AutoConfig,
    AutoFeatureExtractor,
    AutoProcessor,
    AutoTokenizer,
    BertTokenizer,
    ProcessorMixin,
    WavaVecaConfig,
    WavaVecaFeatureExtractor,
    WavaVecaProcessor,
)
from transformers.testing_utils import TOKEN, USER, get_tests_dir, is_staging_test
from transformers.tokenization_utils import TOKENIZER_CONFIG_FILE
from transformers.utils import FEATURE_EXTRACTOR_NAME, is_tokenizers_available


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

from test_module.custom_configuration import CustomConfig  # noqa E402
from test_module.custom_feature_extraction import CustomFeatureExtractor  # noqa E402
from test_module.custom_processing import CustomProcessor  # noqa E402
from test_module.custom_tokenization import CustomTokenizer  # noqa E402


__snake_case    					=					get_tests_dir('fixtures/dummy_feature_extractor_config.json')
__snake_case    					=					get_tests_dir('fixtures/vocab.json')
__snake_case    					=					get_tests_dir('fixtures')

class 				_SCREAMING_SNAKE_CASE				(							unittest.TestCase  ):
   """simple docstring"""



   _a   :       int									=    ['''[UNK]''', '''[CLS]''', '''[SEP]''', '''[PAD]''', '''[MASK]''', '''bla''', '''blou''']


   def 					UpperCAmelCase__(						self						)      ->							Any:
    lowercase__       :       Tuple				=						0


   def 					UpperCAmelCase__(						self						)      ->							Optional[int]:
    lowercase__       :       List[str]				=						AutoProcessor.from_pretrained("""facebook/wav2vec2-base-960h"""						)
    self.assertIsInstance(lowerCamelCase__ ,     lowerCamelCase__						)


   def 					UpperCAmelCase__(						self						)      ->							Any:
    with tempfile.TemporaryDirectory() as tmpdirname:
     lowercase__       :       str				=						WavaVecaConfig()
     lowercase__       :       int				=						AutoProcessor.from_pretrained("""facebook/wav2vec2-base-960h"""						)

     # save in new folder
     model_config.save_pretrained(lowerCamelCase__						)
     processor.save_pretrained(lowerCamelCase__						)

     lowercase__       :       Optional[Any]				=						AutoProcessor.from_pretrained(lowerCamelCase__						)

    self.assertIsInstance(lowerCamelCase__ ,     lowerCamelCase__						)


   def 					UpperCAmelCase__(						self						)      ->							Any:
    with tempfile.TemporaryDirectory() as tmpdirname:
     # copy relevant files
     copyfile(lowerCamelCase__ ,     os.path.join(lowerCamelCase__ ,     lowerCamelCase__						)						)
     copyfile(lowerCamelCase__ ,     os.path.join(lowerCamelCase__ ,     """vocab.json"""						)						)

     lowercase__       :       Tuple				=						AutoProcessor.from_pretrained(lowerCamelCase__						)

    self.assertIsInstance(lowerCamelCase__ ,     lowerCamelCase__						)


   def 					UpperCAmelCase__(						self						)      ->							Union[str, Any]:
    with tempfile.TemporaryDirectory() as tmpdirname:
     lowercase__       :       Any				=						WavaVecaFeatureExtractor()
     lowercase__       :       Dict				=						AutoTokenizer.from_pretrained("""facebook/wav2vec2-base-960h"""						)

     lowercase__       :       int				=						WavaVecaProcessor(lowerCamelCase__ ,     lowerCamelCase__						)

     # save in new folder
     processor.save_pretrained(lowerCamelCase__						)

     # drop `processor_class` in tokenizer
     with open(os.path.join(lowerCamelCase__ ,     lowerCamelCase__						) ,     """r"""						) as f:
      lowercase__       :       str				=						json.load(lowerCamelCase__						)
      config_dict.pop("""processor_class"""						)

     with open(os.path.join(lowerCamelCase__ ,     lowerCamelCase__						) ,     """w"""						) as f:
      f.write(json.dumps(lowerCamelCase__						)						)

     lowercase__       :       Dict				=						AutoProcessor.from_pretrained(lowerCamelCase__						)

    self.assertIsInstance(lowerCamelCase__ ,     lowerCamelCase__						)


   def 					UpperCAmelCase__(						self						)      ->							Any:
    with tempfile.TemporaryDirectory() as tmpdirname:
     lowercase__       :       Dict				=						WavaVecaFeatureExtractor()
     lowercase__       :       int				=						AutoTokenizer.from_pretrained("""facebook/wav2vec2-base-960h"""						)

     lowercase__       :       List[Any]				=						WavaVecaProcessor(lowerCamelCase__ ,     lowerCamelCase__						)

     # save in new folder
     processor.save_pretrained(lowerCamelCase__						)

     # drop `processor_class` in feature extractor
     with open(os.path.join(lowerCamelCase__ ,     lowerCamelCase__						) ,     """r"""						) as f:
      lowercase__       :       List[str]				=						json.load(lowerCamelCase__						)
      config_dict.pop("""processor_class"""						)

     with open(os.path.join(lowerCamelCase__ ,     lowerCamelCase__						) ,     """w"""						) as f:
      f.write(json.dumps(lowerCamelCase__						)						)

     lowercase__       :       int				=						AutoProcessor.from_pretrained(lowerCamelCase__						)

    self.assertIsInstance(lowerCamelCase__ ,     lowerCamelCase__						)


   def 					UpperCAmelCase__(						self						)      ->							Dict:
    with tempfile.TemporaryDirectory() as tmpdirname:
     lowercase__       :       List[Any]				=						WavaVecaConfig(processor_class="""Wav2Vec2Processor"""						)
     model_config.save_pretrained(lowerCamelCase__						)
     # copy relevant files
     copyfile(lowerCamelCase__ ,     os.path.join(lowerCamelCase__ ,     """vocab.json"""						)						)
     # create emtpy sample processor
     with open(os.path.join(lowerCamelCase__ ,     lowerCamelCase__						) ,     """w"""						) as f:
      f.write("""{}"""						)

     lowercase__       :       Union[str, Any]				=						AutoProcessor.from_pretrained(lowerCamelCase__						)

    self.assertIsInstance(lowerCamelCase__ ,     lowerCamelCase__						)


   def 					UpperCAmelCase__(						self						)      ->							Any:
    # If remote code is not set, we will time out when asking whether to load the model.
    with self.assertRaises(lowerCamelCase__						):
     lowercase__       :       Optional[Any]				=						AutoProcessor.from_pretrained("""hf-internal-testing/test_dynamic_processor"""						)
    # If remote code is disabled, we can't load this config.
    with self.assertRaises(lowerCamelCase__						):
     lowercase__       :       Any				=						AutoProcessor.from_pretrained(
         """hf-internal-testing/test_dynamic_processor""" ,     trust_remote_code=lowerCamelCase__						)

    lowercase__       :       str				=						AutoProcessor.from_pretrained("""hf-internal-testing/test_dynamic_processor""" ,     trust_remote_code=lowerCamelCase__						)
    self.assertTrue(processor.special_attribute_present						)
    self.assertEqual(processor.__class__.__name__ ,     """NewProcessor"""						)

    lowercase__       :       Dict				=						processor.feature_extractor
    self.assertTrue(feature_extractor.special_attribute_present						)
    self.assertEqual(feature_extractor.__class__.__name__ ,     """NewFeatureExtractor"""						)

    lowercase__       :       int				=						processor.tokenizer
    self.assertTrue(tokenizer.special_attribute_present						)
    if is_tokenizers_available():
     self.assertEqual(tokenizer.__class__.__name__ ,     """NewTokenizerFast"""						)

     # Test we can also load the slow version
     lowercase__       :       str				=						AutoProcessor.from_pretrained(
         """hf-internal-testing/test_dynamic_processor""" ,     trust_remote_code=lowerCamelCase__ ,     use_fast=lowerCamelCase__						)
     lowercase__       :       Tuple				=						new_processor.tokenizer
     self.assertTrue(new_tokenizer.special_attribute_present						)
     self.assertEqual(new_tokenizer.__class__.__name__ ,     """NewTokenizer"""						)
    else:
     self.assertEqual(tokenizer.__class__.__name__ ,     """NewTokenizer"""						)


   def 					UpperCAmelCase__(						self						)      ->							str:
    try:
     AutoConfig.register("""custom""" ,     lowerCamelCase__						)
     AutoFeatureExtractor.register(lowerCamelCase__ ,     lowerCamelCase__						)
     AutoTokenizer.register(lowerCamelCase__ ,     slow_tokenizer_class=lowerCamelCase__						)
     AutoProcessor.register(lowerCamelCase__ ,     lowerCamelCase__						)
     # Trying to register something existing in the Transformers library will raise an error
     with self.assertRaises(lowerCamelCase__						):
      AutoProcessor.register(lowerCamelCase__ ,     lowerCamelCase__						)

     # Now that the config is registered, it can be used as any other config with the auto-API
     lowercase__       :       Union[str, Any]				=						CustomFeatureExtractor.from_pretrained(lowerCamelCase__						)

     with tempfile.TemporaryDirectory() as tmp_dir:
      lowercase__       :       Any				=						os.path.join(lowerCamelCase__ ,     """vocab.txt"""						)
      with open(lowerCamelCase__ ,     """w""" ,     encoding="""utf-8"""						) as vocab_writer:
       vocab_writer.write("""""".join([x + """\n""" for x in self.vocab_tokens]						)						)
      lowercase__       :       Tuple				=						CustomTokenizer(lowerCamelCase__						)

     lowercase__       :       Dict				=						CustomProcessor(lowerCamelCase__ ,     lowerCamelCase__						)

     with tempfile.TemporaryDirectory() as tmp_dir:
      processor.save_pretrained(lowerCamelCase__						)
      lowercase__       :       str				=						AutoProcessor.from_pretrained(lowerCamelCase__						)
      self.assertIsInstance(lowerCamelCase__ ,     lowerCamelCase__						)

    finally:
     if "custom" in CONFIG_MAPPING._extra_content:
      del CONFIG_MAPPING._extra_content["custom"]
     if CustomConfig in FEATURE_EXTRACTOR_MAPPING._extra_content:
      del FEATURE_EXTRACTOR_MAPPING._extra_content[CustomConfig]
     if CustomConfig in TOKENIZER_MAPPING._extra_content:
      del TOKENIZER_MAPPING._extra_content[CustomConfig]
     if CustomConfig in PROCESSOR_MAPPING._extra_content:
      del PROCESSOR_MAPPING._extra_content[CustomConfig]


   def 					UpperCAmelCase__(						self						)      ->							Dict:

    class 				_SCREAMING_SNAKE_CASE				(							__UpperCAmelCase  ):
       """simple docstring"""



       _a   :       int									=    False

    class 				_SCREAMING_SNAKE_CASE				(							__UpperCAmelCase  ):
       """simple docstring"""



       _a   :       Union[str, Any]									=    False

    class 				_SCREAMING_SNAKE_CASE				(							__UpperCAmelCase  ):
       """simple docstring"""



       _a   :       Union[str, Any]									=    '''AutoFeatureExtractor'''
       _a   :       List[str]									=    '''AutoTokenizer'''
       _a   :       Optional[Any]									=    False

    try:
     AutoConfig.register("""custom""" ,     lowerCamelCase__						)
     AutoFeatureExtractor.register(lowerCamelCase__ ,     lowerCamelCase__						)
     AutoTokenizer.register(lowerCamelCase__ ,     slow_tokenizer_class=lowerCamelCase__						)
     AutoProcessor.register(lowerCamelCase__ ,     lowerCamelCase__						)
     # If remote code is not set, the default is to use local classes.
     lowercase__       :       Union[str, Any]				=						AutoProcessor.from_pretrained("""hf-internal-testing/test_dynamic_processor"""						)
     self.assertEqual(processor.__class__.__name__ ,     """NewProcessor"""						)
     self.assertFalse(processor.special_attribute_present						)
     self.assertFalse(processor.feature_extractor.special_attribute_present						)
     self.assertFalse(processor.tokenizer.special_attribute_present						)

     # If remote code is disabled, we load the local ones.
     lowercase__       :       Tuple				=						AutoProcessor.from_pretrained(
         """hf-internal-testing/test_dynamic_processor""" ,     trust_remote_code=lowerCamelCase__						)
     self.assertEqual(processor.__class__.__name__ ,     """NewProcessor"""						)
     self.assertFalse(processor.special_attribute_present						)
     self.assertFalse(processor.feature_extractor.special_attribute_present						)
     self.assertFalse(processor.tokenizer.special_attribute_present						)

     # If remote is enabled, we load from the Hub.
     lowercase__       :       Any				=						AutoProcessor.from_pretrained(
         """hf-internal-testing/test_dynamic_processor""" ,     trust_remote_code=lowerCamelCase__						)
     self.assertEqual(processor.__class__.__name__ ,     """NewProcessor"""						)
     self.assertTrue(processor.special_attribute_present						)
     self.assertTrue(processor.feature_extractor.special_attribute_present						)
     self.assertTrue(processor.tokenizer.special_attribute_present						)

    finally:
     if "custom" in CONFIG_MAPPING._extra_content:
      del CONFIG_MAPPING._extra_content["custom"]
     if CustomConfig in FEATURE_EXTRACTOR_MAPPING._extra_content:
      del FEATURE_EXTRACTOR_MAPPING._extra_content[CustomConfig]
     if CustomConfig in TOKENIZER_MAPPING._extra_content:
      del TOKENIZER_MAPPING._extra_content[CustomConfig]
     if CustomConfig in PROCESSOR_MAPPING._extra_content:
      del PROCESSOR_MAPPING._extra_content[CustomConfig]


   def 					UpperCAmelCase__(						self						)      ->							int:
    lowercase__       :       Tuple				=						AutoProcessor.from_pretrained("""hf-internal-testing/tiny-random-bert"""						)
    self.assertEqual(processor.__class__.__name__ ,     """BertTokenizerFast"""						)







   def 					UpperCAmelCase__(						self						)      ->							Any:
    lowercase__       :       Tuple				=						AutoProcessor.from_pretrained("""hf-internal-testing/tiny-random-convnext"""						)
    self.assertEqual(processor.__class__.__name__ ,     """ConvNextImageProcessor"""						)

@is_staging_test
class 				_SCREAMING_SNAKE_CASE				(							unittest.TestCase  ):
   """simple docstring"""



   _a   :       int									=    ['''[UNK]''', '''[CLS]''', '''[SEP]''', '''[PAD]''', '''[MASK]''', '''bla''', '''blou''']


   @classmethod
   def 					UpperCAmelCase__(						cls						)      ->							int:
    lowercase__       :       str				=						TOKEN
    HfFolder.save_token(lowerCamelCase__						)


   @classmethod
   def 					UpperCAmelCase__(						cls						)      ->							Dict:
    try:
     delete_repo(token=cls._token ,     repo_id="""test-processor"""						)
    except HTTPError:
     pass

    try:
     delete_repo(token=cls._token ,     repo_id="""valid_org/test-processor-org"""						)
    except HTTPError:
     pass

    try:
     delete_repo(token=cls._token ,     repo_id="""test-dynamic-processor"""						)
    except HTTPError:
     pass


   def 					UpperCAmelCase__(						self						)      ->							int:
    lowercase__       :       List[str]				=						WavaVecaProcessor.from_pretrained(lowerCamelCase__						)
    with tempfile.TemporaryDirectory() as tmp_dir:
     processor.save_pretrained(
         os.path.join(lowerCamelCase__ ,     """test-processor"""						) ,     push_to_hub=lowerCamelCase__ ,     use_auth_token=self._token						)

     lowercase__       :       Optional[Any]				=						WavaVecaProcessor.from_pretrained(F'''{USER}/test-processor'''						)
     for k, v in processor.feature_extractor.__dict__.items():
      self.assertEqual(lowerCamelCase__ ,     getattr(new_processor.feature_extractor ,     lowerCamelCase__						)						)
     self.assertDictEqual(new_processor.tokenizer.get_vocab() ,     processor.tokenizer.get_vocab()						)


   def 					UpperCAmelCase__(						self						)      ->							Optional[Any]:
    lowercase__       :       int				=						WavaVecaProcessor.from_pretrained(lowerCamelCase__						)

    with tempfile.TemporaryDirectory() as tmp_dir:
     processor.save_pretrained(
         os.path.join(lowerCamelCase__ ,     """test-processor-org"""						) ,     push_to_hub=lowerCamelCase__ ,     use_auth_token=self._token ,     organization="""valid_org""" ,     )

     lowercase__       :       Optional[Any]				=						WavaVecaProcessor.from_pretrained("""valid_org/test-processor-org"""						)
     for k, v in processor.feature_extractor.__dict__.items():
      self.assertEqual(lowerCamelCase__ ,     getattr(new_processor.feature_extractor ,     lowerCamelCase__						)						)
     self.assertDictEqual(new_processor.tokenizer.get_vocab() ,     processor.tokenizer.get_vocab()						)







   def 					UpperCAmelCase__(						self						)      ->							int:
    CustomFeatureExtractor.register_for_auto_class()
    CustomTokenizer.register_for_auto_class()
    CustomProcessor.register_for_auto_class()

    lowercase__       :       List[str]				=						CustomFeatureExtractor.from_pretrained(lowerCamelCase__						)

    with tempfile.TemporaryDirectory() as tmp_dir:
     lowercase__       :       Tuple				=						os.path.join(lowerCamelCase__ ,     """vocab.txt"""						)
     with open(lowerCamelCase__ ,     """w""" ,     encoding="""utf-8"""						) as vocab_writer:
      vocab_writer.write("""""".join([x + """\n""" for x in self.vocab_tokens]						)						)
     lowercase__       :       Optional[int]				=						CustomTokenizer(lowerCamelCase__						)

    lowercase__       :       List[Any]				=						CustomProcessor(lowerCamelCase__ ,     lowerCamelCase__						)

    with tempfile.TemporaryDirectory() as tmp_dir:
     create_repo(F'''{USER}/test-dynamic-processor''' ,     token=self._token						)
     lowercase__       :       Tuple				=						Repository(lowerCamelCase__ ,     clone_from=F'''{USER}/test-dynamic-processor''' ,     token=self._token						)
     processor.save_pretrained(lowerCamelCase__						)

     # This has added the proper auto_map field to the feature extractor config
     self.assertDictEqual(
         processor.feature_extractor.auto_map ,     {
             """AutoFeatureExtractor""": """custom_feature_extraction.CustomFeatureExtractor""",
             """AutoProcessor""": """custom_processing.CustomProcessor""",
         } ,     )

     # This has added the proper auto_map field to the tokenizer config
     with open(os.path.join(lowerCamelCase__ ,     """tokenizer_config.json"""						)						) as f:
      lowercase__       :       List[Any]				=						json.load(lowerCamelCase__						)
     self.assertDictEqual(
         tokenizer_config["""auto_map"""] ,     {
             """AutoTokenizer""": ["""custom_tokenization.CustomTokenizer""", None],
             """AutoProcessor""": """custom_processing.CustomProcessor""",
         } ,     )

     # The code has been copied from fixtures
     self.assertTrue(os.path.isfile(os.path.join(lowerCamelCase__ ,     """custom_feature_extraction.py"""						)						)						)
     self.assertTrue(os.path.isfile(os.path.join(lowerCamelCase__ ,     """custom_tokenization.py"""						)						)						)
     self.assertTrue(os.path.isfile(os.path.join(lowerCamelCase__ ,     """custom_processing.py"""						)						)						)

     repo.push_to_hub()

    lowercase__       :       int				=						AutoProcessor.from_pretrained(F'''{USER}/test-dynamic-processor''' ,     trust_remote_code=lowerCamelCase__						)
    # Can't make an isinstance check because the new_processor is from the CustomProcessor class of a dynamic module
    self.assertEqual(new_processor.__class__.__name__ ,     """CustomProcessor"""						)