+
    "Ý³j˜-  ã                   ó6  € ^ RI t ^ RIt^ RIHt ^ RIHt ^ RIHtHt ^ RI	t	^ RI
Ht ^ RIHt ^ RIHt ^ RIHt ^ RIHt ] P(                  ! ]4      t]P/                  ] P0                  4       ] P2                  ! ]P4                  4      t] P8                  ! R	4      t]P=                  ]4       ]P?                  ]4        ! R
 R] ]4      t!RR R llt" ! R R]PF                  4      t$/ 3R R llt% ! R R4      t&] ! R R]4      4       t']! ]'4      R R l4       t(R# )é    N)Ú	dataclass)ÚEnum)ÚOptionalÚUnion)Úquantize_per_channel_group)ÚAOBaseConfig)Ú'_choose_qparams_and_quantize_affine_hqq)Ú register_quantize_module_handlerz4%(asctime)s - %(name)s - %(levelname)s - %(message)sc                   ó&   € ] tR t^'tRt Rt RtRtR# )ÚUIntxChooseQParamsAlgorithmz[Variant of quantization algorithm to calculate scale and zero_point for UIntx quantization.Úmin_maxÚhqq© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚMIN_MAXÚHQQÚ__static_attributes__r   ó    Ú_/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torchao/experimental/quant_api.pyr   r   '   s   † Ùeðð €Gðð „Cr   r   c                ó\   € V ^8„  d   QhR\         P                  R\        R\        R\        /# )é   ÚvalsÚ
group_sizeÚnbitÚhas_weight_zeros)ÚtorchÚTensorÚintÚbool)Úformats   "r   Ú__annotate__r%   9   s0   € ÷ '2ñ '2Ü
�,‰,ð'2Ü$'ð'2Ü/2ð'2ÜFJñ'2r   c           
      óô  € V^8¼  d   V^8:  g   Q hV'       d*   ^V^,
          ,          ) p^V^,
          ,          ^,
          pM^ p^V,          ^,
          pV P                   w  rxV P                  RV4      p \        P                  ! V ^R7      w  rš\        P                  ! V ^R7      w  rºW¹,
          We,
          ,          pV'       g   \        P
                  ! V4      pM#V\        P                  ! Wœ,          4      ,
          pV P                  Wx4      p VP                  VR4      pVP                  VR4      p\        T TTTTV'       d   \        P                  M\        P                  VR7      pV'       g   RpWìV3# )é   )Úaxis)ÚinputÚscalesÚzero_pointsÚ	quant_minÚ	quant_maxÚdtyper   Néÿÿÿÿ)
ÚshapeÚreshaper    ÚminÚmaxÚ
zeros_likeÚroundr   Úint8Úuint8)r   r   r   r   ÚsignedÚqminÚqmaxÚnÚkÚvminsÚ_ÚvmaxsÚgroup_scalesÚgroup_zerosÚgroup_qvalss   &&&&&          r   Ú	_quantizerC   9   s6  € ð �1Œ9˜ œÐ"Ð"ßØ�t˜a•x•Ð!ˆØ�d˜Q•h• 1Õ$‰àˆØ�T•	˜Q�ˆà�:‰:�D€AØ�<‰<˜˜JÓ'€DÜ�yŠy˜ AÔ&�H€EÜ�yŠy˜ AÔ&�H€EØ•M d¥kÕ2€LçÜ×&Ò& |Ó4‰àœUŸ[š[¨Õ)=Ó>Õ>ˆà�<‰<˜Ó€DØ×'Ñ'¨¨2Ó.€LØ×%Ñ% a¨Ó,€Kä,ØØØØØß"Œe�jŠj¬¯©Øô€K÷ Øˆà kÐ1Ð1r   c                   ót   a a€ ] tR t^ct oRV3R lV 3R lllt]P                  3V3R lR lltR tRt	Vt
V ;t# )ÚUIntxWeightOnlyQuantizedLinearc                óD   <€ V ^8„  d   QhRS[ S[P                  ,          /# )r   Úbias)r   r    r!   )r$   Ú__classdict__s   "€r   r%   Ú+UIntxWeightOnlyQuantizedLinear.__annotate__d   s    ø€ ÷ 2ñ 2ñ ‘u—|‘|Õ$ñ	2r   c                ó¦   <€ \         SV `  4        Wn        W n        Ve    \        P
                  ! VRR7      V n        R # V P                  RR 4       R # )NF©Úrequires_gradrG   )ÚsuperÚ__init__Ú_pack_weights_opÚ
_linear_opÚnnÚ	ParameterrG   Úregister_parameter)ÚselfÚpack_weight_opÚ	linear_oprG   Ú	__class__s   &&&&€r   rN   Ú'UIntxWeightOnlyQuantizedLinear.__init__d   sC   ø€ ô 	‰ÑÔØ .ÔØ#ŒØÒÜŸš T¸Ô?ˆDŽIà×#Ñ# F¨DÖ1r   c                ó    <€ V ^8„  d   QhRS[ /# )r   Úuintx_choose_qparams_algorithm)r   )r$   rH   s   "€r   r%   rI   r   s   ø€ ÷ *Pñ *Pñ
 )Dñ*Pr   c                ó¸  € W n         W0n        V\        P                  8X  dU   \	        VVV^VP
                  VP                  RRR7      w  rVrxVP                  \        P                  4      pV) V,          pMTV\        P                  8X  d2   \        WP                  V P                   RRR7      w  rVpV) V,          pM\        RV 24      h\        P                  ! VRR7      V n        \        P                  ! VRR7      V n        V P#                  VP%                  4       4      P                  VP                  R7      p	\        P                  ! V	RR7      V n        R# )	r'   FT)Únbitsr   r(   Úcompute_dtypeÚdeviceÚverboseÚ
raw_output)r   r8   z,Unsupported uintx_choose_qparams_algorithm: rK   )r^   N)r   r   r   r   r	   r.   r^   Útor    r7   r   rC   Ú
ValueErrorrQ   rR   Úweight_scalesÚweight_zerosrO   ÚcpuÚpacked_weights)
rT   Úweightsr   r   rZ   Úweight_qvalsrc   rd   r>   rf   s
   &&&&&     r   Úquantize_and_pack_weightsÚ8UIntxWeightOnlyQuantizedLinear.quantize_and_pack_weightsr   s7  € ð Œ	Ø$Œà)Ô-H×-LÑ-LÔLä7ØØØ)ØØ")§-¡-Ø"Ÿ>™>Ø!Ø#ô	ñ 9ˆL¨ð (Ÿ?™?¬5¯;©;Ó7ˆLð )˜=¨=Õ8‰LØ+Ô/J×/RÑ/RÔRÜ8AØŸ™¨$¯)©)ÀdÐSXô9Ñ5ˆL¨ð )˜=¨=Õ8‰LäØ>Ð?]Ð>^Ð_óð ô  Ÿ\š\¨-ÀuÔMˆÔÜŸLšL¨ÀUÔKˆÔØ×.Ñ.¨|×/?Ñ/?Ó/AÓB×EÑEØ×&Ñ&ð Fó 
ˆô !Ÿlšl¨>ÈÔOˆÖr   c                óš  € VP                  4       ^8¼  g   Q hVP                  4       ^8X  d`   V P                  VV P                  V P                  V P                  V P
                  4      pV P                  e   W P                  ,           pV# VP                  ^ R pVP                  R,          pV P                  P                  ^ ,          pV P                  VP                  RV4      V P                  V P                  V P                  V P
                  4      P                  ! . VOVN5!  pV P                  e   W P                  ,           pV# )r   r/   )	ÚdimrP   rf   r   rc   rd   rG   r0   r1   )rT   ÚxÚoutputÚ
lead_shaper<   r;   s   &&    r   ÚforwardÚ&UIntxWeightOnlyQuantizedLinear.forwardž   s#  € Ø�u‰u‹w˜!Œ|Ðˆ|Ø�5‰5‹7�aŒ<Ø—_‘_ØØ×#Ñ#Ø—‘Ø×"Ñ"Ø×!Ñ!óˆFð �y‰yÒ$Ø§)¡)Õ+�ØˆMà—W‘W˜Q˜r�]ˆ
Ø�G‰G�B�KˆØ×Ñ×$Ñ$ QÕ'ˆØ—‘Ø�I‰I�b˜!ÓØ×ÑØ�O‰OØ×ÑØ×Ñó
÷ ‰'ðð "ð ð"ð  !ó"ˆð �9‰9Ò ØŸi™iÕ'ˆFØˆr   )rP   rO   rG   r   r   rf   rc   rd   )N)r   r   r   r   rN   r   r   ri   rp   r   Ú__classdictcell__Ú__classcell__)rW   rH   s   @@r   rE   rE   c   s3   ù‡ € ÷2õ 2ð& Gb×FiÑFi÷*Pò *P÷Xò r   rE   c                ó8   € V ^8„  d   QhR\         P                  /# )r   Úmodule©rQ   ÚModule)r$   s   "r   r%   r%   ¼   s   € ÷ Nñ N´b·i±iñ Nr   c           
      ó�  € VR ,          pVR,          p\        V \        P                  4      '       d   Q hV^8¼  d   V^8:  g   Q hV P                  4        Fí  w  rE\        V\        P                  4      '       g   \	        WQ4       K2  VP
                  P                  4       '       g   \        RV R24      h\        \        \        P                  P                  RV R24      \        \        P                  P                  RV R24      VP                  R7      p\        WV4       VP                  VP
                  W24       Kï  	  R	# )
r   r   zFUIntxWeightOnlyQuantizedLinear requires contiguous weights for layer 'zF'. Please call .contiguous() on the weight tensor before quantization.Ú_pack_weight_ÚbitÚ_linear_fp_act_Ú
bit_weight©rU   rV   rG   N)Ú
isinstancerQ   ÚLinearÚnamed_childrenÚ)_replace_linear_with_quantized_linear_mpsÚweightÚis_contiguousrb   rE   Úgetattrr    ÚopsÚtorchaorG   Úsetattrri   )ru   Úkwargsr   r   ÚnameÚchildÚqlinears   &&     r   r�   r�   ¼   s  € Ø˜Õ%€JØ�&�>€Dä˜&¤"§)¡)×,Ò,Ð,Ð,Ø�1Œ9˜ œÐ"Ð"à×,Ñ,Ö.‰ˆÜ˜%¤§¡×+Ò+Ü5°eÖDà—<‘<×-Ñ-×/Ò/Ü Ø\Ð]aÐ\bð cZð Zóð ô 5Ü&¤u§y¡y×'8Ñ'8¸MÈ$ÈÈsÐ:SÓTÜ!Ü—I‘I×%Ñ%¨¸¸¸jÐ'Ióð —Z‘ZôˆGô �F 'Ô*Ø×-Ñ-¨e¯l©l¸DÖMó# /r   c                   óX   a € ] tR t^×t o RRRRRRRR/V 3R lR lltV 3R lR	 ltR
tV tR# )ÚUIntxWeightOnlyLinearQuantizerr^   NÚ	precisionÚbitwidthÚ	groupsizec          	      ó†   <€ V ^8„  d   QhRS[ S[,          RS[ S[P                  ,          RS[ S[,          RS[ S[,          /# )r   r^   rŽ   r�   r�   )r   Ústrr    r.   r"   )r$   rH   s   "€r   r%   Ú+UIntxWeightOnlyLinearQuantizer.__annotate__Ø   sJ   ø€ ÷ ,'ñ ,'ñ ™•ð,'ñ ™EŸK™KÕ(ð	,'ñ
 ™3•-ð,'ñ ™C•=ñ,'r   c               óÐ  € V'       d   VR 8w  d   \        R4      hWn        V'       d@   V\        P                  \        P                  \        P
                  39  d   \        R4      hW n        Vf   ^p\        P                  RV R24       V\        ^^4      9  d   \        R4      hW0n        Vf   ^€p\        P                  RV R24       VR	9  d   \        R4      hW@n        R# )
ÚmpszHOnly device=mps is currently supported in UIntxWeightOnlyLinearQuantizerz[Only precisions float32, float16 & bfloat16 are supported in UIntxWeightOnlyLinearQuantizerNz&bitwidth not specified, defaulting to Ú.zDOnly bitwidts 1 to 7 are supported in UIntxWeightOnlyLinearQuantizerz'groupsize not specified, defaulting to zQOnly groupsizes 32, 64, 128 & 256 are supported in UIntxWeightOnlyLinearQuantizer©é    é@   é€   é   )ÚNotImplementedErrorr^   r    Úfloat32Úfloat16Úbfloat16rb   rŽ   ÚloggerÚwarningÚranger�   r�   )rT   r^   rŽ   r�   r�   s   &$$$$r   rN   Ú'UIntxWeightOnlyLinearQuantizer.__init__Ø   sè   € ÷ �f ”oÜ%ØZóð ð !ŒKç˜Ü�M‰MÜ�M‰MÜ�N‰Nð+
ô 
ô
 Ømóð ð 'ŒNàÒØˆHÜ�N‰NÐCÀHÀ:ÈQÐOÔPØœ5  A›;Ô&ÜØVóð ð %ŒMàÒØˆIÜ�N‰NÐDÀYÀKÈqÐQÔRØÐ.Ô.ÜØcóð ð 'ŽNr   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# )r   ÚmodelÚreturnrv   )r$   rH   s   "€r   r%   r“     s#   ø€ ÷ ñ ™bŸi™ið ©B¯I©Iñ r   c                ó  € V P                   '       d   VP                  V P                   4      pV P                  '       d   VP                  V P                  4      p\        VR V P                  RV P
                  /R7       V# )r   r   )rˆ   )r^   ra   rŽ   r�   r�   r�   )rT   r¥   s   &&r   ÚquantizeÚ'UIntxWeightOnlyLinearQuantizer.quantize  sa   € Ø�;�;ˆ;Ø—H‘H˜TŸ[™[Ó)ˆEØ�>�>ˆ>Ø—H‘H˜TŸ^™^Ó,ˆEÜ1Øà˜dŸn™nØ˜Ÿ™ðõ	
ð ˆr   )r�   r^   r�   rŽ   )r   r   r   r   rN   r¨   r   rr   ©rH   s   @r   r�   r�   ×   sB   ø‡ € ð,'ð !%ð,'ð ,0ð	,'ð
 #'ð,'ð $(÷,'ò ,'÷\ö r   r�   c                   óV   a € ] tR tRt o Rt^t^€t]P                  t	R t
V 3R ltRtV tR# )ÚUIntxWeightOnlyConfigi  a[  
Configuration for applying uintx weight-only asymmetric per-group quantization
to linear layers for MPS devices.

Args:
    bitwidth (int): Number of bits for quantization, must be between 1 and 7 inclusive.
        Default is 4.
    group_size (int): Group size for quantization. Must be one of [32, 64, 128, 256].
        Default is 128.
    uintx_choose_qparams_algorithm (Union[UIntxChooseQParamsAlgorithm, str]): Algorithm for
        choosing quantization parameters. Options:
        - "min_max" (default): Simple min-max scaling
        - "hqq": Half-Quadratic Quantization for better accuracy
c                ó6  € V P                   \        ^^4      9  d   \        RV P                    24      hV P                  R9  d   \        RV P                   24      h\	        V P
                  \        4      '       d   \        V P
                  4      V n        R# R# )r'   z0bitwidth must be between 1 and 7 inclusive, got z2group_size must be one of [32, 64, 128, 256], got Nr—   )r�   r¢   rb   r   r~   rZ   r’   r   )rT   s   &r   Ú__post_init__Ú#UIntxWeightOnlyConfig.__post_init__,  s‹   € Ø�=‰=¤ a¨£Ô+ÜØBÀ4Ç=Á=À/ÐRóð ð �?‰?Ð"4Ô4ÜØDÀTÇ_Á_ÐDUÐVóð ô �d×9Ñ9¼3×?Ò?Ü2MØ×3Ñ3ó3ˆDÖ/ñ @r   c                óT   <€ V ^8„  d   Qh/ S[ ;R&   S[ ;R&   S[S[S[3,          ;R&   # )r   r�   r   rZ   )r"   r   r   r’   )r$   rH   s   "€r   r%   Ú"UIntxWeightOnlyConfig.__annotate__  s9   ø‡ ‚ ñ" Ññ# ñ$ Ññ% ñ& %*Ñ*EÁsÐ*JÕ$Kñ ò' r   )rZ   N)r   r   r   r   r   r�   r   r   r   rZ   r®   Ú__annotate_func__r   rr   rª   s   @r   r¬   r¬     s0   ø‡ € ñð €HØ€Jà#×+Ñ+ð #ò÷/ ƒ r   r¬   c                óŒ   € V ^8„  d   QhR\         P                  P                  R\        R\         P                  P                  /# )r   ru   Úconfigr¦   )r    rQ   rw   r¬   )r$   s   "r   r%   r%   =  s4   € ÷ ñ Ü�H‰H�O‰OðÜ%:ðä
‡X�X‡_�_ñr   c           	      ó¦  € VP                   pVP                  pVP                  pV P                  P	                  4       '       g   \        R 4      h\        \        \        P                  P                  RV R24      \        \        P                  P                  RV R24      V P                  R7      pVP                  V P                  W#V4       V# )zUIntxWeightOnlyQuantizedLinear requires contiguous weights. Please call .contiguous() on the weight tensor before quantization.ry   rz   r{   r|   r}   )r�   r   rZ   r‚   rƒ   rb   rE   r„   r    r…   r†   rG   ri   )ru   r´   r   r   rZ   r‹   s   &&    r   Ú _uintx_weight_only_mps_transformr¶   <  sº   € ð �?‰?€DØ×"Ñ"€JØ%+×%JÑ%JÐ"à�=‰=×&Ñ&×(Ò(ÜðRó
ð 	
ô
 -ÜœuŸy™y×0Ñ0°MÀ$ÀÀsÐ2KÓLÜœ%Ÿ)™)×+Ñ+¨¸t¸fÀJÐ-OÓPØ�[‰[ô€Gð
 ×%Ñ%Ø�‰�tÐ)Gôð €Nr   )T))ÚloggingÚsysÚdataclassesr   Úenumr   Útypingr   r   r    Útorch.nnrQ   Ú$torch.ao.quantization.fx._decomposedr   Útorchao.core.configr   Ú%torchao.quantization.quant_primitivesr	   Ú%torchao.quantization.transform_moduler
   Ú	getLoggerr   r    ÚsetLevelÚWARNINGÚStreamHandlerÚstdoutÚhandlerÚ	FormatterÚ	formatterÚsetFormatterÚ
addHandlerr’   r   rC   rw   rE   r�   r�   r¬   r¶   r   r   r   Ú<module>rË      s
  ðó Û 
Ý !Ý ß "ã Ý õõ -õõð 
×	Ò	˜8Ó	$€Ø ‡��—‘Ô  ð ×
Ò
 §
¡
Ó
+€Ø×ÒÐTÓU€	Ø × Ñ �YÔ Ø × Ñ �'Ô ô
 # tô ÷$'2ôTU R§Y¡Yô Uðr IK÷ N÷6;ñ ;ð| ô#˜Ló #ó ð#ñL "Ð"7Ó8ôó 9òr   