


'''simple docstring'''
import os
import re
import shutil
from argparse import ArgumentParser, Namespace

from datasets.commands import BaseDatasetsCLICommand
from datasets.utils.logging import get_logger


UpperCamelCase__          = '''<<<<<<< This should probably be modified because it mentions: '''

UpperCamelCase__          = '''=======
>>>>>>>
'''

UpperCamelCase__          = [
    '''TextEncoderConfig''',
    '''ByteTextEncoder''',
    '''SubwordTextEncoder''',
    '''encoder_config''',
    '''maybe_build_from_corpus''',
    '''manual_dir''',
]

UpperCamelCase__          = [
    # (pattern, replacement)
    # Order is important here for some replacements
    (R'''tfds\.core''', R'''datasets'''),
    (R'''tf\.io\.gfile\.GFile''', R'''open'''),
    (R'''tf\.([\w\d]+)''', R'''datasets.Value(\'\1\')'''),
    (R'''tfds\.features\.Text\(\)''', R'''datasets.Value(\'string\')'''),
    (R'''tfds\.features\.Text\(''', R'''datasets.Value(\'string\'),'''),
    (R'''features\s*=\s*tfds.features.FeaturesDict\(''', R'''features=datasets.Features('''),
    (R'''tfds\.features\.FeaturesDict\(''', R'''dict('''),
    (R'''The TensorFlow Datasets Authors''', R'''The TensorFlow Datasets Authors and the HuggingFace Datasets Authors'''),
    (R'''tfds\.''', R'''datasets.'''),
    (R'''dl_manager\.manual_dir''', R'''self.config.data_dir'''),
    (R'''self\.builder_config''', R'''self.config'''),
]





def    a__			(   lowerCAmelCase__		)       ->      int:
    return ConvertCommand(args.tfds_path    ,   args.datasets_directory		)







class      lowerCamelCase_  (      __lowerCAmelCase ):






      @staticmethod
      def lowercase_				(   _A							:       Optional[Any]					):


          '''simple docstring'''


          UpperCAmelCase__     :						str						=							parser.add_parser(
              '''convert'''		,		help='''Convert a TensorFlow Datasets dataset to a HuggingFace Datasets dataset.'''		,		)
          train_parser.add_argument(
              '''--tfds_path'''		,		type=__SCREAMING_SNAKE_CASE		,		required=__SCREAMING_SNAKE_CASE		,		help='''Path to a TensorFlow Datasets folder to convert or a single tfds file to convert.'''		,		)
          train_parser.add_argument(
              '''--datasets_directory'''		,		type=__SCREAMING_SNAKE_CASE		,		required=__SCREAMING_SNAKE_CASE		,		help='''Path to the HuggingFace Datasets folder.'''					)
          train_parser.set_defaults(func=__SCREAMING_SNAKE_CASE					)






      def __init__(   self							:       str		,		_A							:       List[str]		,		_A							:       Tuple		,		*_A							:       int					):


          '''simple docstring'''


          UpperCAmelCase__     :						Optional[Any]						=							get_logger('''datasets-cli/converting'''					)

          UpperCAmelCase__     :						Tuple						=							tfds_path
          UpperCAmelCase__     :						str						=							datasets_directory






      def lowercase_				(   self							:       str					):


          '''simple docstring'''


          if os.path.isdir(self._tfds_path					):
              UpperCAmelCase__     :						str						=							os.path.abspath(self._tfds_path					)
          elif os.path.isfile(self._tfds_path					):
              UpperCAmelCase__     :						List[Any]						=							os.path.dirname(self._tfds_path					)
          else:
              raise ValueError('''--tfds_path is neither a directory nor a file. Please check path.'''					)

          UpperCAmelCase__     :						Dict						=							os.path.abspath(self._datasets_directory					)

          self._logger.info(f"""Converting datasets from {abs_tfds_path} to {abs_datasets_path}"""					)

          UpperCAmelCase__     :						Dict						=							[]
          UpperCAmelCase__     :						Any						=							[]
          UpperCAmelCase__     :						Union[str, Any]						=							{}

          if os.path.isdir(self._tfds_path					):
              UpperCAmelCase__     :						List[Any]						=							os.listdir(__SCREAMING_SNAKE_CASE					)
          else:
              UpperCAmelCase__     :						Dict						=							[os.path.basename(self._tfds_path					)]

          for f_name in file_names:
              self._logger.info(f"""Looking at file {f_name}"""					)
              UpperCAmelCase__     :						List[Any]						=							os.path.join(__SCREAMING_SNAKE_CASE		,		__SCREAMING_SNAKE_CASE					)
              UpperCAmelCase__     :						Union[str, Any]						=							os.path.join(__SCREAMING_SNAKE_CASE		,		__SCREAMING_SNAKE_CASE					)

              if not os.path.isfile(__SCREAMING_SNAKE_CASE					) or "__init__" in f_name or "_test" in f_name or ".py" not in f_name:
                  self._logger.info('''Skipping file'''					)
                  continue

              with open(__SCREAMING_SNAKE_CASE		,		encoding='''utf-8'''					) as f:
                  UpperCAmelCase__     :						Any						=							f.readlines()

              UpperCAmelCase__     :						List[str]						=							[]
              UpperCAmelCase__     :						str						=							False
              UpperCAmelCase__     :						Optional[int]						=							False
              UpperCAmelCase__     :						Dict						=							[]
              for line in lines:
                  UpperCAmelCase__     :						Union[str, Any]						=							line

                  # Convert imports
                  if "import tensorflow.compat.v2 as tf" in out_line:
                      continue
                  elif "@tfds.core" in out_line:
                      continue
                  elif "builder=self" in out_line:
                      continue
                  elif "import tensorflow_datasets.public_api as tfds" in out_line:
                      UpperCAmelCase__     :						Any						=							'''import datasets\n'''
                  elif "import tensorflow" in out_line:
                      # order is important here
                      UpperCAmelCase__     :						Optional[Any]						=							''''''
                      continue
                  elif "from absl import logging" in out_line:
                      UpperCAmelCase__     :						int						=							'''from datasets import logging\n'''
                  elif "getLogger" in out_line:
                      UpperCAmelCase__     :						int						=							out_line.replace('''getLogger'''		,		'''get_logger'''					)
                  elif any(expression in out_line for expression in TO_HIGHLIGHT					):
                      UpperCAmelCase__     :						str						=							True
                      UpperCAmelCase__     :						List[str]						=							list(filter(lambda _A					: e in out_line		,		__SCREAMING_SNAKE_CASE					)					)
                      out_lines.append(HIGHLIGHT_MESSAGE_PRE + str(__SCREAMING_SNAKE_CASE					) + '''\n'''					)
                      out_lines.append(__SCREAMING_SNAKE_CASE					)
                      out_lines.append(__SCREAMING_SNAKE_CASE					)
                      continue
                  else:
                      for pattern, replacement in TO_CONVERT:
                          UpperCAmelCase__     :						Optional[Any]						=							re.sub(__SCREAMING_SNAKE_CASE		,		__SCREAMING_SNAKE_CASE		,		__SCREAMING_SNAKE_CASE					)

                # Take care of saving utilities (to later move them together with main script)
                  if "tensorflow_datasets" in out_line:
                      UpperCAmelCase__     :						int						=							re.match(R'''from\stensorflow_datasets.*import\s([^\.\r\n]+)'''		,		__SCREAMING_SNAKE_CASE					)
                      tfds_imports.extend(imp.strip() for imp in match.group(1					).split(''','''					)					)
                      UpperCAmelCase__     :						Optional[int]						=							'''from . import ''' + match.group(1					)

                  # Check we have not forget anything
                  if "tf." in out_line or "tfds." in out_line or "tensorflow_datasets" in out_line:
                      raise ValueError(f"""Error converting {out_line.strip()}"""					)

                  if "GeneratorBasedBuilder" in out_line or "BeamBasedBuilder" in out_line:
                      UpperCAmelCase__     :						List[Any]						=							True
                  out_lines.append(__SCREAMING_SNAKE_CASE					)

              if is_builder or "wmt" in f_name:
                  # We create a new directory for each dataset
                  UpperCAmelCase__     :						int						=							f_name.replace('''.py'''		,		''''''					)
                  UpperCAmelCase__     :						Optional[Any]						=							os.path.join(__SCREAMING_SNAKE_CASE		,		__SCREAMING_SNAKE_CASE					)
                  UpperCAmelCase__     :						List[str]						=							os.path.join(__SCREAMING_SNAKE_CASE		,		__SCREAMING_SNAKE_CASE					)
                  os.makedirs(__SCREAMING_SNAKE_CASE		,		exist_ok=__SCREAMING_SNAKE_CASE					)
                  self._logger.info(f"""Adding directory {output_dir}"""					)
                  imports_to_builder_map.update({imp: output_dir for imp in tfds_imports}					)
              else:
                  # Utilities will be moved at the end
                  utils_files.append(__SCREAMING_SNAKE_CASE					)

              if needs_manual_update:
                  with_manual_update.append(__SCREAMING_SNAKE_CASE					)

              with open(__SCREAMING_SNAKE_CASE		,		'''w'''		,		encoding='''utf-8'''					) as f:
                  f.writelines(__SCREAMING_SNAKE_CASE					)
              self._logger.info(f"""Converted in {output_file}"""					)

          for utils_file in utils_files:
              try:
                  UpperCAmelCase__     :						Any						=							os.path.basename(__SCREAMING_SNAKE_CASE					)
                  UpperCAmelCase__     :						Optional[Any]						=							imports_to_builder_map[f_name.replace('''.py'''		,		''''''					)]
                  self._logger.info(f"""Moving {dest_folder} to {utils_file}"""					)
                  shutil.copy(__SCREAMING_SNAKE_CASE		,		__SCREAMING_SNAKE_CASE					)
              except KeyError:
                  self._logger.error(f"""Cannot find destination folder for {utils_file}. Please copy manually."""					)

          if with_manual_update:
              for file_path in with_manual_update:
                  self._logger.warning(
                      f"""You need to manually update file {file_path} to remove configurations using \'TextEncoderConfig\'."""					)






'''simple docstring'''



import argparse

import requests
import torch

# pip3 install salesforce-lavis
# I'm actually installing a slightly modified version: pip3 install git+https://github.com/nielsrogge/LAVIS.git@fix_lavis
from lavis.models import load_model_and_preprocess
from PIL import Image

from transformers import (
    AutoTokenizer,
    BlipaConfig,
    BlipaForConditionalGeneration,
    BlipaProcessor,
    BlipaVisionConfig,
    BlipImageProcessor,
    OPTConfig,
    TaConfig,
)
from transformers.utils.constants import OPENAI_CLIP_MEAN, OPENAI_CLIP_STD







def       _UpperCamelCase			()-> int:




     '''simple docstring'''





     __snake_case            =	'''https://storage.googleapis.com/sfr-vision-language-research/LAVIS/assets/merlion.png'''
     __snake_case            =	Image.open(requests.get(_lowerCamelCase ,						stream=_lowerCamelCase						).raw						).convert('''RGB'''						)

     return image







def       _UpperCamelCase			(_lowerCamelCase				:  Union[str, Any]						)-> List[Any]:




     '''simple docstring'''





     __snake_case            =	[]
     # fmt: off

     # vision encoder
     rename_keys.append(('''visual_encoder.cls_token''', '''vision_model.embeddings.class_embedding''')						)
     rename_keys.append(('''visual_encoder.pos_embed''', '''vision_model.embeddings.position_embedding''')						)
     rename_keys.append(('''visual_encoder.patch_embed.proj.weight''', '''vision_model.embeddings.patch_embedding.weight''')						)
     rename_keys.append(('''visual_encoder.patch_embed.proj.bias''', '''vision_model.embeddings.patch_embedding.bias''')						)
     rename_keys.append(('''ln_vision.weight''', '''vision_model.post_layernorm.weight''')						)
     rename_keys.append(('''ln_vision.bias''', '''vision_model.post_layernorm.bias''')						)

     for i in range(config.vision_config.num_hidden_layers						):
          rename_keys.append((f'''visual_encoder.blocks.{i}.norm1.weight''', f'''vision_model.encoder.layers.{i}.layer_norm1.weight''')						)
          rename_keys.append((f'''visual_encoder.blocks.{i}.norm1.bias''', f'''vision_model.encoder.layers.{i}.layer_norm1.bias''')						)
          rename_keys.append((f'''visual_encoder.blocks.{i}.norm2.weight''', f'''vision_model.encoder.layers.{i}.layer_norm2.weight''')						)
          rename_keys.append((f'''visual_encoder.blocks.{i}.norm2.bias''', f'''vision_model.encoder.layers.{i}.layer_norm2.bias''')						)
          rename_keys.append((f'''visual_encoder.blocks.{i}.attn.qkv.weight''', f'''vision_model.encoder.layers.{i}.self_attn.qkv.weight''')						)
          rename_keys.append((f'''visual_encoder.blocks.{i}.attn.proj.weight''', f'''vision_model.encoder.layers.{i}.self_attn.projection.weight''',)						)
          rename_keys.append((f'''visual_encoder.blocks.{i}.attn.proj.bias''', f'''vision_model.encoder.layers.{i}.self_attn.projection.bias''')						)
          rename_keys.append((f'''visual_encoder.blocks.{i}.mlp.fc1.weight''', f'''vision_model.encoder.layers.{i}.mlp.fc1.weight''')						)
          rename_keys.append((f'''visual_encoder.blocks.{i}.mlp.fc1.bias''', f'''vision_model.encoder.layers.{i}.mlp.fc1.bias''')						)
          rename_keys.append((f'''visual_encoder.blocks.{i}.mlp.fc2.weight''', f'''vision_model.encoder.layers.{i}.mlp.fc2.weight''')						)
          rename_keys.append((f'''visual_encoder.blocks.{i}.mlp.fc2.bias''', f'''vision_model.encoder.layers.{i}.mlp.fc2.bias''')						)

     # QFormer
     rename_keys.append(('''Qformer.bert.embeddings.LayerNorm.weight''', '''qformer.layernorm.weight''')						)
     rename_keys.append(('''Qformer.bert.embeddings.LayerNorm.bias''', '''qformer.layernorm.bias''')						)

     # fmt: on
     return rename_keys







def       _UpperCamelCase			(_lowerCamelCase				:  Dict ,						_lowerCamelCase				:  List[str] ,						_lowerCamelCase				:  Optional[int]						)-> Tuple:




     '''simple docstring'''





     __snake_case            =	dct.pop(_lowerCamelCase						)
     __snake_case            =	val







def       _UpperCamelCase			(_lowerCamelCase				:  List[Any] ,						_lowerCamelCase				:  Tuple						)-> str:




     '''simple docstring'''





     for i in range(config.vision_config.num_hidden_layers						):
          # read in original q and v biases
          __snake_case            =	state_dict.pop(f'''visual_encoder.blocks.{i}.attn.q_bias'''						)
          __snake_case            =	state_dict.pop(f'''visual_encoder.blocks.{i}.attn.v_bias'''						)

          # next, set bias in the state dict
          __snake_case            =	torch.cat((q_bias, torch.zeros_like(_lowerCamelCase ,						requires_grad=_lowerCamelCase						), v_bias)						)
          __snake_case            =	qkv_bias







def       _UpperCamelCase			(_lowerCamelCase				:  Tuple ,						_lowerCamelCase				:  Tuple						)-> Dict:




     '''simple docstring'''





     __snake_case            =	3_64 if '''coco''' in model_name else 2_24
     __snake_case            =	BlipaVisionConfig(image_size=_lowerCamelCase						).to_dict()

     # make sure the models have proper bos_token_id and eos_token_id set (important for generation)
     # seems like flan-T5 models don't have bos_token_id properly set?
     if "opt-2.7b" in model_name:
          __snake_case            =	OPTConfig.from_pretrained('''facebook/opt-2.7b''' ,						eos_token_id=_lowerCamelCase						).to_dict()
     elif "opt-6.7b" in model_name:
          __snake_case            =	OPTConfig.from_pretrained('''facebook/opt-6.7b''' ,						eos_token_id=_lowerCamelCase						).to_dict()
     elif "t5-xl" in model_name:
          __snake_case            =	TaConfig.from_pretrained('''google/flan-t5-xl''' ,						dense_act_fn='''gelu''' ,						bos_token_id=1						).to_dict()
     elif "t5-xxl" in model_name:
          __snake_case            =	TaConfig.from_pretrained('''google/flan-t5-xxl''' ,						dense_act_fn='''gelu''' ,						bos_token_id=1						).to_dict()

     __snake_case            =	BlipaConfig(vision_config=_lowerCamelCase ,						text_config=_lowerCamelCase						)

     return config, image_size







@torch.no_grad()
def       _UpperCamelCase			(_lowerCamelCase				:  List[Any] ,						_lowerCamelCase				:  Union[str, Any]=None ,						_lowerCamelCase				:  Any=False						)-> Dict:




     '''simple docstring'''





     __snake_case            =	(
         AutoTokenizer.from_pretrained('''facebook/opt-2.7b'''						)
         if '''opt''' in model_name
         else AutoTokenizer.from_pretrained('''google/flan-t5-xl'''						)
     )
     __snake_case            =	tokenizer('''\n''' ,						add_special_tokens=_lowerCamelCase						).input_ids[0]
     __snake_case       ,     __snake_case            =	get_blipa_config(_lowerCamelCase ,						eos_token_id=_lowerCamelCase						)

     __snake_case            =	BlipaForConditionalGeneration(_lowerCamelCase						).eval()

     __snake_case            =	{
         '''blip2-opt-2.7b''': ('''blip2_opt''', '''pretrain_opt2.7b'''),
         '''blip2-opt-6.7b''': ('''blip2_opt''', '''pretrain_opt6.7b'''),
         '''blip2-opt-2.7b-coco''': ('''blip2_opt''', '''caption_coco_opt2.7b'''),
         '''blip2-opt-6.7b-coco''': ('''blip2_opt''', '''caption_coco_opt6.7b'''),
         '''blip2-flan-t5-xl''': ('''blip2_t5''', '''pretrain_flant5xl'''),
         '''blip2-flan-t5-xl-coco''': ('''blip2_t5''', '''caption_coco_flant5xl'''),
         '''blip2-flan-t5-xxl''': ('''blip2_t5''', '''pretrain_flant5xxl'''),
     }

     __snake_case       ,     __snake_case            =	model_name_to_original[model_name]

     # load original model
     print('''Loading original model...'''						)
     __snake_case            =	'''cuda''' if torch.cuda.is_available() else '''cpu'''
     __snake_case       ,     __snake_case       ,     __snake_case            =	load_model_and_preprocess(
         name=_lowerCamelCase ,						model_type=_lowerCamelCase ,						is_eval=_lowerCamelCase ,						device=_lowerCamelCase						)
     original_model.eval()
     print('''Done!'''						)

     # update state dict keys
     __snake_case            =	original_model.state_dict()
     __snake_case            =	create_rename_keys(_lowerCamelCase						)
     for src, dest in rename_keys:
          rename_key(_lowerCamelCase ,						_lowerCamelCase ,						_lowerCamelCase						)

     # some keys can be renamed efficiently
     for key, val in state_dict.copy().items():
          __snake_case            =	state_dict.pop(_lowerCamelCase						)
          if key.startswith('''Qformer.bert'''						):
               __snake_case            =	key.replace('''Qformer.bert''' ,						'''qformer'''						)
          if "attention.self" in key:
               __snake_case            =	key.replace('''self''' ,						'''attention'''						)
          if "opt_proj" in key:
               __snake_case            =	key.replace('''opt_proj''' ,						'''language_projection'''						)
          if "t5_proj" in key:
               __snake_case            =	key.replace('''t5_proj''' ,						'''language_projection'''						)
          if key.startswith('''opt'''						):
               __snake_case            =	key.replace('''opt''' ,						'''language'''						)
          if key.startswith('''t5'''						):
               __snake_case            =	key.replace('''t5''' ,						'''language'''						)
          __snake_case            =	val

     # read in qv biases
     read_in_q_v_bias(_lowerCamelCase ,						_lowerCamelCase						)

     __snake_case       ,     __snake_case            =	hf_model.load_state_dict(_lowerCamelCase ,						strict=_lowerCamelCase						)
     assert len(_lowerCamelCase						) == 0
     assert unexpected_keys == ["qformer.embeddings.position_ids"]

     __snake_case            =	load_demo_image()
     __snake_case            =	vis_processors['''eval'''](_lowerCamelCase						).unsqueeze(0						).to(_lowerCamelCase						)
     __snake_case            =	tokenizer(['''\n'''] ,						return_tensors='''pt'''						).input_ids.to(_lowerCamelCase						)

     # create processor
     __snake_case            =	BlipImageProcessor(
         size={'''height''': image_size, '''width''': image_size} ,						image_mean=_lowerCamelCase ,						image_std=_lowerCamelCase						)
     __snake_case            =	BlipaProcessor(image_processor=_lowerCamelCase ,						tokenizer=_lowerCamelCase						)
     __snake_case            =	processor(images=_lowerCamelCase ,						return_tensors='''pt'''						).pixel_values.to(_lowerCamelCase						)

     # make sure processor creates exact same pixel values
     assert torch.allclose(_lowerCamelCase ,						_lowerCamelCase						)

     original_model.to(_lowerCamelCase						)
     hf_model.to(_lowerCamelCase						)
     with torch.no_grad():
          if "opt" in model_name:
               __snake_case            =	original_model({'''image''': original_pixel_values, '''text_input''': ['''''']}						).logits
               __snake_case            =	hf_model(_lowerCamelCase ,						_lowerCamelCase						).logits
          else:
               __snake_case            =	original_model(
                   {'''image''': original_pixel_values, '''text_input''': ['''\n'''], '''text_output''': ['''\n''']}						).logits
               __snake_case            =	input_ids.masked_fill(input_ids == tokenizer.pad_token_id ,						-1_00						)
               __snake_case            =	hf_model(_lowerCamelCase ,						_lowerCamelCase ,						labels=_lowerCamelCase						).logits

     assert original_logits.shape == logits.shape
     print('''First values of original logits:''' ,						original_logits[0, :3, :3]						)
     print('''First values of HF logits:''' ,						logits[0, :3, :3]						)

     # assert values
     if model_name == "blip2-flan-t5-xl":
          __snake_case            =	torch.tensor(
              [[-41.5850, -4.4440, -8.9922], [-47.4322, -5.9143, -1.7340]] ,						device=_lowerCamelCase						)
          assert torch.allclose(logits[0, :3, :3] ,						_lowerCamelCase ,						atol=1E-4						)
     elif model_name == "blip2-flan-t5-xl-coco":
          __snake_case            =	torch.tensor(
              [[-57.0109, -9.8967, -12.6280], [-68.6578, -12.7191, -10.5065]] ,						device=_lowerCamelCase						)
     else:
          # cast to same type
          __snake_case            =	logits.dtype
          assert torch.allclose(original_logits.to(_lowerCamelCase						) ,						_lowerCamelCase ,						atol=1E-2						)
     print('''Looks ok!'''						)

     print('''Generating a caption...'''						)
     __snake_case            =	''''''
     __snake_case            =	tokenizer(_lowerCamelCase ,						return_tensors='''pt'''						).input_ids.to(_lowerCamelCase						)

     __snake_case            =	original_model.generate({'''image''': original_pixel_values}						)
     __snake_case            =	hf_model.generate(
         _lowerCamelCase ,						_lowerCamelCase ,						do_sample=_lowerCamelCase ,						num_beams=5 ,						max_length=30 ,						min_length=1 ,						top_p=0.9 ,						repetition_penalty=1.0 ,						length_penalty=1.0 ,						temperature=1 ,						)
     print('''Original generation:''' ,						_lowerCamelCase						)
     __snake_case            =	input_ids.shape[1]
     __snake_case            =	processor.batch_decode(outputs[:, prompt_length:] ,						skip_special_tokens=_lowerCamelCase						)
     __snake_case            =	[text.strip() for text in output_text]
     print('''HF generation:''' ,						_lowerCamelCase						)

     if pytorch_dump_folder_path is not None:
          processor.save_pretrained(_lowerCamelCase						)
          hf_model.save_pretrained(_lowerCamelCase						)

     if push_to_hub:
          processor.push_to_hub(f'''nielsr/{model_name}'''						)
          hf_model.push_to_hub(f'''nielsr/{model_name}'''						)


if __name__ == "__main__":
     UpperCAmelCase_							:	Any	     =		argparse.ArgumentParser()
     UpperCAmelCase_							:	Tuple	     =		[
         '''blip2-opt-2.7b''',
         '''blip2-opt-6.7b''',
         '''blip2-opt-2.7b-coco''',
         '''blip2-opt-6.7b-coco''',
         '''blip2-flan-t5-xl''',
         '''blip2-flan-t5-xl-coco''',
         '''blip2-flan-t5-xxl''',
     ]
     parser.add_argument(
         '''--model_name''',
         default='''blip2-opt-2.7b''',
         choices=choices,
         type=str,
         help='''Path to hf config.json of model to convert''',
     )
     parser.add_argument('''--pytorch_dump_folder_path''', default=None, type=str, help='''Path to the output PyTorch model.''')
     parser.add_argument(
         '''--push_to_hub''',
         action='''store_true''',
         help='''Whether to push the model and processor to the hub after converting''',
     )

     UpperCAmelCase_							:	List[str]	     =		parser.parse_args()

     convert_blipa_checkpoint(args.model_name, args.pytorch_dump_folder_path, args.push_to_hub)






