





"""simple docstring"""





import argparse
from collections import OrderedDict
from pathlib import Path

import torch

from transformers import (
    VisualBertConfig,
    VisualBertForMultipleChoice,
    VisualBertForPreTraining,
    VisualBertForQuestionAnswering,
    VisualBertForVisualReasoning,
)
from transformers.utils import logging


logging.set_verbosity_info()
lowerCAmelCase__     			=			logging.get_logger(__name__)

lowerCAmelCase__     			=			[
    ("""bert.bert""", """visual_bert"""),
    ("""bert.cls""", """cls"""),
    ("""bert.classifier""", """cls"""),
    ("""token_type_embeddings_visual""", """visual_token_type_embeddings"""),
    ("""position_embeddings_visual""", """visual_position_embeddings"""),
    ("""projection""", """visual_projection"""),
]

lowerCAmelCase__     			=			[
    """nlvr2_coco_pre_trained.th""",
    """nlvr2_fine_tuned.th""",
    """nlvr2_pre_trained.th""",
    """vcr_coco_pre_train.th""",
    """vcr_fine_tune.th""",
    """vcr_pre_train.th""",
    """vqa_coco_pre_trained.th""",
    """vqa_fine_tuned.th""",
    """vqa_pre_trained.th""",
]


def       a__					(					_SCREAMING_SNAKE_CASE    ):




		"""simple docstring"""


		UpperCamelCase   =	torch.load(UpperCamelCase__  ,	map_location="cpu"    )
		return sd


def       a__					(					_SCREAMING_SNAKE_CASE  ,	_SCREAMING_SNAKE_CASE  ,	_SCREAMING_SNAKE_CASE=rename_keys_prefix    ):




		"""simple docstring"""


		UpperCamelCase   =	OrderedDict()
		UpperCamelCase   =	torch.arange(config.max_position_embeddings    ).expand((1, -1)    )
		# detector_d = OrderedDict()
		for key in d:
				if "detector" in key:
						# detector_d[key.replace('detector.','')] = d[key]
						continue
				UpperCamelCase   =	key
				for name_pair in rename_keys_prefix:
						UpperCamelCase   =	new_key.replace(name_pair[0]  ,	name_pair[1]    )
				UpperCamelCase   =	d[key]
				if key == "bert.cls.predictions.decoder.weight":
						# Old bert code didn't have `decoder.bias`, but was added separately
						UpperCamelCase   =	new_d["cls.predictions.bias"]
		return new_d


@torch.no_grad()
def       a__					(					_SCREAMING_SNAKE_CASE  ,	_SCREAMING_SNAKE_CASE    ):




		"""simple docstring"""


		assert (
		    checkpoint_path.split("/"    )[-1] in ACCEPTABLE_CHECKPOINTS
		), F"The checkpoint provided must be in {ACCEPTABLE_CHECKPOINTS}."

		# Get Config
		if "pre" in checkpoint_path:
				UpperCamelCase   =	"pretraining"
				if "vcr" in checkpoint_path:
						UpperCamelCase   =	{"visual_embedding_dim": 512}
				elif "vqa_advanced" in checkpoint_path:
						UpperCamelCase   =	{"visual_embedding_dim": 2_048}
				elif "vqa" in checkpoint_path:
						UpperCamelCase   =	{"visual_embedding_dim": 2_048}
				elif "nlvr" in checkpoint_path:
						UpperCamelCase   =	{"visual_embedding_dim": 1_024}
				else:
						raise NotImplementedError(F"No implementation found for `{checkpoint_path}`."    )
		else:
				if "vcr" in checkpoint_path:
						UpperCamelCase   =	{"visual_embedding_dim": 512}
						UpperCamelCase   =	"multichoice"
				elif "vqa_advanced" in checkpoint_path:
						UpperCamelCase   =	{"visual_embedding_dim": 2_048}
						UpperCamelCase   =	"vqa_advanced"
				elif "vqa" in checkpoint_path:
						UpperCamelCase   =	{"visual_embedding_dim": 2_048, "num_labels": 3_129}
						UpperCamelCase   =	"vqa"
				elif "nlvr" in checkpoint_path:
						UpperCamelCase   =	{
						    "visual_embedding_dim": 1_024,
						    "num_labels": 2,
						}
						UpperCamelCase   =	"nlvr"

		UpperCamelCase   =	VisualBertConfig(**UpperCamelCase__    )

		# Load State Dict
		UpperCamelCase   =	load_state_dict(UpperCamelCase__    )

		UpperCamelCase   =	get_new_dict(UpperCamelCase__  ,	UpperCamelCase__    )

		if model_type == "pretraining":
				UpperCamelCase   =	VisualBertForPreTraining(UpperCamelCase__    )
		elif model_type == "vqa":
				UpperCamelCase   =	VisualBertForQuestionAnswering(UpperCamelCase__    )
		elif model_type == "nlvr":
				UpperCamelCase   =	VisualBertForVisualReasoning(UpperCamelCase__    )
		elif model_type == "multichoice":
				UpperCamelCase   =	VisualBertForMultipleChoice(UpperCamelCase__    )

		model.load_state_dict(UpperCamelCase__    )
		# Save Checkpoints
		Path(UpperCamelCase__    ).mkdir(exist_ok=UpperCamelCase__    )
		model.save_pretrained(UpperCamelCase__    )


if __name__ == "__main__":
						lowerCAmelCase__     			=			argparse.ArgumentParser()
						# Required parameters
						parser.add_argument('''orig_checkpoint_path''', type=str, help='''A path to .th on local filesystem.''')
						parser.add_argument('''pytorch_dump_folder_path''', type=str, help='''Path to the output PyTorch model.''')
						lowerCAmelCase__     			=			parser.parse_args()
						convert_visual_bert_checkpoint(args.orig_checkpoint_path, args.pytorch_dump_folder_path)













"""simple docstring"""





from typing import TYPE_CHECKING

from ...utils import _LazyModule


lowerCAmelCase__     			=			{'''tokenization_bertweet''': ['''BertweetTokenizer''']}


if TYPE_CHECKING:
						from .tokenization_bertweet import BertweetTokenizer

else:
						import sys

						lowerCAmelCase__     			=			_LazyModule(__name__, globals()['''__file__'''], _import_structure, module_spec=__spec__)






