






"""simple docstring"""







import unittest

from transformers import AlbertTokenizer, AlbertTokenizerFast
from transformers.testing_utils import get_tests_dir, require_sentencepiece, require_tokenizers, slow

from ...test_tokenization_common import TokenizerTesterMixin


a			:    Union[str, Any]				 =		get_tests_dir("""fixtures/spiece.model""")


@require_sentencepiece
@require_tokenizers
class    __UpperCAmelCase(       SCREAMING_SNAKE_CASE__  ,  unittest.TestCase							):




						"""simple docstring"""




						__lowerCamelCase    	= AlbertTokenizer
						__lowerCamelCase    	= AlbertTokenizerFast
						__lowerCamelCase    	= True
						__lowerCamelCase    	= True
						__lowerCamelCase    	= True




						def 		UpperCAmelCase_	(       self      ):
												'''simple docstring'''
												super().setUp()

												# We have a SentencePiece fixture for testing
												lowercase__    :				Optional[int]=	AlbertTokenizer(snake_case__      )
												tokenizer.save_pretrained(self.tmpdirname      )




						def 		UpperCAmelCase_	(       self	,  snake_case__      ):
												'''simple docstring'''
												lowercase__    :				Any=	"this is a test"
												lowercase__    :				Optional[int]=	"this is a test"
												return input_text, output_text




						def 		UpperCAmelCase_	(       self      ):
												'''simple docstring'''
												lowercase__    :				List[Any]=	"<pad>"
												lowercase__    :				List[str]=	0

												self.assertEqual(self.get_tokenizer()._convert_token_to_id(snake_case__      )	,  snake_case__      )
												self.assertEqual(self.get_tokenizer()._convert_id_to_token(snake_case__      )	,  snake_case__      )




						def 		UpperCAmelCase_	(       self      ):
												'''simple docstring'''
												lowercase__    :				Optional[Any]=	list(self.get_tokenizer().get_vocab().keys()      )

												self.assertEqual(vocab_keys[0]	,  "<pad>"      )
												self.assertEqual(vocab_keys[1]	,  "<unk>"      )
												self.assertEqual(vocab_keys[-1]	,  "▁eloquent"      )
												self.assertEqual(len(snake_case__      )	,  30000      )




						def 		UpperCAmelCase_	(       self      ):
												'''simple docstring'''
												self.assertEqual(self.get_tokenizer().vocab_size	,  30000      )




						def 		UpperCAmelCase_	(       self      ):
												'''simple docstring'''
												if not self.test_rust_tokenizer:
																		return

												lowercase__    :				int=	self.get_tokenizer()
												lowercase__    :				List[str]=	self.get_rust_tokenizer()

												lowercase__    :				int=	"I was born in 92000, and this is falsé."

												lowercase__    :				Dict=	tokenizer.tokenize(snake_case__      )
												lowercase__    :				List[str]=	rust_tokenizer.tokenize(snake_case__      )
												self.assertListEqual(snake_case__	,  snake_case__      )

												lowercase__    :				Optional[int]=	tokenizer.encode(snake_case__	,  add_special_tokens=snake_case__      )
												lowercase__    :				List[Any]=	rust_tokenizer.encode(snake_case__	,  add_special_tokens=snake_case__      )
												self.assertListEqual(snake_case__	,  snake_case__      )

												lowercase__    :				int=	self.get_rust_tokenizer()
												lowercase__    :				Any=	tokenizer.encode(snake_case__      )
												lowercase__    :				List[Any]=	rust_tokenizer.encode(snake_case__      )
												self.assertListEqual(snake_case__	,  snake_case__      )




						def 		UpperCAmelCase_	(       self      ):
												'''simple docstring'''
												lowercase__    :				List[Any]=	AlbertTokenizer(snake_case__	,  keep_accents=snake_case__      )

												lowercase__    :				List[str]=	tokenizer.tokenize("This is a test"      )
												self.assertListEqual(snake_case__	,  ["▁this", "▁is", "▁a", "▁test"]      )

												self.assertListEqual(tokenizer.convert_tokens_to_ids(snake_case__      )	,  [48, 25, 21, 1289]      )

												lowercase__    :				List[Any]=	tokenizer.tokenize("I was born in 92000, and this is falsé."      )
												self.assertListEqual(
												    snake_case__	,  ["▁i", "▁was", "▁born", "▁in", "▁9", "2000", ",", "▁and", "▁this", "▁is", "▁fal", "s", "é", "."]      )
												lowercase__    :				List[Any]=	tokenizer.convert_tokens_to_ids(snake_case__      )
												self.assertListEqual(snake_case__	,  [31, 23, 386, 19, 561, 3050, 15, 17, 48, 25, 8256, 18, 1, 9]      )

												lowercase__    :				Union[str, Any]=	tokenizer.convert_ids_to_tokens(snake_case__      )
												self.assertListEqual(
												    snake_case__	,  ["▁i", "▁was", "▁born", "▁in", "▁9", "2000", ",", "▁and", "▁this", "▁is", "▁fal", "s", "<unk>", "."]	,  )




						def 		UpperCAmelCase_	(       self      ):
												'''simple docstring'''
												lowercase__    :				List[str]=	AlbertTokenizer(snake_case__      )

												lowercase__    :				Tuple=	tokenizer.encode("sequence builders"      )
												lowercase__    :				Union[str, Any]=	tokenizer.encode("multi-sequence build"      )

												lowercase__    :				Optional[Any]=	tokenizer.build_inputs_with_special_tokens(snake_case__      )
												lowercase__    :				int=	tokenizer.build_inputs_with_special_tokens(snake_case__	,  snake_case__      )

												assert encoded_sentence == [tokenizer.cls_token_id] + text + [tokenizer.sep_token_id]
												assert encoded_pair == [tokenizer.cls_token_id] + text + [tokenizer.sep_token_id] + text_a + [
												    tokenizer.sep_token_id
												]




						@slow
						def 		UpperCAmelCase_	(       self      ):
												'''simple docstring'''
												# fmt: off
												lowercase__    :				List[Any]=	{"attention_mask": [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], "input_ids": [[2, 21970, 13, 5, 6092, 167, 28, 7103, 2153, 673, 8, 7028, 12051, 18, 17, 7103, 2153, 673, 8, 3515, 18684, 8, 4461, 6, 1927, 297, 8, 12060, 2607, 18, 13, 5, 4461, 15, 10538, 38, 8, 135, 15, 822, 58, 15, 993, 10363, 15, 1460, 8005, 4461, 15, 993, 255, 2328, 9, 9, 9, 6, 26, 1112, 816, 3260, 13, 5, 103, 2377, 6, 17, 1112, 816, 2782, 13, 5, 103, 10641, 6, 29, 84, 2512, 2430, 782, 18684, 2761, 19, 808, 2430, 2556, 17, 855, 1480, 9477, 4091, 128, 11712, 15, 7103, 2153, 673, 17, 24883, 9990, 9, 3], [2, 11502, 25, 1006, 20, 782, 8, 11809, 855, 1732, 19393, 18667, 37, 367, 21018, 69, 1854, 34, 11860, 19124, 27, 156, 225, 17, 193, 4141, 19, 65, 9124, 9, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [2, 14, 2231, 886, 2385, 17659, 84, 14, 16792, 1952, 9, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], "token_type_ids": [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]}  # noqa: E501
												# fmt: on

												self.tokenizer_integration_test_util(
												    expected_encoding=snake_case__	,  model_name="albert-base-v2"	,  revision="6b6560eaf5ff2e250b00c50f380c5389a9c2d82e"	,  )














"""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()
a			:    List[str]				 =		logging.get_logger(__name__)

a			:    List[Any]				 =		[
    ("""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"""),
]

a			:    Dict				 =		[
    """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 						lowercase__(A						)    ->Optional[int]:




						"""simple docstring"""



						lowercase__    :				Any=	torch.load(A ,		map_location="cpu"						)
						return sd





def 						lowercase__(A ,		A ,		A=rename_keys_prefix						)    ->List[str]:




						"""simple docstring"""



						lowercase__    :				int=	OrderedDict()
						lowercase__    :				Optional[Any]=	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
												lowercase__    :				Union[str, Any]=	key
												for name_pair in rename_keys_prefix:
																		lowercase__    :				str=	new_key.replace(name_pair[0] ,		name_pair[1]						)
												lowercase__    :				Union[str, Any]=	d[key]
												if key == "bert.cls.predictions.decoder.weight":
																		# Old bert code didn't have `decoder.bias`, but was added separately
																		lowercase__    :				Optional[int]=	new_d["cls.predictions.bias"]
						return new_d





@torch.no_grad()
def 						lowercase__(A ,		A						)    ->str:




						"""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:
												lowercase__    :				Union[str, Any]=	"pretraining"
												if "vcr" in checkpoint_path:
																		lowercase__    :				str=	{"visual_embedding_dim": 512}
												elif "vqa_advanced" in checkpoint_path:
																		lowercase__    :				Optional[Any]=	{"visual_embedding_dim": 2_048}
												elif "vqa" in checkpoint_path:
																		lowercase__    :				int=	{"visual_embedding_dim": 2_048}
												elif "nlvr" in checkpoint_path:
																		lowercase__    :				Tuple=	{"visual_embedding_dim": 1_024}
												else:
																		raise NotImplementedError(f'''No implementation found for `{checkpoint_path}`.'''						)
						else:
												if "vcr" in checkpoint_path:
																		lowercase__    :				int=	{"visual_embedding_dim": 512}
																		lowercase__    :				int=	"multichoice"
												elif "vqa_advanced" in checkpoint_path:
																		lowercase__    :				Dict=	{"visual_embedding_dim": 2_048}
																		lowercase__    :				Optional[Any]=	"vqa_advanced"
												elif "vqa" in checkpoint_path:
																		lowercase__    :				Optional[int]=	{"visual_embedding_dim": 2_048, "num_labels": 3_129}
																		lowercase__    :				List[str]=	"vqa"
												elif "nlvr" in checkpoint_path:
																		lowercase__    :				Dict=	{
																		    "visual_embedding_dim": 1_024,
																		    "num_labels": 2,
																		}
																		lowercase__    :				Any=	"nlvr"

						lowercase__    :				List[Any]=	VisualBertConfig(**A						)

						# Load State Dict
						lowercase__    :				Union[str, Any]=	load_state_dict(A						)

						lowercase__    :				List[str]=	get_new_dict(A ,		A						)

						if model_type == "pretraining":
												lowercase__    :				Optional[Any]=	VisualBertForPreTraining(A						)
						elif model_type == "vqa":
												lowercase__    :				Any=	VisualBertForQuestionAnswering(A						)
						elif model_type == "nlvr":
												lowercase__    :				Union[str, Any]=	VisualBertForVisualReasoning(A						)
						elif model_type == "multichoice":
												lowercase__    :				str=	VisualBertForMultipleChoice(A						)

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


if __name__ == "__main__":
			a			:    int				 =		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.""")
			a			:    Dict				 =		parser.parse_args()
			convert_visual_bert_checkpoint(args.orig_checkpoint_path, args.pytorch_dump_folder_path)






