



import argparse

import pytorch_lightning as pl
import torch
from torch import nn

from transformers import LongformerForQuestionAnswering, LongformerModel



class     _UpperCAmelCase			(       pl.LightningModule     ):




					def __init__(				self ,						a__):
									super().__init__()
									A__		 =					model
									A__		 =					2
									A__		 =					nn.Linear(self.model.config.hidden_size ,						self.num_labels)




					def 		snake_case_		(				self):
									pass







def 		lowerCAmelCase__    (					UpperCamelCase_				:       str ,       UpperCamelCase_				:       str ,       UpperCamelCase_				:       str	)->  str:
				# load longformer model from model identifier
				A__		 =					LongformerModel.from_pretrained(UpperCamelCase_	)
				A__		 =					LightningModel(UpperCamelCase_	)

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

				# init longformer question answering model
				A__		 =					LongformerForQuestionAnswering.from_pretrained(UpperCamelCase_	)

				# 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(UpperCamelCase_	)

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


if __name__ == "__main__":
			_lowercase						  =		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."
			)
			_lowercase						  =		parser.parse_args()
			convert_longformer_qa_checkpoint_to_pytorch(
			    args.longformer_model, args.longformer_question_answering_ckpt_path, args.pytorch_dump_folder_path
			)





import numpy as np



def 		lowerCAmelCase__    (					UpperCamelCase_				:       np.array	)->  np.array:
    return 1 / (1 + np.exp(-vector	))



def 		lowerCAmelCase__    (					UpperCamelCase_				:       np.array	)->  np.array:
    return vector * sigmoid(1.702 * vector	)


if __name__ == "__main__":
   import doctest

   doctest.testmod()
