
     3j/                     
   S SK r S SKrS SKrS SKrS SKrS SKrSSKJrJ	r	  S r
S r\" 5       r " S S\R                  5      r " S S	\R                  R                   5      r " S
 S\R$                  R&                  5      rS rg)    N   )dequantize_tensoris_quantizedc                 r    U nUR                  S5       H   n[        X#5      (       a  [        X#5      nM     g   g)N.FT)splithasattrgetattr)objchained_attrprobeattrs       =/home/wildlama/comfy/ComfyUI/custom_nodes/ComfyUI-GGUF/ops.pychained_hasattrr      s9    E""3'5E(E	 (
     c                     S n SSK Jn  [        [        S5      (       d  [        R
                  " S5        U $ UR                  [        R                  5      UR                  S5      :  a  [        R
                  " S5        U $ [        [        S5      (       a  [        R
                  " S	5        U $ [        R
                  " S
5        [        R                  R                  $ )Nc                      S nU$ )Nc                     U $ N )xs    r   noopKget_torch_compiler_disable_decorator.<locals>.dummy_decorator.<locals>.noop   s    Hr   r   )argskwargsr   s      r   dummy_decorator=get_torch_compiler_disable_decorator.<locals>.dummy_decorator   s    	r   r   )versionzcompiler.disablez9ComfyUI-GGUF: Torch too old for torch.compile - bypassingz2.8z)ComfyUI-GGUF: Allowing full torch compilez-_dynamo.config.nontraceable_tensor_subclassesz3ComfyUI-GGUF: Allowing full torch compile (nightly)zCComfyUI-GGUF: Partial torch compile only, consider updating pytorch)
	packagingr   r   torchlogginginfoparse__version__compilerdisable)r   r   s     r   $get_torch_compiler_disable_decoratorr'      s    
 "5"455PQ	u((	)W]]5-A	A@AuMNNJKZ[~~%%%r   c                      ^  \ rS rSrSr/ S.U 4S jjr/ S.U 4S jjrU 4S jrS rS r	U 4S	 jr
U 4S
 jr\S 5       rSrU =r$ )
GGMLTensor,   z6
Main tensor-like class for storing quantized weights
)patchesc                F   > [         TU ]  5         Xl        X l        X0l        g r   )super__init__tensor_typetensor_shaper+   )selfr/   r0   r+   r   r   	__class__s         r   r.   GGMLTensor.__init__0   s    &(r   c                ,   > [         TU ]  " U /UQ70 UD6$ r   )r-   __new__)clsr/   r0   r+   r   r   r2   s         r   r5   GGMLTensor.__new__6   s    ws4T4V44r   c                    > [         TU ]  " U0 UD6n[        U SS 5      Ul        [        U SUR                  R
                  5      Ul        [        U S/ 5      R                  5       Ul        U$ )Nr/   r0   r+   )	r-   tor
   r/   datashaper0   copyr+   )r1   r   r   newr2   s       r   r9   GGMLTensor.to9   s]    gj$)&)!$t<"4HdIr2779
r   c                     U $ r   r   r1   r   r   s      r   cloneGGMLTensor.clone@       r   c                     U $ r   r   r@   s      r   detachGGMLTensor.detachC   rC   r   c                    >  [         TU ]  " U0 UD6$ ! [         a#  n[        R                  " SU 35         S nAg S nAff = f)Nzignoring 'copy_' on tensor: )r-   copy_	Exceptionr!   warning)r1   r   r   er2   s       r   rH   GGMLTensor.copy_F   sF    	@7=$1&11 	@OO:1#>??	@s    
A ;A c           
         > [         TU ]  " U/UQ70 UD6n[        U[        U SS 5      U[        U S/ 5      R	                  5       S9$ )Nr/   r+   )r/   r0   r+   )r-   	new_emptyr)   r
   r<   )r1   sizer   r   
new_tensorr2   s        r   rN   GGMLTensor.new_emptyM   sP    W&t=d=f=
%dM4@#!$	26;;=	
 	
r   c                 f    [        U S5      (       d  U R                  5       U l        U R                  $ )Nr0   )r	   rO   r0   )r1   s    r   r;   GGMLTensor.shapeW   s)    t^,, $		D   r   )r+   r0   r/   )__name__
__module____qualname____firstlineno____doc__r.   r5   r9   rA   rE   rH   rN   propertyr;   __static_attributes____classcell__r2   s   @r   r)   r)   ,   sX     BD   @B 5 5@
 ! !r   r)   c                      ^  \ rS rSrSrSrSrSrSrS\	R                  R                  \	R                  R                  1rSSS.S jrU 4S jrS	 rU 4S
 jrS rS r\" 5       SS j5       rU 4S jrS rSrU =r$ )	GGMLLayer]   z;
This (should) be responsible for de-quantizing on the fly
TNFweightbiasc                x    Uc  U R                   nUc  U R                  n[        U5      =(       d    [        U5      $ r   )ra   rb   r   )r1   ra   rb   s      r   is_ggml_quantizedGGMLLayer.is_ggml_quantizedg   s3    >[[F<99DF#9|D'99r   c                   > UR                  U S35      UR                  U S35      peU R                  XVS9(       d)  [        U [        R                  R
                  5      (       a  U R                  " X/UQ70 UD6$ [        U [        R                  R                  5      (       a3  U R                  R                  S   S:  a  U R                  " X/UQ70 UD6$ [        TU ],  " X/UQ70 UD6$ )Nra   rb   r`   r   i   )getrd   
isinstancer    nnLinearggml_load_from_state_dict	Embeddingra   r;   r-   _load_from_state_dict)r1   
state_dictprefixr   r   ra   rb   r2   s          r   rm   GGMLLayer._load_from_state_dictn   s    !~~&78*..F8SW:Y!!!;z$PUPXPXP_P_?`?`11*VtVvVVdEHH..//DKK4E4Ea4HY4W11*VtVvVVw,ZQ$Q&QQr   c                    [        U5      nUR                  5        Hs  u  pXS  S:X  a%  [        R                  R	                  U
SS9U l        M2  XS  S:X  a(  U
b%  [        R                  R	                  U
SS9U l        Mb  UR                  U	5        Mu     U R
                  c  [        U [        R                  R                  5      (       ab  [        R                  " U R                  U R                  5      n
[        R                  R	                  U
SS9U l        UR                  US-   5        [        U R
                  SS5      (       a  SU l        g g )Nra   F)requires_gradrb   is_largest_weightT)lenitemsr    ri   	Parameterra   rb   appendrh   rj   zerosin_featuresout_featuresr
   largest_layer)r1   rn   ro   local_metadatastrictmissing_keysunexpected_keys
error_msgs
prefix_lenkvs              r   rk   #GGMLLayer.ggml_load_from_state_dictx   s   [
##%CA~)#hh00%0H;6)am!HH..q.F	&&q) & ;;:dEHHOO#D#DD,,d.?.?@A((,,Qe,DDKx0 4;; 3U;;!%D <r   c                 r   > U R                  5       (       a  U R                  " U0 UD6$ [        TU ]  " U0 UD6$ r   )rd   ggml_save_to_state_dictr-   _save_to_state_dict)r1   r   r   r2   s      r   r   GGMLLayer._save_to_state_dict   s=    !!##//@@@w*D;F;;r   c                 \   [         R                  " U R                  [         R                  " S5      S9nXAUS-   '   U R                  b:  [         R                  " U R                  [         R                  " S5      S9nXQUS-   '   U R
                  (       a  [        U R                  SU R                  R                  5      nU R                  (       a  U R                  S:w  a  U R                  O[         R                  n[         R                  " U[         R                  " S5      US.6nXUS-   '   g )	Nmeta)devicera   rb   r0   targetr   dtypeztemp.weight)r    
zeros_likera   r   rb   r{   r
   r;   dequant_dtypefloat16empty
get_weight)	r1   destinationro   	keep_varsra   rb   r;   r   temps	            r   r   !GGMLLayer.ggml_save_to_state_dict   s    !!$++ell66JK)/FX%&99 ##DIIell66JKD+/( DKK9J9JKE*.*<*<ASASW_A_D&&ejererE;;ell6.B%PD26./r   c                    Uc  g / nUR                   n[        US/ 5       H  u  pVU[        XT5      -  nM     [        XU R                  5      n[        U[        5      (       a  [        R                  " U5      n[        U5      S:  an  U R                  c"  [        R                  R                  X7W5      nU$ U R                  S:X  a  UOU R                  n[        R                  R                  X7WU5      nU$ )Nr+   r   r   )r   r
   move_patch_to_devicer   r   rh   r)   r    Tensorrt   patch_dtypecomfyloracalculate_weight)	r1   tensorr   
patch_listr   r+   keyra   r   s	            r   r   GGMLLayer.get_weight   s    > 
#FIr:LG.w??J ; #6$2D2DE fj))\\&)F z?Q'44ZM
  (,'7'78'CeIYIY44ZkZr   c                    Ub2  Uc  [        US[        R                  5      nUc  UnUc  UR                  nS n[        R
                  R                  U5      nU R                  bJ  U R                  U R                  R                  U5      U5      n[        R                  R                  XTX6SS9nU R                  U R                  R                  U5      U5      n[        R                  R                  XrX6SS9nXu4$ )Nr   F)non_blockingr<   )r
   r    float32r   r   model_managementdevice_supports_non_blockingrb   r   r9   opscast_tora   )sinputr   r   
bias_dtyperb   r   ra   s           r   cast_bias_weightGGMLLayer.cast_bias_weight   s    }w>!"
~--JJ6R66<<		& 159D99$$Tv_d$eDahhkk&159""6&Z_"`|r   c                    > U R                  5       (       a  U R                  " U/UQ70 UD6nO[        TU ]  " U/UQ70 UD6n[	        U[
        5      (       a  [        R                  " U5      nU$ r   )rd   forward_ggml_cast_weightsr-   forward_comfy_cast_weightsrh   r)   r    r   )r1   r   r   r   outr2   s        r   r   $GGMLLayer.forward_comfy_cast_weights   sg    !!##00HHHC'4ULTLVLC c:&&,,s#C
r   c                     [         er   )NotImplementedError)r1   r   s     r   r   #GGMLLayer.forward_ggml_cast_weights   s    !!r   )rb   r{   ra   )NNNN)rT   rU   rV   rW   rX   comfy_cast_weightsr   r   r{   ggufGGMLQuantizationTypeF32F16torch_compatible_tensor_typesrd   rm   rk   r   r   r   torch_compiler_disabler   r   r   rZ   r[   r\   s   @r   r^   r^   ]   s     MKM%)4+D+D+H+H$JcJcJgJg$h!*.T :R&(<
F*6  &	" "r   r^   c                      \ rS rSrSr " S S\\R                  R                  R                  5      r	 " S S\\R                  R                  R                  5      r
 " S S\\R                  R                  R                  5      r " S	 S
\\R                  R                  R                  5      r " S S\\R                  R                  R                  5      rSrg)GGMLOps   z8
Dequantize weights on the fly before doing the compute
c                   $    \ rS rSrSS jrS rSrg)GGMLOps.Linear   Nc                     [         R                  R                  R                  U 5        Xl        X l        S U l        S U l        g r   )r    ri   Moduler.   ry   rz   ra   rb   )r1   ry   rz   rb   r   r   s         r   r.   GGMLOps.Linear.__init__   s4    HHOO$$T*  + ,DKDIr   c                 |    U R                  U5      u  p#[        R                  R                  R	                  XU5      $ r   )r   r    ri   
functionallinearr1   r   ra   rb   s       r   r   (GGMLOps.Linear.forward_ggml_cast_weights   s1    007LF88&&--eTBBr   )rb   ry   rz   ra   )TNN)rT   rU   rV   rW   r.   r   rZ   r   r   r   rj   r      s    		Cr   rj   c                       \ rS rSrS rSrg)GGMLOps.Conv2d   c                 L    U R                  U5      u  p#U R                  XU5      $ r   )r   _conv_forwardr   s       r   r   (GGMLOps.Conv2d.forward_ggml_cast_weights   s'    007LF%%eT::r   r   NrT   rU   rV   rW   r   rZ   r   r   r   Conv2dr      s    	;r   r   c                       \ rS rSrSS jrSrg)GGMLOps.Embedding   Nc           	         UnU R                   R                  [        R                  :X  d(  U R                   R                  [        R                  :X  a  S nU R                  XR                  US9u  pE[        R                  R                  R                  XU R                  U R                  U R                  U R                  U R                  5      R                  US9$ )Nr   )r   )ra   r   r    r   bfloat16r   r   ri   r   	embeddingpadding_idxmax_norm	norm_typescale_grad_by_freqsparser9   )r1   r   	out_dtypeoutput_dtypera   _biass         r   r   +GGMLOps.Embedding.forward_ggml_cast_weights   s    $L{{  EMM1T[[5F5F%..5X 	 11$||S\1]MF88&&00t//PTPgPgimititb|b$%r   r   r   r   r   r   r   rl   r      s    	%r   rl   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )GGMLOps.LayerNormi  c                    > U R                   c  [        TU ]	  U5      $ U R                  U5      u  p#[        R
                  R                  R                  XR                  X#U R                  5      $ r   )
ra   r-   r   r   r    ri   r   
layer_normnormalized_shapeeps)r1   r   ra   rb   r2   s       r   r   +GGMLOps.LayerNorm.forward_ggml_cast_weights  s\    {{"w9%@@007LF88&&11%9N9NPV^b^f^fggr   r   )rT   rU   rV   rW   r   rZ   r[   r\   s   @r   	LayerNormr     s    	h 	hr   r   c                       \ rS rSrS rSrg)GGMLOps.GroupNormi  c                     U R                  U5      u  p#[        R                  R                  R	                  XR
                  X#U R                  5      $ r   )r   r    ri   r   
group_norm
num_groupsr   r   s       r   r   +GGMLOps.GroupNorm.forward_ggml_cast_weights  s>    007LF88&&11%&X\X`X`aar   r   Nr   r   r   r   	GroupNormr     s    	br   r   r   N)rT   rU   rV   rW   rX   r^   r   r   manual_castrj   r   rl   r   r   rZ   r   r   r   r   r      s    CEII1188 C;EII1188 ;
%Iuyy44>> %hIuyy44>> hbIuyy44>> br   r   c                 (  ^ [        U [        R                  5      (       a  U R                  TSS9$ [        U [        5      (       a  [	        U4S jU  5       5      $ [        U [
        5      (       a  U  Vs/ s H  n[        UT5      PM     sn$ U $ s  snf )NT)r   c              3   <   >#    U  H  n[        UT5      v   M     g 7fr   )r   ).0r   r   s     r   	<genexpr>'move_patch_to_device.<locals>.<genexpr>  s     Cd)!V44ds   )rh   r    r   r9   tuplelistr   )itemr   r   s    ` r   r   r     sy    $%%wwvDw11	D%	 	 CdCCC	D$		9=>A$Q/>> ?s   4B)r   r    r!   	comfy.opsr   
comfy.loracomfy.model_managementdequantr   r   r   r'   r   r   r)   ri   r   r^   r   r   r   r   r   r   r   <module>r      su          4&* >? /! /!bD" D"L,beii## ,b\r   