+
    "Ý³jk4  ã                   ó|  a € R t'0 t ^ RIt^ RIt^ RIHtHt ^ RIHt ^ RIH	t	H
t
Ht ^ RIt^ RIHt ^RIHtHtHt ^RIHtHtHtHt ^RIHt ]P4                  ! ]4      t ! R	 R
4      tR t]! R]3/ 4      t ] ^ k  ! R R] ]PB                  PD                  4      t# ! R R]#4      t$ ! R R]#4      t% ! R R]#4      t&R# )é    N)ÚABCMetaÚabstractmethod)Úpartial)ÚAnyÚOptionalÚTuple)Ú_fake_quantize_affine)ÚGranularityÚPerRowÚ	PerTensor)ÚMappingTypeÚZeroPointDomainÚ_get_reduction_paramsÚ"choose_qparams_affine_with_min_max)Úget_block_sizec                   ó8   a € ] tR t^t o R tR tR tR tRtV t	R# )Ú_PartialWrapperc                ó   € Wn         R # ©N©Úp)Úselfr   s   &&Ú^/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torchao/quantization/observer.pyÚ__init__Ú_PartialWrapper.__init__   s   € ØŽó    c                ó&   € V P                   ! V/ VB # r   r   )r   ÚargsÚkeywordss   &*,r   Ú__call__Ú_PartialWrapper.__call__!   s   € Ø�vŠv�tÐ(˜xÑ(Ð(r   c                ó6   € V P                   P                  4       # r   )r   Ú__repr__©r   s   &r   r#   Ú_PartialWrapper.__repr__$   s   € Ø�v‰v�‰Ó Ð r   c                ó    € \        V .VO5/ VB # r   )Ú
_with_args)r   r   Úkwargss   &*,r   Ú	with_argsÚ_PartialWrapper.with_args'   s   € Ü˜$Ð0 Ò0¨Ñ0Ð0r   r   N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r    r#   r)   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r   r   r      s   ø‡ € òò)ò!÷1ð 1r   r   c                ó6   € \        \        V .VO5/ VB 4      pV# )aÚ  Wrapper that allows creation of class factories.

This can be useful when there is a need to create classes with the same
constructor arguments, but different instances.

Example::

    >>> # xdoctest: +SKIP("Undefined vars")
    >>> Foo.with_args = classmethod(_with_args)
    >>> foo_builder = Foo.with_args(a=3, b=4).with_args(answer=42)
    >>> foo_instance1 = foo_builder()
    >>> foo_instance2 = foo_builder()
    >>> id(foo_instance1) == id(foo_instance2)
    False
)r   r   )Úcls_or_selfr   r(   Úrs   &*, r   r'   r'   +   s"   € ô  	œ Ð=¨dÒ=°fÑ=Ó>€AØ€Hr   ÚABCc                   ó²   a a€ ] tR t^Bt oRt]! ]4      tRRRRRR]P                  R3V3R lV 3R lllt
]V3R lR l4       t]V3R	 lR
 l4       tRtVtV ;t# )ÚAffineQuantizedObserverBasea§  Observer module for affine quantization (https://github.com/pytorch/ao/tree/main/torchao/quantization#affine-quantization)

Args:
  `granularity` and `block_size`: The granularity of the quantization,
    must specify at least one, if both are specified `block_size` takes precedence
    Current supported granularity type are `PerTensor` and `PerAxis`
  other args: please see :mod:`torchao.quantization.quant_primitives`
NTFc                óè   <€ V ^8„  d   QhRS[ RS[P                  RS[RS[S[,          RS[S[,          RS[S[,          RS[S[P                  ,          RS[S[P                  ,          R	S[R
S[RS[/# )é   Úmapping_typeÚtarget_dtypeÚgranularityÚ	quant_minÚ	quant_maxÚepsÚscale_dtypeÚzero_point_dtypeÚpreserve_zeroÚzero_point_domainÚkeepdim©	r   ÚtorchÚdtyper
   r   ÚintÚfloatÚboolr   )Úformatr2   s   "€r   Ú__annotate__Ú(AffineQuantizedObserverBase.__annotate__N   s›   ø€ ÷ .ñ .á!ð.ñ —k‘kð.ñ !ð	.ñ
 ™C•=ð.ñ ™C•=ð.ñ ‘e�_ð.ñ ™eŸk™kÕ*ð.ñ #¡5§;¡;Õ/ð.ñ ð.ñ +ð.ñ ñ.r   c                ó’  <€ \         SV `  4        Vf   Q R4       hV
f   \        R4      hV	'       g   \        P                  ! R\
        ^R7       V
\        P                  8w  d"   \        P                  ! RV
 R2\
        ^R7       Wn        W n	        W0n
        W@n        WPn        W`n        Wpn        W€n        W�n        W n        W°n        R # )Núgranularity is Nonez/Please use ZeroPointDomain.NONE instead of Nonezppreserve_zero=False is deprecated and will be removed in a future release. Only preserve_zero=True is supported.)Ú
stacklevelzzero_point_domain=z^ is deprecated and will be removed in a future release. Only ZeroPointDomain.INT is supported.)Úsuperr   Ú
ValueErrorÚwarningsÚwarnÚDeprecationWarningr   ÚINTr;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   )r   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   Ú	__class__s   &&&&&&&&&&&&€r   r   Ú$AffineQuantizedObserverBase.__init__N   sÅ   ø€ ô 	‰ÑÔØÒ&Ð=Ð(=Ó=Ð&ØÒ$ÜÐNÓOÐO÷ Ü�MŠMð8ä"Øõ	ð ¤× 3Ñ 3Ô3Ü�MŠMØ$Ð%6Ð$7ð 89ð 9ä"Øõ	ð )ÔØ(ÔØ&ÔØ"ŒØ"ŒØŒØ&ÔØ 0ÔØ*ÔØ!2ÔØŽr   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# )r:   ÚinputÚreturn©rG   ÚTensor)rL   r2   s   "€r   rM   rN      s#   ø€ ÷ ñ ™UŸ\™\ð ©e¯l©lñ r   c                ó   € R# )znforward function should take the input tensor
and updates internal stats and return the original input Tensor
N© ©r   r[   s   &&r   ÚforwardÚ#AffineQuantizedObserverBase.forward~   ó   € ñ
 	r   c                ó^   <€ V ^8„  d   QhRS[ S[P                  S[P                  3,          /# ©r:   r\   ©r   rG   r^   )rL   r2   s   "€r   rM   rN   †   s&   ø€ ÷ ñ ¡5©¯©±u·|±|Ð)CÕ#Dñ r   c                ó   € R# )z‡Calculate quantization parameter based on the stats attached to the observer module
and returns a tuple of scale and zero_point Tensor
Nr`   r$   s   &r   Úcalculate_qparamsÚ-AffineQuantizedObserverBase.calculate_qparams…   rd   r   )r@   r=   rE   r;   rC   r?   r>   rA   r<   rD   rB   )r+   r,   r-   r.   Ú__doc__Úclassmethodr'   r)   r   rW   r   r   rb   ri   r/   r0   Ú__classcell__©rX   r2   s   @@r   r8   r8   B   sn   ù‡ € ññ ˜JÓ'€Ið $(Ø#'Ø#Ø-1Ø26Ø"Ø-<×-@Ñ-@Ø÷.õ .ð` ÷ó ðð ÷ó ÷ð r   r8   c                   óD   a € ] tR t^�t o V 3R lR ltV 3R lR ltRtV tR# )ÚAffineQuantizedMinMaxObserverc                ó4   <€ V ^8„  d   QhRS[ P                  /# )r:   r[   r]   )rL   r2   s   "€r   rM   Ú*AffineQuantizedMinMaxObserver.__annotate__Ž   s   ø€ ÷ ñ ™UŸ\™\ñ r   c                ó2  € VP                  4       ^ 8X  d   V# VP                  4       pV P                  f   Q R4       h\        VP                  V P                  4      p\        W2P                  4       4      w  rEVP                  V4      p\        P                  ! W%V P                  R7      p\        P                  ! W%V P                  R7      p\        V R4      '       d   \        V R4      '       g   W`n        Wpn        V# V P                  P                  VP                  8X  g,   Q RV P                  P                   RVP                   24       hV P                  P                  VP                  8X  g,   Q RV P                  P                   RVP                   24       h\        P                  ! V P                  V4      p\        P                   ! V P                  V4      pV P                  P#                  V4       V P                  P#                  V4       V# )	r   rP   ©ÚdimrE   Úmin_valÚmax_valz=Can't update existing min_val - shape mismatch, self.min_val:z != min_val:z=Can't update existing max_val - shape mismatch, self.max_val z != max_val:)ÚnumelÚdetachr=   r   Úshaper   ÚsizeÚviewrG   ÚaminrE   ÚamaxÚhasattrrv   rw   ÚminÚmaxÚcopy_)r   r[   Úinput_detachedÚ
block_sizeÚshape_for_reductionÚreduction_dimsrv   rw   s   &&      r   rb   Ú%AffineQuantizedMinMaxObserver.forwardŽ   sº  € Ø�;‰;‹=˜AÔØˆLàŸ™›ˆØ×ÑÒ+ÐBÐ-BÓBÐ+Ü# N×$8Ñ$8¸$×:JÑ:JÓKˆ
ä.CØ×+Ñ+Ó-ó/
Ñ+Ðð (×,Ñ,Ð-@ÓAˆÜ—*’*˜^ÈÏÉÔVˆÜ—*’*˜^ÈÏÉÔVˆÜ�t˜Y×'Ò'¬w°t¸Y×/GÒ/GØ"ŒLØ"ŒLð ˆð —<‘<×%Ñ%¨¯©Ô6ð ØOÐPT×P\ÑP\×PbÑPbÐOcÐcoÐpw×p}Ñp}Ðo~ÐóÐ6ð —<‘<×%Ñ%¨¯©Ô6ð ØOÐPT×P\ÑP\×PbÑPbÐOcÐcoÐpw×p}Ñp}Ðo~ÐóÐ6ô —i’i §¡¨gÓ6ˆGÜ—i’i §¡¨gÓ6ˆGØ�L‰L×Ñ˜wÔ'Ø�L‰L×Ñ˜wÔ'àˆr   c                ó^   <€ V ^8„  d   QhRS[ S[P                  S[P                  3,          /# rf   rg   )rL   r2   s   "€r   rM   rr   ­   s&   ø€ ÷ !ñ !¡5©¯©±u·|±|Ð)CÕ#Dñ !r   c                ó€  € \        V R 4      '       d   \        V R4      '       g   Q R4       h\        V P                  V P                  V P                  . V P
                  V P                  V P                  V P                  V P                  V P                  4
      w  rV P                  \        P                  8X  d   RpW3# ©rv   rw   zhExpecting the observer has min_val and max_val, please run the observer before calling calculate_qparamsN©r   r   rv   rw   r;   r<   r>   r?   r@   rA   rB   rD   r   ÚNONE©r   ÚscaleÚ
zero_points   &  r   ri   Ú/AffineQuantizedMinMaxObserver.calculate_qparams­   ó¨   € Ü�t˜Y×'Ò'¬G°D¸)×,DÒ,Dð 	
Øvó	
ÐDô ?Ø�L‰LØ�L‰LØ×ÑØØ×ÑØ�N‰NØ�N‰NØ�H‰HØ×ÑØ×!Ñ!ó
Ñˆð ×!Ñ!¤_×%9Ñ%9Ô9ØˆJØÐ Ð r   )rw   rv   N)r+   r,   r-   r.   rb   ri   r/   r0   r1   s   @r   rp   rp   �   s   ø‡ € ÷ð ÷>!ö !r   rp   c            	       ó‚   a a€ ] tR t^Ãt oRtRRRRRR]P                  RR3	V3R lV 3R llltR
R ltR t	R t
R	tVtV ;t# )Ú"AffineQuantizedFixedQParamObserverzG
Observer that allows manual setting of fixed quantization parameters.
NTc                ó6  <€ V ^8„  d   QhRS[ RS[P                  RS[RS[S[,          RS[S[,          RS[S[,          RS[S[P                  ,          RS[S[P                  ,          R	S[R
S[RS[S[P                  ,          RS[S[P                  ,          /# )r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rŽ   r�   )
r   rG   rH   r
   r   rI   rJ   rK   r   r^   )rL   r2   s   "€r   rM   Ú/AffineQuantizedFixedQParamObserver.__annotate__È   sÅ   ø€ ÷  Rñ  Rá!ð Rñ —k‘kð Rñ !ð	 Rñ
 ™C•=ð Rñ ™C•=ð Rñ ‘e�_ð Rñ ™eŸk™kÕ*ð Rñ #¡5§;¡;Õ/ð Rñ ð Rñ +ð Rñ ™Ÿ™Õ%ð Rñ ™UŸ\™\Õ*ñ Rr   c                ó:  <€ \         SV `  VVVVVVVVV	V
4
       V'       g   \        P                  ! ^.4      pV'       g   \        P                  ! V4      pV P                  RVP                  VR7      4       V P                  RVP                  VR7      4       R# )é   rŽ   ©rH   r�   N)rR   r   rG   r^   Ú
zeros_likeÚregister_bufferÚto)r   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rŽ   r�   rX   s   &&&&&&&&&&&&&€r   r   Ú+AffineQuantizedFixedQParamObserver.__init__È   s�   ø€ ô 	‰ÑØØØØØØØØØØô	
÷ Ü—L’L ! Ó%ˆEßÜ×)Ò)¨%Ó0ˆJØ×Ñ˜W e§h¡h°[ hÓ&AÔBØ×Ñ˜\¨:¯=©=Ð?O¨=Ó+PÖQr   c                óÆ   € V'       g   \         P                  ! V4      pVP                  V P                  R 7      V n        VP                  V P
                  R 7      V n        R# )r˜   N)rG   r™   r›   rA   rŽ   rB   r�   r�   s   &&&r   Úset_qparamsÚ.AffineQuantizedFixedQParamObserver.set_qparamsê   sE   € ßÜ×)Ò)¨%Ó0ˆJØ—X‘X D×$4Ñ$4�XÓ5ˆŒ
Ø$Ÿ-™-¨d×.CÑ.C˜-ÓDˆŽr   c                ó   € V# r   r`   ra   s   &&r   rb   Ú*AffineQuantizedFixedQParamObserver.forwardð   s   € Øˆr   c                ó2   € V P                   V P                  3# r   ©rŽ   r�   r$   s   &r   ri   Ú4AffineQuantizedFixedQParamObserver.calculate_qparamsó   s   € Ø�z‰z˜4Ÿ?™?Ð*Ð*r   r£   r   )r+   r,   r-   r.   rk   r   rW   r   rž   rb   ri   r/   r0   rm   rn   s   @@r   r“   r“   Ã   sO   ù‡ € ñð $(Ø#'Ø#Ø-1Ø26Ø"Ø-<×-@Ñ-@Ø(,Ø-1÷ Rõ  RôDEò÷+ò +r   r“   c            	       óŠ   a a€ ] tR t^÷t oRtRRRRRR]P                  ^dR3	V3R lV 3R llltR tR t	R	 t
R
 tR tRtVtV ;t# )ÚAffineQuantizedMSEObserverz
Minimize quantization loss caused by outlier via linear search. More details can be found at https://arxiv.org/pdf/2209.13325
NTFc                óî   <€ V ^8„  d   QhRS[ RS[P                  RS[RS[S[,          RS[S[,          RS[S[,          RS[S[P                  ,          RS[S[P                  ,          R	S[R
S[RS[RS[/# )r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   ÚstepsÚrun_oncerF   )rL   r2   s   "€r   rM   Ú'AffineQuantizedMSEObserver.__annotate__ü   s¥   ø€ ÷ !ñ !á!ð!ñ —k‘kð!ñ !ð	!ñ
 ™C•=ð!ñ ™C•=ð!ñ ‘e�_ð!ñ ™eŸk™kÕ*ð!ñ #¡5§;¡;Õ/ð!ñ ð!ñ +ð!ñ ð!ñ ñ!r   c                ó^   <€ \         SV `  VVVVVVVVV	V
4
       W°n        R V n        WÀn        R# )FN)rR   r   r¨   Ú
calibratedr©   )r   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   r¨   r©   rX   s   &&&&&&&&&&&&&€r   r   Ú#AffineQuantizedMSEObserver.__init__ü   sC   ø€ ô 	‰ÑØØØØØØØØØØô	
ð Œ
ØˆŒØ Žr   c                óÔ   € W,
          P                  4       P                  ^4      p\        W4P                  4       4      w  rVVP	                  V4      p\
        P                  ! WFRR7      # )r:   Frt   )ÚabsÚpowr   r{   r|   rG   Úmean)r   ÚpredÚexpectr„   Úlossr…   r†   s   &&&&   r   ÚmseÚAffineQuantizedMSEObserver.mse  sV   € Ø•×"Ñ"Ó$×(Ñ(¨Ó+ˆÜ.CØŸ	™	›ó/
Ñ+Ðð �y‰yÐ,Ó-ˆÜ�zŠz˜$¸EÔBÐBr   c                óÔ  € \        VP                  V P                  4      p\        VVV P                  . V P
                  V P                  V P                  V P                  V P                  V P                  4
      w  rVV P                  \        P                  8X  d   R p\        VVVVV P
                  V P                  V P                  V P                  4      pV P                  WqV4      # r   )r   rz   r=   r   r;   r<   r>   r?   r@   rA   rB   rD   r   rŒ   r	   rµ   )r   ÚxÚnew_minÚnew_maxr„   rŽ   r�   Úx_qs   &&&&    r   Úloss_fnÚ"AffineQuantizedMSEObserver.loss_fn#  sË   € Ü# A§G¡G¨T×-=Ñ-=Ó>ˆ
Ü>ØØØ×ÑØØ×ÑØ�N‰NØ�N‰NØ�H‰HØ×ÑØ×!Ñ!ó
Ñˆð ×!Ñ!¤_×%9Ñ%9Ô9ØˆJÜ#ØØØØØ×ÑØ�N‰NØ�N‰NØ×"Ñ"ó	
ˆð �x‰x˜ 
Ó+Ð+r   c                ó0  € VP                  4       ^ 8X  d   V# VP                  4       pV P                  f   Q R4       h\        VP                  V P                  4      p\        W2P                  4       4      w  rEVP                  V4      p\        P                  ! W%RR7      p\        P                  ! W%RR7      p\        P                  ! VP                  4       V4      p\        P                  ! V4      R,           p	\        ^V P                  ^,           4       Fy  p
W€P                  ,          V
,          pV P!                  W) V4      p\        P"                  ! WÉ8  V) V4      p\        P"                  ! WÉ8  W·4      p\        P$                  ! WÉ4      p	K{  	  Wg3# )r   rP   Frt   g    eÍÍA)rx   ry   r=   r   rz   r   r{   r|   rG   r}   r~   r�   r¯   r™   Úranger¨   r¼   Úwherer€   )r   r[   rƒ   r„   r…   r†   rv   rw   Ú	range_valÚoptimal_lossÚiÚthresÚcurrent_losss   &&           r   Úline_searchÚ&AffineQuantizedMSEObserver.line_search@  sI  € Ø�;‰;‹=˜AÔØˆLàŸ™›ˆØ×ÑÒ+ÐBÐ-BÓBÐ+Ü# N×$8Ñ$8¸$×:JÑ:JÓKˆ
ä.CØ×+Ñ+Ó-ó/
Ñ+Ðð (×,Ñ,Ð-@ÓAˆÜ—*’*˜^ÈÔOˆÜ—*’*˜^ÈÔOˆä—I’I˜gŸk™k›m¨WÓ5ˆ	Ü×'Ò'¨Ó0°3Õ6ˆô �q˜$Ÿ*™* q�.Ö)ˆAØ§
¡
Õ*¨QÕ.ˆEØŸ<™<¨¨v°uÓ=ˆLÜ—k’k ,Ñ"=À¸vÀwÓOˆGÜ—k’k ,Ñ"=¸uÓNˆGÜ Ÿ9š9 \Ó@ŠLñ *ð ÐÐr   c                ó˜   € V P                   '       d   V P                  '       g&   V P                  V4      w  V n        V n        R V n        V# )T)r©   r¬   rÆ   rv   rw   ra   s   &&r   rb   Ú"AffineQuantizedMSEObserver.forward\  s8   € Ø——� $§/§/ /Ø)-×)9Ñ)9¸%Ó)@Ñ&ˆDŒL˜$œ,Ø"ˆDŒOàˆr   c                ó€  € \        V R 4      '       d   \        V R4      '       g   Q R4       h\        V P                  V P                  V P                  . V P
                  V P                  V P                  V P                  V P                  V P                  4
      w  rV P                  \        P                  8X  d   RpW3# rŠ   r‹   r�   s   &  r   ri   Ú,AffineQuantizedMSEObserver.calculate_qparamsc  r‘   r   )r¬   rw   rv   r©   r¨   )r+   r,   r-   r.   rk   r   rW   r   rµ   r¼   rÆ   rb   ri   r/   r0   rm   rn   s   @@r   r¦   r¦   ÷   sV   ù‡ € ñð $(Ø#'Ø#Ø-1Ø26Ø"Ø-<×-@Ñ-@ØØ÷!õ !ò>Cò,ò: ò8÷!ò !r   r¦   c                ó@   € V ^8„  d   Qh/ ^ \         9   d
   \        ;R&   # )r:   r6   )Ú__conditional_annotations__r   )rL   s   "r   rM   rM      s   € ‡�÷r )Ò („SÑ (òs r   )(rÍ   ÚloggingrT   Úabcr   r   Ú	functoolsr   Útypingr   r   r   rG   Ú%torchao.quantization.quant_primitivesr	   r=   r
   r   r   Úquant_primitivesr   r   r   r   Úutilsr   Ú	getLoggerr+   Úloggerr   r'   Úobjectr6   ÚnnÚModuler8   rp   r“   r¦   rM   )rÍ   s   @r   Ú<module>rÚ      s¯   øð÷ €Û ß 'Ý ß 'Ñ 'ã å Gç 7Ñ 7÷ó õ "à	×	Ò	˜8Ó	$€÷1ñ 1òñ( �5˜6˜) RÓ(€Ó (ôH # u§x¡x§¡ô HôV3!Ð$?ô 3!ôl1+Ð)Dô 1+ôh!Ð!<ö !r   