+
    G-j÷  ã                   óp   € ^ RI Ht ^ RIHt ^ RIHt ^ RIHtHtH	t	 ^ RI
Ht ]! ]4      t ! R R]4      tR# )	é    )Ú	getLogger)ÚFusion)ÚNumpyHelper)Ú	NodeProtoÚTensorProtoÚhelper©Ú	OnnxModelc                   ót   a a€ ] tR t^t oV3R lV 3R lltV3R lR ltV3R lR ltV3R lR ltR	tVt	V ;t
# )
ÚFusionGemmFastGeluc                ó    <€ V ^8„  d   QhRS[ /# )é   Úmodelr	   )ÚformatÚ__classdict__s   "€Ú}/Volumes/fast/ai/experiments/nudenet-smoke/.venv/lib/python3.14/site-packages/onnxruntime/transformers/fusion_gemmfastgelu.pyÚ__annotate__ÚFusionGemmFastGelu.__annotate__   s   ø€ ÷ &ñ &™iñ &ó    c                óH   <€ \         SV `  VR RR 4       RV n        RV n        R# )ÚGemmFastGeluÚFastGeluNF)ÚsuperÚ__init__Úshape_inferÚshape_infer_done)Úselfr   Ú	__class__s   &&€r   r   ÚFusionGemmFastGelu.__init__   s&   ø€ Ü‰Ñ˜ °
¸NÔKØˆÔØ %ˆÖr   c                ó4   <€ V ^8„  d   QhRS[ RS[R,          /# )r   Útensor_protoÚreturnN)r   Úint)r   r   s   "€r   r   r      s    ø€ ÷ ñ ¹[ð ÉSÐSWÍZñ r   c                óÂ   € VP                   P                  P                  R 4      '       d4   \        VP                   P                  P                  P
                  4      # R# )ÚshapeN)ÚtypeÚtensor_typeÚHasFieldÚlenr%   Údim)r   r!   s   &&r   Ú get_dimensions_from_tensor_protoÚ3FusionGemmFastGelu.get_dimensions_from_tensor_proto   sE   € Ø×Ñ×(Ñ(×1Ñ1°'×:Ò:Ü�|×(Ñ(×4Ñ4×:Ñ:×>Ñ>Ó?Ð?ár   c                ó4   <€ V ^8„  d   QhRS[ RS[R,          /# )r   Ú
input_namer"   N)Ústrr#   )r   r   s   "€r   r   r      s   ø€ ÷ ñ ©ð ±°tµñ r   c                óV  € V P                   P                  V4      pV'       d   V P                  V4      # V P                  '       g)   V P                   P	                  R R7      V n        R V n        V P
                  e-   V P                  V P
                  P                  V,          4      # R# )T)ÚupdateN)r   Úfind_graph_inputr+   r   Úinfer_runtime_shaper   Ú	known_vi_)r   r.   Úgraph_inputs   && r   Úget_dimensionsÚ!FusionGemmFastGelu.get_dimensions   sŠ   € Ø—j‘j×1Ñ1°*Ó=ˆßØ×8Ñ8¸ÓEÐEà×$×$Ð$Ø#Ÿz™z×=Ñ=ÀTÐ=ÓJˆDÔØ$(ˆDÔ!à×ÑÒ'Ø×8Ñ8¸×9IÑ9I×9SÑ9SÐT^Õ9_Ó`Ð`ár   c                óh   <€ V ^8„  d   QhRS[ RS[S[S[S[ ,          3,          RS[S[S[ 3,          /# )r   ÚnodeÚinput_name_to_nodesÚoutput_name_to_node)r   Údictr/   Úlist)r   r   s   "€r   r   r   *   sJ   ø€ ÷ OMñ OMáðOMñ "¡#¡t©I¥Ð"6Õ7ðOMñ "¡#¡y .Õ1ñ	OMr   c                ó¶  € Rp\        VP                  4      ^8X  d   RpV P                  P                  VR.^ .4      pVf   R# V^ ,          pRp^ pRp	\	        VP                  4       F`  w  r«V P                  P                  V4      pVf%   V P                  VP                  V
,          4      pKH  T
p\        P                  ! V4      p	Kb  	  V	f   R# \        V	P                  4      ^8w  d   R# V\        V	P                  4      8  d   R# RpV'       d|   Rp\	        VP                  4       F>  w  r«V P                  P                  V4      pVf   K&  T
p\        P                  ! V4      p M	  Vf   R# \        VP                  4      ^8w  d   R# W.pV P                  P                  WñP                  ^ ,          .W#4      '       g   R# V P                  P                  V4       V'       d@   VP                  ^V,
          ,          VP                  V,          VP                  V,          .M,VP                  ^V,
          ,          VP                  V,          .p\        P                  ! RVVP                  V P                  P!                  R4      R7      pRVn        V P$                  P'                  V4       V P(                  V P*                  VP,                  &   R# )	z{
This pattern is from PyTorch bert model
Fuse MatMul with FastGelu into one node:

    [root] --> MatMul --> FastGelu -->

FTÚMatMulNr   )ÚinputsÚoutputsÚnamezcom.microsoftéÿÿÿÿ)r)   Úinputr   Úmatch_parent_pathÚ	enumerateÚget_initializerr6   r   Úto_arrayr%   Úis_safe_to_fuse_nodesÚoutputÚnodes_to_removeÚextendr   Ú	make_nodeÚcreate_node_nameÚdomainÚnodes_to_addÚappendÚthis_graph_nameÚnode_name_to_graph_namerB   )r   r9   r:   r;   Úhas_biasÚmatch_nodesÚmatmulÚweight_indexÚx_dimsÚweightÚirD   ÚinitializerÚ
bias_indexÚbias_weightÚsubgraph_nodesr@   Ú
fused_nodes   &&&&              r   ÚfuseÚFusionGemmFastGelu.fuse*   sl  € ð ˆÜˆt�z‰z‹?˜aÔØˆHà—j‘j×2Ñ2°4¸(¸ÀaÀSÓIˆØÒÙØ˜Q•ˆð ˆØˆØˆä! &§,¡,Ö/‰HˆAØŸ*™*×4Ñ4°UÓ;ˆKØÒ"Ø×,Ñ,¨V¯\©\¸!­_Ó=’à �Ü$×-Ò-¨kÓ:’ñ 0ð Š>ÙÜˆv�|‰|Ó Ô!ÙØ”C˜Ÿ™Ó%Ô%Ùð ˆ
ßØˆKÜ% d§j¡jÖ1‘�Ø"Ÿj™j×8Ñ8¸Ó?�ØÒ&ÙØ�
Ü)×2Ò2°;Ó?�Ùñ 2ð Ò"ÙÜ�;×$Ñ$Ó%¨Ô*Ùà˜ˆØ�z‰z×/Ñ/ØŸ[™[¨�^Ð,Ð.A÷
ò 
ñ à×Ñ×#Ñ# NÔ3÷ ð �\‰\˜!˜lÕ*Õ+¨V¯\©\¸,Õ-GÈÏÉÐT^ÕI_Ñ`à—,‘,˜q <Õ/Õ0°&·,±,¸|Õ2LÐMð 	ô ×%Ò%ØØØ—K‘KØ—‘×,Ñ,¨^Ó<ô	
ˆ
ð ,ˆ
ÔØ×Ñ× Ñ  Ô,Ø8<×8LÑ8Lˆ×$Ñ$ Z§_¡_Ó5r   )r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r+   r6   r`   Ú__static_attributes__Ú__classdictcell__Ú__classcell__)r   r   s   @@r   r   r      s8   ù‡ € ÷&ó &÷
ð ÷ð ÷OM÷ OMð OMr   r   N)Úloggingr   Úfusion_baser   Úfusion_utilsr   Úonnxr   r   r   Ú
onnx_modelr
   rb   Úloggerr   © r   r   Ú<module>rp      s3   ðõ å Ý $ß /Ñ /Ý  á	�8Ó	€ôiM˜ö iMr   