
import argparse

import pytorch_lightning as pl
import torch
from torch import nn

from transformers import LongformerForQuestionAnswering, LongformerModel



class       _snake_case   (	pl.LightningModule							):


	def __init__(					self					,  SCREAMING_SNAKE_CASE_):


			'''simple docstring'''




			super().__init__()
			lowercase__  :   str    		=      model
			lowercase__  :   Dict    		=      2
			lowercase__  :   List[Any]    		=      nn.Linear(self.model.config.hidden_size					,  self.num_labels)



	def      lowercase__     (					self):


			'''simple docstring'''




			pass

def 		UpperCamelCase	(      lowercase_ , lowercase_ , lowercase_   )		->	Tuple:


		'''simple docstring'''






		lowercase__  :   Union[str, Any]    		=      LongformerModel.from_pretrained(lowercase_   )
		lowercase__  :   str    		=      LightningModel(lowercase_   )

		lowercase__  :   Tuple    		=      torch.load(lowercase_ , map_location=torch.device("""cpu"""   )   )
		lightning_model.load_state_dict(ckpt["""state_dict"""]   )

		# init longformer question answering model
		lowercase__  :   Optional[int]    		=      LongformerForQuestionAnswering.from_pretrained(lowercase_   )

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

		print(F'Conversion successful. Model saved under {pytorch_dump_folder_path}'   )


if __name__ == "__main__":
					lowerCamelCase__    :		Optional[int]          =   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."""
					)
					lowerCamelCase__    :		Any          =   parser.parse_args()
					convert_longformer_qa_checkpoint_to_pytorch(
					    args.longformer_model, args.longformer_question_answering_ckpt_path, args.pytorch_dump_folder_path
					)








from abc import ABC, abstractmethod
from argparse import ArgumentParser



class       _snake_case   (	UpperCAmelCase_							):


 @staticmethod
 @abstractmethod
 def      lowercase__     (					SCREAMING_SNAKE_CASE_):


   '''simple docstring'''




   raise NotImplementedError()



 @abstractmethod
 def      lowercase__     (					self):


   '''simple docstring'''




   raise NotImplementedError()






