
    5h$                       % S SK Jr  S SKJrJr  S SKJrJrJr  S SK	J
r
Jr  S SKJr  SSKJrJrJr  SSKJr  S S	KrSES
 jrSES jrSFS jrSGS jr " S S\5      r0 rS\S'   SHS jrSHS jr " S S\5      r  " S S\ \RB                  S9r! " S S\ \RD                  S9r" " S S\ \RF                  S9r# " S S\ \RH                  S9r$ " S S \ \RJ                  S9r% " S! S"\ \RL                  S9r& " S# S$\ \RN                  S9r' " S% S&\ \RP                  S9r( " S' S(\ \RR                  S9r) " S) S*\ \RT                  S9r* " S+ S,\ \RV                  S9r+ " S- S.\ \RX                  S9r, " S/ S0\ \RZ                  S9r- " S1 S2\ \R\                  S9r. " S3 S4\ \R^                  S9r/ " S5 S6\ \R`                  S9r0 " S7 S8\ \Rb                  S9r1 " S9 S:\ \Rd                  S9r2 " S; S<\ \Rf                  S9r3 " S= S>\ \Rh                  S9r4 " S? S@\ \Rj                  S9r5 " SA SB\ \Rl                  S9r6 " SC SD\ \Rn                  S9r7g	)I    )annotations)ABCabstractmethod)AnyCallableSequence)log2ceil)	DTypeLike   )GGML_QUANT_SIZESGGMLQuantizationTypeQK_K)LazyNumpyTensorNc           	         [         U   u  p#U S   U-  S:w  a"  [        SU S    SUR                   SU S35      e/ U S S QU S   U-  U-  P7$ )Nr   zQuantized tensor row size () is not a multiple of z block size ()r   
ValueErrornameshape
quant_type
block_size	type_sizes       3/home/james-whalen/llama.cpp/gguf-py/gguf/quants.pyquant_shape_to_byte_shaper      s    ,Z8JRy:"6uRykAXYcYhYhXiiv  xB  wC  CD  E  F  	F=U3BZ=rj09<==    c           	         [         U   u  p#U S   U-  S:w  a"  [        SU S    SUR                   SU S35      e/ U S S QU S   U-  U-  P7$ )Nr   r   z Quantized tensor bytes per row (r   z type size (r   r   r   s       r   quant_shape_from_byte_shaper!      s    ,Z8JRy9!;E"I;F]^h^m^m]nnz  |E  {F  FG  H  I  	I=U3BZ=ri/*<==r   c                   UR                  SUR                  S   45      nSnU H  nXV-  nM	     [        R                  " XRS9nUR                  S   S-  =(       d    Sn[        R                  " [        R
                  " XH5       V	s/ s H  o" U	5      R                  5       PM     sn	SUS9  UR                  U5      $ s  sn	f )Nr   r   )r   dtyper      )axisout)reshaper   npemptyconcatenatearray_splitravel)
funcarrotypeoshaperowsosizedimr&   n_groupsgroups
             r   _apply_over_grouped_rowsr6      s    ;;CIIbM*+DE 
((
,C

1#)HNNR^^D5ST5SEDK%%'5ST[\bef;;v Us   B>c                    [        U 5      n[        R                  " U5      nU[        R                  " SX-
  -  5      -   n[        R                  " U 5      U-  $ )N   )absr(   floorsign)naflooredbs       r   	np_roundfr@   +   sD    AAhhqkG"((1,--A771:>r   c                      \ rS rSrSrg)
QuantError2    N)__name__
__module____qualname____firstlineno____static_attributes__rD   r   r   rB   rB   2   s    Sr   rB   z)dict[GGMLQuantizationType, type[__Quant]]_type_traitsc                N   U[         R                  :X  a  U R                  [        R                  SS9$ U[         R
                  :X  a  U R                  [        R                  SS9$ [        R                  U5      =nb  UR                  U 5      $ [        SUR                   S35      e)NFcopyzQuantization for  is not yet implemented)r   F32astyper(   float32F16float16rJ   getquantizeNotImplementedErrorr   dataqtypeqs      r   rU   rU   8   s    $((({{2::E{22	&**	*{{2::E{22&
&!	3zz$!$5ejj\AX"YZZr   c                   U[         R                  :X  a  U R                  [        R                  5      $ U[         R
                  :X  a<  U R                  [        R                  5      R                  [        R                  5      $ [        R                  U5      =nb  UR                  U 5      $ [        SUR                   S35      e)NzDequantization for rN   )r   rO   viewr(   rQ   rR   rS   rP   rJ   rT   
dequantizerV   r   rW   s      r   r]   r]   C   s    $(((yy$$	&**	*yy$++BJJ77&
&!	3||D!!!$7

|CZ"[\\r   c                     \ rS rSr% S\S'   S\S'   S\S'   SrS\S	'   S
rS\S'   SrS\S'   SrS\S'   S r	S"S jr
\S 5       r\\S#S j5       5       r\\S#S j5       5       r\S$S j5       r\S$S j5       r\S%S j5       r\S%S j5       r\S&S j5       r\S&S j5       r\S'S j5       r\S'S j5       r\S(S j5       r\S)S  j5       r\S)S! j5       rSrg)*__QuantN   r   rY   intr   r   Nz,np.ndarray[Any, np.dtype[np.float32]] | Nonegrid)r   r   ztuple[int, int]
grid_shaperD   ztuple[int | float, ...]grid_mapzbytes | Nonegrid_hexc                    [        S5      $ )Nz-Quant conversion classes can't have instances)	TypeError)selfs    r   __init____Quant.__init__X   s    HIIr   c                ^   Xl         [        U   u  U l        U l        [        R
                  " U R                  [        R                  U R                  4S9U l
        [        R
                  " U R                  [        R                  U R                  4S9U l        U[        ;  d   eU [        U'   g )N)	meta_noop)rY   r   r   r   r   _wrap_fn_Quant__quantize_arrayr(   uint8_Quant__shape_to_bytes_Quant__quantize_lazy_Quant__dequantize_arrayrQ   _Quant__shape_from_bytes_Quant__dequantize_lazyrJ   )clsrY   s     r   __init_subclass____Quant.__init_subclass__[   s    	(8(?%-66  xx!5!56
 !0 8 8""zz3#9#9:!
 L(((!Ur   c           	        U R                   c  U R                  c  g [        [        [	        U R
                  5      5      5      nUS:w  d   U R                  R                  5       eSU-  n[        R                  " U R                  [        R                  S9nUR                  S5      n[        R                  " US:  US-   U5      S-  [        R                  " SS/[        R                  S9R                  S	5      -  nUS
   US   -  nUR                  S5      [        R                  " [        SSSU-  5       Vs/ s H  oDPM     sn[        R                  S9R                  SU45      -	  nUSU-  S-
  -  R                  S5      n[        R                  " U R
                  [        R                  S9R                  S5      n[        R                   " XSSS9nUR                  SS/U R"                  Q75      U l         g s  snf )Nr      r#   )r   r8   @   	         )r   r8   .r   .r   )r   r   r   )r   r   r   r%   )rb   re   r
   r	   lenrd   rY   r   r(   
frombufferro   r'   wherearrayrangerQ   take_along_axisrc   )ru   bits_per_elemelems_per_byterb   ird   s         r   	init_grid__Quant.init_gridi   s   883<<#7T#cll"345!1399>>1!m+}}S\\:||G$dQh5<1a&XZX`X`AaAiAijpAqqF|d6l*||G$U1anI\=]1^=]!=]1^fhfnfn(o(w(wyz  }K  yL  )M  Mm+q01::7C88CLL

;CCGL!!(r:<<A 7 78	 2_s   :G=
c                    [         eNrV   ru   blockss     r   quantize_blocks__Quant.quantize_blocks~   
     "!r   c                    [         er   r   r   s     r   dequantize_blocks__Quant.dequantize_blocks   r   r   c                   UR                  [        R                  SS9nUR                  nUR                  U R
                  -  nUR                  X0R
                  45      nU R                  U5      nUR                  [        R                  :X  d   eUR                  S   U R                  :X  d   eUR                  U R                  U5      5      $ )NFrL   r   )rP   r(   rQ   r   sizer   r'   r   r#   ro   r   rp   ru   r1   r   n_blocksr   s        r   quantize_rows__Quant.quantize_rows   s    {{2::E{2

99.x89$$V,||rxx'''||B3==000~~c2259::r   c                   UR                  [        R                  5      nUR                  nUR                  U R
                  -  nUR                  X0R
                  45      nU R                  U5      nUR                  [        R                  :X  d   eUR                  S   U R                  :X  d   eUR                  U R                  U5      5      $ )Nr   )r\   r(   ro   r   r   r   r'   r   r#   rQ   r   rs   r   s        r   dequantize_rows__Quant.dequantize_rows   s    yy"

99-x78&&v.||rzz)))||B3>>111~~c44U;<<r   c                ,    [        XR                  5      $ r   )r   rY   ru   r   s     r   __shape_to_bytes__Quant.__shape_to_bytes   s    (		::r   c                ,    [        XR                  5      $ r   )r!   rY   r   s     r   __shape_from_bytes__Quant.__shape_from_bytes   s    *5))<<r   c                |    [        U R                  U[        R                  U R	                  UR
                  5      S9$ N)r.   r/   r0   )r6   r   r(   ro   rp   r   ru   r   s     r   __quantize_array__Quant.__quantize_array   s0    '(9(9uBHH]`]q]qrwr}r}]~r   c                    U R                  5         [        U R                  U[        R                  U R                  UR                  5      S9$ r   )r   r6   r   r(   rQ   rs   r   r   s     r   __dequantize_array__Quant.__dequantize_array   sK    '(;(;bjjadawawx}  yD  yD  bE  F  	Fr   c                   g r   rD   ru   lazy_tensors     r   __quantize_lazy__Quant.__quantize_lazy       r   c                   g r   rD   r   s     r   __dequantize_lazy__Quant.__dequantize_lazy   r   r   c                @    UR                   S   U R                  -  S:H  $ )Nr   r   )r   r   ru   tensors     r   can_quantize__Quant.can_quantize   s    ||B#..0A55r   c                    U R                  U5      (       d/  [        SUR                   SU R                  R                   35      e[        U[        5      (       a  U R                  U5      $ U R                  U5      $ )Nz!Can't quantize tensor with shape z to )	r   rB   r   rY   r   
isinstancer   rq   rn   r   s     r   rU   __Quant.quantize   sm    ''@dSVS\S\SaSaRbcddfo..&&v..''//r   c                p    [        U[        5      (       a  U R                  U5      $ U R                  U5      $ r   )r   r   rt   rr   r   s     r   r]   __Quant.dequantize   s1    fo..((00))&11r   )rY   r   returnNoner   
np.ndarrayr   r   )r1   r   r   r   )r   Sequence[int])r   r   r   r   )r   r   r   r   )r   np.ndarray | LazyNumpyTensorr   bool)r   r   r   r   )rE   rF   rG   rH   __annotations__rb   rc   rd   re   ri   rv   classmethodr   r   r   r   r   r   rp   rs   rn   rr   rq   rt   r   rU   r]   rI   rD   r   r   r_   r_   N   ss   ON9=D
6="(J((*H%*!Hl!J" 9 9( "  " "  " ; ; = = ; ; = = @ @ F F     6 6 0 0 2 2r   r_   c                  <    \ rS rSr\SS j5       r\SS j5       rSrg)BF16   c                   UR                  [        R                  5      n[        R                  " US-  S:  U[        R                  " S5      -  [        R                  " S5      -  U5      n[        R                  " U5      SUS-	  S-  -   -   S-	  nUR                  [        R                  5      R                  [        R                  5      $ )Nii  l      i  @ i  r$   r   )r\   r(   uint32r   uint64rP   uint16ro   )ru   r   r<   s      r   r   BF16.quantize_blocks   s     KK		"HHa*n
2Q:9N5NRTR[R[\dRe4eghiYYq\VR1}562=xx		"''11r   c                    UR                  [        R                  5      R                  [        R                  5      S-  R                  [        R
                  5      $ )Nr$   )r\   r(   int16rP   int32rQ   r   s     r   r   BF16.dequantize_blocks   s8    BHH%,,RXX6"<BB2::NNr   rD   Nr   rE   rF   rG   rH   r   r   r   rI   rD   r   r   r   r      s*    2 2 O Or   r   )rY   c                  <    \ rS rSr\SS j5       r\SS j5       rSrg)Q4_0   c                2   UR                   S   n[        U5      R                  SSS9n[        R                  " XSS9nUS-  n[        R
                  " SS9   [        R                  " US:H  SS	U-  5      nS S S 5        [        R                  " UW-  [        R                  " S
5      -   [        R                  S9R                  [        R                  5      R                  SS5      nUR                  USU R                  S-  45      nUSSS S 24   USS	S S 24   [        R                  " S5      -  -  nUR                  [        R                  5      R                  [        R                  5      n[        R                   " XW/SS9$ ! , (       d  f       GN= f)Nr   r   Tr%   keepdimsr   ignoredivider   g      !@rz   r}   r8   .r~   )r   r9   argmaxr(   r   errstater   truncrQ   rP   ro   clipr'   r   rS   r\   r*   )ru   r   r   imaxmaxdidqss           r   r   Q4_0.quantize_blocks   s:   <<?6{!!rD!9  B7"H[[)!q&!QU+B *XXv{bjjo5RZZHOOPRPXPXY^^_`bdeZZ1cnn&9:;Q	]bamrxx{:;HHRZZ %%bhh/~~qgB// *)s   F
Fc                x   UR                   S   n[        R                  " US/5      u  p4UR                  [        R                  5      R                  [        R                  5      nUR                  USSU R                  S-  45      [        R                  " SS/[        R                  S9R                  S5      -	  nU[        R                  " S5      -  R                  US45      R                  [        R                  5      [        R                  " S	5      -
  nX4R                  [        R                  5      -  $ )
Nr   r8   r   r   r~   rz   r   r   r8   r   r}   ry   )r   r(   hsplitr\   rS   rP   rQ   r'   r   r   ro   int8)ru   r   r   r   r   s        r   r   Q4_0.dequantize_blocks   s    <<?		&1#&FF2::%%bjj1ZZ2q#..A*=>?288QPQFZ\ZbZbCcCkCklxCyy288D>!**Hb>:AA"''JRWWUVZWIIbjj))*r   rD   Nr   r   rD   r   r   r   r      s(    0 0$ 
+ 
+r   r   c                  <    \ rS rSr\SS j5       r\SS j5       rSrg)Q4_1   c                   UR                   S   nUR                  SSS9nUR                  SSS9nX4-
  S-  n[        R                  " SS9   [        R
                  " US:H  SSU-  5      nS S S 5        [        R                  " X-
  W-  [        R                  " S	5      -   [        R                  S
9R                  [        R                  5      R                  SS5      nUR                  USU R                  S-  45      nUSSS S 24   USSS S 24   [        R                  " S5      -  -  nUR                  [        R                  5      R                  [        R                  5      nUR                  [        R                  5      R                  [        R                  5      n[        R                  " XXU/SS9$ ! , (       d  f       GNW= f)Nr   r   Tr   r}   r   r   r         ?rz   r8   .r~   r   )r   r   minr(   r   r   r   rQ   rP   ro   r   r'   r   rS   r\   r*   )	ru   r   r   r   r   r   r   r   ms	            r   r   Q4_1.quantize_blocks   s\   <<?jjb4j0jjb4j0Y"[[)!q&!QU+B *XXv|r)BJJsO;2::NUUVXV^V^_ddefhjkZZ1cnn&9:;Q	]bamrxx{:;HHRZZ %%bhh/JJrzz"''1~~qRjr22 *)s   F::
G	c                   UR                   S   n[        R                  " US/5      u  p4[        R                  " US/5      u  pVUR                  [        R                  5      R                  [        R                  5      nUR                  [        R                  5      R                  [        R                  5      nUR                  USSU R                  S-  45      [        R                  " SS/[        R                  S9R                  S5      -	  nU[        R                  " S5      -  R                  US45      R                  [        R                  5      nX6-  U-   $ )	Nr   r8   r   r   r~   rz   r   r}   )r   r(   r   r\   rS   rP   rQ   r'   r   r   ro   )ru   r   r   r   restr   r   s          r   r   Q4_1.dequantize_blocks  s    <<?))FQC(		$$FF2::%%bjj1FF2::%%bjj1ZZ2q#..A*=>?288QPQFZ\ZbZbCcCkCklxCyy288D>!**Hb>:AA"**M!|r   rD   Nr   r   rD   r   r   r   r      s(    3 3&  r   r   c                  <    \ rS rSr\SS j5       r\SS j5       rSrg)Q5_0i#  c                    UR                   S   n[        U5      R                  SSS9n[        R                  " XSS9nUS-  n[        R
                  " SS9   [        R                  " US:H  SS	U-  5      nS S S 5        [        R                  " UW-  [        R                  " S
5      -   [        R                  S9R                  [        R                  5      R                  SS5      nUR                  USU R                  S-  45      nUSSS S 24   [        R                  " S5      -  USS	S S 24   [        R                  " S5      -  -  n[        R                  " UR                  US	S45      [        R                  " S5      -	  SSS9R                  US5      n	UR                  [        R                  5      R!                  [        R                  5      n[        R"                  " XYU/SS9$ ! , (       d  f       GN= f)Nr   r   Tr   r   ir   r   r   g     0@rz      r8   .r}   r~       littler%   bitorder)r   r9   r   r(   r   r   r   r   rQ   rP   ro   r   r'   r   packbitsrS   r\   r*   )
ru   r   r   r   r   r   r   rZ   r   qhs
             r   r   Q5_0.quantize_blocks$  s   <<?6{!!rD!9  B7#I[[)!q&!QU+B *HHfrkRZZ%55RZZHOOPRPXPXY^^_`bdeYY!S^^q%89:ambhhtn,CAI"((1+1MN[[Ha#45!D2X`aiijrtuvHHRZZ %%bhh/~~qbk33 *)s   G..
G=c                T   UR                   S   n[        R                  " US/5      u  p4[        R                  " US/5      u  pVUR                  [        R                  5      R                  [        R                  5      nUR                  [        R                  5      nUR                  US45      [        R                  " [        S5       Vs/ s H  owPM     sn[        R                  S9R                  S5      -	  nUR                  USSU R                  S-  45      [        R                  " SS/[        R                  S9R                  S	5      -	  nU[        R                  " S5      -  R                  [        R                  5      nU[        R                  " S
5      -  R                  US45      nX[        R                  " S5      -  -  R                  [        R                  5      [        R                  " S5      -
  nX6R                  [        R                  5      -  $ s  snf )Nr   r8   r~   r   r  rz   r   r  r   r   r}   r$   )r   r(   r   r\   rS   rP   rQ   r   r'   r   r   r   ro   r   )	ru   r   r   r   r   r  r   r   qls	            r   r   Q5_0.dequantize_blocks9  s   <<?))FQC(4!%FF2::%%bjj1WWRYYZZ1&"((uRy3Iy!Ay3IQSQZQZ*[*c*cdk*llZZ2q#..A*=>?288QPQFZ\ZbZbCcCkCklxCyy299T?"**2884288D>!**Hb>:"((1+%&..rww7"''"+EIIbjj))* 4Js   H%
rD   Nr   r   rD   r   r   r   r   #  s(    4 4( + +r   r   c                  <    \ rS rSr\SS j5       r\SS j5       rSrg)Q5_1iM  c                d   UR                   S   nUR                  SSS9nUR                  SSS9nX4-
  S-  n[        R                  " SS9   [        R
                  " US:H  SSU-  5      nS S S 5        [        R                  " X-
  W-  [        R                  " S	5      -   [        R                  S
9R                  [        R                  5      R                  SS5      nUR                  USU R                  S-  45      nUSSS S 24   [        R                  " S5      -  USSS S 24   [        R                  " S5      -  -  n[        R                  " UR                  USS45      [        R                  " S5      -	  SSS9R                  US5      n	UR                  [        R                  5      R                  [        R                  5      nUR                  [        R                  5      R                  [        R                  5      n
[        R                   " XZX/SS9$ ! , (       d  f       GN= f)Nr   r   Tr   r   r   r   r   r   rz   r8   .r}   r~   r  r  r  r   )r   r   r   r(   r   r   r   rQ   rP   ro   r   r'   r   r  rS   r\   r*   )ru   r   r   r   r   r   r   rZ   r   r  r   s              r   r   Q5_1.quantize_blocksN  s   <<?jjb4j0jjb4j0Y"[[)!q&!QU+B *HHflb(2::c?:"**MTTUWU]U]^ccdegijYY!S^^q%89:ambhhtn,CAI"((1+1MN[[Ha#45!D2X`aiijrtuvHHRZZ %%bhh/JJrzz"''1~~qRn266 *)s   H  
H/c                   UR                   S   n[        R                  " US/5      u  p4[        R                  " US/5      u  pT[        R                  " US/5      u  pgUR                  [        R                  5      R                  [        R                  5      nUR                  [        R                  5      R                  [        R                  5      nUR                  [        R                  5      nUR                  US45      [        R                  " [        S5       Vs/ s H  oPM     sn[        R                  S9R                  S5      -	  nUR                  USSU R                  S-  45      [        R                  " SS/[        R                  S9R                  S	5      -	  n	U[        R                  " S5      -  R                  [        R                  5      nU	[        R                  " S
5      -  R                  US45      n	X[        R                  " S5      -  -  R                  [        R                  5      nX7-  U-   $ s  snf )Nr   r8   r~   r   r  rz   r	  r   r   r}   )r   r(   r   r\   rS   rP   rQ   r   r'   r   r   r   ro   )
ru   r   r   r   r   r   r  r   r   r
  s
             r   r   Q5_1.dequantize_blocksd  s   <<?))FQC())D1#&4!%FF2::%%bjj1FF2::%%bjj1WWRYYZZ1&"((uRy3Iy!Ay3IQSQZQZ*[*c*cdk*llZZ2q#..A*=>?288QPQFZ\ZbZbCcCkCklxCyy299T?"**2884288D>!**Hb>:"((1+%&..rzz:!| 4Js   $I

rD   Nr   r   rD   r   r   r  r  M  s(    7 7*  r   r  c                  <    \ rS rSr\SS j5       r\SS j5       rSrg)Q8_0iz  c                
   [        U5      R                  SSS9S-  n[        R                  " SS9   [        R                  " US:H  SSU-  5      nS S S 5        [        UW-  5      nUR                  [        R                  5      R                  [        R                  5      nUR                  [        R                  5      R                  [        R                  5      n[        R                  " X$/SS9$ ! , (       d  f       N= f)	Nr   Tr      r   r   r   r   )r9   r   r(   r   r   r@   rP   rS   r\   ro   r   r*   )ru   r   r   r   r   s        r   r   Q8_0.quantize_blocks{  s     KOOTO2S8[[)!q&!QU+B *v{# HHRZZ %%bhh/YYrww$$RXX.~~qgA.. *)s   C44
Dc                ,   [         R                  " US/SS9u  p#UR                  [         R                  5      R	                  [         R
                  5      nUR                  [         R                  5      R	                  [         R
                  5      nX2-  $ )Nr8   r   r   )r(   splitr\   rS   rP   rQ   r   )ru   r   r   xs       r   r   Q8_0.dequantize_blocks  s`    xx!,FF2::%%bjj1FF277O""2::.r   rD   Nr   r   rD   r   r   r  r  z  s(    / /  r   r  c                  (    \ rS rSr\SS j5       rSrg)Q2_Ki  c                &   UR                   S   n[        R                  " U[        S-  /5      u  p4[        R                  " U[        S-  /5      u  pT[        R                  " US/5      u  pgUR	                  [        R
                  5      R                  [        R                  5      nUR	                  [        R
                  5      R                  [        R                  5      nXcS-  R                  [        R                  5      -  R                  U[        S-  S45      nXsS-	  R                  [        R                  5      -  R                  U[        S-  S45      n	[        R                  " / SQ[        R                  S9R                  S	5      n
UR                  US
SS45      U
-	  [        R                  " S5      -  nUR                  U[        S-  S45      R                  [        R                  5      nX-  U	-
  nUR                  US
45      $ )Nr   r$   r~   r8   r}   r   r   r8   r~      rz   r   r   r~   r   r   r     )r   r(   r   r   r\   rS   rP   rQ   r'   r   ro   )ru   r   r   scalesr   r   r   dmindlmlshifts              r   r   Q2_K.dequantize_blocks  s   <<?yy$"*699TDAI;/))D1#&FF2::%%bjj1yy$++BJJ7 C<''

33<<hPR
TU=VWk))"**55>>$RT*VW?XYRXX6>>|Ljj(B2./58BHHQKGZZ42:r23::2::FWr\zz8R.))r   rD   Nr   rE   rF   rG   rH   r   r   rI   rD   r   r   r  r    s    * *r   r  c                  (    \ rS rSr\SS j5       rSrg)Q3_Ki  c                   UR                   S   n[        R                  " U[        S-  /5      u  p4[        R                  " U[        S-  /5      u  pT[        R                  " US/5      u  pgUR	                  [        R
                  5      R                  [        R                  5      n[        R                  " US/5      u  pUR                  USS45      [        R                  " SS/[        R                  S9R                  S5      -	  nUR                  US45      nU	R                  USS45      [        R                  " / S	Q[        R                  S9R                  S
5      -	  n	U	R                  US45      n	U[        R                  " S5      -  U	[        R                  " S5      -  [        R                  " S5      -  -  nUR                  [        R                  5      [        R                  " S5      -
  R                  [        R                  5      nXv-  R                  USS45      n
UR                  USSS45      [        R                  " / S	Q[        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[        R                  S9R                  S5      -	  nUR                  US[        S-  45      [        R                  " S5      -  nUR                  US[        S-  45      [        R                  " S5      -  nU[        R                  " S5      -  nUR                  [        R                  5      U[        R                  " S5      -  R                  [        R                  5      -
  R                  [        R                  5      nX-  R                  U[        45      $ s  snf )Nr   ry   r~      r   rz   r   r8   r   r$   r  )r   r~   r   r}   r!  r  r   r   r   r   ry   r   r8   )r   r(   r   r   r\   rS   rP   rQ   r'   r   ro   r   r   )ru   r   r   hmaskr   r   r"  r   lscaleshscalesr$  r
  r   r  rZ   s                  r   r   Q3_K.dequantize_blocks  s   <<?ii499TDAI;/IIdRD)	FF2::%%bjj1 99VaS1//8Q"23rxxAbhh7W7_7_`i7jj//8R.1//8Q"23rxxTVT\T\7]7e7efo7pp//8R.1BHHTN*"((4.0HRXXVW[/XY--(2772;6>>rzzJj!!8R"34ZZ2q"-."((<rxx2X2`2`am2nn]]8RB/288a<Q1Q<QY[YaYa3b3j3jkw3xxZZ2trz23bhhqkAjj(B
34rxx{B"((1+YYrww2!#4"<"<RWW"EEMMbjjY4 011 =Rs   'O 
rD   Nr   r(  rD   r   r   r*  r*    s    '2 '2r   r*  c                  @    \ rS rSrSr\SS j5       r\SS j5       rSr	g)	Q4_Ki  r,  c                   U R                   S   nU R                  [        R                  5      n U R	                  USS45      n [        R
                  " U 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!  r~   r   ?   r}   r8   0   r   ry   )r   r\   r(   ro   r'   r  r*   )r"  r   r   r   m_dscr   s          r   get_scale_minQ4_K.get_scale_min  s    <<?RXX& 1a 01HHVQR0	c^^QXd
Q$'GHrRnna$hqAvo(FGbQ

Ha=)3;;!}+EFFr   c                   UR                   S   n[        R                  " US/5      u  p4[        R                  " US/5      u  pT[        R                  " X@R                  /5      u  pgUR	                  [        R
                  5      R                  [        R                  5      nUR	                  [        R
                  5      R                  [        R                  5      n[        R                  U5      u  pX8R                  [        R                  5      -  R                  USS45      nXYR                  [        R                  5      -  R                  USS45      n
UR                  USSS45      [        R                  " SS/[        R                  S9R                  S5      -	  nU[        R                  " S	5      -  R                  USS45      R                  [        R                  5      nX7-  U
-
  R                  U[        45      $ )
Nr   r8   r   r   r  r~   rz   r   r}   )r   r(   r   K_SCALE_SIZEr\   rS   rP   rQ   r4  r;  r'   r   ro   r   )ru   r   r   r   r   r#  r"  r   r:  r   dms              r   r   Q4_K.dequantize_blocks  s|   <<?))FQC(YYtaS)
YYt&6&6%78
FF2::%%bjj1yy$++BJJ7""6*2::&&//2q0ABXXbjj))22Hb!3DEZZ2q"-."((Aq62R2Z2Z[g2hh288D>!**Hb"+=>EEbjjQ$$h%566r   rD   N)r"  r   r   ztuple[np.ndarray, np.ndarray]r   )
rE   rF   rG   rH   r>  staticmethodr;  r   r   rI   rD   r   r   r4  r4    s/    LG G0 7 7r   r4  c                  (    \ rS rSr\SS j5       rSrg)Q5_Ki  c                   UR                   S   n[        R                  " US/5      u  p4[        R                  " US/5      u  pT[        R                  " U[        R                  /5      u  pd[        R                  " U[
        S-  /5      u  pxUR                  [        R                  5      R                  [        R                  5      nUR                  [        R                  5      R                  [        R                  5      n[        R                  U5      u  pX9R                  [        R                  5      -  R                  USS45      nXZR                  [        R                  5      -  R                  USS45      nUR                  USSS45      [        R                  " SS/[        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[        R                  S9R                  S
5      -	  nU[        R                  " S5      -  R                  USS45      nU[        R                  " S5      -  R                  USS45      nX[        R                  " S5      -  -  R                  [        R                  5      nX>-  U-
  R                  U[
        45      $ s  snf )Nr   r8   ry   r   r   r  r~   rz   r   r.  r}   )r   r(   r   r4  r>  r   r\   rS   rP   rQ   r;  r'   r   ro   r   )ru   r   r   r   r   r#  r"  r  r   r:  r   r?  r
  r   rZ   s                  r   r   Q5_K.dequantize_blocks  s"   <<?))FQC(YYtaS)
yy(9(9':;4$!)-FF2::%%bjj1yy$++BJJ7""6*2::&&//2q0ABXXbjj))22Hb!3DEZZ2q"-."((Aq62R2Z2Z[g2hhZZ2q"-."((uQx;Px!Ax;PXZX`X`2a2i2ijv2ww288D>!**Hb"+=>288D>!**Hb"+=>!$%--bjj9
##Xt$455 <Qs   =K
rD   Nr   r(  rD   r   r   rC  rC    s    6 6r   rC  c                  (    \ rS rSr\SS j5       rSrg)Q6_Ki(  c                $   UR                   S   n[        R                  " U[        S-  /5      u  p4[        R                  " U[        S-  /5      u  pT[        R                  " U[        S-  /5      u  pgUR	                  [        R
                  5      R                  [        R                  5      nUR	                  [        R                  5      R                  [        R                  5      nXv-  R                  U[        S-  S45      nUR                  USSS45      [        R                  " SS/[        R                  S9R                  S	5      -	  nU[        R                  " S
5      -  R                  USS45      nUR                  USSS45      [        R                  " / SQ[        R                  S9R                  S5      -	  nU[        R                  " S5      -  R                  USS45      nX5[        R                  " S5      -  -  R                  [        R
                  5      [        R
                  " S5      -
  nUR                  U[        S-  S45      R                  [        R                  5      nXx-  R                  U[        45      $ )Nr   r8   r~   r$   r   r   r{   rz   r   r}   r  r  r   r!  )r   r(   r   r   r\   r   rP   rQ   rS   r'   r   ro   )	ru   r   r   r
  r   r  r"  r   rZ   s	            r   r   Q6_K.dequantize_blocks)  s   <<?99Vdai[199TDAI;/IIdTRZL1	RWW%,,RZZ8FF2::%%bjj1Z  (DBJ!:;ZZ2q"-."((Aq62R2Z2Z[g2hh288D>!**Hb"+=>ZZ2q"-."((<rxx2X2`2`am2nn288D>!**Hb"+=>!$%--bgg6DIIxR0188D$/00r   rD   Nr   r(  rD   r   r   rG  rG  (  s    1 1r   rG  c                  <    \ rS rSr\SS j5       r\SS j5       rSrg)TQ1_0i?  c                   UR                   S   n[        U5      R                  SSS9n[        R                  " SS9   [        R
                  " US:H  SSU-  5      nS S S 5        [        UW-  5      nUR                  [        R                  5      [        R                  " S5      -   R                  [        R                  5      nUSS S	24   USS	S
24   USS
S 24   pnUR                  USSS45      [        R                  " / SQ[        R                  S9R                  S5      -  n[        R                  " USS9R                  US45      nUR                  USSS45      [        R                  " / SQ[        R                  S9R                  S5      -  n[        R                  " USS9R                  US45      nUR                  USSS45      [        R                  " / SQ[        R                  S9R                  S5      -  n[        R                  " USS9R                  US45      n[        R                  " XgU/SS9nUR                  [        R                  5      S-  S-   S-  nUR                  [        R                  5      nUR                  [        R                  5      R!                  [        R                  5      n[        R                  " XS/SS9$ ! , (       d  f       GN= f)Nr   r   Tr   r   r   r   .         r  )Q      r|   r!  r   rz   r   r   rO  r   r6  r   r$   r~   )rP  rQ  r|   r!  r            )r   r9   r   r(   r   r   r@   rP   r   ro   r'   r   sumr*   r   rS   r\   )	ru   r   r   r   r   r   qs0qs1r  s	            r   r   TQ1_0.quantize_blocks@  sM   <<?KOOdO3[[)!q&!QU+B *v{#ii 2771:-55bhh?#yy.)2cFV3D.D+Er#PVy.GY"kk8RB/0288<MUWU]U]3^3f3fgs3ttffSr"**Hb>:kk8RB/0288<MUWU]U]3^3f3fgs3ttffSr"**Hb>:ZZ2q!,-rxx0X0`0`am0nnVVBR (((B8^^SrN4ii		"S(G4<YYrxx HHRZZ %%bhh/~~rgB//% *)s   K
K.c                   UR                   S   n[        R                  " U[        S[        -  S-  -
  S-  /5      u  p4[        R                  " U[        S-  /5      u  pVUR	                  [        R
                  5      R                  [        R                  5      nUSS S24   USSS 24   pUR                  USSS45      [        R                  " / S	Q[        R                  S
9R                  S5      -  nUR                  US45      nUR                  USSS45      [        R                  " / S	Q[        R                  S
9R                  S5      -  nUR                  US45      nUR                  USSS45      [        R                  " / SQ[        R                  S
9R                  S5      -  nUR                  US45      n[        R                  " XxU/SS9nUR                  [        R                  5      S-  S-	  R                  [        R                  5      [        R                  " S5      -
  nXcR                  [        R                  5      -  $ )Nr   r~   r{   rO  .r  r   r   )r   r!  r|   rQ  rP  rz   rR  r$   )r   r!  r|   rQ  r   r   r!  ry   )r   r(   r   r   r\   rS   rP   rQ   r'   r   ro   r*   r   r   )	ru   r   r   r   r   r  r   rW  rX  s	            r   r   TQ1_0.dequantize_blocksY  s   <<?99Vta$h"n'<&B%CD		$-FF2::%%bjj1c3B3h<CHSkk8RB/0288<MUWU]U]3^3f3fgs3ttkk8R.)kk8RB/0288<MUWU]U]3^3f3fgs3ttkk8R.)ZZ2q!,-bhh0W0_0_`l0mmZZ2'^^SrN4yy#a'A-55bgg>KIIbjj))*r   rD   Nr   r   rD   r   r   rK  rK  ?  s(    0 00 + +r   rK  c                  <    \ rS rSr\SS j5       r\SS j5       rSrg)TQ2_0io  c                b   UR                   S   n[        U5      R                  SSS9n[        R                  " SS9   [        R
                  " US:H  SSU-  5      nS S S 5        [        UW-  5      nUR                  [        R                  5      [        R                  " S5      -   R                  [        R                  5      nUR                  USSS	45      [        R                  " / S
Q[        R                  S9R                  S5      -  nUSSS S 24   USSS S 24   -  USSS S 24   -  USSS S 24   -  nUR                  US45      nUR                  [        R                  5      R                  [        R                  5      n[        R                  " XS/SS9$ ! , (       d  f       GNJ= f)Nr   r   Tr   r   r   r   r~   r  r  rz   r   .r8   r!  r   )r   r9   r   r(   r   r   r@   rP   r   ro   r'   r   rS   r\   r*   )ru   r   r   r   r   r   s         r   r   TQ2_0.quantize_blocksp  sN   <<?KOOdO3[[)!q&!QU+B *v{#ii 2771:-55bhh?ZZ2q"-."((<rxx2X2`2`am2nnQ	]RQ	]*RQ	]:RQ	]JZZ2'HHRZZ %%bhh/~~rgB// *)s   F
F.c                D   UR                   S   n[        R                  " U[        S-  /5      u  p4UR	                  [        R
                  5      R                  [        R                  5      nUR                  USSS45      [        R                  " / SQ[        R                  S9R                  S5      -	  nUS	-  R                  US45      R                  [        R                  5      [        R                  " S5      -
  nXCR                  [        R                  5      -  $ )
Nr   r~   r   r   r  r  rz   r   r!  )r   r(   r   r   r\   rS   rP   rQ   r'   r   ro   r   )ru   r   r   r   r   s        r   r   TQ2_0.dequantize_blocks  s    <<?		&419+.FF2::%%bjj1ZZ2q"-."((<rxx2X2`2`am2nn4i  (B077@2771:MIIbjj))*r   rD   Nr   r   rD   r   r   r]  r]  o  s(    0 0" 
+ 
+r   r]  c                  T    \ rS rSrSr\SS j5       r\S	S j5       r\S	S j5       r	Sr
g)
MXFP4i  )r   r   r8   r!  r~   r  ry   r,  r   r   r6  ir   ic                (   [         R                  " U S:  [         R                  " S5      [         R                  " U 5      -  [         R                  " U S-
  5      [         R                  " S5      -  5      nUR                  [         R                  5      $ )Nr8   i    r      )r(   r   r   r\   rQ   )r  bitss     r   e8m0_to_fp32_halfMXFP4.e8m0_to_fp32_half  se     xxAryy4		!DbiiPQTUPUFVZ\ZcZcdfZgFghyy$$r   c           	     F   UR                   S   n[        U5      R                  SSS9n[        R                  " SS9   [        R
                  " US:  [        R                  " [        R                  " U5      5      S-
  S-   S5      R                  [        R                  5      nS S S 5        U R                  W5      n[        R                  " U R                  [        R                  S	9R                  S
5      n[        R                  " UR                  USS45      UR                  [        R                  5      -  UR                  X R                   S45      -
  5      n[        R"                  " USSS9nUR                  USU R                   S-  5      R                  [        R                  5      nUS S 2S4   US S 2S4   [        R                  " S5      -  -  nUR                  X R                   S-  45      n[        R$                  " XH/SS9$ ! , (       d  f       GNt= f)Nr   r   Tr   r   r   r8   r  rz   )r   r   r$   r   r~   r   )r   r9   r   r(   r   r   r:   r	   rP   ro   ri  r   kvaluesr   r'   rQ   r   argminr*   )	ru   r   r   r   erl  errsbestr   s	            r   r   MXFP4.quantize_blocks  s   <<?KOOdO3[[)Q 4q 83 >BII"((SA * !!!$((3;;bgg6>>zJvvaii1a 01GNN2::4NNQWQ_Q_aikyky{|`}Q~~yyB6\\(As~~':;BB288L1XAqDRXXa[01ZZ>>Q#678~~qgB// *)s   A'H
H c                   UR                   S   n[        R                  " US/5      u  p4U R                  U5      nUR	                  USU R
                  S-  45      [        R                  " SS/[        R                  S9R	                  S5      -	  nU[        R                  " S5      -  R                  [        R                  5      n[        R                  " U R                  [        R                  S9R	                  SSS5      n[        R                  " XdS	S
9R	                  X R
                  45      nXTR                  [        R                  5      -  $ )Nr   r   r8   r~   rz   r-  r}   r$   r   r   )r   r(   r   ri  r'   r   r   ro   r\   r   rl  r   rP   rQ   )ru   r   r   rn  r   r   rl  s          r   r   MXFP4.dequantize_blocks  s    <<?		&1#&!!!$ZZ1cnn&9:;rxxAVXV^V^?_?g?ghq?rr288D>!''0((3;;bgg6>>q!RH"5==x>XYIIbjj))*r   rD   N)r  r   r   r   r   )rE   rF   rG   rH   rl  rA  ri  r   r   r   rI   rD   r   r   rc  rc    sD     HG% % 0 0, + +r   rc  c                  D    \ rS rSr% SrS\S'   SrSrSr\	SS j5       r
S	rg
)IQ2_XXSi  s    	
!"$'(+-.03569:<?ABDGHKMNPSUVYZ\_`cefijloqrtwx{}~bytesksigns)rS  ry   ry      +   s   00000200050008000a00110014002000220028002a00410044005000580061006400800082008a00a20001010401100115014001840198010002020222028202010404041004210424044004420448046004810484049004a404000502050805200546056905800591050906100640068406a406000805080808140828084108440850085208880804094009020a140a01100410101021104010601084109010951000110811201150115a1180112412451200140814201425144914801418156215001616160118041810184018811800190519a019511a002002200a2044206120802082202921482100220222012404241024402456240025412564259026082820289428442a0140044010401840214024404040484056406040814084409040004120416141804185410142104248425642684200440844204480449944124524450046014804481048404845480049584961498249454a904a005008501150195020508050885004514251a4519152905492540a550156545600581158195864584059085a04601060406068600061556118626062006405641065126584654268008002800a8041808280048118814081118201840484108415844084608400854685948509864086608602880489118a0490109024904090a19016918091459200942294449451958198209902a050a085a009a100a218a450a804a9c           	     |   UR                   S   n[        R                  " US/5      u  p4UR                  [        R                  5      R                  [        R                  5      nUR                  [        R                  5      R                  USS5      nU[        R                  " S5      US   S-	  R                  [        R                  5      -   -  [        R                  " S5      -  nUR                  USSS45      nUS   R                  USS45      [        R                  " / S	Q[        R                  S
9R                  S5      -	  n[        R                  " U R                  [        R                  S
9R                  S5      nU[        R                  " S5      -  R                  USSS45      n[        R                  " XvSS9nUR                  USSS45      [        R                  " [        S5       Vs/ s H  oPM     sn[        R                  S
9R                  S5      -	  nU[        R                  " S5      -  n[        R                  " US:H  [        R                  " S5      [        R                  " S5      5      nUR                  USSS45      nU R                   c   e[        R                  " U R                   US   R#                  5       R                  [        R                  5      R                  USSS45      SS9n	U	R                  USSS45      n	XY-  U-  R                  US45      $ s  snf )Nr   r8   r   r   r            ?r   r            rz   r   r   r~   r   r   r      r  r~   r   ry   r   r   r   ry   r   r6  )r   r(   r   r\   rS   rP   rQ   r   r'   r   r   rw  ro   r   r   r   rb   rM   )
ru   r   r   r   r   dbsignsrw  r   rb   s
             r   r   IQ2_XXS.dequantize_blocks  s   <<?		&1#&FF2::%%bjj1WWRYY''"a8"**S/RZ2%5$=$=bjj$IIJRZZX\M]]ZZ2q!,- 6
""Hb!#45.XZXaXa9b9j9jkt9uuszz:BB>R4(118RA2FG""6r:xQ23rxxERSH@UHqH@U]_]e]e7f7n7no{7||&!RZZ]BJJrNCxQ23xx###!!#((BvJOO,=,B,B288,L,T,TV^`bdeghUi,jqst||Xr1a01	E!**Hb>:: AVs   ;L9
rD   Nr   )rE   rF   rG   rH   rw  r   rc   rd   re   r   r   rI   rD   r   r   ru  ru    s?    	L E 	 J!H	L & ; ;r   ru  c                  4    \ rS rSrSrSrSr\SS j5       rSr	g)	IQ2_XSi  )   ry   rx  s   00000200050008000a001100140016001900200022002500280041004400460049005000520055005800610064008000820085008800910094009900a000010104010601090110011201150118011a0121012401400142014501480151015401600168018101840190010002020205020802110214022002410244025002550280028a02010404040604090410041204150418042104240440044204450448045104540456046004810484049004000502050505080511051405200541054405500561058005010604061006260640064206840600080208050808080a08110814082008250841084408500858088008a008aa08010904091009400981098909000a200a280a960aa00a011004100610091010101210151018102110241040104210451048105110541060106a108110841090100011021105110811111114112011411144115011801194119611011204120612101240126012001402140514081411141414201441144414491450146414801401150415101540150016141649160118041810181218401854188618001905196619511aa91a00200220052008200a201120142020204120442050208020a020012104211021402148216521002222228022a82201240424102429244024002541255225992501261a26a626002808280a28202855288828a22868299029082a202a822a882a8a2a014004400640094010401240154018402140244040404240454048404a405140544060406540814084409040004102410541084111411441204141414441504180418541a2410142044210421242294240420044024405440844114414441944204441444444504480449444014504451045244540459a4500460a4644465046014804481048404845485448624800491149444950496949044a00500250055008501150145020502850415044505050805001510451105115514051425100524452aa520154045410542154405460548154a154005508558055885521566856a156005814584158505899581a5940594259855a0160046010604060546062608660a960006124624a62926200641664106540654565a46501686a682569066a546a626a00800280058008801180148020802a8041804480508080808280a880aa8001810481068110814081518159810082208280828282a082a8820184048410841284158440846084898400854485a58518866a860088088825885a8880888288a8880689228a808a888a968aa88a019004901090409056908490009122916491569289920094059444945094589429959095929541965198a6984999159a609a00a002a008a00aa020a02aa0a0a051a159a1a6a100a202a208a22aa280a2a0a240a495a465a698a60aa820a822a828a8a0a8a8a804a984a986a928aa2aaa91aaaaaac           	     0   UR                   S   n[        R                  " US/5      u  p4[        R                  " US[        -  S-  /5      u  pVUR	                  [        R
                  5      R                  [        R                  5      nUR	                  [        R                  5      nUR                  USS45      [        R                  " SS/[        R                  S9R                  S5      -	  nUS	-  R                  US45      nU[        R                  " S
5      U-   -  [        R                  " S5      -  nUR                  USSS45      n[        R                  " [        R                  [        R                  S9R                  SSS5      n[        R                  " XS-	  R                  USS45      SS9nUR                  USS45      [        R                  " [!        S5       V	s/ s H  oPM     sn	[        R                  S9R                  S5      -	  nU[        R                  " S5      -  n[        R"                  " US:H  [        R                  " S5      [        R                  " S5      5      nUR                  USSS45      nU R$                  c   e[        R                  " U R$                  U[        R                  " S5      -  R                  USSS45      SS9n
U
R                  USSS45      n
Xz-  U-  R                  US45      $ s  sn	f )Nr   r8   ry   r   r   r~   rz   r   r   r8   r}   r   r}  r  r|   r   r   r   ry   i  r6  )r   r(   r   r   r\   rS   rP   rQ   r   r'   r   ro   r   ru  rw  r   r   r   rb   )ru   r   r   r   r   r   r"  r  r  r   rb   s              r   r   IQ2_XS.dequantize_blocks,  sq   <<?))FQC(YYta$h!m_5
FF2::%%bjj1WWRYY2q 12bhh1vRXX6V6^6^_h6ii4-(((B8"**S/F*+bjj.>>ZZ2q!,- gnnBHH=EEaCP""57*;*;Xr1<M*NUWXxQ/0BHHq=RAa=RZ\ZbZb4c4k4klu4vv&!RZZ]BJJrNCxQ23xx###!!#((R"))C.-@,I,I8UWYZ\]J^,_fhi||Xr1a01	E!**Hb>:: >Ss   ,L
rD   Nr   
rE   rF   rG   rH   rc   rd   re   r   r   rI   rD   r   r   r  r    s.     J!H	L F ; ;r   r  c                  4    \ rS rSrSrSrSr\SS j5       rSr	g)	IQ2_SiJ  )i   ry   rx  s   00000200050008000a0011001400160019002000220025002800410044004600490050005200550058006100640066006900800082008500880091009400a000a500aa0001010401060109011001120115011801210124014001420145014801510154015601590160016501680181018401900192019501a101a40100020202050208021102140220022a02410244024602490250025502800285028a029402a20201040404060409041004120415041804210424042604290440044204450448044a0451045404560459046004620465048104840486048904900495049804a104a40400050205050508050a0511051405160519052005250528054105440546054905500552055505580561056405800582058505880591059405a00501060406060609061006150640064506480651065406600681068406900600080208050808081108140816081908200825082a084108440846084908500852085508580861086408800885089408aa08010904091009120915091809210940094509480951095409600981099009000a110a140a220a280a2a0a500a990a01100410061009101010121015101810211024102610401042104510481051105410561059106010621065106810811084108610901095109810a110a41000110211051108110a1111111411161119112011221125112811411144114611491150115211551158116111641180118211851188119111941101120412091210121512211224124012451251125412811284129012001402140514081411141414161419142014251428144114441446144914501452145514581461146414801482148514881491149414a014011504150615091510151215151518152115241540154215451548155115541560158115841590150016051608161116141620164116441650168016aa160118041806180918101815181818211840184218451848185118541860188118841800190219051908191119141920194119441950196919a219041a101a401a561a00200220052008201120142016201920202025202a2041204420502052205520642080208a209420aa2001210421102112211521212140214221452151215421602181218421902100220a22222228222a224422502288228a22a8220124042406240924102415241824212424244024422445244824512454246024812484249024002505250825112514252025412544255025662580250126042610264026592600280528112814284128442850288a28aa2801290429102995290a2a222a642a882a8a2a014004400640094010401240154018401a4021402440264040404240454048404a40514054405640594060406240654081408440904095409840a140a440004102410541084111411441164119412041224125414141444146414941504152415541584161416441804182418541884191419441a04101420442104212421542184224424042454248425142544260428142844200440244054408440a44114414441644194420442244254428444144444446444944504452445544584461446444804482448544884491449444a044014504450645094510451245154518452145244540454245454548455145544560456a4581458445904500460246054608461146144620464146444650468046a546014804480948104812481548184821482448404842484548484851485448604884489048004902490549084911491449204941494449504980499649014a044a104a404a0050025005500850115014501650195020502250255028504150445046504950505052505550585061506450805082508550885091509450015104510651095110511251155118512151245140514251455148515151545160518151845190510052055208521152145220524152445250526952805201540454065409541054125415541854215424544054425445544854515454546054815484549054005502550555085511551455205541554455505580550156045610562656405600580258055808581158145820584158445850585a5880580159045910594059005a195a855aa85a016004600660106012601560186021602460406045604860516054606060846090600061026105610861116114612061416144615061806199610462106240625662a162006405640864116414642064416444645064806401650465106540654a6568659265006694660168046810686568986800692a69426aa16a00800280058008801180148019802080258041804480508052805580588061808080858091809480018104810981108112811581188121812481408142814581488151815481818184819081a981008205820a82118214824182448250820184048406840984108412841584188421844084428445844884518454846084818484849084008502850585088511851485208541854485508580858a85018604861086298640860088058811881488418844885088a2880189048940896589228a588a5a8a828aa28a01900490099010901290159018902490409042904590489051905490609081908490909000910591119114914191449150915a910192049210924092a69200940294059408941194149420944194449450948094969401950495109540959895a19500964696649601980498109826984098a998009949995299909a00a005a00aa014a022a02aa041a044a050a0a2a0aaa040a165a102a20aa222a228a22aa282a288a28aa2a8a201a404a410a440a489a4a4a400a519a551a60aa828a8a2a854a986a908aa0aaa20aa22aa28aa88aaaaaac           	        UR                   S   n[        R                  " US/5      u  p4[        R                  " U[        S-  /5      u  pT[        R                  " U[        S-  /5      u  pd[        R                  " U[        S-  /5      u  pxUR	                  [        R
                  5      R                  [        R                  5      nUR                  USS45      [        R                  " SS/[        R                  S9R                  S	5      -	  nUS
-  R                  US45      nU[        R                  " S5      U-   -  [        R                  " S5      -  n	U	R                  USSS45      n	UR                  USS45      [        R                  " [        S5       V
s/ s H  oPM     sn
[        R                  S9R                  S5      -	  nU[        R                  " S5      -  n[        R                  " US:H  [        R                  " S5      [        R                  " S5      5      nUR                  USSS45      nUR                  USS45      [        R                  " / SQ[        R                  S9R                  S5      -	  nUR                  [        R                  5      US-  R                  [        R                  5      S-  R                  US45      -  nU R                  c   e[        R                  " U R                  UR                  USSS45      SS9nUR                  USSS45      nX-  U-  R                  US45      $ s  sn
f )Nr   r8   ry   r  r   r   r~   rz   r  r}   r   r}  r  r  r  r!  r6  r   r   r(   r   r   r\   rS   rP   rQ   r'   r   ro   r   r   r   rb   r   )ru   r   r   r   r   r   r  r  r"  r  r   rb   s               r   r   IQ2_S.dequantize_blocks  s   <<?))FQC(99TDAI;/iitqyk2YYtdbj\2
FF2::%%bjj12q 12bhh1vRXX6V6^6^_h6ii4-(((B8"**S/F*+bjj.>>ZZ2q!,- xQ/0BHHq=RAa=RZ\ZbZb4c4k4klu4vv&!RZZ]BJJrNCxQ23ZZ2q)*bhh|288.T.\.\]f.ggYYryy!b4i%7%7		%Ba%G$P$PRZ\^Q_$``xx###!!#((BJJ"a7K,LSUV||Xr1a01	E!**Hb>:: >Ss    M
rD   Nr   r  rD   r   r   r  r  J  s.     J!H?	L F ; ;r   r  c                  4    \ rS rSrSrSrSr\SS j5       rSr	g)	IQ3_XXSi  )rS  r~   )r~   r,     r|  $   ,   4   >   s   0000020004001100130017002000220031004200730075000101030110011201210125013001320141015401700100020202040211022002220231023302370251025702750201030703100312032503700313043704440457047304750401050705320552053506640610071407160743076107011003101010121021102310301032103410471050100011021111112011221101120312101212122112301272120013021320133113461366130114051450142015241546157115051622174017002002201120132020202220262031204220012103210521102112212121302163216721702100220222112217222022222237224022552201231023142370237423352453240325272541257425012703271627452701301030123021302330503065307230003102312031313144314631013203321032253252327232113333333034473472340035063522355535143636366336333760370440174035403740534057407441204237424042604266420743454304445144644425454345704505471047124730471250415070500051065126515551145232527252025353531054235427547254025531555056245742572460446046606460216161611762646230633663446405655265336603672167037005700770107032705270267140711272457252720073157333736073217441740075027524753076c           	     <   UR                   S   n[        R                  " US/5      u  p4[        R                  " U[        S-  /5      u  pVUR	                  [        R
                  5      R                  [        R                  5      nUR	                  [        R                  5      nU[        R                  " S5      US-	  R                  [        R                  5      -   -  [        R                  " S5      -  nUR                  USSS45      nUR                  USS45      [        R                  " / SQ[        R                  S	9R                  S
5      -	  n[        R                  " [        R                  [        R                  S	9R                  S5      n	U[        R                  " S5      -  R                  USSS45      n[        R                  " XSS9nUR                  USSS45      [        R                  " [!        S5       V
s/ s H  oPM     sn
[        R                  S	9R                  S5      -	  nU[        R                  " S5      -  n[        R"                  " US:H  [        R                  " S5      [        R                  " S5      5      nUR                  USSS45      nU R$                  c   e[        R                  " U R$                  UR                  USSS45      SS9nUR                  USSS45      nX{-  U-  R                  US45      $ s  sn
f )Nr   r8   r~   r   r|  r   r   r~  rz   r  r  r  r   ry   r  r6  )r   r(   r   r   r\   rS   rP   rQ   r   r'   r   r   ru  rw  ro   r   r   r   rb   )ru   r   r   r   r   r   r"  r  r  rw  r   rb   s               r   r   IQ3_XXS.dequantize_blocks  sd   <<?))FQC(YYtdai[1
FF2::%%bjj1RYY'"**S/Vr\$9$9"**$EEFTWXZZ2q!,- "a01RXXnTVT]T]5^5f5fgp5qqw~~RXX>FF~V4(118RA2FG""6r:xQ23rxxERSH@UHqH@U]_]e]e7f7n7no{7||&!RZZ]BJJrNCxQ23xx###!!#((BJJ"a7K,LSUV||Xr1a01	E!**Hb>:: AVs   	L
rD   Nr   r  rD   r   r   r  r    s+    J?H	L & ; ;r   r  c                  4    \ rS rSrSrSrSr\SS j5       rSr	g)	IQ3_Si  )r  r~   )r   r!  rO  r  r|         r}   s   00000100020005000700100011001200140016002000210025003300400042004500470051005300600062007100740077000001010102010401100111011501200123012701310135014401610165017201000201020502070210021302160221022502300234024202450247025102530270027302030311031503200322033103330336034403500352036703710375030004130417042104240432044004430451047004020504052005220526053305410545054705660573050606110613063106520671060007020704072007220726073307500754070010011002100410101011101310151017102010221031103410361054105610611072100011011103110611101114112111301133114111501152117011761100121212151217122012241232124012431255126012721201130413071310131313211327133013341341136213701303140514121414143114331442144614501454140115101513152115301532155115201624162716441646160117031710171217211735174117621770170020012003200520072010201220142016202120232027203020322041204320452050205220672070207320752000210221102113211721222125213121342142215121012204220722212223223022372241225322572271227422002302230523112322232423312333234223502366230124072420242324322435244124722475240425112522253725402553257025002602260726212655266126052711272627302743275027023011301330153017302230313033303530423044304730513063307130013103310531143121312331403160317231763100321232203232323432503201331033143321332333273330334133433347335533733303341134163422343134523460346434013510351235253532354435563573351636413601370337203722373537004004401240204024402740324041405040704002410741114113412241304135414341514155410142034210421542214233424042574262427042044311431343204322433143354300440244244437444044714405450745214562451346344660461047154730474347514702501050145022504050445047505250665074500151035105511251215132517251005211522352305236525352025307531053275344535153655373530154045420543254465412552655515553554256025704572257116013601560316033606060006120612761646112623462426255626262706200631463216340632564436462640065036534656065056640661167136700700470077020702270367040705470627002711171247143714571017204721072167221723072517202733273357353730174057413742074507422754275027631760077c           	     v   UR                   S   n[        R                  " US/5      u  p4[        R                  " U[        S-  /5      u  pT[        R                  " U[        S-  /5      u  pd[        R                  " U[        S-  /5      u  pxUR	                  [        R
                  5      R                  [        R                  5      nUR                  USS45      [        R                  " SS/[        R                  S9R                  S	5      -	  nUS
-  R                  US45      nUSSU-  -   -  n	U	R                  USSS45      n	UR                  USS45      [        R                  " [        S5       V
s/ s H  oPM     sn
[        R                  S9R                  S5      -	  nU[        R                  " S5      -  n[        R                  " US:H  [        R                  " S5      [        R                  " S5      5      nUR                  USSS45      nUR                  USS45      [        R                  " [        S5       V
s/ s H  oPM     sn
[        R                  S9-	  nUS-  R                  [        R                  5      R                  US45      nUR                  [        R                  5      US-  -  nU R                  c   e[        R                  " U R                  UR                  USSS45      SS9nUR                  USSS45      nX-  U-  R                  US45      $ s  sn
f s  sn
f )Nr   r8   r~   r  ry   r   r   rz   r  r}   r  r6  r   r  )ru   r   r   r   r   r   r  r  r"  r  r   rb   s               r   r   IQ3_S.dequantize_blocks  s   <<?))FQC(99TDAI;/99TDBJ<0		$4FF2::%%bjj12q 12bhh1vRXX6V6^6^_h6ii4-(((B8!a&j.!ZZ2q!,- xQ/0BHHq=RAa=RZ\ZbZb4c4k4klu4vv&!RZZ]BJJrNCxQ23ZZ2q)*bhh587L8a87LTVT\T\.]]4i		*22Hb>BYYryy!R1W-xx###!!#((BJJ"a7K,LSUV||Xr1a01	E!**Hb>:: >S
 8Ms   8L1
	L6
rD   Nr   r  rD   r   r   r  r    s,    J?H	L F ; ;r   r  c                  X    \ rS rSrSrSrSr\R                  " S5      r	\
S	S j5       rSrg)
IQ1_Si-  )i   ry   )r   r   r   s    00000200050008000a00110015002000220028002a00450051005400560065008000820088008a009500a000a200a800aa000401050111011401160119011a012501410146014901520155015a0161016401660168018501910194019601a5010002020208020a0215022002220228022a02450251025902640269028002820288028a02910295029902a002a202a802aa0211041404160425044104490455045a046404650491049904a5040105040505050605150518051a052905400545054a0550055105540555055605590560056205650568056a0581059105950598059a05a105a405a505a605a90514061906410644065006520655065806600661066606690685069106940699060008020808080a0815082008220828082a0845085108560865088008820888088a089508a008a208a808aa0805091109140919092409250941095009510955096109640969099109940996099909a509000a020a080a0a0a150a200a220a280a2a0a450a510a590a610a650a800a820a850a880a8a0a950aa00aa20aa80aaa0a101011101410191024102510411044105010551058106110641065106910911094109610a110a5100111041106110911101112111511181121112411291145114a11501151115211541155115611591160116511841192119511a111a41111121412161225124012461249125212551258125a12641266128512911294129612a51201140614091414141514181419142114261441144514461448144a145114541455145614591462146514681484148914901494149514981499149a14a114a414a514a914021505150a151115141515151615191520152215251528152a1541154415451546155115521554155515561559155a1561156415651566156915801582158415851588158a159015911594159515961599159a15a015a215a51501160416051606161516161618161a1621162616401642164416451648164a1651165516561658165916611664166516681669166a1686168a1692169516a416a91611181618251841184418461849185018551858185a1860186118641866186918851891189418a5181019121915191a19211925194219441945194819511954195519561959195a19601965196a1989199119921995199819a119a619a919091a161a241a261a441a461a491a501a521a551a581a611a661a691a851a911a961a9a1a0020022008200a20152020202220252028202a20452051205920612065208020822088208a209520a020a220a520a820aa2005211121142119212521422144214921552158215a2161216421652166218521902196219921a521012208220a22112215222022222228222a2245225122562259226522812288228a2291229522a022a222a822aa220524142416241924252444244524462449245224552458245a2466248524912494249924a124a52409251525212529254025452548255125542555255925622565256825892590259425952598259a25a125a425a625a925052610261226192625264126492655266026612669268426862690269a260028022808280a2815282028222828282a2845285128542865288028822888288a28a028a228a828aa2809291129142919292529462949295229552961296429662969298529902996299929a429a529002a022a082a0a2a202a222a282a2a2a452a512a562a592a652a802a822a882a8a2a952aa02aa22aa82aaa2a054011401640254049405240554058405a4061406440664094409940a140a6400041014104410641094112411541164118411a41214126412941454148414a41514154415541564159415a41654168416a41814184418641904192419541a041a141a241054211421442164225424142524255425a426442694289429442a5420144154419442944454448444a44514454445544564461446244654468446a44814486448944904492449544a044a144a9440145024505450a4511451445154516451945204525452a45414544454545464549455045514554455545564558455945614564456545664569458245844585458845914594459545964599459a45a545a845aa450146054609461446154618461a462146244629464046424645464846504651465246554656465946624665466846814685468a4694469546a146a446a6460548114815481a48254842484948504855485848614864486648694885489148944896489948a5480149054906490a491049144915491849214924492649404945494a4951495249544955495649594960496249654966496a49864989499249954996499849a149a449a649a949164a444a464a494a554a584a5a4a644a694a944aa54a01500450055006500950125015501a5021502450295040504550485051505450555056505950655068508650895095509850a050a150a650a9500551085109510a5111511451155116511851195120512551265128512a5141514451455146514951505151515251545155515651585159515a51615164516551665169518251855191519451955196519951a051a551aa5101520652125215521a5221522452425245524a525152545255525652595262526552855290529252955299529a52a452045405541154145415541654185419542154255428542a54415444544554465449544a5450545154545455545654585459545a54615462546454655466546954805488548a5491549454955496549954a154a454a554aa5401550255045505550655095510551155125514551555165519551a552155245525552655295540554155425544554555465548554955505551555255545555555655585559555a5560556155645565556655685569556a5581558455855589558a559055915594559555965598559955a155a455a555a655a95500560156025604560656085609561156145615561856195620562156225624562556265628562956415645564656485649564a56505651565256545655565656585659565a566156645665566956825685568656885689568a56915695569a56a256a556a656a856a956045805580658095810581558185821582a58455848584a585158545855585658585859586058625864586558825889589058925895589858a158a9580159025905590a5911591459155916591959255941594459455946594959505951595259545955595659585959595a5961596459655966596959815985598959915994599559965998599959a559045a085a155a1a5a205a255a265a295a455a485a495a515a555a565a585a595a625a655a685a6a5a815a8a5a925a955a965a985a9a5aa15a05601460166019602560446050605560566058605a60616064606660696081609660a5600161046106610961126115612161226126612961456149615161556156615961656166616a6184618a6192619561a161a661a9611162166219624062416246625562566258626062856291629662a56211641264156416641a6421642664296440644264456448644a64516454645564566459645a646064626465648464856489649064926494649564966498649a64a164a464a964056508650a651165156516651965446545654665496550655165546555655665596561656465656566656965866589658a6591659565966599659a65a265a565a665a86502660966156620662666286629664066456648664a66516654665566566658665a666066656668668066826685668a669466966698669966a066a466a666aa661668196825684168526855685a6861686968856891689868a668016904691069156921692469266929694069416945694669486951695469556956695969606965696a69826984698a699569a169a469a569a969116a166a186a416a446a496a506a556a586a5a6a646a656a696a866a946a986a9a6aa66a0080028008800a802080228028802a8045805080518054805680598065808080828088808a809580a080a280a880aa8005811181148116811981258141814481498150815281558156815881598164816681698185818981948196819981a5810082028208820a8215822082228228822a8251825482598265828082828288828a829582a082a282a882aa821484198441844484518455845a846184648469849484998401850985128515851a85268529854085418545854885518554855585568559855a856585668568856a8581858485868589859085928595859885a68511861686198625864186448649864a865086558659865a86618666866a86858691869a86a4860088028808880a8815882088228828882a8841884588518854885988658869888088828888888a889588a088a288a888aa8805890689118914891689258941894489468949895089528955895a8961896489858996899989a589008a028a088a0a8a158a208a228a288a2a8a458a518a548a568a808a828a888a8a8a958aa08aa28aa88aaa8a059011901690189019902590419046904990559058905a9069906a9085909190949096909990a59001910491069109911091159118911a912191249126912991409145915091519154915591569159916291659184918691929195919891a191a491a691a99105921192149219922592449246924992509252925592589266926992859294929692a992019404940694109415941894269440944a945194549455945694589459946094619462946594849486949294949495949894a194a9940095059508950a951095119514951595169519952195259529952a9541954495459546954995509551955295549555955695589559955a95619564956595669569958195859588959195929594959595969599959a95a095a295a595a895aa950196049610961596199620962696299645964896499651965296559656965996659668968296849689968a96929694969596a496a696a99605981698199825984198469850985298559856985a98649865988598919896989998a59804990699099910991299159918991a99209921992499269940994299459948994a99519954995599569959996299659966996a99819984999099929995999a99a199a699059a159a259a449a469a499a509a559a589a619a859a919a949a959a969a00a002a008a00aa015a020a022a028a02aa045a051a054a056a059a080a082a088a08aa095a0a0a0a2a0a8a0aaa005a109a111a114a116a119a11aa146a149a151a155a158a15aa161a164a185a190a192a196a199a102a208a20aa210a219a222a228a22aa245a251a256a259a265a280a282a288a28aa295a2a0a2a2a2a8a2aaa219a425a441a444a450a454a455a458a45aa461a465a466a468a469a485a406a509a510a512a515a518a526a529a542a545a551a554a555a556a559a565a56aa581a584a585a586a589a592a595a598a505a611a616a61aa621a625a644a646a64aa652a655a656a658a660a662a686a690a695a696a699a6a1a6a4a6a6a600a802a808a80aa820a822a828a82aa851a854a856a859a880a882a888a88aa895a8a0a8a2a8a8a8aaa805a914a919a921a925a941a950a955a95aa961a966a969a990a996a900aa02aa08aa0aaa20aa22aa28aa2aaa51aa54aa56aa80aa82aa88aa8aaa95aaa0aaa2aaa8aaaaaag      ?c           	     2   UR                   S   n[        R                  " US/5      u  p4[        R                  " U[        S-  /5      u  pVUR	                  [        R
                  5      R                  [        R                  5      nUR	                  [        R                  5      nUSUS-	  S-  -  S-   -  nUR                  USSS45      n[        R                  " U[        R                  " S5      -  S:H  U R                  U R                  * 5      nUR                  USSS45      nUR                  USS45      [        R                  " / S	Q[        R                  S
9R                  S5      -	  nUR                  [        R                  5      US-  S-  R                  US45      -  nU R                  c   e[        R                  " U R                  UR                  USSS45      SS9n	U	R                  USSS45      n	XyU-   -  R                  US45      $ )Nr   r8   ry   r,  r  r   r   i   r   r!  r  r|   rz   r  r6  r   r~   )r   r(   r   r   r\   rS   rP   rQ   r   r'   r   deltar   rb   r   )
ru   r   r   r   r   r   r  r$  r  rb   s
             r   r   IQ1_S.dequantize_blocks  s   <<?))FQC(4$!)-FF2::%%bjj1WWRYY!bA~&*+ZZ2q!,-"ryy00Q6		CII:NxQ23ZZ2q)*bhh|299.U.].]^g.hhYYryy!b1f]$;$;XrN$KKxx###!!#((BJJ"a7K,LSUV||Xr1a01Ul#,,h^<<r   rD   Nr   )rE   rF   rG   rH   rc   rd   re   r(   rQ   r  r   r   rI   rD   r   r   r  r  -  s=     JH	L F JJuE= =r   r  c                      \ rS rSr\R
                  r\R                  r\R                  r\R                  r\	SS j5       r
Srg)IQ1_Mi  c           	        UR                   S   n[        R                  " U[        S-  /5      u  p4[        R                  " U[        S-  /5      u  pVUR	                  [        R
                  5      nUR                  US45      [        R
                  " S5      -  [        R                  " / SQ[        R
                  S9R                  S5      -	  nUS	   US
   -  US   -  US   -  nUR	                  [        R                  5      R                  [        R                  5      R                  US45      nUR                  USS5      [        R                  " / SQ[        R
                  S9R                  S5      -	  nUS-  R                  US45      nUSU-  S-   -  nUR                  USSSS45      nUR                  USS45      [        R                  " SS/[        R                  S9R                  S5      -	  nUR                  [        R
                  5      US-  R                  [        R
                  5      S-  R                  US45      -  n[        R                  " US-  S:H  U R                  U R                  * 5      n	U	R                  USSSS45      n	U R                  c   e[        R                  " U R                  UR                  USSS45      SS9n
U
R                  USSSS45      n
XU	-   -  R                  US45      $ )Nr   ry   r$   r~   i   )r,  ry   r~   r   rz   )r   r~   r   r   ).r8   ).r!  r   r   r  r  r  r8   r  r6  r   )r   r(   r   r   r\   r   r'   r   rS   rP   rQ   ro   r   r  rb   r   )ru   r   r   r   r   r  r"  r   r$  r  rb   s              r   r   IQ1_M.dequantize_blocks  s   <<?99Vdai[1YYtdbj\2
 RYY'^^XqM*RYYv->>288MacajajCkCsCstzC{{fI&	!AfI-&	9FF2::%%bjj1998Q-H"a0BHH\QSQZQZ4[4c4cdm4nn4-(((B8!f*q.!ZZ2q!Q/0ZZ2q)*bhh1vRXX.N.V.VW`.aaYYryy!b4i%7%7		%Ba%G$P$PRZ\^Q_$``daSYYJ?xQ156xx###!!#((BJJ"a7K,LSUV||Xr1a34Ul#,,h^<<r   rD   Nr   )rE   rF   rG   rH   r  rc   rd   re   r  r   r   rI   rD   r   r   r  r    s<    !!J~~H~~HKKE = =r   r  c                  ,    \ rS rSrSr\SS j5       rSrg)IQ4_NLi  )iiiiiiiir   r  ry  &   5   E   Y   q   c                   UR                   S   n[        R                  " US/5      u  p4UR                  [        R                  5      R                  [        R                  5      nUR                  USSU R                  S-  45      [        R                  " SS/[        R                  S9R                  S5      -	  nU[        R                  " S5      -  R                  USS45      n[        R                  " U R                  [        R                  S9R                  SSS	5      n[        R                  " XTSS
9R                  [        R                  5      R                  US45      nX4-  $ )Nr   r8   r   r   r~   rz   r   r}   r$   r   )r   r(   r   r\   rS   rP   rQ   r'   r   r   ro   rl  r   r   )ru   r   r   r   r   rl  s         r   r   IQ4_NL.dequantize_blocks  s   <<?		&1#&FF2::%%bjj1ZZ2q#..A*=>?288QPQFZ\ZbZbCcCkCklxCyy288D>!**Hb!+<=((3;;bgg6>>q!RH"5<<RZZHPPRZ\^Q_`r   rD   Nr   )rE   rF   rG   rH   rl  r   r   rI   rD   r   r   r  r    s    XG r   r  c                  (    \ rS rSr\SS j5       rSrg)IQ4_XSi  c                   UR                   S   n[        R                  " US/5      u  p4[        R                  " US/5      u  pT[        R                  " U[        S-  /5      u  pgUR	                  [        R
                  5      R                  [        R                  5      nUR	                  [        R                  5      nUR                  USS45      [        R                  " SS/[        R                  S9R                  S5      -	  nUR                  USS45      [        R                  " [        [        S	-  5       Vs/ s H  nSU-  PM
     sn[        R                  S9R                  S
5      -	  nUR                  US45      [        R                  " S5      -  nUR                  US45      R                  [        R                  5      [        R                  " S5      -  nXe[        R                  " S5      -  -  R                  [        R                  5      [        R                  " S	5      -
  n	X9R                  [        R                  5      -  R                  USS45      n
UR                  USSS45      [        R                  " SS/[        R                  S9R                  S5      -	  nUR                  USS	S45      [        R                  " S5      -  n[        R                  " [        R                  [        R                  S9R                  S5      n[        R                   " XSS9R                  [        R                  5      R                  USS	45      nX-  R                  US45      $ s  snf )Nr   r8   r{   r   r   r~   rz   r  r  )r   r   r   r}   r!  r$   r   )r   r   r   r   r   )r   r(   r   r   r\   rS   rP   rQ   r   r'   r   ro   r   r   r  rl  r   )ru   r   r   r   r   scales_hscales_lr   r   r"  r$  rl  s               r   r   IQ4_XS.dequantize_blocks  s   <<?))FQC(4!-yy
|4FF2::%%bjj1==+##Xr1$56"((Aq6QSQYQY:Z:b:bcl:mm##Xq"$56"((SXY]acYcSdCeSdaAESdCemomvmv:w::  AK  ;L  L##XrN3bhhtnD##XrN3::288DrxxPT~U"((1+56>>rwwG"''RT+U--

++44hA5FGZZ2q"-."((Aq62R2Z2Z[g2hhZZ2r1-.$?((6>>9AA-P"5<<RZZHPPRZ\^`bQcd  (B00 Dfs    M6
rD   Nr   r(  rD   r   r   r  r    s    1 1r   r  )r   r   r   r   r   tuple[int, ...])
r-   z"Callable[[np.ndarray], np.ndarray]r.   r   r/   r   r0   r  r   r   )r<   r   r   r   )rX   r   rY   r   r   r   )8
__future__r   abcr   r   typingr   r   r   mathr	   r
   numpy.typingr   	constantsr   r   r   lazyr   numpyr(   r   r!   r6   r@   	ExceptionrB   rJ   r   rU   r]   r_   r   r   r   r   r  r  r  r*  r4  rC  rG  rK  r]  rc  ru  r  r  r  r  r  r  r  r  rD   r   r   <module>r     sf   " # * *  " C C ! >>	 !   ;=7 <[]{2c {2|O7.33 O +7.33 +D"7.33 "J'+7.33 '+T*7.33 *Z7.33 4*7.33 *6)27.33 )2X/77.33 /7d67.33 6617.33 1.-+G/55 -+`+G/55 +B0+G/55 0+f>;g199 >;BC;W077 C;Le;G/55 e;P1;g199 1;hD;G/55 D;N`=G/55 `=F$=G/55 $=NW077 *1W077 1r   