




"""simple docstring"""


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
A_						=				data_utils.TransfoXLTokenizer
A_						=				data_utils.TransfoXLCorpus
A_						=				data_utils
A_						=				data_utils


def 					UpperCAmelCase__       (snake_case__							:					List[Any]		,   snake_case__							:					Any		,   snake_case__							:					int		,   snake_case__							:					Optional[Any]    ):
  """simple docstring"""

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

    _snake_case							:		Optional[int]								=  corpus.__dict__
    corpus_dict_no_vocab.pop("""vocab"""		,   snake_case__    )
    _snake_case							:		str								=  pytorch_dump_folder_path + """/""" + CORPUS_NAME
    print(F"Save dataset to {pytorch_dataset_dump_path}"    )
    torch.save(snake_case__		,   snake_case__    )

  if tf_checkpoint_path:
    # Convert a pre-trained TensorFlow model
    _snake_case							:		Optional[Any]								=  os.path.abspath(snake_case__    )
    _snake_case							:		Dict								=  os.path.abspath(snake_case__    )

    print(F"Converting Transformer XL checkpoint from {tf_path} with config at {config_path}."    )
    # Initialise PyTorch model
    if transfo_xl_config_file == "":
      _snake_case							:		List[Any]								=  TransfoXLConfig()
    else:
      _snake_case							:		int								=  TransfoXLConfig.from_json_file(snake_case__    )
    print(F"Building PyTorch model from configuration: {config}"    )
    _snake_case							:		Tuple								=  TransfoXLLMHeadModel(snake_case__    )

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


if __name__ == "__main__":
     A_						=				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.''',
     )
     A_						=				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,
     )








"""simple docstring"""


from math import factorial

A_						=				{str(d): factorial(d) for d in range(10)}


def 					UpperCAmelCase__       (snake_case__							:					int    ):
  """simple docstring"""

  return sum(DIGIT_FACTORIAL[d] for d in str(snake_case__    )    )


def 					UpperCAmelCase__       ():
  """simple docstring"""

  _snake_case							:		List[str]								=  7 * factorial(9    ) + 1
  return sum(i for i in range(3		,   snake_case__    ) if sum_of_digit_factorial(snake_case__    ) == i    )


if __name__ == "__main__":
     print(F'''{solution() = }''')


