§
    ŠŠtjä  ã                   ór  — 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%dS )é    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          ¦  «        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 r}|€t+          d¦  «        ‚|                     ||¦  «        } ||¦  «        }|                     |d ¦  «        }g }|� ||¦  «        }|                     |||
||||||¦	  «	        ‰|j        <   Œ¿|�	|t.          u r|
                     ||¦  «        ‰|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/CA-Chatbot/venv/lib/python3.11/site-packages/torch/ao/quantization/fx/fuse.pyú<lambda>z(fuse.<locals>.load_arg.<locals>.<lambda>T   s   ø€  s¨4¬9¤~€ ó    )r   )Úar%   s    €r&   Úload_argzfuse.<locals>.load_argS   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_getterV   sG   € Ý˜\¨"Ô-­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   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   !   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Ð"Ð"Øˆ{Ý$ØPñô ð ð  B×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(   Úrootr7   Ú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"   )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Ð Øˆ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(   )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˜IÐ%Ð%Ø-H×-NÒ-NÑ-PÔ-Pð 
ð 
Ñ)�Ð)Ø35Ð$Ý˜W d¨GÑ4Ô4ð Ø�KØØØ˜wÐ(8Ð(8¸Ñ(>Ô(>Ð?Ø,Ø*ñô ð ð �Eðøð Ð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Ð NÐ NÐ NÐ NÐ NÐ NÐ NØ 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0ð ð ð	€ð DHØ<@ð	hð hØðhàðhð )¨4°°S°¬>Ñ9¸DÑ@ðhð " D¨¨c¨¤NÑ2°TÑ9ð	hð
 ðhð hð hð hðV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(   