+
    ÒÜ³j(  ã                   ó’   € ^ RI t ^ RIHt ^t^ t]],          t. ROt. ROt. ROtRR R llt	RR R llt
R tR	 tR]3R
 R lltR tR# )é    N)ÚListÚcolumnc                óD   € V ^8„  d   QhR\         P                  R\        /# )é   ÚimatrixÚ	direction©ÚtorchÚTensorÚstr)Úformats   "ÚV/home/luca/screen-checking/.venv/lib/python3.14/site-packages/awq/utils/quant_utils.pyÚ__annotate__r      s   € ÷ ñ ”%—,‘,ð ¬3ñ ó    c                ó¦  € \         P                  ! ^ \        \        V P                  R7      pV P                  \         P                  4      p \         P                  ! V ^4      p VR8X  db   V P                  RV P                  ^,          \        ,          \        4      p \         P                  ! WR,          4      P                  RR7      pMgVR8X  da   V P                  V P                  ^ ,          \        ,          \        R4      p \         P                  ! WR,          4      P                  ^R7      pXP                  \         P                  4      pV# )zü
Packs a 4-bit integer matrix into a packed 32-bit integer matrix.
Args:
    imatrix (torch.Tensor): matrix of integers
    direction (str): direction of packing, either "column" or "row"

Returns:
    qmatrix (torch.Tensor): packed matrix of integers
©Údevicer   ©ÚdimÚrowéÿÿÿÿ©NNºNNN©Nr   N)r
   ÚarangeÚSTORAGE_BITSÚQ_BITSr   ÚtoÚint8Úbitwise_andÚviewÚshapeÚPACK_NUMÚbitwise_left_shiftÚsumÚint32)r   r   ÚshiftsÚqmatrixs   &&  r   Úpackr)      sï   € ô �\Š\˜!œ\¬6¸'¿.¹.ÔI€Fà�j‰jœŸ™Ó$€GÜ×Ò ¨Ó.€Gà�HÔØ—,‘,˜r 7§=¡=°Õ#3´xÕ#?ÄÓJˆÜ×*Ò*¨7¸=Õ4IÓJ×NÑNÐSUÐNÓV‰à	�eÔ	Ø—,‘,˜wŸ}™}¨QÕ/´8Õ;¼XÀrÓJˆÜ×*Ò*¨7¸=Õ4IÓJ×NÑNÐSTÐNÓUˆà�j‰jœŸ™Ó%€Gà€Nr   c                óD   € V ^8„  d   QhR\         P                  R\        /# )r   r(   r   r	   )r   s   "r   r   r   *   s   € ÷ ñ ”E—L‘Lð ¬Sñ r   c                óà  € \         P                  ! ^ \        \        V P                  R7      pVR8X  dH   \         P
                  ! V R,          VR,          4      P                  V P                  ^ ,          R4      pMMVR8X  dG   \         P
                  ! V R,          VR,          4      P                  RV P                  R,          4      pXP                  \         P                  4      ^,          pV# )	a  
Unpacks a 32-bit packed integer matrix into a 4-bit integer matrix.

Args:
    qmatrix (torch.Tensor): matrix of packed integers
    direction (str): direction of unpacking, either "column" or "row"

Returns:
    imatrix (torch.Tensor): matrix of integers
r   r   r   )r   r   Nr   r   )r   Nr   r   )
r
   r   r   r   r   Úbitwise_right_shiftr!   r"   r   r   )r(   r   r'   r   s   &&  r   Úunpackr-   *   sº   € ô �\Š\˜!œ\¬6¸'¿.¹.ÔI€Fà�HÔÜ×+Ò+Ø�JÕ ¨Õ!6ó
ç
‰$ˆw�}‰}˜QÕ Ó
$ñ 	ð 
�eÔ	Ü×+Ò+Ø�JÕ ¨Õ!6ó
ç
‰$ˆr�7—=‘= Õ$Ó
%ð 	ð �j‰jœŸ™Ó$ tÕ+€Gà€Nr   c                ó(  € VP                  \        P                  4      ^,          p\        P                  ! WP	                  V^ R7      ,          VP	                  V^ R7      ,           4      pVP                  \        P                  4      ^,          pV# )aG  
Quantizes a matrix of 16-bit floats into a matrix of 4-bit integers.

Args:
    fmatrix (torch.Tensor): matrix of 16-bit floats
    scales (torch.Tensor): matrix of 16-bit floats
    zeros (torch.Tensor): matrix of 4-bit integers
    group_size (int): group size

Returns:
    imatrix (torch.Tensor): matrix of 4-bit integers
r   )r   r
   r   ÚroundÚrepeat_interleave)ÚfmatrixÚscalesÚzerosÚ
group_sizer   s   &&&& r   Úquantizer5   F   su   € ð �H‰H”U—Z‘ZÓ  4Õ'€Eä�kŠkà×.Ñ.¨z¸qÐ.ÓAÕAØ×%Ñ% j°aÐ%Ó8õ9ó€Gð �j‰jœŸ™Ó$ tÕ+€Gà€Nr   c                ó>  € VP                  \        P                  4      ^,          pV P                  \        P                  4      ^,          p WP                  V^ R7      ,
          VP                  V^ R7      ,          pVP                  \        P                  4      pV# )a:  
Dequantizes a 4-bit integer matrix into a float matrix.

Args:
    imatrix (torch.Tensor): matrix of 4-bit integers
    scales (torch.Tensor): matrix of 16-bit floats
    zeros (torch.Tensor): matrix of 4-bit integers
    group_size (int): group size

Returns:
    fmatrix (torch.Tensor): matrix of 16-bit floats
r   )r   r
   r   r0   Úfloat16)r   r2   r3   r4   r1   s   &&&& r   Ú
dequantizer8   a   s}   € ð �H‰H”U—Z‘ZÓ  4Õ'€EØ�j‰jœŸ™Ó$ tÕ+€Gð 	×)Ñ)¨*¸!Ð)Ó<Õ<Ø× Ñ  °Ð Ó3õ4€Gð �j‰jœŸ™Ó'€Gà€Nr   c                óf   € V ^8„  d   QhR\         P                  R\        R\        \        ,          /# )r   r   r   Úorder)r
   r   r   r   Úint)r   s   "r   r   r   z   s.   € ÷ ñ Ü�\‰\ðäðô ”�9ñr   c                ó  € VR8X  d;   V P                  R\        4      RV3,          P                  V P                  4      p V # VR8X  d9   V P                  \        R4      VR3,          P                  V P                  4      p V # )a0  
Applies the order to a 4-bit integer matrix.

Args:
    imatrix (torch.Tensor): matrix of integers
    direction (str): direction of applying order, either "column" or "row"
    order (List[int]): order to apply, default is ordinal packing order

Returns:
    imatrix (torch.Tensor): matrix of integers
r   r   r   r   )r!   r#   r"   )r   r   r:   s   &&&r   Úapply_orderr=   z   sr   € ð  �HÔØ—,‘,˜r¤8Ó,¨Q°¨XÕ6×;Ñ;¸G¿M¹MÓJˆð €Nð 
�eÔ	Ø—,‘,œx¨Ó,¨U°A¨XÕ6×;Ñ;¸G¿M¹MÓJˆà€Nr   c                 óÊ   € \        VR R7      p\        V R R7      p\        VR \        R7      p\        VR \        R7      pV^,
          p\        VR R7      p\        VRR7      p W3# )r   )r   )r   r:   r   )r-   r=   ÚREVERSE_AWQ_PACK_ORDERr)   )ÚqweightÚqzerosÚizerosÚiweightss   &&  r   Úawq_to_exllamarD   ’   sc   € ä�F hÔ/€FÜ�g¨Ô2€Hô ˜¨8Ô;QÔR€FÜ˜8¨xÔ?UÔV€Hà�a�Z€Fä�& HÔ-€FÜ�8 uÔ-€Gàˆ?Ðr   )r   é   r   é   é   é   é   é   )r   r   rG   rI   rE   rF   rH   rJ   )r   rG   rE   rH   r   rI   rF   rJ   )r   )r
   Útypingr   r   r   r#   ÚORDINAL_PACK_ORDERÚAWQ_PACK_ORDERr?   r)   r-   r5   r8   r=   rD   © r   r   Ú<module>rO      sX   ðÛ Ý ð 
€Ø€Ø˜6Õ!€â-Ð Ú)€Ú1Ð ÷÷8ò8ò6ð6 Ø)÷ô0r   