
    +js                         d dl mZ d dlmZmZ d Z G d dej                  Z G d dej                  Z G d d	ej                  Z	 G d
 dej                  Z
 G d de          ZdefdZdS )    )override)ComfyExtensionioc                    |                                 }|                                }|D ]}|                    d                    |                     s(|                    d                    |                     r|                    |did|           |                    d                    |                     s(|                    d                    |                     r|                    |did|           |                    d                    |                     s(|                    d                    |                     r|                    |did|           |                    d	                    |                     s(|                    d
                    |                     r|                    |did|           |S )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      s   A				!	!B 4 4<<--d3344 	2EUE\E\]aEbEb8c8c 	2MM3.#q111<<--d3344 	2EUE\E\]aEbEb8c8c 	2MM3.#q111<<--d3344 	2EUE\E\]aEbEb8c8c 	2MM3.#q111<<*11$7788 	4CLLI]IdIdeiIjIj<k<k 	4MM3.#s333H    c                   Z    e Zd Zedej        fd            Zedej        fd            ZdS )UNetSelfAttentionMultiplyreturnc                    t          j        ddt           j                            d          t           j                            dddddd	
          t           j                            dddddd	
          t           j                            dddddd	
          t           j                            dddddd	
          gt           j                                        gd	          S )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_schemaz'UNetSelfAttentionMultiply.define_schema   s    y/9w''sCSdX\]]sCSdX\]]sCSdX\]]ucs4Z^__ X__&&' 
 
 
 	
r   c                 R    t          d|||||          }t          j        |          S )Nattn1r   r   
NodeOutputr5   r   r   r   r   r   r   s          r   executez!UNetSelfAttentionMultiply.execute(   )    wq!Q<<}Qr   N	__name__
__module____qualname__classmethodr   r/   r6   r:   r<    r   r   r   r      d        
bi 
 
 
 [
  R]       [     r   r   c                   Z    e Zd Zedej        fd            Zedej        fd            ZdS )UNetCrossAttentionMultiplyr   c                    t          j        ddt           j                            d          t           j                            dddddd	
          t           j                            dddddd	
          t           j                            dddddd	
          t           j                            dddddd	
          gt           j                                        gd	          S )NrF   r   r   r   r   r   r    r!   Tr"   r   r   r   r(   r.   r4   s    r   r6   z(UNetCrossAttentionMultiply.define_schema/   s    y09w''sCSdX\]]sCSdX\]]sCSdX\]]ucs4Z^__ X__&&' 
 
 
 	
r   c                 R    t          d|||||          }t          j        |          S )Nattn2r9   r;   s          r   r<   z"UNetCrossAttentionMultiply.execute?   r=   r   Nr>   rC   r   r   rF   rF   .   rD   r   rF   c                   Z    e Zd Zedej        fd            Zedej        fd            ZdS )CLIPAttentionMultiplyr   c                    t          j        dddgdt           j                            d          t           j                            dddd	d
d          t           j                            dddd	d
d          t           j                            dddd	d
d          t           j                            dddd	d
d          gt           j                                        gd          S )NrK   zclip attention scaleztext encoder attentionr   clipr   r   r   r    r!   Tr"   r   r   r   )r)   search_aliasesr*   r+   r,   r-   )r   r/   Clipr1   r2   r3   r4   s    r   r6   z#CLIPAttentionMultiply.define_schemaF   s    y+24LM9f%%sCSdX\]]sCSdX\]]sCSdX\]]ucs4Z^__ W^^%%& 
 
 
 	
r   c                    |                                 }|j                                        }|D ]}|                    d          s|                    d          r|                    |did|           |                    d          s|                    d          r|                    |did|           |                    d          s|                    d          r|                    |did|           |                    d	          s|                    d
          r|                    |did|           t          j        |          S )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:   )	r5   rM   r   r   r   r   r   r   r   s	            r   r<   zCLIPAttentionMultiply.executeW   sN   JJLLY'')) 	8 	8C||566 6#,,G^:_:_ 6sGnc1555||566 6#,,G^:_:_ 6sGnc1555||566 6#,,G^:_:_ 6sGnc1555||788 8CLLIb<c<c 8sGnc3777}Qr   Nr>   rC   r   r   rK   rK   E   sd        
bi 
 
 
 [
   BM       [     r   rK   c                   Z    e Zd Zedej        fd            Zedej        fd            ZdS )UNetTemporalAttentionMultiplyr   c                    t          j        ddt           j                            d          t           j                            dddddd	
          t           j                            dddddd	
          t           j                            dddddd	
          t           j                            dddddd	
          gt           j                                        gd	          S )NrS   r   r   self_structuralr   r   r    r!   Tr"   self_temporalcross_structuralcross_temporalr(   r.   r4   s    r   r6   z+UNetTemporalAttentionMultiply.define_schemai   s    y39w''0#3DW[fjkk$UYdhii13CTX\gkll/#4VZeijj X__&&' 
 
 
 	
r   c                 
   |                                 }|                                }|D ]}|                    d          s|                    d          r8d|v r|                    |did|           J|                    |did|           d|                    d          s|                    d          r7d|v r|                    |did|           |                    |did|           t	          j        |          S )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:   )	r5   r   rU   rV   rW   rX   r   r   r   s	            r   r<   z%UNetTemporalAttentionMultiply.executey   s    KKMM##%% 
	G 
	GA

011 	GQZZ@W5X5X 	G!Q&&MM1g,]CCCCMM1g,_EEEE**233 GqzzBY7Z7Z G!Q&&MM1g,^DDDDMM1g,5EFFF}Qr   Nr>   rC   r   r   rS   rS   h   sf        
bi 
 
 
 [
  acan       [     r   rS   c                   L    e Zd Zedeeej                          fd            ZdS )AttentionMultiplyExtensionr   c                 :   K   t           t          t          t          gS r   )r   rF   rK   rS   )selfs    r   get_node_listz(AttentionMultiplyExtension.get_node_list   s       &&!)	
 	
r   N)	r?   r@   rA   r   listtyper   	ComfyNoder^   rC   r   r   r[   r[      sE        
T$r|*<%= 
 
 
 X
 
 
r   r[   r   c                  "   K   t                      S r   )r[   rC   r   r   comfy_entrypointrc      s      %'''r   N)typing_extensionsr   comfy_api.latestr   r   r   ra   r   rF   rK   rS   r[   rc   rC   r   r   <module>rf      s@   & & & & & & / / / / / / / /  "               .               .              BL         F!  !  !  !  ! BL !  !  ! H
 
 
 
 
 
 
 
( : ( ( ( ( ( (r   