
    +jn                         S SK r S SKrS SKrS SKJr  S SKrS SKrS SKrS SKJ	r	J
r
JrJr  S SKJr  S SKJr  SSKJr   " S S5      rS	 rS
rS rS rS r " S S\ R2                  R4                  5      rg)    N)LowVramPatchmove_weight_functionswipe_lowvram_weightget_key_weight)CallbacksMP)QuantizedTensor   )state_dict_mappingc                   ,    \ rS rSrSr0 r\S 5       rSrg)CastBufferManager   zVManages a reusable float16 buffer for dtype conversion - mirrors TensorManager patternc                    [        U [        5      (       a  [        R                  " U 5      n U [        R
                  ;   a[  [        R
                  U    nUR                  5       U:  a  US U $ [        R
                  U 	 [        R                  R                  5         [        R                  " U[        R                  U S9nU[        R
                  U '   U$ )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_buffer$CastBufferManager.get_float16_buffer   s    fc""\\&)F&///(11&9H~~:-,,!**62JJ""$[[5==P
-7""6*     N)	__name__
__module____qualname____firstlineno____doc__r   staticmethodr   __static_attributes__r!   r    r   r   r      s    `H r    r   c                    ^ ^ UU 4S jnU$ )Nc                   > U R                   nUR                  nUR                  5       nUR                  n[        R                  XT5      R                  U5      nUR                  U5         [        R                  R                  T	UT5        UR                  U5        g ! [         a  n[        ST SU 35        UeS nAff = f)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_hook get_hook_lora.<locals>.lora_hook'   s    \\^
 (::6NSSTbc&!	JJ''
KE
 	[!	  	EcU"QCPQG	s   ,!B 
C)B<<Cr!   )r:   r9   r;   s   `` r   get_hook_lorar=   &   s    "& r       c                     [        X5      u  p#nUc  g[        U S[        R                  5      nUc  UR                  nUR                  5       UR                  -  [        -  $ )Nr   manual_cast_dtype)get_key_weight_df11getattrr   float32r   r   itemsize"LOWVRAM_PATCH_ESTIMATE_MATH_FACTOR)modelr9   r+   set_funcconvert_funcmodel_dtypes         r   low_vram_patch_estimate_vramrJ   >   sX    %8%D"Fl~%!4emmDKll<<>K0003UUUr    c                 x    UR                  S5      nU nU H!  n[        US5      (       a    g[        X45      nM#     g)N.offloaded_tensorsTF)splithasattrrB   )rF   r9   partsparentparts        r   parent_is_offloadedrS   H   s>    IIcNEF6.//&  r    c                    S nS nUR                  SS5      n[        U5      S:  a   [        R                  R	                  X5      nO[        R                  R	                  XS   5      n[        USR                  US   5      S 5      n[        USR                  US   5      S 5      n[        XdS   S 5      nUc   Ub  [        R                  R	                  X5      nXRU4$ )NrL   r	   r>   r   zset_{}z
convert_{})rsplitlenr/   utilsget_attrrB   format)rF   r9   rG   rH   op_keysr+   ops          r   rA   rA   R   s    HLjja G
7|a%%e1[[!!%42xwqz:DAr<#6#6wqz#BDIQZ.>#[[))%5F\))r    c                      ^  \ rS rSrSrSU 4S jjrS rSS jrS rS r	S r
SU 4S	 jjrS
 rS rSS jrSS jrSS jrU 4S jrSrU =r$ )DFloat11ModelPatcherf   aS  
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.
c                 R   > [         TU ]  XX4US9  U R                  5         / U l        g )N)sizeweight_inplace_update)super__init___patch_state_dictlora_hook_handles)selfrF   load_deviceoffload_devicer`   ra   	__class__s         r   rc   DFloat11ModelPatcher.__init__o   s,    ^^st !#r    c                 0  ^^^ [        U R                  R                  S5      (       a  g U R                  R                  m[        U R                  R                  5      R
                  nU[        ;   aH  [        R                  " SU 35        [        U   R                  5       nU Vs0 s H	  nSU 3S _M     snmO [        R                  " SU 35        T" 5       mSS1mUUU4S jnX@R                  l        SU R                  R                  l
        g s  snf )	Npatched_for_loraz%[DF11] Supported df11_type for LoRA: zdiffusion_model.z'[DF11] Unsupported df11_type for LoRA: model_lora_keys_unetadd_patchesc                  l   > [         R                  " 5       n U S   R                  nA UT;   a  T$ T" 5       $ )Nr	   )inspectstackfunction)
call_stackcaller_functionfake_state_dictlora_loading_functionsstate_dict_funcs     r   new_state_dict_funcCDFloat11ModelPatcher._patch_state_dict.<locals>.new_state_dict_func   s8     J(m44O"88&&"$$r    T)rO   rF   
state_dicttypemodel_configr"   r
   logginginfokeysrl   )rf   	df11_type	fake_keysr9   rx   ru   rv   rw   s        @@@r   rd   &DFloat11ModelPatcher._patch_state_dictv   s    4::((*<==**//001::	**LL@LM*95::<IIRS#!1#7=SOLLB9+NO-/O"8-!H	% !4

15

. Ts   'Dc                     g)av  
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!   )rf   rh   memory_to_freeforce_patch_weightss       r   partially_unload%DFloat11ModelPatcher.partially_unload   s     r    c                    / nU R                   R                  5        H  u  p#/ nSnUR                  SS9 H  u  pgUR                  U5        M     UR                  SS9 H  u  pgXd;  d  M  Sn  O   U(       a  M\  [	        US5      (       d  [        U5      S:  d  M~  UR                  [        R                  R                  U5      X#U45        M     U$ )NFrecurseTcomfy_cast_weightsr   )	rF   named_modulesnamed_parametersappendrO   rV   r/   model_managementmodule_size)rf   loadingmodule_namer4   paramsskipnameparams           r   
_load_listDFloat11ModelPatcher._load_list   s    #'::#;#;#=KFD%66u6Ed#  F%66t6D%D  E 4WV-ABBc&kTUo 6 6 B B6 JKaghi $> r    c                    SnU R                   R                  5        H  u  p#[        US5      (       d  M  / n[        UR                  R                  5       5       H9  u  pV[        USS5      [        USS5      -   nSU;   d  M(  UR                  U5        M;     U H  nUR                  U	 US-  nM     M     U R                  R                  5         US:  a  [        R                  " SU S	35        U$ )
zYRemove ALL lora_hook forward pre-hooks from the model - not just ones we have handles forr   _forward_pre_hooksr"    r$   r;   r	   z[DF11] Cleared z LoRA hooks from model)rF   r   rO   listr   itemsrB   r   re   clearr}   debug)rf   removednmhooks_to_removehook_idhook_fnfn_names           r    _clear_all_lora_hooks_from_model5DFloat11ModelPatcher._clear_all_lora_hooks_from_model   s    JJ,,.DAq.//"$(,Q-A-A-G-G-I(J$G%gz2>R`bdAeeG"g-'..w7 )K  /G,,W5qLG  / / 	$$&Q;MMOG94JKLr    c                 ~    U R                   R                  5        H  u  p[        US5      (       d  M  SUl        M!     g)zAClear comfy_patched_weights flags to force re-decode on next loadcomfy_patched_weightsFN)rF   r   rO   r   )rf   r   r   s      r   _reset_patched_weights+DFloat11ModelPatcher._reset_patched_weights   s1    JJ,,.DAq122*/' /r    c           	        > U R                  5          U R                  R                  U R                  :g  nU(       a6  [        R
                  " S5        U R                  5         U R                  5         [        U R                  5      S:  nU=(       a    Un[        TU ]-  5         SnU R                  5       n	/ n
U	R                  SS9  U	 GHS  nUS   nUS   nUS   nUS   nSR                  U5      nS	R                  U5      n[        US
5      (       a  [!        U5        U(       d  X-   U:  a  X-  nU
R#                  XX45        [        US
5      (       a  UR$                  Ul        SUl        UU R(                  ;   a@  [        US5      (       d  / Ul        UR*                  R-                  U R(                  U   5        UU R(                  ;   a@  [        US5      (       d  / Ul        UR.                  R-                  U R(                  U   5        U[1        X5      -  nGMV     U
R                  SS9  U
 H  nUS   nUS   nUS   n[        US5      (       a  UR2                  (       a	  U(       d  M=  U H#  nU R5                  SR                  UU5      US9  M%     U S3nU(       aY  UU R                  ;   aI  SU;  aC  UR7                  [9        U R                  U   U5      5      nU R:                  R#                  U5        SUl        M     U
 H  nUS   R=                  U5        M     U(       a+  U R                  R=                  U5        U R?                  5       nSU R                  l         SU R                  l!        XR                  l"        XR                  l#        U R                  U R                  l        U RI                  [J        RL                  5       H  nU" XX#U5        M     U RO                  U RP                  SS9  [        R
                  " S[        U R:                  5       SU 35        S S S 5        g ! , (       d  f       g = f)NA[DF11] Patches changed, clearing LoRA hooks and resetting weightsr   Treverser	   r>      	{}.weight{}.biasr   weight_functionbias_functionr   {}.{}	device_to.weightr+   Fforce_apply"[DF11] Load complete. LoRA hooks: , has_patches: ))use_ejectedrF   current_weight_patches_uuidpatches_uuidr}   r~   r   r   rV   patchesrb   unpatch_hooksr   sortrY   rO   r   r   r   prev_comfy_cast_weightsweight_wrapper_patchesr   extendr   r   r   patch_weight_to_deviceregister_forward_pre_hookr=   re   to
model_sizemodel_lowvramlowvram_patch_counterr   model_loaded_weight_memoryget_all_callbacksr   ON_LOADapply_hooksforced_hooks)rf   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callbackri   s                        r   loadDFloat11ModelPatcher.load   s   "jjDDHYHYYO`b557++- dll+a/K(<_NG!#Koo'G OLLL&aDaD1qT
(//2
$++A.1233'* 8;O O-K#**J1+EF1233010D0DA-+/A(!<!<<"1&788,.)%%,,T-H-H-TUt:::"1o66*,OO**4+F+Fx+PQ4QBB= @    .$aDaD1 15661;R;R[j $E//q%0HT]/^ $ !"s']
!jDLL&@XU[E[88t||T^G_ak9lmF**11&9*.') %, %!	" % 

i("oo/ (-DJJ$/0DJJ, )JJ4?JJ1595F5FDJJ2 22;3F3FG*>U^_ H T..DALL=c$BXBX>Y=ZZijuivwx}  s   PP66
Qc                 z   / nU R                   R                  5        GH  u  p#/ nSnUR                  SS9 H  u  pgUR                  U5        M     UR                  SS9 H  u  pgXd;  d  M  Sn  O   U(       a  M]  [	        US5      (       d  [        U5      S:  d  M  [        R                  R                  U5      nUS:X  ab  [        U[        R                  5      (       aC  [        U R                   U5      (       d(  U[        UR                  UR                  -  S-  5      -  nUR                  XX445        GM     U$ )NFr   Tr   r   ffffff?)rF   r   r   r   rO   rV   r/   r   r   r   nnLinearrS   intin_featuresout_features)	rf   r   r   r4   r   r   r   r   r   s	            r   _load_list_v1_5$DFloat11ModelPatcher._load_list_v1_5%  s   #'::#;#;#=KFD%66u6Ed#  F%66t6D%D  E
 4WV-ABBc&kTUo#44@@H1$*VRYY*G*G.tzz;GG#s6+=+=@S@S+SVY+Y'ZZ&IJ $>" r    c                   ^ ^
 / nT R                   R                  5        GHf  u  p#/ m
UR                  SS9 H  u  pET
R                  U5        M     [	        U
4S jUR                  SS9 5       5      nU(       a  M\  [        US5      (       d  [        T
5      S:  d  M~  [        R                  R                  U5      nUS:X  ab  [        U[        R                  5      (       aC  [        T R                   U5      (       d(  U[        UR                  UR                   -  S-  5      -  nUn[        US5      (       a:  U 4S jn	X" S	R#                  U5      U5      -  nX" S
R#                  U5      U5      -  nUR                  XX#T
45        GMi     U$ )NFr   c              3   2   >#    U  H  u  pUT;  v   M     g 7fNr!   ).0
param_namer   r   s      r   	<genexpr>5DFloat11ModelPatcher._load_list_v2.<locals>.<genexpr>A  s     oIn4EJz/Ins   Tr   r   r   c                 F  > U TR                   ;   a  [        TR                  U 5      $ [        TR                  SS 5      n[	        TR                  U 5      u  n  nUb  Uc  gUR
                  U:w  d  [        U[        5      (       a  UR                  5       UR                  -  $ g)Nr@   r   )
r   rJ   rF   rB   rA   r   r   r   r   rD   )r9   r4   rI   r+   _rf   s        r   check_module_offload_memDDFloat11ModelPatcher._load_list_v2.<locals>.check_module_offload_memK  s    $,,.#?

C#PP&-djj:Mt&T':4::s'K1&.&.#$"LLK7:fo;^;^#)<<>K4H4H#HH r    r   r   )rF   r   r   r   anyrO   rV   r/   r   r   r   r   r   rS   r   r   r   rY   )rf   r   r   r4   r   r   r   r   module_offload_memr   r   s   `         @r   _load_list_v2"DFloat11ModelPatcher._load_list_v2;  sf   #'::#;#;#=KF%+%<%<U%<%K!
j) &LoI`I`imI`InooD4WV-ABBc&kTUo"33??G
!OFBII)F)F.tzz;GG"c&*<*<v?R?R*RUX*X&YY
%/"6#788	! '*B;CUCUVaCbdj*kk&&*B9CSCST_C`bh*ii& 2U[\]5 $>6 r    c                    U R                  5          U R                  R                  U R                  :g  nU(       a6  [        R
                  " S5        U R                  5         U R                  5         [        U R                  5      S:  nU=(       a    UnU R                  5         SnSn	Sn
SnU R                  5       n/ n/ nSnUR                  SS9  [        U5       GH  u  nnUu  nnnnnSn[        UU[        UUS-   US-   [         R"                  R$                  -     Vs/ s H  nUS   PM
     sn5      -   5      nUU-   U-   U:  nSR'                  U5      nSR'                  U5      nU(       d9  [)        US	5      (       a(  U(       d!  UnSnU
S-  n
UU-  n[)        US
5      (       a  M  U R*                  nU(       Ga  [        R,                  " S5        [)        US	5      (       a  / Ul        / Ul        UU R                  ;   aV  U(       a  U R3                  U5        O=[5        U R                  U5      u  nnn [7        UU R                  U U5      /Ul        U	S-  n	UU R                  ;   aV  U(       a  U R3                  U5        O=[5        U R                  U5      u  nnn [7        UU R                  U U5      /Ul        U	S-  n	SnUR9                  UUUU45        OG[)        US	5      (       a  [;        U5        U(       d  U(       a  UU-  nUR9                  UUUU45        OUnU(       a)  [)        US	5      (       a  UR<                  Ul        SUl        UU R@                  ;   a(  UR.                  RC                  U R@                  U   5        UU R@                  ;   a(  UR0                  RC                  U R@                  U   5        U[E        UU5      -  nGM     UR                  SS9  U GHF  nUS   nUS   nUS   n[)        US5      (       a  URF                  S:X  a  M6  U H6  n!SR'                  UU!5      n"U RI                  U"5        U R3                  U"US9  M8     U S3nU(       aY  UU R                  ;   aI  SU;  aC  URK                  [M        U R                  U   U5      5      n#U RN                  R9                  U#5        [         R"                  RQ                  U5      (       a  [R        RT                  RW                  5         [        RX                  " SR'                  UU5      5        SUl#        GMI     U H  nUS   R[                  U5        M     U H7  nUS   nUS   nU H$  n!U R]                  SR'                  UU!5      5        M&     M9     U
S:  aG  [        R
                  " SR'                  US-  US-  US-  US-  U	5      5        SU R                  l/        Op[        R
                  " SR'                  US-  US-  U5      5        SU R                  l/        U(       a+  U R                  R[                  U5        U Ra                  5       nU R                  =Rb                  U	-  sl1        XR                  l2        XR                  l3        XR                  l4        U R                  U R                  l        U Rk                  [l        Rn                  5       H  n$U$" XX#U5        M     U Rq                  U Rr                  SS9  [        R
                  " S[        U RN                  5       SU 35        S S S 5        g s  snf ! , (       d  f       g = f)Nr   r   Tr   Fr	   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)" noder>   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   rF   r   r   r}   r~   r   r   rV   r   r   r   r   	enumeratemaxsumr/   r   NUM_STREAMSrY   rO   force_cast_weightswarningr   r   r   r   r   r   r   r   r   r   r   r   r   unpin_weightr   r=   re   is_device_cudar   r   synchronizer   r   pin_weight_to_devicer   r   r   r   r   model_offload_buffer_memoryr   r   r   r   r   )%rf   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x1potential_offloadlowvram_fitsr   r   cast_weightr   rG   rH   r   r9   r   r   s%                                        r   load_v2DFloat11ModelPatcher.load_v2Z  s9    #jjDDHYHYYO`b557++- dll+a/K(<_N  KMO"#oo'G OINLLL&!'*1?@<"J1f!&$'8JScjklmnknopqrorsx  tJ  tJ  tV  tV  pV  dW  RX  dW]_SUVWSX  dW  RX  NY  9Y  %Z!*Z7:KKNbb(//2
$++A. WQ0D%E%E'):)-'1,+z9+"1&?@@$"55!OO  %R  Sq"677,.)*,!T\\1. 77
C 9GtzzS]8^5Ax1=j$,,Xdfn1o0pA-)Q.M4<</. 77A8FtzzS[8\5Ax/;HdllT`bj/k.lAO)Q.M"&K$$j!Q%?@q"677+A. L#z1'..
Aq&/IJ):71.B#C#C010D0DA-+/A(!<!<<%%,,T-H-H-TUt:::OO**4+F+Fx+PQ4Q	BBC +F    .$aDaD11566..$6 #E!..E2C%%c*//y/I $
 !"s']
!jDLL&@XU[E[88t||T^G_ak9lmF**11&9))88CCJJ**,FMMaQRST*.'- %0 %!	" % aD1#E--gnnQ.FG $  "  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  x+/

(cjjk  DO  lP  R]  al  Rm  ox  y  z+0

(JJMM),"&//"3KJJ,,=, )JJ4?JJ15CJJ2595F5FDJJ2 22;3F3FG*>U^_ H T..DALL=c$BXBX>Y=ZZijuivwxk  @ RXA  s   D\7"\21W8\72\77
]c           
      	   U R                  5          SnSnSnU R                  5       nUR                  5         U R                  R                  n[        U5      S:  a5  [        R                  R                  n	[        XS-   -  US   S   5      /U	-  n
U GHn  nX(-   U R                  R                  -
  U:  a    GOMUu  ppnU[        W
5      -   n[        US5      n[        US5      (       d  MY  UR                  S:X  d  Mk  SnU H  nSR                  UU5      nU R                  R                  US 5      nUc  M6  U(       d  Sn  OU(       d  U R!                  5         SnUR"                  (       a6  [        R$                  R'                  U R                  UUR(                  5        O5[        R$                  R+                  U R                  UUR(                  5        U R                  R-                  U5        M     SR                  U5      nS	R                  U5      nU(       d  GM  U R.                  nUR1                  U5        U[3        X5      -  nU(       a  UU R4                  ;   ai  U(       a  U R7                  U5        OP[9        U R                  U5      u  nnnUR:                  R=                  [?        UU R4                  UU5      5        US-  nUU R4                  ;   ai  U(       a  U R7                  U5        OP[9        U R                  U5      u  nnnUR@                  R=                  [?        UU R4                  UU5      5        US-  nSnU(       a)  [        US5      (       a  URB                  Ul"        SUl!        SUl        X]-  n[G        UU5      nU
R=                  U5        U
R-                  S5        [H        RJ                  " S
R                  U5      5        U H$  nU RM                  SR                  UU5      5        M&     GMq     SU R                  l'        U R                  =RP                  U-  sl(        U R                  =RR                  U-  sl)        XR                  l        [H        RT                  " SR                  US-  U R                  RR                  S-  US-  U R                  RP                  5      5        UsS S S 5        $ ! , (       d  f       g = f)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   rF   r  rV   r/   r   r   minr   rO   r   rY   backupgetr   inplace_updaterW   copy_to_paramr+   set_attr_parampopr   r   r   r   r   r   r   r   r   r   r   r   r   r}   r   r  r   r   r   r~   )rf   r   r   r   hooks_unpatchedmemory_freedr  unload_listr
  NSoffload_weight_factorunloadr   r   r   r   r   r  lowvram_possiblemove_weightr   r9   bkr   r   r  r   rG   rH   s                                r   partially_unload_v2(DFloat11ModelPatcher.partially_unload_v2  sW   #OLM//+K!ZZCCN;!#++77*-nQ.GUVXYIZ*[(]`b(b%%!2TZZ5[5[[^jj?E<"f$6=R9S$S!#*1.B#C 15661;R;RVZ;Z"&K!'%nnQ6![[__S$7>#3.3 %#2 $ 2 2 426!00 % 9 9$**c299 U % : :4::sBII V KKOOC0! "($ "-!3!3A!6J(//2H"{&*&=&=Y"&;A&II
+)T\\9#6$($?$?
$K@Ntzz[e@f$=Ax$%$5$5$<$<\*VZVbVbdprz={$|$1Q$6M'4<<7#6$($?$?$I@Ntzz[c@d$=Ax$%OO$:$:<RVR^R^`lnv;w$x$1Q$6M*.K&716J+K+K898L8LA537A027/$2),^=N)O-44Z@-11!4j&7&7&:;%+E 55gnnQ6NO &,{ &B (,DJJ$JJ,,=,JJ11\A15CJJ2LL  I  P  P  Q]  al  Qm  os  oy  oy  oT  oT  Xc  od  ft  xC  fD  FJ  FP  FP  Ff  Ff  g  he  s&   CS
-S
?6S
9C&S
$JS


Sc                 `   Uc  [        U S5      (       d  g [        U S5      (       d3  U R                  U l        U R                  U l        U R
                  U l        Ub  Xl        U R                  S:X  a4  U R                  U l        U R                  U l        U R                  U l        g U R                  S:X  a4  U R                  U l        U R                  U l        U R                  U l        g U R                  S:X  a4  U R                  U l        U R                  U l        U R                  U l        g g )Nload_version_load_list_v1v1zv1.5v2)rO   r   r(  r   load_v1r   partially_unload_v1r'  r   r   r  r$  )rf   r'  s     r   patch_loading_methods*DFloat11ModelPatcher.patch_loading_methodsG  s    n(E(Et_--!%D99DL'+'<'<D$# ,$"00DODI$($<$<D!&("22DODI$($<$<D!$&"00DODI$($<$<D! 'r    c                 |   > [         TU ]  5       n[        U S5      (       a  UR                  U R                  5        U$ )Nr'  )rb   clonerO   r-  r'  )rf   new_model_patcherri   s     r   r0  DFloat11ModelPatcher.clonec  s6    !GMO4((33D4E4EF  r    )r   r(  r   r+  r'  re   r   r,  )r   F)Nr   FFr   )r"   r#   r$   r%   r&   rc   rd   r   r   r   r   r   r   r   r  r$  r-  r0  r(   __classcell__)ri   s   @r   r]   r]   f   sV    $62
 $0_yD,>VypS j=8! !r    r]   )r/   folder_pathsr   torch.nnr   osr}   rp   comfy.model_patcherr   r   r   r   comfy.patcher_extensionr   comfy.quant_opsr   state_dict_shapesr
   r   r=   rE   rJ   rS   rA   model_patcherModelPatcherr]   r!   r    r   <module>r=     sj        	   h h / + 1 *, &' "V*(C!5..;; C!r    