o
    iI                     @   s  d dl Z d dlZd dlZg dZedD ]pZedD ]Zde de dZde d	e dZe	eef qed
k rbde dZ
de dZe	ee
f de dZdd
e  dZe	eef ed
D ]Zde de dZdd
e  d	e dZe	eef qfqedD ]Zde dZded  dZe	eef qg dZd*ddZdd Zg dZdd  eD Ze d!e Zd ddd"Zd#d$ Zd+d&d'Zd(d) ZdS ),    N))nin_shortcutconv_shortcut)norm_outconv_norm_out)mid.attn_1.zmid_block.attentions.0.      zencoder.down_blocks.z	.resnets..zencoder.down.z.block.   zdown_blocks.z.downsamplers.0.zdown.z.downsample.z
up_blocks.z.upsamplers.0.zup.z
.upsample.zdecoder.up_blocks.zdecoder.up.zmid_block.resnets.z
mid.block_   )	)znorm.zgroup_norm.)q.zquery.)k.zkey.)v.zvalue.)r   zto_q.)r   zto_k.)r   zto_v.)	proj_out.z	to_out.0.)r   z
proj_attn.Fc                 C   s<   |r| j g | jdddR  S | j g | jddR  S )Nr   )reshapeshape)wconv3d r   5/mnt/c/Users/fbmor/ComfyUI/comfy/diffusers_convert.pyreshape_weight_for_sd=   s   r   c           
         s  dd    D }d}| D ]%\}}tD ]
\}}|||}q|dr0|s0 | jdkr0d}|||< q| D ]\}}d|v rRtD ]
\}}|||}qC|||< q9 fdd| D }g d	}| D ]"\}}|D ]}	d
|	 d|v rtd| d t	||d||< qlqf|S )Nc                 S   s   i | ]}||qS r   r   ).0kr   r   r   
<dictcomp>F   s    z*convert_vae_state_dict.<locals>.<dictcomp>Fz.conv.weight   T
attentionsc                    s   i | ]	\}}| | qS r   r   )r   r   vvae_state_dictr   r   r   T   s    )qr   r   proj_outr   z.weightz
Reshaping z for SD format)r   )
keysitemsvae_conversion_mapreplaceendswithndimvae_conversion_map_attnloggingdebugr   )
r   mappingr   r   r   sd_parthf_partnew_state_dictweights_to_convertweight_namer   r   r   convert_vae_state_dictE   s2   

r0   )	)z
resblocks.ztext_model.encoder.layers.)ln_1layer_norm1)ln_2layer_norm2)z.c_fc.z.fc1.)z.c_proj.z.fc2.)z.attnz
.self_attn)z	ln_final.z(transformer.text_model.final_layer_norm.)ztoken_embedding.weightz8transformer.text_model.embeddings.token_embedding.weight)positional_embeddingz;transformer.text_model.embeddings.position_embedding.weightc                 C   s    i | ]}t |d  |d qS )r   r   )reescape)r   xr   r   r   r   o   s     r   |)r   r   r   c                 C   s   d}| D ]	}||j d 7 }q|gt| d j dd   }tj|| d j| d jd}d}| D ]}|||||j d  < ||j d 7 }q.|S )Nr   r   )devicedtype)r   listtorchemptyr:   r;   )tensorsr8   tr   outr   r   r   cat_tensorsw   s   rB    c                 C   s  i }i }i }|   D ]\}}||sq
|ds#|ds#|drF|d td  }|td  }||vr=g d||< ||| t| < q
|dsU|dsU|d	rx|d td
  }|td  }||vrog d||< ||| t| < q
d}	||	r|dd |||	d< q
t	dd |}
|||
< q
|  D ]\}}d |v rt
dt	dd |}
t|||
d < q|  D ]\}}d |v rt
dt	dd |}
t|||
d < q|S )Nz.self_attn.q_proj.weightz.self_attn.k_proj.weightz.self_attn.v_proj.weightz.q_proj.weightzq_proj.weight)NNNz.self_attn.q_proj.biasz.self_attn.k_proj.biasz.self_attn.v_proj.biasz.q_proj.biaszq_proj.biasz"transformer.text_projection.weightr   r   text_projectionc                 S      t t| d S Nr   	protectedr6   r7   groupmr   r   r   <lambda>       z1convert_text_enc_state_dict_v20.<locals>.<lambda>zICORRUPTED MODEL: one of the q-k-v values for the text encoder was missingc                 S   rE   rF   rG   rJ   r   r   r   rL      rM   z.in_proj_weightc                 S   rE   rF   rG   rJ   r   r   r   rL      rM   z.in_proj_bias)r"   
startswithr%   lencode2idx	transpose
contiguousr$   textenc_patternsub	ExceptionrB   )text_enc_dictprefixr-   capture_qkv_weightcapture_qkv_biasr   r   k_prek_code	text_projrelabelled_keyr?   r   r   r   convert_text_enc_state_dict_v20   s\   


r^   c                 C   s   | S )Nr   )rV   r   r   r   convert_text_enc_state_dict   s   r_   )F)rC   )r6   r=   r(   r#   rangeijhf_down_prefixsd_down_prefixappendhf_downsample_prefixsd_downsample_prefixhf_upsample_prefixsd_upsample_prefixhf_up_prefixsd_up_prefixhf_mid_res_prefixsd_mid_res_prefixr'   r   r0   textenc_conversion_lstrH   compilejoinr!   rS   rP   rB   r^   r_   r   r   r   r   <module>   sF    

5