§
    kŠtjÁ  ã                   óŽ   — d dl mZ d dlmZ d dlmZ d dlmZ d dlZ	d dl
mZmZmZ d dlmZ  ee¦  «        Z G d„ d	¦  «        ZdS )
é    )Údefaultdict)ÚSequence)Ú	getLogger)ÚAnyN)Ú	NodeProtoÚTensorProtoÚhelper)Ú	OnnxModelc                   ó  — e Zd ZdZ	 ddededeee         z  defd„Zdefd	„Zd
e	de
eee	         f         de
ee	f         fd„Zd„ Zddededee         dedef
d„Zdefd„Zdee	         fd„Zdee	         dee	         fd„ZdS )ÚFusionz%
    Base class for Graph Fusion
    Ú ÚmodelÚfused_op_typeÚsearch_op_typesÚdescriptionc                 óú   — t          |t          ¦  «        r|gn|| _        || _        |r|› d|› d�n|| _        || _        g | _        g | _        d| _        i | _	        d | _
        t          t          ¦  «        | _        d S )Nú(ú)F)Ú
isinstanceÚstrr   r   r   r   Únodes_to_removeÚnodes_to_addÚprune_graphÚnode_name_to_graph_nameÚthis_graph_namer   ÚintÚfused_count)Úselfr   r   r   r   s        úb/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/onnxruntime/transformers/fusion_base.pyÚ__init__zFusion.__init__   s˜   € õ @JÈ/Õ[^Ñ?_Ô?_Ð*t¨?Ð*;Ð*;ÐetˆÔØ"/ˆÔØEPÐ c =Ð AÐ A°;Ð AÐ AÐ AÐ AÐVcˆÔØ %ˆŒ
Ø%'ˆÔØ"$ˆÔØ!&ˆÔØ-/ˆÔ$Ø+/ˆÔå(3µCÑ(8Ô(8ˆÔÐÐó    Úfused_op_namec                 ó0   — | j         |xx         dz  cc<   dS )z7
        Increase counter of a fused operator.
        é   N)r   )r   r"   s     r   Úincrease_counterzFusion.increase_counter)   s)   € ð 	Ô˜Ð'Ð'Ô'¨1Ñ,Ð'Ð'Ñ'Ð'Ð'r!   ÚnodeÚinput_name_to_nodesÚoutput_name_to_nodec                 ó   — t           ‚)z,Interface for fusion that starts from a node)ÚNotImplementedError)r   r&   r'   r(   s       r   ÚfusezFusion.fuse/   s
   € õ "Ð!r!   c                 óö  — t                                d| j        › d�¦  «         | j                             ¦   «         }| j                             ¦   «         }| j        D ]m}| j                             |¦  «        D ]P}| j                             |¦  «        }|€t          d¦  «        ‚|j
        | _        |                      |||¦  «         ŒQŒnd„ | j        D ¦   «         }| j        rB| j                             ¦   «         D ]'\  }}|r t                                d|› d|› �¦  «         Œ(nE|                     | j        ¦  «        }	|	dk    r%t                                d| j        › d|	› �¦  «         | j                             | j        ¦  «         | j                             | j        | j        ¦  «         | j        r| j                             ¦   «          dS | j        s| j        r| j                             ¦   «          dS dS )	z•
        Apply graph fusion on the whole model graph.
        It searched nodes of given operators, and start fusion on each of those nodes.
        zstart z
 fusion...NzCan not find node in any graphc                 ó   — g | ]	}|j         ‘Œ
S © )Úop_type)Ú.0r&   s     r   ú
<listcomp>z Fusion.apply.<locals>.<listcomp>J   s   € Ð>Ð>Ð> D�4”<Ð>Ð>Ð>r!   zFused z: r   )ÚloggerÚdebugr   r   r'   r(   r   Úget_nodes_by_op_typeÚget_graph_by_nodeÚ	ExceptionÚnamer   r+   r   r   ÚitemsÚinfoÚcountr   Úremove_nodesr   Ú	add_nodesr   r   Úupdate_graph)
r   r'   r(   Úsearch_op_typer&   ÚgraphÚop_listÚkeyÚvaluer:   s
             r   ÚapplyzFusion.apply8   s)  € õ
 	�ŠÐ:˜dÔ.Ð:Ð:Ð:Ñ;Ô;Ð;Ø"œj×<Ò<Ñ>Ô>ÐØ"œj×<Ò<Ñ>Ô>Ðð #Ô2ð 	Jð 	JˆNØœ
×7Ò7¸ÑGÔGð Jð J�Øœ
×4Ò4°TÑ:Ô:�Ø�=Ý#Ð$DÑEÔEÐEØ',¤z�Ô$Ø—	’	˜$Ð 3Ð5HÑIÔIÐIÐIðJð ?Ð>¨DÔ,=Ð>Ñ>Ô>ˆØÔð 	BØ"Ô.×4Ò4Ñ6Ô6ð 9ð 9‘
��UØð 9Ý—K’KÐ 7¨Ð 7Ð 7°Ð 7Ð 7Ñ8Ô8Ð8øð9ð —M’M $Ô"4Ñ5Ô5ˆEØ�qŠyˆyÝ—’Ð@ TÔ%5Ð@Ð@¸Ð@Ð@ÑAÔAÐAàŒ
×Ò Ô 4Ñ5Ô5Ð5ØŒ
×Ò˜TÔ.°Ô0LÑMÔMÐMàÔð 	&ØŒJ×"Ò"Ñ$Ô$Ð$Ð$Ð$ØÔ!ð 	& TÔ%6ð 	&ØŒJ×#Ò#Ñ%Ô%Ð%Ð%Ð%ð	&ð 	&r!   Tr7   Ú	data_typeÚdimsÚvalsÚrawc                 ó†  — |r…t          |t          j        ¦  «        s=t          j        |¦  «        }t          j        ||¬¦  «                             ¦   «         }n|                     ¦   «         }t          j        ||||d¬¦  «        }nt          j        ||||d¬¦  «        }| j         	                    || j
        ¦  «         |S )N)ÚdtypeT)r7   rD   rE   rF   rG   F)r   ÚnpÚndarrayr	   Útensor_dtype_to_np_dtypeÚarrayÚtobytesÚmake_tensorr   Úadd_initializerr   )	r   r7   rD   rE   rF   rG   Únp_typeÚbytesÚtensors	            r   rP   zFusion.add_initializer\   sÏ   € Øð 	Ý˜d¥B¤JÑ/Ô/ð 'Ý Ô9¸)ÑDÔD�Ýœ ¨WÐ5Ñ5Ô5×=Ò=Ñ?Ô?��àŸš™œ�ÝÔ'ØØ#ØØØðñ ô ˆFˆFõ Ô'ØØ#ØØØðñ ô ˆFð 	Œ
×"Ò" 6¨4Ô+?Ñ@Ô@Ð@Øˆr!   rS   c                 ó:   — | j                              |¦  «         d S ©N)r   Úremove_initializer)r   rS   s     r   rV   zFusion.remove_initializerv   s   € ØŒ
×%Ò% fÑ-Ô-Ð-Ð-Ð-r!   Únodesc                 óV   — |D ]%}|| j         vr| j                              |¦  «         Œ&d S rU   ©r   Úappend)r   rW   r&   s      r   Úadd_nodes_to_removezFusion.add_nodes_to_removey   sC   € ð ð 	2ð 	2ˆDØ˜4Ô/Ð/Ð/ØÔ$×+Ò+¨DÑ1Ô1Ð1øð	2ð 	2r!   Únodes_to_keepc                 ó^   — |D ])}|| j         vr||vr| j                              |¦  «         Œ*d S rU   rY   )r   rW   r\   r&   s       r   Ú&add_nodes_to_remove_with_nodes_to_keepz-Fusion.add_nodes_to_remove_with_nodes_to_keepŠ   sK   € Øð 	2ð 	2ˆDØ˜4Ô/Ð/Ð/°DÀÐ4MÐ4MØÔ$×+Ò+¨DÑ1Ô1Ð1øð	2ð 	2r!   N)r   )T)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   r   Úlistr    r%   r   Údictr+   rC   r   r   r   ÚboolrP   r   rV   r[   r^   r.   r!   r   r   r      s…  € € € € € ðð ð ð9ð 9àð9ð ð9ð ˜t Cœy™ð	9ð
 ð9ð 9ð 9ð 9ð&-¨cð -ð -ð -ð -ð"àð"ð " # t¨I¤Ð"6Ô7ð"ð " # y .Ô1ð	"ð "ð "ð "ð"&ð "&ð "&ðHð  Cð °Cð ¸xÈ¼}ð ÐTWð Ð^bð ð ð ð ð4.¨ð .ð .ð .ð .ð2¨¨i¬ð 2ð 2ð 2ð 2ð"2¸DÀ¼Oð 2Ð\`ÐajÔ\kð 2ð 2ð 2ð 2ð 2ð 2r!   r   )Úcollectionsr   Úcollections.abcr   Úloggingr   Útypingr   ÚnumpyrJ   Úonnxr   r   r	   Ú
onnx_modelr
   r_   r2   r   r.   r!   r   ú<module>rm      sÖ   ðð
 $Ð #Ð #Ð #Ð #Ð #Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø  Ð  Ð  Ð  Ð  Ð  à	ˆ�8Ñ	Ô	€ð|2ð |2ð |2ð |2ð |2ñ |2ô |2ð |2ð |2ð |2r!   