

'''simple docstring'''





def        __lowercase    (  UpperCAmelCase__      ):

					"""simple docstring"""






					if num < 0:
										return False

					__lowerCAmelCase					=							num
					__lowerCAmelCase					=							0
					while num > 0:
										__lowerCAmelCase					=							rev_num * 10 + (num % 10)
										num //= 10

					return num_copy == rev_num


if __name__ == "__main__":
		import doctest

		doctest.testmod()









import argparse
import os
import pickle
import sys

import torch

from transformers import TransfoXLConfig, TransfoXLLMHeadModel, load_tf_weights_in_transfo_xl
from transformers.models.transfo_xl import tokenization_transfo_xl as data_utils
from transformers.models.transfo_xl.tokenization_transfo_xl import CORPUS_NAME, VOCAB_FILES_NAMES
from transformers.utils import CONFIG_NAME, WEIGHTS_NAME, logging


logging.set_verbosity_info()

# We do this to be able to load python 2 datasets pickles
# See e.g. https://stackoverflow.com/questions/2121874/python-pickling-after-changing-a-modules-directory/2121918#2121918
lowerCamelCase      				=     data_utils.TransfoXLTokenizer
lowerCamelCase      				=     data_utils.TransfoXLCorpus
lowerCamelCase      				=     data_utils
lowerCamelCase      				=     data_utils


def        __lowercase    (  UpperCAmelCase__		,					UpperCAmelCase__		,					UpperCAmelCase__		,					UpperCAmelCase__      ):

					"""simple docstring"""






					if transfo_xl_dataset_file:
										# Convert a pre-processed corpus (see original TensorFlow repo)
										with open(UpperCAmelCase__		,					'rb'      ) as fp:
															__lowerCAmelCase					=							pickle.load(UpperCAmelCase__		,					encoding='latin1'      )
										# Save vocabulary and dataset cache as Dictionaries (should be better than pickles for the long-term)
										__lowerCAmelCase					=							pytorch_dump_folder_path + '/' + VOCAB_FILES_NAMES['pretrained_vocab_file']
										print(F"""Save vocabulary to {pytorch_vocab_dump_path}"""      )
										__lowerCAmelCase					=							corpus.vocab.__dict__
										torch.save(UpperCAmelCase__		,					UpperCAmelCase__      )

										__lowerCAmelCase					=							corpus.__dict__
										corpus_dict_no_vocab.pop('vocab'		,					UpperCAmelCase__      )
										__lowerCAmelCase					=							pytorch_dump_folder_path + '/' + CORPUS_NAME
										print(F"""Save dataset to {pytorch_dataset_dump_path}"""      )
										torch.save(UpperCAmelCase__		,					UpperCAmelCase__      )

					if tf_checkpoint_path:
										# Convert a pre-trained TensorFlow model
										__lowerCAmelCase					=							os.path.abspath(UpperCAmelCase__      )
										__lowerCAmelCase					=							os.path.abspath(UpperCAmelCase__      )

										print(F"""Converting Transformer XL checkpoint from {tf_path} with config at {config_path}."""      )
										# Initialise PyTorch model
										if transfo_xl_config_file == "":
															__lowerCAmelCase					=							TransfoXLConfig()
										else:
															__lowerCAmelCase					=							TransfoXLConfig.from_json_file(UpperCAmelCase__      )
										print(F"""Building PyTorch model from configuration: {config}"""      )
										__lowerCAmelCase					=							TransfoXLLMHeadModel(UpperCAmelCase__      )

										__lowerCAmelCase					=							load_tf_weights_in_transfo_xl(UpperCAmelCase__		,					UpperCAmelCase__		,					UpperCAmelCase__      )
										# Save pytorch-model
										__lowerCAmelCase					=							os.path.join(UpperCAmelCase__		,					UpperCAmelCase__      )
										__lowerCAmelCase					=							os.path.join(UpperCAmelCase__		,					UpperCAmelCase__      )
										print(F"""Save PyTorch model to {os.path.abspath(UpperCAmelCase__      )}"""      )
										torch.save(model.state_dict()		,					UpperCAmelCase__      )
										print(F"""Save configuration file to {os.path.abspath(UpperCAmelCase__      )}"""      )
										with open(UpperCAmelCase__		,					'w'		,					encoding='utf-8'      ) as f:
															f.write(config.to_json_string()      )


if __name__ == "__main__":
		lowerCamelCase      				=     argparse.ArgumentParser()
		parser.add_argument(
		    '''--pytorch_dump_folder_path''',
		    default=None,
		    type=str,
		    required=True,
		    help='''Path to the folder to store the PyTorch model or dataset/vocab.''',
		)
		parser.add_argument(
		    '''--tf_checkpoint_path''',
		    default='''''',
		    type=str,
		    help='''An optional path to a TensorFlow checkpoint path to be converted.''',
		)
		parser.add_argument(
		    '''--transfo_xl_config_file''',
		    default='''''',
		    type=str,
		    help=(
		        '''An optional config json file corresponding to the pre-trained BERT model. \n'''
		        '''This specifies the model architecture.'''
		    ),
		)
		parser.add_argument(
		    '''--transfo_xl_dataset_file''',
		    default='''''',
		    type=str,
		    help='''An optional dataset file to be converted in a vocabulary.''',
		)
		lowerCamelCase      				=     parser.parse_args()
		convert_transfo_xl_checkpoint_to_pytorch(
		    args.tf_checkpoint_path,
		    args.transfo_xl_config_file,
		    args.pytorch_dump_folder_path,
		    args.transfo_xl_dataset_file,
		)






