


import argparse
import os

import torch

from transformers import (
    XLNetConfig,
    XLNetForQuestionAnswering,
    XLNetForSequenceClassification,
    XLNetLMHeadModel,
    load_tf_weights_in_xlnet,
)
from transformers.utils import CONFIG_NAME, WEIGHTS_NAME, logging


_A		       =						{
    'cola': 2,
    'mnli': 3,
    'mrpc': 2,
    'sst-2': 2,
    'sts-b': 1,
    'qqp': 2,
    'qnli': 2,
    'rte': 2,
    'wnli': 2,
}


logging.set_verbosity_info()

def 						_UpperCAmelCase				(			SCREAMING_SNAKE_CASE__			:					Tuple			,     SCREAMING_SNAKE_CASE__			:					Dict			,     SCREAMING_SNAKE_CASE__			:					List[Any]			,     SCREAMING_SNAKE_CASE__			:					Optional[Any]=None				):
     # Initialise PyTorch model
     __UpperCamelCase    							=XLNetConfig.from_json_file(lowercase__				)

     __UpperCamelCase    							=finetuning_task.lower() if finetuning_task is not None else ''
     if finetuning_task in GLUE_TASKS_NUM_LABELS:
          print(F'Building PyTorch XLNetForSequenceClassification model from configuration: {config}'				)
          __UpperCamelCase    							=finetuning_task
          __UpperCamelCase    							=GLUE_TASKS_NUM_LABELS[finetuning_task]
          __UpperCamelCase    							=XLNetForSequenceClassification(lowercase__				)
     elif "squad" in finetuning_task:
          __UpperCamelCase    							=finetuning_task
          __UpperCamelCase    							=XLNetForQuestionAnswering(lowercase__				)
     else:
          __UpperCamelCase    							=XLNetLMHeadModel(lowercase__				)

     # Load weights from tf checkpoint
     load_tf_weights_in_xlnet(lowercase__			,     lowercase__			,     lowercase__				)

     # Save pytorch-model
     __UpperCamelCase    							=os.path.join(lowercase__			,     lowercase__				)
     __UpperCamelCase    							=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__":
   _A		       =						argparse.ArgumentParser()
   # Required parameters
   parser.add_argument(
       '--tf_checkpoint_path', default=None, type=str, required=True, help='Path to the TensorFlow checkpoint path.'
   )
   parser.add_argument(
       '--xlnet_config_file',
       default=None,
       type=str,
       required=True,
       help=(
           'The config json file corresponding to the pre-trained XLNet model. \n'
           'This specifies the model architecture.'
       ),
   )
   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(
       '--finetuning_task',
       default=None,
       type=str,
       help='Name of a task on which the XLNet TensorFlow model was fine-tuned',
   )
   _A		       =						parser.parse_args()
   print(args)

   convert_xlnet_checkpoint_to_pytorch(
       args.tf_checkpoint_path, args.xlnet_config_file, args.pytorch_dump_folder_path, args.finetuning_task
   )











"""simple docstring"""






lowercase__     						=						{
    """meter""": """m""",
    """kilometer""": """km""",
    """megametre""": """Mm""",
    """gigametre""": """Gm""",
    """terametre""": """Tm""",
    """petametre""": """Pm""",
    """exametre""": """Em""",
    """zettametre""": """Zm""",
    """yottametre""": """Ym""",
}
# Exponent of the factor(meter)
lowercase__     						=						{
    """m""": 0,
    """km""": 3,
    """Mm""": 6,
    """Gm""": 9,
    """Tm""": 12,
    """Pm""": 15,
    """Em""": 18,
    """Zm""": 21,
    """Ym""": 24,
}







def      _snake_case			(				lowercase__							,    lowercase__							,    lowercase__		):
				_lowerCamelCase     :			List[Any]    =    from_type.lower().strip('s'		)
				_lowerCamelCase     :			List[Any]    =    to_type.lower().strip('s'		)

				_lowerCamelCase     :			Optional[int]    =    UNIT_SYMBOL.get(lowercase__							,    lowercase__		)
				_lowerCamelCase     :			Any    =    UNIT_SYMBOL.get(lowercase__							,    lowercase__		)

				if from_sanitized not in METRIC_CONVERSION:
								_lowerCamelCase     :			Tuple    =    (
								    f'''Invalid \'from_type\' value: {from_type!r}.\n'''
								    f'''Conversion abbreviations are: {', '.join(lowercase__		)}'''
								)
								raise ValueError(lowercase__		)
				if to_sanitized not in METRIC_CONVERSION:
								_lowerCamelCase     :			Any    =    (
								    f'''Invalid \'to_type\' value: {to_type!r}.\n'''
								    f'''Conversion abbreviations are: {', '.join(lowercase__		)}'''
								)
								raise ValueError(lowercase__		)
				_lowerCamelCase     :			List[Any]    =    METRIC_CONVERSION[from_sanitized]
				_lowerCamelCase     :			int    =    METRIC_CONVERSION[to_sanitized]
				_lowerCamelCase     :			List[str]    =    1

				if from_exponent > to_exponent:
								_lowerCamelCase     :			List[str]    =    from_exponent - to_exponent
				else:
								_lowerCamelCase     :			List[Any]    =    -(to_exponent - from_exponent)

				return value * pow(10							,    lowercase__		)


if __name__ == "__main__":
			from doctest import testmod

			testmod()