+
    "Ý³j·  ã                   ór  € ^ RI t ^ RIt^ RIHt ^ RIHtHtHt ^ RIt^ RIH	t	 ^ RI
Ht ^RIHtHt ]! RRR7       ! R	 R
4      4       t]P                   ]],          R3,          t] P&                  R8  d   R]n         ! R R]4      tR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR# )é    N)Ú	dataclass)ÚCallableÚ
NamedTupleÚOptional©ÚNode)ÚQ_ANNOTATION_KEY)ÚQuantizationAnnotationÚQuantizationSpecT)ÚeqÚfrozenc                   ó0   a € ] tR t^t o RtV 3R ltRtV tR# )ÚQuantizationConfigFc                ó–   <€ V ^8„  d   Qh/ S[ S[,          ;R&   S[ S[,          ;R&   S[ S[,          ;R&   S[ S[,          ;R&   S[;R&   # )é   Úinput_activationÚoutput_activationÚweightÚbiasÚis_qat)r   r   Úbool)ÚformatÚ__classdict__s   "€Új/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torchao/quantization/pt2e/quantizer/utils.pyÚ__annotate__ÚQuantizationConfig.__annotate__   s\   ø‡ ‚ áÑ/Õ0Ñ0ñ ñ  Ñ 0Õ1Ñ1ñ ñ Ñ%Õ&Ñ&ñ	 ñ
 Ñ#Õ
$Ñ$ñ ñ Ñò ó    © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__©r   s   @r   r   r      s   ø‡ € ð €F÷ ƒ r   r   z)torchao.quantization.pt2e.quantizer.utilsc                   ó,   a € ] tR t^'t o V 3R ltRtV tR# )ÚOperatorConfigc                óB   <€ V ^8„  d   Qh/ S[ ;R&   S[S[,          ;R&   # )r   ÚconfigÚ	operators)r   ÚlistÚOperatorPatternType)r   r   s   "€r   r   ÚOperatorConfig.__annotate__'   s%   ø‡ ‚ ñ Ññ ñ Ñ'Õ(Ñ(ò r   r   N)r   r    r!   r"   r#   r$   r%   r&   s   @r   r(   r(   '   s   ø‡ ‡ „ r   r(   c                ó:   € V ^8„  d   QhR\         \        ,          /# ©r   Úquantization_config©r   r   )r   s   "r   r   r   4   s   € ÷ 
ñ 
¬XÔ6HÕ-Iñ 
r   c                 ó¬   € V f   R # V P                   f   R # V P                   pVP                  \        P                  \        P                  39   g   Q hV# ©N)r   ÚqschemeÚtorchÚper_tensor_affineÚper_tensor_symmetric©r1   Úquantization_specs   & r   Úget_input_act_qspecr;   4   s]   € ØÒ"ÙØ×+Ñ+Ò3ÙØ*=×*NÑ*NÐØ×$Ñ$Ü×ÑÜ×"Ñ"ð)ô ð ð ð Ðr   c                ó:   € V ^8„  d   QhR\         \        ,          /# r0   r2   )r   s   "r   r   r   A   s   € ÷ 
ñ 
¬hÔ7IÕ.Jñ 
r   c                 ó¬   € V f   R # V P                   f   R # V P                   pVP                  \        P                  \        P                  39   g   Q hV# r4   )r   r5   r6   r7   r8   r9   s   & r   Úget_output_act_qspecr>   A   s]   € ØÒ"ÙØ×,Ñ,Ò4ÙØ*=×*OÑ*OÐØ×$Ñ$Ü×ÑÜ×"Ñ"ð)ô ð ð ð Ðr   c                ó:   € V ^8„  d   QhR\         \        ,          /# r0   r2   )r   s   "r   r   r   N   s   € ÷ ñ ¬(Ô3EÕ*Fñ r   c                 óÔ   € V f   R # V f   Q hV P                   f   R # V P                   pVP                  \        P                  \        P                  R 39  d   \        RV R24      hV# )NzUnsupported quantization_spec z for weight)r   r5   r6   r8   Úper_channel_symmetricÚ
ValueErrorr9   s   & r   Úget_weight_qspecrC   N   s   € ØÒ"ÙØÒ*Ð*Ð*Ø×!Ñ!Ò)ÙØ*=×*DÑ*DÐØ× Ñ Ü×"Ñ"Ü×#Ñ#Øð)ô ô
 Ø,Ð->Ð,?¸{ÐKó
ð 	
ð Ðr   c                ó:   € V ^8„  d   QhR\         \        ,          /# r0   r2   )r   s   "r   r   r   `   s   € ÷ 
ñ 
¬Ô1CÕ(Dñ 
r   c                 ó¢   € V f   R # V f   Q hV P                   f   R # V P                   pVP                  \        P                  8X  g   Q R4       hV# )Nz9Only float dtype for bias is supported for bias right now)r   Údtyper6   Úfloatr9   s   & r   Úget_bias_qspecrH   `   s\   € ØÒ"ÙØÒ*Ð*Ð*Ø×ÑÒ'ÙØ*=×*BÑ*BÐØ×"Ñ"¤e§k¡kÔ1ð ØCóÐ1ð Ðr   c                ó0   € V ^8„  d   QhR\         R\         /# )r   ÚnodeÚ
input_noder   )r   s   "r   r   r   m   s   € ÷ :ñ :¤4ð :´Tñ :r   c                 óÀ   € V P                   P                  \        \        4       4      pVP                  f   / Vn        W#P                  V&   W0P                   \        &   R # r4   )ÚmetaÚgetr	   r
   Úinput_qspec_map)rJ   rK   ÚqspecÚquantization_annotations   &&& r   Úannotate_input_qspec_maprR   m   sL   € Ø"Ÿi™iŸm™mÔ,<Ô>TÓ>VÓWÐØ×.Ñ.Ò6Ø24ÐÔ/Ø:?×+Ñ+¨JÑ7Ø"9‡I�IÔÓr   c                ó$   € V ^8„  d   QhR\         /# )r   rJ   r   )r   s   "r   r   r   u   s   € ÷ :ñ :¤ñ :r   c                 ó†   € V P                   P                  \        \        4       4      pWn        W P                   \        &   R # r4   )rM   rN   r	   r
   Úoutput_qspec)rJ   rP   rQ   s   && r   Úannotate_output_qspecrV   u   s/   € Ø"Ÿi™iŸm™mÔ,<Ô>TÓ>VÓWÐØ+0Ô(Ø"9‡I�IÔÓr   c                ó$   € V ^8„  d   QhR\         /# )r   Úmodule_name)Ústr)r   s   "r   r   r   {   s   € ÷ ñ ¬ñ r   c                ó   a € R V 3R llpV# )aÏ  Get the module_name_filter function for a given module name, the filter accepts
a node and checks if the node comes from a module that has certain module name

For example:
    node: linear_op = call_function[...](...)  # comes from a module with name blocks.sub.linear1


>> module_name_filter = _get_module_name_filter("blocks.sub")
>> print(module_name_filter(node))
True  # the node is from "blocks.sub" based on the fully qualified name "blocks.sub.linear1"
c                ó0   € V ^8„  d   QhR\         R\        /# )r   ÚnÚreturn)r   r   )r   s   "r   r   Ú,get_module_name_filter.<locals>.__annotate__ˆ   s   € ÷ $ñ $œdð $¤tñ $r   c                 óª   <€ V P                   P                  R / 4      pR pVP                  4        U Uu. uF  w  rV! V 4      NK  	  pp pSV9   # u upp i )Únn_module_stackc                 óR   € ^ pV P                  R4      '       d   \        R4      pWR # )r   z
L['self'].N)Ú
startswithÚlen)r\   Úprefixs   & r   Ú_normalize_pathÚKget_module_name_filter.<locals>.module_name_filter.<locals>._normalize_path�   s*   € ØˆFà�|‰|˜L×)Ò)Ü˜\Ó*�Ø�W�:Ðr   )rM   rN   Úvalues)r\   r`   re   Ú_ÚnamesrX   s   &    €r   Úmodule_name_filterÚ2get_module_name_filter.<locals>.module_name_filterˆ   sY   ø€ ð Ÿ&™&Ÿ*™*Ð%6¸Ó;ˆò	ð 1@×0FÑ0FÔ0HÔIÑ0H©¨‘ Ö#Ñ0HˆÑIØ˜eÑ#Ð#ùó Js   ´Ar   )rX   rj   s   f r   Úget_module_name_filterrl   {   s   ø€ ÷$ð $ð$ Ðr   c                ó0   € V ^8„  d   QhR\         R\        /# )r   Ú
annotationr]   )r
   r   )r   s   "r   r   r   �   s   € ÷ ñ Ô$:ð ¼tñ r   c                 ón   € V f   R# V P                   pV P                  p\        V4      ^ 8X  d   Vf   R# R# )NFT)rO   rU   rc   )rn   rO   rU   s   &  r   Úis_valid_annotationrp   �   s9   € ØÒÙØ ×0Ñ0€OØ×*Ñ*€LÜ
ˆ?Ó˜qÔ  \Ò%9ÙÙr   )é   é   )ÚsysÚtypingÚdataclassesr   r   r   r   r6   Útorch.fxr   Ú-torchao.quantization.pt2e.quantizer.quantizerr	   Ú	quantizerr
   r   r   Ú	Annotatedr,   r-   Úversion_infor    r(   r;   r>   rC   rH   rR   rV   rl   rp   r   r   r   Ú<module>r{      sª   ðó Û Ý !ß 1Ñ 1ã Ý å Jç ?ñ ˆd˜4Ô ÷ð ó !ðð ×&Ñ& t¨H¥~°tÐ';Õ<Ð Ø×Ñ�gÔØ%PÐÔ"ô
)�Zô 
)õ
õ
õõ$
õ:õ:õ÷Dr   