Ë
    L²jä  ã                   óL  — d dl 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
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f   z  dz  dee!e"ef   z  dz  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)Ú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                 ó"  ‡— |€
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 rl|€t+        d«      ‚|j'                  ||«      } ||«      }|j'                  |d «      }g }|� ||«      }|j-                  |||
||||||«	      ‰|j(                  <   Œ¬|�	|t.        u sŒ·|
j1                  ||«      ‰|j(                  <   Œ× t3        | |
«      } | 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/html/ia-enhanced/venv/lib/python3.12/site-packages/torch/ao/quantization/fx/fuse.pyú<lambda>z(fuse.<locals>.load_arg.<locals>.<lambda>T   s   ø€  s¨4¯9©9¡~€ ó    )r   )Úar%   s    €r&   Úload_argzfuse.<locals>.load_argS   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_getterV   s7   € Ü˜\¨"Ñ-¬tÔ4Ø'¨Ñ+ˆLô ˜\¨"Ñ-¬tÕ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   r5   Ú"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*   r/   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   !   sV  ø€ ð Ð!Ü-Ó/ÐäÐ$¤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Ñ"Øˆ{Ü$ØPóð ð  B×EÑEØÐ1ó Ðñ )Ð)=Ó>ˆIØ"G×"KÑ"KØ˜ó#Ðð ˆLØ"Ð.Ù2Ð3GÓH�ð !ŸX™XØØØØØØ$Ø"Ø$Øó
ˆC�—	‘	ŠNð Ð$¨¼<Ò(GØ(×2Ñ2°4¸ÓBˆC�—	‘	ŠNðU*CôZ ˜˜{Ó+€EØ€Lr(   Úrootr7   Ú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(   )r0   r5   Úreversedr8   r#   Úitemsr   )rL   r7   rM   ÚmodulesrF   r$   rC   Úfuse_handler_clsrD   rZ   r[   s            @@r&   r6   r6   Œ   s¶   ù€ ô
 �4×%Ñ%Ó'Ó(€Gð 	ð ð +-Ðõô6 ˜Ÿ™Ó%ò ˆØ�9‰9˜IÒ%Ø-H×-NÑ-NÓ-Pò 
Ñ)�Ð)Ø35Ð$Ü˜W d¨GÕ4ÙØØØ˜wÑ(8¸Ó(>Ð?Ø,Ø*ôñ ñ
ðð Ðr(   )NN)&r1   Ú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__Úboolr0   Ústrr   rP   r6   © r(   r&   ú<module>ro      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(   