U
    4Af                     @   sN   d dl mZmZ ddlmZ ddlmZ edddZd	ZG d
d deZ	dS )    )ArgumentParser	Namespace   )logging   )BaseTransformersCLICommandargsc                 C   s   t | j| j| j| j| jS )zx
    Factory function used to convert a model TF 1.0 checkpoint in a PyTorch checkpoint.

    Returns: ServeCommand
    )ConvertCommand
model_typetf_checkpointpytorch_dump_outputconfigfinetuning_task_namer    r   A/tmp/pip-unpacked-wheel-zw5xktn0/transformers/commands/convert.pyconvert_command_factory   s        r   z
transformers can only be used from the commandline to convert TensorFlow models in PyTorch, In that case, it requires
TensorFlow to be installed. Please see https://www.tensorflow.org/install/ for installation instructions.
c                   @   s<   e Zd ZeedddZeeeeedddZdd Zd	S )
r
   )parserc                 C   sx   | j ddd}|jdtddd |jdtdd	d |jd
tddd |jdtddd |jdtddd |jtd dS )z
        Register this command to argparse so it's available for the transformer-cli

        Args:
            parser: Root parser to register command-specific arguments
        convertzcCLI tool to run convert model from original author checkpoints to Transformers PyTorch checkpoints.)helpz--model_typeTzModel's type.)typerequiredr   z--tf_checkpointz%TensorFlow checkpoint path or folder.z--pytorch_dump_outputz'Path to the PyTorch saved model output.z--config z"Configuration file path or folder.)r   defaultr   z--finetuning_task_nameNzEOptional fine-tuning task name if the TF model was a finetuned model.)func)
add_parseradd_argumentstrset_defaultsr   )r   Ztrain_parserr   r   r   register_subcommand'   s2          z"ConvertCommand.register_subcommand)r   r   r   r   r   c                 G   s@   t d| _| jd|  || _|| _|| _|| _|| _d S )Nztransformers-cli/convertingzLoading model )	r   Z
get_loggerZ_loggerinfo_model_type_tf_checkpoint_pytorch_dump_output_config_finetuning_task_name)selfr   r   r   r   r   r	   r   r   r   __init__C   s    	zConvertCommand.__init__c                 C   s  | j dkrNzddlm} W n tk
r6   ttY nX || j| j| j nD| j dkrzddlm} W n tk
r   ttY nX || j| j| j n| j dkrzddl	m} W n tk
r   ttY nX || j| j| j n| j dkr<zddl
m} W n tk
r$   ttY nX || j| j| j nV| j dkrjddlm} || j| j| j n(| j d	krzdd
lm} W n tk
r   ttY nX || j| j| j n| j dkrzddlm} W n tk
r   ttY nX || j| j| j| j n| j dkr6ddlm} || j| j n\| j dkr^ddlm} || j| j n4| j dkrddlm} || j| j| j ntdd S )NZalbertr   ) convert_tf_checkpoint_to_pytorchZbertZfunnelZt5Zgpt)$convert_openai_checkpoint_to_pytorchZgpt2)"convert_gpt2_checkpoint_to_pytorchZxlnet)#convert_xlnet_checkpoint_to_pytorchZxlm)!convert_xlm_checkpoint_to_pytorchZlxmert)$convert_lxmert_checkpoint_to_pytorchZrembert)(convert_rembert_tf_checkpoint_to_pytorchzU--model_type should be selected in the list [bert, gpt, gpt2, t5, xlnet, xlm, lxmert])r!   Z>models.albert.convert_albert_original_tf_checkpoint_to_pytorchr(   ImportErrorIMPORT_ERROR_MESSAGEr"   r$   r#   Z:models.bert.convert_bert_original_tf_checkpoint_to_pytorchZ>models.funnel.convert_funnel_original_tf_checkpoint_to_pytorchZ6models.t5.convert_t5_original_tf_checkpoint_to_pytorchZ>models.openai.convert_openai_original_tf_checkpoint_to_pytorchr)   Z:models.gpt2.convert_gpt2_original_tf_checkpoint_to_pytorchr*   Z<models.xlnet.convert_xlnet_original_tf_checkpoint_to_pytorchr+   r%   Z=models.xlm.convert_xlm_original_pytorch_checkpoint_to_pytorchr,   Z>models.lxmert.convert_lxmert_original_tf_checkpoint_to_pytorchr-   Z7models.rembert.convert_rembert_tf_checkpoint_to_pytorchr.   
ValueError)r&   r(   r)   r*   r+   r,   r-   r.   r   r   r   runU   sl    


   zConvertCommand.runN)	__name__
__module____qualname__staticmethodr   r   r   r'   r2   r   r   r   r   r
   &   s   r
   N)
argparser   r   utilsr   r   r   r   r0   r
   r   r   r   r   <module>   s
   