Ë
    ÝÍ:jF  ã                   óv   — d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
 d dlmZ  ee«      Z G d„ de«      Zy	)
é    )Ú	getLogger)ÚFusion)ÚFusionUtils)Úndarray)Ú	NodeProtoÚTensorProto)Ú	OnnxModelc                   ó~   ‡ — e Zd Zdefˆ fd„Zdededz  fd„Zdededz  fd„Z	d	e
d
eeee
   f   deee
f   fd„Zˆ xZS )ÚFusionShapeÚmodelc                 ód   •— t         ‰| �  |dd«       t        |«      | _        d | _        d| _        y )NÚShapeÚConcatF)ÚsuperÚ__init__r   ÚutilsÚshape_inferÚshape_infer_done)Úselfr   Ú	__class__s     €úz/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/onnxruntime/transformers/fusion_shape.pyr   zFusionShape.__init__   s0   ø€ Ü‰Ñ˜ ¨Ô2Ü  Ó'ˆŒ
ØˆÔØ %ˆÕó    Útensor_protoÚreturnNc                 ó´   — |j                   j                  j                  d«      r3t        |j                   j                  j                  j
                  «      S y )NÚshape)ÚtypeÚtensor_typeÚHasFieldÚlenr   Údim)r   r   s     r   Ú get_dimensions_from_tensor_protoz,FusionShape.get_dimensions_from_tensor_proto   sB   € Ø×Ñ×(Ñ(×1Ñ1°'Ô:Ü�|×(Ñ(×4Ñ4×:Ñ:×>Ñ>Ó?Ð?àr   Ú
input_namec                 ó$  — | j                   j                  |«      }|�t        |«      S | j                  s(| j                   j	                  d¬«      | _        d| _        | j
                  �(| j                  | j
                  j                  |   «      S y )NT)Úupdate)r   Ú	get_shaper    r   Úinfer_runtime_shaper   r"   Ú	known_vi_)r   r#   r   s      r   Úget_dimensionszFusionShape.get_dimensions   sƒ   € Ø—
‘
×$Ñ$ ZÓ0ˆØÐÜ�u“:Ðà×$Ò$Ø#Ÿz™z×=Ñ=ÀTÐ=ÓJˆDÔØ$(ˆDÔ!à×ÑÐ'Ø×8Ñ8¸×9IÑ9I×9SÑ9SÐT^Ñ9_Ó`Ð`àr   Úconcat_nodeÚinput_name_to_nodesÚoutput_name_to_nodec                 óÆ  — | j                   j                  «       }t        |j                  «      }d }d }t	        |«      D �]5  }| j                   j                  |g d¢|ddg|«      }	|	€ y |	\  }
}}|dk(  r|j                  d   }|€%|j                  d   }| j                  |«      |k7  r y |j                  d   |k7  r y t        j                  |
ddd¬«      s y |dk  rt        j                  |
ddg«      s" y | j                  j                  |
ddg«      s y | j                   j                  |j                  d   «      }t        |t        «      r$|j                  dk(  r|j!                  «       |k(  r�Œ6 y  | j                   j#                  |j                  d   «      €B| j                   j%                  |j                  d   |«       | j'                  d«       d	| _        y y )
N)Ú	UnsqueezeÚGatherr   r   Úaxis)Údefault_valueé   Úaxesé   ÚReshapeT)r   Úget_opset_versionr    ÚinputÚrangeÚmatch_parent_pathÚoutputr)   r   Úcheck_node_attributer   Úcheck_node_input_valueÚget_constant_valueÚ
isinstancer   ÚsizeÚitemÚfind_graph_outputÚreplace_input_of_all_nodesÚincrease_counterÚprune_graph)r   r*   r+   r,   Úopset_versionÚinputsÚrootÚshape_outputÚiÚpathÚ	unsqueezeÚgatherr   Úvalues                 r   ÚfusezFusionShape.fuse,   sÀ  € ð, Ÿ
™
×4Ñ4Ó6ˆä�[×&Ñ&Ó'ˆØˆØˆÜ�v“ó !	ˆAØ—:‘:×/Ñ/ØÚ0Ø�A�q�	Ø#ó	ˆDð ˆ|Ùà'+Ñ$ˆI�v˜uØ�AŠvØ$Ÿ|™|¨A™�Øˆ|Ø—{‘{ 1‘~�Ø×&Ñ& tÓ,°Ò6ÙØ—‘˜Q‘ 4Ò'Ùä×3Ñ3°I¸vÀqÐXYÕZÙà˜rÒ!Ü"×7Ñ7¸	À6ÈAÈ3ÔOÙà—z‘z×8Ñ8¸ÀAÈÀsÔKÙà—J‘J×1Ñ1°&·,±,¸q±/ÓBˆEä˜u¤gÔ.°5·:±:À²?ÀuÇzÁzÃ|ÐWXÔGXÙðC!	ðF �:‰:×'Ñ'¨×(:Ñ(:¸1Ñ(=Ó>ÐFØ�J‰J×1Ñ1°+×2DÑ2DÀQÑ2GÈÔVØ×!Ñ! )Ô,Ø#ˆDÕð Gr   )Ú__name__Ú
__module__Ú__qualname__r	   r   r   Úintr"   Ústrr)   r   ÚdictÚlistrN   Ú__classcell__)r   s   @r   r   r      sz   ø„ ð&˜iõ &ð¸[ð ÈSÐSWÉZó ð¨ð °°t±ó ðA$àðA$ð " # t¨I¡Ð"6Ñ7ðA$ð " # y .Ñ1÷	A$r   r   N)Úloggingr   Úfusion_baser   Úfusion_utilsr   Únumpyr   Úonnxr   r   Ú
onnx_modelr	   rO   Úloggerr   © r   r   ú<module>r_      s1   ðõ å Ý $Ý ß 'Ý  á	�8Ó	€ô\$�&õ \$r   