§
    kŠtjF  ã                   ó„   — 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d	S )
é    )Ú	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                 ó’   •— t          ¦   «                              |dd¦  «         t          |¦  «        | _        d | _        d| _        d S )NÚShapeÚConcatF)ÚsuperÚ__init__r   ÚutilsÚshape_inferÚshape_infer_done)Úselfr   Ú	__class__s     €úc/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/onnxruntime/transformers/fusion_shape.pyr   zFusionShape.__init__   sD   ø€ Ý‰Œ×Ò˜ ¨Ñ2Ô2Ð2Ý  Ñ'Ô'ˆŒ
ØˆÔØ %ˆÔÐÐó    Útensor_protoÚreturnNc                 óŠ   — |j         j                             d¦  «        r#t          |j         j        j        j        ¦  «        S d S )NÚshape)ÚtypeÚtensor_typeÚHasFieldÚlenr   Údim)r   r   s     r   Ú get_dimensions_from_tensor_protoz,FusionShape.get_dimensions_from_tensor_proto   s=   € ØÔÔ(×1Ò1°'Ñ:Ô:ð 	Ý�|Ô(Ô4Ô:Ô>Ñ?Ô?Ð?à�4r   Ú
input_namec                 ó  — | j                              |¦  «        }|�t          |¦  «        S | j        s'| j                              d¬¦  «        | _        d| _        | j        �%|                      | j        j        |         ¦  «        S d S )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Ô0ˆØÐÝ�u‘:”:ÐàÔ$ð 	)Ø#œz×=Ò=ÀTÐ=ÑJÔJˆDÔØ$(ˆDÔ!àÔÐ'Ø×8Ò8¸Ô9IÔ9SÐT^Ô9_Ñ`Ô`Ð`àˆtr   Úconcat_nodeÚinput_name_to_nodesÚoutput_name_to_nodec                 óÚ  — | j                              ¦   «         }t          |j        ¦  «        }d }d }t	          |¦  «        D �]?}| j                              |g d¢|ddg|¦  «        }	|	€ d S |	\  }
}}|dk    r|j        d         }|€*|j        d         }|                      |¦  «        |k    r d S n|j        d         |k    r d S t          j	        |
ddd¬¦  «        s d S |dk     rt          j	        |
ddg¦  «        s d S n | j
                             |
ddg¦  «        s d S | j                              |j        d         ¦  «        }t          |t          ¦  «        r#|j        dk    r|                     ¦   «         |k    s d S �ŒA| j                              |j        d         ¦  «        €D| j                              |j        d         |¦  «         |                      d¦  «         d	| _        d S d S )
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Ô6ˆå�[Ô&Ñ'Ô'ˆØˆØˆÝ�v‘”ð !	ñ !	ˆAØ”:×/Ò/ØØ0Ð0Ð0Ø�A�q�	Ø#ñ	ô ˆDð ˆ|Ø��à'+Ñ$ˆI�v˜uØ�AŠvˆvØ$œ|¨Aœ�Øˆ|Ø”{ 1”~�Ø×&Ò& tÑ,Ô,°Ò6Ð6Ø�F�Fð 7à”˜Q” 4Ò'Ð'Ø��åÔ3°I¸vÀqÐXYÐZÑZÔZð Ø��à˜rÒ!Ð!Ý"Ô7¸	À6ÈAÈ3ÑOÔOð Ø�F�Fðð ”z×8Ò8¸ÀAÈÀsÑKÔKð Ø�F�Fà”J×1Ò1°&´,¸q´/ÑBÔBˆEå˜u¥gÑ.Ô.ð °5´:À²?°?ÀuÇzÂzÁ|Ä|ÐWXÒGXÐGXØ��ñ HYð Œ:×'Ò'¨Ô(:¸1Ô(=Ñ>Ô>ÐFØŒJ×1Ò1°+Ô2DÀQÔ2GÈÑVÔVÐVØ×!Ò! )Ñ,Ô,Ð,Ø#ˆDÔÐÐð GÐFr   )Ú__name__Ú
__module__Ú__qualname__r	   r   r   Úintr"   Ústrr)   r   ÚdictÚlistrN   Ú__classcell__)r   s   @r   r   r      sã   ø€ € € € € ð&˜ið &ð &ð &ð &ð &ð &ð¸[ð ÈSÐSWÉZð ð ð ð ð¨ð °°t±ð ð ð ð ðA$àðA$ð " # t¨I¤Ð"6Ô7ðA$ð " # y .Ô1ð	A$ð A$ð A$ð A$ð A$ð A$ð A$ð A$r   r   N)Úloggingr   Úfusion_baser   Úfusion_utilsr   Únumpyr   Úonnxr   r   Ú
onnx_modelr	   rO   Úloggerr   © r   r   ú<module>r_      sÆ   ðð Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø  Ð  Ð  Ð  Ð  Ð  à	ˆ�8Ñ	Ô	€ð\$ð \$ð \$ð \$ð \$�&ñ \$ô \$ð \$ð \$ð \$r   