





'''simple docstring'''



import argparse

import pytorch_lightning as pl
import torch
from torch import nn

from transformers import LongformerForQuestionAnswering, LongformerModel






class 							__lowercase       (      pl.LightningModule						):







	'''simple docstring'''

	def __init__(self     ,_lowerCamelCase )							->							List[Any]:







				'''simple docstring'''





				super().__init__()
				__lowercase										=							model
				__lowercase										=							2
				__lowercase										=							nn.Linear(self.model.config.hidden_size     ,self.num_labels )


	def 						_UpperCAmelCase     (self )							->							Union[str, Any]:







				'''simple docstring'''





				pass





def    _lowerCAmelCase						(				lowerCamelCase_			:  str		,       lowerCamelCase_			:  str		,       lowerCamelCase_			:  str				):
			# load longformer model from model identifier
			__lowercase										=							LongformerModel.from_pretrained(lowerCamelCase_				)
			__lowercase										=							LightningModel(lowerCamelCase_				)

			__lowercase										=							torch.load(lowerCamelCase_		,       map_location=torch.device('''cpu'''				)				)
			lightning_model.load_state_dict(ckpt['''state_dict''']				)

			# init longformer question answering model
			__lowercase										=							LongformerForQuestionAnswering.from_pretrained(lowerCamelCase_				)

			# transfer weights
			longformer_for_qa.longformer.load_state_dict(lightning_model.model.state_dict()				)
			longformer_for_qa.qa_outputs.load_state_dict(lightning_model.qa_outputs.state_dict()				)
			longformer_for_qa.eval()

			# save model
			longformer_for_qa.save_pretrained(lowerCamelCase_				)

			print(f"Conversion successful. Model saved under {pytorch_dump_folder_path}"				)


if __name__ == "__main__":
	_SCREAMING_SNAKE_CASE					=    argparse.ArgumentParser()
	# Required parameters
	parser.add_argument(
	    '''--longformer_model''',
	    default=None,
	    type=str,
	    required=True,
	    help='''model identifier of longformer. Should be either `longformer-base-4096` or `longformer-large-4096`.''',
	)
	parser.add_argument(
	    '''--longformer_question_answering_ckpt_path''',
	    default=None,
	    type=str,
	    required=True,
	    help='''Path the official PyTorch Lightning Checkpoint.''',
	)
	parser.add_argument(
	    '''--pytorch_dump_folder_path''', default=None, type=str, required=True, help='''Path to the output PyTorch model.'''
	)
	_SCREAMING_SNAKE_CASE					=    parser.parse_args()
	convert_longformer_qa_checkpoint_to_pytorch(
	    args.longformer_model, args.longformer_question_answering_ckpt_path, args.pytorch_dump_folder_path
	)












'''simple docstring'''



import math




def    _lowerCAmelCase						(				lowerCamelCase_			:  int				):
			assert isinstance(lowerCamelCase_		,       lowerCamelCase_				) and (
			    number >= 0
			), "'number' must been an int and positive"

			if 1 < number < 4:
						# 2 and 3 are primes
						return True
			elif number < 2 or not number % 2:
						# Negatives, 0, 1 and all even numbers are not primes
						return False

			__lowercase										=							range(3		,       int(math.sqrt(lowerCamelCase_				) + 1				)		,       2				)
			return not any(not number % i for i in odd_numbers				)




def    _lowerCAmelCase						(				lowerCamelCase_			:  Dict		,       lowerCamelCase_			:  Any=1		,       **lowerCamelCase_			:  Tuple				):
			__lowercase										=							factor * value
			__lowercase										=							value

			while not is_prime(lowerCamelCase_				):
						value += 1 if not ("desc" in kwargs and kwargs["desc"] is True) else -1

			if value == first_value_val:
						return next_prime(value + 1		,       **lowerCamelCase_				)
			return value





