+
    –°³jT  ã                   óæ   a € R t0 t ^ RIt^ RIHt ^ RIHt ^ RIHt ^ RIH	t	 ^ RI
Ht . ROt]t]! 4       t] ^ k R tR R	 lt]! 4       t] ^k / t] ^k / t] ^k RR
 ltR R ltR R ltR R ltR# )é    N)ÚOrderedDict)ÚAny)ÚFixedQParamsFakeQuantize)ÚObserverBase)ÚPatternc                 ó   a € V 3R  lpV# )c                 ó   <€ V \         S&   V # ©N)Ú_DEFAULT_FUSION_PATTERNS)ÚfnÚpatterns   &€Úg/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/ao/quantization/fx/pattern_utils.pyÚinsertÚ(_register_fusion_pattern.<locals>.insert   s   ø€ Ø,.Ô  Ñ)Øˆ	ó    © )r   r   s   f r   Ú_register_fusion_patternr      s   ø€ õð €Mr   c                óF   € V ^8„  d   QhR\         \        \        3,          /# ©é   Úreturn©Údictr   ÚQuantizeHandler)Úformats   "r   Ú__annotate__r       s   € ÷ /ñ /¤T¬'´?Ð*BÕ%Cñ /r   c                  ó6   € \         P                   ! \        4      # r
   )Úcopyr   r   r   r   Úget_default_fusion_patternsr       s   € Ü�9Š9Ô-Ó.Ð.r   c                 ó   a a€ VV 3R  lpV# )c                 óp   <€ V \         S&   Se(   \        P                  ! SR7      \        S&   S\        S&   V # )N)Úobserver)Ú_DEFAULT_QUANTIZATION_PATTERNSr   Ú	with_argsÚ!_DEFAULT_OUTPUT_FAKE_QUANTIZE_MAPÚ_DEFAULT_OUTPUT_OBSERVER_MAP)r   Úfixed_qparams_observerr   s   &€€r   r   Ú'_register_quant_pattern.<locals>.insert/   s@   ø€ Ø24Ô& wÑ/Ø!Ò-ä(×2Ò2Ð<RÔSô .¨gÑ6ð 5KÔ(¨Ñ1Øˆ	r   r   )r   r'   r   s   ff r   Ú_register_quant_patternr)   .   s   ù€ öð €Mr   c                óF   € V ^8„  d   QhR\         \        \        3,          /# r   r   )r   s   "r   r   r   <   s   € ÷ 5ñ 5¤D¬´/Ð)AÕ$Bñ 5r   c                  ó6   € \         P                   ! \        4      # r
   )r   r#   r   r   r   Úget_default_quant_patternsr,   <   s   € Ü�9Š9Ô3Ó4Ð4r   c                óF   € V ^8„  d   QhR\         \        \        3,          /# r   )r   r   r   )r   s   "r   r   r   B   s   € ÷ 7ñ 7ä	Œ'”<Ð
Õ ñ7r   c                 óz   € V '       d   \         P                   ! \        4      # \         P                   ! \        4      # r
   )r   r%   r&   )Úis_trainings   &r   Ú.get_default_output_activation_post_process_mapr0   B   s'   € ÷ Ü�yŠyÔ:Ó;Ð;ä�yŠyÔ5Ó6Ð6r   c                ót   € V ^8„  d   QhR\         \        \        3,          R\         \        \        3,          /# )r   Úpatterns_dictr   r   )r   s   "r   r   r   S   s0   € ÷ ñ Üœ¤Ð0Õ1ðä	Œ'”?Ð
"Õ#ñr   c                ó`   a€ V3R lo\        \        V P                  4       V3R lR7      4      # )a
  
Return a sorted version of the patterns dictionary such that longer patterns are matched first,
e.g. match (F.relu, F.linear) before F.relu.
This works for current use cases, but we may need to have a more clever way to sort
things to address more complex patterns
c                ó~   <€ ^ p\        V \        4      '       d   V  F  pVS! V4      ,          pK  	  V# V^,          pV# )zàthis will calculate the length of the pattern by counting all the entries
in the pattern.
this will make sure (nn.ReLU, (nn.BatchNorm, nn.Conv2d)) comes before
(nn.BatchNorm, nn.Conv2d) so that we can match the former first
©Ú
isinstanceÚtuple)r   ÚlenÚitemÚget_lens   &  €r   r:   Ú&_sorted_patterns_dict.<locals>.get_len]   sF   ø€ ð ˆÜ�gœu×%Ò%Û�Ø‘w˜t“}Õ$’ñ  ð ˆ
ð �1�HˆCØˆ
r   c                 ób   <€ \        V ^ ,          \        4      '       d   S! V ^ ,          4      ) # ^# )r   r5   )Úkvr:   s   &€r   Ú<lambda>Ú'_sorted_patterns_dict.<locals>.<lambda>n   s'   ø€ ¬j¸¸A½Ä×.FÒ.F™G B q¥E›N˜?ÐMÈAÐMr   )Úkey)r   ÚsortedÚitems)r2   r:   s   &@r   Ú_sorted_patterns_dictrC   S   s.   ø€ õô ÜØ×ÑÓ!ÜMô	
óð r   c                ó@  € V ^8„  d   Qh/ ^ \         9   d   \        \        \        3,          ;R&   ^\         9   d   \        \        \        3,          ;R&   ^\         9   d   \        \        \        3,          ;R&   ^\         9   d   \        \        \        3,          ;R&   # )r   r   r#   r%   r&   )Ú__conditional_annotations__r   r   r   )r   s   "r   r   r      s€   € ‡�÷& IÒ Hœ$œw¬Ð7Õ8Ñ Hñ' ÷D OÒ N¤¤W¬oÐ%=Õ >Ñ NñE ÷N GÒ F¤4¬´Ð(@Õ#AÑ FñO ÷P BÒ Aœd¤7¬OÐ#;Õ<Ñ AòQ r   )r   r,   r0   r
   )rE   r   Úcollectionsr   Útypingr   Ú#torch.ao.quantization.fake_quantizer   Útorch.ao.quantization.observerr   Útorch.ao.quantization.utilsr   Ú__all__r   r   r   r   r#   r%   r&   r)   r,   r0   rC   r   )rE   s   @r   Ú<module>rL      sy   øðç €Ý #Ý å HÝ 7Ý /ò€ð €ñ <G»=Ð Ó Hòõ/ñ BMÃÐ Ó Nð
 EGÐ !Ó FØ?AÐ Ó Aô
õ5õ7÷"r   