Ë
    g^(hX  ã                   óH  — d dl Z d dlmZmZmZ d dlmZmZ d dlm	Z	m
Z
mZ d dlmZmZ d dlmZmZmZ d dlmZ dd	lmZ dd
lmZmZ ddlmZmZ ddlmZ ddgZ	 	 ddede deee!e"ef   df   deee!e"ef   df   def
d„Z#dedede!eef   de!e"e$eeeee!eef   f   f   fd„Z%y)é    N)ÚAnyÚCallableÚUnion)Ú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                 ó  ‡— |€
t        «       }t        |t        «      r1t        j                  dt
        d¬«       t        j                  |«      }t        |t        «      r1t        j                  dt
        d¬«       t        j                  |«      }t        | j                  «       «      }|€
t        «       }t        t        |«      «      }t        |«      }t        |«      }t        |«      }t        | | j                   |«      }	t#        «       }
i Šˆfd„}d„ }| j                   j$                  D ]Ì  }|	j'                  |j(                  d«      \  }}}}}|�|j'                  |d «      }nd }||u rc|€J ‚|j'                  ||«      } ||«      }|j'                  |d «      }g }|� ||«      }|j+                  |||
||||||«	      ‰|j(                  <   Œ£|�	|t,        u sŒ®|
j/                  ||«      ‰|j(                  <   ŒÎ t1        | |
«      } | S )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                 ó"   •— t        | ˆfd„«      S )Nc                 ó"   •— ‰| j                      S ©N)Úname)ÚnodeÚenvs    €ú[/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/ao/quantization/fx/fuse.pyú<lambda>z(fuse.<locals>.load_arg.<locals>.<lambda>S   s   ø€  s¨4¯9©9¡~€ ó    )r   )Úar&   s    €r'   Úload_argzfuse.<locals>.load_argR   s   ø€ Ü�qÓ5Ó6Ð6r)   c                 ód   — t        | d   t        «      s| d   } t        | d   t        «      sŒ| d   S )Néÿÿÿÿ)Ú
isinstancer   )Únode_patterns    r'   Údefault_root_node_getterz&fuse.<locals>.default_root_node_getterU   s7   € Ü˜\¨"Ñ-¬tÔ4Ø'¨Ñ+ˆLô ˜\¨"Ñ-¬tÕ4à˜BÑÐr)   )NNNNN)r   r.   ÚdictÚwarningsÚwarnÚFutureWarningÚ	from_dictr   Únamed_modulesr   r   r   r   r
   r	   Ú_find_matchesÚgraphr   ÚnodesÚgetr$   r   r   Ú	node_copyr   )r   r   r   r   r6   Ú"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+   r0   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       sH  ø€ ð Ð!Ü-Ó/ÐäÐ$¤dÔ+Ü�‰ðNäØõ		
ô .×7Ñ7Ð8JÓKÐä�.¤$Ô'Ü�‰ðKäØõ		
ô '×0Ñ0°Ó@ˆä˜×,Ñ,Ó.Ó/€MàÐÜ2Ó4ˆä)>Ü/°Ó?ó*Ð&ô 4°NÓCÐÜ)OØó*Ð&ô -VØó-Ð)ô
 ! ¨¯©Ð5WÓX€Lô “'€KØ€Cô7ò ð
 —‘×!Ñ!ò 'Cˆð ×Ñ˜TŸY™YÐ(FÓGñ	
ØØØ ØØð Ð)Ø0×4Ñ4°T¸4Ó@‰Oà"ˆOØ˜dÑ"Ø�?Ð"�?ØA×EÑEØÐ1ó Ðñ )Ð)=Ó>ˆIØ"G×"KÑ"KØ˜ó#Ðð ˆLØ"Ð.Ù2Ð3GÓH�ð !ŸX™XØØØØØØ$Ø"Ø$Øó
ˆC�—	‘	ŠNð Ð$¨¼<Ò(GØ(×2Ñ2°4¸ÓBˆC�—	‘	ŠNðO'CôT ˜˜{Ó+€EØ€Lr)   Úrootr8   Úpattern_to_fuse_handler_clsc                 ó  ‡	‡
— t        | j                  «       «      }i Š
i }ˆ	ˆ
fd„Š	t        |j                  «      D ]O  }|j                  ‰
vsŒ|j                  «       D ]+  \  }}g }t        |||«      sŒ ‰	|||| ||«      f||«        ŒO ŒQ ‰
S )Nc                 ód  •— t        | t        «      rW| ^}}g } ‰|||||«       t        ||j                  «      D ]  \  }}	 ‰||	|||«       Œ |j	                  t        |«      «       y |j
                  ‰vr:|j	                  |«       | t        ur | ||<   |\  }
} }|
| |||f‰|j
                  <   y y y r#   )r.   ÚtupleÚzipÚargsÚappendr$   r   )rC   r%   ÚmatchrD   rF   ÚsrR   Úcurrent_node_patternÚ
subpatternÚargrI   ÚhandlerÚapply_matchÚ	match_maps               €€r'   rZ   z"_find_matches.<locals>.apply_match–   sÝ   ø€ Ü�gœuÔ%ØˆHˆA�Ø/1Ð Ù˜˜4 Ð(<Ð>PÔQÜ#& t¨T¯Y©YÓ#7ò ‘�
˜CÙØ  UÐ,@ÐBTõðð !×'Ñ'¬Ð.BÓ(CÕDð �y‰y 	Ñ)Ø$×+Ñ+¨DÔ1ð ¤,Ñ.Ø/6Ð& tÑ,Ø27Ñ/�I˜w¨à!ØØ,ØØ*ð,�I˜dŸi™iÒ(ð /ð	 *r)   )r1   r6   Úreversedr9   r$   Úitemsr   )rL   r8   rM   ÚmodulesrF   r%   rC   Úfuse_handler_clsrD   rZ   r[   s            @@r'   r7   r7   ˆ   s¶   ù€ ô
 �4×%Ñ%Ó'Ó(€Gð 	ð ð +-Ðõô6 ˜Ÿ™Ó%ò ˆØ�9‰9˜IÒ%Ø-H×-NÑ-NÓ-Pò 
Ñ)�Ð)Ø35Ð$Ü˜W d¨GÕ4ÙØØØ˜wÑ(8¸Ó(>Ð?Ø,Ø*ôñ ñ
ðð Ðr)   )NN)&r2   Útypingr   r   r   Ú$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__Úboolr1   Ústrr   rP   r7   © r)   r'   ú<module>rn      s
  ðã ß 'Ñ '÷÷ñ ÷
 =ß /Ñ /Ý  å +ß Nß 0Ý 0ð ð ð	€ð IMØAEñ	eØðeàðeð Ð.°°S¸#°X±ÀÐDÑEðeð ˜-¨¨c°3¨h©¸Ð=Ñ>ð	eð
 óeðP7Ø
ð7àð7ð "& g¨xÐ&7Ñ!8ð7ð 
ˆ#ˆu�T˜7 K°¸dÀ4ÈÀ9¹oÐMÑNÐ
NÑOô	7r)   