U
    Ö9%e.  ã                   @   sô   d Z ddlZddlZddlZddlmZ ddlZddlZddlm	Z	m
Z
 ddlmZ e ¡  e e¡ZdZddd	d
gddd	dgdœZdd„ Zdd„ Ze ¡ ddd„ƒZedkrðe ¡ Zejddedd ejddedd e ¡ Zeejejƒ dS )zConvert Jukebox checkpointsé    N)ÚPath)ÚJukeboxConfigÚJukeboxModel)Úloggingz2https://openaipublic.azureedge.net/jukebox/models/z5b/vqvae.pth.tarz5b/prior_level_0.pth.tarz5b/prior_level_1.pth.tarz1b_lyrics/prior_level_2.pth.tarz5b_lyrics/prior_level_2.pth.tar)zjukebox-1b-lyricsújukebox-5b-lyricsc                 C   sÜ  |   d¡r*t|  d¡ƒdkr*|  dd¡} n||   d¡rTt|  d¡ƒdkrT|  dd¡} nR|   d¡r~t|  d¡ƒdkr~|  dd¡} n(|   d	¡r¦t|  d¡ƒdkr¦|  d	d
¡} d| krº|  dd¡} d| krÎ|  dd¡} d| krúd| krúd| krúd| krú|  dd¡} |   d¡r|  dd¡S d| kr(|  dd¡S d| kr>|  dd¡} d| krT|  dd¡S d| krj|  dd¡S d | kr€|  d d!¡S d"| kr–|  d"d#¡S d$| kr¬|  d$d%¡S d&| krÂ|  d'd(¡S d)| krØ|  d)d¡S | S )*Nz.model.1.biasÚ.é
   z.conv1d_1.biasz.model.1.weightz.conv1d_1.weightz.model.3.biasz.conv1d_2.biasz.model.3.weightz.conv1d_2.weightzconditioner_blocks.0.zconditioner_blocks.0Zconditioner_blocksZprime_priorÚencoderz.emb.ÚtotalÚabsoluteÚrelativeÚkz.kz	.codebookzy_emb.zmetadata_embedding.z
x_emb.emb.z0.x_emb.embZembed_tokensZprime_state_lnzencoder.final_layer_normz.lnz.layer_normZ_lnZ_layer_normZprime_state_projzencoder.proj_inZprime_x_outzencoder.lm_headzprior.x_outZx_outZfc_proj_outZx_emb)ÚendswithÚlenÚsplitÚreplace)Úkey© r   új/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/transformers/models/jukebox/convert_jukebox.pyÚreplace_key2   sF     








r   c              
   C   s  i }dd l }| d¡}| d¡}| d¡}| d¡}	| d¡}
| d¡}| d¡}| d	¡}| d
¡}|  ¡ D ]¨\}}| |¡rè| |¡}| ¡ }t|d ƒd t|d ƒ }d|d › d|d › d|› d|d › }| ||¡}nŒ| |¡rŠ| |¡}| ¡ }t|d ƒd t|d ƒ }dddœ|d  }d|d › d|d › d|› d}d|d › d|› d|d › }|| }| ||¡}nê| |¡rÚ| |¡}| ¡ }d|d › d|d › d|d › }| ||¡}nš|	 |¡rP|	 |¡}| ¡ }t|d ƒd t|d ƒ d }d|d › d|d › d|› d|d › }|	 ||¡}n$|
 |¡rö|
 |¡}| ¡ }t|d ƒd t|d ƒ d }dddœ|d  }d|d › d|d › d|› d}d|d › d|› d|d › }|| }|
 ||¡}n~| |¡rF| |¡}| ¡ }d|d › d|d › d|d › }| ||¡}n.| |¡r¦| |¡}| ¡ }t|d ƒd t|d ƒ d }d|› d|d › }| ||¡}nÎ| |¡r6| |¡}| ¡ }t|d ƒd t|d ƒ d }dddœ|d  }d|› d}d|d › d|› d|d › }|| }| ||¡}n>| |¡rp| |¡}| ¡ }d|d › }| ||¡}n|}t|ƒ}|› d|› |ksš|d kr²t	d|› d|› d ƒ nV|j
||› d|›  j
kr||› d|›  }t	|› d!|› d"|j
› d#|j
› d$ƒ |}|||< |||< qn|S )%Nr   z@encoders.(\d*).level_blocks.(\d*).model.(\d*).(\d).(bias|weight)zXencoders.(\d*).level_blocks.(\d*).model.(\d*).(\d).model.(\d*).model.(\d*).(bias|weight)z;encoders.(\d*).level_blocks.(\d*).model.(\d*).(bias|weight)z@decoders.(\d*).level_blocks.(\d*).model.(\d*).(\d).(bias|weight)zXdecoders.(\d*).level_blocks.(\d*).model.(\d*).(\d).model.(\d*).model.(\d*).(bias|weight)z;decoders.(\d*).level_blocks.(\d*).model.(\d*).(bias|weight)z<conditioner_blocks.(\d*).cond.model.(\d*).(\d).(bias|weight)zTconditioner_blocks.(\d*).cond.model.(\d*).(\d).model.(\d*).model.(\d*).(bias|weight)z7conditioner_blocks.(\d*).cond.model.(\d*).(bias|weight)é   é   z	encoders.z.level_blocks.é   z.downsample_block.r   éÿÿÿÿ)Ú1Ú3éþÿÿÿzresnet_block.éýÿÿÿz.conv1d_z
.proj_out.z	decoders.z.upsample_block.z	.proj_in.z,conditioner_blocks.upsampler.upsample_block.z%conditioner_blocks.upsampler.proj_in.zfailed converting ú to z, does not matchz-> z
 : 
shape z and z, do not match)ÚreÚcompileÚitemsÚ	fullmatchÚmatchÚgroupsÚintÚsubr   ÚprintÚshape)Ú
state_dictZmodel_state_dictÚ
key_prefixÚmappingZnew_dictr   Zre_encoder_block_conv_inZre_encoder_block_resnetZre_encoder_block_proj_outZre_decoder_block_conv_outZre_decoder_block_resnetZre_decoder_block_proj_inZre_prior_cond_conv_outZre_prior_cond_resnetZre_prior_cond_proj_inZoriginal_keyÚvalueZregex_matchr$   Zblock_indexZ
re_new_keyr   Z
conv_indexÚprefixZresnet_blockÚvalr   r   r   Úfix_jukebox_keys`   s²    
ÿ

ÿ

ÿ


(
 
"
 (
  
"
 
 
$
r/   c              	   C   s>  t |  D ]t}tj |› d| d¡d › ¡stjt› |› dd}tj|› ddd t	|› d| d¡d › dƒ 
|j¡ qt |  d¡d  }t | ¡}t|ƒ}g }i }t|ƒD ]î\}	}
t |› d|
 d¡d › ¡d }i }| ¡ D ]~}| d¡r|| || d	d
¡< qè| d¡r0|| || dd¡< qèd|
krZd|krZ|| || dd¡< qè|| ||< qè|	dkrvdndd|	 › }t|| ¡ ||ƒ}| |¡ q²| d¡}|j |¡ tt|ƒƒD ]}	|j|	  |d|	  ¡ qÄt|ƒjdd t	|› ddƒ}t  !||¡ W 5 Q R X t"d| › d|› ƒ | #|¡ |S )zD
    Copy/paste/tweak model's weights to our Jukebox structure.
    ú/r   T)Úallow_redirects)Úexist_okÚwbÚmodelz.bÚbZbiasz.wÚwÚweightZlevel_2zcond.model.z.blocks.z.model.r   Úvqvaezpriors.r   r   z/mapping.jsonzSaving model r   )$ÚMODEL_MAPPINGÚosÚpathÚisfiler   ÚrequestsÚgetÚPREFIXÚmakedirsÚopenÚwriteÚcontentr   Zfrom_pretrainedr   Ú	enumerateÚtorchÚloadÚkeysr   r   r/   r)   ÚappendÚpopr8   Zload_state_dictÚranger   Zpriorsr   ÚmkdirÚjsonÚdumpr'   Zsave_pretrained)Ú
model_nameÚpytorch_dump_folder_pathÚfileÚrZmodel_to_convertÚconfigr4   Zweight_dictr+   ÚiZ	dict_nameZold_dicZnew_dicr   r*   Zvqvae_state_dictZtxtfiler   r   r   Úconvert_openai_checkpointÔ   sD     (
"

rT   Ú__main__z--model_namer   z(Name of the model you'd like to convert.)ÚdefaultÚtypeÚhelpz--pytorch_dump_folder_pathzjukebox-5b-lyrics-convertedz+Path to the output PyTorch model directory.)NN)Ú__doc__ÚargparserL   r:   Úpathlibr   r=   rE   Ztransformersr   r   Ztransformers.utilsr   Zset_verbosity_infoZ
get_loggerÚ__name__Úloggerr?   r9   r   r/   Zno_gradrT   ÚArgumentParserÚparserÚadd_argumentÚstrÚ
parse_argsÚargsrN   rO   r   r   r   r   Ú<module>   sT   
üüù.t2üü