

"""simple docstring"""





import argparse

import gdown
import numpy as np
import torch
from huggingface_hub import hf_hub_download

from transformers import (
    CLIPTokenizer,
    CLIPTokenizerFast,
    VideoMAEImageProcessor,
    XCLIPConfig,
    XCLIPModel,
    XCLIPProcessor,
    XCLIPTextConfig,
    XCLIPVisionConfig,
)




def   _A  (  UpperCamelCase_					:	Tuple,      UpperCamelCase_					:	Union[str, Any])     ->						Union[str, Any]:
   '''simple docstring'''


   __lowercase								=						XCLIPTextConfig()

   # derive patch size from model name
   __lowercase								=						model_name.find("patch")
   __lowercase								=						int(model_name[start_idx + len("patch") : start_idx + len("patch") + 2])
   __lowercase								=						XCLIPVisionConfig(patch_size=lowercase__,      num_frames=lowercase__)

   if "large" in model_name:
      __lowercase								=						768
      __lowercase								=						3072
      __lowercase								=						12

      __lowercase								=						1024
      __lowercase								=						4096
      __lowercase								=						16
      __lowercase								=						24
      __lowercase								=						768
      __lowercase								=						3072

   if model_name == "xclip-large-patch14-16-frames":
      __lowercase								=						336

   __lowercase								=						XCLIPConfig.from_text_vision_configs(lowercase__,      lowercase__)

   if "large" in model_name:
      __lowercase								=						768

   return config




def   _A  (  UpperCamelCase_					:	List[Any])     ->						List[Any]:
   '''simple docstring'''


   if name == "token_embedding.weight":
      __lowercase								=						name.replace("token_embedding.weight",      "text_model.embeddings.token_embedding.weight")
   if name == "positional_embedding":
      __lowercase								=						name.replace("positional_embedding",      "text_model.embeddings.position_embedding.weight")
   if "ln_1" in name:
      __lowercase								=						name.replace("ln_1",      "layer_norm1")
   if "ln_2" in name:
      __lowercase								=						name.replace("ln_2",      "layer_norm2")
   if "c_fc" in name:
      __lowercase								=						name.replace("c_fc",      "fc1")
   if "c_proj" in name:
      __lowercase								=						name.replace("c_proj",      "fc2")
   if name.startswith("transformer.resblocks"):
      __lowercase								=						name.replace("transformer.resblocks",      "text_model.encoder.layers")
   if "attn.out_proj" in name and "message" not in name:
      __lowercase								=						name.replace("attn.out_proj",      "self_attn.out_proj")
   if "ln_final" in name:
      __lowercase								=						name.replace("ln_final",      "text_model.final_layer_norm")
   # visual encoder
   if name == "visual.class_embedding":
      __lowercase								=						name.replace("visual.class_embedding",      "vision_model.embeddings.class_embedding")
   if name == "visual.positional_embedding":
      __lowercase								=						name.replace("visual.positional_embedding",      "vision_model.embeddings.position_embedding.weight")
   if name.startswith("visual.transformer.resblocks"):
      __lowercase								=						name.replace("visual.transformer.resblocks",      "vision_model.encoder.layers")
   if "visual.conv1" in name:
      __lowercase								=						name.replace("visual.conv1",      "vision_model.embeddings.patch_embedding")
   if "visual.ln_pre" in name:
      __lowercase								=						name.replace("visual.ln_pre",      "vision_model.pre_layernorm")
   if "visual.ln_post" in name:
      __lowercase								=						name.replace("visual.ln_post",      "vision_model.post_layernorm")
   if "visual.proj" in name:
      __lowercase								=						name.replace("visual.proj",      "visual_projection.weight")
   if "text_projection" in name:
      __lowercase								=						name.replace("text_projection",      "text_projection.weight")
   # things on top
   if "prompts_visual_proj" in name:
      __lowercase								=						name.replace("prompts_visual_proj",      "prompts_visual_projection")
   if "prompts_visual_ln" in name:
      __lowercase								=						name.replace("prompts_visual_ln",      "prompts_visual_layernorm")
   # mit
   if name == "mit.positional_embedding":
      __lowercase								=						name.replace("positional",      "position")
   if name.startswith("mit.resblocks"):
      __lowercase								=						name.replace("mit.resblocks",      "mit.encoder.layers")
   # prompts generator
   if name.startswith("prompts_generator.norm"):
      __lowercase								=						name.replace("prompts_generator.norm",      "prompts_generator.layernorm")

   return name




def   _A  (  UpperCamelCase_					:	Dict,      UpperCamelCase_					:	Dict)     ->						Optional[int]:
   '''simple docstring'''


   for key in orig_state_dict.copy().keys():
      __lowercase								=						orig_state_dict.pop(lowercase__)

      if "attn.in_proj" in key:
         __lowercase								=						key.split(".")
         if key.startswith("visual"):
            __lowercase								=						key_split[3]
            __lowercase								=						config.vision_config.hidden_size
            if "message_attn" in key:
               if "weight" in key:
                  __lowercase								=						val[
                      :dim, :
                  ]
                  __lowercase								=						val[
                      dim : dim * 2, :
                  ]
                  __lowercase								=						val[
                      -dim:, :
                  ]
               else:
                  __lowercase								=						val[
                      :dim
                  ]
                  __lowercase								=						val[
                      dim : dim * 2
                  ]
                  __lowercase								=						val[
                      -dim:
                  ]
            else:
               if "weight" in key:
                  __lowercase								=						val[
                      :dim, :
                  ]
                  __lowercase								=						val[
                      dim : dim * 2, :
                  ]
                  __lowercase								=						val[
                      -dim:, :
                  ]
               else:
                  __lowercase								=						val[:dim]
                  __lowercase								=						val[
                      dim : dim * 2
                  ]
                  __lowercase								=						val[-dim:]
         elif key.startswith("mit"):
            __lowercase								=						key_split[2]
            __lowercase								=						config.vision_config.mit_hidden_size
            if "weight" in key:
               __lowercase								=						val[:dim, :]
               __lowercase								=						val[dim : dim * 2, :]
               __lowercase								=						val[-dim:, :]
            else:
               __lowercase								=						val[:dim]
               __lowercase								=						val[dim : dim * 2]
               __lowercase								=						val[-dim:]
         else:
            __lowercase								=						key_split[2]
            __lowercase								=						config.text_config.hidden_size
            if "weight" in key:
               __lowercase								=						val[:dim, :]
               __lowercase								=						val[
                   dim : dim * 2, :
               ]
               __lowercase								=						val[-dim:, :]
            else:
               __lowercase								=						val[:dim]
               __lowercase								=						val[
                   dim : dim * 2
               ]
               __lowercase								=						val[-dim:]
      else:
         __lowercase								=						rename_key(lowercase__)
         if new_key_name in ["visual_projection.weight", "text_projection.weight"]:
            __lowercase								=						val.T
         __lowercase								=						val

   return orig_state_dict




def   _A  (  UpperCamelCase_					:	List[str])     ->						Any:
   '''simple docstring'''


   if num_frames == 8:
      __lowercase								=						"""eating_spaghetti_8_frames.npy"""
   elif num_frames == 16:
      __lowercase								=						"""eating_spaghetti.npy"""
   elif num_frames == 32:
      __lowercase								=						"""eating_spaghetti_32_frames.npy"""
   __lowercase								=						hf_hub_download(
       repo_id="hf-internal-testing/spaghetti-video",      filename=lowercase__,      repo_type="dataset",      )
   __lowercase								=						np.load(lowercase__)
   return list(lowercase__)




def   _A  (  UpperCamelCase_					:	Any,      UpperCamelCase_					:	str=None,      UpperCamelCase_					:	List[Any]=False)     ->						Any:
   '''simple docstring'''


   __lowercase								=						{
       # fully supervised kinetics-400 checkpoints
       """xclip-base-patch32""": """https://github.com/nbl97/X-CLIP_Model_Zoo/releases/download/v1.0/k400_32_8.pth""",
       """xclip-base-patch32-16-frames""": (
           """https://github.com/nbl97/X-CLIP_Model_Zoo/releases/download/v1.0/k400_32_16.pth"""
       ),
       """xclip-base-patch16""": """https://github.com/nbl97/X-CLIP_Model_Zoo/releases/download/v1.0/k400_16_8.pth""",
       """xclip-base-patch16-16-frames""": (
           """https://github.com/nbl97/X-CLIP_Model_Zoo/releases/download/v1.0/k400_16_16.pth"""
       ),
       """xclip-large-patch14""": """https://drive.google.com/u/0/uc?id=1NUOImq0o5DlQTST17iIP3vG7DgmHQuCx&amp;export=download&amp;confirm=t&amp;uuid=b26caedc-88e2-473e-830a-9d158b653cdb""",
       """xclip-large-patch14-16-frames""": """https://drive.google.com/u/0/uc?id=1FOYgnJc097OJ4lGwtRCCydQyVPJEOH7d&amp;export=download&amp;confirm=t&amp;uuid=538fa810-e671-4050-b385-9a623f89804f""",
       # fully supervised kinetics-600 checkpoints
       """xclip-base-patch16-kinetics-600""": (
           """https://github.com/nbl97/X-CLIP_Model_Zoo/releases/download/v1.0/k600_16_8.pth"""
       ),
       """xclip-base-patch16-kinetics-600-16-frames""": (
           """https://github.com/nbl97/X-CLIP_Model_Zoo/releases/download/v1.0/k600_16_16.pth"""
       ),
       """xclip-large-patch14-kinetics-600""": """https://drive.google.com/u/0/uc?id=1FV8C1INuM91sLAN4ImjzePLIlpMSihwV&amp;export=download&amp;confirm=t&amp;uuid=141d4977-4a65-44ae-864f-4b0c19f838be""",
       # few shot
       """xclip-base-patch16-hmdb-2-shot""": (
           """https://github.com/nbl97/X-CLIP_Model_Zoo/releases/download/v1.0/few_hmdb_2.pth"""
       ),
       """xclip-base-patch16-hmdb-4-shot""": (
           """https://github.com/nbl97/X-CLIP_Model_Zoo/releases/download/v1.0/few_hmdb_4.pth"""
       ),
       """xclip-base-patch16-hmdb-8-shot""": (
           """https://github.com/nbl97/X-CLIP_Model_Zoo/releases/download/v1.0/few_hmdb_8.pth"""
       ),
       """xclip-base-patch16-hmdb-16-shot""": (
           """https://github.com/nbl97/X-CLIP_Model_Zoo/releases/download/v1.0/few_hmdb_16.pth"""
       ),
       """xclip-base-patch16-ucf-2-shot""": (
           """https://github.com/nbl97/X-CLIP_Model_Zoo/releases/download/v1.0/few_ucf_2.pth"""
       ),
       """xclip-base-patch16-ucf-4-shot""": (
           """https://github.com/nbl97/X-CLIP_Model_Zoo/releases/download/v1.0/few_ucf_4.pth"""
       ),
       """xclip-base-patch16-ucf-8-shot""": (
           """https://github.com/nbl97/X-CLIP_Model_Zoo/releases/download/v1.0/few_ucf_8.pth"""
       ),
       """xclip-base-patch16-ucf-16-shot""": (
           """https://github.com/nbl97/X-CLIP_Model_Zoo/releases/download/v1.0/few_ucf_16.pth"""
       ),
       # zero shot
       """xclip-base-patch16-zero-shot""": """https://github.com/nbl97/X-CLIP_Model_Zoo/releases/download/v1.0/zero.pth""",
   }

   __lowercase								=						model_to_url[model_name]
   __lowercase								=						8
   if "16-frames" in model_name:
      __lowercase								=						16
   elif "shot" in model_name:
      __lowercase								=						32

   __lowercase								=						get_xclip_config(lowercase__,      lowercase__)
   __lowercase								=						XCLIPModel(lowercase__)
   model.eval()

   if "drive" in checkpoint_url:
      __lowercase								=						"""pytorch_model.bin"""
      gdown.cached_download(lowercase__,      lowercase__,      quiet=lowercase__)
      __lowercase								=						torch.load(lowercase__,      map_location="cpu")["""model"""]
   else:
      __lowercase								=						torch.hub.load_state_dict_from_url(lowercase__)["""model"""]

   __lowercase								=						convert_state_dict(lowercase__,      lowercase__)

   __lowercase								=						XCLIPModel(lowercase__)
   __lowercase								=						model.load_state_dict(lowercase__,      strict=lowercase__)
   assert missing_keys == ["text_model.embeddings.position_ids", "vision_model.embeddings.position_ids"]
   model.eval()

   __lowercase								=						336 if model_name == """xclip-large-patch14-16-frames""" else 224
   __lowercase								=						VideoMAEImageProcessor(size=lowercase__)
   __lowercase								=						CLIPTokenizer.from_pretrained("openai/clip-vit-base-patch32")
   __lowercase								=						CLIPTokenizerFast.from_pretrained("openai/clip-vit-base-patch32")
   __lowercase								=						XCLIPProcessor(image_processor=lowercase__,      tokenizer=lowercase__)

   __lowercase								=						prepare_video(lowercase__)
   __lowercase								=						processor(
       text=["playing sports", "eating spaghetti", "go shopping"],      videos=lowercase__,      return_tensors="pt",      padding=lowercase__)

   print("Shape of pixel values:",      inputs.pixel_values.shape)

   with torch.no_grad():
      __lowercase								=						model(**lowercase__)

   # Verify outputs
   __lowercase								=						outputs.logits_per_video
   __lowercase								=						logits_per_video.softmax(dim=1)
   print("Probs:",      lowercase__)
   # kinetics-400
   if model_name == "xclip-base-patch32":
      __lowercase								=						torch.tensor([[0.0_019, 0.9_951, 0.0_030]])
   elif model_name == "xclip-base-patch32-16-frames":
      __lowercase								=						torch.tensor([[7.0999E-04, 9.9883E-01, 4.5580E-04]])
   elif model_name == "xclip-base-patch16":
      __lowercase								=						torch.tensor([[0.0_083, 0.9_681, 0.0_236]])
   elif model_name == "xclip-base-patch16-16-frames":
      __lowercase								=						torch.tensor([[7.6937E-04, 9.9728E-01, 1.9473E-03]])
   elif model_name == "xclip-large-patch14":
      __lowercase								=						torch.tensor([[0.0_062, 0.9_864, 0.0_075]])
   elif model_name == "xclip-large-patch14-16-frames":
      __lowercase								=						torch.tensor([[3.3877E-04, 9.9937E-01, 2.8888E-04]])
   # kinetics-600
   elif model_name == "xclip-base-patch16-kinetics-600":
      __lowercase								=						torch.tensor([[0.0_555, 0.8_914, 0.0_531]])
   elif model_name == "xclip-base-patch16-kinetics-600-16-frames":
      __lowercase								=						torch.tensor([[3.8554E-04, 9.9929E-01, 3.2754E-04]])
   elif model_name == "xclip-large-patch14-kinetics-600":
      __lowercase								=						torch.tensor([[0.0_036, 0.9_920, 0.0_045]])
   # few shot
   elif model_name == "xclip-base-patch16-hmdb-2-shot":
      __lowercase								=						torch.tensor([[7.1890E-06, 9.9994E-01, 5.6559E-05]])
   elif model_name == "xclip-base-patch16-hmdb-4-shot":
      __lowercase								=						torch.tensor([[1.0320E-05, 9.9993E-01, 6.2435E-05]])
   elif model_name == "xclip-base-patch16-hmdb-8-shot":
      __lowercase								=						torch.tensor([[4.1377E-06, 9.9990E-01, 9.8386E-05]])
   elif model_name == "xclip-base-patch16-hmdb-16-shot":
      __lowercase								=						torch.tensor([[4.1347E-05, 9.9962E-01, 3.3411E-04]])
   elif model_name == "xclip-base-patch16-ucf-2-shot":
      __lowercase								=						torch.tensor([[8.5857E-05, 9.9928E-01, 6.3291E-04]])
   elif model_name == "xclip-base-patch16-ucf-4-shot":
      __lowercase								=						torch.tensor([[8.5857E-05, 9.9928E-01, 6.3291E-04]])
   elif model_name == "xclip-base-patch16-ucf-8-shot":
      __lowercase								=						torch.tensor([[0.0_027, 0.9_904, 0.0_070]])
   elif model_name == "xclip-base-patch16-ucf-16-shot":
      __lowercase								=						torch.tensor([[9.8219E-04, 9.9593E-01, 3.0863E-03]])
   # zero shot
   elif model_name == "xclip-base-patch16-zero-shot":
      __lowercase								=						torch.tensor([[3.5082E-04, 9.9785E-01, 1.7966E-03]])
   else:
      raise ValueError(F"""Model name {model_name} not supported""")
   assert torch.allclose(lowercase__,      lowercase__,      atol=1E-3)
   print("Looks ok!")

   if pytorch_dump_folder_path is not None:
      print(F"""Saving model {model_name} to {pytorch_dump_folder_path}""")
      model.save_pretrained(lowercase__)

   if push_to_hub:
      print("Pushing model, processor and slow tokenizer files to the hub...")
      model.push_to_hub(lowercase__,      organization="nielsr")
      processor.push_to_hub(lowercase__,      organization="nielsr")
      slow_tokenizer.push_to_hub(lowercase__,      organization="nielsr")


if __name__ == "__main__":
   _a							=							argparse.ArgumentParser()
   # Required parameters
   parser.add_argument(
       '--model_name',
       default='xclip-base-patch32',
       type=str,
       help='Name of the model.',
   )
   parser.add_argument(
       '--pytorch_dump_folder_path', default=None, type=str, help='Path to the output PyTorch model directory.'
   )
   parser.add_argument(
       '--push_to_hub', action='store_true', help='Whether or not to push the converted model to the 🤗 hub.'
   )

   _a							=							parser.parse_args()
   convert_xclip_checkpoint(args.model_name, args.pytorch_dump_folder_path, args.push_to_hub)








"""simple docstring"""





from ...configuration_utils import PretrainedConfig
from ...utils import logging


_a							=							logging.get_logger(__name__)

_a							=							{
    'caidas/swin2sr-classicalsr-x2-64': (
        'https://huggingface.co/caidas/swin2sr-classicalsr-x2-64/resolve/main/config.json'
    ),
}




class  _lowerCAmelCase  (     lowercase       ):







 """simple docstring"""







 __UpperCAmelCase     : List[Any]       		=     "swin2sr"

 __UpperCAmelCase     : List[Any]       		=     {
     "hidden_size": "embed_dim",
     "num_attention_heads": "num_heads",
     "num_hidden_layers": "num_layers",
 }


 def __init__(      self							:      Any, UpperCAmelCase__							:      Dict=6_4, UpperCAmelCase__							:      List[Any]=1, UpperCAmelCase__							:      Dict=3, UpperCAmelCase__							:      Optional[Any]=1_8_0, UpperCAmelCase__							:      Any=[6, 6, 6, 6, 6, 6], UpperCAmelCase__							:      Dict=[6, 6, 6, 6, 6, 6], UpperCAmelCase__							:      Tuple=8, UpperCAmelCase__							:      Optional[int]=2.0, UpperCAmelCase__							:      List[str]=True, UpperCAmelCase__							:      Tuple=0.0, UpperCAmelCase__							:      Optional[Any]=0.0, UpperCAmelCase__							:      List[str]=0.1, UpperCAmelCase__							:      Dict="gelu", UpperCAmelCase__							:      Dict=False, UpperCAmelCase__							:      Dict=0.02, UpperCAmelCase__							:      Tuple=1E-5, UpperCAmelCase__							:      str=2, UpperCAmelCase__							:      str=1.0, UpperCAmelCase__							:      Optional[int]="1conv", UpperCAmelCase__							:      Dict="pixelshuffle", **UpperCAmelCase__							:      List[Any], ):
    super().__init__(**UpperCAmelCase__     )

    __lowercase								=						image_size
    __lowercase								=						patch_size
    __lowercase								=						num_channels
    __lowercase								=						embed_dim
    __lowercase								=						depths
    __lowercase								=						len(UpperCAmelCase__     )
    __lowercase								=						num_heads
    __lowercase								=						window_size
    __lowercase								=						mlp_ratio
    __lowercase								=						qkv_bias
    __lowercase								=						hidden_dropout_prob
    __lowercase								=						attention_probs_dropout_prob
    __lowercase								=						drop_path_rate
    __lowercase								=						hidden_act
    __lowercase								=						use_absolute_embeddings
    __lowercase								=						layer_norm_eps
    __lowercase								=						initializer_range
    __lowercase								=						upscale
    __lowercase								=						img_range
    __lowercase								=						resi_connection
    __lowercase								=						upsampler




