


"""simple docstring"""







import argparse

import pytorch_lightning as pl
import torch
from torch import nn

from transformers import LongformerForQuestionAnswering, LongformerModel


class       SCREAMING_SNAKE_CASE__				(		pl.LightningModule				):
       """simple docstring"""


       def __init__(						self		,     snake_case__						):






         """simple docstring"""





         super().__init__()
         lowerCAmelCase     :     Optional[Any]								=							model
         lowerCAmelCase     :     Tuple								=							2
         lowerCAmelCase     :     Tuple								=							nn.Linear(self.model.config.hidden_size		,     self.num_labels						)







       def        lowercase__							(						self						):






         """simple docstring"""





         pass

def 					a__			(				SCREAMING_SNAKE_CASE    :    str				,      SCREAMING_SNAKE_CASE    :    str				,      SCREAMING_SNAKE_CASE    :    str				):


  '''simple docstring'''







  lowerCAmelCase     :     Optional[Any]								=							LongformerModel.from_pretrained(SCREAMING_SNAKE_CASE				)
  lowerCAmelCase     :     List[str]								=							LightningModel(SCREAMING_SNAKE_CASE				)

  lowerCAmelCase     :     List[Any]								=							torch.load(SCREAMING_SNAKE_CASE				,      map_location=torch.device("cpu"				)				)
  lightning_model.load_state_dict(ckpt["state_dict"]				)

  # init longformer question answering model
  lowerCAmelCase     :     List[Any]								=							LongformerForQuestionAnswering.from_pretrained(SCREAMING_SNAKE_CASE				)

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

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


if __name__ == "__main__":
     lowerCAmelCase__      				=   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__      				=   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'''


UpperCAmelCase_		:   Union[str, Any]							   =		'\n# Transformers installation\n! pip install transformers datasets\n# To install from source instead of the last release, comment the command above and uncomment the following one.\n# ! pip install git+https://github.com/huggingface/transformers.git\n'

UpperCAmelCase_		:   Dict							   =		[{'type': 'code', 'content': INSTALL_CONTENT}]
UpperCAmelCase_		:   Any							   =		{
    '{processor_class}': 'FakeProcessorClass',
    '{model_class}': 'FakeModelClass',
    '{object_class}': 'FakeObjectClass',
}




