




"""simple docstring"""







from typing import TYPE_CHECKING

from ...utils import (
    OptionalDependencyNotAvailable,
    _LazyModule,
    is_flax_available,
    is_tf_available,
    is_tokenizers_available,
    is_torch_available,
)


a     :   Any      =							{
    'configuration_whisper': ['WHISPER_PRETRAINED_CONFIG_ARCHIVE_MAP', 'WhisperConfig', 'WhisperOnnxConfig'],
    'feature_extraction_whisper': ['WhisperFeatureExtractor'],
    'processing_whisper': ['WhisperProcessor'],
    'tokenization_whisper': ['WhisperTokenizer'],
}

try:
		if not is_tokenizers_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		a     :   Any      =							['WhisperTokenizerFast']

try:
		if not is_torch_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		a     :   str      =							[
		    'WHISPER_PRETRAINED_MODEL_ARCHIVE_LIST',
		    'WhisperForConditionalGeneration',
		    'WhisperModel',
		    'WhisperPreTrainedModel',
		    'WhisperForAudioClassification',
		]

try:
		if not is_tf_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		a     :   List[str]      =							[
		    'TF_WHISPER_PRETRAINED_MODEL_ARCHIVE_LIST',
		    'TFWhisperForConditionalGeneration',
		    'TFWhisperModel',
		    'TFWhisperPreTrainedModel',
		]

try:
		if not is_flax_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		a     :   int      =							[
		    'FlaxWhisperForConditionalGeneration',
		    'FlaxWhisperModel',
		    'FlaxWhisperPreTrainedModel',
		    'FlaxWhisperForAudioClassification',
		]


if TYPE_CHECKING:
		from .configuration_whisper import WHISPER_PRETRAINED_CONFIG_ARCHIVE_MAP, WhisperConfig, WhisperOnnxConfig
		from .feature_extraction_whisper import WhisperFeatureExtractor
		from .processing_whisper import WhisperProcessor
		from .tokenization_whisper import WhisperTokenizer

		try:
				if not is_tokenizers_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .tokenization_whisper_fast import WhisperTokenizerFast

		try:
				if not is_torch_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .modeling_whisper import (
				    WHISPER_PRETRAINED_MODEL_ARCHIVE_LIST,
				    WhisperForAudioClassification,
				    WhisperForConditionalGeneration,
				    WhisperModel,
				    WhisperPreTrainedModel,
				)

		try:
				if not is_tf_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .modeling_tf_whisper import (
				    TF_WHISPER_PRETRAINED_MODEL_ARCHIVE_LIST,
				    TFWhisperForConditionalGeneration,
				    TFWhisperModel,
				    TFWhisperPreTrainedModel,
				)

		try:
				if not is_flax_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .modeling_flax_whisper import (
				    FlaxWhisperForAudioClassification,
				    FlaxWhisperForConditionalGeneration,
				    FlaxWhisperModel,
				    FlaxWhisperPreTrainedModel,
				)

else:
		import sys

		a     :   int      =							_LazyModule(__name__, globals()['__file__'], _import_structure, module_spec=__spec__)











"""simple docstring"""







import argparse
from argparse import Namespace

import torch
from torch import nn

from transformers import XGLMConfig, XGLMForCausalLM





def 							lowercase					(snake_case__   : Union[str, Any] )     ->  List[str]:


				'''simple docstring'''






				lowerCAmelCase  =				[
				    """decoder.version""",
				    """decoder.output_projection.weight""",
				    """_float_tensor""",
				    """decoder.embed_positions._float_tensor""",
				]
				for k in ignore_keys:
								state_dict.pop(snake_case__      ,       snake_case__ )





def 							lowercase					(snake_case__   : List[str] )     ->  Optional[int]:


				'''simple docstring'''






				lowerCAmelCase ,						lowerCAmelCase  =				emb.weight.shape
				lowerCAmelCase  =				nn.Linear(snake_case__      ,       snake_case__      ,       bias=snake_case__ )
				lowerCAmelCase  =				emb.weight.data
				return lin_layer





def 							lowercase					(snake_case__   : str )     ->  Optional[Any]:


				'''simple docstring'''






				lowerCAmelCase  =				torch.load(snake_case__      ,       map_location="""cpu""" )
				lowerCAmelCase  =				Namespace(**checkpoint["""cfg"""]["""model"""] )
				lowerCAmelCase  =				checkpoint["""model"""]
				remove_ignore_keys_(snake_case__ )
				lowerCAmelCase  =				state_dict["""decoder.embed_tokens.weight"""].shape[0]

				lowerCAmelCase  =				{key.replace("""decoder"""      ,       """model""" ): val for key, val in state_dict.items()}

				lowerCAmelCase  =				XGLMConfig(
				    vocab_size=snake_case__      ,       max_position_embeddings=args.max_target_positions      ,       num_layers=args.decoder_layers      ,       attention_heads=args.decoder_attention_heads      ,       ffn_dim=args.decoder_ffn_embed_dim      ,       d_model=args.decoder_embed_dim      ,       layerdrop=args.decoder_layerdrop      ,       dropout=args.dropout      ,       attention_dropout=args.attention_dropout      ,       activation_dropout=args.activation_dropout      ,       activation_function="""gelu"""      ,       scale_embedding=not args.no_scale_embedding      ,       tie_word_embeddings=args.share_decoder_input_output_embed      ,       )

				lowerCAmelCase  =				XGLMForCausalLM(snake_case__ )
				lowerCAmelCase  =				model.load_state_dict(snake_case__      ,       strict=snake_case__ )
				print(snake_case__ )
				lowerCAmelCase  =				make_linear_from_emb(model.model.embed_tokens )

				return model


if __name__ == "__main__":
		a      =							argparse.ArgumentParser()
		# Required parameters
		parser.add_argument('fairseq_path', type=str, help='path to a model.pt on local filesystem.')
		parser.add_argument('pytorch_dump_folder_path', default=None, type=str, help='Path to the output PyTorch model.')
		a      =							parser.parse_args()
		a      =							convert_fairseq_xglm_checkpoint_from_disk(args.fairseq_path)
		model.save_pretrained(args.pytorch_dump_folder_path)





