
     3j20                        S SK r S SKrS SKJr  S\ R                  R                  \ R                  R
                  4rS rS rSS jr	SS jr
S rS rS	 rSS
 jrSS jrSS jrSS jrSS jrSS jrSrSrS rSS jrSS jrSS jrSS jrSS jr\R8                  " / SQ\R:                  S9rSS jrSS jr \ R                  RB                  \\ R                  RD                  \\ R                  RF                  \\ R                  RH                  \\ R                  RJ                  \\ R                  RL                  \\ R                  RN                  \\ R                  RP                  \\ R                  RR                  \\ R                  RT                  \\ R                  RV                  \\ R                  RX                  \\ R                  RZ                  \ 0r.g)    N)tqdmc                 @    U S L =(       d    [        U SS 5      [        ;   $ )Ntensor_type)getattrTORCH_COMPATIBLE_QTYPEStensors    A/home/wildlama/comfy/ComfyUI/custom_nodes/ComfyUI-GGUF/dequant.pyis_torch_compatibler   	   s     T>\WV]DAE\\\    c                 "    [        U 5      (       + $ N)r   r   s    r
   is_quantizedr      s    "6***r   c           
         [        U SS 5      n[        U SU R                  5      nU[        ;   a  U R                  U5      $ U[        ;   a.  US:X  a  UOUn[        U R                  X4US9R                  U5      $ [        R                  " S[        US[        U5      5       35        [        R                  R                  U R                  5       R                  5       U5      n[        R                  " U5      R                  U R                   US9$ )Nr   tensor_shapetargetdtypez)Falling back to numpy dequant for qtype: name)r   shaper   todequantize_functions
dequantizedatar   writereprggufquantscpunumpytorch
from_numpydevice)r	   r   dequant_dtypeqtypeoshapenews         r
   dequantize_tensorr(      s    FM40EV^V\\:F''yy	&	&!.(!:&++uMJMMeTT 	

>wufVZ[`Va?b>cdekk$$VZZ\%7%7%95A$''U'CCr   c                 6   [         R                  U   u  pE[        U   nU R                  SU R                  S   45      R                  [        R                  5      nUR                  5       U-  nUR                  X45      n	U" XXS5      n	U	R                  U5      $ )z.
Dequantize tensor back to usable shape/dtype
)	r   GGML_QUANT_SIZESr   reshaper   viewr!   uint8numel)
r   r%   r&   r   
block_size	type_sizedequantize_blocksrowsn_blocksblockss
             r
   r   r      s     !11%8J,U3<<	TZZ^
d5;; 	 zz|y(H\\8/0Fv9DF>>&!!r   c                     U R                  [        R                  5      R                  [        R                  5      n U S S 2S4   U S S 2S4   S-  -  U S S 2S4   S-  -  U S S 2S4   S-  -  R                  S5      $ )Nr                     r-   r!   r.   r   int32	unsqueezexs    r
   	to_uint32rB   .   so    	u{{u{{+AadGa1gl"Qq!tW]2Qq!tW]BMMaPPr   c                     U R                  [        R                  5      R                  [        R                  5      n U S S 2S4   U S S 2S4   S-  -  R                  S5      $ )Nr   r7   r8   r=   r@   s    r
   	to_uint16rD   3   sM    	u{{u{{+AadGa1gl"--a00r   c                     U R                   S   n[        U5      U[        U5      -
  /-   n[        R                  " XSS9$ )Nr7   dim)r   listsumr!   split)r5   argsn_maxdimss       r
   split_block_dimsrN   7   s:    LLOE:T*++D;;v++r   c                     U R                  [        R                  5      R                  [        R                  5      S-  R                  [        R
                  5      $ )Nr:   )r-   r!   int16r   r>   float32)r5   r0   r1   r   s       r
   dequantize_blocks_BF16rR   =   s8    KK$''4:@@OOr   c                     [        U S5      u  pEUR                  [        R                  5      R	                  U5      nUR                  [        R
                  5      nXE-  $ )Nr9   )rN   r-   r!   float16r   int8)r5   r0   r1   r   drA   s         r
   dequantize_blocks_Q8_0rW   A   sF    FA&DA	u}}  'A	uzzAENr   c                    U R                   S   n[        U SSS5      u  pVpxUR                  [        R                  5      R                  U5      nUR                  [        R                  5      R                  U5      n[        U5      nUR                  US45      [        R                  " SUR                  [        R                  S9R                  SS5      -	  nUR                  USSUS-  45      [        R                  " SS/UR                  [        R                  S9R                  SSSS5      -	  n	US-  R                  [        R                  5      nU	S-  R                  US45      n	XS-  -  nXX-  U-   $ )	Nr   r9      r7       r#   r   r*      )r   rN   r-   r!   rT   r   rB   r,   aranger#   r>   r	   r.   )
r5   r0   r1   r   r4   rV   mqhqsqls
             r
   dequantize_blocks_Q5_1rb   G   sL   ||AH#FAq!4LA"	u}}  'A	u}}  'A	2B	XqM	"ell2ahhekk&Z&b&bcdfh&i	iB	Xr1jAo6	75<<AWXW_W_glgrgr;s;{;{|}  @A  CD  FG  <H  
HB
q&U[[	!B
t)		h^	,B
a.BFa<r   c                    U R                   S   n[        U SS5      u  pVnUR                  [        R                  5      R                  U5      n[        U5      nUR                  US5      [        R                  " SUR                  [        R                  S9R                  SS5      -	  nUR                  USSUS-  5      [        R                  " SS/UR                  [        R                  S9R                  SSSS5      -	  nUS-  R                  [        R                  5      nUS-  R                  US5      nXS-  -  R                  [        R                  5      S	-
  nXW-  $ )
Nr   r9   rY   r7   rZ   r[   r*   r\   r:   )r   rN   r-   r!   rT   r   rB   r,   r]   r#   r>   r	   r.   rU   )	r5   r0   r1   r   r4   rV   r_   r`   ra   s	            r
   dequantize_blocks_Q5_0rd   W   s1   ||AH A.IA2	
		!	!%	(A	2B	Ha	 ELLAHHEKK$X$`$`abdf$g	gB	Hb!Z1_	5q!fUVU]U]ejepep9q9y9yz{}~  AB  DE  :F  
FB
q&U[[	!B
t)		Xr	*B
a.		UZZ	(2	-BFOr   c                    U R                   S   n[        U SS5      u  pVnUR                  [        R                  5      R                  U5      nUR                  [        R                  5      R                  U5      nUR                  USSUS-  45      [        R                  " SS/UR                  [        R                  S9R                  SSSS5      -	  nUS-  R                  US5      nXW-  U-   $ )Nr   r9   r*   r7   rY   r[   r\   )
r   rN   r-   r!   rT   r   r,   r	   r#   r.   )r5   r0   r1   r   r4   rV   r^   r`   s           r
   dequantize_blocks_Q4_1rf   g   s    ||AH1-HA"	u}}  'A	u}}  'A	Xr1jAo6	75<<AWXW_W_glgrgr;s;{;{|}  @A  CD  FG  <H  
HB
t)		Xr	*BFa<r   c                    U R                   S   n[        U S5      u  pVUR                  [        R                  5      R                  U5      nUR                  USSUS-  45      [        R                  " SS/UR                  [        R                  S9R                  S5      -	  nUS-  R                  US45      R                  [        R                  5      S	-
  nXV-  $ )
Nr   r9   r*   r7   rY   r[   r7   r7   r9   r7   r\   r8   )r   rN   r-   r!   rT   r   r,   r	   r#   r.   rU   )r5   r0   r1   r   r4   rV   r`   s          r
   dequantize_blocks_Q4_0ri   s   s    ||AHVQ'EA	
		!	!%	(A	Xr1jAo6	75<<AWXW_W_glgrgr;s;{;{  }I  <J  
JB
t)		h^	,	/	/

	;a	?BFOr         c                    U R                   S   nU R                  [        R                  5      n U R	                  USS45      n [        R
                  " X R                   S   S-  SS9u  p#n[        R                  " US-  US-  US-	  S	-  -  /S
S9n[        R                  " US-  US-	  US-	  S	-  -  /S
S9nUR	                  US45      UR	                  US45      4$ )Nr   r;   rY   rF   ?   r\   r9   0   r*   r8   )r   r-   r!   r.   r,   rJ   cat)scalesr4   rV   r^   m_dscmins          r
   get_scale_minru      s    ||AH[[%F^^Xq!,-FFLL$4$9rBIA#	AHsTzqAvo>?R	HB
))QXqa1f_=>B
GCJJ!}%s{{Ha='ABBr   c                    U R                   S   n[        U [        S-  [        S-  [        S-  5      u  pVpxUR                  [        R
                  5      R                  U5      nUR                  [        R                  5      R                  U5      nX-  R                  U[        S-  S45      nUR                  USSS45      [        R                  " SS/UR                  [        R                  S9R                  S	5      -	  nUS
-  R                  USS45      nUR                  USSS45      [        R                  " / SQUR                  [        R                  S9R                  S5      -	  nUS-  R                  USS45      nXVS-  -  R                  [        R
                  5      S-
  n	U	R                  U[        S-  S45      n	X-  R                  U[        45      $ )Nr   r9   rY   r:   r7   r*   @   r[   rh   r\   rZ   r   r9   rY      r7   r7   rY   r7   r;   )r   rN   QK_Kr-   r!   rU   r   rT   r,   r	   r#   r.   )
r5   r0   r1   r   r4   ra   r_   rq   rV   qs
             r
   dequantize_blocks_Q6_Kr}      s   ||AH)&$!)TQYPR
SBF[[$''.F	u}}  'A	
h
A67A	Xr1b)	*ellAq6!((Z_ZeZe.f.n.no{.|	|B
t)		hB/	0B	Xr1b)	*ell<PQPXPX`e`k`k.l.t.t  vB  /C  
CB
t)		hB/	0B	QwEJJ'",A			8TRZ,-AE??Hd+,,r   c                    U R                   S   n[        U SS[        [        S-  5      u  pVpxn	UR	                  [
        R                  5      R                  U5      nUR	                  [
        R                  5      R                  U5      n[        U5      u  pXZ-  R                  USS45      nXk-  R                  USS45      nU	R                  USSS45      [
        R                  " SS/UR                  [
        R                  S9R                  S	5      -	  nUR                  USSS45      [
        R                  " [        S5       Vs/ s H  oPM     snUR                  [
        R                  S9R                  S
5      -	  nUS-  R                  USS45      nUS-  R                  USS45      nXS-  -  nX_-  U-
  R                  U[        45      $ s  snf )Nr   r9   r8   r*   r7   rZ   rY   r[   rh   r7   r7   r8   r7   r\   )r   rN   K_SCALE_SIZEr{   r-   r!   rT   r   ru   r,   r	   r#   r.   range)r5   r0   r1   r   r4   rV   dminrq   r_   r`   rs   r^   dmra   ir|   s                   r
   dequantize_blocks_Q5_Kr      s   ||AH.vq!\4ST9UAV	u}}  'A99U]]#&&u-D&!EB	
(B*+A
(		Xr1-	.B	Xr1b)	*ellAq6!((Z_ZeZe.f.n.no{.|	|B	Xr1b)	*elluQx;Px!Ax;PYZYaYainitit.u.}.}  K  /L  
LB
t)		hB/	0B
t)		hB/	0B	QwAEBJ4 011 <Qs   	G
c                    U R                   S   n[        U SS[        5      u  pVpxUR                  [        R
                  5      R                  U5      nUR                  [        R
                  5      R                  U5      n[        U5      u  pXY-  R                  USS45      nXj-  R                  USS45      nUR                  USSS45      [        R                  " SS/UR                  [        R                  S9R                  S5      -	  nUS	-  R                  USS45      nXX-  U-
  R                  U[        45      $ )
Nr   r9   r*   r7   rZ   rY   r[   rh   r\   )r   rN   r   r-   r!   rT   r   ru   r,   r	   r#   r.   r{   )r5   r0   r1   r   r4   rV   r   rq   r`   rs   r^   r   s               r
   dequantize_blocks_Q4_Kr      s   ||AH*61aFAV	u}}  'A99U]]#&&u-D&!EB	
(B*+A
(		Xr1-	.B	Xr1b)	*ellAq6!((Z_ZeZe.f.n.no{.|	|B
t)		hB/	0BFRK  (D!122r   c                    U R                   S   n[        U [        S-  [        S-  S5      u  pVpxUR                  [        R
                  5      R                  U5      nUS S 2S S24   US S 2SS 24   pU	R                  USS45      [        R                  " SS/UR                  [        R                  S9R                  S5      -	  n	U	R                  US45      n	U
R                  USS45      [        R                  " / S	QUR                  [        R                  S9R                  S
5      -	  n
U
R                  US45      n
U	S-  U
S-  S-  -  nUR                  [        R                  5      S-
  nX-  R                  USS45      nUR                  USSS45      [        R                  " / S	QUR                  [        R                  S9R                  S5      -	  nUR                  USSS5      [        R                  " [        S5       Vs/ s H  oPM     snUR                  [        R                  S9R                  S5      -	  nUR                  US[        S-  45      S-  nUR                  US[        S-  45      S-  S-  nUR                  [        R                  5      US-  R                  [        R                  5      -
  nX-  R                  U[        45      $ s  snf )Nr   r8   rY   rk   r7   r[   )r7   r9   r7   r:   rx   )r7   rY   r7   r\   r;   rZ   r*   rz   r   r9   )r   rN   r{   r-   r!   rT   r   r,   r	   r#   r.   rU   r   )r5   r0   r1   r   r4   hmaskr`   rq   rV   lscaleshscalesdlra   r   r_   r|   s                   r
   dequantize_blocks_Q3_Kr      s   ||AH+FDAItqy"MEv	u}}  'Aa!e}fQUmWooxA./5<<Aqxx_d_j_j3k3s3st}3~~Gooxn-GooxA./5<<UVU]U]ejepep3q3y3y  {D  4E  EGooxn-Gn'D.Q!67Fii

#b(F
*		xQ/	0B	Xr1b)	*ell<PQPXPX`e`k`k.l.t.t  vB  /C  
CB	xQ	+u||a<Q1Q<QZ[ZbZbjojuju/v/~/~  @L  0M  
MB	Xr42:.	/!	3B
**hDBJ/
01
4	9B	uzz	bAg\\%**5	5AFXt,-- =Rs   K 
c                    U R                   S   n[        U [        S-  [        S-  S5      u  pVpxUR                  [        R
                  5      R                  U5      nUR                  [        R
                  5      R                  U5      nXuS-  -  R                  U[        S-  S45      n	XS-	  -  R                  U[        S-  S45      n
[        R                  " / SQUR                  [        R                  S9R                  S	5      nUR                  US
SS45      U-	  S-  nUR                  U[        S-  S45      nX-  U
-
  nUR                  US
45      $ )Nr   r:   rY   r9   r\   r7   rx   r[   rz   r*   rZ   r;   )r   rN   r{   r-   r!   rT   r   r,   r	   r#   r.   )r5   r0   r1   r   r4   rq   r`   rV   r   r   mlshifts               r
   dequantize_blocks_Q2_Kr      s*   ||AH*642:tqy!LF	u}}  'A99U]]#&&u-D |
	%	%xQ&?	@B
A+
	'	'42:q(A	BBLLahhekkJRRS_`E
**hAr*
+u
4	9B	Xtrz2.	/B	2B::xn%%r   )iiiiiiiir7         &   5   E   Y   q   r   c                    U R                   S   n[        U S5      u  pVUR                  [        R                  5      R                  U5      nUR                  USSUS-  45      [        R                  " SS/UR                  [        R                  S9R                  S5      -	  nUS-  R                  USS45      R                  [        R                  5      n[        R                  UR                  5      R                  " / UR                   S S QS	P76 n[        R                  " USUS
9R                  US45      nAXV-  $ )Nr   r9   r*   r7   rY   r[   rh   r\   r:   rG   index)r   rN   r-   r!   rT   r   r,   r	   r#   r.   int64KVALUESexpandgather)r5   r0   r1   r   r4   rV   r`   kvaluess           r
   dequantize_blocks_IQ4_NLr      s   ||AHVQ'EA	u}}  'A	Xr1j!m4	5q!fUVU]U]ejepep9q9y9y  {G  :H  
HB
t)		hA.	/	2	25;;	?Bjj#**>BHHSbM>2>G	g2R	0	8	8(B	HBFOr   c                    U R                   S   n[        U SS[        S-  5      u  pVpxUR                  [        R
                  5      R                  U5      n[        U5      n[        R                  " SS/UR                  [        R                  S9R                  S5      n	[        R                  " [        [        S-  5       V
s/ s H  n
SU
-  PM
     sn
UR                  [        R                  S9R                  S5      nUR                  US	S
45      U	R                  S5      -	  nUR                  US	S
45      UR                  S5      -	  nUR                  US	45      S-  nUR                  US	45      R                  [        R                  5      S-  nXvS-  -  R                  [        R                  5      S-
  nX\R                  U5      -  R                  US	S
45      nUR                  US	S
S45      U	R                  S5      -	  nUR                  US	SS
45      S-  n[        R                  UR                  5      R                  " / UR                   S S	 QSP76 n[        R                   " US	UR                  [        R"                  5      S9R                  US	S45      nAA	AX-  R                  US	45      $ s  sn
f )Nr   r9   rw   rY   r[   )r7   r7   r9   rZ   )r7   r*   r7   r*   r7   r\   r;   r:   rh   r   )r   rN   r{   r-   r!   rT   r   rD   r	   r#   r.   r,   r   rU   r   r   r   r   )r5   r0   r1   r   r4   rV   scales_hscales_lr`   shift_ar   shift_brq   r   r   s                  r
   dequantize_blocks_IQ4_XSr     sU   ||AH 0Atrz JA	u}}  'A"HllAq6!((%++FNNyYGll5+<=+<aAE+<=ahhV[VaVabjjkuvG2q 12gooi6PPH2q 12gooj6QQH2/$6H2/225;;?$FHa-(,,UZZ82=F
ii
	'	'2q(9	:B	Xr1b)	*gool.K	KB	Xr2q)	*T	1Bjj#**>BHHSbM>2>G	g2RUU5;;-?	@	H	H(TVXZI[	\BGh^,,) >s   J<)NNr   )/r   r!   r   GGMLQuantizationTypeF32F16r   r   r   r(   r   rB   rD   rN   rR   rW   rb   rd   rf   ri   r{   r   ru   r}   r   r   r   r   r	   rU   r   r   r   BF16Q8_0Q5_1Q5_0Q4_1Q4_0Q6_KQ5_KQ4_KQ3_KQ2_KIQ4_NLIQ4_XSr    r   r
   <module>r      s       !:!:!>!>@Y@Y@]@]^ ]+D" Q
1,P  
 
C-$2*3".0&( ,,ainisis
t-< 	""$:""$:""$:""$:""$:""$:""$:""$:""$:""$:""$:$$&>$$&> r   