U
    5Af                     @   s   d dl Z d dlZd dlmZmZmZ e  edZdee	e	dddZ
edd	d
Zdd ZdddZdd Zedkre  dS )    N)UnivNetConfigUnivNetModelloggingztransformers.models.univnet )config
old_prefix
new_prefixc                 C   s  i }| d|| d< | d|| d< | d|| d< t | jD ]}| d| d|| d	| d
< | d| d|| d	| d< | d| d|| d	| d< | d| d|| d	| d< | d| d|| d	| d< | d| d|| d	| d< qJ| d|| d< | d|| d< | d|| d< | d|| d< | d|| d< | d|| d< |S )Nz.input_conv.weight_gz.input_conv.0.weight_gz.input_conv.weight_vz.input_conv.0.weight_vz.input_conv.biasz.input_conv.0.bias.resblocks.z.conv1.weight_gz.residual_convs..1.weight_gz.conv1.weight_v.1.weight_vz.conv1.bias.1.biasz.conv2.weight_gz.3.weight_gz.conv2.weight_vz.3.weight_vz.conv2.biasz.3.biasz.kernel_conv.weight_gz.kernel_conv.weight_vz.kernel_conv.biasz.bias_conv.weight_gz.bias_conv.weight_vz.bias_conv.bias)rangeZkernel_predictor_num_blocks)r   r   r   mappingi r   O/tmp/pip-unpacked-wheel-zw5xktn0/transformers/models/univnet/convert_univnet.py get_kernel_predictor_key_mapping   s$         "r   )r   c              	   C   s(  i }t t| jD ]}d| d|d| d< d| d|d| d< d| d|d| d< t| d| d	d| d	d
}|| t t| j| D ]p}d| d| d|d| d| d< d| d| d|d| d| d< d| d| d|d| d| d< qqd|d< d|d< d|d< |S )Nz
resblocks.z.convt_pre.weight_gz
res_stack.z.convt_pre.1.weight_gz.convt_pre.weight_vz.convt_pre.1.weight_vz.convt_pre.biasz.convt_pre.1.biasz.kernel_predictor)r   r   r	   z.conv.weight_gz.conv_blocks.r
   z.conv.weight_vr   z
.conv.biasr   zconv_post.weight_gzconv_post.1.weight_gzconv_post.weight_vzconv_post.1.weight_vzconv_post.biaszconv_post.1.bias)r   lenZresblock_stride_sizesr   updateZresblock_dilation_sizes)r   r   r   Zkernel_predictor_mappingjr   r   r   get_key_mapping8   s&     
 

$$(r   c                 C   sF   i }|   D ]4\}}||krq||kr8|| }|||< q|||< q|S )N)items)
state_dictkeys_to_modifykeys_to_removeZmodel_state_dictkeyvalueZnew_keyr   r   r   rename_state_dictX   s    

r   Fc                 C   s   t j| dd}|d }|d k	r*t|}nt }t|}t }	t|||	}
t|}|  |	|
 |
  |j||d |rtd || d S )Ncpu)Zmap_locationZmodel_g)safe_serializationzPushing to the hub...)torchloadr   Zfrom_pretrainedr   setr   r   Zapply_weight_normZload_state_dictZremove_weight_normZsave_pretrainedprintpush_to_hub)checkpoint_pathpytorch_dump_folder_pathconfig_pathZrepo_idr   Zmodel_state_dict_baser   r   r   r   Zhf_state_dictmodelr   r   r   convert_univnet_checkpointf   s     
r)   c                  C   s   t  } | jddd tdd | jdd tdd | jddd td	d | jd
d tdd | jdddd |  }t|j|j|j|j	|j
 d S )Nz--checkpoint_pathTzPath to original checkpoint)requireddefaulttypehelpz--config_pathz*Path to hf config.json of model to convert)r+   r,   r-   z--pytorch_dump_folder_pathz!Path to the output PyTorch model.z--push_to_hubu4   Where to upload the converted model on the 🤗 hub.z--safe_serialization
store_truez.Whether to save the model using `safetensors`.)actionr-   )argparseArgumentParseradd_argumentstr
parse_argsr)   r%   r&   r'   r$   r   )parserargsr   r   r   main   s:             r7   __main__)r   r   )NNF)r0   r    Ztransformersr   r   r   Zset_verbosity_infoZ
get_loggerloggerr3   r   r   r   r)   r7   __name__r   r   r   r   <module>   s   
    
"