


import argparse

import torch
from torch import nn

from transformers import SpeechaTextConfig, SpeechaTextForConditionalGeneration






def 	__lowerCAmelCase   (SCREAMING_SNAKE_CASE )->  Any:




      """simple docstring"""

      snake_case_	=				[
          '''encoder.version''',
          '''decoder.version''',
          '''model.encoder.version''',
          '''model.decoder.version''',
          '''decoder.output_projection.weight''',
          '''_float_tensor''',
          '''encoder.embed_positions._float_tensor''',
          '''decoder.embed_positions._float_tensor''',
      ]
      for k in ignore_keys:
            state_dict.pop(SCREAMING_SNAKE_CASE , SCREAMING_SNAKE_CASE )






def 	__lowerCAmelCase   (SCREAMING_SNAKE_CASE )->  Dict:




      """simple docstring"""

      snake_case_	=				list(s_dict.keys() )
      for key in keys:
            if "transformer_layers" in key:
                  snake_case_	=				s_dict.pop(SCREAMING_SNAKE_CASE )
            elif "subsample" in key:
                  snake_case_	=				s_dict.pop(SCREAMING_SNAKE_CASE )






def 	__lowerCAmelCase   (SCREAMING_SNAKE_CASE )->  Optional[int]:




      """simple docstring"""

      snake_case_	,   snake_case_	=				emb.weight.shape
      snake_case_	=				nn.Linear(SCREAMING_SNAKE_CASE , SCREAMING_SNAKE_CASE , bias=SCREAMING_SNAKE_CASE )
      snake_case_	=				emb.weight.data
      return lin_layer






def 	__lowerCAmelCase   (SCREAMING_SNAKE_CASE , SCREAMING_SNAKE_CASE )->  Optional[int]:




      """simple docstring"""

      snake_case_	=				torch.load(SCREAMING_SNAKE_CASE , map_location='''cpu''' )
      snake_case_	=				mam_aaa['''args''']
      snake_case_	=				mam_aaa['''model''']
      snake_case_	=				state_dict['''decoder.output_projection.weight''']

      remove_ignore_keys_(SCREAMING_SNAKE_CASE )
      rename_keys(SCREAMING_SNAKE_CASE )

      snake_case_	=				state_dict['''decoder.embed_tokens.weight'''].shape[0]

      snake_case_	=				args.share_decoder_input_output_embed

      snake_case_	=				[int(SCREAMING_SNAKE_CASE ) for i in args.conv_kernel_sizes.split(''',''' )]
      snake_case_	=				SpeechaTextConfig(
          vocab_size=SCREAMING_SNAKE_CASE , max_source_positions=args.max_source_positions , max_target_positions=args.max_target_positions , encoder_layers=args.encoder_layers , decoder_layers=args.decoder_layers , encoder_attention_heads=args.encoder_attention_heads , decoder_attention_heads=args.decoder_attention_heads , encoder_ffn_dim=args.encoder_ffn_embed_dim , decoder_ffn_dim=args.decoder_ffn_embed_dim , d_model=args.encoder_embed_dim , dropout=args.dropout , attention_dropout=args.attention_dropout , activation_dropout=args.activation_dropout , activation_function='''relu''' , num_conv_layers=len(SCREAMING_SNAKE_CASE ) , conv_channels=args.conv_channels , conv_kernel_sizes=SCREAMING_SNAKE_CASE , input_feat_per_channel=args.input_feat_per_channel , input_channels=args.input_channels , tie_word_embeddings=SCREAMING_SNAKE_CASE , num_beams=5 , max_length=200 , use_cache=SCREAMING_SNAKE_CASE , decoder_start_token_id=2 , early_stopping=SCREAMING_SNAKE_CASE , )

      snake_case_	=				SpeechaTextForConditionalGeneration(SCREAMING_SNAKE_CASE )
      snake_case_	,   snake_case_	=				model.model.load_state_dict(SCREAMING_SNAKE_CASE , strict=SCREAMING_SNAKE_CASE )
      if len(SCREAMING_SNAKE_CASE ) > 0 and not set(SCREAMING_SNAKE_CASE ) <= {
          "encoder.embed_positions.weights",
          "decoder.embed_positions.weights",
      }:
            raise ValueError(
                '''Only `encoder.embed_positions.weights` and `decoder.embed_positions.weights`  are allowed to be missing,'''
                f''' but all the following weights are missing {missing}''' )

      if tie_embeds:
            snake_case_	=				make_linear_from_emb(model.model.decoder.embed_tokens )
      else:
            snake_case_	=				lm_head_weights

      model.save_pretrained(SCREAMING_SNAKE_CASE )


if __name__ == "__main__":
   UpperCAmelCase      =   argparse.ArgumentParser()
   # Required parameters
   parser.add_argument("""--fairseq_path""", type=str, help="""Path to the fairseq model (.pt) file.""")
   parser.add_argument("""--pytorch_dump_folder_path""", default=None, type=str, help="""Path to the output PyTorch model.""")
   UpperCAmelCase      =   parser.parse_args()
   convert_fairseq_sat_checkpoint_to_tfms(args.fairseq_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


UpperCAmelCase      =   logging.get_logger(__name__)

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







class lowerCAmelCase_						(			lowerCamelCase__ ,						lowerCamelCase__	):

 '''simple docstring'''

 __snake_case												=  "convnextv2"



 def __init__(     self		,				_UpperCAmelCase=3		,				_UpperCAmelCase=4		,				_UpperCAmelCase=4		,				_UpperCAmelCase=None		,				_UpperCAmelCase=None		,				_UpperCAmelCase="gelu"		,				_UpperCAmelCase=0.02		,				_UpperCAmelCase=1E-12		,				_UpperCAmelCase=0.0		,				_UpperCAmelCase=2_24		,				_UpperCAmelCase=None		,				_UpperCAmelCase=None		,				**_UpperCAmelCase		,				):
       super().__init__(**_UpperCAmelCase )

       snake_case_	=				num_channels
       snake_case_	=				patch_size
       snake_case_	=				num_stages
       snake_case_	=				[96, 1_92, 3_84, 7_68] if hidden_sizes is None else hidden_sizes
       snake_case_	=				[3, 3, 9, 3] if depths is None else depths
       snake_case_	=				hidden_act
       snake_case_	=				initializer_range
       snake_case_	=				layer_norm_eps
       snake_case_	=				drop_path_rate
       snake_case_	=				image_size
       snake_case_	=				['''stem'''] + [F'''stage{idx}''' for idx in range(1		,				len(self.depths ) + 1 )]
       snake_case_	,   snake_case_	=				get_aligned_output_features_output_indices(
           out_features=_UpperCAmelCase		,				out_indices=_UpperCAmelCase		,				stage_names=self.stage_names )