+
    TV-j-  ã                   óÖ   € R t ^ RIt^ RIHt ^ RIHt ^ RIHtH	t	 ^ RI
H
t
 ^ RIHtHt ^ RIHt ^ RIHtHtHt R t ! R R	]P*                  4      tRR
 ltR t]R8X  d
   ]! 4        R# R# )zS
Implements GPTQ

- https://arxiv.org/abs/2210.17323
- https://github.com/AutoGPTQ
N)Útree_flattenÚtree_unflatten)Útqdm)ÚQuantizedSwitchLinearÚSwitchLinear)Ú	load_data)Úcompute_bits_per_weightÚloadÚsavec           	      ó€  € VR9   g   Q RV 24       h^ V,          p^V,          ^,
          p\         P                  ! V RVP                  R,          R34      p \         P                  ! \         P                  ! WR,          ,
          VR,          ,          4      RV4      P                  \         P                  4      p \         P                  ! ^\         P                  ! ^ ^ V\         P                  4      4      p\         P                  ! V RRV34      p \         P                  ! W,          RR7      p V P                  RR4      # )é   zUnsupported bits ç        ©Úaxis>   r   é   é   éÿÿÿÿ).Néþÿÿÿ)ÚmxÚ	unflattenÚshapeÚclipÚroundÚastypeÚuint32ÚpowerÚarangeÚsumÚflatten)ÚwÚbitsÚscalesÚbiasesÚ
el_per_intÚn_binsÚshiftss   &&&&   Úb/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/mlx_lm/quant/gptq.pyÚquantizer'      só   € Ø�9ÔÐ8Ð 1°$°Ð8Ó8ÐØ�t•€JØ��W�q�[€FÜ
�Š�Q˜˜VŸ\™\¨"Õ-¨rÐ2Ó3€AÜ
�ŠÜ
�Š�!˜YÕ'Õ'¨6°)Õ+<Õ<Ó=¸sÀFó	ç�fŒR�Y‰YÓð ô �XŠX�aœŸš 1 b¨$´·	±	Ó:Ó;€FÜ
�Š�Q˜˜R Ð,Ó-€AÜ
�Šˆq�z Ô#€AØ�9‰9�R˜ÓÐó    c                   ó8   a a€ ] tR t^(t oV 3R ltR tRtVtV ;t# )ÚCatcherc                óf   <€ \         SV `  4        Wn        \        P                  ! R 4      V n        R# )r   N)ÚsuperÚ__init__Úmoduler   ÚarrayÚH)Úselfr.   Ú	__class__s   &&€r&   r-   ÚCatcher.__init__)   s"   ø€ Ü‰ÑÔØŒÜ—’˜#“ˆŽr(   c                ó¤   € VP                  ^ R4      pV P                  VP                  V,          ,           V n        V P                  ! V.VO5/ VB # )é    r   )r   r0   ÚTr.   )r1   ÚxÚargsÚkwargsÚxfs   &&*, r&   Ú__call__ÚCatcher.__call__.   sC   € Ø�Y‰Y�q˜"ÓˆØ—‘˜"Ÿ$™$ �)Õ#ˆŒØ�{Š{˜1Ð.˜tÒ. vÑ.Ð.r(   )r0   r.   )	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r-   r;   Ú__static_attributes__Ú__classdictcell__Ú__classcell__)r2   Ú__classdict__s   @@r&   r*   r*   (   s   ù‡ € õ÷
/ò /r(   r*   c                 ól	  a€ . p\         P                  \        0p\        V P	                  4       \         P
                  P                  R 7       F3  w  rš\        V
4      V9   g   K  VP                  V	\        V
4      34       K5  	  V P                  \        V4      4       \        \        \        ^ \        V4      V4      4      \        V4      V,          RR7       F-  w  r¼WWÆ,            pV ! V4       \         P"                  ! V4       K/  	  R p\         P$                  V3R l4       p\        \        V4      \        V4      RR7       EF�  w  pw  pp
V! V
P&                  4      pV
=\         P"                  ! V4       V
P(                  P*                  P,                  pV
P(                  P*                  P/                  \         P0                  4      p. p. p\        ^ VP2                  R,          V4       EFD  pVV,           pVRVV13,          p\         P4                  ! V4      p\         P6                  ! VSVR7      w  pppVP                  V4       VP                  V4       \        V4       F™  p	V	V,          p	VRW™^,           13,          pVW™3,          pV! VVVV4      pVRW™V,           13;;,          VVW™^,           1W™V,           13,          ,          ,          uu&   VVRW™^,           13&   \         P"                  ! VV4       K›  	  VRVR13;;,          VVVV1VR13,          ,          ,          uu&   EKG  	  \         P8                  ! VRR	7      p\         P8                  ! VRR	7      p\7        VSVV4      p V
P(                  P;                  SVR7      p!V V!n        VV!n        VV!n        V!PA                  V4       \         P"                  ! V!4       VV!3VV&   EK“  	  V P                  \        V4      4       \        V P	                  4       \         P
                  P                  R 7      pR
SRV/p"R
VRV/p#. p$\        V4       FC  w  pw  rš\C        V
R4      '       g   K  V#V"V	&   V$P                  WšP:                  ! R/ V#B 34       KE  	  \        V$4      ^ 8”  d   V P                  \        V$4      4       V V"3# ))Úis_leafzComputing Hessians)ÚtotalÚdescc                 ó6  € \         P                  ! \         P                  4      ;_uu_ 4        R \         P                  ! \         P                  ! V 4      4      ,          p\         P
                  ! V P                  ^ ,          4      pWV3;;,          V,          uu&   \         P                  P                  V 4      p \         P                  P                  V 4      p \         P                  P                  V RR7      pVuuRRR4       #   + '       g   i     R# ; i)g{®Gáz„?T)ÚupperN)
r   ÚstreamÚcpuÚmeanÚdiagr   r   ÚlinalgÚcholeskyÚcholesky_inv)r0   ÚdamprN   ÚHinvs   &   r&   Úcompute_inverse_hessianÚ.gptq_quantize.<locals>.compute_inverse_hessianN   s©   € Ü�YŠY”r—v‘v×ÕØœ"Ÿ'š'¤"§'¢'¨!£*Ó-Õ-ˆDÜ—9’9˜QŸW™W Q�ZÓ(ˆDØ�Dˆj�M˜TÕ!‹MÜ—	‘	×"Ñ" 1Ó%ˆAÜ—	‘	×&Ñ& qÓ)ˆAÜ—9‘9×%Ñ% a¨tÐ%Ó4ˆDØ÷ ××Óús   ­CDÄD	c                 óÒ   <€ ^S,          ^,
          p\         P                  ! \         P                  ! W,
          V,          4      RV4      pW%,          V,           pW,
          V,          # )r   r   )r   r   r   )r   Údr!   r"   r$   Úqr    s   &&&&  €r&   Ú
gptq_errorÚ!gptq_quantize.<locals>.gptq_errorX   sJ   ø€ à�D•˜1•ˆÜ�GŠG”B—H’H˜a�j¨FÕ2Ó3°S¸&ÓAˆØ�J˜ÕˆØ•˜�{Ðr(   Ú
Quantizing.)r    Ú
group_sizeNr   r    r\   Úto_quantizedr   © )"ÚnnÚLinearr   r   Úleaf_modulesÚModuleÚ	is_moduleÚtypeÚappendr*   Úupdate_modulesr   r   Ú	enumerateÚrangeÚlenr   ÚevalÚcompiler0   r.   ÚweightÚdtyper   Úfloat32r   Ú
zeros_liker'   Úconcatenater]   r!   r"   Ú	set_dtypeÚhasattr)%ÚmodelÚdatar    r\   Úfallback_bitsÚfallback_group_sizeÚ
batch_sizeÚlayersÚ
gptq_typesÚkÚlÚeÚsÚbatchrT   rY   ÚlidÚkeyrS   Ú	orig_typeÚWÚ
all_scalesÚ
all_biasesÚiÚjÚWlÚerrÚ_r!   r"   r   rW   ÚWqÚlayerÚconfigÚfallback_configÚq_layerss%   &&f&&&&                              r&   Úgptq_quantizer�   4   s  ø€ ð €FÜ—)‘)œ\Ð*€JÜ˜U×/Ñ/Ó1¼2¿9¹9×;NÑ;N×O‰ˆÜ�‹7�jÖ Ø�M‰M˜1œg a›j˜/Ö*ñ Pð 
×Ñœ¨Ó/Ô0ô Ü”%˜œ3˜t›9 jÓ1Ó2Ü�$‹i˜:Õ%Ø!÷‰ˆð
 ˜�Ð(ˆÙˆeŒÜ
�Š�Žñòô ‡Z�Zôó ðô Ü�&ÓÜ�&‹kØ÷ð ‰ˆ‰Xˆc�1ñ
 ' q§s¡sÓ+ˆØˆCÜ
�Š�Œà—H‘H—O‘O×)Ñ)ˆ	Ø�H‰H�O‰O×"Ñ"¤2§:¡:Ó.ˆàˆ
Øˆ
Ü�q˜!Ÿ'™' "�+ z×2ˆAØ�J•ˆAØ�3˜˜!˜�8•ˆBÜ—-’- Ó#ˆCô !#§¢¨B°TÀjÔ QÑˆAˆv�và×Ñ˜fÔ%Ø×Ñ˜fÔ%Ü˜:Ö&�Ø�Q•�Ø�c˜1 1�u˜9�nÕ%�Ø˜˜•J�á˜q ! V¨VÓ4�à�#�q˜q�5�y�.×! Q¨¨a°aµ%¨i¸À½U¸Ð.BÕ)CÕ%CÕCÓ!Ø&'��C˜ �U˜�NÑ#Ü—’˜˜Q–ñ 'ð ˆc�1‘2ˆg�J˜#  Q q S¨!©" W¥Õ-Õ-ŽJñ+ 3ô0 —’ 
°Ô4ˆÜ—’ 
°Ô4ˆÜ�a˜˜v vÓ.ˆØ—‘×%Ñ%¨4¸JÐ%ÓGˆØˆŒØˆŒØˆŒØ�‰˜	Ô"Ü
�Š�ŒØ˜E�lˆˆsŒñ_ðb 
×Ñœ¨Ó/Ô0äØ×ÑÓÜ—	‘	×#Ñ#ô€Fð �d˜L¨*Ð5€FØ˜}¨lÐ<OÐP€OØ€HÜ˜vÖ&‰	ˆ‰6ˆAÜ�1�n×%Ô%Ø'ˆF�1‰IØ�O‰O˜Q§¢Ñ A°Ñ AÐBÖCñ 'ô ˆ8ƒ}�qÔØ×Ñœ^¨HÓ5Ô6Ø�&ˆ=Ðr(   c                  ó¸  € \         P                  ! 4       p V P                  R RRR7       V P                  RRR7       V P                  R\        ^RR7       V P                  R	\        ^@R
R7       V P                  R\        ^RR7       V P                  R\        ^@RR7       V P                  R\        RRR7       V P                  R\        RRR7       V P                  R\        ^{R7       V P	                  4       p\
        P                  P                  VP                  4       \        VP                  RRR7      w  r#p\        W1P                  VP                  4      p\        VVVP                  VP                  VP                   VP"                  4      w  q$R&   \%        V4      p\'        RVR R24       \)        VP*                  VP                  VVV4       R# )z--modelz-mzQwen/Qwen3-0.6B-base)Údefaultz
--mlx-pathÚ	mlx_modelz--bitsz!Quantization bits for GPTQ layers)rd   r‘   Úhelpz--group-sizez'Quantization group size for GPTQ layersz--fallback-bitsz%Quantization bits for non-GPTQ layersz--fallback-group-sizez+Quantization group size for non-GPTQ layersz--num-samplesz?Number of samples from the calibration dataset, use -1 for all.z--sequence-lengthi   z)Sequence length for the calibration data.z--seed)rd   r‘   T)ÚlazyÚreturn_configÚquantizationzQuantized model with z.3fz bits per weight.Nr   )ÚargparseÚArgumentParserÚadd_argumentÚintÚ
parse_argsr   ÚrandomÚseedr	   rs   r   Únum_samplesÚsequence_lengthr�   r    r\   ru   rv   r   Úprintr
   Úmlx_path)Úparserr8   rs   Ú	tokenizerrŒ   Úcalibration_dataÚbpws          r&   Úmainr¦   ¢   sÜ  € Ü×$Ò$Ó&€FØ
×Ñ˜	 4Ð1GÐÔHØ
×Ñ˜¨kÐÔ:Ø
×ÑØ”s AÐ,Oð ô ð ×ÑØÜØØ6ð	 ô ð ×ÑØÜØØ4ð	 ô ð ×ÑØÜØØ:ð	 ô ð ×ÑØÜØØNð	 ô ð ×ÑØÜØØ8ð	 ô ð ×Ñ˜¤s°CÐÔ8Ø×ÑÓ€Dä‡I�I‡N�N�4—9‘9Ôä# D§J¡J°TÈÔNÑ€E�fÜ  ×,<Ñ,<¸d×>RÑ>RÓSÐä$1ØØØ�	‰	Ø�‰Ø×ÑØ× Ñ ó%Ñ!€E�.Ñ!ô " %Ó
(€CÜ	Ð! # c Ð*;Ð
<Ô=äØ�‰Ø�
‰
ØØØör(   Ú__main__)r   )Ú__doc__r—   Úmlx.coreÚcorer   Úmlx.nnr_   Ú	mlx.utilsr   r   r   Úmlx_lm.models.switch_layersr   r   Úmlx_lm.quant.utilsr   Úmlx_lm.utilsr   r	   r
   r'   rb   r*   r�   r¦   r=   r^   r(   r&   Ú<module>r°      sa   ðñó å Ý ß 2Ý ç KÝ (÷ñ òô	/ˆb�i‰iô 	/ôkò\?ðD ˆzÔÙ†Fñ r(   