+
    –°³j`  ã                   óÖ   € ^ RI HtHt ^ RIHt ^ RIHt ^ RIt^ RIH	t	 ^ RI
Ht ^ RIHtHtHt ^ RIHtHt ^ R	IHt ^R
IHt ^RIHt RR.t ! R R]4      t ! R R]4      tR R ltR# )é    )ÚABCÚabstractmethod)ÚCallable)ÚAnyN)ÚBackendConfig)Úget_fuser_method_new)Ú_parent_nameÚNodePatternÚPattern)ÚGraphÚNode)Útype_before_parametrizations)ÚFuseCustomConfig)ÚMatchAllNodeÚDefaultFuseHandlerÚFuseHandlerc                   ó\   a € ] tR t^t o Rt]V 3R lR l4       t]V 3R lR l4       tRtV t	R# )r   z*Base handler class for the fusion patternsc                ó    <€ V ^8„  d   QhRS[ /# ©é   Únode©r   )ÚformatÚ__classdict__s   "€Úf/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/ao/quantization/fx/fuse_handler.pyÚ__annotate__ÚFuseHandler.__annotate__!   s   ø€ ÷ ñ ™Tñ ó    c                ó   € R # ©N© )Úselfr   s   &&r   Ú__init__ÚFuseHandler.__init__    s   € ár   c                óò   <€ V ^8„  d   QhRS[ RS[S[S[P                  P
                  3,          RS[RS[RS[S[	,          RS[
RS[RS[S[S[P                  P                  S[ ,          3,          R	S[R
S[/
# ©r   Úload_argÚnamed_modulesÚfused_graphÚ	root_nodeÚextra_inputsÚmatched_node_patternÚfuse_custom_configÚfuser_method_mappingÚis_qatÚreturn©r   ÚdictÚstrÚtorchÚnnÚModuler   r   Úlistr   r
   r   r   Ú
SequentialÚbool)r   r   s   "€r   r   r   %   sž   ø€ ÷ ñ áðñ ™C¡§¡§¡Ð0Õ1ðñ ð	ñ
 ðñ ™3•iðñ *ðñ -ðñ #¡7©E¯H©H×,?Ñ,?Á(Õ,JÐ#JÕKðñ ðñ 
ñr   c
                ó   € R # r    r!   )
r"   r'   r(   r)   r*   r+   r,   r-   r.   r/   s
   &&&&&&&&&&r   ÚfuseÚFuseHandler.fuse$   s   € ñ 	r   r!   N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r#   r;   Ú__static_attributes__Ú__classdictcell__)r   s   @r   r   r      s.   ø‡ € Ù4à÷ó ðð ÷ó ör   c                   óP   a a€ ] tR t^4t oV3R lV 3R lltV3R lR ltRtVtV ;t# )r   c                ó    <€ V ^8„  d   QhRS[ /# r   r   )r   r   s   "€r   r   ÚDefaultFuseHandler.__annotate__5   s   ø€ ÷ ñ ™Tñ r   c                ó&   <€ \         SV `  V4       R # r    )Úsuperr#   )r"   r   Ú	__class__s   &&€r   r#   ÚDefaultFuseHandler.__init__5   s   ø€ Ü‰Ñ˜Ör   c                óò   <€ V ^8„  d   QhRS[ RS[S[S[P                  P
                  3,          RS[RS[RS[S[	,          RS[
RS[RS[S[S[P                  P                  S[ ,          3,          R	S[R
S[/
# r&   r1   )r   r   s   "€r   r   rF   8   sž   ø€ ÷ >ñ >áð>ñ ™C¡§¡§¡Ð0Õ1ð>ñ ð	>ñ
 ð>ñ ™3•ið>ñ *ð>ñ -ð>ñ #¡7©E¯H©H×,?Ñ,?Á(Õ,JÐ#JÕKð>ñ ð>ñ 
ñ>r   c
                óþ  aaaa€ VP                   R 8w  d   \        R4      hS\        VP                  4      ,          oVVV3R loS! V4      p
V3R loS! V
4      p\	        VP                  4      w  rÍ\        W¸4      pV! V	.V
O5!  p\        SV,          Wß4       V Uu. uF  pV! V4      NK  	  ppVP                  WA4      p\        VP                  4      pVP                  V4       \        V4      Vn	        V# u upi )Úcall_modulez.Expecting module node to be a call_module Nodec                ó\  <€ \        V \        \        34      '       dC   V vr. pVP                  S! V4      4       VP	                  V3R lV 4       4       \        V4      # T pVP
                  R8X  d   SVP                  ,          # VP
                  R8X  dd   VP                  \        P                  P                  P                  J d2   \        P                  P                  4       pSP                  Vn        V# VP
                  R8X  g   VP
                  R8X  d   VP                  # \        # )z›Given a node pattern, extract the corresponding modules
e.g. input: (relu_node, (bn_node, conv_node))
     output: (relu_module, (bn_module, conv_module))
c              3   ó4   <"  € T F  pS! V4      x € K  	  R # 5ir    r!   )Ú.0ÚaÚget_moduless   & €r   Ú	<genexpr>Ú?DefaultFuseHandler.fuse.<locals>.get_modules.<locals>.<genexpr>Q   s   øé € Ð<±t°!™{¨1Ÿ~˜~³tùs   ƒrM   Úcall_functionÚcall_method)Ú
isinstanceÚtupler7   ÚappendÚextendÚopÚtargetr4   r5   Ú
functionalÚreluÚReLUÚtrainingr   )ÚpatternÚnÚargsÚmodulesr^   rR   r(   Úroot_modules   &    €€€r   rR   Ú,DefaultFuseHandler.fuse.<locals>.get_modulesH   sÜ   ø€ ô
 ˜'¤E¬4 =×1Ò1Ø"��Ø13�Ø—‘™{¨1›~Ô.Ø—‘Ô<±tÓ<Ô<Ü˜W“~Ð%à�Ø—4‘4˜=Ô(Ø(¨¯©Õ2Ð2Ø—T‘T˜_Ô,°·±¼U¿X¹X×=PÑ=P×=UÑ=UÓ1UÜ Ÿ8™8Ÿ=™=›?�DØ$/×$8Ñ$8�D”MØ�KØ—T‘T˜_Ô,°·±¸Ô0EØŸ8™8�Oä'Ð'r   c                 óÈ   <€ \        V \        4      '       d   \        \        SV 4      4      # \        V \        P                  P
                  4      '       d   \        V 4      # V # r    )rW   rX   Úmapr4   r5   r6   r   )ÚmÚget_matched_typess   &€r   rj   Ú2DefaultFuseHandler.fuse.<locals>.get_matched_typesc   sH   ø€ Ü˜!œU×#Ò#ÜœSÐ!2°AÓ6Ó7Ð7Ü˜!œUŸX™XŸ_™_×-Ò-Ü3°AÓ6Ð6ØˆHr   )r[   ÚAssertionErrorr3   r\   r	   r   ÚsetattrÚ	node_copyr7   rc   rZ   rX   )r"   r'   r(   r)   r*   r+   r,   r-   r.   r/   Úmatched_modulesÚmatched_module_typesÚmodule_parent_nameÚmodule_nameÚfuser_methodÚfused_moduleÚinputÚ
extra_argsr   rc   rj   rR   re   s   &&f&&&&&&&          @@@r   r;   ÚDefaultFuseHandler.fuse8   sí   û€ ð �<‰<˜=Ô(Ü Ð!QÓRÐRØ#¤C¨	×(8Ñ(8Ó$9Õ:ˆ÷	(ñ2 &Ð&:Ó;ˆõ	ñ  1°ÓAÐÜ*6°y×7GÑ7GÓ*HÑ'ÐÜ+Ð,@ÓWˆñ $ FÐ=¨_Ó=ˆÜ�Ð0Õ1°;ÔMÙ3?Ó@±<¨%‘h˜u–o±<ˆ
Ð@Ø×$Ñ$ YÓ9ˆÜ�D—I‘I‹ˆØ�‰�JÔÜ˜$“KˆŒ	Øˆùò As   ÂC:r!   )	r=   r>   r?   r@   r#   r;   rB   rC   Ú__classcell__)rI   r   s   @@r   r   r   4   s   ù‡ € ÷ó ÷>÷ >ð >r   c                óR   € V ^8„  d   QhR\         R\        \        \        3,          /# )r   Úbackend_configr0   )r   r2   r   r   )r   s   "r   r   r   y   s&   € ÷ +ñ +Ü!ð+ä	Œ'”8Ð
Õñ+r   c                 ó€   € / pV P                   P                  4        F  w  r#VP                  f   K  \        W&   K  	  V# r    )Ú!_pattern_complex_format_to_configÚitemsrs   r   )rz   Úfusion_pattern_to_fuse_handlersra   Úconfigs   &   r   Ú'_get_fusion_pattern_to_fuse_handler_clsr€   y   sE   € ð @BÐ#Ø)×KÑK×QÑQÖS‰ˆØ×ÑÔ*ä7IÐ+Ó4ñ Tð +Ð*r   )Úabcr   r   Úcollections.abcr   Útypingr   r4   Ú$torch.ao.quantization.backend_configr   Ú+torch.ao.quantization.fuser_method_mappingsr   Útorch.ao.quantization.utilsr	   r
   r   Útorch.fx.graphr   r   Útorch.nn.utils.parametrizer   Úcustom_configr   Úmatch_utilsr   Ú__all__r   r   r€   r!   r   r   Ú<module>rŒ      sX   ðç #Ý $Ý ã Ý >Ý Lß JÑ Jß &Ý Cå +Ý %ð Øð€ô�#ô ô.B˜ô B÷J+r   