U
    &cG                  $   @   s   d Z ddlZddlZddlZddlmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 e7 rddl9Z9ddl:Z;ddlm<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_ nLd\$Z<Z=Z>Z?Z@ZAZBZCZDZEZFZGZHZIZJZKZLZMZNZOZPZQZRZSZTZVZUZWZXZYZZZ[Z\Z]Z^Z_ej`ejad ee e<e?efee!e=e?efee!e=e?efee"e>e?efee)e@eAefe5e1eBeCefe3e0eDeEefe4e/eGeFefe2e.eHeIefee*eJeKefee+eLeNefee,eMeNefee#eOeQefee(eSeRefee%eTeWe	fee&eUeWe	fee$eXeYefeeeZe[efee-e\e]efee'e^e_e
fdZbd$d
dZcd%ddZdeedkref Zgegjhddeid	dd egjhddeidjekebl d egjhddeidd egjhddeidd egjhdddd egjhdddd egjhddd d egjhd!dd"d egm Znedenjodk	renjop ndenjqenjrdk	renjrgndenjsdk	renjsgndenjtenjuenjvenjwd# dS )&z+ Convert pytorch checkpoints to TensorFlow     N)4$ALBERT_PRETRAINED_CONFIG_ARCHIVE_MAP"BERT_PRETRAINED_CONFIG_ARCHIVE_MAP'CAMEMBERT_PRETRAINED_CONFIG_ARCHIVE_MAP"CTRL_PRETRAINED_CONFIG_ARCHIVE_MAP(DISTILBERT_PRETRAINED_CONFIG_ARCHIVE_MAP%ELECTRA_PRETRAINED_CONFIG_ARCHIVE_MAP&FLAUBERT_PRETRAINED_CONFIG_ARCHIVE_MAP"GPT2_PRETRAINED_CONFIG_ARCHIVE_MAP(OPENAI_GPT_PRETRAINED_CONFIG_ARCHIVE_MAP%ROBERTA_PRETRAINED_CONFIG_ARCHIVE_MAP T5_PRETRAINED_CONFIG_ARCHIVE_MAP(TRANSFO_XL_PRETRAINED_CONFIG_ARCHIVE_MAP!XLM_PRETRAINED_CONFIG_ARCHIVE_MAP)XLM_ROBERTA_PRETRAINED_CONFIG_ARCHIVE_MAP#XLNET_PRETRAINED_CONFIG_ARCHIVE_MAPAlbertConfig
BertConfigCamembertConfig
CTRLConfigDistilBertConfigElectraConfigFlaubertConfig
GPT2ConfigOpenAIGPTConfigRobertaConfigT5ConfigTFAlbertForPreTrainingTFBertForPreTrainingTFBertForQuestionAnsweringTFBertForSequenceClassificationTFCamembertForMaskedLMTFCTRLLMHeadModelTFDistilBertForMaskedLM TFDistilBertForQuestionAnsweringTFElectraForPreTrainingTFFlaubertWithLMHeadModelTFGPT2LMHeadModelTFOpenAIGPTLMHeadModelTFRobertaForMaskedLM"TFRobertaForSequenceClassificationTFT5ForConditionalGenerationTFTransfoXLLMHeadModelTFXLMRobertaForMaskedLMTFXLMWithLMHeadModelTFXLNetLMHeadModelTransfoXLConfig	XLMConfigXLMRobertaConfigXLNetConfigcached_pathis_torch_available$load_pytorch_checkpoint_in_tf2_model)$BertForPreTrainingBertForQuestionAnsweringBertForSequenceClassification!BERT_PRETRAINED_MODEL_ARCHIVE_MAPGPT2LMHeadModel!GPT2_PRETRAINED_MODEL_ARCHIVE_MAPXLNetLMHeadModel"XLNET_PRETRAINED_MODEL_ARCHIVE_MAPXLMWithLMHeadModel XLM_PRETRAINED_MODEL_ARCHIVE_MAP(XLM_ROBERTA_PRETRAINED_MODEL_ARCHIVE_MAPXLMRobertaForMaskedLMTransfoXLLMHeadModel'TRANSFO_XL_PRETRAINED_MODEL_ARCHIVE_MAPOpenAIGPTLMHeadModel'OPENAI_GPT_PRETRAINED_MODEL_ARCHIVE_MAPRobertaForMaskedLM RobertaForSequenceClassification$ROBERTA_PRETRAINED_MODEL_ARCHIVE_MAPCamembertForMaskedLM"CamembertForSequenceClassification&CAMEMBERT_PRETRAINED_MODEL_ARCHIVE_MAP%FLAUBERT_PRETRAINED_MODEL_ARCHIVE_MAPFlaubertWithLMHeadModelDistilBertForMaskedLMDistilBertForQuestionAnswering#DistilBertForSequenceClassification'DISTILBERT_PRETRAINED_MODEL_ARCHIVE_MAPCTRLLMHeadModel!CTRL_PRETRAINED_MODEL_ARCHIVE_MAPAlbertForPreTraining#ALBERT_PRETRAINED_MODEL_ARCHIVE_MAPT5ForConditionalGenerationT5_PRETRAINED_MODEL_ARCHIVE_MAPElectraForPreTraining$ELECTRA_PRETRAINED_MODEL_ARCHIVE_MAP)$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN)level)Zbertz5bert-large-uncased-whole-word-masking-finetuned-squadz3bert-large-cased-whole-word-masking-finetuned-squadzbert-base-cased-finetuned-mrpcZgpt2ZxlnetZxlmzxlm-robertaz
transfo-xlz
openai-gptZrobertazroberta-large-mnliZ	camembertZflaubertZ
distilbertzdistilbert-base-distilled-squadZctrlZalbertZt5ZelectraFTc              	   C   sb  | t krtdtt  t |  \}}}}	}
||
krJt|
| | d}||}d|_d|_t	dt
| ||}||	krt|	| | d}t||}|rB||jdd}tj|dd}|jd ||d	}t  |f |j}W 5 Q R X |d
  }|d
  }tt|| }t	d| |dksBtd|t	d| |j|dd d S )Nz-Unrecognized model type, should be one of {}.Zforce_downloadTz0Building TensorFlow model from configuration: {}F)Ztrainingcpu)Zmap_location)Zpretrained_model_name_or_pathconfig
state_dictr   z1Max absolute difference between models outputs {}g{Gz?z-Error, model absolute difference is >2e-2: {}zSave TensorFlow model to {}h5)Zsave_format)MODEL_CLASSES
ValueErrorformatlistkeysr3   Zfrom_json_fileZoutput_hidden_statesZoutput_attentionsprintstrr5   Zdummy_inputstorchloadZfrom_pretrainedZno_gradnumpynpZamaxabsAssertionErrorZsave_weights)
model_typepytorch_checkpoint_pathconfig_filetf_dump_pathcompare_with_pt_modeluse_cached_modelsconfig_classmodel_classpt_model_classaws_model_mapsaws_config_mapr]   Ztf_modelZtfor^   Zpt_modelZptoZnp_ptZnp_tfZdiff rx   R/tmp/pip-unpacked-wheel-ymerj3tt/transformers/convert_pytorch_checkpoint_to_tf2.pyconvert_pt_checkpoint_to_tfW  sB    
 
  
rz   c                 C   s  t jtjstd| d kr,tt }n| g}t	|ddD ]\}	}
t
d t
d|	t||
 t
d |
tkrtd|
tt t|
 \}}}}}|d krt| }|d kr|}t	t||ddD ]&\}\}}t
d d|ksd	|ksd
|kr"|st
d| q|}
n|r8t
d| qt
d|t|||
 t
d ||krvt|| | d}nt|| d}||krt|| | d}nt|| d}t j|rd}t|
||t j||d |d |rt | t | qq>d S )Nz$--tf_dump_path should be a directory   )startzd====================================================================================================z  Converting model type {}/{}: {}z0Unrecognized model type {}, should be one of {}.zd----------------------------------------------------------------------------------------------------z-squadz-mrpcz-mnliz$    Skipping finetuned checkpoint {}z(    Skipping not finetuned checkpoint {}z3    Converting checkpoint {}/{}: {} - model_type {}r[   Zconverted_modelz-tf_model.h5)rm   rn   ro   rp   rq   )ospathisdirargsrp   rl   rc   r`   rd   	enumeratere   rb   lenra   zipr3   isfilerz   joinremove)Zargs_model_typerp   model_shortcut_names_or_pathconfig_shortcut_names_or_pathrq   rr   remove_cached_filesonly_convert_finetuned_modelsZmodel_typesjrm   rs   rt   ru   rv   rw   iZmodel_shortcut_nameZconfig_shortcut_namero   Z
model_filerx   rx   ry    convert_all_pt_checkpoints_to_tf  sr    
    


r   __main__z--tf_dump_pathz(Path to the output Tensorflow dump file.)defaulttyperequiredhelpz--model_typezgModel type selected in the list of {}. If not given, will download and convert all the models from AWS.)r   r   r   z--pytorch_checkpoint_pathzPath to the PyTorch checkpoint path or shortcut name to download from AWS. If not given, will download and convert all the checkpoints from AWS.z--config_filezThe config json file corresponding to the pre-trained model. 
This specifies the model architecture. If not given and --pytorch_checkpoint_path is not given or is a shortcut nameuse the configuration associated to the shortcut name on the AWSz--compare_with_pt_model
store_truez1Compare Tensorflow and PyTorch model predictions.)actionr   z--use_cached_modelszPUse cached models if possible instead of updating to latest checkpoint versions.z--remove_cached_fileszPRemove pytorch models after conversion (save memory when converting in batches).z--only_convert_finetuned_modelszOnly convert finetuned models.)r   r   rq   rr   r   r   )FT)NNFFFF)x__doc__argparseloggingr}   Ztransformersr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   rg   ri   rj   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   basicConfigINFOr`   rz   r   __name__ArgumentParserparseradd_argumentrf   rb   rc   rd   
parse_argsr   rm   lowerrp   rn   ro   rq   rr   r   r   rx   rx   rx   ry   <module>   s  8L)     
2      
M
    
	  
