
     Ngw                         d dl mZ d dlmZmZ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)DictListUnion)Fusion)FusionUtils)ndarray)	NodeProtoTensorProto)	OnnxModelc                        e Zd Zdef fdZdedeedf         fdZde	deedf         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     a/var/www/html/ai-engine/env/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JD$(D!'889I9ST^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Aq	#	 D |'+$IvuAvv$|A|{1~&&t,,66FF 7Q4''3IvqXYZZZ r!!"7	6A3OO FF z88AsKK FFJ11&,q/BBEug.. 5:??uzz||WXGXGX HY :''(:1(=>>FJ11+2DQ2GVVV!!),,,#D GFr   )__name__
__module____qualname__r   r   r   r   intr%   strr,   r
   r   r   rQ   __classcell__)r   s   @r   r   r      s        &i & & & & & &[ USVX\S\M]     sDy1A    A$A$ "#tI"67A$ "#y.1	A$ A$ A$ A$ A$ A$ A$ A$r   r   N)loggingr   typingr   r   r   fusion_baser   fusion_utilsr   numpyr	   onnxr
   r   
onnx_modelr   rR   loggerr    r   r   <module>ra      s          $ $ $ $ $ $ $ $ $ $       $ $ $ $ $ $       ' ' ' ' ' ' ' '            	8		\$ \$ \$ \$ \$& \$ \$ \$ \$ \$r   