
    #;7j                       U d dl mZ d dlmZmZ d dlmZmZmZ d dl	m
Z
mZ d dlmZ ddlmZmZmZ ddlmZ d d	lZdWdZdWdZdXdZdYdZ G d de          Zi Zded<   dZd"ZdZd#Z G d$ d%e          Z  G d& d'e ej!        (          Z! G d) d*e ej"        (          Z" G d+ d,e ej#        (          Z# G d- d.e ej$        (          Z$ G d/ d0e ej%        (          Z% G d1 d2e ej&        (          Z& G d3 d4e ej'        (          Z' G d5 d6e ej(        (          Z( G d7 d8e ej)        (          Z) G d9 d:e ej*        (          Z* G d; d<e ej+        (          Z+ G d= d>e ej,        (          Z, G d? d@e ej-        (          Z- G dA dBe ej.        (          Z. G dC dDe ej/        (          Z/ G dE dFe ej0        (          Z0 G dG dHe ej1        (          Z1 G dI dJe ej2        (          Z2 G dK dLe ej3        (          Z3 G dM dNe ej4        (          Z4 G dO dPe ej5        (          Z5 G dQ dRe ej6        (          Z6 G dS dTe ej7        (          Z7 G dU dVe ej8        (          Z8d	S )[    )annotations)ABCabstractmethod)AnyCallableSequence)log2ceil)	DTypeLike   )GGML_QUANT_SIZESGGMLQuantizationTypeQK_K)LazyNumpyTensorNshapeSequence[int]
quant_typer   returntuple[int, ...]c           	         t           |         \  }}| d         |z  dk    r$t          d| d          d|j         d| d          g | d d         | d         |z  |z  R S )Nr   zQuantized tensor row size () is not a multiple of z block size ()r   
ValueErrornamer   r   
block_size	type_sizes       9/home/rurouni/src/llama.cpp-master/gguf-py/gguf/quants.pyquant_shape_to_byte_shaper!      s    ,Z8J	Ry:""  EuRy  E  EYcYh  E  E  xB  E  E  E  F  F  	F=U3B3Z=rj09<===    c           	         t           |         \  }}| d         |z  dk    r$t          d| d          d|j         d| d          g | d d         | d         |z  |z  R S )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!!  HE"I  H  H^h^m  H  H  |E  H  H  H  I  I  	I=U3B3Z=ri/*<===r"   func"Callable[[np.ndarray], np.ndarray]arr
np.ndarrayotyper   oshapec                r    |                     d|j        d         f          }t          |j                  sJ d}|D ]}||z  }t          j        ||          }|j        d         dz  pd}t          j         fdt          j        ||          D             d|           |                     |          S )Nr   r   )r   dtyper      c                J    g | ]} |                                            S  )ravel).0groupr%   s     r    
<listcomp>z,_apply_over_grouped_rows.<locals>.<listcomp>&   s-    TTTEDDKK%%''TTTr"   )axisout)reshaper   lennpemptyconcatenatearray_split)	r%   r'   r)   r*   rowsosizedimr5   n_groupss	   `        r    _apply_over_grouped_rowsr@      s    ;;CIbM*++Dtz???E  
(e
,
,
,C
1#)HNTTTTR^D(5S5STTT[\beffff;;vr"   nc                    t          |           }t          j        |          }|t          j        d||z
  z            z   }t          j        |           |z  S )N   )absr8   floorsign)rA   aflooredbs       r    	np_roundfrJ   ,   sI    AAhqkkG"(1G,---A71::>r"   c                      e Zd ZdS )
QuantErrorN)__name__
__module____qualname__r/   r"   r    rL   rL   3   s          r"   rL   z)dict[GGMLQuantizationType, type[__Quant]]_type_traitsdataqtypec                X   |t           j        k    r!|                     t          j        d          S |t           j        k    r!|                     t          j        d          S t                              |          x}|	                    |           S t          d|j         d          )NFcopyzQuantization for  is not yet implemented)r   F32astyper8   float32F16float16rP   getquantizeNotImplementedErrorr   rQ   rR   qs      r    r]   r]   9   s    $((({{2:E{222	&*	*	*{{2:E{222&&
&!	3zz$!"Yej"Y"Y"YZZZr"   c                   |t           j        k    r|                     t          j                  S |t           j        k    r<|                     t          j                                      t          j                  S t          	                    |          x}|
                    |           S t          d|j         d          )NzDequantization for rV   )r   rW   viewr8   rY   rZ   r[   rX   rP   r\   
dequantizer^   r   r_   s      r    rc   rc   D   s    $(((yy$$$	&*	*	*yy$$++BJ777&&
&!	3||D!!!!"[
"["["[\\\r"   c                     e Zd ZU ded<   ded<   ded<   dZded<   d	Zd
ed<   dZded<   dZded<   d Zd/dZ	e
d             Ze
ed0d                        Ze
ed0d                        Ze
d1d            Ze
d1d            Ze
d2d            Ze
d2d             Ze
d3d"            Ze
d3d#            Ze
d4d'            Ze
d4d(            Ze
d5d,            Ze
d6d-            Ze
d6d.            ZdS )7__Quantr   rR   intr   r   Nz,np.ndarray[Any, np.dtype[np.float32]] | Nonegrid)r   r   ztuple[int, int]
grid_shaper/   ztuple[int | float, ...]grid_mapzbytes | Nonegrid_hexc                     t          d          S )Nz-Quant conversion classes can't have instances)	TypeError)selfs    r    __init__z__Quant.__init__Y   s    HIIIr"   r   Nonec                6   || _         t          |         \  | _        | _        t	          j        | j        t          j        | j	        f          | _
        t	          j        | j        t          j        | j        f          | _        |t          vsJ | t          |<   d S )N)	meta_noop)rR   r   r   r   r   _wrap_fn_Quant__quantize_arrayr8   uint8_Quant__shape_to_bytes_Quant__quantize_lazy_Quant__dequantize_arrayrY   _Quant__shape_from_bytes_Quant__dequantize_lazyrP   )clsrR   s     r    __init_subclass__z__Quant.__init_subclass__\   s    	(8(?%#2#; x!56$
 $
 $
 &5%="z3#9:&
 &
 &
 L((((!Ur"   c           
        | j         | j        d S t          t          t	          | j                                      }|dk    sJ | j        j                    d|z  }t          j	        | j        t          j
                  }|                    d          }t          j        |dk    |dz   |          dz  t          j        ddgt          j
                                      d	          z  }|d
         |d         z  }|                    d          t          j        d t          ddd|z            D             t          j
                                      d|f          z	  }|d|z  dz
  z                      d          }t          j        | j        t          j                                      d          }t          j        ||d          }|                    ddg| j        R           | _         d S )Nr      r,   )r   rC   @   	         )r   rC   .r   .r   )r   r   c                    g | ]}|S r/   r/   r1   is     r    r3   z%__Quant.init_grid.<locals>.<listcomp>y   s    1^1^1^!1^1^1^r"   r   )r   r   r   r4   )rg   rj   r
   r	   r7   ri   rR   r   r8   
frombufferrt   r6   wherearrayrangerY   take_along_axisrh   )rz   bits_per_elemelems_per_byterg   ri   s        r    	init_gridz__Quant.init_gridj   s   83<#7FT#cl"3"34455!!!39>!!!m+}S\:::||G$$dQh55<1a&XZX`AaAaAaAiAijpAqAqqF|d6l*||G$$1^1^U1anI\=]=]1^1^1^fhfn(o(o(o(w(wyz  }K  yL  )M  )M  Mm+q01::7CC8CL
;;;CCGLL!(Dr:::<<A 7 7 788r"   blocksr(   c                    t           Nr^   rz   r   s     r    quantize_blocksz__Quant.quantize_blocks   
     "!r"   c                    t           r   r   r   s     r    dequantize_blocksz__Quant.dequantize_blocks   r   r"   r<   c                   |                     t          j        d          }|j        }|j        | j        z  }|                    || j        f          }|                     |          }|j        t          j	        k    sJ |j        d         | j
        k    sJ |                    |                     |                    S )NFrT   r   )rX   r8   rY   r   sizer   r6   r   r,   rt   r   ru   rz   r<   r   n_blocksr   s        r    quantize_rowsz__Quant.quantize_rows   s    {{2:E{22
9.x899$$V,,|rx''''|B3=0000~~c22599:::r"   c                |   |                     t          j                  }|j        }|j        | j        z  }|                    || j        f          }|                     |          }|j        t          j	        k    sJ |j        d         | j
        k    sJ |                    |                     |                    S )Nr   )rb   r8   rt   r   r   r   r6   r   r,   rY   r   rx   r   s        r    dequantize_rowsz__Quant.dequantize_rows   s    yy""
9-x788&&v..|rz))))|B3>1111~~c44U;;<<<r"   r   r   c                ,    t          || j                  S r   )r!   rR   rz   r   s     r    __shape_to_bytesz__Quant.__shape_to_bytes   s    (	:::r"   c                ,    t          || j                  S r   )r$   rR   r   s     r    __shape_from_bytesz__Quant.__shape_from_bytes   s    *5#)<<<r"   r   c                v    t          | j        |t          j        |                     |j                            S N)r'   r)   r*   )r@   r   r8   rt   ru   r   rz   r   s     r    __quantize_arrayz__Quant.__quantize_array   s1    '(9uBH]`]q]qrwr}]~]~r"   c                    |                                   t          | j        |t          j        |                     |j                            S r   )r   r@   r   r8   rY   rx   r   r   s     r    __dequantize_arrayz__Quant.__dequantize_array   sV    '(;bjadawawx}  yD  bE  bE  F  F  F  	Fr"   lazy_tensorr   r   c                   d S r   r/   rz   r   s     r    __quantize_lazyz__Quant.__quantize_lazy       r"   c                   d S r   r/   r   s     r    __dequantize_lazyz__Quant.__dequantize_lazy   r   r"   tensornp.ndarray | LazyNumpyTensorboolc                4    |j         d         | j        z  dk    S )Nr   r   )r   r   rz   r   s     r    can_quantizez__Quant.can_quantize   s    |B#.0A55r"   c                    |                      |          s$t          d|j         d| j        j                   t          |t                    r|                     |          S |                     |          S )Nz!Can't quantize tensor with shape z to )	r   rL   r   rR   r   
isinstancer   rv   rs   r   s     r    r]   z__Quant.quantize   s{    '' 	ecccSVS\Saccdddfo.. 	0&&v...''///r"   c                    t          |t                    r|                     |          S |                     |          S r   )r   r   ry   rw   r   s     r    rc   z__Quant.dequantize   s<    fo.. 	2((000))&111r"   )rR   r   r   ro   r   r(   r   r(   )r<   r(   r   r(   )r   r   )r   r(   r   r(   )r   r   r   r   )r   r   r   r   )r   r   r   r(   )rM   rN   rO   __annotations__rg   rh   ri   rj   rn   r{   classmethodr   r   r   r   r   r   ru   rx   rs   rw   rv   ry   r   r]   rc   r/   r"   r    re   re   O   su        OOONNN9=D===="(J(((((*H****!H!!!!J J J" " " " 9 9 [9( " " " ^ [" " " " ^ [" ; ; ; [; = = = [= ; ; ; [; = = = [= @ @ @ [@ F F F [F    [    [ 6 6 6 [6 0 0 0 [0 2 2 2 [2 2 2r"   re   c                  >    e Zd Zedd            Zedd            ZdS )BF16r   r(   r   c                   |                     t          j                  }t          j        |dz  dk    |t          j        d          z  t          j        d          z  |          }t          j        |          d|dz	  dz  z   z   dz	  }|                    t          j                                       t          j                  S )Nii  l      i  @ i  r-   r   )rb   r8   uint32r   uint64rX   uint16rt   )rz   r   rA   s      r    r   zBF16.quantize_blocks   s     KK	""Ha*n
2Q:9N9N5NRTR[\dReRe4eghiiYq\\VR1}562=xx	""''111r"   c                    |                     t          j                                      t          j                  dz                       t          j                  S )Nr-   )rb   r8   int16rX   int32rY   r   s     r    r   zBF16.dequantize_blocks   s;    BH%%,,RX66"<BB2:NNNr"   Nr   rM   rN   rO   r   r   r   r/   r"   r    r   r      sX        2 2 2 [2 O O O [O O Or"   r   )rR   c                  >    e Zd Zedd            Zedd            ZdS )Q4_0r   r(   r   c                J   |j         d         }t          |                              dd          }t          j        ||d          }|dz  }t          j        d          5  t          j        |dk    dd	|z            }d d d            n# 1 swxY w Y   t          j        ||z  t          j        d
          z   t          j                  	                    t          j
                                      dd          }|                    |d| j        dz  f          }|ddd d f         |dd	d d f         t          j
        d          z  z  }|	                    t          j                                      t          j
                  }t          j        ||gd          S )Nr   r   Tr4   keepdimsr   ignoredivider   g      !@r~   r   rC   .r   )r   rD   argmaxr8   r   errstater   truncrY   rX   rt   clipr6   r   r[   rb   r:   )rz   r   r   imaxmaxdidqss           r    r   zQ4_0.quantize_blocks   s   <?6{{!!rD!99 B777"H[))) 	, 	,!q&!QU++B	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,Xv{bjoo5RZHHHOOPRPXYY^^_`bdeeZZ1cn&9:;;Q	]bamrx{{:;HHRZ  %%bh//~q"gB////   #BBBc                t   |j         d         }t          j        |dg          \  }}|                    t          j                                      t          j                  }|                    |dd| j        dz  f          t          j	        ddgt          j
                                      d          z	  }|t          j
        d          z                      |df                              t          j                  t          j        d	          z
  }||                    t          j                  z  S )
Nr   rC   r   r   r   r~   r   r   rC   r   r   r}   )r   r8   hsplitrb   r[   rX   rY   r6   r   r   rt   int8)rz   r   r   r   r   s        r    r   zQ4_0.dequantize_blocks   s    <?	&1#&&2FF2:%%bj11ZZ2q#.A*=>??28QPQFZ\ZbCcCcCcCkCklxCyCyy28D>>!**Hb>::AA"'JJRWUVZZWBIIbj)))*r"   Nr   r   r/   r"   r    r   r      sR        0 0 0 [0$ 
+ 
+ 
+ [
+ 
+ 
+r"   r   c                  >    e Zd Zedd            Zedd            ZdS )Q4_1r   r(   r   c                   |j         d         }|                    dd          }|                    dd          }||z
  dz  }t          j        d          5  t          j        |dk    dd|z            }d d d            n# 1 swxY w Y   t          j        ||z
  |z  t          j        d	          z   t          j        
                              t          j	                  
                    dd          }|                    |d| j        dz  f          }|ddd d f         |ddd d f         t          j	        d          z  z  }|                    t          j                                      t          j	                  }|                    t          j                                      t          j	                  }t          j        |||gd          S )Nr   r   Tr   r   r   r   r         ?r~   rC   .r   r   )r   r   minr8   r   r   r   rY   rX   rt   r   r6   r   r[   rb   r:   )	rz   r   r   r   r   r   r   r   ms	            r    r   zQ4_1.quantize_blocks   s   <?jjb4j00jjb4j003Y"[))) 	, 	,!q&!QU++B	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,Xv|r)BJsOO;2:NNNUUVXV^__ddefhjkkZZ1cn&9:;;Q	]bamrx{{:;HHRZ  %%bh//JJrz""''11~q!Rjr2222   BB
Bc                   |j         d         }t          j        |dg          \  }}t          j        |dg          \  }}|                    t          j                                      t          j                  }|                    t          j                                      t          j                  }|                    |dd| j        dz  f          t          j	        ddgt          j
                                      d          z	  }|t          j
        d          z                      |df                              t          j                  }||z  |z   S )	Nr   rC   r   r   r   r~   r   r   )r   r8   r   rb   r[   rX   rY   r6   r   r   rt   )rz   r   r   r   restr   r   s          r    r   zQ4_1.dequantize_blocks  s   <?)FQC((4	$$$2FF2:%%bj11FF2:%%bj11ZZ2q#.A*=>??28QPQFZ\ZbCcCcCcCkCklxCyCyy28D>>!**Hb>::AA"*MMB!|r"   Nr   r   r/   r"   r    r   r      sR        3 3 3 [3&    [  r"   r   c                  >    e Zd Zedd            Zedd            ZdS )Q5_0r   r(   r   c                "   |j         d         }t          |                              dd          }t          j        ||d          }|dz  }t          j        d          5  t          j        |dk    dd	|z            }d d d            n# 1 swxY w Y   t          j        ||z  t          j        d
          z   t          j                  	                    t          j
                                      dd          }|                    |d| j        dz  f          }|ddd d f         t          j
        d          z  |dd	d d f         t          j
        d          z  z  }t          j        |                    |d	df          t          j
        d          z	  dd                              |d          }	|	                    t          j                                      t          j
                  }t          j        ||	|gd          S )Nr   r   Tr   r   ir   r   r   g     0@r~      rC   .r   r       littler4   bitorder)r   rD   r   r8   r   r   r   r   rY   rX   rt   r   r6   r   packbitsr[   rb   r:   )
rz   r   r   r   r   r   r   r`   r   qhs
             r    r   zQ5_0.quantize_blocks%  s   <?6{{!!rD!99 B777#I[))) 	, 	,!q&!QU++B	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,HfrkRZ%5%55RZHHHOOPRPXYY^^_`bdeeYY!S^q%89::ambhtnn,CAAAI"(1++1MN[Ha#455!D2X`aaaiijrtuvvHHRZ  %%bh//~q"bk3333r   c                D   |j         d         }t          j        |dg          \  }}t          j        |dg          \  }}|                    t          j                                      t          j                  }|                    t          j                  }|                    |df          t          j	        d t          d          D             t          j                                      d          z	  }|                    |d	d| j        dz  f          t          j	        ddgt          j                                      d
          z	  }|t          j        d          z                      t          j                  }|t          j        d          z                      |d	f          }||t          j        d          z  z                      t          j                  t          j        d          z
  }||                    t          j                  z  S )Nr   rC   r   r   c                    g | ]}|S r/   r/   r   s     r    r3   z*Q5_0.dequantize_blocks.<locals>.<listcomp>D      3I3I3I!A3I3I3Ir"   r   r~   r   r   r   r   r   r-   )r   r8   r   rb   r[   rX   rY   r   r6   r   r   r   rt   r   )rz   r   r   r   r   r   r   qls           r    r   zQ5_0.dequantize_blocks:  s   <?)FQC((44!%%BFF2:%%bj11WWRYZZ1&&"(3I3IuRyy3I3I3IQSQZ*[*[*[*c*cdk*l*llZZ2q#.A*=>??28QPQFZ\ZbCcCcCcCkCklxCyCyy29T??"**284428D>>!**Hb>::B"(1++%&..rw77"'"++EBIIbj)))*r"   Nr   r   r/   r"   r    r   r   $  sR        4 4 4 [4( + + + [+ + +r"   r   c                  >    e Zd Zedd            Zedd            ZdS )Q5_1r   r(   r   c                   |j         d         }|                    dd          }|                    dd          }||z
  dz  }t          j        d          5  t          j        |dk    dd|z            }d d d            n# 1 swxY w Y   t          j        ||z
  |z  t          j        d	          z   t          j        
                              t          j	                  
                    dd          }|                    |d| j        dz  f          }|ddd d f         t          j	        d          z  |ddd d f         t          j	        d          z  z  }t          j        |                    |ddf          t          j	        d          z	  dd                              |d          }	|                    t          j                                      t          j	                  }|                    t          j                                      t          j	                  }
t          j        ||
|	|gd          S )Nr   r   Tr   r   r   r   r   r   r~   rC   .r   r   r   r   r   r   )r   r   r   r8   r   r   r   rY   rX   rt   r   r6   r   r   r[   rb   r:   )rz   r   r   r   r   r   r   r`   r   r   r   s              r    r   zQ5_1.quantize_blocksO  s#   <?jjb4j00jjb4j003Y"[))) 	, 	,!q&!QU++B	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,Hfslb(2:c??:"*MMMTTUWU]^^ccdegijjYY!S^q%89::ambhtnn,CAAAI"(1++1MN[Ha#455!D2X`aaaiijrtuvvHHRZ  %%bh//JJrz""''11~q!Rn26666r   c                   |j         d         }t          j        |dg          \  }}t          j        |dg          \  }}t          j        |dg          \  }}|                    t          j                                      t          j                  }|                    t          j                                      t          j                  }|                    t          j                  }|                    |df          t          j	        d t          d          D             t          j                                      d          z	  }|                    |d	d| j        dz  f          t          j	        ddgt          j                                      d
          z	  }|t          j        d          z                      t          j                  }|t          j        d          z                      |d	f          }||t          j        d          z  z                      t          j                  }||z  |z   S )Nr   rC   r   r   c                    g | ]}|S r/   r/   r   s     r    r3   z*Q5_1.dequantize_blocks.<locals>.<listcomp>q  r   r"   r   r~   r   r   r   r   )r   r8   r   rb   r[   rX   rY   r   r6   r   r   r   rt   )	rz   r   r   r   r   r   r   r   r   s	            r    r   zQ5_1.dequantize_blockse  s   <?)FQC((4)D1#&&44!%%BFF2:%%bj11FF2:%%bj11WWRYZZ1&&"(3I3IuRyy3I3I3IQSQZ*[*[*[*c*cdk*l*llZZ2q#.A*=>??28QPQFZ\ZbCcCcCcCkCklxCyCyy29T??"**284428D>>!**Hb>::B"(1++%&..rz::B!|r"   Nr   r   r/   r"   r    r   r   N  sR        7 7 7 [7*    [  r"   r   c                  >    e Zd Zedd            Zedd            ZdS )Q8_0r   r(   r   c                (   t          |                              dd          dz  }t          j        d          5  t          j        |dk    dd|z            }d d d            n# 1 swxY w Y   t          ||z            }|                    t          j                                      t          j	                  }|                    t          j
                                      t          j	                  }t          j        ||gd          S )	Nr   Tr      r   r   r   r   )rD   r   r8   r   r   rJ   rX   r[   rb   rt   r   r:   )rz   r   r   r   r   s        r    r   zQ8_0.quantize_blocks|  s    KKOOTO22S8[))) 	, 	,!q&!QU++B	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,v{## HHRZ  %%bh//YYrw$$RX..~q"gA....s   A''A+.A+c                2   t          j        |dgd          \  }}|                    t           j                                      t           j                  }|                    t           j                                      t           j                  }||z  S )NrC   r   r   )r8   splitrb   r[   rX   rY   r   )rz   r   r   xs       r    r   zQ8_0.dequantize_blocks  sk    x!,,,1FF2:%%bj11FF27OO""2:..Ar"   Nr   r   r/   r"   r    r   r   {  sR        / / / [/    [  r"   r   c                  &    e Zd Zedd            ZdS )Q2_Kr   r(   r   c                R   |j         d         }t          j        |t          dz  g          \  }}t          j        |t          dz  g          \  }}t          j        |dg          \  }}|                    t          j                                      t          j                  }|                    t          j                                      t          j                  }||dz                      t          j                  z                      |t          dz  df          }||dz	                      t          j                  z                      |t          dz  df          }	t          j	        g dt          j
                                      d	          }
|                    |d
ddf          |
z	  t          j
        d          z  }|                    |t          dz  df                              t          j                  }||z  |	z
  }|                    |d
f          S )Nr   r-   r   rC   r   r   r   rC   r      r~   r   r   r   r   r   r      )r   r8   r   r   rb   r[   rX   rY   r6   r   rt   )rz   r   r   scalesr   r   r   dmindlmlshifts              r    r   zQ2_K.dequantize_blocks  s   <?y$"*669TDAI;//D)D1#&&4FF2:%%bj11yy$$++BJ77 6C<''
333<<hPR
TU=VWWfk))"*555>>$RT*VW?XYYRX666>>|LLjj(B2.//58BHQKKGZZ42:r233::2:FF"Wr\zz8R.)))r"   Nr   rM   rN   rO   r   r   r/   r"   r    r  r    s2        * * * [* * *r"   r  c                  &    e Zd Zedd            ZdS )Q3_Kr   r(   r   c                   |j         d         }t          j        |t          dz  g          \  }}t          j        |t          dz  g          \  }}t          j        |dg          \  }}|                    t          j                                      t          j                  }t          j        |dg          \  }}	|                    |ddf          t          j	        ddgt          j
                                      d          z	  }|                    |df          }|	                    |ddf          t          j	        g d	t          j
                                      d
          z	  }	|	                    |df          }	|t          j
        d          z  |	t          j
        d          z  t          j
        d          z  z  }|                    t          j                  t          j        d          z
                      t          j                  }||z                      |ddf          }
|                    |dddf          t          j	        g d	t          j
                                      d          z	  }|                    |ddd          t          j	        d t          d          D             t          j
                                      d          z	  }|                    |dt          dz  f          t          j
        d          z  }|                    |dt          dz  f          t          j
        d          z  }|t          j
        d          z  }|                    t          j                  |t          j
        d          z                      t          j                  z
                      t          j                  }|
|z                      |t          f          S )Nr   r}   r      r   r~   r   rC   r   r-   r  )r   r   r   r   r
  r   r   r	  c                    g | ]}|S r/   r/   r   s     r    r3   z*Q3_K.dequantize_blocks.<locals>.<listcomp>  s    <Q<Q<Q1Q<Q<Q<Qr"   r   r   r}   r   rC   )r   r8   r   r   rb   r[   rX   rY   r6   r   rt   r   r   )rz   r   r   hmaskr   r   r  r   lscaleshscalesr  r   r   r`   s                 r    r   zQ3_K.dequantize_blocks  s!   <?i44t9TDAI;//DIdRD))	FF2:%%bj11 9VaS11//8Q"233rxAbh7W7W7W7_7_`i7j7jj//8R.11//8Q"233rxTVT\7]7]7]7e7efo7p7pp//8R.11BHTNN*"(4..0HRXVW[[/XY--((272;;6>>rzJJ&j!!8R"344ZZ2q"-.."(<<<rx2X2X2X2`2`am2n2nn]]8RB//28<Q<Qa<Q<Q<QY[Ya3b3b3b3j3jkw3x3xxZZ2trz233bhqkkAjj(B
344rx{{B"(1++YYrw2!#4"<"<RW"E"EEMMbjYYQ4 0111r"   Nr   r  r/   r"   r    r  r    s2        '2 '2 '2 ['2 '2 '2r"   r  c                  B    e Zd ZdZed
d            Zedd            Zd	S )Q4_Kr  r  r(   r   tuple[np.ndarray, np.ndarray]c                   | j         d         }|                     t          j                  } |                     |ddf          } t          j        | dd          \  }}}t          j        |dz  |dz  |dz	  d	z  z  gd
          }t          j        |dz  |dz	  |dz	  d	z  z  gd
          }|                    |df          |                    |df          fS )Nr   r
  r   r   ?   r   rC   0   r   r}   )r   rb   r8   rt   r6   r  r:   )r  r   r   r   m_dscr   s          r    get_scale_minzQ4_K.get_scale_min  s    <?RX&& 1a 011HVQR000	1c^QXd
Q$'GHrRRRna$hqAvo(FGbQQQ

Ha=))3;;!}+E+EFFr"   r   c                <   |j         d         }t          j        |dg          \  }}t          j        |dg          \  }}t          j        || j        g          \  }}|                    t          j                                      t          j                  }|                    t          j                                      t          j                  }t          	                    |          \  }}	||                    t          j                  z  
                    |ddf          }||	                    t          j                  z  
                    |ddf          }
|
                    |dddf          t          j        ddgt          j                  
                    d          z	  }|t          j        d	          z  
                    |ddf                              t          j                  }||z  |
z
  
                    |t          f          S )
Nr   rC   r   r   r   r   r~   r   r   )r   r8   r   K_SCALE_SIZErb   r[   rX   rY   r  r$  r6   r   rt   r   )rz   r   r   r   r   r  r  r   r#  r   dms              r    r   zQ4_K.dequantize_blocks  s   <?)FQC((4YtaS))
dYtc&6%788
FF2:%%bj11yy$$++BJ77""6**A2:&&&//2q0ABBQXXbj)))22Hb!3DEEZZ2q"-.."(Aq62R2R2R2Z2Z[g2h2hh28D>>!**Hb"+=>>EEbjQQB$$h%5666r"   N)r  r(   r   r  r   )rM   rN   rO   r&  staticmethodr$  r   r   r/   r"   r    r  r    s[        LG G G \G0 7 7 7 [7 7 7r"   r  c                  &    e Zd Zedd            ZdS )Q5_Kr   r(   r   c                   |j         d         }t          j        |dg          \  }}t          j        |dg          \  }}t          j        |t          j        g          \  }}t          j        |t
          dz  g          \  }}|                    t          j                                      t          j	                  }|                    t          j                                      t          j	                  }t          
                    |          \  }	}
||	                    t          j	                  z                      |ddf          }||
                    t          j	                  z                      |ddf          }|                    |dddf          t          j        ddgt          j                                      d	          z	  }|                    |dddf          t          j        d
 t          d          D             t          j                                      d          z	  }|t          j        d          z                      |ddf          }|t          j        d          z                      |ddf          }||t          j        d          z  z                      t          j	                  }||z  |z
                      |t
          f          S )Nr   rC   r}   r   r   r   r   r~   r   c                    g | ]}|S r/   r/   r   s     r    r3   z*Q5_K.dequantize_blocks.<locals>.<listcomp>!  s    ;P;P;P!A;P;P;Pr"   r  r   )r   r8   r   r  r&  r   rb   r[   rX   rY   r$  r6   r   rt   r   )rz   r   r   r   r   r  r  r   r   r#  r   r'  r   r`   s                 r    r   zQ5_K.dequantize_blocks  sW   <?)FQC((4YtaS))
dy(9':;;4$!)--BFF2:%%bj11yy$$++BJ77""6**A2:&&&//2q0ABBQXXbj)))22Hb!3DEEZZ2q"-.."(Aq62R2R2R2Z2Z[g2h2hhZZ2q"-.."(;P;PuQxx;P;P;PXZX`2a2a2a2i2ijv2w2ww28D>>!**Hb"+=>>28D>>!**Hb"+=>>2!$%--bj99A
##Xt$4555r"   Nr   r  r/   r"   r    r*  r*    s2        6 6 6 [6 6 6r"   r*  c                  &    e Zd Zedd            ZdS )Q6_Kr   r(   r   c                X   |j         d         }t          j        |t          dz  g          \  }}t          j        |t          dz  g          \  }}t          j        |t          dz  g          \  }}|                    t          j                                      t          j                  }|                    t          j                                      t          j                  }||z  	                    |t          dz  df          }|	                    |dddf          t          j
        ddgt          j                  	                    d	          z	  }|t          j        d
          z  	                    |ddf          }|	                    |dddf          t          j
        g dt          j                  	                    d          z	  }|t          j        d          z  	                    |ddf          }||t          j        d          z  z                      t          j                  t          j        d          z
  }|	                    |t          dz  df                              t          j                  }||z  	                    |t          f          S )Nr   rC   r   r-   r   r   r   r~   r   r   r   r  r	  r
  )r   r8   r   r   rb   r   rX   rY   r[   r6   r   rt   )	rz   r   r   r   r   r   r  r   r`   s	            r    r   zQ6_K.dequantize_blocks*  s   <?9Vdai[11D9TDAI;//DIdTRZL11	RW%%,,RZ88FF2:%%bj11Z  (DBJ!:;;ZZ2q"-.."(Aq62R2R2R2Z2Z[g2h2hh28D>>!**Hb"+=>>ZZ2q"-.."(<<<rx2X2X2X2`2`am2n2nn28D>>!**Hb"+=>>2!$%--bg66DIIxR01188DDA$/000r"   Nr   r  r/   r"   r    r.  r.  )  s2        1 1 1 [1 1 1r"   r.  c                  >    e Zd Zedd            Zedd            ZdS )TQ1_0r   r(   r   c                J   |j         d         }t          |                              dd          }t          j        d          5  t          j        |dk    dd|z            }d d d            n# 1 swxY w Y   t          ||z            }|                    t          j                  t          j        d          z                       t          j	                  }|dd d	f         |dd	d
f         |dd
d f         }}}|
                    |dddf          t          j        g dt          j	                  
                    d          z  }t          j        |d          
                    |df          }|
                    |dddf          t          j        g dt          j	                  
                    d          z  }t          j        |d          
                    |df          }|
                    |dddf          t          j        g dt          j	                  
                    d          z  }t          j        |d          
                    |df          }t          j        |||gd          }|                    t          j                  dz  dz   dz  }|                    t          j	                  }|                    t          j                                      t          j	                  }t          j        ||gd          S )Nr   r   Tr   r   r   r   .         r   )Q      r   r
  r   r~   r   r   r5  r   r  r   r-   r   )r6  r7  r   r
  r	           )r   rD   r   r8   r   r   rJ   rX   r   rt   r6   r   sumr:   r   r[   rb   )	rz   r   r   r   r   r   qs0qs1r   s	            r    r   zTQ1_0.quantize_blocksA  s   <?KKOOdO33[))) 	, 	,!q&!QU++B	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,v{##ii  271::-55bh??#yy.)2cFV3D.D+Er#PVyy.GY"Skk8RB/0028<M<M<MUWU]3^3^3^3f3fgs3t3ttfSr"""**Hb>::kk8RB/0028<M<M<MUWU]3^3^3^3f3fgs3t3ttfSr"""**Hb>::ZZ2q!,--rx0X0X0X0`0`am0n0nnVBR   (((B88^S#rN444ii	""S(G4<YYrx  HHRZ  %%bh//~r1gB////   A11A58A5c                   |j         d         }t          j        |t          dt          z  dz  z
  dz  g          \  }}t          j        |t          dz  g          \  }}|                    t          j                                      t          j                  }|dd df         |ddd f         }}|                    |dddf          t          j	        g d	t          j
        
                              d          z  }|                    |df          }|                    |dddf          t          j	        g d	t          j
        
                              d          z  }|                    |df          }|                    |dddf          t          j	        g dt          j
        
                              d          z  }|                    |df          }t          j        |||gd          }|                    t          j                  dz  dz	                      t          j                  t          j        d          z
  }||                    t          j                  z  S )Nr   r   r   r5  .r   r   r   )r   r
  r   r7  r6  r~   r8  r-   )r   r
  r   r7  r	  r   r
  r}   )r   r8   r   r   rb   r[   rX   rY   r6   r   rt   r:   r   r   )	rz   r   r   r   r   r   r   r=  r>  s	            r    r   zTQ1_0.dequantize_blocksZ  s   <?9Vta$h"n'<&B%CDDD	$--AFF2:%%bj11c3B3h<CHSkk8RB/0028<M<M<MUWU]3^3^3^3f3fgs3t3ttkk8R.))kk8RB/0028<M<M<MUWU]3^3^3^3f3fgs3t3ttkk8R.))ZZ2q!,--bh0W0W0W0_0_`l0m0mmZZ2''^S#rN444yy##a'A-55bg>>KBIIbj)))*r"   Nr   r   r/   r"   r    r1  r1  @  sR        0 0 0 [00 + + + [+ + +r"   r1  c                  >    e Zd Zedd            Zedd            ZdS )TQ2_0r   r(   r   c                   |j         d         }t          |                              dd          }t          j        d          5  t          j        |dk    dd|z            }d d d            n# 1 swxY w Y   t          ||z            }|                    t          j                  t          j        d          z                       t          j	                  }|
                    |ddd	f          t          j        g d
t          j	                  
                    d          z  }|ddd d f         |ddd d f         z  |ddd d f         z  |ddd d f         z  }|
                    |df          }|                    t          j                                      t          j	                  }t          j        ||gd          S )Nr   r   Tr   r   r   r   r   r   r  r~   r	  .rC   r
  r   )r   rD   r   r8   r   r   rJ   rX   r   rt   r6   r   r[   rb   r:   )rz   r   r   r   r   r   s         r    r   zTQ2_0.quantize_blocksq  s   <?KKOOdO33[))) 	, 	,!q&!QU++B	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,v{##ii  271::-55bh??ZZ2q"-.."(<<<rx2X2X2X2`2`am2n2nnQ	]RQ	]*RQ	]:RQ	]JZZ2''HHRZ  %%bh//~r1gB////r?  c                P   |j         d         }t          j        |t          dz  g          \  }}|                    t          j                                      t          j                  }|                    |dddf          t          j	        g dt          j
                                      d          z	  }|d	z                      |df                              t          j                  t          j        d          z
  }||                    t          j                  z  S )
Nr   r   r   r   r   r  r~   r	  r
  )r   r8   r   r   rb   r[   rX   rY   r6   r   rt   r   )rz   r   r   r   r   s        r    r   zTQ2_0.dequantize_blocks  s    <?	&419+..AFF2:%%bj11ZZ2q"-.."(<<<rx2X2X2X2`2`am2n2nn4i  (B0077@@271::MBIIbj)))*r"   Nr   r   r/   r"   r    rB  rB  p  sR        0 0 0 [0" 
+ 
+ 
+ [
+ 
+ 
+r"   rB  c                  Z    e Zd ZdZed
d            Zedd            Zedd            Zd	S )MXFP4r   r   rC   r
  r   r  r}   r  r   r   r  ir   ir  r(   r   c                   t          j        | dk     t          j        d          t          j        |           z  t          j        | dz
            t          j        d          z            }|                    t           j                  S )NrC   i    r      )r8   r   r   rb   rY   )r  bitss     r    e8m0_to_fp32_halfzMXFP4.e8m0_to_fp32_half  si     xAry44	!DbiPQTUPUFVFVZ\ZcdfZgZgFghhyy$$$r"   r   c           	     Z   |j         d         }t          |                              dd          }t          j        d          5  t          j        |dk    t          j        t          j        |                    dz
  dz   d                              t          j	                  }d d d            n# 1 swxY w Y   | 
                    |          }t          j        | j        t          j        	                              d
          }t          j        |                    |ddf          |                    t          j                  z  |                    || j        df          z
            }t          j        |dd          }|                    |d| j        dz                                t          j	                  }|d d df         |d d df         t          j	        d          z  z  }|                    || j        dz  f          }t          j        ||gd          S )Nr   r   Tr   r   r   rC   r   r~   )r   r   r-   r   r   r   )r   rD   r   r8   r   r   rE   r	   rX   rt   rM  r   kvaluesr   r6   rY   r   argminr:   )	rz   r   r   r   erO  errsbestr   s	            r    r   zMXFP4.quantize_blocks  s   <?KKOOdO33[))) 	T 	TQ 4 4q 83 >BBII"(SSA	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T !!!$$(3;bg666>>zJJvaii1a 011GNN2:4N4NNQWQ_Q_aiknky{|`}Q~Q~~yB666\\(As~':;;BB28LL1XAAAqDRXa[[01ZZ3>Q#6788~q"gB////s   A"B55B9<B9c                   |j         d         }t          j        |dg          \  }}|                     |          }|                    |d| j        dz  f          t          j        ddgt          j                                      d          z	  }|t          j        d          z                      t          j	                  }t          j        | j
        t          j	                                      ddd          }t          j        ||d	
                              || j        f          }||                    t          j                  z  S )Nr   r   rC   r   r~   r  r   r-   r   r   )r   r8   r   rM  r6   r   r   rt   rb   r   rO  r   rX   rY   )rz   r   r   rQ  r   r   rO  s          r    r   zMXFP4.dequantize_blocks  s   <?	&1#&&2!!!$$ZZ1cn&9:;;rxAVXV^?_?_?_?g?ghq?r?rr28D>>!''00(3;bg666>>q!RHH"555==x>XYYBIIbj)))*r"   Nr  r(   r   r(   r   )	rM   rN   rO   rO  r(  rM  r   r   r   r/   r"   r    rF  rF    sz         HG% % % \% 0 0 0 [0, + + + [+ + +r"   rF  c                  Z    e Zd ZdZed
d            Zed
d            Zedd            Zd	S )NVFP4rG  r  r(   r   c           	     j   | dz	                       t          j                  dz  }| dz                       t          j                  }t          j        |dk    |dz  d|dz  z   d|                     t          j                  dz
  z  z            }t          j        | dk    | d	k    z  d
|dz            S )zODecode unsigned E4M3 (bias=7) to float, with 0.5 factor for kvalues convention.r
  r      r   g      `?g      ?g       @g       @r           r   )rX   r8   r   rY   r   )r  expmanraws       r    ue4m3_to_fp32zNVFP4.ue4m3_to_fp32  s     Avoobh''#-3wrz**h1H%K39_BJ)?)?!)C!DEG G xaAI.S3Y???r"   c                   t          j        | dd                              t           j                  } |                     t           j                  }|dz	  dz                      t           j                  dz
  }|dz	  dz                      t           j                  }|dz   }t          j        | dz  d	z                       t           j                  d
d          }t          j        |dk    |d
                              t           j                  }|dz	  dz                      t           j                  }||z   }|	                                }	|dk    }
t          j        |
d
|          }t          j        |
|	dz   |	          }	t          j        |	dk    t          j        d          |	dz  |z                      t           j                            }t          j        | dk    t          j        d
          t          j        |d
k    |t          j        |dk    t          j        d          |                              S )zFVectorized float32 to unsigned E4M3, matching ggml_fp32_to_ue4m3 in C.rZ  g      |@rK     r      rY  g      @r   r   r      r   ~   r
  )
r8   r   rX   rY   rb   r   r   r   rt   rU   )r  rL  fp32_expfp32_man	ue4m3_expsub_man
sub_result	round_bitr\  r[  overflownormal_results               r    fp32_to_ue4m3zNVFP4.fp32_to_ue4m3  s    GAsE""))"*55vvbi  RZ4'//99C?RZ3&..rx88qL	 '1u9s?2228<<aCCXglGQ77>>rxHH
 bjA%--bh77	"nn7hxC((hxq#..BHTNNcQh#=M<U<UVXV^<_<_``xS"(1++ab"(4..-PPR RS S 	Sr"   r   c                   |j         d         }t          j        |dg          \  }}|                     |                              |dd          }|                    |dd          }|t          j        d          z                      t          j                  }|t          j        d          z	                      t          j                  }t          j        ||gd          }t          j	        | j
        t          j                                      ddd	          }	t          j        |	|d          }||                    t          j                  z                      |d
          S )Nr   r   r   r}   r   r   r   r~   r-   r   )r   r8   r   r^  r6   rt   rb   r   r:   r   rO  r   rX   rY   )
rz   r   n_superd_bytesr   r   lohivalsrO  s
             r    r   zNVFP4.dequantize_blocks  s$   ,q/i,,g&&..w1==ZZA&&28D>>!''00BHQKK%%bg..~r2hR000(3;bg666>>q!RHH!'4b999DKK
+++44WbAAAr"   NrU  r   )	rM   rN   rO   rO  r(  r^  rl  r   r   r/   r"   r    rW  rW    s        GG@ @ @ \@ S S S \S2 B B B [B B Br"   rW  c                  B    e Zd ZU dZded<   dZdZdZedd
            Z	dS )IQ2_XXSs    	
!"$'(+-.03569:<?ABDGHKMNPSUVYZ\_`cefijloqrtwx{}~bytesksigns)r9  r}   r}      +   s   00000200050008000a00110014002000220028002a00410044005000580061006400800082008a00a20001010401100115014001840198010002020222028202010404041004210424044004420448046004810484049004a404000502050805200546056905800591050906100640068406a406000805080808140828084108440850085208880804094009020a140a01100410101021104010601084109010951000110811201150115a1180112412451200140814201425144914801418156215001616160118041810184018811800190519a019511a002002200a2044206120802082202921482100220222012404241024402456240025412564259026082820289428442a0140044010401840214024404040484056406040814084409040004120416141804185410142104248425642684200440844204480449944124524450046014804481048404845480049584961498249454a904a005008501150195020508050885004514251a4519152905492540a550156545600581158195864584059085a04601060406068600061556118626062006405641065126584654268008002800a8041808280048118814081118201840484108415844084608400854685948509864086608602880489118a0490109024904090a19016918091459200942294449451958198209902a050a085a009a100a218a450a804a9r   r(   r   c           	        |j         d         }t          j        |dg          \  }}|                    t          j                                      t          j                  }|                    t          j                                      |dd          }|t          j        d          |d         dz	                      t          j                  z   z  t          j        d          z  }|                    |dddf          }|d                             |ddf          t          j	        g d	t          j        
                              d          z	  }t          j
        | j        t          j        
                              d          }|t          j        d          z                      |dddf          }t          j        ||d          }|                    |dddf          t          j	        d t          d          D             t          j        
                              d          z	  }|t          j        d          z  }t          j        |dk    t          j        d          t          j        d                    }|                    |dddf          }| j        J t          j        | j        |d                                                             t          j                                      |dddf          d          }|                    |dddf          }||z  |z                      |df          S )Nr   rC   r   r   r            ?r   r   rY        r~   r   r   r   r   r   r      r   r   r   c                    g | ]}|S r/   r/   r   s     r    r3   z-IQ2_XXS.dequantize_blocks.<locals>.<listcomp>4      @U@U@Uq@U@U@Ur"   r}   r   r   r   r}   r   r  )r   r8   r   rb   r[   rX   rY   r   r6   r   r   rv  rt   r   r   r   rg   rU   )	rz   r   r   r   r   dbsignsrv  rg   s	            r    r   zIQ2_XXS.dequantize_blocks"  s   <?	&1#&&2FF2:%%bj11WWRY''"a88"*S//RZ2%5$=$=bj$I$IIJRZX\M]M]]ZZ2q!,-- 6
""Hb!#455...XZXa9b9b9b9j9jkt9u9uusz:::BB>RR4(118RA2FGG"65r:::xQ233rx@U@UERSHH@U@U@U]_]e7f7f7f7n7no{7|7||&!RZ]]BJrNNCCxQ233x###!#(BvJOO,=,=,B,B28,L,L,T,TV^`bdeghUi,j,jqsttt||Xr1a011T	E!**Hb>:::r"   Nr   )
rM   rN   rO   rv  r   rh   ri   rj   r   r   r/   r"   r    rt  rt    sl         	L  	 	 	 	 J!H	L & ; ; ; [; ; ;r"   rt  c                  2    e Zd ZdZdZdZed	d            ZdS )
IQ2_XS)   r}   rw  s   00000200050008000a001100140016001900200022002500280041004400460049005000520055005800610064008000820085008800910094009900a000010104010601090110011201150118011a0121012401400142014501480151015401600168018101840190010002020205020802110214022002410244025002550280028a02010404040604090410041204150418042104240440044204450448045104540456046004810484049004000502050505080511051405200541054405500561058005010604061006260640064206840600080208050808080a08110814082008250841084408500858088008a008aa08010904091009400981098909000a200a280a960aa00a011004100610091010101210151018102110241040104210451048105110541060106a108110841090100011021105110811111114112011411144115011801194119611011204120612101240126012001402140514081411141414201441144414491450146414801401150415101540150016141649160118041810181218401854188618001905196619511aa91a00200220052008200a201120142020204120442050208020a020012104211021402148216521002222228022a82201240424102429244024002541255225992501261a26a626002808280a28202855288828a22868299029082a202a822a882a8a2a014004400640094010401240154018402140244040404240454048404a405140544060406540814084409040004102410541084111411441204141414441504180418541a2410142044210421242294240420044024405440844114414441944204441444444504480449444014504451045244540459a4500460a4644465046014804481048404845485448624800491149444950496949044a00500250055008501150145020502850415044505050805001510451105115514051425100524452aa520154045410542154405460548154a154005508558055885521566856a156005814584158505899581a5940594259855a0160046010604060546062608660a960006124624a62926200641664106540654565a46501686a682569066a546a626a00800280058008801180148020802a8041804480508080808280a880aa8001810481068110814081518159810082208280828282a082a8820184048410841284158440846084898400854485a58518866a860088088825885a8880888288a8880689228a808a888a968aa88a019004901090409056908490009122916491569289920094059444945094589429959095929541965198a6984999159a609a00a002a008a00aa020a02aa0a0a051a159a1a6a100a202a208a22aa280a2a0a240a495a465a698a60aa820a822a828a8a0a8a8a804a984a986a928aa2aaa91aaaaaar   r(   r   c           	     :   |j         d         }t          j        |dg          \  }}t          j        |dt          z  dz  g          \  }}|                    t          j                                      t          j                  }|                    t          j                  }|	                    |ddf          t          j
        ddgt          j                  	                    d          z	  }|d	z  	                    |df          }|t          j        d
          |z   z  t          j        d          z  }|	                    |dddf          }t          j        t          j        t          j                  	                    ddd          }t          j        ||dz	  	                    |ddf          d          }|	                    |ddf          t          j
        d t!          d          D             t          j                  	                    d          z	  }|t          j        d          z  }t          j        |dk    t          j        d          t          j        d                    }|	                    |dddf          }| j        J t          j        | j        |t          j        d          z  	                    |dddf          d          }	|		                    |dddf          }	||	z  |z  	                    |df          S )Nr   rC   r}   r   r   r   r~   r   r   rC   r   r   r|  r  r   r   c                    g | ]}|S r/   r/   r   s     r    r3   z,IQ2_XS.dequantize_blocks.<locals>.<listcomp>z      =R=R=RAa=R=R=Rr"   r   r   r}   i  r  )r   r8   r   r   rb   r[   rX   rY   r   r6   r   rt   r   rt  rv  r   r   r   rg   )
rz   r   r   r   r   r   r  r  r  rg   s
             r    r   zIQ2_XS.dequantize_blocksh  s   <?)FQC((4Yta$h!m_55
FFF2:%%bj11WWRY2q 122bh1vRX6V6V6V6^6^_h6i6ii4-(((B88"*S//F*+bj.>.>>ZZ2q!,-- gnBH===EEaCPP"527*;*;Xr1<M*N*NUWXXXxQ/00BH=R=Rq=R=R=RZ\Zb4c4c4c4k4klu4v4vv&!RZ]]BJrNNCCxQ233x###!#(R")C..-@,I,I8UWYZ\]J^,_,_fhiii||Xr1a011T	E!**Hb>:::r"   Nr   rM   rN   rO   rh   ri   rj   r   r   r/   r"   r    r  r  @  sL         J!H	L F ; ; ; [; ; ;r"   r  c                  2    e Zd ZdZdZdZed	d            ZdS )
IQ2_S)i   r}   rw  s   00000200050008000a0011001400160019002000220025002800410044004600490050005200550058006100640066006900800082008500880091009400a000a500aa0001010401060109011001120115011801210124014001420145014801510154015601590160016501680181018401900192019501a101a40100020202050208021102140220022a02410244024602490250025502800285028a029402a20201040404060409041004120415041804210424042604290440044204450448044a0451045404560459046004620465048104840486048904900495049804a104a40400050205050508050a0511051405160519052005250528054105440546054905500552055505580561056405800582058505880591059405a00501060406060609061006150640064506480651065406600681068406900600080208050808081108140816081908200825082a084108440846084908500852085508580861086408800885089408aa08010904091009120915091809210940094509480951095409600981099009000a110a140a220a280a2a0a500a990a01100410061009101010121015101810211024102610401042104510481051105410561059106010621065106810811084108610901095109810a110a41000110211051108110a1111111411161119112011221125112811411144114611491150115211551158116111641180118211851188119111941101120412091210121512211224124012451251125412811284129012001402140514081411141414161419142014251428144114441446144914501452145514581461146414801482148514881491149414a014011504150615091510151215151518152115241540154215451548155115541560158115841590150016051608161116141620164116441650168016aa160118041806180918101815181818211840184218451848185118541860188118841800190219051908191119141920194119441950196919a219041a101a401a561a00200220052008201120142016201920202025202a2041204420502052205520642080208a209420aa2001210421102112211521212140214221452151215421602181218421902100220a22222228222a224422502288228a22a8220124042406240924102415241824212424244024422445244824512454246024812484249024002505250825112514252025412544255025662580250126042610264026592600280528112814284128442850288a28aa2801290429102995290a2a222a642a882a8a2a014004400640094010401240154018401a4021402440264040404240454048404a40514054405640594060406240654081408440904095409840a140a440004102410541084111411441164119412041224125414141444146414941504152415541584161416441804182418541884191419441a04101420442104212421542184224424042454248425142544260428142844200440244054408440a44114414441644194420442244254428444144444446444944504452445544584461446444804482448544884491449444a044014504450645094510451245154518452145244540454245454548455145544560456a4581458445904500460246054608461146144620464146444650468046a546014804480948104812481548184821482448404842484548484851485448604884489048004902490549084911491449204941494449504980499649014a044a104a404a0050025005500850115014501650195020502250255028504150445046504950505052505550585061506450805082508550885091509450015104510651095110511251155118512151245140514251455148515151545160518151845190510052055208521152145220524152445250526952805201540454065409541054125415541854215424544054425445544854515454546054815484549054005502550555085511551455205541554455505580550156045610562656405600580258055808581158145820584158445850585a5880580159045910594059005a195a855aa85a016004600660106012601560186021602460406045604860516054606060846090600061026105610861116114612061416144615061806199610462106240625662a162006405640864116414642064416444645064806401650465106540654a6568659265006694660168046810686568986800692a69426aa16a00800280058008801180148019802080258041804480508052805580588061808080858091809480018104810981108112811581188121812481408142814581488151815481818184819081a981008205820a82118214824182448250820184048406840984108412841584188421844084428445844884518454846084818484849084008502850585088511851485208541854485508580858a85018604861086298640860088058811881488418844885088a2880189048940896589228a588a5a8a828aa28a01900490099010901290159018902490409042904590489051905490609081908490909000910591119114914191449150915a910192049210924092a69200940294059408941194149420944194449450948094969401950495109540959895a19500964696649601980498109826984098a998009949995299909a00a005a00aa014a022a02aa041a044a050a0a2a0aaa040a165a102a20aa222a228a22aa282a288a28aa2a8a201a404a410a440a489a4a4a400a519a551a60aa828a8a2a854a986a908aa0aaa20aa22aa28aa88aaaaaar   r(   r   c           	        |j         d         }t          j        |dg          \  }}t          j        |t          dz  g          \  }}t          j        |t          dz  g          \  }}t          j        |t          dz  g          \  }}|                    t          j                                      t          j                  }|                    |ddf          t          j	        ddgt          j
                                      d	          z	  }|d
z                      |df          }|t          j        d          |z   z  t          j        d          z  }	|	                    |dddf          }	|                    |ddf          t          j	        d t          d          D             t          j
                                      d          z	  }|t          j
        d          z  }t          j        |dk    t          j        d          t          j        d                    }|                    |dddf          }|                    |ddf          t          j	        g dt          j
                                      d          z	  }|                    t          j                  |dz                      t          j                  dz                      |df          z  }| j        J t          j        | j        |                    |dddf          d          }
|
                    |dddf          }
|	|
z  |z                      |df          S )Nr   rC   r}   r   r   r   r   r~   r  r   r   r|  c                    g | ]}|S r/   r/   r   s     r    r3   z+IQ2_S.dequantize_blocks.<locals>.<listcomp>  r  r"   r  r  r  r
  r  r   r   r8   r   r   rb   r[   rX   rY   r6   r   rt   r   r   r   rg   r   )rz   r   r   r   r   r   r  r   r  r  rg   s              r    r   zIQ2_S.dequantize_blocks  s   <?)FQC((49TDAI;//Ditqyk22tYtdbj\22
FFF2:%%bj112q 122bh1vRX6V6V6V6^6^_h6i6ii4-(((B88"*S//F*+bj.>.>>ZZ2q!,-- xQ/00BH=R=Rq=R=R=RZ\Zb4c4c4c4k4klu4v4vv&!RZ]]BJrNNCCxQ233ZZ2q)**bh|||28.T.T.T.\.\]f.g.ggYYry!!b4i%7%7	%B%Ba%G$P$PRZ\^Q_$`$``x###!#(BJJ"a7K,L,LSUVVV||Xr1a011T	E!**Hb>:::r"   Nr   r  r/   r"   r    r  r    sL         J!H?	L F ; ; ; [; ; ;r"   r  c                  2    e Zd ZdZdZdZed	d            ZdS )
IQ3_XXS)r9  r   )r   r  ra  r{  $   ,   4   >   s   0000020004001100130017002000220031004200730075000101030110011201210125013001320141015401700100020202040211022002220231023302370251025702750201030703100312032503700313043704440457047304750401050705320552053506640610071407160743076107011003101010121021102310301032103410471050100011021111112011221101120312101212122112301272120013021320133113461366130114051450142015241546157115051622174017002002201120132020202220262031204220012103210521102112212121302163216721702100220222112217222022222237224022552201231023142370237423352453240325272541257425012703271627452701301030123021302330503065307230003102312031313144314631013203321032253252327232113333333034473472340035063522355535143636366336333760370440174035403740534057407441204237424042604266420743454304445144644425454345704505471047124730471250415070500051065126515551145232527252025353531054235427547254025531555056245742572460446046606460216161611762646230633663446405655265336603672167037005700770107032705270267140711272457252720073157333736073217441740075027524753076r   r(   r   c           	     >   |j         d         }t          j        |dg          \  }}t          j        |t          dz  g          \  }}|                    t          j                                      t          j                  }|                    t          j                  }|t          j        d          |dz	                      t          j                  z   z  t          j        d          z  }|	                    |dddf          }|	                    |ddf          t          j
        g dt          j        	          	                    d
          z	  }t          j        t          j        t          j        	          	                    d          }	|t          j        d          z  	                    |dddf          }t          j        |	|d          }|	                    |dddf          t          j
        d t!          d          D             t          j        	          	                    d          z	  }|t          j        d          z  }t          j        |dk    t          j        d          t          j        d                    }|	                    |dddf          }| j        J t          j        | j        |	                    |dddf          d          }
|
	                    |dddf          }
||
z  |z  	                    |df          S )Nr   rC   r   r   r{  r   r   r}  r~   r  r  r   r   c                    g | ]}|S r/   r/   r   s     r    r3   z-IQ3_XXS.dequantize_blocks.<locals>.<listcomp>  r  r"   r}   r  r  )r   r8   r   r   rb   r[   rX   rY   r   r6   r   r   rt  rv  rt   r   r   r   rg   )rz   r   r   r   r   r   r  r  r  rv  rg   s              r    r   zIQ3_XXS.dequantize_blocks  s   <?)FQC((4Ytdai[11
FFF2:%%bj11RY''"*S//Vr\$9$9"*$E$EEFTWXZZ2q!,-- "a011RXnnnTVT]5^5^5^5f5fgp5q5qqw~RX>>>FF~VV4(118RA2FGG"65r:::xQ233rx@U@UERSHH@U@U@U]_]e7f7f7f7n7no{7|7||&!RZ]]BJrNNCCxQ233x###!#(BJJ"a7K,L,LSUVVV||Xr1a011T	E!**Hb>:::r"   Nr   r  r/   r"   r    r  r    sI        J?H	L & ; ; ; [; ; ;r"   r  c                  2    e Zd ZdZdZdZed	d            ZdS )
IQ3_S)r  r   )r   r
  r5  rY  r         r   s   00000100020005000700100011001200140016002000210025003300400042004500470051005300600062007100740077000001010102010401100111011501200123012701310135014401610165017201000201020502070210021302160221022502300234024202450247025102530270027302030311031503200322033103330336034403500352036703710375030004130417042104240432044004430451047004020504052005220526053305410545054705660573050606110613063106520671060007020704072007220726073307500754070010011002100410101011101310151017102010221031103410361054105610611072100011011103110611101114112111301133114111501152117011761100121212151217122012241232124012431255126012721201130413071310131313211327133013341341136213701303140514121414143114331442144614501454140115101513152115301532155115201624162716441646160117031710171217211735174117621770170020012003200520072010201220142016202120232027203020322041204320452050205220672070207320752000210221102113211721222125213121342142215121012204220722212223223022372241225322572271227422002302230523112322232423312333234223502366230124072420242324322435244124722475240425112522253725402553257025002602260726212655266126052711272627302743275027023011301330153017302230313033303530423044304730513063307130013103310531143121312331403160317231763100321232203232323432503201331033143321332333273330334133433347335533733303341134163422343134523460346434013510351235253532354435563573351636413601370337203722373537004004401240204024402740324041405040704002410741114113412241304135414341514155410142034210421542214233424042574262427042044311431343204322433143354300440244244437444044714405450745214562451346344660461047154730474347514702501050145022504050445047505250665074500151035105511251215132517251005211522352305236525352025307531053275344535153655373530154045420543254465412552655515553554256025704572257116013601560316033606060006120612761646112623462426255626262706200631463216340632564436462640065036534656065056640661167136700700470077020702270367040705470627002711171247143714571017204721072167221723072517202733273357353730174057413742074507422754275027631760077r   r(   r   c           	        |j         d         }t          j        |dg          \  }}t          j        |t          dz  g          \  }}t          j        |t          dz  g          \  }}t          j        |t          dz  g          \  }}|                    t          j                                      t          j                  }|                    |ddf          t          j	        ddgt          j
                                      d	          z	  }|d
z                      |df          }|dd|z  z   z  }	|	                    |dddf          }	|                    |ddf          t          j	        d t          d          D             t          j
                                      d          z	  }|t          j
        d          z  }t          j        |dk    t          j        d          t          j        d                    }|                    |dddf          }|                    |ddf          t          j	        d t          d          D             t          j
                  z	  }|dz                      t          j                                      |df          }|                    t          j                  |dz  z  }| j        J t          j        | j        |                    |dddf          d          }
|
                    |dddf          }
|	|
z  |z                      |df          S )Nr   rC   r   r   r}   r   r   r~   r  r   c                    g | ]}|S r/   r/   r   s     r    r3   z+IQ3_S.dequantize_blocks.<locals>.<listcomp>Y  r  r"   r  c                    g | ]}|S r/   r/   r   s     r    r3   z+IQ3_S.dequantize_blocks.<locals>.<listcomp>^  s    7L7L7La7L7L7Lr"   r  r   r  )rz   r   r   r   r   r   r   r  r  r  rg   s              r    r   zIQ3_S.dequantize_blocksH  s   <?)FQC((49TDAI;//D9TDBJ<00D	$44vFF2:%%bj112q 122bh1vRX6V6V6V6^6^_h6i6ii4-(((B88!a&j.!ZZ2q!,-- xQ/00BH=R=Rq=R=R=RZ\Zb4c4c4c4k4klu4v4vv&!RZ]]BJrNNCCxQ233ZZ2q)**bh7L7L5887L7L7LTVT\.].].]]4i	**22Hb>BBYYry!!R1W-x###!#(BJJ"a7K,L,LSUVVV||Xr1a011T	E!**Hb>:::r"   Nr   r  r/   r"   r    r  r  "  sJ        J?H	L F ; ; ; [; ; ;r"   r  c                  R    e Zd ZdZdZdZ ej        d          Ze	d
d            Z
d	S )IQ1_S)i   r}   )r   r   r   s    00000200050008000a00110015002000220028002a00450051005400560065008000820088008a009500a000a200a800aa000401050111011401160119011a012501410146014901520155015a0161016401660168018501910194019601a5010002020208020a0215022002220228022a02450251025902640269028002820288028a02910295029902a002a202a802aa0211041404160425044104490455045a046404650491049904a5040105040505050605150518051a052905400545054a0550055105540555055605590560056205650568056a0581059105950598059a05a105a405a505a605a90514061906410644065006520655065806600661066606690685069106940699060008020808080a0815082008220828082a0845085108560865088008820888088a089508a008a208a808aa0805091109140919092409250941095009510955096109640969099109940996099909a509000a020a080a0a0a150a200a220a280a2a0a450a510a590a610a650a800a820a850a880a8a0a950aa00aa20aa80aaa0a101011101410191024102510411044105010551058106110641065106910911094109610a110a5100111041106110911101112111511181121112411291145114a11501151115211541155115611591160116511841192119511a111a41111121412161225124012461249125212551258125a12641266128512911294129612a51201140614091414141514181419142114261441144514461448144a145114541455145614591462146514681484148914901494149514981499149a14a114a414a514a914021505150a151115141515151615191520152215251528152a1541154415451546155115521554155515561559155a1561156415651566156915801582158415851588158a159015911594159515961599159a15a015a215a51501160416051606161516161618161a1621162616401642164416451648164a1651165516561658165916611664166516681669166a1686168a1692169516a416a91611181618251841184418461849185018551858185a1860186118641866186918851891189418a5181019121915191a19211925194219441945194819511954195519561959195a19601965196a1989199119921995199819a119a619a919091a161a241a261a441a461a491a501a521a551a581a611a661a691a851a911a961a9a1a0020022008200a20152020202220252028202a20452051205920612065208020822088208a209520a020a220a520a820aa2005211121142119212521422144214921552158215a2161216421652166218521902196219921a521012208220a22112215222022222228222a2245225122562259226522812288228a2291229522a022a222a822aa220524142416241924252444244524462449245224552458245a2466248524912494249924a124a52409251525212529254025452548255125542555255925622565256825892590259425952598259a25a125a425a625a925052610261226192625264126492655266026612669268426862690269a260028022808280a2815282028222828282a2845285128542865288028822888288a28a028a228a828aa2809291129142919292529462949295229552961296429662969298529902996299929a429a529002a022a082a0a2a202a222a282a2a2a452a512a562a592a652a802a822a882a8a2a952aa02aa22aa82aaa2a054011401640254049405240554058405a4061406440664094409940a140a6400041014104410641094112411541164118411a41214126412941454148414a41514154415541564159415a41654168416a41814184418641904192419541a041a141a241054211421442164225424142524255425a426442694289429442a5420144154419442944454448444a44514454445544564461446244654468446a44814486448944904492449544a044a144a9440145024505450a4511451445154516451945204525452a45414544454545464549455045514554455545564558455945614564456545664569458245844585458845914594459545964599459a45a545a845aa450146054609461446154618461a462146244629464046424645464846504651465246554656465946624665466846814685468a4694469546a146a446a6460548114815481a48254842484948504855485848614864486648694885489148944896489948a5480149054906490a491049144915491849214924492649404945494a4951495249544955495649594960496249654966496a49864989499249954996499849a149a449a649a949164a444a464a494a554a584a5a4a644a694a944aa54a01500450055006500950125015501a5021502450295040504550485051505450555056505950655068508650895095509850a050a150a650a9500551085109510a5111511451155116511851195120512551265128512a5141514451455146514951505151515251545155515651585159515a51615164516551665169518251855191519451955196519951a051a551aa5101520652125215521a5221522452425245524a525152545255525652595262526552855290529252955299529a52a452045405541154145415541654185419542154255428542a54415444544554465449544a5450545154545455545654585459545a54615462546454655466546954805488548a5491549454955496549954a154a454a554aa5401550255045505550655095510551155125514551555165519551a552155245525552655295540554155425544554555465548554955505551555255545555555655585559555a5560556155645565556655685569556a5581558455855589558a559055915594559555965598559955a155a455a555a655a95500560156025604560656085609561156145615561856195620562156225624562556265628562956415645564656485649564a56505651565256545655565656585659565a566156645665566956825685568656885689568a56915695569a56a256a556a656a856a956045805580658095810581558185821582a58455848584a585158545855585658585859586058625864586558825889589058925895589858a158a9580159025905590a5911591459155916591959255941594459455946594959505951595259545955595659585959595a5961596459655966596959815985598959915994599559965998599959a559045a085a155a1a5a205a255a265a295a455a485a495a515a555a565a585a595a625a655a685a6a5a815a8a5a925a955a965a985a9a5aa15a05601460166019602560446050605560566058605a60616064606660696081609660a5600161046106610961126115612161226126612961456149615161556156615961656166616a6184618a6192619561a161a661a9611162166219624062416246625562566258626062856291629662a56211641264156416641a6421642664296440644264456448644a64516454645564566459645a646064626465648464856489649064926494649564966498649a64a164a464a964056508650a651165156516651965446545654665496550655165546555655665596561656465656566656965866589658a6591659565966599659a65a265a565a665a86502660966156620662666286629664066456648664a66516654665566566658665a666066656668668066826685668a669466966698669966a066a466a666aa661668196825684168526855685a6861686968856891689868a668016904691069156921692469266929694069416945694669486951695469556956695969606965696a69826984698a699569a169a469a569a969116a166a186a416a446a496a506a556a586a5a6a646a656a696a866a946a986a9a6aa66a0080028008800a802080228028802a8045805080518054805680598065808080828088808a809580a080a280a880aa8005811181148116811981258141814481498150815281558156815881598164816681698185818981948196819981a5810082028208820a8215822082228228822a8251825482598265828082828288828a829582a082a282a882aa821484198441844484518455845a846184648469849484998401850985128515851a85268529854085418545854885518554855585568559855a856585668568856a8581858485868589859085928595859885a68511861686198625864186448649864a865086558659865a86618666866a86858691869a86a4860088028808880a8815882088228828882a8841884588518854885988658869888088828888888a889588a088a288a888aa8805890689118914891689258941894489468949895089528955895a8961896489858996899989a589008a028a088a0a8a158a208a228a288a2a8a458a518a548a568a808a828a888a8a8a958aa08aa28aa88aaa8a059011901690189019902590419046904990559058905a9069906a9085909190949096909990a59001910491069109911091159118911a912191249126912991409145915091519154915591569159916291659184918691929195919891a191a491a691a99105921192149219922592449246924992509252925592589266926992859294929692a992019404940694109415941894269440944a945194549455945694589459946094619462946594849486949294949495949894a194a9940095059508950a951095119514951595169519952195259529952a9541954495459546954995509551955295549555955695589559955a95619564956595669569958195859588959195929594959595969599959a95a095a295a595a895aa950196049610961596199620962696299645964896499651965296559656965996659668968296849689968a96929694969596a496a696a99605981698199825984198469850985298559856985a98649865988598919896989998a59804990699099910991299159918991a99209921992499269940994299459948994a99519954995599569959996299659966996a99819984999099929995999a99a199a699059a159a259a449a469a499a509a559a589a619a859a919a949a959a969a00a002a008a00aa015a020a022a028a02aa045a051a054a056a059a080a082a088a08aa095a0a0a0a2a0a8a0aaa005a109a111a114a116a119a11aa146a149a151a155a158a15aa161a164a185a190a192a196a199a102a208a20aa210a219a222a228a22aa245a251a256a259a265a280a282a288a28aa295a2a0a2a2a2a8a2aaa219a425a441a444a450a454a455a458a45aa461a465a466a468a469a485a406a509a510a512a515a518a526a529a542a545a551a554a555a556a559a565a56aa581a584a585a586a589a592a595a598a505a611a616a61aa621a625a644a646a64aa652a655a656a658a660a662a686a690a695a696a699a6a1a6a4a6a6a600a802a808a80aa820a822a828a82aa851a854a856a859a880a882a888a88aa895a8a0a8a2a8a8a8aaa805a914a919a921a925a941a950a955a95aa961a966a969a990a996a900aa02aa08aa0aaa20aa22aa28aa2aaa51aa54aa56aa80aa82aa88aa8aaa95aaa0aaa2aaa8aaaaaag      ?r   r(   r   c           	     :   |j         d         }t          j        |dg          \  }}t          j        |t          dz  g          \  }}|                    t          j                                      t          j                  }|                    t          j                  }|d|dz	  dz  z  dz   z  }|	                    |dddf          }t          j
        |t          j        d          z  dk    | j        | j                   }|	                    |dddf          }|	                    |ddf          t          j        g d	t          j        
          	                    d          z	  }|                    t          j                  |dz  dz  	                    |df          z  }| j        J t          j        | j        |	                    |dddf          d          }	|		                    |dddf          }	||	|z   z  	                    |df          S )Nr   rC   r}   r  rY  r   r   i   r   r
  r  r   r~   r  r  r   r   )r   r8   r   r   rb   r[   rX   rY   r   r6   r   deltar   rg   r   )
rz   r   r   r   r   r   r   r  r  rg   s
             r    r   zIQ1_S.dequantize_blocks  s   <?)FQC((44$!)--BFF2:%%bj11WWRY!bA~&*+ZZ2q!,--"ry000Q6	CI:NNxQ233ZZ2q)**bh|||29.U.U.U.].]^g.h.hhYYry!!b1f]$;$;XrN$K$KKx###!#(BJJ"a7K,L,LSUVVV||Xr1a011dUl#,,h^<<<r"   Nr   )rM   rN   rO   rh   ri   rj   r8   rY   r  r   r   r/   r"   r    r  r  i  s^         JH	L F BJuE= = = [= = =r"   r  c                  ^    e Zd Zej        Zej        Zej        Zej        Zedd            Z	dS )IQ1_Mr   r(   r   c           	     \   |j         d         }t          j        |t          dz  g          \  }}t          j        |t          dz  g          \  }}|                    t          j                  }|                    |df          t          j        d          z  t          j        g dt          j                                      d          z	  }|d	         |d
         z  |d         z  |d         z  }|                    t          j                  	                    t          j
                                      |df          }|                    |dd          t          j        g dt          j                                      d          z	  }|dz                      |df          }|d|z  dz   z  }|                    |ddddf          }|                    |ddf          t          j        ddgt          j                                      d          z	  }|	                    t          j                  |dz  	                    t          j                  dz                      |df          z  }t          j        |dz  dk    | j        | j                   }	|	                    |ddddf          }	| j        J t          j        | j        |                    |dddf          d          }
|
                    |ddddf          }
||
|	z   z                      |df          S )Nr   r}   r-   r   i   )r  r}   r   r   r~   )r   r   r   r   ).rC   ).r
  r   r   r  r  rY  rC   r  r  r   )r   r8   r   r   rb   r   r6   r   r[   rX   rY   rt   r   r  rg   r   )rz   r   r   r   r   r   r  r   r  r  rg   s              r    r   zIQ1_M.dequantize_blocks  s   <?9Vdai[11DYtdbj\22
F RY''^^XqM**RYv->->>28MMMacajCkCkCkCsCstzC{C{{fI&	!AfI-&	9FF2:%%bj11998Q-HH"a00BH\\\QSQZ4[4[4[4c4cdm4n4nn4-(((B88!f*q.!ZZ2q!Q/00ZZ2q)**bh1vRX.N.N.N.V.VW`.a.aaYYry!!b4i%7%7	%B%Ba%G$P$PRZ\^Q_$`$``daSYJ??xQ1566x###!#(BJJ"a7K,L,LSUVVV||Xr1a344dUl#,,h^<<<r"   Nr   )
rM   rN   rO   r  rh   ri   rj   r  r   r   r/   r"   r    r  r    sQ        !J~H~HKE = = = [= = =r"   r  c                  *    e Zd ZdZedd            ZdS )IQ4_NL)iiiiiiiir   r  rx  &   5   E   Y   q   r   r(   r   c                   |j         d         }t          j        |dg          \  }}|                    t          j                                      t          j                  }|                    |dd| j        dz  f          t          j	        ddgt          j
                                      d          z	  }|t          j
        d          z                      |ddf          }t          j	        | j        t          j                                      ddd	          }t          j        ||d
                              t          j                                      |df          }||z  S )Nr   rC   r   r   r   r~   r   r   r-   r   )r   r8   r   rb   r[   rX   rY   r6   r   r   rt   rO  r   r   )rz   r   r   r   r   rO  s         r    r   zIQ4_NL.dequantize_blocks6  s*   <?	&1#&&2FF2:%%bj11ZZ2q#.A*=>??28QPQFZ\ZbCcCcCcCkCklxCyCyy28D>>!**Hb!+<==(3;bg666>>q!RHH"555<<RZHHPPRZ\^Q_``Br"   Nr   )rM   rN   rO   rO  r   r   r/   r"   r    r  r  3  s7        XG   [  r"   r  c                  &    e Zd Zedd            ZdS )IQ4_XSr   r(   r   c                   |j         d         }t          j        |dg          \  }}t          j        |dg          \  }}t          j        |t          dz  g          \  }}|                    t          j                                      t          j                  }|                    t          j                  }|	                    |ddf          t          j
        ddgt          j                  	                    d          z	  }|	                    |ddf          t          j
        d	 t          t          d
z            D             t          j                  	                    d          z	  }|	                    |df          t          j        d          z  }|	                    |df                              t          j                  t          j        d          z  }||t          j        d          z  z                      t          j                  t          j        d
          z
  }||                    t          j                  z  	                    |ddf          }	|	                    |dddf          t          j
        ddgt          j                  	                    d          z	  }|	                    |dd
df          t          j        d          z  }t          j
        t          j        t          j                  	                    d          }
t          j        |
|d                              t          j                  	                    |dd
f          }|	|z  	                    |df          S )Nr   rC   r   r   r   r   r~   r  c                    g | ]}d |z  S )rC   r/   r   s     r    r3   z,IQ4_XS.dequantize_blocks.<locals>.<listcomp>U  s    CeCeCeaAECeCeCer"   r   )r   r   r   r   r
  r-   r   )r   r   r   r   r   )r   r8   r   r   rb   r[   rX   rY   r   r6   r   rt   r   r   r  rO  r   )rz   r   r   r   r   scales_hscales_lr   r  r  rO  s              r    r   zIQ4_XS.dequantize_blocksI  s   <?)FQC((44!--$y
|44"FF2:%%bj11==++##Xr1$566"(Aq6QSQY:Z:Z:Z:b:bcl:m:mm##Xq"$566"(CeCeSXY]acYcSdSdCeCeCemomv:w:w:w::  AK  ;L  ;L  L##XrN33bhtnnD##XrN33::28DDrxPT~~Uh"(1++56>>rwGG"'RT++U&--
+++44hA5FGGZZ2q"-.."(Aq62R2R2R2Z2Z[g2h2hhZZ2r1-..$?(6>999AA-PP"555<<RZHHPPRZ\^`bQcddR  (B000r"   Nr   r  r/   r"   r    r  r  H  s2        1 1 1 [1 1 1r"   r  )r   r   r   r   r   r   )
r%   r&   r'   r(   r)   r   r*   r   r   r(   )rA   r(   r   r(   )rQ   r(   rR   r   r   r(   )9
__future__r   abcr   r   typingr   r   r   mathr	   r
   numpy.typingr   	constantsr   r   r   lazyr   numpyr8   r!   r$   r@   rJ   	ExceptionrL   rP   r   r]   rc   re   r   r   r   r   r   r   r  r  r  r*  r.  r1  rB  rF  rW  rt  r  r  r  r  r  r  r  r  r/   r"   r    <module>r     s   " " " " " " " # # # # # # # # * * * * * * * * * *         " " " " " " C C C C C C C C C C ! ! ! ! ! !    > > > >> > > >
 
 
 
    !               ;= < < < <[ [ [ [] ] ] ]{2 {2 {2 {2 {2c {2 {2 {2|O O O O O7.3 O O O O + + + + +7.3 + + + +D" " " " "7.3 " " " "J'+ '+ '+ '+ '+7.3 '+ '+ '+ '+T* * * * *7.3 * * * *Z    7.3    4* * * * *7.3 * * * *6)2 )2 )2 )2 )27.3 )2 )2 )2 )2X/7 /7 /7 /7 /77.3 /7 /7 /7 /7d6 6 6 6 67.3 6 6 6 661 1 1 1 17.3 1 1 1 1.-+ -+ -+ -+ -+G/5 -+ -+ -+ -+`+ + + + +G/5 + + + +B0+ 0+ 0+ 0+ 0+G/5 0+ 0+ 0+ 0+f8B 8B 8B 8B 8BG/5 8B 8B 8B 8Bv>; >; >; >; >;g19 >; >; >; >;BC; C; C; C; C;W07 C; C; C; C;Le; e; e; e; e;G/5 e; e; e; e;P1; 1; 1; 1; 1;g19 1; 1; 1; 1;hD; D; D; D; D;G/5 D; D; D; D;N`= `= `= `= `=G/5 `= `= `= `=F$= $= $= $= $=G/5 $= $= $= $=N    W07    *1 1 1 1 1W07 1 1 1 1 1 1r"   