
    +jn                         d dl Z d dlZd dlZd dlmZ d dlZd dlZd dlZd dlm	Z	m
Z
mZmZ d dlmZ d dlmZ ddlmZ  G d d          Zd	 Zd
Zd Zd Zd Z G d de j        j                  ZdS )    N)LowVramPatchmove_weight_functionswipe_lowvram_weightget_key_weight)CallbacksMP)QuantizedTensor   )state_dict_mappingc                   ,    e Zd ZdZi Zed             ZdS )CastBufferManagerzVManages a reusable float16 buffer for dtype conversion - mirrors TensorManager patternc                    t          | t                    rt          j        |           } | t          j        v r_t          j        |          }|                                |k    r
|d |         S t          j        | = t          j                                         t          j	        |t          j
        |           }|t          j        | <   |S )N)dtypedevice)
isinstancestrtorchr   r   _tensorsnumelcudaempty_cacheemptyfloat16)r   
n_elementsexisting
new_tensors       V/home/wildlama/comfy/ComfyUI/custom_nodes/ComfyUI-DFloat11-Extended/dfloat11_custom.pyget_float16_bufferz$CastBufferManager.get_float16_buffer   s    fc"" 	*\&))F&///(1&9H~~:--,,!*62J""$$$[5=PPP
-7"6*    N)__name__
__module____qualname____doc__r   staticmethodr    r   r   r   r      s8        ``H  \  r   r   c                       fd}|S )Nc                    | j         }|j        }|                                }|j        }t                              ||                              |          }|                    |           	 t          j	        
                    	|           n)# t          $ r}t          d d|            |d }~ww xY w|                    |           d S )Nz1[LORA HOOK ERROR] Failed to calculate weight for z: )weightshaper   r   r   r   viewcopy_comfyloracalculate_weight	Exceptionprint)
moduleinputr'   original_shaper   r   fp16_bufferekey
patch_lists
           r   	lora_hookz get_hook_lora.<locals>.lora_hook'   s    \\^^
 (::6:NNSSTbcc&!!!	J''
KEEEE 	 	 	PcPPQPPQQQG	 	[!!!!!s   /!B 
B7B22B7r$   )r6   r5   r7   s   `` r   get_hook_lorar8   &   s*    " " " " " "& r      c                     t          | |          \  }}}|dS t          | dt          j                  }||j        }|                                |j        z  t          z  S )Nr   manual_cast_dtype)get_key_weight_df11getattrr   float32r   r   itemsize"LOWVRAM_PATCH_ESTIMATE_MATH_FACTOR)modelr5   r'   set_funcconvert_funcmodel_dtypes         r   low_vram_patch_estimate_vramrE   >   s_    %8%D%D"FHl~q%!4emDDKl<<>>K003UUUr   c                     |                     d          }| }|D ]%}t          |d          r dS t          ||          }&dS )N.offloaded_tensorsTF)splithasattrr=   )rA   r5   partsparentparts        r   parent_is_offloadedrN   H   sU    IIcNNEF ' '6.// 	44&&5r   c                    d }d }|                     dd          }t          |          dk     r!t          j                            | |          }nt          j                            | |d                   }t          |d                    |d                   d           }t          |d                    |d                   d           }t          ||d         d           }|	 | t          j                            | |          }|||fS )NrG   r	   r9   r   zset_{}z
convert_{})rsplitlenr+   utilsget_attrr=   format)rA   r5   rB   rC   op_keysr'   ops          r   r<   r<   R   s    HLjja  G
7||a%%eS11[!!%442xwqz::DAAr<#6#6wqz#B#BDIIWQZ..>#[))%55F8\))r   c                   ~     e Zd ZdZd fd	Zd ZddZd Zd Zd	 Z	d fd	Z
d Zd ZddZddZddZ fdZ xZS )DFloat11ModelPatcherao  
    Base ModelPatcher for all DFloat11 compressed models.
    Handles the generic DFloat11 weight format that removes the 'weight' attribute
    from compressed layers and uses custom decompression hooks.
    
    This class MUST be used for all DFloat11 models because the standard ModelPatcher
    will fail when trying to access .weight on compressed layers.
    r   Fc                     t                                          |||||           |                                  g | _        d S )N)sizeweight_inplace_update)super__init___patch_state_dictlora_hook_handles)selfrA   load_deviceoffload_devicerZ   r[   	__class__s         r   r]   zDFloat11ModelPatcher.__init__o   sG    ^$^sttt   !#r   c                    t          | j        j        d          rd S | j        j        t          | j        j                  j        }|t          v rCt          j        d|            t          |         	                                }d |D             n!t          j        d|                         ddhfd}|| j        _        d| j        j        _
        d S )	Npatched_for_loraz%[DF11] Supported df11_type for LoRA: c                     i | ]}d | d	S )zdiffusion_model.Nr$   ).0r5   s     r   
<dictcomp>z:DFloat11ModelPatcher._patch_state_dict.<locals>.<dictcomp>~   s#    SSS#7#77SSSr   z'[DF11] Unsupported df11_type for LoRA: model_lora_keys_unetadd_patchesc                  f    t          j                    } | d         j        }~ |v rS              S )Nr	   )inspectstackfunction)
call_stackcaller_functionfake_state_dictlora_loading_functionsstate_dict_funcs     r   new_state_dict_funczCDFloat11ModelPatcher._patch_state_dict.<locals>.new_state_dict_func   s=     J(m4O"888&&"?$$$r   T)rJ   rA   
state_dicttypemodel_configr   r
   logginginfokeysre   )r`   	df11_type	fake_keysrt   rq   rr   rs   s       @@@r   r^   z&DFloat11ModelPatcher._patch_state_dictv   s   4:(*<== 	F*/011:	***LLLLMMM*95::<<ISSSSSOOLN9NNOOO-o//O"8-!H	% 	% 	% 	% 	% 	% 	% !4
15
...r   c                     dS )a  
        DFloat11 compressed modules don't have a standard '.weight' attribute - 
        it's replaced with compressed tensors (encoded_exponent, sign_mantissa, etc.).
        ComfyUI's partial unloading mechanism uses get_key_weight() which fails
        on these modules, causing type comparison errors.
        
        TODO: Implement proper partial unloading that understands DFloat11's
        compressed tensor structure.
        r   r$   )r`   rb   memory_to_freeforce_patch_weightss       r   partially_unloadz%DFloat11ModelPatcher.partially_unload   s	     qr   c                    g }| j                                         D ]\  }}g }d}|                    d          D ]\  }}|                    |           |                    d          D ]\  }}||vrd} n|sYt	          |d          st          |          dk    r6|                    t          j                            |          |||f           |S )NFrecurseTcomfy_cast_weightsr   )	rA   named_modulesnamed_parametersappendrJ   rQ   r+   model_managementmodule_size)r`   loadingmodule_namer0   paramsskipnameparams           r   
_load_listzDFloat11ModelPatcher._load_list   s   #':#;#;#=#= 
	j 
	jKFD%66u6EE $ $ed####%66t6DD  ev%%DE &  jWV-ABB jc&kkTUoo 6 B B6 J JKY_aghiiir   c                    d}| j                                         D ]\  }}t          |d          r|g }t          |j                                                  D ]A\  }}t          |dd          t          |dd          z   }d|v r|                    |           B|D ]}|j        |= |dz  }| j        	                                 |dk    rt          j        d| d	           |S )
zYRemove ALL lora_hook forward pre-hooks from the model - not just ones we have handles forr   _forward_pre_hooksr    r!   r7   r	   z[DF11] Cleared z LoRA hooks from model)rA   r   rJ   listr   itemsr=   r   r_   clearrx   debug)r`   removednmhooks_to_removehook_idhook_fnfn_names           r    _clear_all_lora_hooks_from_modelz5DFloat11ModelPatcher._clear_all_lora_hooks_from_model   s   J,,.. 		! 		!DAqq.// !"$(,Q-A-G-G-I-I(J(J 8 8$GW%gz2>>R`bdAeAeeG"g--'..w777. ! !G,W5qLGG$$&&&Q;;MKGKKKLLLr   c                 r    | j                                         D ]\  }}t          |d          rd|_        dS )zAClear comfy_patched_weights flags to force re-decode on next loadcomfy_patched_weightsFN)rA   r   rJ   r   )r`   r   r   s      r   _reset_patched_weightsz+DFloat11ModelPatcher._reset_patched_weights   sI    J,,.. 	0 	0DAqq122 0*/'	0 	0r   Nc           	      b   |                                  5  | j        j        | j        k    }|r<t	          j        d           |                                  |                                  t          | j	                  dk    }|o|}t                                                       d}|                                 }	g }
|	                    d           |	D ]U}|d         }|d         }|d         }|d         }d                    |          }d	                    |          }t          |d
          rt!          |           |s	||z   |k     r||z  }|
                    ||||f           t          |d
          r|j        |_        d|_        || j        v r<t          |d          sg |_        |j                            | j        |                    || j        v r<t          |d          sg |_        |j                            | j        |                    |t1          ||          z  }W|
                    d           |
D ]}|d         }|d         }|d         }t          |d          r
|j        r|s4|D ]-}|                     d                    ||          |           .| d}|rU|| j	        v rLd|vrH|                    t9          | j	        |         |                    }| j                            |           d|_        |
D ]}|d                             |           |r.| j                            |           |                                 }d| j        _         d| j        _!        || j        _"        || j        _#        | j        | j        _        | $                    tJ          j&                  D ]} || ||||           | '                    | j(        d           t	          j        dt          | j                   d|            d d d            d S # 1 swxY w Y   d S )NA[DF11] Patches changed, clearing LoRA hooks and resetting weightsr   Treverser	   r9      	{}.weight{}.biasr   weight_functionbias_functionr   {}.{}	device_to.weightr'   Fforce_apply"[DF11] Load complete. LoRA hooks: , has_patches: ))use_ejectedrA   current_weight_patches_uuidpatches_uuidrx   ry   r   r   rQ   patchesr\   unpatch_hooksr   sortrT   rJ   r   r   r   prev_comfy_cast_weightsweight_wrapper_patchesr   extendr   r   r   patch_weight_to_deviceregister_forward_pre_hookr8   r_   to
model_sizemodel_lowvramlowvram_patch_counterr   model_loaded_weight_memoryget_all_callbacksr   ON_LOADapply_hooksforced_hooks)r`   r   lowvram_model_memoryr   	full_loadpatches_changedhas_patchesneed_new_hooksmem_counterr   load_completelyxr   r   r   
module_mem
weight_keybias_keyr   handlecallbackrc   s                        r   loadzDFloat11ModelPatcher.load   s
    ^	y ^	y"jDHYYO .abbb55777++--- dl++a/K(<_NGG!!###Koo''G OLLL&&& C CaDaD1qT
(//22
$++A..1233 +'*** Gj 8;O O O:-K#**J1f+EFFF1233 0010DA-+/A(!<<<"1&788 /,.)%,,T-H-TUUUt:::"1o66 -*,O**4+Fx+PQQQ4Q	BBB   ...$ / /aDaD1 1566 1;R [j  $ _ _E//q%0H0HT]/^^^^ !"]]]
! :jDL&@&@XU[E[E[88t|T^G_ak9l9lmmF*11&999*.''$ # #!	"""" 0
i((("oo// (-DJ$/0DJ, )DJ4?DJ1595FDJ2 22;3FGG ` `y*>@SU^____T.DAAALwc$BX>Y>Ywwjuwwxxx}^	y ^	y ^	y ^	y ^	y ^	y ^	y ^	y ^	y ^	y ^	y ^	y ^	y ^	y ^	y ^	y ^	y ^	ys   PP$$P(+P(c                 f   g }| j                                         D ]\  }}g }d}|                    d          D ]\  }}|                    |           |                    d          D ]\  }}||vrd} n|st	          |d          st          |          dk    rt          j                            |          }|dk    rQt          |t          j                  r7t          | j         |          s"|t          |j        |j        z  dz            z  }|                    ||||f           |S )NFr   Tr   r   ffffff?)rA   r   r   r   rJ   rQ   r+   r   r   r   nnLinearrN   intin_featuresout_features)	r`   r   r   r0   r   r   r   r   r   s	            r   _load_list_v1_5z$DFloat11ModelPatcher._load_list_v1_5%  sd   #':#;#;#=#= 	K 	KKFD%66u6EE $ $ed####%66t6DD  ev%%DE &  KWV-ABB Kc&kkTUoo#4@@HH1$$*VRY*G*G$.tz;GG [#s6+=@S+SVY+Y'Z'ZZ[&&IJJJr   c                 6   
 g } j                                         D ]y\  }}g 
|                    d          D ]\  }}
                    |           t	          
fd|                    d          D                       }|st          |d          st          
          dk    rt          j        	                    |          }|dk    rQt          |t          j                  r7t           j         |          s"|t          |j        |j        z  dz            z  }|}t          |d          rI fd}	| |	d	                    |          |          z  }| |	d
                    |          |          z  }|                    ||||
f           {|S )NFr   c              3   &   K   | ]\  }}|vV  d S Nr$   )rg   
param_namer   r   s      r   	<genexpr>z5DFloat11ModelPatcher._load_list_v2.<locals>.<genexpr>A  s-      oo4EJz/oooooor   Tr   r   r   c                 &   | j         v rt          j        |           S t          j        dd           }t	          j        |           \  }}}||dS |j        |k    st          |t                    r|                                |j	        z  S dS )Nr;   r   )
r   rE   rA   r=   r<   r   r   r   r   r?   )r5   r0   rD   r'   _r`   s        r   check_module_offload_memzDDFloat11ModelPatcher._load_list_v2.<locals>.check_module_offload_memK  s    $,..#?
C#P#PP&-dj:Mt&T&T':4:s'K'K1&.&.#$1"LK77:fo;^;^7#)<<>>K4H#HH qr   r   r   )rA   r   r   r   anyrJ   rQ   r+   r   r   r   r   r   rN   r   r   r   rT   )r`   r   r   r0   r   r   r   r   module_offload_memr   r   s   `         @r   _load_list_v2z"DFloat11ModelPatcher._load_list_v2;  s   #':#;#;#=#= 	^ 	^KF%+%<%<U%<%K%K * *!
Ej))))ooooI`I`imI`InInoooooD ^WV-ABB ^c&kkTUoo"3??GG
!OOFBI)F)FO.tz;GG Z"c&*<v?R*RUX*X&Y&YY
%/"6#788 j	! 	! 	! 	! 	! '*B*B;CUCUVaCbCbdj*k*kk&&*B*B9CSCST_C`C`bh*i*ii& 2JVU[\]]]r   c                    |                                  5  | j        j        | j        k    }|r<t	          j        d           |                                  |                                  t          | j	                  dk    }|o|}| 
                                 d}d}	d}
d}|                                 }g }g }d}|                    d           t          |          D ]\  }}|\  }}}}}d}t          ||t          d ||dz   |dz   t           j        j        z            D                       z             }||z   |z   |k     }d                    |          }d	                    |          }|s1t)          |d
          r!|s|}d}|
dz  }
||z  }t)          |d          r| j        }|rt	          j        d           t)          |d
          rg |_        g |_        || j	        v rS|r|                     |           n;t5          | j        |          \  }}}t7          || j	        ||          g|_        |	dz  }	|| j	        v rS|r|                     |           n;t5          | j        |          \  }}}t7          || j	        ||          g|_        |	dz  }	d}|                    ||||f           nDt)          |d
          rt;          |           |s|r||z  }|                    ||||f           n|}|r#t)          |d
          r|j        |_        d|_        || j         v r%|j        !                    | j         |                    || j         v r%|j        !                    | j         |                    |tE          ||          z  }|                    d           |D ]F}|d         }|d         }|d         }t)          |d          r|j#        dk    r7|D ]D} d                    ||           }!| $                    |!           |                     |!|           E| d}|rU|| j	        v rLd|vrH|%                    tM          | j	        |         |                    }"| j'                            |"           t           j        (                    |          rtR          j*        +                                 t	          j,        d                    ||                     d|_#        H|D ]}|d         -                    |           |D ]@}|d         }|d         }|D ]+} | .                    d                    ||                      ,A|
dk    rDt	          j        d                    |dz  |dz  |dz  |dz  |	                     d| j        _/        nkt	          j        d                    |dz  |dz  |                     d| j        _/        |r.| j        -                    |           | 0                                }| j        xj1        |	z  c_1        || j        _2        || j        _3        || j        _4        | j        | j        _        | 5                    tl          j7                  D ]}# |#| ||||           | 8                    | j9        d           t	          j        dt          | j'                   d|            d d d            d S # 1 swxY w Y   d S )Nr   r   Tr   Fc                     g | ]
}|d          S )r	   r$   )rg   x1s     r   
<listcomp>z0DFloat11ModelPatcher.load_v2.<locals>.<listcomp>{  s8      RX  RX  RX]_SUVWSX  RX  RX  RXr   r	   r   r   r   r   a)  [DF11] VRAM appears to be insufficient according to ComfyUI, this will likely cause errors due to conflicts with Comfy's native block swapping mechanism and DF11 weights. Consider enabling `cpu_offload` and increasing `cpu_offload_blocks` (available via the "DFloat11 Model Loader (Advanced)" noder9   r   r   r   r   r   r'   z&lowvram: loaded module regularly {} {}zyloaded partially; {:.2f} MB usable, {:.2f} MB loaded, {:.2f} MB offloaded, {:.2f} MB buffer reserved, lowvram patches: {}   zDloaded completely; {:.2f} MB usable, {:.2f} MB loaded, full load: {}r   r   r   ):r   rA   r   r   rx   ry   r   r   rQ   r   r   r   r   	enumeratemaxsumr+   r   NUM_STREAMSrT   rJ   force_cast_weightswarningr   r   r   r   r   r   r   r   r   r   r   r   r   unpin_weightr   r8   r_   is_device_cudar   r   synchronizer   r   pin_weight_to_devicer   r   r   r   r   model_offload_buffer_memoryr   r   r   r   r   )$r`   r   r   r   r   r   r   r   r   patch_counterlowvram_counterlowvram_mem_counterr   r   	offloadedoffload_bufferir   r   r   r   r   r   lowvram_weightpotential_offloadlowvram_fitsr   r   cast_weightr   rB   rC   r   r5   r   r   s$                                       r   load_v2zDFloat11ModelPatcher.load_v2Z  s	    U	y U	y #jDHYYO .abbb55777++--- dl++a/K(<_N    KMO"#oo''G OINLLL&&&!'** AC AC1?@<"J1f!&$'8JS  RX  RXcjklmnknopqrorsx  tJ  tV  pV  lV  dW  RX  RX  RX  NY  NY  9Y  %Z  %Z!*Z7:KKNbb(//22
$++A..  %WQ0D%E%E %' %):)-'1,+z9+"1&?@@ %$"5!  ;O  %R  S  S  Sq"677 -,.)*,!T\11. / 77
CCCC 9GtzS]8^8^5Ax1=j$,Xdfn1o1o0pA-)Q.M4<//. / 77AAAA8FtzS[8\8\5Ax/;HdlT`bj/k/k.lAO)Q.M"&K$$j!Q%?@@@@q"677 /+A...  ;L ;#z1'..
Aq&/IJJJJ): 071.B#C#C 0010DA-+/A(!<<<%,,T-H-TUUUt:::O**4+Fx+PQQQ4Q	BBB   ...$ / /aDaD11566 !.$66 # J JE!..E22C%%c***//y/IIII !]]]
! :jDL&@&@XU[E[E[88t|T^G_ak9l9lmmF*11&999)88CC -J**,,,FMMaQRSSTTT*.''$ # #!	"""" H HaD1# H HE--gnnQ.F.FGGGGH ""  Y  `  `  au  yD  aE  GR  Va  Gb  dw  {F  dG  IW  [f  Ig  iv  w  w  x  x  x+/
((cjjk  DO  lP  R]  al  Rm  ox  y  y  z  z  z+0
( 4JMM),,,"&//"3"3KJ,,=,, )DJ4?DJ15CDJ2595FDJ2 22;3FGG ` `y*>@SU^____T.DAAALwc$BX>Y>YwwjuwwxxxkU	y U	y U	y U	y U	y U	y U	y U	y U	y U	y U	y U	y U	y U	y U	y U	y U	y U	ys   Z3[[[c           
         |                                  5  d}d}d}|                                 }|                                 | j        j        }t          |          dk    r7t          j        j        }	t          ||	dz   z  |d         d                   g|	z  }
|D ]/}||z   | j        j        z
  |k     r n|\  }}}}}|t          |
          z   }t          |d          }t          |d          r|j        dk    rd}|D ]}d                    ||          }| j                            |d           }||sd} n|s|                                  d}|j        r,t          j                            | j        ||j                   n+t          j                            | j        ||j                   | j                            |           d                    |          }d	                    |          }|r| j        }|                    |           |t3          ||          z  }|r|| j        v re|r|                     |           nMt9          | j        |          \  }}}|j                            t?          || j        ||                     |dz  }|| j        v re|r|                     |           nMt9          | j        |          \  }}}|j                             t?          || j        ||                     |dz  }d}|r#t          |d          r|j!        |_"        d|_!        d|_        ||z  }tG          ||          }|
                    |           |
                    d           tI          j%        d
                    |                     |D ]+}| &                    d                    ||                     ,1d| j        _'        | j        xj(        |z  c_(        | j        xj)        |z  c_)        || j        _        tI          j*        d                    |dz  | j        j)        dz  |dz  | j        j(                             |cd d d            S # 1 swxY w Y   d S )NFr   r	   r   r   Tr   r   r   zfreed {}zmUnloaded partially: {:.2f} MB freed, {:.2f} MB remains loaded, {:.2f} MB buffer reserved, lowvram patches: {}r   )+r   r   r   rA   r   rQ   r+   r   r   minr   rJ   r   rT   backupgetr   inplace_updaterR   copy_to_paramr'   set_attr_parampopr   r   r   r   r   r   r   r   r   r   r   r   r   rx   r   r   r   r   r   ry   )r`   r   r~   r   hooks_unpatchedmemory_freedr   unload_listr   NSoffload_weight_factorunloadr   r   r   r   r   r   lowvram_possiblemove_weightr   r5   bkr   r   r  r   rB   rC   s                                r   partially_unload_v2z(DFloat11ModelPatcher.partially_unload_v2  sp    R	  R	 #OLM//++K!ZCN;!##+7*-nQ.GUVXYIZ*[*[(]`b(b%% >P >P!N2TZ5[[^jjjE?E<"J1f$6=R9S9S$S!#*1.B#C#C 1566 6P1;RVZ;Z;Z"&K!' 1 1%nnQ66![__S$77>#3 &.3 %#2 7 $ 2 2 4 4 426!0 W % 9 9$*c29 U U U U % : :4:sBI V V V KOOC000!,!3!3A!6!6J(//22H"  P&*&=Y"&;Ay&I&II
+ /)T\99#6 !7$($?$?
$K$K$K$K@Ntz[e@f@f$=Ax$%$5$<$<\*VZVbdprz={={$|$|$|$1Q$6M'4<77#6 !7$($?$?$I$I$I$I@Ntz[c@d@d$=Ax$%O$:$:<RVR^`lnv;w;w$x$x$x$1Q$6M*.K& 8716J+K+K 8898LA537A027/$
2),^=N)O)O-44Z@@@-11!444j&7&7&:&:;;;%+ P PE 55gnnQ6N6NOOOO (,DJ$J,,=,,J11\A115CDJ2L  I  P  P  Q]  al  Qm  os  oy  oT  Xc  od  ft  xC  fD  FJ  FP  Ff  g  g  h  h  heR	  R	  R	  R	  R	  R	  R	  R	  R	  R	  R	  R	  R	  R	  R	  R	  R	  R	 s   QQ$$Q(+Q(c                    |t          | d          sd S t          | d          s$| j        | _        | j        | _        | j        | _        ||| _        | j        dk    r&| j        | _        | j        | _        | j        | _        d S | j        dk    r&| j        | _        | j        | _        | j        | _        d S | j        dk    r&| j	        | _        | j
        | _        | j        | _        d S d S )Nload_version_load_list_v1v1zv1.5v2)rJ   r   r  r   load_v1r   partially_unload_v1r  r   r   r  r  )r`   r  s     r   patch_loading_methodsz*DFloat11ModelPatcher.patch_loading_methodsG  s    n(E(EFt_-- 	=!%D9DL'+'<D$# ,D$$"0DODI$($<D!!!&(("2DODI$($<D!!!$&&"0DODI$($<D!!! '&r   c                     t                                                      }t          | d          r|                    | j                   |S )Nr  )r\   clonerJ   r  r  )r`   new_model_patcherrc   s     r   r  zDFloat11ModelPatcher.clonec  sE    !GGMMOO4(( 	G33D4EFFF  r   )r   F)Nr   FFr   )r   r    r!   r"   r]   r^   r   r   r   r   r   r   r   r  r  r  r  __classcell__)rc   s   @r   rX   rX   f   sC        $ $ $ $ $ $6 6 62
 
 
 
     $0 0 0_y _y _y _y _y _yD  ,  >Vy Vy Vy VypS  S  S  S j= = = =8! ! ! ! ! ! ! ! !r   rX   )r+   folder_pathsr   torch.nnr   osrx   rl   comfy.model_patcherr   r   r   r   comfy.patcher_extensionr   comfy.quant_opsr   state_dict_shapesr
   r   r8   r@   rE   rN   r<   model_patcherModelPatcherrX   r$   r   r   <module>r+     s]               				   h h h h h h h h h h h h / / / / / / + + + + + + 1 1 1 1 1 1       *  , &' "V V V  * * *(C! C! C! C! C!5.; C! C! C! C! C!r   