




"""simple docstring"""






import argparse

import pytorch_lightning as pl
import torch
from torch import nn

from transformers import LongformerForQuestionAnswering, LongformerModel






class lowerCAmelCase__			(  pl.LightningModule		):






			'''simple docstring'''



			def __init__(						self						,   lowercase						):
							super().__init__()
							_lowerCamelCase  :    Union[str, Any]					=					model
							_lowerCamelCase  :    Dict					=					2
							_lowerCamelCase  :    Any					=					nn.Linear(self.model.config.hidden_size						,   self.num_labels						)






			def       A_					(						self						):
							pass







def   _snake_case    (       lowercase__							,					lowercase__							,					lowercase__	):
				# load longformer model from model identifier
				_lowerCamelCase  :    Optional[Any]					=					LongformerModel.from_pretrained(lowercase__	)
				_lowerCamelCase  :    Optional[Any]					=					LightningModel(lowercase__	)

				_lowerCamelCase  :    Union[str, Any]					=					torch.load(lowercase__							,					map_location=torch.device('cpu'	)	)
				lightning_model.load_state_dict(ckpt['state_dict']	)

				# init longformer question answering model
				_lowerCamelCase  :    Union[str, Any]					=					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__":
			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
			)





"""simple docstring"""






def   _snake_case    (       lowercase__ = 1000	):
				_lowerCamelCase,				_lowerCamelCase  :    Optional[int]					=					1, 1
				_lowerCamelCase  :    int					=					[]
				for i in range(1							,					n + 1	):
								_lowerCamelCase  :    Tuple					=					prev_numerator + 2 * prev_denominator
								_lowerCamelCase  :    str					=					prev_numerator + prev_denominator
								if len(str(lowercase__	)	) > len(str(lowercase__	)	):
												result.append(lowercase__	)
								_lowerCamelCase  :    Dict					=					numerator
								_lowerCamelCase  :    Optional[int]					=					denominator

				return len(lowercase__	)


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