
    gV                     f    d dl mZ d dl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)    )	getLoggerN)Fusion)TensorProtohelper)	OnnxModelc                   0     e Zd Zdef fdZd Zd Z xZS )FusionReshapemodelc                 6    t         |   |dd       d| _        y )NReshapeF)super__init__prune_graph)selfr
   	__class__s     \/var/www/openai/venv/lib/python3.12/site-packages/onnxruntime/transformers/fusion_reshape.pyr   zFusionReshape.__init__   s    	95!&    c                 @   t        j                  |t         j                        }| j                  j	                  dd      }t        j                  dg |gt        j                  dt        j                  |j                  t        |      d            }||j                  d<   | j                  j	                  d	d
      |_        | j                  j                  |g       | j                   j#                  |       | j$                  | j&                  |j                  <   y )N)dtypeConstantconstant_shapeconst_tensorT)name	data_typedimsvalsraw)inputsoutputsvalue   r   Reshape_Fuse)npasarrayint64r
   create_node_namer   	make_nodemake_tensorr   INT64shapebytesinputr   nodes_to_removeextendnodes_to_addappendthis_graph_namenode_name_to_graph_name)r   r*   reshape_nodeconcat_nodeshape_valueconstant_shape_namenew_nodes          r   replace_reshape_nodez"FusionReshape.replace_reshape_node   s    jjbhh7"jj99*FVW##()$$#%++ &&;'	
 !41 JJ77	>R##[M2  *6:6J6J$$X]]3r   c                    |j                   d   |vry ||j                   d      }|j                  dk7  s0t        |j                         dk  st        |j                         dkD  ry | j                  j	                  |g dg d|      }|y |\  }}}| j                  j	                  |g dg d|      }	|	y |	\  }
}}g }| j                  j                  |j                   d         }|dk(  r|j                  d       | j                  j                  |j                   d         }|dk(  r|j                  d       t        |      d	k7  ry g }g }||g}t        |j                         dk(  r| j                  j                  |j                   d	         | j                  j	                  |g d
g d|      }|%| j                  j	                  |g dg d|      }|y | j                  j	                  |g d
g d|      }|%| j                  j	                  |g dg d|      }|y |j                  |d   |d   g       |j                  d       nt        |j                         d	kD  rv| j                  j                  |j                   d	         }|y t        |t        j                        r |j                  |j                                n|j                  |       t        |j                         dk(  r| j                  j                  |j                   d         ud|v ry | j                  j	                  |g dg d|      }|%| j                  j	                  |g dg d|      }|y |j                  |d   g       |j                  d       nt        |j                         dkD  rv| j                  j                  |j                   d         }|y t        |t        j                        r |j                  |j                                n|j                  |       |j                   d   }d}|D ]  }|j                   d   |k7  sd} |sy | j                  |||       d| _        y )Nr!   Concat      )	UnsqueezeGatherShape)r   r   r   )r!   r   r   r      )r=   Mulr>   r?   )r@   r   r   r   )r=   rA   SqueezeSlicer?   )r@   r   r   r   r   )r@   r   r!   r   )r@   r   r!   r   r   )r=   Divr>   r?   )r;   r   r   r   )r=   rE   rB   rC   r?   )r;   r   r   r   r   TF)r,   op_typelenr
   match_parent_pathget_constant_valuer0   r.   
isinstancer#   ndarraytolistr8   r   )r   r3   input_name_to_nodesoutput_name_to_noder4   path0unsqueeze_0gather_0shape_0path1unsqueeze_1gather_1shape_1r*   gather_valuepath2path3shape_nodesconcat_value
root_inputsame_shape_input
shape_nodes                         r   fusezFusionReshape.fuse*   s3   a (;;),*<*<Q*?@(*c+2C2C.Dq.HCP[PaPaLbefLf

,,,	
 =+0(h

,,,	
 =+0(hzz44X^^A5FG1LLOzz44X^^A5FG1LLOu:?({  !Q&4::+H+HIZIZ[\I]+^+fJJ007#	E }

44E#'	 =JJ007#	E }

44E#'	 =b	5956LL""#a'::889J9J19MNL#,

3\0023\*{  !Q&4::+H+HIZIZ[\I]+^+fU{JJ007#	E }

44E#'	 =b	{+LL""#a'::889J9J19MNL#,

3\0023\*!''*
%J"j0#(  &  !!%{C  r   )__name__
__module____qualname__r   r   r8   r_   __classcell__)r   s   @r   r	   r	      s    'i 'K*C r   r	   )loggingr   numpyr#   fusion_baser   onnxr   r   
onnx_modelr   r`   loggerr	    r   r   <module>rk      s.       $  	8	] F ] r   