




import argparse

import pytorch_lightning as pl
import torch
from torch import nn

from transformers import LongformerForQuestionAnswering, LongformerModel



class       a					(       pl.LightningModule      ):

     '''simple docstring'''





     def __init__(     self       :      Tuple ,   __snake_case       :      Any    ):
         super().__init__()
         UpperCAmelCase_										=					model
         UpperCAmelCase_										=					2
         UpperCAmelCase_										=					nn.Linear(self.model.config.hidden_size ,   self.num_labels    )




     def   lowerCamelCase_       (     self       :      Optional[int]    ):
         pass




def  SCREAMING_SNAKE_CASE     (	__UpperCamelCase      :						str	,					__UpperCamelCase      :						str	,					__UpperCamelCase      :						str				)  ->							Tuple:
    # load longformer model from model identifier
    UpperCAmelCase_										=					LongformerModel.from_pretrained(lowercase_				)
    UpperCAmelCase_										=					LightningModel(lowercase_				)

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

    # init longformer question answering model
    UpperCAmelCase_										=					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      			=						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
  )











from __future__ import annotations

from fractions import Fraction




def  SCREAMING_SNAKE_CASE     (	__UpperCamelCase      :						int	,					__UpperCamelCase      :						int				)  ->							bool:
    return (
        num != den and num % 10 == den // 10 and (num // 10) / (den % 10) == num / den
    )




def  SCREAMING_SNAKE_CASE     (	__UpperCamelCase      :						int				)  ->							list[str]:
    UpperCAmelCase_										=					[]
    UpperCAmelCase_										=					11
    UpperCAmelCase_										=					int('''1''' + '''0''' * digit_len				)
    for num in range(__UpperCamelCase	,					__UpperCamelCase				):
        while den <= 99:
            if (num != den) and (num % 10 == den // 10) and (den % 10 != 0):
                if is_digit_cancelling(__UpperCamelCase	,					__UpperCamelCase				):
                    solutions.append(f'{num}/{den}'				)
            den += 1
        num += 1
        UpperCAmelCase_										=					10
    return solutions




def  SCREAMING_SNAKE_CASE     (	__UpperCamelCase      :						int = 2				)  ->							int:
    UpperCAmelCase_										=					1.0
    for fraction in fraction_list(__UpperCamelCase				):
        UpperCAmelCase_										=					Fraction(__UpperCamelCase				)
        result *= frac.denominator / frac.numerator
    return int(__UpperCamelCase				)


if __name__ == "__main__":
 print(solution())





