ó
    Eñiä  ã                   óR  • S SK r S SKJr  S SKJr  S SKJrJr  S SKJ	r	J
r
Jr  S SKJrJr  S SKJrJrJr  S SKJr  S	S
KJr  S	SKJrJr  S	SKJrJr  S	SKJr  SS/r  SS\S\ S\\!\"\4   -  S-  S\\!\"\4   -  S-  S\4
S jjr#S\S\S\!\\4   S\!\"\$\\\\\!\\4   4   4   4S jr%g)é    N)ÚCallable)ÚAny)ÚBackendConfigÚget_native_backend_config)Úget_fuser_method_mappingÚ)get_fusion_pattern_to_extra_inputs_getterÚ&get_fusion_pattern_to_root_node_getter)ÚNodePatternÚPattern)ÚGraphModuleÚmap_argÚNode)ÚGraphé   )ÚFuseCustomConfig)Ú'_get_fusion_pattern_to_fuse_handler_clsÚFuseHandler)Ú	_is_matchÚMatchAllNode)Ú_sorted_patterns_dictÚfuser   ÚmodelÚis_qatÚfuse_custom_configÚbackend_configÚreturnc                 óB  ^• Uc
  [        5       n[        U[        5      (       a0  [        R                  " S[
        SS9  [         R                  " U5      n[        U[        5      (       a0  [        R                  " S[
        SS9  [        R                  " U5      n[        U R                  5       5      nUc
  [        5       n[        [        U5      5      n[        U5      n[        U5      n[        U5      n[        X R                   U5      n	[#        5       n
0 mU4S jnS nU R                   R$                   HÛ  nU	R'                  UR(                  S5      u  nnnnnUb  UR'                  US 5      nOS nXíL an  Uc  [+        S5      eUR'                  Xü5      nU" U5      nUR'                  US 5      n/ nUb  U" U5      nUR-                  UUU
UUUUUU5	      TUR(                  '   M¯  Ub  U[.        L d  M½  U
R1                  XÛ5      TUR(                  '   MÝ     [3        X
5      n U $ )	Nz‘Passing a fuse_custom_config_dict to fuse is deprecated and will not be supported in a future version. Please pass in a FuseCustomConfig instead.é   )Ú
stacklevelz�Passing a backend_config_dict to prepare is deprecated and will not be supported in a future version. Please pass in a BackendConfig instead.c                 ó$   >• [        U U4S j5      $ )Nc                 ó"   >• TU R                      $ ©N)Úname)ÚnodeÚenvs    €ÚZ/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/ao/quantization/fx/fuse.pyÚ<lambda>Ú(fuse.<locals>.load_arg.<locals>.<lambda>T   s   ø€  s¨4¯9©9¢~ó    )r   )Úar%   s    €r&   Úload_argÚfuse.<locals>.load_argS   s   ø€ Ü�qÔ5Ó6Ð6r)   c                 óz   • [        U S   [        5      (       d  U S   n [        U S   [        5      (       d  M  U S   $ )Néÿÿÿÿ)Ú
isinstancer   )Únode_patterns    r&   Údefault_root_node_getterÚ&fuse.<locals>.default_root_node_getterV   s=   € Ü˜\¨"Ñ-¬t×4Ñ4Ø'¨Ñ+ˆLô ˜\¨"Ñ-¬t×4Ó4à˜BÑÐr)   )NNNNNz:fuse handler object must not be None for matched root node)r   r/   ÚdictÚwarningsÚwarnÚFutureWarningÚ	from_dictr   Únamed_modulesr   r   r   r   r	   r   Ú_find_matchesÚgraphr   ÚnodesÚgetr#   ÚAssertionErrorr   r   Ú	node_copyr   )r   r   r   r   r8   Ú"fusion_pattern_to_fuse_handler_clsÚfuser_method_mappingÚ"fusion_pattern_to_root_node_getterÚ%fusion_pattern_to_extra_inputs_getterÚfusion_pairsÚfused_graphr+   r1   r$   Úmaybe_last_nodeÚpatternÚmatched_node_patternÚobjÚnode_to_subpatternÚnode_subpatternÚroot_node_getterÚ	root_nodeÚextra_inputs_getterÚextra_inputsr%   s                           @r&   r   r   !   sJ  ø€ ð Ñ!Ü-Ó/ÐäÐ$¤d×+Ñ+Ü�ŠðNäØò		
ô .×7Ò7Ð8JÓKÐä�.¤$×'Ñ'Ü�ŠðKäØò		
ô '×0Ò0°Ó@ˆä˜×,Ñ,Ó.Ó/€MàÑÜ2Ó4ˆä)>Ü/°Ó?ó*Ð&ô 4°NÓCÐÜ)OØó*Ð&ô -VØó-Ð)ô
 ! ¯©Ð5WÓX€Lô “'€KØ€Cõ7ò ð
 —‘×!Ô!ˆð ×Ñ˜TŸY™YÐ(FÓGñ	
ØØØ ØØð Ñ)Ø0×4Ñ4°T¸4Ó@‰Oà"ˆOØÒ"Ø‰{Ü$ØPóð ð  B×EÑEØó Ðñ )Ð)=Ó>ˆIØ"G×"KÑ"KØ˜ó#Ðð ˆLØ"Ñ.Ù2Ð3GÓH�ð !ŸX™XØØØØØØ$Ø"Ø$Øó
ˆC�—	‘	‹Nð Ñ$¨¼<Ô(GØ(×2Ñ2°4ÓBˆC�—	‘	‹NñU "ôZ ˜Ó+€EØ€Lr)   Úrootr:   Úpattern_to_fuse_handler_clsc                 ó4  ^	^
• [        U R                  5       5      n0 m
0 nU	U
4S jm	[        UR                  5       HX  nUR                  T
;  d  M  UR                  5        H/  u  pg/ n[        X5U5      (       d  M  T	" UUXVU" U5      4UU5          MV     MZ     T
$ )Nc                 óf  >• [        U [        5      (       aR  U tpV/ nT" XQX'U5        [        XaR                  5       H  u  p‰T" X‰X'U5        M     UR	                  [        U5      5        g UR
                  T;  a9  UR	                  U5        U [        La  XU'   Uu  p nU
U UUU4TUR
                  '   g g g r"   )r/   ÚtupleÚzipÚargsÚappendr#   r   )rF   r$   ÚmatchrG   rI   ÚsrU   Úcurrent_node_patternÚ
subpatternÚargrL   ÚhandlerÚapply_matchÚ	match_maps               €€r&   r]   Ú"_find_matches.<locals>.apply_matchš   sÆ   ø€ Ü�gœu×%Ñ%ØˆHˆAØ/1Ð Ù˜ Ð>PÔQÜ#& t¯Y©YÖ#7‘�
ÙØ UÐBTöñ $8ð !×'Ñ'¬Ð.BÓ(CÕDð �y‰y 	Ó)Ø$×+Ñ+¨DÔ1ð ¤,Ò.Ø/6 tÑ,Ø27Ñ/�I¨à!ØØ,ØØ*ð,�I˜dŸi™iÒ(ð /ð	 *r)   )r3   r8   Úreversedr;   r#   Úitemsr   )rO   r:   rP   ÚmodulesrI   r$   rF   Úfuse_handler_clsrG   r]   r^   s            @@r&   r9   r9   Œ   s©   ù€ ô
 �4×%Ñ%Ó'Ó(€Gð 	ð ð +-Ðöô6 ˜Ÿ™Ö%ˆØ�9‰9˜IÕ%Ø-H×-NÑ-NÖ-PÑ)�Ø35Ð$Ü˜W¨G×4Ó4ÙØØØÑ(8¸Ó(>Ð?Ø,Ø*ôò ó .Qñ &ð Ðr)   )NN)&r4   Úcollections.abcr   Útypingr   Ú$torch.ao.quantization.backend_configr   r   Ú*torch.ao.quantization.backend_config.utilsr   r   r	   Útorch.ao.quantization.utilsr
   r   Útorch.fxr   r   r   Útorch.fx.graphr   Úcustom_configr   Úfuse_handlerr   r   Úmatch_utilsr   r   Úpattern_utilsr   Ú__all__Úboolr3   Ústrr   rS   r9   © r)   r&   Ú<module>rs      s  ðã Ý $Ý ÷÷ñ ÷
 =ß /Ñ /Ý  å +ß Nß 0Ý 0ð ð ð	€ð DHØ<@ñ	hØðhàðhð )¨4°°S°©>Ñ9¸DÑ@ðhð " D¨¨c¨¡NÑ2°TÑ9ð	hð
 õhðV7Ø
ð7àð7ð "& g¨xÐ&7Ñ!8ð7ð 
ˆ#ˆu�T˜7 K°¸dÀ4ÈÀ9¹oÐMÑNÐ
NÑOõ	7r)   