o
    ̳i                     @   s   d dl Z d dlmZ ddgZdgZdddd	d
dZddddddZdedefddZG dd de	Z
dedefddZdee dee defddZdee dee defd d!ZdS )"    N)List)z,^(encoder|decoder)\.norm_out\.(weight|bias)$z\1.end.0.\2)z,^(encoder|decoder)\.conv_out\.(weight|bias)$z\1.end.2.\2z+^(encoder|decoder)\.conv_in\.(weight|bias)$zmain.0zmain.2zmain.3zmain.5shortcut)norm1conv1norm2conv2nin_shortcutzattn.q_projzattn.k_projzattn.v_projzattn.output_projnorm)qkvproj_outr	   
state_dictreturnc                 C   s:   i }|   D ]\}}t|}d|v r| }|||< q|S )Nproj)items_convert_keysqueeze)r   new_state_dictkeyvaluenew_key r   Z/home/ubuntu/.local/lib/python3.10/site-packages/torchtune/models/flux/_convert_weights.pyflux_ae_hf_to_tune!   s   
r   c                   @   s   e Zd ZdS )ConversionErrorN)__name__
__module____qualname__r   r   r   r   r   +   s    r   r   c                 C   sH  t D ]}t|| r|   S qtD ]\}}t|| r$t|||   S q| d}g }d}|| }|dv s8J || |d7 }|| }|| |d7 }|dkr|| }|d7 }tg dD ]#\}	}
||
kr|t|	 |
	dr{t
||| nt|||  nq`t| n|dkr|||  |d7 }|| d	kr|d
 |d7 }|||  |d7 }t||| nf|| dkr|||d   nVt| |dkr|tdt||   |d7 }|| d	kr|d
 |d7 }|||  |d7 }t||| n|| dkr|||d   n	t| td| d|S )N.r   )encoderdecoder   mid)block_1attn_1block_2attndownblocklayers
downsampleup   upsamplezunknown section:)REGEX_UNCHANGEDrematchREGEX_CONVERSIONSsubsplitappend	enumeratestr
startswith_convert_attn_layer_convert_resnet_layerr   extendintjoin)r   patternreplacementparts	new_partsimodelsectionlayer	layer_idx
layer_namer   r   r   r   /   sr   








r   rA   r@   rB   c                 C   ,   |  t||   |d7 }|  ||  d S Nr"   )r5   ATTN_LAYER_CONVERSIONrA   r@   rB   r   r   r   r9         r9   c                 C   rH   rI   )r5   RESNET_LAYER_CONVERSIONrK   r   r   r   r:      rL   r:   )r0   typingr   r2   r/   rM   rJ   dictr   	Exceptionr   r7   r   r<   r9   r:   r   r   r   r   <module>   s.   		
Q"