


'''simple docstring'''
import argparse

import pytorch_lightning as pl
import torch
from torch import nn

from transformers import LongformerForQuestionAnswering, LongformerModel




class 			lowerCamelCase_   (	pl.LightningModule      ):






      def __init__(					self				:    int						,						_A				:    int ):


          '''simple docstring'''


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






      def lowercase_							(					self				:    Union[str, Any] ):


          '''simple docstring'''


          pass





def 					a__       (					lowerCAmelCase__  ,					lowerCAmelCase__  ,					lowerCAmelCase__						)    ->	List[str]:
    UpperCAmelCase__			:		Tuple													=				LongformerModel.from_pretrained(_UpperCamelCase						)
    UpperCAmelCase__			:		List[str]													=				LightningModel(_UpperCamelCase						)

    UpperCAmelCase__			:		List[Any]													=				torch.load(_UpperCamelCase  ,					map_location=torch.device('''cpu'''						)						)
    lightning_model.load_state_dict(ckpt['''state_dict''']						)

    # init longformer question answering model
    UpperCAmelCase__			:		Tuple													=				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__":
  UpperCamelCase__    					=      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.'''
  )
  UpperCamelCase__    					=      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"""


def _lowerCamelCase	(		_UpperCamelCase = 6008_5147_5143      ):

			'''simple docstring'''




			try:
						__lowerCAmelCase				    =			int(_UpperCamelCase      )
			except (TypeError, ValueError):
						raise TypeError("Parameter n must be int or castable to int."      )
			if n <= 0:
						raise ValueError("Parameter n must be greater than or equal to one."      )
			__lowerCAmelCase				    =			2
			__lowerCAmelCase				    =			0
			if n == 2:
						return 2
			while n > 2:
						while n % i != 0:
									i += 1
						__lowerCAmelCase				    =			i
						while n % i == 0:
									__lowerCAmelCase				    =			n // i
						i += 1
			return int(_UpperCamelCase      )


if __name__ == "__main__":
	print(f'''{solution() = }''')




