§
    kŠtj  ã                   óh   — d dl mZ d dlmZ d dlmZ d dlmZ  ee¦  «        Z	 G d„ de¦  «        Z
dS )é    )Ú	getLogger)ÚFusion)Úhelper)Ú	OnnxModelc                   ó4   ‡ — e Zd Zdefˆ fd„Zdedefd„Zˆ xZS )ÚFusionBiasSplitGeluÚmodelc                 óN   •— t          ¦   «                              |dd¦  «         d S )NÚBiasSplitGeluÚGelu)ÚsuperÚ__init__)Úselfr	   Ú	__class__s     €úk/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/onnxruntime/transformers/fusion_biassplitgelu.pyr   zFusionBiasSplitGelu.__init__   s%   ø€ Ý‰Œ×Ò˜ °Ñ8Ô8Ð8Ð8Ð8ó    Úinput_name_to_nodesÚoutput_name_to_nodec                 óH  — |j         d         |vrdS ||j         d                  }t          |¦  «        dk    s|d         j        dk    rdS |d         }| j                             |dd|¦  «        }|€dS | j                             |dd¬¦  «        d	k    rdS |j        d         }| j                             |g d
¢g d¢|¦  «        }|€!| j                             |g d¢g d¢|¦  «        }|�|d         j        d         |k    rdS | j                             |ddgddg|¦  «        }	|	�
|	d         |vrdS | j                             |dd|¦  «        }
|
€dS |
j        d         |j        d         k    rdS g |¢|	d         ‘|‘|‘|
‘|‘}|j         d         }| j                             ||g||¦  «        st           
                    d¦  «         dS |d         }| j                             |¦  «        \  }}t          |t          ¦  «        sdS | j                             |¦  «         | j                             dd¬¦  «        }t#          j        d|j        d|z
           |j        |         g|g|¬¦  «        }d|_        | j                             |¦  «         | j        | j        |<   dS )a´  
        [root] --->Add -------------------->  Slice ---------------> Mul -->
                   |                            ^                    ^
                   |                            |                    |
                   +----------------------------+---Slice --> Gelu---+
                   |                            |     ^
                   |                            |-----|
                   |                            |     |
                   |                           Mul   Mul
                   |                            ^     ^
                   v                            |     |
                  Shape ---> Gather --> Add --> Div --+
        r   Né   ÚMulÚSliceéÿÿÿÿgü©ñÒMbP?)Údeltaé   )ÚDivÚAddÚGatherÚShaper   )r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   éþÿÿÿr   é   zBSkip fuse BiasSplitGelu since it is not safe to fuse the subgraph.r   )Úname_prefix)ÚinputsÚoutputsÚnamezcom.microsoft)ÚoutputÚlenÚop_typer	   Úmatch_parentÚfind_constant_inputÚinputÚmatch_parent_pathÚis_safe_to_fuse_nodesÚloggerÚinfoÚget_constant_inputÚ
isinstanceÚintÚnodes_to_removeÚextendÚcreate_node_namer   Ú	make_nodeÚdomainÚnodes_to_addÚappendÚthis_graph_nameÚnode_name_to_graph_name)r   Ú	gelu_noder   r   ÚchildrenÚmul_after_geluÚslice_before_geluÚ
add_outputÚstart_index_nodesÚend_index_nodesÚslice_before_mulÚsubgraph_nodesÚsubgraph_outputÚadd_nodeÚ
bias_indexÚ_valueÚ	node_nameÚ
fused_nodes                     r   ÚfusezFusionBiasSplitGelu.fuse   sN  € ð Ô˜AÔÐ&9Ð9Ð9ØˆFØ& yÔ'7¸Ô':Ô;ˆÝˆx‰=Œ=˜AÒÐ ¨!¤Ô!4¸Ò!=Ð!=ØˆFØ! !œˆà œJ×3Ò3°I¸wÈÐK^Ñ_Ô_ÐØÐ$ØˆFàŒ:×)Ò)Ð*;¸RÀuÐ)ÑMÔMÐQRÒRÐRØˆFà&Ô,¨QÔ/ˆ
à œJ×8Ò8ØØ4Ð4Ð4ØˆOˆOØñ	
ô 
Ðð Ð$Ø $¤
× <Ò <Ø!Ø?Ð?Ð?Ø"Ð"Ð"Ø#ñ	!ô !Ðð Ð$Ð(9¸"Ô(=Ô(CÀAÔ(FÈ*Ò(TÐ(TØˆFàœ*×6Ò6Ð7HÈ5ÐRWÈ.Ð[\Ð^_ÐZ`ÐbuÑvÔvˆð Ð# °qÔ'9ÐARÐ'RÐ'RàˆFàœ:×2Ò2°>À7ÈAÐObÑcÔcÐØÐ#ØˆFð Ô" 1Ô%Ð):Ô)@ÀÔ)CÒCÐCàˆFð
Øð
à˜AÔð
ð ð
ð ð	
ð
 ð
ð ð
ˆð )Ô/°Ô2ˆØŒz×/Ò/Ø˜_Ð-Ð/BÐDWñ
ô 
ð 	õ �KŠKÐ\Ñ]Ô]Ð]ØˆFà$ RÔ(ˆØ!œZ×:Ò:¸8ÑDÔDÑˆ
�FÝ˜*¥cÑ*Ô*ð 	ØˆFØÔ×#Ò# NÑ3Ô3Ð3Ø”J×/Ò/°È_Ð/Ñ]Ô]ˆ	ÝÔ%ØØ”N 1 z¡>Ô2°H´NÀ:Ô4NÐOØ$Ð%Øð	
ñ 
ô 
ˆ
ð ,ˆ
ÔØÔ× Ò  Ñ,Ô,Ð,Ø26Ô2FˆÔ$ YÑ/Ð/Ð/r   )Ú__name__Ú
__module__Ú__qualname__r   r   ÚdictrK   Ú__classcell__)r   s   @r   r   r      sz   ø€ € € € € ð9˜ið 9ð 9ð 9ð 9ð 9ð 9ð\G°4ð \GÈdð \Gð \Gð \Gð \Gð \Gð \Gð \Gð \Gr   r   N)Úloggingr   Úfusion_baser   Úonnxr   Ú
onnx_modelr   rL   r.   r   © r   r   ú<module>rV      s¦   ðð
 Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  à	ˆ�8Ñ	Ô	€ð`Gð `Gð `Gð `Gð `G˜&ñ `Gô `Gð `Gð `Gð `Gr   