

import argparse

import pytorch_lightning as pl
import torch
from torch import nn

from transformers import LongformerForQuestionAnswering, LongformerModel






class 						__magic_name__    (       pl.LightningModule    ):


	def __init__(						self		: List[str]			,						lowerCAmelCase__		: Union[str, Any]    )    ->      Optional[int]:
			super().__init__()
			UpperCAmelCase					      =  model
			UpperCAmelCase					      =  2
			UpperCAmelCase					      =  nn.Linear(self.model.config.hidden_size			,						self.num_labels    )


	def _UpperCamelCase	(						self		: List[Any]    )    ->      Optional[Any]:
			pass

def      _lowerCAmelCase(	__A   ,       __A   ,       __A			):
		UpperCAmelCase					      =  LongformerModel.from_pretrained(_A			)
		UpperCAmelCase					      =  LightningModel(_A			)

		UpperCAmelCase					      =  torch.load(_A   ,       map_location=torch.device("cpu"			)			)
		lightning_model.load_state_dict(ckpt["state_dict"]			)

		# init longformer question answering model
		UpperCAmelCase					      =  LongformerForQuestionAnswering.from_pretrained(_A			)

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

		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 ...configuration_utils import PretrainedConfig
from ...utils import logging
from ...utils.backbone_utils import BackboneConfigMixin, get_aligned_output_features_output_indices


lowerCAmelCase__       = logging.get_logger(__name__)

lowerCAmelCase__       = {
    "facebook/convnextv2-tiny-1k-224": "https://huggingface.co/facebook/convnextv2-tiny-1k-224/resolve/main/config.json",
}






class 						__magic_name__    (       _snake_case	,						_snake_case    ):
 UpperCAmelCase							    =						"""convnextv2"""


 def __init__(						self		: Optional[Any]			,						lowerCAmelCase__		: List[Any]=3			,						lowerCAmelCase__		: str=4			,						lowerCAmelCase__		: Dict=4			,						lowerCAmelCase__		: Optional[Any]=None			,						lowerCAmelCase__		: Optional[Any]=None			,						lowerCAmelCase__		: str="gelu"			,						lowerCAmelCase__		: Optional[int]=0.02			,						lowerCAmelCase__		: Dict=1e-1_2			,						lowerCAmelCase__		: str=0.0			,						lowerCAmelCase__		: str=2_2_4			,						lowerCAmelCase__		: int=None			,						lowerCAmelCase__		: List[Any]=None			,						**lowerCAmelCase__		: List[Any]			,						)    ->      List[Any]:
   super().__init__(**lowerCAmelCase__    )

   UpperCAmelCase					      =  num_channels
   UpperCAmelCase					      =  patch_size
   UpperCAmelCase					      =  num_stages
   UpperCAmelCase					      =  [9_6, 1_9_2, 3_8_4, 7_6_8] if hidden_sizes is None else hidden_sizes
   UpperCAmelCase					      =  [3, 3, 9, 3] if depths is None else depths
   UpperCAmelCase					      =  hidden_act
   UpperCAmelCase					      =  initializer_range
   UpperCAmelCase					      =  layer_norm_eps
   UpperCAmelCase					      =  drop_path_rate
   UpperCAmelCase					      =  image_size
   UpperCAmelCase					      =  ["stem"] + [f"stage{idx}" for idx in range(1			,						len(self.depths    ) + 1    )]
   UpperCAmelCase      ,	UpperCAmelCase					      =  get_aligned_output_features_output_indices(
       out_features=lowerCAmelCase__			,						out_indices=lowerCAmelCase__			,						stage_names=self.stage_names    )



