
    `i                     j    S SK Jr  S SKJrJrJr  S SKJr  S SKJ	r	  S SK
r\" \5      r " S S\	5      rg)    )	getLogger)helpernumpy_helperTensorProto)	OnnxModel)FusionNc                   6   ^  \ rS rSrS\4U 4S jjrS rSrU =r$ )FusionReshape   modelc                 (   > [         TU ]  USS5        g )NReshape)super__init__)selfr   	__class__s     l/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/onnxruntime_tools/transformers/fusion_reshape.pyr   FusionReshape.__init__   s    	95    c                    UR                   S   U;  a  g X1R                   S      nUR                  S:w  d2  [        UR                   5      S:  d  [        UR                   5      S:  a  g U R                  R	                  U/ SQ/ SQU5      nUc  g Uu  pgnU R                  R	                  U/ SQ/ SQU5      n	U	c  g U	u  pn/ nU R                  R                  UR                   S   5      nUS:X  a  UR                  S5        U R                  R                  UR                   S   5      nUS:X  a  UR                  S5        [        U5      S	:w  a  g / n/ nX/n[        UR                   5      S:X  a  U R                  R                  UR                   S	   5      c  U R                  R	                  U/ S
Q/ SQU5      nUc&  U R                  R	                  U/ SQ/ SQU5      nUc  g U R                  R	                  U/ S
Q/ SQU5      nUc&  U R                  R	                  U/ SQ/ SQU5      nUc  g UR                  US   US   /5        UR                  S5        O[        UR                   5      S	:  az  U R                  R                  UR                   S	   5      nUc  g [        R                  " U5      n[        U[        5      (       a  UR                  U5        OUR                  U5        [        UR                   5      S:X  a  U R                  R                  UR                   S   5      cy  SU;   a  g U R                  R	                  U/ SQ/ SQU5      nUc&  U R                  R	                  U/ SQ/ SQU5      nUc  g UR                  US   /5        UR                  S5        O[        UR                   5      S:  az  U R                  R                  UR                   S   5      nUc  g [        R                  " U5      n[        U[        5      (       a  UR                  U5        OUR                  U5        UR                   S   nSnU H  nUR                   S   U:w  d  M  SnM     U(       d  g [        R                  " U[        R                  S9nU R                  R!                  SS5      n["        R$                  " S/ U/["        R&                  " S[(        R*                  UR,                  [/        U5      SS9S9nUUR                   S'   U R                  R!                  SS5      Ul        U R2                  R                  U/5        U R2                  R                  U5        U R2                  R                  U	5        U R2                  R                  U5        U R2                  R                  U5        U R4                  R                  U5        g )N   Concat      )	UnsqueezeGatherShape)r   r   r   )r   r   r   r      )r   Mulr   r   )r   r   r   r   )r   r   SqueezeSlicer   )r   r   r   r   r   )r   r   r   r   )r   r   r   r   r   )r   Divr   r   )r   r   r   r   )r   r#   r    r!   r   )r   r   r   r   r   TF)dtypeConstantconstant_shapeconst_tensor)name	data_typedimsvalsraw)inputsoutputsvaluer   Reshape_Fuse)inputop_typelenr   match_parent_pathget_constant_valueappendget_initializerextendr   to_array
isinstancelistnpasarrayint64create_node_namer   	make_nodemake_tensorr   INT64shapebytesr(   nodes_to_removenodes_to_add)r   reshape_nodeinput_name_to_nodesoutput_name_to_nodeconcat_nodepath0unsqueeze_0gather_0shape_0path1unsqueeze_1gather_1shape_1rC   gather_valuepath2path3shape_nodesconcat_2concat_valueconcat_3
root_inputsame_shape_input
shape_nodeshape_valueconstant_shape_namenew_nodes                              r   fuseFusionReshape.fuse   s,   a (;;)*<*<Q*?@(*c+2C2C.Dq.HCP[PaPaLbefLf

,,[:Z\e-@B=+0(

,,[:Z\e-@B=+0(zz44X^^A5FG1LLOzz44X^^A5FG1LLOu:?({  !Q&4::+E+EkFWFWXYFZ+[+cJJ00>egs1DFE}

44!RTc') =JJ00>egs1DFE}

44!RTc') =b	5956LL+##$q(zz11+2C2CA2FGH'00:L,--\*\*{  !Q&4::+E+EkFWFWXYFZ+[+cU{JJ00>egs1DFE}

44!RTc') =b	{+LL+##$q(zz11+2C2CA2FGH'00:L,--\*\*!''*
%J"j0#(  &  jjbhh7"jj99*FVW##J+--@,A*0*<*<.GRGXGXBMBSBSBGBTAE	+GH !41 JJ77	>R##[M2##E*##E*##E*##E*  *r    )	__name__
__module____qualname____firstlineno__r   r   r`   __static_attributes____classcell__)r   s   @r   r
   r
      s    6i 6w+ w+r   r
   )loggingr   onnxr   r   r   
onnx_modelr   fusion_baser   numpyr<   rc   loggerr
   rb   r   r   <module>ro      s1     2 2    	8	{+F {+r   