


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


lowerCamelCase						=		{
    '''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 					lowerCamelCase_   (	_a     ,       _a     ,       _a     ,       _a=None	):




		"""simple docstring"""






		lowerCAmelCase__       :      List[str]   					= XLNetConfig.from_json_file(_a	)

		lowerCAmelCase__       :      Optional[Any]   					= 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}'	)
				lowerCAmelCase__       :      int   					= finetuning_task
				lowerCAmelCase__       :      Tuple   					= GLUE_TASKS_NUM_LABELS[finetuning_task]
				lowerCAmelCase__       :      str   					= XLNetForSequenceClassification(_a	)
		elif "squad" in finetuning_task:
				lowerCAmelCase__       :      Any   					= finetuning_task
				lowerCAmelCase__       :      Tuple   					= XLNetForQuestionAnswering(_a	)
		else:
				lowerCAmelCase__       :      List[Any]   					= XLNetLMHeadModel(_a	)

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

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


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








from __future__ import annotations






def 					lowerCamelCase_   (	_a     ,       _a     ,       _a     ,       _a	):  # noqa: E741




		"""simple docstring"""






		while r - l > 1:
				lowerCAmelCase__       :      Any   					= (l + r) // 2
				if v[m] >= key:
						lowerCAmelCase__       :      int   					= m
				else:
						lowerCAmelCase__       :      Tuple   					= m  # noqa: E741
		return r






def 					lowerCamelCase_   (	_a	):




		"""simple docstring"""






		if len(_a	) == 0:
				return 0

		lowerCAmelCase__       :      Optional[int]   					= [0] * len(_a	)
		lowerCAmelCase__       :      List[Any]   					= 1

		lowerCAmelCase__       :      int   					= v[0]

		for i in range(1     ,       len(_a	)	):
				if v[i] < tail[0]:
						lowerCAmelCase__       :      str   					= v[i]
				elif v[i] > tail[length - 1]:
						lowerCAmelCase__       :      Any   					= v[i]
						length += 1
				else:
						lowerCAmelCase__       :      int   					= v[i]

		return length


if __name__ == "__main__":
		import doctest

		doctest.testmod()




