U
    &c                     @   sJ   d dl mZmZ d dlmZ d dlmZ edddZG dd deZd	S )
    )ArgumentParser	Namespace)	getLogger)BaseTransformersCLICommandargsc                 C   s   t | j| j| j| j| jS )zw
    Factory function used to convert a model TF 1.0 checkpoint in a PyTorch checkpoint.
    :return: ServeCommand
    )ConvertCommand
model_typetf_checkpointpytorch_dump_outputconfigfinetuning_task_namer    r   A/tmp/pip-unpacked-wheel-ymerj3tt/transformers/commands/convert.pyconvert_command_factory   s        r   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
        :param parser: Root parser to register command-specific arguments
        :return:
        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 savd 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_loggerinfoformat_model_type_tf_checkpoint_pytorch_dump_output_config_finetuning_task_name)selfr	   r
   r   r   r   r   r   r   r   __init__.   s    	
zConvertCommand.__init__c           
      C   s*  | j dkrRzddlm} W n  tk
r:   d}t|Y nX || j| j| j n| j dkrzddlm} W n  tk
r   d}t|Y nX || j| j| j n| j dkrddlm	} || j| j| j nV| j dkrJzdd	l
m} W n" tk
r   d}t|Y nX d
| j kr,| j}d}n
| j}d}||| j| j| n| j dkrzddlm} W n" tk
r   d}t|Y nX || j| j| j n| j dkrzddlm} W n" tk
r   d}t|Y nX || j| j| j| j n0| j dkrddlm}	 |	| j| j ntdd S )NZalbertr   ) convert_tf_checkpoint_to_pytorchztransformers 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.ZbertZgpt)$convert_openai_checkpoint_to_pytorchZ
transfo_xl)(convert_transfo_xl_checkpoint_to_pytorchZckptr   Zgpt2)"convert_gpt2_checkpoint_to_pytorchZxlnet)#convert_xlnet_checkpoint_to_pytorchZxlm)!convert_xlm_checkpoint_to_pytorchzU--model_type should be selected in the list [bert, gpt, gpt2, transfo_xl, xlnet, xlm])r    Z=transformers.convert_albert_original_tf_checkpoint_to_pytorchr'   ImportErrorr!   r#   r"   Z;transformers.convert_bert_original_tf_checkpoint_to_pytorchZ=transformers.convert_openai_original_tf_checkpoint_to_pytorchr(   ZAtransformers.convert_transfo_xl_original_tf_checkpoint_to_pytorchr)   lowerZ;transformers.convert_gpt2_original_tf_checkpoint_to_pytorchr*   Z<transformers.convert_xlnet_original_tf_checkpoint_to_pytorchr+   r$   Z?transformers.convert_xlm_original_pytorch_checkpoint_to_pytorchr,   
ValueError)
r%   r'   msgr(   r)   ZTF_CHECKPOINTZTF_DATASET_FILEr*   r+   r,   r   r   r   run@   s|    


      zConvertCommand.runN)	__name__
__module____qualname__staticmethodr   r   r   r&   r1   r   r   r   r   r      s   r   N)	argparser   r   loggingr   Ztransformers.commandsr   r   r   r   r   r   r   <module>   s   
