






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


def 				lowercase_					(     __A			:							Tuple       ,   __A			:							int       ,   __A			:							str       ,   __A			:							List[str]      )							->   Dict:



 """simple docstring"""




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

  lowercase       : Dict						=corpus.__dict__
  corpus_dict_no_vocab.pop('''vocab'''       ,   lowercase__      )
  lowercase       : int						=pytorch_dump_folder_path + '''/''' + CORPUS_NAME
  print(F'Save dataset to {pytorch_dataset_dump_path}'      )
  torch.save(lowercase__       ,   lowercase__      )

 if tf_checkpoint_path:
  # Convert a pre-trained TensorFlow model
  lowercase       : List[str]						=os.path.abspath(lowercase__      )
  lowercase       : Optional[Any]						=os.path.abspath(lowercase__      )

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

  lowercase       : Optional[int]						=load_tf_weights_in_transfo_xl(lowercase__       ,   lowercase__       ,   lowercase__      )
  # Save pytorch-model
  lowercase       : Optional[int]						=os.path.join(lowercase__       ,   lowercase__      )
  lowercase       : Optional[Any]						=os.path.join(lowercase__       ,   lowercase__      )
  print(F'Save PyTorch model to {os.path.abspath(lowercase__      )}'      )
  torch.save(model.state_dict()       ,   lowercase__      )
  print(F'Save configuration file to {os.path.abspath(lowercase__      )}'      )
  with open(lowercase__       ,   '''w'''       ,   encoding='''utf-8'''      ) as f:
   f.write(config.to_json_string()      )


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






from ..utils import DummyObject, requires_backends


class SCREAMING_SNAKE_CASE	(		metaclass=__snake_case				):






			"""simple docstring"""




			__A    	=	["""flax""", """transformers"""]


			def __init__(     self			,					*__UpperCamelCase			,					**__UpperCamelCase				):

				"""simple docstring"""


				requires_backends(self			,					['flax', 'transformers']				)


			@classmethod
			def       __lowerCAmelCase			(     cls			,					*__UpperCamelCase			,					**__UpperCamelCase				):

				"""simple docstring"""


				requires_backends(cls			,					['flax', 'transformers']				)







			@classmethod
			def       __lowerCAmelCase			(     cls			,					*__UpperCamelCase			,					**__UpperCamelCase				):

				"""simple docstring"""


				requires_backends(cls			,					['flax', 'transformers']				)







class SCREAMING_SNAKE_CASE	(		metaclass=__snake_case				):






			"""simple docstring"""




			__A    	=	["""flax""", """transformers"""]


			def __init__(     self			,					*__UpperCamelCase			,					**__UpperCamelCase				):

				"""simple docstring"""


				requires_backends(self			,					['flax', 'transformers']				)


			@classmethod
			def       __lowerCAmelCase			(     cls			,					*__UpperCamelCase			,					**__UpperCamelCase				):

				"""simple docstring"""


				requires_backends(cls			,					['flax', 'transformers']				)







			@classmethod
			def       __lowerCAmelCase			(     cls			,					*__UpperCamelCase			,					**__UpperCamelCase				):

				"""simple docstring"""


				requires_backends(cls			,					['flax', 'transformers']				)







class SCREAMING_SNAKE_CASE	(		metaclass=__snake_case				):






			"""simple docstring"""




			__A    	=	["""flax""", """transformers"""]


			def __init__(     self			,					*__UpperCamelCase			,					**__UpperCamelCase				):

				"""simple docstring"""


				requires_backends(self			,					['flax', 'transformers']				)


			@classmethod
			def       __lowerCAmelCase			(     cls			,					*__UpperCamelCase			,					**__UpperCamelCase				):

				"""simple docstring"""


				requires_backends(cls			,					['flax', 'transformers']				)







			@classmethod
			def       __lowerCAmelCase			(     cls			,					*__UpperCamelCase			,					**__UpperCamelCase				):

				"""simple docstring"""


				requires_backends(cls			,					['flax', 'transformers']				)







class SCREAMING_SNAKE_CASE	(		metaclass=__snake_case				):






			"""simple docstring"""




			__A    	=	["""flax""", """transformers"""]


			def __init__(     self			,					*__UpperCamelCase			,					**__UpperCamelCase				):

				"""simple docstring"""


				requires_backends(self			,					['flax', 'transformers']				)


			@classmethod
			def       __lowerCAmelCase			(     cls			,					*__UpperCamelCase			,					**__UpperCamelCase				):

				"""simple docstring"""


				requires_backends(cls			,					['flax', 'transformers']				)







			@classmethod
			def       __lowerCAmelCase			(     cls			,					*__UpperCamelCase			,					**__UpperCamelCase				):

				"""simple docstring"""


				requires_backends(cls			,					['flax', 'transformers']				)
