§
    Ÿ²Åj*  ã                   ó†  — d dl Z d dlmZmZmZ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&dS )é    N)ÚAnyÚCallableÚDictÚListÚTupleÚ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          ¦  «        r0t          j        dt
          d¬¦  «         t          j        |¦  «        }t          |t          ¦  «        r0t          j        dt
          d¬¦  «         t          j        |¦  «        }t          |                      ¦   «         ¦  «        }|€t          ¦   «         }t          t          |¦  «        ¦  «        }t          |¦  «        }t          |¦  «        }t          |¦  «        }t          | | j        |¦  «        }	t#          ¦   «         }
i Šˆfd„}d„ }| j        j        D ]Û}|	                     |j        d¦  «        \  }}}}}|�|                     |d ¦  «        }nd }||u rp|€J ‚|                     ||¦  «        } ||¦  «        }|                     |d ¦  «        }g }|� ||¦  «        }|                     |||
||||||¦	  «	        ‰|j        <   Œ²|�	|t,          u r|
                     ||¦  «        ‰|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    €úNC:\Projects\Historical\venv\Lib\site-packages\torch/ao/quantization/fx/fuse.pyú<lambda>z(fuse.<locals>.load_arg.<locals>.<lambda>S   s   ø€  s¨4¬9¤~€ ó    )r   )Úar)   s    €r*   Úload_argzfuse.<locals>.load_argR   s   ø€ Ý�qÐ5Ð5Ð5Ð5Ñ6Ô6Ð6r,   c                 óŽ   — t          | d         t          ¦  «        s#| d         } t          | d         t          ¦  «        ¯#| d         S )Néÿÿÿÿ)Ú
isinstancer   )Únode_patterns    r*   Údefault_root_node_getterz&fuse.<locals>.default_root_node_getterU   sG   € Ý˜\¨"Ô-­tÑ4Ô4ð 	,Ø'¨Ô+ˆLõ ˜\¨"Ô-­tÑ4Ô4ð 	,à˜BÔÐr,   )NNNNN)r   r1   Ú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   r9   Ú"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.   r3   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       sÚ  ø€ ð Ð!Ý-Ñ/Ô/ÐåÐ$¥dÑ+Ô+ð LÝŒðNåØð		
ñ 	
ô 	
ð 	
õ .Ô7Ð8JÑKÔKÐå�.¥$Ñ'Ô'ð AÝŒðKåØð		
ñ 	
ô 	
ð 	
õ 'Ô0°Ñ@Ô@ˆå˜×,Ò,Ñ.Ô.Ñ/Ô/€MàÐÝ2Ñ4Ô4ˆå)>Ý/°Ñ?Ô?ñ*ô *Ð&õ 4°NÑCÔCÐÝ)OØñ*ô *Ð&õ -VØñ-ô -Ð)õ
 ! ¨¬Ð5WÑXÔX€Lõ ‘'”'€KØ€Cð7ð 7ð 7ð 7ð 7ð ð  ð  ð
 ”Ô!ð 'Cð 'Cˆð ×Ò˜TœYÐ(FÑGÔGñ	
ØØØ ØØð Ð)Ø0×4Ò4°T¸4Ñ@Ô@ˆOˆOà"ˆOØ˜dÐ"Ð"Ø�?�?�?ØA×EÒEØÐ1ñ ô  Ðð )Ð(Ð)=Ñ>Ô>ˆIØ"G×"KÒ"KØ˜ñ#ô #Ðð ˆLØ"Ð.Ø2Ð2Ð3GÑHÔH�ð !ŸXšXØØØØØØ$Ø"Ø$Øñ
ô 
ˆC�”	‰NˆNð Ð$¨½<Ð(GÐ(GØ(×2Ò2°4¸ÑBÔBˆC�”	‰Nøõ ˜˜{Ñ+Ô+€EØ€Lr,   Úrootr;   Úpattern_to_fuse_handler_clsc                 ó4  ‡	‡
— t          |                      ¦   «         ¦  «        }i Š
i }ˆ	ˆ
fd„Š	t          |j        ¦  «        D ]U}|j        ‰
vrJ|                     ¦   «         D ]5\  }}g }t          |||¦  «        r ‰	|||| ||¦  «        f||¦  «          nŒ6ŒV‰
S )Nc                 ó‚  •— t          | t          ¦  «        rc| ^}}g } ‰|||||¦  «         t          ||j        ¦  «        D ]\  }}	 ‰||	|||¦  «         Œ|                     t          |¦  «        ¦  «         d S |j        ‰vr:|                     |¦  «         | t          ur| ||<   |\  }
} }|
| |||f‰|j        <   d S d S d S r&   )r1   ÚtupleÚzipÚargsÚappendr'   r   )rF   r(   ÚmatchrG   rI   ÚsrU   Úcurrent_node_patternÚ
subpatternÚargrL   ÚhandlerÚapply_matchÚ	match_maps               €€r*   r]   z"_find_matches.<locals>.apply_match–   s"  ø€ Ý�g�uÑ%Ô%ð 	ØˆHˆA�Ø/1Ð ØˆK˜˜4 Ð(<Ð>PÑQÔQÐQÝ#& t¨T¬YÑ#7Ô#7ð ð ‘�
˜CØ�Ø  UÐ,@ÐBTñô ð ð ð !×'Ò'­Ð.BÑ(CÔ(CÑDÔDÐDÐDÐDð Œy 	Ð)Ð)Ø$×+Ò+¨DÑ1Ô1Ð1ð ¥,Ð.Ð.Ø/6Ð& tÑ,Ø27Ñ/�I˜w¨à!ØØ,ØØ*ð,�I˜dœiÑ(Ð(Ð(ð *Ð)ð /Ð.r,   )r4   r9   Úreversedr<   r'   Úitemsr   )rO   r;   rP   ÚmodulesrI   r(   rF   Úfuse_handler_clsrG   r]   r^   s            @@r*   r:   r:   ˆ   sý   øø€ õ
 �4×%Ò%Ñ'Ô'Ñ(Ô(€Gð 	ð ð +-Ððð ð ð ð ð õ6 ˜œÑ%Ô%ð ð ˆØŒ9˜IÐ%Ð%Ø-H×-NÒ-NÑ-PÔ-Pð 
ð 
Ñ)�Ð)Ø35Ð$Ý˜W d¨GÑ4Ô4ð Ø�KØØØ˜wÐ(8Ð(8¸Ñ(>Ô(>Ð?Ø,Ø*ñô ð ð �Eðøð Ðr,   )NN)'r5   Útypingr   r   r   r   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__ÚboolÚstrr   r:   © r,   r*   ú<module>rq      s:  ðà €€€Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð
 =Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø  Ð  Ð  Ð  Ð  Ð  à +Ð +Ð +Ð +Ð +Ð +Ø NÐ NÐ NÐ NÐ NÐ NÐ NÐ NØ 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0ð ð ð	€ð IMØAEð	eð eØðeàðeð Ð.°°S¸#°X´ÀÐDÔEðeð ˜-¨¨c°3¨h¬¸Ð=Ô>ð	eð
 ðeð eð eð eðP7Ø
ð7àð7ð "& g¨xÐ&7Ô!8ð7ð 
ˆ#ˆu�T˜7 K°¸dÀ4ÈÀ9¼oÐMÔNÐ
NÔOð	7ð 7ð 7ð 7ð 7ð 7r,   