+
    "Ý³jp_  ã                   óš  a € R- tI0 t ^ RIt^ RIHtHtHtHt ^ RIt^ RIH	t	 ^ RI
Ht ^ RIHtHtHtHtHtHtHtHtHtHtHt ^ RIHt ^RIHtHtHtHtHtH t H!t! . R.Ot"]PF                  ! ]$4      t%R t&Rs'] ^ k R	 t(R
 t)/ t*] ^k  ! R R]	4      t+ ! R R4      t,R/R lt-R R lt.R t/R t0]Pb                  3R lt2R t3]Pb                  3R lt4]Pb                  3R lt5^^€]Pl                  ]Pn                  RR3R lt8]Pl                  3R lt9R t:^^€]Pn                  3R lt;^^€]Pn                  3R lt<^^€]Pl                  ]Pn                  R3R lt=R0R lt>^^€]Pb                  ]P~                  R3R  lt@^^€]Pb                  ]P~                  3R! ltA]Pb                  ]Pb                  R3R" R# lltBR$ tCR% R& ltDR' R( ltER) tFR* tGR+ R, ltHR# )1é    N)ÚDictÚListÚOptionalÚTuple)ÚTorchDispatchMode)Úint_scaled_matmul)ÚMappingTypeÚZeroPointDomainÚ)_choose_qparams_affine_dont_preserve_zeroÚ_choose_qparams_affine_tinygemmÚ _dequantize_affine_no_zero_pointÚ_dequantize_affine_tinygemmÚ_quantize_affine_no_zero_pointÚ_quantize_affine_tinygemmÚchoose_qparams_affineÚdequantize_affineÚquantize_affine)Ú
_is_device)ÚGranularityÚPerAxisÚPerBlockÚPerGroupÚPerRowÚ	PerTensorÚPerTokenc                 óÐ   € \         P                  P                  V 4      p\         P                  P                  W,
          4      p^\         P                  ! W#,          4      ,          # )é   )ÚtorchÚlinalgÚnormÚlog10)ÚxÚyÚPsÚPns   &&  Ú[/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torchao/quantization/utils.pyÚcompute_errorr'   ?   sB   € Ü	�‰×	Ñ	˜1Ó	€BÜ	�‰×	Ñ	˜1�5Ó	!€BØ”—’˜B�GÓ$Õ$Ð$ó    c                 ó   a € V 3R  lpV# )c                 ó   <€ Ss R # ©N)Ú_cur_fqn)ÚmoduleÚinputÚfqns   &&€r&   Úforward_hookÚ'_get_logging_hook.<locals>.forward_hookK   s   ø€ àŠr(   © )r/   r0   s   f r&   Ú_get_logging_hookr3   J   s   ø€ õð Ðr(   c                 ól   € V P                  4        F  w  rVP                  \        V4      4       K!  	  R # r+   )Únamed_modulesÚregister_forward_pre_hookr3   )ÚmodelÚnameÚmods   &  r&   Ú_apply_logging_hookr:   R   s+   € Ø×(Ñ(Ö*‰	ˆØ×%Ñ%Ô&7¸Ó&=Ö>ó +r(   c                   ó*   a € ] tR t^]t o RR ltRtV tR# )ÚLoggingTensorModeNc                ót  € Vf   / pV! V/ VB pVP                    RVP                   2pRpV FQ  p\        V\        P                  4      '       g   K%  V\        \        VP                  4      4      R,           ,          pKS  	  VR8w  d   VR R p\        \        9  d   / \        \        &   V\        \        ,          9  d   / \        \        ,          V&   V\        \        ,          V,          9  d   ^ \        \        ,          V,          V&   \        \        ,          V,          V;;,          ^,          uu&   V# )NÚ.Ú ú, éþÿÿÿ)
Ú
__module__Ú__name__Ú
isinstancer   ÚTensorÚstrÚlistÚshaper,   Ú_fqn_to_op_to_shape_to_count)	ÚselfÚfuncÚtypesÚargsÚkwargsÚrsÚop_nameÚ	shape_strÚargs	   &&&&&    r&   Ú__torch_dispatch__Ú$LoggingTensorMode.__torch_dispatch__^   sý   € ØŠ>ØˆFÙ�4Ð"˜6Ñ"ˆàŸ/™/Ð*¨!¨D¯M©M¨?Ð;ˆØˆ	ÛˆCÜ˜#œuŸ|™|×,Ô,ØœS¤ c§i¡i£Ó1°DÕ8Õ8’	ñ ð ˜Œ?Ø! # 2˜ˆIäÔ7Ô7Ø57Ô(¬Ñ2ØÔ6´xÕ@Ô@Ø>@Ô(¬Õ2°7Ñ;ØÔ8¼ÕBÀ7ÕKÔKØIJÔ(¬Õ2°7Õ;¸IÑFÜ$¤XÕ.¨wÕ7¸	×BÀaÕGÓBàˆ	r(   r2   )r2   N)rC   rB   Ú__qualname__Ú__firstlineno__rS   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r&   r<   r<   ]   s   ø‡ € ÷ò r(   r<   c                   ó>   a € ] tR t^vt o R tR tR tR tR tRt	V t
R# )Ú_MultiInputc                ó&   € \        V4      V n        R # r+   )rG   Úvalues)rJ   Úinputss   &&r&   Ú__init__Ú_MultiInput.__init__w   s   € Ü˜6“lˆŽr(   c                ó<   € V P                   P                  V4       V # r+   )r^   Úappend)rJ   r.   s   &&r&   Ú	add_inputÚ_MultiInput.add_inputz   s   € Ø�‰×Ñ˜5Ô!Øˆr(   c                ó:   € \        V P                  V,          4      # r+   )r\   r^   )rJ   Úslices   &&r&   Ú__getitem__Ú_MultiInput.__getitem__~   s   € Ü˜4Ÿ;™; uÕ-Ó.Ð.r(   c                ó²   € V P                    Uu. uF5  p\        V\        P                  4      '       d   VP	                  4       MTNK7  	  upV n         R # u upi r+   )r^   rD   r   rE   Úcuda©rJ   Úvals   & r&   rk   Ú_MultiInput.cuda�   sA   € àLPÏKÊKó
ÙLWÀSœ* S¬%¯,©,×7Ò7ˆC�H‰HŒJ¸SÒ@ÉKñ
ˆŽùò 
ó   �;Ac                ó²   € V P                    Uu. uF5  p\        V\        P                  4      '       d   VP	                  4       MTNK7  	  upV n         R # u upi r+   )r^   rD   r   rE   Úxpurl   s   & r&   rq   Ú_MultiInput.xpu†   sA   € àKOÏ;Ê;ó
ÙKVÀCœ C¬¯©×6Ò6ˆC�G‰GŒI¸CÒ?É;ñ
ˆŽùò 
ro   )r^   N)rC   rB   rU   rV   r`   rd   rh   rk   rq   rW   rX   rY   s   @r&   r\   r\   v   s#   ø‡ € ò#òò/ò
÷

ð 
r(   r\   c           	      óê   € Ve1   V P                   V8w  d    \        RV RV RV P                    R24      hVe;   V P                  4       V8w  d$   \        RV RV RV P                  4        R24      hR # R # )NzExpected Tensor argument z to have dtype z
, but got z	 instead.z to have size )ÚdtypeÚ
ValueErrorÚsize)Ú
tensor_argÚarg_namert   rv   s   &&&&r&   Ú_guard_dtype_sizery   Œ   s’   € ØÒ˜Z×-Ñ-°Ô6ÜØ'¨ z°ÀÀÀzÐR\×RbÑRbÐQcÐclÐmó
ð 	
ð Ò˜JŸO™OÓ-°Ô5ÜØ'¨ z°À¸vÀZÐPZ×P_ÑP_ÓPaÐObÐbkÐló
ð 	
ñ 6Ñr(   c                óZ   € V ^8„  d   QhR\         P                  R\        \        ,          /# )é   r"   Úreturn)r   rE   r   Úint)Úformats   "r&   Ú__annotate__r   —   s"   € ÷ ñ ¤§¡ð ´$´sµ)ñ r(   c                 óÈ   € . p\        \        V P                  4      ^,
          4       F  pVP                  ^4       K  	  VP                  V P                  R,          4       V# )é   éÿÿÿÿ)ÚrangeÚlenrH   rc   )r"   Ú
block_sizeÚ_s   &  r&   Ú_get_per_token_block_sizer‡   —   sM   € Ø€JÜ”3�q—w‘w“< !Õ#Ö$ˆØ×Ñ˜!Öñ %à×Ñ�a—g‘g˜b•kÔ"ØÐr(   c                 ór  € \         P                  p\        V P                  4      p\	        \        V4      ^,
          4       F  p^W#&   K	  	  \        P                  pRpRp^pV P                  \        P                  8X  d   \        P                  MRp\        V VVVVVVVR7      w  rš\        WWšWFV4      pW¹3# )r�   gñhãˆµøä>N)Úscale_dtypei�ÿÿÿ)r	   Ú	SYMMETRICrG   rH   rƒ   r„   r   Úint8rt   Úfloat16Úfloat32r   r   )ÚtÚmapping_typer…   Úirt   ÚepsÚ	quant_minÚ	quant_maxr‰   ÚscaleÚ
zero_pointÚ	quantizeds   &           r&   Ú%_quantize_activation_per_token_absmaxr—   ¢   s²   € ä×(Ñ(€LÜ�a—g‘g“€JÜ”3�z“? QÕ&Ö'ˆØˆ
‹ñ (ä�J‰J€EØ
€Cð €IØ€IØ#$§7¡7¬e¯m©mÔ#;”%—-’-À€Kä-Ø	ØØØØØØØô	Ñ€Eô  Ø	�u¨%¸Ió€Ið ÐÐr(   c                óR   € \        V 4      w  rV\        WVWV4      pVe	   Ws,           pV# )zY
like F.linear, but with int8 dynamic quantization of activation,
and a quantized weight
)r—   Ú_quant_int8_per_token_matmul)r"   Úw_vals_int8_tÚw_scalesÚbiasÚ	out_dtypeÚx_vals_int8Úx_scalesÚmm_outs   &&&&&   r&   Ú$_quant_int8_dynamic_per_token_linearr¡   Ã   s7   € ô BÀ!ÓDÑ€KÜ)Ø˜}¸	ó€Fð ÒØ•ˆØ€Mr(   c                ón  € V P                   \        P                  8X  g   Q RV P                    R24       hVP                   \        P                  8X  g   Q RVP                    R24       hVP                   \        P                  \        P                  39   g   Q RVP                    24       hV P                  RV P                  R,          4      p\        WRVP                  R^4      4      pWc,          P
                  ! . V P                  RR OVP                  R,          N5!  pVP                  V4      pV# )aë  
Quantized matmul of int8 operands that accumulates to int32 and returns
output_dtype. For now, this is written for approximate numerical
Assumes that activation and weight quantization are symmetric,
i.e. act_zp and w_zp is 0.
Assumes that weight quantization is per-channel.

see
https://github.com/google/gemmlowp/blob/master/doc/quantization.md
for an overview of quantized matmul compute

in scalar form, assuming output_dtype is fp32 and zw == 0:

  Y_i_j_fp32 = sx * sw dot(X_i, W_j)
zx dtype z not yet supportedzw dtype z?x_scales needs to be a torch.float32 or torch.bfloat16 but got Nr‚   )	rt   r   r‹   ÚfloatÚbfloat16ÚreshaperH   r   Úto)rž   rŸ   rš   r›   Úoutput_dtypeÚtmpÚy_dot_scaledr#   s   &&&&&   r&   r™   r™   ×   s6  € ð. ×Ñ¤§
¡
Ô*ð Ø
�;×$Ñ$Ð%Ð%7Ð8óÐ*ð ×Ñ¤%§*¡*Ô,ð Ø
�=×&Ñ&Ð'Ð'9Ð:óÐ,ð �>‰>Ü�‰Ü�‰ðô ð ð JÈ(Ï.É.ÐIYÐZó	ð ð$ ×
Ñ
˜b +×"3Ñ"3°BÕ"7Ó
8€CÜ$ S¸×9IÑ9IÈ"ÈaÓ9PÓQ€Là	Õ	 ×)Ò)ð 	Ø	×	Ñ	˜3˜BÐ	ð	Ø!-×!3Ñ!3°BÕ!7ó	€Að
 	
�‰ˆ\Ó€AØ€Hr(   c                óN  € V P                  4       ^8X  g   Q R4       h\        P                  ! \        P                  4      P                  p^V P
                  ^,          3p\        P                  p\        P                  p\        V VVVVVVVR7      w  r‰\        WW‰W1V4      p
W¨V	3# )zn
assumes symmetric quantization
assumes axis == 0
assumes dense memory format
TODO(future): relax ^ as needed
úonly support 2d Tensors)Útarget_dtyper’   r“   r‘   Úzero_point_dtype)Údimr   Úfinfor�   Úsmallest_normalrH   Úint64r	   rŠ   r   r   )r"   r’   r“   r¬   r‘   r…   r­   r�   r”   r•   Úquants   &&&&       r&   Ú dynamically_quantize_per_channelr³     s¡   € ð �5‰5‹7�aŒ<Ð2Ð2Ó2ˆ<ä
�+Š+”e—m‘mÓ
$×
4Ñ
4€CØ�Q—W‘W˜Q•Z�€JÜ—{‘{Ðä×(Ñ(€LÜ-Ø	ØØØ!ØØØØ)ô	Ñ€Eô Ø	�u¨,À9ó€Eð ˜Ð#Ð#r(   c           	      ó¬   € V P                   pV P                  pVP                  4       ^8X  g   Q RVP                  4        24       h\        WWWSR7      pV# )r�   zscale size: ©r§   )rH   rt   Únumelr   )Úint_reprr”   r•   r�   r…   Úinput_dtypeÚdequantizeds   &&&&   r&   Údequantize_per_tensorrº   3  sS   € Ø—‘€JØ—.‘.€KØ�;‰;‹=˜AÔÐ= ¨e¯k©k«m¨_Ð=Ó=ÐÜ#Ø˜e°ô€Kð Ðr(   c           	      óÜ   € V P                  4       ^8X  g   Q R4       hV P                  4       p V P                  ^ ,          ^3pV P                  p\	        WWWSR7      pVP                  4       pV# )r{   r«   rµ   )r®   rŽ   rH   rt   r   )r·   ÚscalesÚzero_pointsr�   r…   r¸   r¹   s   &&&&   r&   Údequantize_per_channelr¾   >  si   € Ø�<‰<‹>˜QÔÐ9Ð 9Ó9Ðð
 �z‰z‹|€Hà—.‘. Õ# QÐ'€JØ—.‘.€KÜ#Ø˜f°;ô€Kð —-‘-“/€KØÐr(   Fc                 óŒ  € W P                   R,          8”  d   V P                   R,          pV^8”  g   Q hV P                   R,          V,          ^ 8X  g   Q hV P                  4       ^8X  g   Q hV^8:  g   Q RV 24       h\        P                  p\        P
                  p^V3p	^ p
^V,          ^,
          pVf   RpTpV\        P                  8w  d   TM\        P
                  pV\        P                  8X  d    V'       g   \        V VV	VV
VVVVR7	      w  rïMJV\        P                  8X  d    V'       g   \        V VV	VV
VVVVR7	      w  rïM\        V VV	VV
VVVVR7	      w  rïVP                  VR7      P                  V P                   ^ ,          R4      VP                  VR7      P                  V P                   ^ ,          R4      3# )r�   z-only n_bit smaller than 8 is supported, got: g�íµ ÷Æ°>)r‰   r­   ©rt   r‚   )rH   r®   r	   Ú
ASYMMETRICr   Úint32r
   ÚINTÚFLOATr   r   r   r¦   r¥   )ÚwÚn_bitÚ	groupsizert   Úzero_point_domainÚpreserve_zeror‘   r�   r¬   r…   r’   r“   r‰   r­   r”   r•   s   &&&&&&&         r&   Úget_groupwise_affine_qparamsrÊ   O  sÃ  € ð —7‘7˜2•;ÔØ—G‘G˜B•Kˆ	Ø�qŒ=Ðˆ=Ø�7‰7�2�;˜Õ" aÔ'Ð'Ð'Ø�5‰5‹7�aŒ<Ðˆ<Ø�AŒ:ÐNÐFÀuÀgÐNÓNˆ:ä×)Ñ)€LÜ—;‘;€LØ�Y�€JØ€IØ�5•˜1•€IØ
‚{ØˆØ€Kà"¤o×&9Ñ&9Ô9‰¼u¿{¹{ð ð œO×1Ñ1Ô1¿-Ü;ØØØØØØØØ#Ø-ô

Ñˆˆzð 
œo×1Ñ1Ô	1¿-ÜEØØØØØØØØ#Ø-ô

Ñˆˆzô 2ØØØØØØØØ#Ø-ô

Ñˆð �8‰8˜%ˆ8Ó ×(Ñ(¨¯©°­°RÓ8¸*¿-¹-Øð ;Hó ;ç�gˆa�g‰g�a�j˜"Óðð r(   c                 ó   € \        V R W!P                  4       R7       \        VRVR7       V P                  4       p\        P                  ! V P                  R4      VP                  R4      .V4      P                  RR4      P                  4       # )r¼   )rt   rv   ÚzerosrÀ   r‚   éýÿÿÿrA   )ry   rv   r®   r   ÚcatÚ	unsqueezeÚ	transposeÚ
contiguous)r¼   rÌ   rt   r®   s   &&& r&   Úpack_tinygemm_scales_and_zerosrÒ   •  su   € Ü�f˜h¨e¿*¹*»,ÕGÜ�e˜W¨EÕ2Ø
�*‰*‹,€Cä�	Š	à× Ñ  Ó$Ø—‘ Ó#ðð ó	
÷ 
‰�2�rÓ	ß	‰‹ð
r(   c                 ó†   € V P                   R,          ^8X  g   Q h\        P                  ! V P                  RR4      ^R4      # )r�   r‚   rÍ   rA   )rH   r   ÚsplitrÐ   )Úscales_and_zeross   &r&   Ú unpack_tinygemm_scales_and_zerosrÖ   ¦  s<   € Ø×!Ñ! "Õ%¨Ô*Ð*Ð*Ü�;Š;Ð'×1Ñ1°"°bÓ9¸1¸bÓAÐAr(   c           	      ó  € V^8”  g   Q hW@P                   R,          8”  d,   VP                   R,          ^8X  d   V P                   R,          pV P                   R,          V,          ^ 8X  g   Q hV P                  4       ^8X  g   Q h^V3p\        P                  p^ p^V,          ^,
          p	V\        P
                  8X  d   \        p
MJV\        P                  8X  d   \        p
M.\        \        P                  8X  d   \        p
M\        RV 24      hV
! V VVVVVV	4      pV P                   R,          ^8”  dË   \        RVP                  4      '       gX   \        RVP                  4      '       g<   VR,          ^,          VR,          ,          P                  \        P                  4      p\        RVP                  4      '       d<   VR,          ^,          VR,          ,          P                  \        P                  4      pV# )r�   z Unrecognized zero point domain: Úcpurq   r‚   ©ºNNN:NNr{   ©rÚ   :r�   Nr{   )rH   r®   r   rÂ   r
   rÃ   r   rÄ   r   ÚNONEr   ru   r   Údevicer¦   Úuint8)rÅ   r¼   rÌ   rÆ   rÇ   rÈ   r…   r§   r’   r“   Ú_quantize_affineÚint_datas   &&&&&&      r&   Ú-groupwise_affine_quantize_tensor_from_qparamsrá   «  s•  € ð �qŒ=Ðˆ=à—7‘7˜2•;Ô 6§<¡<°Õ#3°qÔ#8Ø—G‘G˜B•Kˆ	à�7‰7�2�;˜Õ" aÔ'Ð'Ð'Ø�5‰5‹7�aŒ<Ðˆ<à�Y�€JÜ—;‘;€LØ€IØ�5•˜1•€IàœO×/Ñ/Ô/Ü*ÑØ	œo×3Ñ3Ô	3Ü4ÑÜ	œO×0Ñ0Ô	0Ü9ÑäÐ;Ð<MÐ;NÐOÓPÐPáØ	ØØØØØØó€Hð 	‡w�wˆr…{�Q„Ü˜E 8§?¡?×3Ò3Ü˜E 8§?¡?×3Ò3à  Õ)¨QÕ.°¸(Õ1CÕC×GÑGÌÏÉÓTˆHÜ�e˜XŸ_™_×-Ò-Ø  Õ*¨aÕ/°(¸7Õ2CÕC×GÑGÌÏÉÓTˆHØ€Or(   c                 ó$  € V^8”  g   Q hV P                  4       ^8X  g   Q hV P                  \        P                  8X  g   V P                  R,          ^8”  dØ   \        RV P                  4      '       g¼   V P                  \        P                  4      pV^,	          pV^,          p\        P                  ! V P                  ^ ,          V P                  ^,          ^,          3\        P                  V P                  R7      p	\        RV P                  4      '       g
   WyR&   W‰R&   MW‰R&   WyR&   MT p	WIP                  R,          8”  d,   VP                  R,          ^8X  d   V	P                  R,          pV	P                  R,          V,          ^ 8X  g   Q h^V3p
\        P                  p^ p^V,          ^,
          pV\        P                  8X  d   \        pM"V\        P                  8X  d   \        pM\        pV! V	V
VVVVVVP                  R7      # )r�   rØ   )rt   rÝ   rq   rµ   r‚   rÙ   rÛ   )r®   rt   r   rÞ   rH   r   rÝ   r¦   rÂ   rÌ   r
   rÃ   r   rÄ   r   r   )Úw_int4x8r¼   rÌ   rÆ   rÇ   rÈ   ÚdataÚ	high_bitsÚlow_bitsÚw_int32r…   r¸   r’   r“   Ú_dequantize_affines   &&&&&&         r&   Ú/groupwise_affine_dequantize_tensor_from_qparamsré   ×  s²  € ð �qŒ=Ðˆ=Ø�<‰<‹>˜QÔÐÐà�‰œ%Ÿ+™+Ô%¨¯©¸Õ);¸aÔ)?Ü�5˜(Ÿ/™/×*Ò*à�{‰{œ5Ÿ;™;Ó'ˆØ˜A•Iˆ	Ø˜$•;ˆÜ—+’+Ø�^‰^˜AÕ §¡¨qÕ 1°AÕ 5Ð6Ü—+‘+Ø—?‘?ô
ˆô
 ˜5 (§/¡/×2Ò2Ø(�GÑØ (�HÒà'�GÑØ )�HÒàˆð —=‘= Õ$Ô$¨¯©°bÕ)9¸QÔ)>Ø—M‘M "Õ%ˆ	Ø�=‰=˜Õ˜yÕ(¨AÔ-Ð-Ð-Ø�Y�€JÜ—+‘+€KØ€IØ�5•˜1•€IØœO×/Ñ/Ô/Ü.ÑØ	œo×3Ñ3Ô	3Ü8Ñä=ÐÙØØØØØØØØ—\‘\ô	ð 	r(   c           	      ób   € \        V VVVVVR 7      w  rg\        WWqW$R7      p\        WgV4      p	W‰3# ))rÈ   rÉ   )rÈ   )rÊ   rá   rÒ   )
rÅ   rÆ   rÇ   rt   rÈ   rÉ   r¼   rÌ   rã   rÕ   s
   &&&&&&    r&   Ú groupwise_affine_quantize_tensorrë     sM   € ô 1Ø	ØØØØ+Ø#ô�M€Fô =Ø	�5 ô€Hô 6°fÀUÓKÐØÐ%Ð%r(   c                 ó6   € \        V4      w  rE\        WWRV4      # r+   )rÖ   ré   )rã   rÕ   rÆ   rÇ   r¼   rÌ   s   &&&&  r&   Ú"groupwise_affine_dequantize_tensorrí   '  s%   € ô 5Ð5EÓF�M€FÜ:Ø˜%¨	óð r(   c                 óÎ  € W P                   R,          8”  d   V P                   R,          pV^8”  g   Q hV P                   R,          V,          ^ 8X  g   Q hV P                  4       ^8X  g   Q hV^8:  g   Q RV 24       h^V3pVf+   \        P                  ! V P                  4      P
                  p/ pRV^&   \        ^^	4       F-  p^V^,
          ,          ) ^V^,
          ,          ^,
          3Wx&   K/  	  Wq,          w  rš\        V VV\        P                  V	V
VVVR7	      w  r¼VP                  V P                   ^ ,          R4      VP                  V P                   ^ ,          R4      3# )r�   zunsupported n_bit: )r¬   r’   r“   r‘   r‰   r­   r‚   )r‚   r   )
rH   r®   r   r¯   rt   r°   rƒ   r   r‹   r¥   )rÅ   rÆ   rÇ   Ú	precisionr�   r‘   r…   Úrangesr�   r’   r“   r”   r•   s   &&&&&&       r&   Úget_group_qparams_symmetricrñ   4  sC  € ð —7‘7˜2•;ÔØ—G‘G˜B•Kˆ	Ø�qŒ=Ðˆ=Ø�7‰7�2�;˜Õ" aÔ'Ð'Ð'Ø�5‰5‹7�aŒ<Ðˆ<Ø�AŒ:Ð4Ð,¨U¨GÐ4Ó4ˆ:à�Y�€JØ
‚{Ü�kŠk˜!Ÿ'™'Ó"×2Ñ2ˆØ€FØ€Fˆ1�Iä�1�aŽ[ˆØ˜Q �U•|�_ a¨A°­E¥l°QÕ&6Ð7ˆ‹	ñ à!�=Ñ€IÜ-Ø	ØØÜ—Z‘ZØØØØØ"ô
Ñ€Eð �=‰=˜Ÿ™ � RÓ(¨*×*<Ñ*<¸Q¿W¹WÀQ½ZÈÓ*LÐLÐLr(   c           	      ó¼   € \        WW#V4      w  rV^p^V^,
          ,          ^,
          p^V^,
          ,          ) p^ RIHp	 V	! WWhV\        P                  V4      p
W¥V3# )é   )Ú8_quantized_decomposed_quantize_per_channel_group_wrapper)rñ   Útorchao._executorch_opsrô   r   r‹   )rÅ   rÆ   Ú
group_sizerï   r�   r¼   rÌ   Úmax_intÚmin_intrô   Úw_int8s   &&&&&      r&   Úgroup_quantize_tensor_symmetricrú   [  sp   € ô 0Ø	�*¨ó�M€Fð €EØ�E˜A•IÕ Õ"€GØ�e˜a•iÕ Ð!€Gõñ FØ	�5 7¬E¯J©J¸
ó€Fð ˜5Ð Ð r(   c          
      óº   € V ^8„  d   QhR\         P                  R\         P                  R\         P                  R\        \        ,          R\         P                  /# )r{   r.   r‰   r­   r‘   r|   )r   rE   rt   r   r£   )r~   s   "r&   r   r   u  sN   € ÷ +ñ +Ü�<‰<ð+ä—‘ð+ô —k‘kð+ô 
”%�ð	+ô
 ‡\�\ñ+r(   c                 óð   € \         P                  p\        V 4      pRp^p\        P                  pV P
                  p	\        V VVVVVVVVR7	      w  r«\        V VV
VVVV4      p\        VVV
VVVVV	R7      pV# )é€   )r‰   r­   r‘   rµ   i€ÿÿÿ)	r	   rÁ   r‡   r   r‹   rt   r   r   r   )r.   r‰   r­   r‘   r�   r…   r’   r“   Úquant_dtyper§   r¼   r½   ÚqÚdqs   &&&&          r&   Úper_token_dynamic_quantr  u  s©   € ô ×)Ñ)€LÜ*¨5Ó1€JØ€IØ€IÜ—*‘*€KØ—;‘;€Lä/ØØØØØØØØ)Øô
Ñ€Fô 	ØØØØØØØó	€Aô 
Ø	ØØØØØØØ!ô	
€Bð €Ir(   c                 óP  € R\         P                  P                  n        R\         P                  P                  n        R\         P                  P                  n        R\         P                  P                  n        R\         P                  P                  P                  n        R# )a+  
Set inductor config to use the following optimizations which have been showed to improve performance for quantized models:
    coordinate_descent_tuning = True
    coordinate_descent_check_all_directions = True
    force_fuse_int_mm_with_mul = True
    fx_graph_cache = True
    triton.unique_kernel_names = True

This used to also call `torch.set_float32_matmul_precision("high")`. That is not an
inductor config, it is process wide state that changes the numerics of every fp32
matmul in the process and is never restored, so it is left to the caller.
TN)	r   Ú	_inductorÚconfigÚcoordinate_descent_tuningÚ'coordinate_descent_check_all_directionsÚforce_fuse_int_mm_with_mulÚfx_graph_cacheÚtritonÚunique_kernel_namesr2   r(   r&   Ú"recommended_inductor_config_setterr  £  sd   € ð 8<„E‡O�O×ÑÔ4ØEI„E‡O�O×ÑÔBØ8<„E‡O�O×ÑÔ5Ø,0„E‡O�O×ÑÔ)Ø8<„E‡O�O×Ñ×!Ñ!Ö5r(   c                óp   € V ^8„  d   QhR\         \        R3,          R\        R\         \        R3,          /# )r{   Úinput_shape.Úgranularityr|   )r   r}   r   )r~   s   "r&   r   r   ·  s9   € ÷ ,@ñ ,@Ü”s˜C�x•ð,@Ü/:ð,@ä
Œ3�ˆ8…_ñ,@r(   c                ó®  € \        V\        4      '       d   V # \        V\        4      '       d%   \        V 4      p^W!P                  &   \        V4      # \        V\        4      '       dÓ   VP                  p\        V4      \        V 4      8  dD   \        V4      p\        V4      \        V 4      8  d   VP                  ^ ^4       K-  \        V4      p\        V4      \        V 4      8X  g   Q RV RV  24       h\        \        V4      4       F*  pW,          W$,          ,          ^ 8X  d   K  Q RV  RV 24       h	  V# \        V\        4      '       d)   R\        V 4      ^,
          ,          V R	,          3,           # \        V\        4      '       d=   ^.\        V 4      ,          pWP                  ,          W!P                  &   \        V4      # \        V\        4      '       di   V R	,          VP                  ,          ^ 8X  g   Q RV R	,           RVP                   24       hR\        V 4      ^,
          ,          VP                  3,           # \!        RV 24      h)
zÊGet the block size based on the input shape and granularity type.
Args:
    input_shape: The input tensor shape possibly more than 2 dimensions
    granularity: The granularity type of the quantization
zBlock size z8 must have the same number of dimensions as input shape zNot all shapes in input shape z are divisible by block size zLast dimension of input z  is not divisible by group size zUnsupported Granularity: )r�   r‚   )rD   r   r   rG   ÚaxisÚtupler   r…   r„   Úinsertrƒ   r   r   r®   r   rö   ru   )r  r  r…   Úblock_size_listr�   s   &&   r&   Úget_block_sizer  ·  s  € ô �+œy×)Ò)ØÐÜ	�K¤×	)Ò	)Ü˜+Ó&ˆ
Ø'(ˆ
×#Ñ#Ñ$Ü�ZÓ Ð Ü	�K¤×	*Ò	*Ø ×+Ñ+ˆ
ô ˆz‹?œS Ó-Ô-Ü" :Ó.ˆOÜ�oÓ&¬¨[Ó)9Ô9Ø×&Ñ& q¨!Ö,Ü˜Ó/ˆJä�:‹¤# kÓ"2Ô2ð 	
Ø˜*˜Ð%]Ð^iÐ]jÐkó	
Ð2ô ”s˜:“Ö'ˆAØ•> J¥MÕ1°QÖ6ð Ø0°°Ð=ZÐ[eÐZfÐgóÐ6ñ (ð ÐÜ	�K¤×	*Ò	*Ø”s˜;Ó'¨!Õ+Õ,°¸BµÐ/AÕAÐAÜ	�K¤×	(Ò	(Ø�Sœ3˜{Ó+Õ+ˆ
Ø&1·/±/Õ&Bˆ
—?‘?Ñ#Ü�ZÓ Ð Ü	�K¤×	*Ò	*Ø˜2� ×!7Ñ!7Õ7¸1Ô<ð 	
Ø& {°2¥Ð&7Ð7WÐXc×XnÑXnÐWoÐpó	
Ð<ð ”s˜;Ó'¨!Õ+Õ,°×0FÑ0FÐ/HÕHÐHÜ
Ð0°°Ð>Ó
?Ð?r(   c                ó8   € V ^8„  d   QhR\         P                  /# )r{   Úweight)r   rE   )r~   s   "r&   r   r   æ  s   € ÷ -ñ -œuŸ|™|ñ -r(   c                 ó@  € \        V R 4      '       d+   V P                  P                   RV P                  4        R2# \	        V 4      \
        P                  J g+   \        V \
        P                  P                  4      '       d   R\	        V 4       2# R\	        V 4       2# )Ú_quantization_typeÚ(Ú)zTensor: znot recognized: )
ÚhasattrÚ	__class__rC   r  Útyper   rE   rD   ÚnnÚ	Parameter)r  s   &r&   r  r  æ  s‚   € ÜˆvÐ+×,Ò,Ø×"Ñ"×+Ñ+Ð,¨A¨f×.GÑ.GÓ.IÐ-JÈ!ÐLÐLäˆFƒ|”u—|‘|Ó#¤z°&¼%¿(¹(×:LÑ:L×'MÒ'MØœ$˜v›,˜Ð(Ð(àœd 6›l˜^Ð,Ð,r(   c                 óª   € R V P                   P                  ^,           RV P                   P                  ^ ,           R\        V P                   4       2# )zin_features=z, out_features=z	, weight=)r  rH   r  )rJ   s   &r&   Ú_linear_extra_reprr!  ð  sK   € Ø˜$Ÿ+™+×+Ñ+¨AÕ.Ð/¨¸t¿{¹{×?PÑ?PÐQRÕ?SÐ>TÐT]Ô^pÐqu×q|Ñq|Ó^}Ð]~ÐÐr(   c           
      óÈ   € . pV! 4       p\        V4      ^ 8”  d   VP                  V4       VP                  V R\        \        W4      4       24       RP	                  V4      # )r   Ú=r@   )r„   rc   r  ÚgetattrÚjoin)rJ   Úoriginal_extra_reprÚparameter_nameÚmodule_torchao_extra_reprÚoriginal_extra_repr_strs   &&&  r&   Ú_module_extra_reprr*  ô  si   € Ø "Ðá1Ó3ÐÜ
Ð"Ó# aÔ'Ø!×(Ñ(Ð)@ÔAà×$Ñ$ØÐ
˜!Ô.¬w°tÓ/LÓMÐNÐOôð �9‰9Ð.Ó/Ð/r(   c                óD   € V ^8„  d   QhR\         P                  R\        /# )r{   r  r|   )r   rE   Úbool)r~   s   "r&   r   r     s   € ÷ ñ œ5Ÿ<™<ð ¬Dñ r(   c           	     ó&  € V P                  4       R9   g   Q RV P                  4        R24       hV P                  R	R w  rV^,          ^ 8H  ;'       d    V^,          ^ 8H  pV'       g*   \        P                  RV P                   RV RV R24       V# )
zÒ
Check if a weight tensor meets float8 quantization requirements.

Args:
    weight (torch.Tensor): The weight tensor to check

Returns:
    bool: True if the tensor can be quantized to float8, False otherwise
z6float8 quantization only works for 2/3-D tensors, got zD tensorNz+Skipping float8 quantization: weight shape z: is not compatible with _scaled_mm. Both input dimension (z) and output dimension (z) must be multiples of 16. )r{   é   rA   )r®   rH   ÚloggerÚinfo)r  Úout_dimÚin_dimÚis_compatibles   &   r&   Ú_fp8_mm_compatr4    s­   € ð �:‰:‹<ð ô ð Wð 
@ÀÇ
Á
Ã¸~ÈXÐVóWð ð
 —l‘l 2 3Ð'�O€GØ˜b•[ AÑ%×>Ð>¨G°b­L¸AÑ,=€MçÜ�‰Ø9¸&¿,¹,¸ð H%Ø%+ HÐ,DÀWÀIÐMhðjô	
ð
 Ðr(   c                ó&  € V ^8„  d   Qh/ ^ \         9   d   \        \        ,          ;R&   ^\         9   d^   \        \        \        ,          \        \        \        ,          \        \        \        ,          \        3,          3,          3,          ;R&   # )r{   r,   rI   )Ú__conditional_annotations__r   rF   r   r}   )r~   s   "r&   r   r      sc   € ‡�÷B Ò Œ(”3�-Ñ ñC ÷dò œdÜŒS…M”4œ¤�¤t¬H´S­M¼3Ð,>Õ'?Ð?Õ@Ð@õñ òe r(   )r'   r—   r¡   r³   rº   r¾   rÊ   rÒ   rÖ   rá   ré   rë   rí   r  rñ   r  )NN)ró   rý   )Jr6  ÚloggingÚtypingr   r   r   r   r   Útorch.utils._python_dispatchr   Útorchao.kernelr   Ú%torchao.quantization.quant_primitivesr	   r
   r   r   r   r   r   r   r   r   r   Útorchao.utilsr   r  r   r   r   r   r   r   r   Ú__all__Ú	getLoggerrC   r/  r'   r,   r3   r:   rI   r<   r\   ry   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*  r4  r   )r6  s   @r&   Ú<module>r?     së  øð÷ €ß .Ó .ã Ý :õ÷÷ ÷ ñ õ %÷÷ ñ ò€ð& 
×	Ò	˜8Ó	$€ò%ð €Ó òò?ð ð ó ô
Ð)ô ÷2
ñ 
ô,
õòòBð2 —‘ô9òx$ð@ BGÇÁô ð EJÇMÁMô ð& ØØ
�.‰.Ø%×+Ñ+ØØôCðL 9>¿¹ô ò"Bð ¨À×@UÑ@Uô)ð` ØØ%×+Ñ+ô6ðv ØØ
�.‰.Ø%×+Ñ+Øô&ô.	ð ØØ�m‰mØ×&Ñ&Øô$MðR ØØ�m‰mØ×&Ñ&ô!ð8  %Ÿ}™}Ø$)§M¡MØ÷	+ò\=õ(,@õ^-ò@ò
0÷r(   