
    hF                     v    S SK Jr  S SKJr  S SKJr  S SKJr  S SKJ	r	J
r
  S SKJr  \" \5      r " S S\5      rg	)
    )	getLogger)Fusion)FusionUtils)ndarray)	NodeProtoTensorProto)	OnnxModelc                      ^  \ rS rSrS\4U 4S jjrS\S\S-  4S jrS\	S\S-  4S	 jr
S
\S\\	\\   4   S\\	\4   4S jrSrU =r$ )FusionShape   modelc                 d   > [         TU ]  USS5        [        U5      U l        S U l        SU l        g )NShapeConcatF)super__init__r   utilsshape_infershape_infer_done)selfr   	__class__s     _/var/www/fran/franai/venv/lib/python3.13/site-packages/onnxruntime/transformers/fusion_shape.pyr   FusionShape.__init__   s0    2 '
 %    tensor_protoreturnNc                     UR                   R                  R                  S5      (       a3  [        UR                   R                  R                  R
                  5      $ g )Nshape)typetensor_typeHasFieldlenr   dim)r   r   s     r    get_dimensions_from_tensor_proto,FusionShape.get_dimensions_from_tensor_proto   sE    ((11'::|((44::>>??r   
input_namec                 ,   U R                   R                  U5      nUb  [        U5      $ U R                  (       d%  U R                   R	                  SS9U l        SU l        U R
                  b(  U R                  U R
                  R                  U   5      $ g )NT)update)r   	get_shaper"   r   infer_runtime_shaper   r$   	known_vi_)r   r&   r   s      r   get_dimensionsFusionShape.get_dimensions   s    

$$Z0u:$$#zz==T=JD$(D!'889I9I9S9ST^9_``r   concat_nodeinput_name_to_nodesoutput_name_to_nodec                    U R                   R                  5       n[        UR                  5      nS nS n[	        U5       GHR  nU R                   R                  U/ SQUSS/U5      n	U	c    g U	u  pnUS:X  a  UR                  S   nUc'  UR                  S   nU R                  U5      U:w  a    g OUR                  S   U:w  a    g [        R                  " U
SSSS9(       d    g US:  a!  [        R                  " U
SS/5      (       d    g O%U R                  R                  U
SS/5      (       d    g U R                   R                  UR                  S   5      n[        U[        5      (       a'  UR                  S:X  a  UR!                  5       U:X  a  GMS    g    U R                   R#                  UR                  S   5      cB  U R                   R%                  UR                  S   U5        U R'                  S5        S	U l        g g )
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/   r0   opset_versioninputsrootshape_outputipath	unsqueezegatherr   values                 r   fuseFusionShape.fuse,   s   , 

446[&&'vA:://0Aq	#	D |'+$IuAv$||A|{{1~&&t,6 7Q4'33IvqXYZr!"77	6A3OO P zz88AsKKJJ11&,,q/BEug..5::?uzz|WXGXC F ::''(:(:1(=>FJJ11+2D2DQ2GV!!),#D Gr   )rH   r   r   r   )__name__
__module____qualname____firstlineno__r	   r   r   intr$   strr,   r   dictlistrR   __static_attributes____classcell__)r   s   @r   r   r      s    &i &[ SSWZ  t A$A$ "#tI"67A$ "#y.1	A$ A$r   r   N)loggingr   fusion_baser   fusion_utilsr   numpyr   onnxr   r   
onnx_modelr	   rT   loggerr    r   r   <module>rf      s1      $  '  	8	\$& \$r   