


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





def lowerCamelCase__      (						__lowerCamelCase	:							str	,   __lowerCamelCase	:							Optional[Any]	,   __lowerCamelCase	:							Optional[Any]	,   __lowerCamelCase	:							Optional[Any]							):







   '''simple docstring'''




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

      _UpperCAmelCase       :       List[str]							   =corpus.__dict__
      corpus_dict_no_vocab.pop('vocab'	,   _UpperCamelCase							)
      _UpperCAmelCase       :       str							   =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
      _UpperCAmelCase       :       Any							   =os.path.abspath(_UpperCamelCase							)
      _UpperCAmelCase       :       str							   =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 == "":
         _UpperCAmelCase       :       Optional[Any]							   =TransfoXLConfig()
      else:
         _UpperCAmelCase       :       str							   =TransfoXLConfig.from_json_file(_UpperCamelCase							)
      print(f"Building PyTorch model from configuration: {config}"							)
      _UpperCAmelCase       :       Tuple							   =TransfoXLLMHeadModel(_UpperCamelCase							)

      _UpperCAmelCase       :       List[Any]							   =load_tf_weights_in_transfo_xl(_UpperCamelCase	,   _UpperCamelCase	,   _UpperCamelCase							)
      # Save pytorch-model
      _UpperCAmelCase       :       Optional[int]							   =os.path.join(_UpperCamelCase	,   _UpperCamelCase							)
      _UpperCAmelCase       :       Tuple							   =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__":
 lowercase							=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.',
 )
 lowercase							=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 __future__ import annotations

import bisect





def lowerCamelCase__      (						__lowerCamelCase	:							list[int]	,   __lowerCamelCase	:							int	,   __lowerCamelCase	:							int = 0	,   __lowerCamelCase	:							int = -1							):







   '''simple docstring'''




   if hi < 0:
      _UpperCAmelCase       :       int							   =len(__lowerCamelCase							)

   while lo < hi:
      _UpperCAmelCase       :       Dict							   =lo + (hi - lo) // 2
      if sorted_collection[mid] < item:
         _UpperCAmelCase       :       int							   =mid + 1
      else:
         _UpperCAmelCase       :       Union[str, Any]							   =mid

   return lo





def lowerCamelCase__      (						__lowerCamelCase	:							list[int]	,   __lowerCamelCase	:							int	,   __lowerCamelCase	:							int = 0	,   __lowerCamelCase	:							int = -1							):







   '''simple docstring'''




   if hi < 0:
      _UpperCAmelCase       :       str							   =len(__lowerCamelCase							)

   while lo < hi:
      _UpperCAmelCase       :       List[Any]							   =lo + (hi - lo) // 2
      if sorted_collection[mid] <= item:
         _UpperCAmelCase       :       Dict							   =mid + 1
      else:
         _UpperCAmelCase       :       Tuple							   =mid

   return lo





def lowerCamelCase__      (						__lowerCamelCase	:							list[int]	,   __lowerCamelCase	:							int	,   __lowerCamelCase	:							int = 0	,   __lowerCamelCase	:							int = -1							):







   '''simple docstring'''




   sorted_collection.insert(bisect_left(__lowerCamelCase	,   __lowerCamelCase	,   __lowerCamelCase	,   __lowerCamelCase							)	,   __lowerCamelCase							)





def lowerCamelCase__      (						__lowerCamelCase	:							list[int]	,   __lowerCamelCase	:							int	,   __lowerCamelCase	:							int = 0	,   __lowerCamelCase	:							int = -1							):







   '''simple docstring'''




   sorted_collection.insert(bisect_right(__lowerCamelCase	,   __lowerCamelCase	,   __lowerCamelCase	,   __lowerCamelCase							)	,   __lowerCamelCase							)





def lowerCamelCase__      (						__lowerCamelCase	:							list[int]	,   __lowerCamelCase	:							int							):







   '''simple docstring'''




   _UpperCAmelCase       :       Optional[int]							   =0
   _UpperCAmelCase       :       Any							   =len(__lowerCamelCase							) - 1

   while left <= right:
      _UpperCAmelCase       :       int							   =left + (right - left) // 2
      _UpperCAmelCase       :       Union[str, Any]							   =sorted_collection[midpoint]
      if current_item == item:
         return midpoint
      elif item < current_item:
         _UpperCAmelCase       :       Optional[Any]							   =midpoint - 1
      else:
         _UpperCAmelCase       :       int							   =midpoint + 1
   return None





def lowerCamelCase__      (						__lowerCamelCase	:							list[int]	,   __lowerCamelCase	:							int							):







   '''simple docstring'''




   _UpperCAmelCase       :       Any							   =bisect.bisect_left(__lowerCamelCase	,   __lowerCamelCase							)
   if index != len(__lowerCamelCase							) and sorted_collection[index] == item:
      return index
   return None





def lowerCamelCase__      (						__lowerCamelCase	:							list[int]	,   __lowerCamelCase	:							int	,   __lowerCamelCase	:							int	,   __lowerCamelCase	:							int							):







   '''simple docstring'''




   if right < left:
      return None

   _UpperCAmelCase       :       str							   =left + (right - left) // 2

   if sorted_collection[midpoint] == item:
      return midpoint
   elif sorted_collection[midpoint] > item:
      return binary_search_by_recursion(__lowerCamelCase	,   __lowerCamelCase	,   __lowerCamelCase	,   midpoint - 1							)
   else:
      return binary_search_by_recursion(__lowerCamelCase	,   __lowerCamelCase	,   midpoint + 1	,   __lowerCamelCase							)


if __name__ == "__main__":
 lowercase							=input('Enter numbers separated by comma:\n').strip()
 lowercase							=sorted(int(item) for item in user_input.split(','))
 lowercase							=int(input('Enter a single number to be found in the list:\n'))
 lowercase							=binary_search(collection, target)
 if result is None:
  print(F"""{target} was not found in {collection}.""")
 else:
  print(F"""{target} was found at position {result} in {collection}.""")

