





import argparse

import torch

from transformers import ChineseCLIPConfig, ChineseCLIPModel


def      SCREAMING_SNAKE_CASE      (   lowerCAmelCase     ,							lowerCAmelCase     ,							lowerCAmelCase       ):
       _UpperCamelCase							,		_UpperCamelCase							,		_UpperCamelCase														=    pt_weights[f'''{prefix}.in_proj_weight'''].chunk(3     ,							dim=0       )
       _UpperCamelCase							,		_UpperCamelCase							,		_UpperCamelCase														=    pt_weights[f'''{prefix}.in_proj_bias'''].chunk(3     ,							dim=0       )

       _UpperCamelCase														=    pt_weights[f'''{prefix}.out_proj.weight''']
       _UpperCamelCase														=    pt_weights[f'''{prefix}.out_proj.bias''']

       _UpperCamelCase														=    q_proj
       _UpperCamelCase														=    q_proj_bias

       _UpperCamelCase														=    k_proj
       _UpperCamelCase														=    k_proj_bias

       _UpperCamelCase														=    v_proj
       _UpperCamelCase														=    v_proj_bias

       _UpperCamelCase														=    out_proj_weights
       _UpperCamelCase														=    out_proj_bias


def      SCREAMING_SNAKE_CASE      (   lowerCAmelCase     ,							lowerCAmelCase     ,							lowerCAmelCase       ):
       copy_linear(hf_mlp.fca     ,							lowerCAmelCase     ,							f'''{prefix}.c_fc'''       )
       copy_linear(hf_mlp.fca     ,							lowerCAmelCase     ,							f'''{prefix}.c_proj'''       )


def      SCREAMING_SNAKE_CASE      (   lowerCAmelCase     ,							lowerCAmelCase     ,							lowerCAmelCase       ):
       _UpperCamelCase														=    pt_weights[f'''{prefix}.weight'''].data
       _UpperCamelCase														=    pt_weights[f'''{prefix}.bias'''].data


def      SCREAMING_SNAKE_CASE      (   lowerCAmelCase     ,							lowerCAmelCase     ,							lowerCAmelCase       ):
       # copy layer norms
       copy_linear(hf_layer.layer_norma     ,							lowerCAmelCase     ,							f'''{prefix}.ln_1'''       )
       copy_linear(hf_layer.layer_norma     ,							lowerCAmelCase     ,							f'''{prefix}.ln_2'''       )

       # copy MLP
       copy_mlp(hf_layer.mlp     ,							lowerCAmelCase     ,							f'''{prefix}.mlp'''       )

       # copy attn
       copy_attn_layer(hf_layer.self_attn     ,							lowerCAmelCase     ,							f'''{prefix}.attn'''       )


def      SCREAMING_SNAKE_CASE      (   lowerCAmelCase     ,							lowerCAmelCase     ,							lowerCAmelCase       ):
       for layer_id, hf_layer in enumerate(lowerCAmelCase       ):
              copy_layer(lowerCAmelCase     ,							lowerCAmelCase     ,							f'''{prefix}.{layer_id}'''       )


def      SCREAMING_SNAKE_CASE      (   lowerCAmelCase     ,							lowerCAmelCase       ):
       # copy projection
       _UpperCamelCase														=    pt_weights['''text_projection'''].data.T

       # copy text encoder
       for name, param in hf_model.text_model.named_parameters():
              _UpperCamelCase														=    pt_weights[f'''bert.{name}'''].data


def      SCREAMING_SNAKE_CASE      (   lowerCAmelCase     ,							lowerCAmelCase       ):
       # copy projection
       _UpperCamelCase														=    pt_weights['''visual.proj'''].data.T

       # copy layer norms
       copy_linear(hf_model.vision_model.pre_layrnorm     ,							lowerCAmelCase     ,							'''visual.ln_pre'''       )
       copy_linear(hf_model.vision_model.post_layernorm     ,							lowerCAmelCase     ,							'''visual.ln_post'''       )

       # copy embeddings
       _UpperCamelCase														=    pt_weights['''visual.conv1.weight'''].data
       _UpperCamelCase														=    pt_weights['''visual.class_embedding'''].data
       _UpperCamelCase														=    pt_weights['''visual.positional_embedding'''].data

       # copy encoder
       copy_layers(hf_model.vision_model.encoder.layers     ,							lowerCAmelCase     ,							'''visual.transformer.resblocks'''       )


@torch.no_grad()
def      SCREAMING_SNAKE_CASE      (   lowerCAmelCase     ,							lowerCAmelCase     ,							lowerCAmelCase=None       ):
       assert config_path is not None, "Please specify the ChineseCLIP model config of the corresponding model size."
       _UpperCamelCase														=    ChineseCLIPConfig.from_pretrained(lowerCAmelCase       )

       _UpperCamelCase														=    ChineseCLIPModel(lowerCAmelCase       ).eval()

       _UpperCamelCase														=    torch.load(lowerCAmelCase     ,							map_location='''cpu'''       )['''state_dict''']
       _UpperCamelCase														=    {(name[7:] if name.startswith('''module.'''       ) else name): value for name, value in pt_weights.items()}

       copy_text_model_and_projection(lowerCAmelCase     ,							lowerCAmelCase       )
       copy_vision_model_and_projection(lowerCAmelCase     ,							lowerCAmelCase       )
       _UpperCamelCase														=    pt_weights['''logit_scale'''].data

       hf_model.save_pretrained(lowerCAmelCase       )


if __name__ == "__main__":
       lowercase     :			List[str]     						=	argparse.ArgumentParser()
       parser.add_argument(
           """--pytorch_dump_folder_path""",
           default=None,
           type=str,
           help="""Path to the output folder storing converted hf PyTorch model.""",
       )
       parser.add_argument(
           """--checkpoint_path""", default=None, type=str, help="""Path to original github format ChineseCLIP checkpoint."""
       )
       parser.add_argument(
           """--config_path""", default=None, required=True, type=str, help="""Path to hf config.json of model to convert."""
       )
       lowercase     :			Tuple     						=	parser.parse_args()

       convert_chinese_clip_checkpoint(args.checkpoint_path, args.pytorch_dump_folder_path, args.config_path)
       print("""The conversion is finished!""")













import warnings

from ...utils import logging
from .image_processing_mobilenet_va import MobileNetVaImageProcessor


lowercase     :			str     						=	logging.get_logger(__name__)

class 			__A(    __UpperCAmelCase			):

     def __init__(   self,							*A,							**A   ):





            """simple docstring"""

            warnings.warn(
                '''The class MobileNetV2FeatureExtractor is deprecated and will be removed in version 5 of Transformers.'''
                ''' Please use MobileNetV2ImageProcessor instead.''',							A,							)
            super().__init__(*A,							**A   )






