






"""simple docstring"""


import argparse

import torch
from torch import nn

from transformers import SpeechaTextConfig, SpeechaTextForConditionalGeneration


def        UpperCAmelCase      (					a__ ):





						'''simple docstring'''






						lowerCAmelCase   :str						=			[
						    '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(a__     ,      a__ )


def        UpperCAmelCase      (					a__ ):





						'''simple docstring'''






						lowerCAmelCase   :List[Any]						=			list(s_dict.keys() )
						for key in keys:
												if "transformer_layers" in key:
																		lowerCAmelCase   :Dict						=			s_dict.pop(a__ )
												elif "subsample" in key:
																		lowerCAmelCase   :Any						=			s_dict.pop(a__ )


def        UpperCAmelCase      (					a__ ):





						'''simple docstring'''






						lowerCAmelCase	, lowerCAmelCase   :Optional[int]						=			emb.weight.shape
						lowerCAmelCase   :Optional[int]						=			nn.Linear(a__     ,      a__     ,      bias=a__ )
						lowerCAmelCase   :Dict						=			emb.weight.data
						return lin_layer


def        UpperCAmelCase      (					a__     ,      a__ ):





						'''simple docstring'''






						lowerCAmelCase   :List[Any]						=			torch.load(a__     ,      map_location='cpu' )
						lowerCAmelCase   :Dict						=			mam_aaa['args']
						lowerCAmelCase   :List[str]						=			mam_aaa['model']
						lowerCAmelCase   :Optional[Any]						=			state_dict['decoder.output_projection.weight']

						remove_ignore_keys_(a__ )
						rename_keys(a__ )

						lowerCAmelCase   :Union[str, Any]						=			state_dict['decoder.embed_tokens.weight'].shape[0]

						lowerCAmelCase   :List[Any]						=			args.share_decoder_input_output_embed

						lowerCAmelCase   :Dict						=			[int(a__ ) for i in args.conv_kernel_sizes.split(',' )]
						lowerCAmelCase   :Optional[int]						=			SpeechaTextConfig(
						    vocab_size=a__     ,      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(a__ )     ,      conv_channels=args.conv_channels     ,      conv_kernel_sizes=a__     ,      input_feat_per_channel=args.input_feat_per_channel     ,      input_channels=args.input_channels     ,      tie_word_embeddings=a__     ,      num_beams=5     ,      max_length=2_00     ,      use_cache=a__     ,      decoder_start_token_id=2     ,      early_stopping=a__     ,      )

						lowerCAmelCase   :Tuple						=			SpeechaTextForConditionalGeneration(a__ )
						lowerCAmelCase	, lowerCAmelCase   :Tuple						=			model.model.load_state_dict(a__     ,      strict=a__ )
						if len(a__ ) > 0 and not set(a__ ) <= {
						    "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:
												lowerCAmelCase   :Dict						=			make_linear_from_emb(model.model.decoder.embed_tokens )
						else:
												lowerCAmelCase   :Tuple						=			lm_head_weights

						model.save_pretrained(a__ )


if __name__ == "__main__":
		__SCREAMING_SNAKE_CASE   =   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.')
		__SCREAMING_SNAKE_CASE   =   parser.parse_args()
		convert_fairseq_sat_checkpoint_to_tfms(args.fairseq_path, args.pytorch_dump_folder_path)







"""simple docstring"""


from abc import ABC, abstractmethod
from argparse import ArgumentParser




class 						__UpperCamelCase     (     UpperCamelCase						):
					@staticmethod
					@abstractmethod
					def        UpperCAmelCase__ (							UpperCAmelCase							:	ArgumentParser   )	->       Optional[Any]:
											raise NotImplementedError()
					@abstractmethod
					def        UpperCAmelCase__ (							self							:	str   )	->       List[str]:
											raise NotImplementedError()