
    ^(j                        d dl Z d dlZd dlZg dZ ed      D ]  Z ed      D ]'  Zde de dZde d	e dZej                  eef       ) ed
k  rAde dZ
de dZej                  ee
f       de dZdd
ez
   dZej                  eef        ed
      D ]*  Zde de dZdd
ez
   d	e dZej                  eef       ,   ed      D ]$  Zde dZdedz    dZej                  eef       & g dZd!dZd Zg dZeD  ci c]  } e j-                  | d         | d     c} Z e j0                  dj3                  ej5                                     Zd dddZd Zd"dZd  Zyc c} w )#    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.c                     |r" | j                   g | j                  ddd S  | j                   g | j                  dd S )Nr   )reshapeshape)wconv3ds     A/Users/danicosta/Desktop/Flux2/ComfyUI/comfy/diffusers_convert.pyreshape_weight_for_sdr   =   sN    qyy+!''+1+a+++qyy(!''(1(a((    c                    | j                         D ci c]  }|| }}d}|j                         D ]Q  \  }}t        D ]  \  }}|j                  ||      } |j	                  d      r|s| |   j
                  dk(  rd}|||<   S |j                         D ]/  \  }}d|v st        D ]  \  }}|j                  ||      } |||<   1 |j                         D ci c]  \  }}|| |    }}}g d}|j                         D ]>  \  }}|D ]4  }	d|	 d|v st        j                  d	| d
       t        ||      ||<   6 @ |S c c}w c c}}w )NFz.conv.weight   T
attentions)qkvproj_outr   z.weightz
Reshaping z for SD format)r   )
keysitemsvae_conversion_mapreplaceendswithndimvae_conversion_map_attnloggingdebugr   )
vae_state_dictr   mappingr   r   sd_parthf_partnew_state_dictweights_to_convertweight_names
             r   convert_vae_state_dictr0   E   sm   +00232q!t2G3F1 2GW		'7+A !3::n%nQ/449
   11$; IIgw/ %<GAJ	  
 8?}}Gtq!a**NG4$$&1-K[M1Q6
1#^<=$9!F$Kq! . '
 + 4 Hs   
EE	)	)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.weight|)r   r   r   c                 >   d}| D ]  }||j                   d   z  } |gt        | d   j                         dd  z   }t        j                  || d   j                  | d   j
                        }d}| D ])  }|||||j                   d   z    ||j                   d   z  }+ |S )Nr   r   )devicedtype)r   listtorchemptyr8   r9   )tensorsxtr   outs        r   cat_tensorsrA   w   s    	A	QWWQZ  C$wqz''(,,E
++eGAJ$5$5WQZ=M=M
NC	A !Aa!''!*n	QWWQZ  Jr   c                    i }i }i }| j                         D ]T  \  }}|j                  |      s|j                  d      s"|j                  d      s|j                  d      r9|d t        d        }|t        d          }||vrg d||<   |||   t        |   <   |j                  d      s"|j                  d      s|j                  d	      r9|d t        d
        }|t        d          }||vrg d||<   |||   t        |   <   d}	|j                  |	      r5|j                  dd      j                         ||j                  |	d      <   9t        j                  d |      }
|||
<   W |j                         D ]<  \  }}d |v rt        d      t        j                  d |      }
t        |      ||
dz   <   > |j                         D ]<  \  }}d |v rt        d      t        j                  d |      }
t        |      ||
dz   <   > |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                 X    t         t        j                  | j                  d               S Nr   	protectedreescapegroupms    r   <lambda>z1convert_text_enc_state_dict_v20.<locals>.<lambda>   s    9RYYqwwWXzEZ;[r   zICORRUPTED MODEL: one of the q-k-v values for the text encoder was missingc                 X    t         t        j                  | j                  d               S rE   rF   rK   s    r   rM   z1convert_text_enc_state_dict_v20.<locals>.<lambda>       y177ST:AV7Wr   z.in_proj_weightc                 X    t         t        j                  | j                  d               S rE   rF   rK   s    r   rM   z1convert_text_enc_state_dict_v20.<locals>.<lambda>   rO   r   z.in_proj_bias)r!   
startswithr$   lencode2idx	transpose
contiguousr#   textenc_patternsub	ExceptionrA   )text_enc_dictprefixr-   capture_qkv_weightcapture_qkv_biasr   r   k_prek_code	text_projrelabelled_keyr=   s               r   convert_text_enc_state_dict_v20ra      s>   N##%1||F#

56::89::89.-../EO,,-F..,>"5):;u%hv&67 

34::67::67,^,,-EM**+F,,*< '89U#HV$458	::i FGkkRSUVFWFbFbFdN199Y0ABC,001[]^_N-.N>*A &D -224w7?ghh(,,-WY^_=H=Q~(99:	 5 +002w7?ghh(,,-WY^_;Fw;O~78	 3 r   c                     | S )N )rY   s    r   convert_text_enc_state_dictrd      s    r   )F) ) rH   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_lstrI   rG   compilejoinr    rV   rS   rA   ra   rd   )r>   s   0r   <module>rw      s   	    
qA1X/s)A3a@(71#Q7!!>>"BC 
 	1u!-aS0@A!&qc6!!#79M"NO)!N;"1q5'4!!#57I"JK 1X+A3is!<$QUG71#Q7!!<">? % 
0 
qA,QCq1$QUG1-02CDE 

 )<  -CC,BqRYYqt_ad",BC	"**SXXinn&678 # 2j[ Ds   E/