
    +j                         d dl Zd dlZd dlZd dlZd dlmZmZ d dlm	Z	 d Z
 G d dej                  Z G d de          Zd	efd
ZdS )    N)IOComfyExtension)overridec           
      f   t           j                            | d          }|                    dd          }|                    dd          }|                    dd          }|                    dd          }|                    d	d          }t          j        j        t          j        j        t          j        j        t          j        j	        t          j        j
        t          j        j        t          j        j        t          j        j        t          j        j        d
	}||vr.t          j        d                    | |||||                     d S i }	|D ]}
	 t%          |
          }n#  Y xY wg }dD ]|}||         |         }|                                }t)          d |          }t+          t-          d |                    }g }d}|t/          |          k     r||         }|t/          |          dz
  k    }|t/          |          dz
  k    }|d                    |                   }|d                    |                   }t          j                            |j        d         |j        d                   }|                    ||d           |                    |           |dk    r'|r|r#|                     ||                                |r|dz  }||         }|d                    |                   }|d                    |                   }t          j                            |j        d                   }|                    ||d           |                    |           |r9|s7|r|r3|                    t          j                            d                     |dz  }|t/          |          k     |                    t	          j        j        |            ~t          j                            |          |	|<    G d d          } ||	|          S )NT)	safe_loadactivation_funclinearis_layer_normFuse_dropoutactivate_outputlast_layer_dropout)	r	   relu	leakyrelueluswishtanhsigmoidsoftsignmishz[Unsupported Hypernetwork format, if you report it I might implement it. {}   {} {} {} {} {})r      c                 ,    |                      d          S Nz.weight)endswithas    ?/home/wildlama/comfy/ComfyUI/comfy_extras/nodes_hypernetwork.py<lambda>z)load_hypernetwork_patch.<locals>.<lambda>.   s    qzz)'<'<     c                 2    | d t          d                    S r   )lenr   s    r   r   z)load_hypernetwork_patch.<locals>.<lambda>/   s    +;S^^O+;)< r   r   r      z	{}.weightz{}.bias)weightbiasg333333?)pc                        e Zd Zd Zd Zd ZdS )3load_hypernetwork_patch.<locals>.hypernetwork_patchc                 "    || _         || _        d S N)hypernetstrength)selfr)   r*   s      r   __init__z<load_hypernetwork_patch.<locals>.hypernetwork_patch.__init__Q   s    $DM$DMMMr   c                     |j         d         }|| j        v rE| j        |         }| |d         |          | j        z  z   }| |d         |          | j        z  z   }|||fS )Nr   r   )shaper)   r*   )r+   qkvextra_optionsdimhns          r   __call__z<load_hypernetwork_patch.<locals>.hypernetwork_patch.__call__T   sk    '"+Cdm##]3'1a4=001a4=00a7Nr   c                     | j                                         D ]*}| j         |                             |          | j         |<   +| S r(   )r)   keysto)r+   deviceds      r   r9   z6load_hypernetwork_patch.<locals>.hypernetwork_patch.to]   sH    ]'')) ? ?#'=#3#6#6v#>#>a  Kr   N)__name__
__module____qualname__r,   r6   r9    r   r   hypernetwork_patchr&   P   sA        	% 	% 	%	 	 		 	 	 	 	r   r@   ) comfyutilsload_torch_filegettorchnnIdentityReLU	LeakyReLUELU	HardswishTanhSigmoidSoftsignMishloggingerrorformatintr8   filterlistmapr    Linearr/   load_state_dictappend	LayerNormDropout
Sequential
ModuleList)pathr*   sdr   r
   r   r   r   valid_activationoutr;   r4   outputindexattn_weightsr8   linearslayersilin_name
last_layerpenultimate_layer
lin_weightlin_biaslayerln_name	ln_weightln_biaslnr@   s                                 r   load_hypernetwork_patchrr   	   sH   		$	$TT	$	:	:Bff.99OFF?E22M&&..Kff.66O 4e<< (#X'x|#8#H%
 
 ...szz{  BQ  S`  bm  o~  @R  S  S  	T  	T  	Tt
C +/ +/	a&&CC	H #	8 #	8Ec75>L$$&&D<<dCCG3<<gFFGGGFAc'll"""1:CLL1$45
%&3w<<!+;%<!)+*<*<X*F*FG
'	(8(8(B(BC
(8(;Z=Ma=PQQ%%X&N&NOOOe$$$"h..& KO K&G&6&G&I&IJJJ  &FA%ajG ,[-?-?-H-H II*9+;+;G+D+DEG++IOA,>??B&&)W'M'MNNNMM"%%% ?& ?1B ?FX ?eh&6&6&6&=&=>>>Q1 c'll""4 MM%(-v677778&&v..C       $ c8,,,s   E--E1c                   N    e Zd Zed             Zedej        fd            ZeZdS )HypernetworkLoaderc                 T   t          j        dddt           j                            d          t           j                            dt          j        d                    t           j                            dd	d
dd          gt           j                                        g          S )Nrt   zLoad Hypernetworkzmodel/loadersmodelhypernetwork_namehypernetworks)optionsr*   g      ?g      $g      $@g{Gz?)defaultminmaxstep)node_iddisplay_namecategoryinputsoutputs)	r   SchemaModelInputCombofolder_pathsget_filename_listFloatOutput)clss    r   define_schemaz HypernetworkLoader.define_schemae   s    y(,$w''2L<Z[j<k<kllz3EtRVWW !!
 
 
 	
r   returnc                     t          j        d|          }|                                }t          ||          }|*|                    |           |                    |           t          j        |          S )Nrx   )r   get_full_path_or_raiseclonerr   set_model_attn1_patchset_model_attn2_patchr   
NodeOutput)r   rv   rw   r*   hypernetwork_pathmodel_hypernetworkpatchs          r   executezHypernetworkLoader.executeu   ss    (?Qbcc"[[]]'(98DD44U;;;44U;;;}/000r   N)	r<   r=   r>   classmethodr   r   r   r   load_hypernetworkr?   r   r   rt   rt   d   sZ        
 
 [
 1BM 1 1 1 [1  r   rt   c                   L    e Zd Zedeeej                          fd            ZdS )HyperNetworkExtensionr   c                    K   t           gS r(   )rt   )r+   s    r   get_node_listz#HyperNetworkExtension.get_node_list   s       
 	
r   N)	r<   r=   r>   r   rU   typer   	ComfyNoder   r?   r   r   r   r      sE        
T$r|*<%= 
 
 
 X
 
 
r   r   r   c                  "   K   t                      S r(   )r   r?   r   r   comfy_entrypointr      s       """r   )comfy.utilsrA   r   rE   rP   comfy_api.latestr   r   typing_extensionsr   rr   r   rt   r   r   r?   r   r   <module>r      s              / / / / / / / / & & & & & &Y- Y- Y-v               <
 
 
 
 
N 
 
 
# 5 # # # # # #r   