

import argparse
import json

import numpy
import torch

from transformers.models.xlm.tokenization_xlm import VOCAB_FILES_NAMES
from transformers.utils import CONFIG_NAME, WEIGHTS_NAME, logging


logging.set_verbosity_info()





def 					__lowerCamelCase	( UpperCamelCase__   ,							UpperCamelCase__      ):







							'''simple docstring'''






							snake_case_							=    torch.load(UpperCamelCase__   ,							map_location='cpu'      )

							snake_case_							=    chkpt['model']

							# We have the base model one level deeper than the original XLM repository
							snake_case_							=    {}
							for k, v in state_dict.items():
														if "pred_layer" in k:
																					snake_case_							=    v
														else:
																					snake_case_							=    v

							snake_case_							=    chkpt['params']
							snake_case_							=    {n: v for n, v in config.items() if not isinstance(UpperCamelCase__   ,							(torch.FloatTensor, numpy.ndarray)      )}

							snake_case_							=    chkpt['dico_word2id']
							snake_case_							=    {s + '</w>' if s.find('@@'      ) == -1 and i > 13 else s.replace('@@'   ,							''      ): i for s, i in vocab.items()}

							# Save pytorch-model
							snake_case_							=    pytorch_dump_folder_path + '/' + WEIGHTS_NAME
							snake_case_							=    pytorch_dump_folder_path + '/' + CONFIG_NAME
							snake_case_							=    pytorch_dump_folder_path + '/' + VOCAB_FILES_NAMES['vocab_file']

							print(F'''Save PyTorch model to {pytorch_weights_dump_path}'''      )
							torch.save(UpperCamelCase__   ,							UpperCamelCase__      )

							print(F'''Save configuration file to {pytorch_config_dump_path}'''      )
							with open(UpperCamelCase__   ,							'w'   ,							encoding='utf-8'      ) as f:
														f.write(json.dumps(UpperCamelCase__   ,							indent=2      ) + '\n'      )

							print(F'''Save vocab file to {pytorch_config_dump_path}'''      )
							with open(UpperCamelCase__   ,							'w'   ,							encoding='utf-8'      ) as f:
														f.write(json.dumps(UpperCamelCase__   ,							indent=2      ) + '\n'      )


if __name__ == "__main__":
					_UpperCAmelCase		:   Tuple										=       argparse.ArgumentParser()
					# Required parameters
					parser.add_argument(
					    """--xlm_checkpoint_path""", default=None, type=str, required=True, help="""Path the official PyTorch dump."""
					)
					parser.add_argument(
					    """--pytorch_dump_folder_path""", default=None, type=str, required=True, help="""Path to the output PyTorch model."""
					)
					_UpperCAmelCase		:   List[Any]										=       parser.parse_args()
					convert_xlm_checkpoint_to_pytorch(args.xlm_checkpoint_path, args.pytorch_dump_folder_path)







def 					__lowerCamelCase	( UpperCamelCase__      ):







							'''simple docstring'''






							if edge <= 0 or not isinstance(UpperCamelCase__   ,							UpperCamelCase__      ):
														raise ValueError('Length must be a positive.'      )
							return 3 * ((25 + 10 * (5 ** (1 / 2))) ** (1 / 2)) * (edge**2)





def 					__lowerCamelCase	( UpperCamelCase__      ):







							'''simple docstring'''






							if edge <= 0 or not isinstance(UpperCamelCase__   ,							UpperCamelCase__      ):
														raise ValueError('Length must be a positive.'      )
							return ((15 + (7 * (5 ** (1 / 2)))) / 4) * (edge**3)


if __name__ == "__main__":
					import doctest

					doctest.testmod()




