
    +js                         S SK Jr  S SKJrJr  S r " S S\R                  5      r " S S\R                  5      r " S S	\R                  5      r	 " S
 S\R                  5      r
 " S S\5      rS\4S jrg)    )override)ComfyExtensionioc                 Z   UR                  5       nUR                  5       nU GH  nUR                  SR                  U 5      5      (       d%  UR                  SR                  U 5      5      (       a  UR	                  US0SU5        UR                  SR                  U 5      5      (       d%  UR                  SR                  U 5      5      (       a  UR	                  US0SU5        UR                  SR                  U 5      5      (       d%  UR                  SR                  U 5      5      (       a  UR	                  US0SU5        UR                  S	R                  U 5      5      (       d(  UR                  S
R                  U 5      5      (       d  GMn  UR	                  US0SU5        GM     U$ )Nz{}.to_q.biasz{}.to_q.weightN        z{}.to_k.biasz{}.to_k.weightz{}.to_v.biasz{}.to_v.weightz{}.to_out.0.biasz{}.to_out.0.weight)clonemodel_state_dictendswithformatadd_patches)	attnmodelqkvoutmsdkeys	            E/home/wildlama/comfy/ComfyUI/comfy_extras/nodes_attention_multiply.pyattention_multiplyr      sQ   A				!B<<--d344EUE\E\]aEb8c8cMM3.#q1<<--d344EUE\E\]aEb8c8cMM3.#q1<<--d344EUE\E\]aEb8c8cMM3.#q1<<*11$788CLLI]IdIdeiIj<k<kMM3.#s3  H    c                   l    \ rS rSr\S\R                  4S j5       r\S\R                  4S j5       r	Sr
g)UNetSelfAttentionMultiply   returnc                    [         R                  " SS[         R                  R                  S5      [         R                  R                  SSSSSS	S
9[         R                  R                  SSSSSS	S
9[         R                  R                  SSSSSS	S
9[         R                  R                  SSSSSS	S
9/[         R                  R                  5       /S	S9$ )Nr   "experimental/attention_experimentsr   r         ?r         $@{Gz?Tdefaultminmaxstepadvancedr   r   r   node_idcategoryinputsoutputsis_experimentalr   SchemaModelInputFloatOutputclss    r   define_schema'UNetSelfAttentionMultiply.define_schema   s    yy/9w'sCSdX\]sCSdX\]sCSdX\]ucs4Z^_ XX__&' 
 	
r   c                 J    [        SXX4U5      n[        R                  " U5      $ )Nattn1r   r   
NodeOutputr6   r   r   r   r   r   r   s          r   execute!UNetSelfAttentionMultiply.execute(   !    w!<}}Qr    N__name__
__module____qualname____firstlineno__classmethodr   r0   r7   r<   r>   __static_attributes__rA   r   r   r   r      >    
bii 
 
  R]]    r   r   c                   l    \ rS rSr\S\R                  4S j5       r\S\R                  4S j5       r	Sr
g)UNetCrossAttentionMultiply.   r   c                    [         R                  " SS[         R                  R                  S5      [         R                  R                  SSSSSS	S
9[         R                  R                  SSSSSS	S
9[         R                  R                  SSSSSS	S
9[         R                  R                  SSSSSS	S
9/[         R                  R                  5       /S	S9$ )NrK   r   r   r   r    r   r!   r"   Tr#   r   r   r   r)   r/   r5   s    r   r7   (UNetCrossAttentionMultiply.define_schema/   s    yy09w'sCSdX\]sCSdX\]sCSdX\]ucs4Z^_ XX__&' 
 	
r   c                 J    [        SXX4U5      n[        R                  " U5      $ )Nattn2r;   r=   s          r   r>   "UNetCrossAttentionMultiply.execute?   r@   r   rA   NrB   rA   r   r   rK   rK   .   rI   r   rK   c                   l    \ rS rSr\S\R                  4S j5       r\S\R                  4S j5       r	Sr
g)CLIPAttentionMultiplyE   r   c                    [         R                  " SSS/S[         R                  R                  S5      [         R                  R                  SSSS	S
SS9[         R                  R                  SSSS	S
SS9[         R                  R                  SSSS	S
SS9[         R                  R                  SSSS	S
SS9/[         R                  R                  5       /SS9$ )NrS   zclip attention scaleztext encoder attentionr   clipr   r    r   r!   r"   Tr#   r   r   r   )r*   search_aliasesr+   r,   r-   r.   )r   r0   Clipr2   r3   r4   r5   s    r   r7   #CLIPAttentionMultiply.define_schemaF   s    yy+24LM9f%sCSdX\]sCSdX\]sCSdX\]ucs4Z^_ WW^^%& 
 	
r   c                    UR                  5       nUR                  R                  5       nU GH
  nUR                  S5      (       d  UR                  S5      (       a  UR	                  US0SU5        UR                  S5      (       d  UR                  S5      (       a  UR	                  US0SU5        UR                  S5      (       d  UR                  S5      (       a  UR	                  US0SU5        UR                  S	5      (       d  UR                  S
5      (       d  M  UR	                  US0SU5        GM     [
        R                  " U5      $ )Nzself_attn.q_proj.weightzself_attn.q_proj.biasr   r   zself_attn.k_proj.weightzself_attn.k_proj.biaszself_attn.v_proj.weightzself_attn.v_proj.biaszself_attn.out_proj.weightzself_attn.out_proj.bias)r	   patcherr
   r   r   r   r<   )	r6   rV   r   r   r   r   r   r   r   s	            r   r>   CLIPAttentionMultiply.executeW   s   JJLYY'')C||566#,,G^:_:_sGnc15||566#,,G^:_:_sGnc15||566#,,G^:_:_sGnc15||788CLLIb<c<csGnc37  }}Qr   rA   NrB   rA   r   r   rS   rS   E   s>    
bii 
 
   BMM    r   rS   c                   l    \ rS rSr\S\R                  4S j5       r\S\R                  4S j5       r	Sr
g)UNetTemporalAttentionMultiplyh   r   c                    [         R                  " SS[         R                  R                  S5      [         R                  R                  SSSSSS	S
9[         R                  R                  SSSSSS	S
9[         R                  R                  SSSSSS	S
9[         R                  R                  SSSSSS	S
9/[         R                  R                  5       /S	S9$ )Nr^   r   r   self_structuralr    r   r!   r"   Tr#   self_temporalcross_structuralcross_temporalr)   r/   r5   s    r   r7   +UNetTemporalAttentionMultiply.define_schemai   s    yy39w'0#3DW[fjk$UYdhi13CTX\gkl/#4VZeij XX__&' 
 	
r   c                     UR                  5       nUR                  5       nU H  nUR                  S5      (       d  UR                  S5      (       a4  SU;   a  UR                  US0SU5        ML  UR                  US0SU5        Mc  UR                  S5      (       d  UR                  S5      (       d  M  SU;   a  UR                  US0SU5        M  UR                  US0SU5        M     [        R
                  " U5      $ )Nzattn1.to_out.0.biaszattn1.to_out.0.weightz.time_stack.r   r   zattn2.to_out.0.biaszattn2.to_out.0.weight)r	   r
   r   r   r   r<   )	r6   r   ra   rb   rc   rd   r   r   r   s	            r   r>   %UNetTemporalAttentionMultiply.executey   s    KKM##%A

011QZZ@W5X5X!Q&MM1g,]CMM1g,_E**233qzzBY7Z7Z!Q&MM1g,^DMM1g,5EF  }}Qr   rA   NrB   rA   r   r   r^   r^   h   sA    
bii 
 
  acanan    r   r^   c                   L    \ rS rSr\S\\\R                        4S j5       r	Sr
g)AttentionMultiplyExtension   r   c                 6   #    [         [        [        [        /$ 7fr   )r   rK   rS   r^   )selfs    r   get_node_list(AttentionMultiplyExtension.get_node_list   s      &&!)	
 	
s   rA   N)rC   rD   rE   rF   r   listtyper   	ComfyNoderm   rH   rA   r   r   ri   ri      s)    
T$r||*<%= 
 
r   ri   r   c                     #    [        5       $ 7fr   )ri   rA   r   r   comfy_entrypointrs      s     %''s   N)typing_extensionsr   comfy_api.latestr   r   r   rq   r   rK   rS   r^   ri   rs   rA   r   r   <module>rv      sk    & /"   .   .  BLL   F! BLL ! H
 
( : (r   