
    g             	          d dl Z d dlZd dlZd dlZd dlZd dlmZmZmZ d dl	m
Z
  e
j                  ej                         e
j                  d      k\  sJ  ej                  e      ZddZd Zd Zd Zd	 Zd
 Zd Zd Zd Zd ZddZd Zd Zd Z G d d      Zd Zedk(  rD e       Z ejC                  de jD                  z          e jF                  rejC                  de jF                  z          ejC                  d       ejI                   ejJ                  e jD                        e jL                  e jN                  e jP                  e jR                        Z*e jF                  re*r}e jV                  rB ejX                  e*e jF                  de jZ                  e j\                  e j^                  d       n ej`                  e*e jF                         ejC                  d       yyyy)    N)helpernumpy_helpershape_inference)versionz1.8.0c                     | j                   D cg c]  }|j                  |k(  s| }}|rt        j                  |d         S |S c c}w Nr   )	attributenamer   get_attribute_value)node	attr_namedefault_valueattrfounds        [/var/www/openai/venv/lib/python3.12/site-packages/onnxruntime/tools/symbolic_shape_infer.pyget_attributer      sI    "nnGnd		Y0FTnEG))%(33 Hs
   AAc                 |    t        | j                  d            t        u rt        | | j                  d            S d S )Nvalue)type
WhichOneofstrgetattrdims    r   get_dim_from_protor      s4    489P4QUX4X73w/0b^bb    c                 :    | j                  d      }|dv sJ |dk(  S )Nr   )tensor_typesequence_typer   )r   )
type_protocls_types     r   is_sequencer"      s,    $$W-H7777&&r   c                     t        |       rJ | j                  j                  d      r7| j                  j                  j                  D cg c]  }t        |       c}S y c c}w )Nshape)r"   r   HasFieldr$   r   r   )r    ds     r   get_shape_from_type_protor'   $   s\    :&&&&&w//9/E/E/K/K/O/OP/O!"1%/OPP Qs   A!c                     t        |       r*| j                  j                  j                  j                  S | j                  j                  S N)r"   r   	elem_typer   )r    s    r   get_elem_type_from_type_protor+   ,   s:    :''11==GGG%%///r   c                 J   | j                   j                  d      }|y t        | j                         r\| j                   j                  j                  j                  d      dk(  r)t        | j                   j                  j                        S y t        | j                         S )Nr   r   )r   r   r"   r   r*   r'   )vir!   s     r   get_shape_from_value_infor.   3   s{    ww!!'*H27777  **55g>-O,RWW-B-B-L-LMM(11r   c                 <    t        j                         }| |_        |S r)   )onnxValueInfoProtor
   )r
   r-   s     r   make_named_value_infor2   @   s    				BBGIr   c                 r    | D cg c]'  }|d n t        |      rt        |      n
t        |      ) c}S c c}w r)   )
is_literalintr   )sympy_shapeis     r   get_shape_from_sympy_shaper8   F   s5    R]^R]QAIDjmCFQHR]^^^s   ,4c                     t        |       t        t        j                  t        j                  t
        j                  fv xs t        | d      xr | j                  S )N	is_number)	r   r5   npint64int32sympyIntegerhasattrr:   r   s    r   r4   r4   J   s?    9bhh%--@@qWSR]E^Epcfcpcpqr   c                 4    | |k  r| | k\  sJ | dk\  r| S || z   S r    )axisranks     r   handle_negative_axisrE   N   s,    $;4D5=((194-$+-r   c                     |xs g d}t        |      t        k7  r|g}| j                  D ]  }|j                  |v s|j                  c S  y )N) r0   zai.onnx)r   listopset_importdomainr   )mprJ   opsets      r   	get_opsetrM   S   sI    ..FF|t<<6!==  ! r   c                     t        |       t        u rt        |       dk(  sJ | d   S t        |       t        j                  u r| j                         S | S N   r   )r   rH   lenr;   ndarrayitemxs    r   	as_scalarrV   ^   sF    Aw$1v{{t	aBJJ	vvxr   c                     t        |       t        u r| S t        |       t        j                  u rt        |       S |r| y | gS r)   )r   rH   r;   rR   )rU   	keep_nones     r   as_listrY   h   s<    Aw$	aBJJ	Aw	qys
r   c                 r    t        |       t        u r#t        j                  d      }| D ]  }||z  }	 |S | }|S NrP   )r   rH   r>   r?   )rU   r   vs      r   sympy_reduce_productr]   s   sA    Aw$a AAIE  L Lr   c                       e Zd ZdzdZd{dZd{dZd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd|dZd}dZd Zd Zd Zd Zd~dZddZd{dZddZddZd Zd Zd Zd Zd Z d  Z!d! Z"d" Z#d# Z$d$ Z%d% Z&d& Z'd' Z(d( Z)d) Z*d* Z+d+ Z,d, Z-d- Z.d. Z/d/ Z0d0 Z1d1 Z2d2 Z3d3 Z4d4 Z5d5 Z6d6 Z7d7 Z8d8 Z9d9 Z:d: Z;d; Z<d< Z=d= Z>d> Z?d? Z@d@ ZAdA ZBdB ZCdC ZDdD ZEdE ZFdF ZGdG ZHdH ZIdI ZJdJ ZKdK ZLdL ZMdM ZNdN ZOdO ZPdP ZQdQ ZRdR ZSdS ZTdT ZUdU ZVdV ZWdW ZXdX ZYdY ZZdZ Z[d[ Z\d\ Z]d] Z^d^ Z_d_ Z`d` Zada Zbdb Zcdc Zddd Zede Zfdf Zgdg Zhdh Zidi Zjdj Zkdk Zldl Zmdm Zndn Zodo Zpdp Zqdq Zrdr Zsds Ztd~dtZudu Zvdv ZwddwZxdx Zyezddy       Z{y)SymbolicShapeInferencec                 h   i d| j                   d| j                  d| j                  d| j                  d| j                  d| j
                  d| j                  d| j                  d	| j                  d
| j                  d| j                  d| j                  d| j                  d| j                   d| j                  d| j                  d| j                   i d| j                   d| j                  d| j                   d| j"                  d| j                  d| j                  d| j$                  d| j&                  d| j(                  d| j*                  d| j                  d| j                   d| j                  d| j                  d | j                   d!| j                  d"| j                   i d#| j,                  d$| j.                  d%| j0                  d&| j2                  d'| j4                  d(| j                  d)| j6                  d*| j8                  d+| j:                  d,| j<                  d-| j                  d.| j>                  d/| j@                  d0| jB                  d1| jD                  d2| jF                  d3| jH                  i d4| jJ                  d5| jL                  d6| jL                  d7| jL                  d8| jN                  d9| jP                  d:| jR                  d;| j                   d<| jT                  d=| jV                  d>| jX                  d?| jZ                  d@| j                   dA| j\                  dB| j                   dC| j^                  dD| j`                  i dE| jb                  dF| jd                  dG| jf                  dH| jh                  dI| jj                  dJ| jl                  dK| jn                  dL| jp                  dM| jr                  dN| jt                  dO| jv                  dP| jx                  dQ| jz                  dR| j|                  dS| j~                  dT| j                  dU| j                  | j                  | j                  | j                  | j                  | j                  | jl                  | j                  | j                  | j                  | j                  | jz                  | j                  | j                  | j                  | j                  dV| _N        i dW| j                  dX| j                  dY| j                  dZ| j                  d[| j                  d\| j                  d]| j                  d^| j                  d_| j                  d`| j                  da| j                  db| jX                  dc| j                  dd| j                  de| j                  df| j                  dg| j                  | _X        dh| _Y        i | _Z        i | _[        i | _\        || _]        || _^        || __        || _`        di| _a        || _b        y )jNAddArrayFeatureExtractorAveragePoolBatchNormalizationCastCategoryMapperCompressConcatConcatFromSequenceConstantConstantOfShapeConvCumSumDivEinsumExpandEqualFloorGatherGatherElementsGatherNDIdentity	AllReduceIfLoopMatMulMatMulInteger16MaxPoolMaxMemcpyFromHostMemcpyToHostMinMoEMulNonMaxSuppressionNonZeroOneHotPadRange
Reciprocal	ReduceSum
ReduceProdReshapeResizeRoundScanScatterElements
SequenceAtSequenceInsertShapeSizeSliceSoftmaxCrossEntropyLossSoftmaxCrossEntropyLossInternal!NegativeLogLikelihoodLossInternalSplitSplitToSequenceSqueezeSubTileTopK	Transpose	UnsqueezeWhereZipMapNeg	AttentionBiasAddBiasGeluBiasSplitGeluDecoderMaskedMultiHeadAttentionDequantizeLinearEmbedLayerNormalizationFastGeluGatedRelativePositionBiasGeluGemmFastGelu
GemmFloat8	GroupNormGroupQueryAttentionLayerNormalizationLongformerAttentionMatMulNBitsMultiHeadAttentionNhwcConv)PackedAttentionPackedMultiHeadAttentionPagedAttentionPythonOpQuantizeLinear	QuickGeluRelativePositionBiasRemovePaddingRestorePaddingRotaryEmbeddingSimplifiedLayerNormalizationSkipGroupNormSkipLayerNormalization SkipSimplifiedLayerNormalizationSparseAttention	embedding
bitwise_ordiagonalmax_pool2d_with_indicesmaxminmultinomialunfoldargmax
avg_pool2d_adaptive_avg_pool2dnumpy_Tnative_group_normupsample_nearest1dupsample_nearest2dupsample_nearest3dupsample_bicubic2dTr   )c_infer_symbolic_compute_ops_infer_ArrayFeatureExtractor_infer_Pool_infer_BatchNormalization_infer_Cast_infer_CategoryMapper_infer_Compress_infer_Concat_infer_ConcatFromSequence_infer_Constant_infer_ConstantOfShape_infer_Conv_pass_on_shape_and_type_infer_Einsum_infer_Expand_infer_Gather_infer_GatherElements_infer_GatherND	_infer_If_infer_Loop_infer_MatMul_infer_MatMulInteger_infer_NonMaxSuppression_infer_NonZero_infer_OneHot
_infer_Pad_infer_Range_infer_ReduceSum_infer_ReduceProd_infer_Reshape_infer_Resize_infer_Scan_infer_ScatterElements_infer_SequenceAt_infer_SequenceInsert_infer_Shape_infer_Size_infer_Slice_infer_SoftmaxCrossEntropyLoss_infer_Split_infer_SplitToSequence_infer_Squeeze_infer_Tile_infer_TopK_infer_Transpose_infer_Unsqueeze_infer_ZipMap_infer_Attention_infer_BiasAdd_infer_BiasGelu_infer_BiasSplitGelu&_infer_DecoderMaskedMultiHeadAttention_infer_DequantizeLinear_infer_EmbedLayerNormalization_infer_FastGelu _infer_GatedRelativePositionBias_infer_Gelu_infer_GemmFastGelu_infer_GemmFloat8_infer_GroupNorm_infer_GroupQueryAttention_infer_LayerNormalization_infer_LongformerAttention_infer_MatMulNBits_infer_MultiHeadAttention_infer_NhwcConv_infer_PackedAttention_infer_PackedMultiHeadAttention_infer_PagedAttention_infer_PythonOp_infer_QuantizeLinear_infer_RelativePositionBias_infer_RemovePadding_infer_RestorePadding_infer_RotaryEmbedding_infer_SkipGroupNorm_infer_SkipLayerNormalization_infer_SparseAttentiondispatcher__infer_aten_bitwise_or_infer_aten_diagonal_infer_aten_pool2d_infer_aten_minmax_infer_aten_multinomial_infer_aten_unfold_infer_aten_argmax_infer_aten_group_norm_infer_aten_upsampleaten_op_dispatcher_run_suggested_merge_symbolic_dims_input_symbols_auto_merge_guess_output_rank_verbose_int_max_subgraph_id_prefix_)selfint_max
auto_mergeguess_output_rankverboseprefixs         r   __init__zSymbolicShapeInference.__init__~   s   f
433f
#T%F%Ff
 4++f
 !$"@"@	f

 D$$f
 d88f
 ,,f
 d((f
 !$"@"@f
 ,,f
 t::f
 D$$f
 d22f
 433f
 d((f
  d((!f
" T55#f
$ T55%f
& d(('f
( d88)f
* ,,+f
, 44-f
. 55/f
0 $..1f
2 D$$3f
4 d((5f
6 t887f
8 t''9f
: 433;f
< d::=f
> D88?f
@ 433Af
B 4//Cf
D 433Ef
F  !>!>Gf
H t**If
J d((Kf
L 4??Mf
N T&&Of
P $66Qf
R ..Sf
T $00Uf
V t**Wf
X d((Yf
Z T11[f
\ D$$]f
^ t::_f
` $00af
b d88cf
d T&&ef
f D$$gf
h T&&if
j &t'J'Jkf
l .t/R/Rmf
n 01T1Tof
p T&&qf
r t::sf
t t**uf
v 433wf
x D$$yf
z D$${f
| ..}f
~ ..f
@ T55Af
B d((Cf
D 433Ef
H ..If
J t**Kf
L ,,Mf
N T66Of
P .t/Z/ZQf
R  < <Sf
T &t'J'JUf
V ,,Wf
X ()N)NYf
Z D$$[f
\ D44]f
^ $00_f
` ..af
b "4#B#Bcf
d !$"@"@ef
f "4#B#Bgf
h 422if
j !$"@"@kf
l ,,mf
n  $::(,(L(L"88,,"88--$($D$D!66"88#::,0,J,J!66&*&H&H040R0R#::Kf
N$
++$
$55$
 11$
 &t'>'>	$

 4**$
 4**$
 477$
 d--$
 d--$
 $11$
 #D$;$;$
 t,,$
  !<!<$
 !$";";$
 !$";";$
  !$";";!$
" !$";";#$
 & 	 "  %"3r   c                    t        |D cg c]0  }t        |      t        u xr || j                  v xs t	        |      2 c}      sJ t        |      }| j                  j                         D ],  \  }}||v s|j                  |       |j                  |       . d }|D ]  }t	        |      s|} n ||D ]  }|| j                  v s|} n |3|D ].  }t        | j                  |         t        j                  u s,|} n || j                  dkD  r%t        j                  ddj!                  |             t#        |      }|D cg c]  }t%        |       }}||j'                  t)        |               }|j                  |       |D ]  }||k(  r	t	        |      r$t	        |      rt+        |      t+        |      k(  sJ t	        |      rt+        |      n|| j                  |<   | j                  j                         D ]  \  }}||k(  s|| j                  |<     |r| j,                  r| j/                          y y y c c}w c c}w )Nr   z9Potential unsafe merge between symbolic expressions: (%s),)allr   r   r1  r4   setr0  itemsremoveaddr2  r>   Symbolr5  loggerwarningjoinrH   rQ   indexr   r5   r3  _apply_suggested_merge)	r9  symbolsapplyskr\   map_tosymbols_listlenss	            r   _add_suggested_mergez+SymbolicShapeInference._add_suggested_merge  s0   \cd\cWXT!W^@T-@-@(@RZPQ]R\cdeeeg,))//1DAqG|q!A 2 A!} 
 >+++F  >++A./5<<?F 
 >}}q Z\_\d\del\mn=L$01LqCFLD1!$**SY"78FNN6"AF{&!jm6{c!f,,,6@6Hs6{fD!!!$--33516/5D))!, 6  T%%'') &5S e8 2s   5I	I	c                    | j                   sy t        | j                  j                  j                        |rg n(t        | j                  j                  j
                        z   D ]  }|j                  j                  j                  j                  D ]W  }|j                  | j                   v s| j                   |j                     }t        |      rt        |      |_        Q||_
        Y  y r)   )r0  rH   out_mp_graphinput
value_infor   r   r$   r   	dim_paramr4   r5   	dim_value)r9  graph_input_onlyr7   r&   r\   s        r   rL  z-SymbolicShapeInference._apply_suggested_merge1  s    $$dll((../9I2tTXT`T`TfTfTqTqOrsAVV''--11;;$"7"77--akk:A!!}&)!f&' 2 tr   c                 H   t        j                         | _        | j                  j                  |       t	        | j                  j
                  j                        D ci c]  }|j                  | c}| _        | j                  j
                  j                  D ci c]  }|j                  | c}| _
        t	        | j                  j
                  j                        D ci c]  }|j                  | c}| _        | j                  j                  | j                  j
                  j                  D ci c]K  }|j                  t        j                  |j                  |j                  t	        |j                               M c}       y c c}w c c}w c c}w c c}w r)   )r0   
ModelProtorV  CopyFromrH   rW  rX  r
   graph_inputs_initializerinitializers_	known_vi_updater   make_tensor_value_info	data_typedims)r9  in_mpr7   s      r   _preprocessz"SymbolicShapeInference._preprocess=  s9   (e$15dll6H6H6N6N1OP1OAaffai1OP151C1C1O1OP1OAaffai1OP-1$,,2D2D2J2J-KL-K!&&!)-KL ++777A 55affakk4PQPVPV<XX7	
 QPLs    FF%F8AFc                 j   t        |D cg c]  }t        |      t        u  c}      s| j                  rt	        t        |            }|D cg c]  }t        |       }}t        |      dk  sJ t        |      dk(  rb|j                  d      }| j                  dkD  r*t        j                  d|d | ||dz   d  z    d||           | j                  |d       ||   S | j                  dkD  r!t        j                  d|dd   d|d           |d   S y t        |D cg c]
  }||d   k(   c}      r|d   S |D cg c]  }| j                  j                  ||        }}t        |D cg c]
  }||d   k(   c}      r|d   | j                  v sJ |d   S y c c}w c c}w c c}w c c}w c c}w )NrP   r   zdim z has been merged with value Fallow_broadcastz has been merged with dim )rB  r   r   r3  rH   rC  r4   sumrK  r5  rH  debug_check_merged_dimsr0  getr1  )r9  rg  r&   unique_dimsis_intint_dimmergeds          r   _merge_symbolsz%SymbolicShapeInference._merge_symbolsJ  s   D1DqDGsND12"3t9o1<=A*Q-=6{a'''v;!#$ll1oG}}q(";x#8;wQR{};U#U"VVrs~  @G  tH  sI  J ++K+O&w//}}q(tKO+<<VWbcdWeVf%gh7Nd+dT!Wd+,7N;?@4a$''++Aq14@/1VAY/0!9 3 3333!95 2 >  ,@/s   FF! F&?#F+-F0c                    g }t        |      }t        |      }t        ||      }t        |      D ]  }||k  r||dz
  |z
     nd}||k  r||dz
  |z
     nd}	|dk(  s||	k(  r|	}
no|	dk(  r|}
ng| j                  ||	g      }
|
sR| j                  r| j                  ||	gd       n0t        j                  dt        |      z   dz   t        |	      z          |
g|} |S )NrP   TrN  zunsupported broadcast between  )	rQ   r   rangeru  r3  rT  rH  rI  r   )r9  shape1shape2	new_shaperank1rank2new_rankr7   dim1dim2new_dims              r   _broadcast_shapesz(SymbolicShapeInference._broadcast_shapesh  s    	FFue$xA,-I6%!)a-(1D,-I6%!)a-(1DqyDDL--tTl; ''114,d1K'G#d)'SVY'Y\_`d\e'ef -9-I# !$ r   c                     |j                   |   }|| j                  v r| j                  |   }t        |      S || j                  v sJ t	        | j                  |   j
                        S r)   )rX  rc  r.   rb  rH   rg  r9  r   idxr
   r-   s        r   
_get_shapez!SymbolicShapeInference._get_shape  sd    zz#4>>!%B,R004-----**405566r   c                 
   |t        |j                        dz
  kD  ry |j                  |   }|| j                  v r| j                  |   }t        |      S || j                  v r"t        | j                  |   j                        S y r[   )rQ   rX  rc  r.   rb  rH   rg  r  s        r   _try_get_shapez%SymbolicShapeInference._try_get_shape  sy    TZZ1$$zz#4>>!%B,R004%%%**405566r   c                 8    t        | j                  ||            S r)   )rQ   r  )r9  r   r  s      r   _get_shape_rankz&SymbolicShapeInference._get_shape_rank  s    4??4-..r   c                    g }| j                  ||      D ]o  }t        |      t        u rE|j                  || j                  v r| j                  |   nt        j                  |dd             Yd |usJ |j                  |       q |S )NTintegernonnegative)r  r   r   appendr1  r>   rG  )r9  r   r  r6   r&   s        r   _get_sympy_shapez'SymbolicShapeInference._get_sympy_shape  s    s+AAw#~""D/// ''*a4H 1}$}""1% , r   c                     |j                   |   }|| j                  v s|| j                  v sJ || j                  v r| j                  |   S t        j                  | j                  |         S r)   )rX  sympy_data_rb  r   to_arrayr9  r   r  r
   s       r   
_get_valuez!SymbolicShapeInference._get_value  sk    zz#t'''443E3E+EEE)-1A1A)At%v|G\G\]a]o]opt]uGvvr   c                     |t        |j                        k\  ry |j                  |   }|| j                  v s|| j                  v r| j	                  ||      S y r)   )rQ   rX  r  rb  r  r  s       r   _try_get_valuez%SymbolicShapeInference._try_get_value  sQ    #djj/!zz#4###tt/A/A'A??4--r   c                 l   t        |      D ]  \  }}t        |      rt        |      t        k7  s%t        |      }|| j                  v r9t        | j                  |         rW| j
                  | j                  |      ||<   wt        |      | j
                  vs|| j
                  t        |      <    y r)   )	enumerater4   r   r   r0  r1  )r9  new_sympy_shaper7   r  str_dims        r   _update_computed_dimsz,SymbolicShapeInference._update_computed_dims  s    #O4JAwg&4=C+?g,d333!$"7"7"@A )-)<)<T=R=RSZ=[)\OA& 7|4+>+>><C++CL9 5r   c                    |j                   dv }|s-g }t        | j                        dk\  rP|j                   dv rB|j                  D cg c]-  }|| j                  v r|| j
                  vr| j                  |   / }}|j                   dv r|j                  d   | j                  v r| j                  |j                  d      }t        t        |j                              }t        t        |j                              D cg c]  }| j                  ||       }}t        ||j                   dv rdndz
        D ]W  }	|D 
cg c](  }
t        |
      |	z   |k\  s|
t        |
      |z
  |	z      * }}
t        |      dkD  sE| j                  |d	
       Y t        j                  |gd|j                  D cg c]  }|s| j                  |    c}|j                  D cg c]  }t!        |       c}|      }| j"                  j$                  j'                  |       t)        j*                  | j"                        | _        t        t        |j                              D ]  }|j                  |   }|s| j                  j$                  j,                  j/                         }|s3|j'                  | j"                  j$                  j                  |          n||_        || j                  |<    y c c}w c c}w c c}
w c c}w c c}w )N)"rx   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   	   )r   	ra   r   r   rn   rz   MatMulIntegerr{   r   Sumr   rz   r  r{      rP   Trk  tmp)op_typerM   rV  rX  rb  r`  outputrc  rQ   r'   r   ry  r  ro  r   
make_graphr2   tmp_mp_rW  r_  r   infer_shapesrY  rF  r
   )r9  r   
skip_inferinitializersr
   r-   out_rankr7   	in_shapesr&   rO  in_dims	tmp_graphi_oos                  r   _onnx_infer_single_nodez.SymbolicShapeInference._onnx_infer_single_node  s   \\ #&
 #

J  L$,,'1,$,,-2O !%

  * 2 22t4CUCU7U &&t, *    || 
  
 ;;q>T^^3A7B"#<RWW#EFHCHTZZCY ZCYaq!9CYI Z" 9g)gAmno FO"iYRUVWRX[\R\`hRh1SVh%6%:#;Y"iw<!+ 33GT3R )),0JJ<Jq!"J<37;;?;a&q);?I LL''	2*77EDLT[[)*CC A\\''22668!KK 2 2 9 9# >?BG$&q! +S ( ![ #j =?s*   2K. K3 K8K83K=;K=Lc                 	   | j                   dkD  r?t        j                  d|j                   d|j                  d    d|j
                          t        |j                        t        |j                        z   D ch c]  }|j                   }}| j                  D ch c]	  }||vs| }}t        j                  t        |j                        dt        |j                        |D cg c]  }| j                  |    c}z   |j                  D cg c]  }t        |j                         c}      }	|	j                  j                  | j                  j                   j                  D cg c]  }|j                  |v s| c}       |	j                  j                  |j                         | j"                  j                   j%                  |	       t'        | j(                  | j*                  | j,                  | j                   | j.                  dz   t1        | j2                        z         }
|r| xj2                  d	z  c_        |
j5                  | j"                         | j6                  j9                         |
_        |
j:                  r6|
j=                  | j>                  j9                                |
j:                  r6|
jA                          |r`|jC                  d
       |j                  j                  |
j                  j                   j                  d tE        |j                                |jC                  d       |j                  j                  |
j                  j                   j                         |jC                  d       |jF                  j                  |
j                  j                   jF                         |jC                  d       |j                  j                  |
j                  j                   j                         |
j                  j                   j                  D cg c]  }tI        |       }}|D ch c]/  }|s|D ]%  }tK        |      t0        u s|| jL                  vs$|' 1 }}}i }|D ]$  }||
jL                  v sJ |
jL                  |   ||<   & | jL                  jO                  |       |
S c c}w c c}w c c}w c c}w c c}w c c}w c c}}w )Nr  zInferencing subgraph of node z with output(r   z...): r  _)r>  rP   rX  r  rY  r   )(r5  rH  rn  r
   r  r  rH   ra  rX  rc  r   r  r   r2   extendrV  rW  r  r_  r_   r6  r3  r4  r8  r   r7  ri  r0  copyr/  _infer_implr  _update_output_from_vi
ClearFieldrQ   rY  r.   r   r1  rd  )r9  r   subgraphuse_node_inputinc_subgraph_idr7   subgraph_inputsr
   subgraph_implicit_inputr  symbolic_shape_inferencer  subgraph_shapesrO  r&   subgraph_new_symbolic_dimsnew_dimss                    r   _onnx_infer_subgraphz+SymbolicShapeInference._onnx_infer_subgraph"  s   ==1LL8=QUQ\Q\]^Q_P``fgkgsgsftuv
 ,00D0D+EX^^H\+\]+\a166+\]48NN"bNDdRaFa4N"b%% ?V#W?V!DNN1$5?V#WW4<OODOq"166*OD	
	 	$$1C1C1O1O%u1OASTSYSY]tSta1O%uv$$X%9%9:##I.#9MM##MM<<#%D,=,=(>>$
  " ,,T\\:484I4I4N4N4P 1&++$001A1A1F1F1HI '++ 779(NN!!":"B"B"H"H"N"NO`QTUYU_U_Q`"abH%7??EELLML)""#;#C#C#I#I#T#TUF#5==CCHHIAYAaAaAgAgAnAnoAnA4Q7Ano&&
&!!Q$q'S.QVZViViMiAQA 	# &
 +A0?????2AA!DHQK , 	""8,''_ ^"b $XD%u< p&
sH   <S	S)S+SS-S"S"6S'S,S,.S,=S,c                 d   d }t        t        |j                              D cg c]  }| j                  ||       }}t	        |D cg c]  }|d u c}      rt        |      D ]  \  }}t        |      t        j                  ur"t        |j                        dkD  rd }n`t        |j                        dk(  r ||j                         |      }n0t        |j                        dk(  sJ |D 	cg c]  }	 ||	|       }}	|||<    |D cg c]  }t        |t              rt        |      nd! }
}t        |
      }|dk\  rY|rWt        |      D ]I  \  }}|	t        |t              r(t        |      |k  r	||z  ||<   0t        |      |k(  r?J |g|z  ||<   K |S c c}w c c}w c c}	w c c}w )Nc                 0    |r
| dz  dk7  r| S t        |       S rO   )r5   )r   allow_float_valuess     r   int_or_floatzESymbolicShapeInference._get_int_or_float_values.<locals>.int_or_float[  s    !eai1nu:r   rP   r   )ry  rQ   rX  r  rB  r  r   r;   rR   r$   rS   
isinstancerH   r   )r9  r   	broadcastr  r  r7   valuesr\   new_vvv
values_lenmax_lens               r   _get_int_or_float_valuesz/SymbolicShapeInference._get_int_or_float_valuesZ  s   	 9>c$**o8NO8N1$%%dA.8NOv.v!v./!&)17"**,qww<!# E\Q&(3EFEqww<1,,,LMNAb\".@AAEN!q	 * EKKFq
1d 3c!f:F
Kj/a<I!&)19a&1v'$%Kq	"1v000!"gF1I * 9 P. OKs   FF#0F($F-c                     t        |j                        dk(  sJ |j                  dv r| j                  |dd      }n| j                  |d      }t	        |D cg c]  }|d u c}      r|D cg c]  }t        |t               }}t        |      }|r7t        | D cg c]
  } ||       c}| j                  |j                  d   <   y  ||      | j                  |j                  d   <   y y c c}w c c}w c c}w )NrP   )r   rn   T)r  r  )r  r   )
rQ   r  r  r  rB  r  rH   anyzipr  )r9  r   op_funcr  r\   is_listrY   vss           r   _compute_on_sympy_dataz-SymbolicShapeInference._compute_on_sympy_data  s    4;;1$$$
 <<>)2244\`2aF22442HFv.v!v./4:;Fqz!T*FG;'lGJMv,3W,BGBK,3W  Q03:6?  Q0 0.; 4Xs   C10C6 C;c                 z    t        |j                        dk(  s|j                  dv sJ | j                  |d        y )NrP   )r   r   r   c                     | d   S r   rB   rT   s    r   <lambda>z<SymbolicShapeInference._pass_on_sympy_data.<locals>.<lambda>  s    AaDr   )rQ   rX  r  r  r9  r   s     r   _pass_on_sympy_dataz*SymbolicShapeInference._pass_on_sympy_data  s>    4::!#t|| 8
 (
 	
 

 	##D.9r   c           
         | j                   |j                  d      }|j                  t        j                  |j                  d   t        | j                   |j                  d      j                        | j                  |d                   y r   )	rc  r  r_  r   re  r+   rX  r   r  )r9  r   r-   s      r   r   z.SymbolicShapeInference._pass_on_shape_and_type  sj    ^^DKKN+
))A-dnnTZZ].K.P.PQa(	
r   c                     | d| }|| j                   v r>| j                   |   }t        |      r t        j                  t	        |            }|S |}|S t        j
                  |dd      }|| j                  |<   |S )N_dTr  )r0  r4   r>   r?   r5   rG  r1  )r9  r>  r   r  r\   new_symbolic_dims         r   _new_symbolic_dimz(SymbolicShapeInference._new_symbolic_dim  s    HBse$d+++%%g.A8B1u}}SV4  	 LM    %||GTtT+;D(r   c           	          | j                  |j                   | j                   dt        | j                  j
                  j                        j                  |       d| d|      S )Nr  _o)r  r  r8  rH   rV  rW  r   rK  )r9  r   out_idxr   s       r   _new_symbolic_dim_from_outputz4SymbolicShapeInference._new_symbolic_dim_from_output  s`    %%||nT\\N!D1C1C1H1H,I,O,OPT,U+VVXY`Xaabc
 	
r   c                 `    t        |      D cg c]  }| j                  |||       c}S c c}w r)   )ry  r  )r9  rD   r   r  r7   s        r   _new_symbolic_shapez*SymbolicShapeInference._new_symbolic_shape  s.    NSTXkZk224!DkZZZs   +c           
      V   | j                  |d      }t        |j                        dkD  r>| j                  |d      }t        |      dz
  }|r	|| dz
  d n|| d  }|d   ||rdnd<   nd }t        |d      }t        |      }t        |      |dz   k(  sJ |r	|| dz
  d n|| d  }|D cg c]  }t	        |        }	}t        |	      st        | j                  |j                  d            }
t        |
      dkD  r{t        |      t        |
      k(  sJ |r3|
| dz
  d D cg c]  }t        j                  |       c}|| dz
  d |S |
| d  D cg c]  }t        j                  |       c}|| d  |S t        |ddg|z        }t        |ddg|z        }t        ||      D cg c]  \  }}|dz
  |z  dz    }}}t        |d	      }|dgd|z  z  }t        |d
d      j                  d      }|dk7  rv|dk7  rq	 t        || d  |      D cg c]  \  }}t        j                  ||       }}}t        |||      D cg c]  \  }}}t        d|dk(  r||z
  n||z
        ! }}}}nI|dk(  rg }nAdg|z  }n:t        |      d|z  k(  sJ t        |d | ||d        D cg c]
  \  }}||z    }}}t        |dd      }t!        |      D ]m  }|| |z   |rdndz      }t        |      dkD  r|||   z   }|r"t        j"                  |||   z
  ||   z        }n|||   z
  ||   z  }|dz   || |z   |rdndz   <   o |S c c}w c c}w c c}w c c}}w c c}}w c c}}}w # t        $ r5 t        ||      D cg c]  \  }}t        d||z
         nc c}}w }}}Y w xY wc c}}w )Nr   rP   r     kernel_shape	dilationsstridespadsauto_pads   NOTSETutf-8VALIDNOTSET	ceil_mode)r  rQ   rX  r   r4   r  r.   rc  r  r>   r?   r  decodeModr   	TypeErrorry  ceiling)r9  r   channels_lastr6   W_shaperD   r  spatial_shaper7   is_symbolic_dimsr$   r&   r  r  rP  effective_kernel_shaper  r  rO  residualr
total_padsp1p2r  effective_input_sizestrided_kernel_positionss                              r   _compute_conv_pool_shapez/SymbolicShapeInference._compute_conv_pool_shape  sf   ++D!4tzz?Q++D!4Gw<!#D6C7D519r2RVQVQWL5<QZK]2G(~>L|$D;4!8+++ 8ETEAI3+W[V[V\J]7DE}!
1-}E#$-dnnT[[^.LME5zA~;'3u:555 MRTXSX[\S\_aMb2cMb5==3CMb2cK	B/ #" FKD56]*S]5==+;]*SK'""!$aS4Z@	i!t<>A,PY>Z![>Zda1q5A+/>Z![T6*<3!d(#D$T:yAHHQH7"x8';	<?TEF@SU\<]^<]DAq		!Q<]H^ (++A7H'U"'UGAq! A!q&Aq1u>'U  " W$
S4Z
t9D(((03D$Kde0MN0Mfb""r'0MJN!$Q7	tA#.uqy-BUV/W#X :"';jm'K$+0==),B1,EEQRS,( -ACYZ[C\,\ahijak+k(D\_`D`K	=Ra@A  e F 3d*S
 "\  _" ! 478NPW4X"4XDAqAA4X"J " OsZ   *M#MM)M?M$  M2M$ $M*M$ &N%M$ $N"<N
N"!N"c                     |r)|D cg c]  }t        |      rt        |      dk  r|  }}t        |D cg c]
  }||d   k(   c}      s| j                  |d       y y c c}w c c}w )NrP   r   Trw  )r4   r5   rB  rT  )r9  rg  rl  r&   s       r   ro  z)SymbolicShapeInference._check_merged_dims  si    #Kt!JqMc!fkAtDK$/$QAaL$/0%%d$%7 1 L/s   A A A%Nc                    | j                  |d      }| j                  |d      }t        |      }t        |      }d}d}|dkD  r|dkD  sJ |dk(  r|dk(  rg }	nI|dk(  rd}|d | |d   gz   }	n5|dk(  rd}|d | }	n(d}d}g | j                  |d d |d d       |d   |d   }	| j                  ||   ||   gd       |:| j                  |j
                  d      j                  j                  j                  }| j                  |j                  d      }
|
j                  t        j                  |j                  d   ||	             y )Nr   rP   r  Frk  )r  rQ   r  ro  rc  rX  r   r   r*   r  r_  r   re  )r9  r   output_dtype	lhs_shape	rhs_shapelhs_rankrhs_ranklhs_reduce_dimrhs_reduce_dimr|  r-   s              r   _compute_matmul_shapez,SymbolicShapeInference._compute_matmul_shape  su   OOD!,	OOD!,	y>y>!|1,,q=X]I]N!/>2im_DI]N!/>2INNo$003B3BPoR[\^R_oajkmanoI~&	.(AB! 	  	
 >>$**Q-8==IISSL^^DKKN+
F11$++a.,PYZ[r   c           
      :   t        |      r |j                  j                  j                  n|j                  }t        |      r |j                  j                  j                  n|j                  }|j                  |j                  k7  r|j                  r|j                  n|j
                  }t        d| dt        j                  j                  j                  j                  |j                         dt        j                  j                  j                  j                  |j                               |j                  d      rt        t        |j                  j                   |j                  j                               D ]  \  }}	|	d   |	d   k7  st        j"                  j%                         }
t        |      s!t'        | j)                  |||            |
_        |j                  j                   |   j-                  |
        y|j-                  |       y)zh
        update dst_tensor_type to be compatible with src_tensor_type when dimension mismatches
        z	For node z:, dst_tensor_type.elem_type != src_tensor_type.elem_type: z vs r$   r   rP   N)r"   r   r*   r   r
   r  
ValueErrorr0   onnx_pbTensorProtoDataTypeNamer%   r  r  r$   r   TensorShapeProto	Dimensionr   r  rZ  r_  )r9  r   r  dst_typesrc_typedst_tensor_typesrc_tensor_typenode_iddidsr  s              r   _fuse_tensor_typez(SymbolicShapeInference._fuse_tensor_type   s   
 =H<QH"",,88W_WkWk 	 =H<QH"",,88W_WkWk 	 $$(A(AA#'99dii$,,GG9$^<<++4499/:S:STUUY<<++4499/:S:STUW 
 ##G,#C(=(=(A(A?CXCXC\C\$]^Ba5BqE> #33==?G&x0,/0R0RSWY`bd0e,f)#))--b1::7C _ $$_5r   c           	      f   | j                  |d      }| j                  |d      }| j                  |j                  d      }|j                  t	        j
                  |j                  d   | j                  |j                  d      j                  j                  j                  |d d |z                y Nr   rP   r  
r  rc  r  r_  r   re  rX  r   r   r*   )r9  r   
data_shapeindices_shaper-   s        r   r   z3SymbolicShapeInference._infer_ArrayFeatureExtractor=  s    __T1-
a0^^DKKN+
))Atzz!}-22>>HH3B-/	
r   c                      d d d d  fd fdd d d	 d
 d
}|j                   |v sJ  j                  |||j                             y )Nc                     | d   | d   z   S Nr   rP   rB   ls    r   r  zDSymbolicShapeInference._infer_symbolic_compute_ops.<locals>.<lambda>K      QqTAaD[r   c                 r    t        | d   | d   z  t              rt        | d   | d   z        S | d   | d   z  S r'  r  floatr5   r(  s    r   r  zDSymbolicShapeInference._infer_symbolic_compute_ops.<locals>.<lambda>L  sB    %/!!e%DAaDAaDL!V!A$RSTURV,Vr   c                     | d   | d   k(  S r'  rB   r(  s    r   r  zDSymbolicShapeInference._infer_symbolic_compute_ops.<locals>.<lambda>O  s    qtqt|r   c                 2    t        j                  | d         S r   )r>   floorr(  s    r   r  zDSymbolicShapeInference._infer_symbolic_compute_ops.<locals>.<lambda>P  s    u{{1Q40r   c                     t        | d         r!t        | d         j                   k  r| d   S t        | d         r!t        | d         j                   k  r| d   S t        j                  | d   | d         S r'  )r4   r5   r6  r>   r}   r)  r9  s    r   r  zDSymbolicShapeInference._infer_symbolic_compute_ops.<locals>.<lambda>Q  s    ad#AaD	T]]N(B ! j(1.3qt9~3MadjSXS\S\]^_`]acdefcgShjr   c                     t        | d         r t        | d         j                  kD  r| d   S t        | d         r t        | d         j                  kD  r| d   S t        j                  | d   | d         S r'  )r4   r5   r6  r>   r   r2  s    r   r  zDSymbolicShapeInference._infer_symbolic_compute_ops.<locals>.<lambda>V  s    ad#AaD	DMM(A ! i(1.3qt9t}}3LadiRWR[R[\]^_\`bcdebfRgir   c                 r    t        | d   | d   z  t              rt        | d   | d   z        S | d   | d   z  S r'  r,  r(  s    r   r  zDSymbolicShapeInference._infer_symbolic_compute_ops.<locals>.<lambda>[  sE    AaD1Q4K1OS1!-`UVWXUY\]^_\`U``r   c                     | d   | d   z
  S r'  rB   r(  s    r   r  zDSymbolicShapeInference._infer_symbolic_compute_ops.<locals>.<lambda>\  r*  r   c                      | d   r| d   S | d   S Nr   rP   r  rB   r(  s    r   r  zDSymbolicShapeInference._infer_symbolic_compute_ops.<locals>.<lambda>]  s    qtqt515r   c                     | d    S r   rB   r(  s    r   r  zDSymbolicShapeInference._infer_symbolic_compute_ops.<locals>.<lambda>^  s
    adUr   )
ra   rn   rq   rr   r}   r   r   r   r   r   )r  r  )r9  r   funcss   `  r   r   z2SymbolicShapeInference._infer_symbolic_compute_opsI  s`    ( ,0

 a(5")
, ||u$$$##D%*=>r   c                 &    | j                  |       y r)   )r  r  s     r   r   z"SymbolicShapeInference._infer_Castc  s      &r   c           
         | j                   |j                  d      j                  j                  j                  }|t
        j                  j                  k(  rt
        j                  j                  }nt
        j                  j                  }| j                   |j                  d      }|j                  t        j                  |j                  d   || j                  |d                   y r   )rc  rX  r   r   r*   r0   r  STRINGINT64r  r_  r   re  r  )r9  r   
input_typeoutput_typer-   s        r   r   z,SymbolicShapeInference._infer_CategoryMapperf  s    ^^DJJqM277CCMM
))000**00K**11K^^DKKN+
F11$++a.+t_cefOghir   c                    | j                  |d      }t        | j                  |            }t        |d      }||g}n|}||t	        |t        |            <   | j                  |j                  d      }|j                  t        j                  |j                  d   | j                  |j                  d      j                  j                  j                  |             y )Nr   rC   )r  r   r  r   rE   rQ   rc  r  r_  r   re  rX  r   r   r*   )r9  r   input_shapecompress_lenrC   output_shaper-   s          r   r   z&SymbolicShapeInference._infer_Compresso  s    oodA.4==dCDT6*<(>L&LIUL-dC4DEF^^DKKN+
))Atzz!}-22>>HH	
r   c           	      H   t        |j                  D cg c]   }|| j                  v xs || j                  v " c}      r| j	                  |      }t        |D cg c]  }|d u c}      rt        |d      dk(  sJ g | j                  |j                  d   <   t        t        |j                              D ]n  }||   }t        |t              r,| j                  |j                  d      j                  |       D| j                  |j                  d      j                  |       p | j                  |d      }t        t        |d      t        |            }t        dt        |j                              D ]%  }| j                  ||      }	|	s||   |	|   z   ||<   ' | j!                  |       t        t        |            D ]  }
|
|k(  r	t        t        |j                              D cg c]*  }| j#                  ||      s| j#                  ||      |
   , }}t        |D 
cg c]
  }
|
|d   k(   c}
      rz| j%                  |      }t'        |      t(        u r|r| j*                  |   nd |
<   ||
<    | j,                  |j                  d      }|j/                  t1        j2                  |j                  d   | j,                  |j                  d      j&                  j4                  j6                  t9        |                   y c c}w c c}w c c}w c c}
w )NrC   r   rP   )r  rX  r  rb  r  rB  r   r  ry  rQ   r  rH   r  r  r  rE   r  r  ru  r   r   r1  rc  r_  r   re  r   r*   r8   )r9  r   r7   r  r\   r   r6   rC   i_idxrA  r&   rg  rt  r-   s                 r   r   z$SymbolicShapeInference._infer_Concat  s   $**U*QT%%%@d.@.@)@@*UV2248F626aATM623$T62a77735  Q0s4::/A"1IE!%.((Q8??F((Q8??F 0 ++D!4#M$$?[AQR1c$**o.E//e<K$/$5D8I$ID! / 	"";/s;'(ADyAFs4::AWxAW[_[j[jkoqv[wDOOD%03AWDx$/$QAaL$/0((.FF|s"@F!4!4V!<DA!'A ) ^^DKKN+
))Atzz!}-22>>HH*;7	
A V2* y/s   %LL.LL(L
c                 ,   | j                  |d      }t        |d      rdnd}t        t        |d      t        |      |z         }t	        | j                  |d|            }|}|r|d | |gz   ||d  z   }n|||<   | j                  |j                  d      }|j                  t        j                  |j                  d   | j                  |j                  d      j                  j                  j                  j                  j                  |             y )Nr   new_axisrP   rC   )r  r   rE   rQ   r   r  rc  r  r_  r   re  rX  r   r   r*   r   )r9  r   	seq_shaperG  rC   
concat_dimr|  r-   s           r   r   z0SymbolicShapeInference._infer_ConcatFromSequence  s    OOD!,	%dJ71Q#M$$?YRZAZ[;;D!TJK
	!%4(J<7)DE:JJI(IdO^^DKKN+
))Atzz!}-22@@JJVV``	
r   c                 z    t        |d      }t        j                  |      | j                  |j                  d   <   y )Nr   r   )r   r   r  r  r  )r9  r   ts      r   r   z&SymbolicShapeInference._infer_Constant  s1    $(+7+@+@+CQ(r   c           	      p   | j                  |      d   }| j                  |j                  d      }|t        |      t        k7  r|g}| j                  |       |j                  j                  j                  t        j                  j                  k(  rt        |D cg c]  }t        |       c}      rt        j                  |D cg c]  }t        |       c}t        j                         t#        j$                  t'        |dd            z  | j(                  |j                  d   <   n%| j+                  | j-                  |d      d   |      }|j/                  t1        j2                  |j                  d   |j                  j                  j                  t5        |                   y c c}w c c}w )Nr   )dtyper   )r  rc  r  r   rH   r  r   r*   r0   r  r=  rB  r4   r;   onesr5   r<   r   r  r   r  r  r  r_  r   re  r8   )r9  r   r6   r-   rU   s        r   r   z-SymbolicShapeInference._infer_ConstantOfShape  sc   33D9!<^^DKKN+"K D(*m&&{3ww"",,0@0@0F0FF3grOsgrbcPZ[\P]grOsKt3577%01[SV[14 ))-gq*IJ4K  Q0 224??43KA3NPTUK
))A##--*;7	
 Pt1s   F.	F3c           	      4   | j                  |      }| j                  |       | j                  |j                  d      }|j	                  t        j                  |j                  d   |j                  j                  j                  t        |                   y r   )r  r  rc  r  r_  r   re  r   r   r*   r8   r9  r   r6   r-   s       r   r   z"SymbolicShapeInference._infer_Conv  sv    33D9"";/^^DKKN+
))A##--*;7	
r   c           	      l   | j                  |d      }| j                  |       | j                  |j                  d      }|j	                  t        j                  |j                  d   | j                  |j                  d      j                  j                  j                  t        |                   y )NT)r  r   )r  r  rc  r  r_  r   re  rX  r   r   r*   r8   rP  s       r   r  z&SymbolicShapeInference._infer_NhwcConv  s    33D3M"";/^^DKKN+
))Atzz!}-22>>HH*;7	
r   c                 :   | j                   |j                  d      j                  j                  j                  }| j                  |d      }| j                   |j                  d      }|j                  t        j                  |j                  d   ||             y rO   )
rc  rX  r   r   r*   r  r  r_  r   re  r9  r   r  rC  r-   s        r   r
  z.SymbolicShapeInference._infer_DequantizeLinear  sv    ~~djjm499EEOO tQ/^^DKKN+
F11$++a.,P\]^r   c                    t         j                  j                  }t        |j                        dkD  rI|j                  d   r:| j
                  |j                  d      j                  j                  j                  }| j                  |d      }| j
                  |j                  d      }|j                  t        j                  |j                  d   ||             y )Nr  r   )r0   r  UINT8rQ   rX  rc  r   r   r*   r  r  r_  r   re  rS  s        r   r  z,SymbolicShapeInference._infer_QuantizeLinear  s     ''--tzz?Q4::a=>>$**Q-8==IISSL tQ/^^DKKN+
F11$++a.,P\]^r   c                     t        |d      }|j                  dd      }|j                  d      }|dk7  r|d | n|}d}d}d}i }|j                  d      }	|	D ]  }
|
j                  d      }| j	                  ||      }t        |      }|dk7  r|dk(  r|t        |
      z
  d	z   }|d
z   }t        d
|d
z         D ]?  }|
|    }|dk7  s||    }||vr|||<   t        |      t        j                  us;|||<   A |d
z   } g }ddl
m}  |       }|dk7  rd||dz   d  }|j                  d      }|dk7  r$t        |      D ]  }|j                  |           |D ]  }|dk7  s	|j                  ||           n~t        |      D ]  }|j                  |           |D ]#  }|dk7  s	|dk7  s||v r||   d
z   ||<   d
||<   % |j                         D ]  \  }}|d
k(  s|j                  ||          ! | j                  |j                  d      j                  j                   j"                  }| j                  |j$                  d      }|j'                  t)        j*                  |j$                  d   ||             y )Nequation    r   s   ->r  r      ,s   ...r  rP   .   )OrderedDictr  ,   )r   replacefindsplitr  rQ   ry  r   r>   rG  collectionsr[  r  rD  rc  rX  r   r*   r  r_  r   re  )r9  r   rW  	mid_indexleft_equationnum_operandsnum_ellipsisnum_ellipsis_indicesletter_to_dimtermstermellipsis_indexr$   rD   r7   letterr   r  r[  num_letter_occurrencesright_equationright_ellipsis_indexckeyr   r  r-   s                              r   r   z$SymbolicShapeInference._infer_Einsum  s    z2##D#.MM%(	09R),X ##D)D!YYv.NOOD,7Eu:D#1$+/#d)+;a+?(+a/1dQh'qbR<)C]203f-c%,,603f- ( (!+L! $ +!,?%i!mo6N#1#6#6v#> #r)34A#**584 5#7#**=+;< $ /0&&uQx0 1"7qBw224J14MPQ4Q.q145.q1 # 5::<
UA:#**=+=> = ~~djjm499EEOO^^DKKN+
F11$++a.,P_`ar   c                    t        | j                  |d      d      }|| j                  |       | j                  |d      }| j	                  |t        |            }| j                  |j                  d      }|j                  t        j                  |j                  d   | j                  |j                  d      j                  j                  j                  |             y y )NrP   TrX   r   )rY   r  r  r  r  r8   rc  r  r_  r   re  rX  r   r   r*   )r9  r   expand_to_shaper$   r|  r-   s         r   r   z$SymbolicShapeInference._infer_ExpandI  s    !$"5"5dA">$O&&&7OOD!,E..u6PQ`6abIA/BKK--KKNNN4::a=166BBLL 'r   c           
      8   | j                  |d      }t        t        |dd      t        |            }| j                  |d      }| j                  |j
                  d      }|j                  t        j                  |j
                  d   | j                  |j                  d      j                  j                  j                  |d | |z   ||dz   d  z                |j                  d   | j                  v rt        |      dk(  rt        |dd      dk(  r| j                  |d      }|| j                  |j                  d      }t        |      t        u rt        |      t         j"                  u rOt        |j$                        dk(  r7|D cg c]  }|t'        |          c}| j                  |j
                  d   <   y |t'        |         | j                  |j
                  d   <   y |dk(  s|dk(  sJ || j                  |j
                  d   <   y y y y y c c}w )Nr   rC   rP   r  )r  rE   r   rQ   rc  r  r_  r   re  rX  r   r   r*   r  r  rH   r;   rR   r$   r5   )	r9  r   r#  rC   r$  r-   r  datar7   s	            r   r   z$SymbolicShapeInference._infer_GatherY  s   __T1-
#M$$BC
OTa0^^DKKN+
))Atzz!}-22>>HH5D!M1Jtaxz4JJ	
 ::a=D,,,ZA1E-X\^dfgJhlmJm%%dA.C''

16:%CyBJJ.3syy>Q3FRU;VRUQDQLRU;V((Q8;?C>((Q8!8sby007;D$$T[[^4  Kn1E, <Ws   Hc                 6   | j                  |d      }| j                  |j                  d      }|j                  t	        j
                  |j                  d   | j                  |j                  d      j                  j                  j                  |             y rO   r"  )r9  r   r$  r-   s       r   r   z,SymbolicShapeInference._infer_GatherElementss  sv    a0^^DKKN+
))Atzz!}-22>>HH	
r   c                    | j                  |d      }t        |      }| j                  |d      }t        |       |d   }t        |      r||k  sJ |d d ||d  z   }| j                  |j                  d      }|j                  t        j                  |j                  d   | j                  |j                  d      j                  j                  j                  |             y r!  )r  rQ   r4   rc  r  r_  r   re  rX  r   r   r*   )r9  r   r#  	data_rankr$  last_index_dimensionr|  r-   s           r   r   z&SymbolicShapeInference._infer_GatherND~  s    __T1-

O	a0M,R0./4HI4UUU!#2&4H4I)JJ	^^DKKN+
))Atzz!}-22>>HH	
r   c           	      |   t        |d      t        |d      g}| j                  |d      }|=t        |      dkD  r|d   j                  |d          n|d   j                  |d          t	        |      D ]D  \  }}| j                  ||d      }t        t        |j                              D ]  }| j                  |j                  |      }|dk(  r3|j                  |j                  |          |j                  |   |_
        n5| j                  |||j                  |j                  |   j                         ||t        |      dkD  rdndk(  s|j                  |   j                  |j                  v s|j                  |j                  |   j                     | j                  |j                  <    G y )Nthen_branchelse_branchr   rP   F)r  )r   r  rV   r_  r  r  ry  rQ   r  rc  r
   r  r   r  )	r9  r   	subgraphscondi_subr  subgraph_inferi_outr-   s	            r   r   z SymbolicShapeInference._infer_If  s    $.$.
	 ""4+"!%%il3!%%il3(3OE8!66tXV[6\Ns4;;/0^^DKK$67A:KK 67"kk%0BG**4QVAWA\A\] #y7J!PQ(Ru-22n6P6PP4B4N4Nx_dOeOjOj4k((1 1  4r   c           	      h   t        |d      }t        |j                        t        |j                        k(  sJ t        |j                        dz
  }t        |j                        D ]C  \  }}|j                  }|j                  | j                  |j                  |             ||_        E | j                  ||       d}t        d|dz         D ]  }|j                  |   }	t        |	      }
t        |	j                        rh|
s6d |
v s;|j                  |dz      j                  j                  j                  j                  |	j                  j                  j                         d}|j                  |dz      }t        |      }t        t        ||
            D ]  \  }}|d   |d   k7  st         j"                  j%                         }t'        | j)                  |||            |_        |j                  j,                  j.                  j0                  |   j                  |       |	j                  j,                  j.                  j0                  |   j                  |       d}  |rV| j2                  dkD  r3t4        j7                  d|j                   d|j                  d    d	       | j                  ||d
       t'        | j)                  |            }t        t        |j                              D ]2  }| j                  |j                  |      }|j                  |j                  |dz             ||k\  rt        |j                        rJ |j                  |dz      j                  j,                  j.                  j0                  }|j                  j,                  j.                  j9                  d       |j                  j,                  j.                  j0                  }||j;                         _        |j=                  t?        |             |j                  |   |_        5 y )Nbodyr  FrP   Tr   zRerun Loop: (z3...), because of sequence in loop carried variables)r  r   ) r   rQ   rX  r  r
   r_  rc  r  ry  r  r.   r"   r   r   r*   r  r0   r  r  r   r  rZ  r   r$   r   r5  rH  rn  r  rF  r  rH   )r9  r   r  num_loop_carriedr7   sisi_nameneed_second_inferr  soso_shapesi_shaper  rg  r  loop_iter_dimr-   subgraph_vi_dimvi_dims                      r   r   z"SymbolicShapeInference._infer_Loop  s]    v.8>>"c$**o555tzz?Q. x~~.EArggGKKtzz!}56BG /
 	!!$1
 "1.23E'B04H277# 0 NN519-22@@JJSSTVT[T[TiTiTsTst(,%^^EAI.4R8 )#h*A BHBAw$q')"&"7"7"A"A"C,/0R0RSWY^`b0c,d)++1155b9BB7K++1155b9BB7K,0) !C 4* }}q "499+Qt{{1~.>>qr %%dHe%L D>>tDEs4;;'(AA/BKKA./$$&rww///"*//!a%"8"="="I"I"O"O"S"S##))44U;,,2266)6

&d?34kk!nBG )r   c                 &    | j                  |       y r)   r  r  s     r   r   z$SymbolicShapeInference._infer_MatMul      ""4(r   c                 X    | j                  |t        j                  j                         y r)   )r  r0   r  INT32r  s     r   r   z+SymbolicShapeInference._infer_MatMulInteger  s    ""4)9)9)?)?@r   c                    | j                  |d      }t        |d      t        |d      g}t        |      }|dkD  sJ |dk(  r|dd  }n|d d |dd  z   }| j                  |d   |d   gd       | j                  |j
                  d      j                  j                  j                  }| j                  |j                  d      }|j                  t        j                  |j                  d   ||             y )Nr   KNrP   r  Frk  )r  r   rQ   ro  rc  rX  r   r   r*   r  r_  r   re  )r9  r   r	  r
  r  r|  r  r-   s           r   r  z)SymbolicShapeInference._infer_MatMulNBits  s    OOD!,	"4-}T3/GH	y>!||q=!!"I!#2126Ir]IaL)! 	  	

 ~~djjm499EEOO^^DKKN+
F11$++a.,PYZ[r   c                 
   t        | j                  |            }| j                  |j                  d      }|j	                  t        j                  |j                  d   t        j                  j                  |dg             y )Nr   r  )
r   r  rc  r  r_  r   re  r0   r  r=  )r9  r   selectedr-   s       r   r   z/SymbolicShapeInference._infer_NonMaxSuppression  sc    t99$?@^^DKKN+
F11$++a.$BRBRBXBX[cefZghir   c                 >   | j                  |d      }t        | j                  |dd            }| j                  |j                  d      }|j                  t        j                  |j                  d   |j                  j                  j                  ||g             y r'  )r  r   r  rc  r  r_  r   re  r   r   r*   )r9  r   
input_ranknz_lenr-   s        r   r   z%SymbolicShapeInference._infer_NonZero  s}    ))$2
T77aCD^^DKKN+
F11$++a."''BUBUB_B_blntauvwr   c                    | j                  |d      }| j                  |d      }t        |dd      }t        |t	        |      dz         }t        |d | t        |      s| j                  |      n|gz   ||d  z         }| j                  |j                  d      }|j                  t        j                  |j                  d   | j                  |j                  d      j                  j                  j                   |             y )Nr   rP   rC   r  r  )r  r  r   rE   rQ   r8   r4   r  rc  r  r_  r   re  rX  r   r   r*   )r9  r   r6   depthrC   r|  r-   s          r   r   z$SymbolicShapeInference._infer_OneHot  s    ++D!4##D!,T62.#D#k*:Q*>?.?I%?Pt11$7V[\]$% !
	
 ^^DKKN+
))Atzz!}-22>>HH	
r   c           	         t        | j                        dk  rt        |d      }n| j                  |d      }| j	                  |d      }t        |      }|St        |      d|z  k(  sJ t        ||d | ||d        D cg c]  \  }}}||z   |z    }}}}| j                  |       n| j                  ||      }| j                  |j                  d      j                  j                  j                  }	| j                  |j                  d      }
|
j                  t!        j"                  |j                  d   |	t%        |                   y c c}}}w )N
   r  rP   r   r  )rM   rV  r   r  r  rQ   r  r  r  rc  rX  r   r   r*   r  r_  r   re  r8   )r9  r   r  r6   rD   r&   pad_uppad_downr  	output_tpr-   s              r   r   z!SymbolicShapeInference._infer_Pad  sG   T\\"b( v.D&&tQ/D++D!4;t9D(((AD[RVW\X\R]_cdhdi_jAkAk*=!VXF
X%Ak   &&7 #66tTBONN4::a=166BBLL	^^DKKN+
))$++a.)E_`oEpq	
s   Ec           
      (   | j                  |      }| j                  |       |j                  D ]a  }|s| j                  |   }|j	                  t        j                  ||j                  j                  j                  t        |                   c y r)   )r  r  r  rc  r_  r   re  r   r   r*   r8   )r9  r   r6   r  r-   s        r   r   z"SymbolicShapeInference._infer_Pool7  sz    33D9"";/A"BKK--GG''11.{;	 r   c                    | j                  |d      }| j                  |d      }| j                  ||      }| j                  |j                  d      }| j                  |j                  d      }|j                  t        j                  |j                  d   |j                  j                  j                  |             y r'  )r  r  rc  rX  r  r_  r   re  r   r   r*   )r9  r   shape0rz  r|  t0r-   s          r   r%  z-SymbolicShapeInference._infer_aten_bitwise_orF  s    q)q)**66:	^^DJJqM*^^DKKN+
F11$++a."''BUBUB_B_ajklr   c           	      z   | j                  |d      }t        |      }| j                  |d      }| j                  |d      }| j                  |d      }|||J t        ||      }t        ||      }g }t	        |      D ]  \  }}	|||fvs|j                  |	        ||   }
||   }|dk\  r.t        j                  dt        j                  |
||z
              }n-t        j                  dt        j                  |
|z   |            }|j                  |       |j                  d   r| j                  |j                  d      }|j                  t        j                  |j                  d   | j                  |j                  d      j                  j                   j"                  t%        |                   y y Nr   rP   r  r  )r  rQ   r  rE   r  r  r>   r}   r   r  rc  r_  r   re  rX  r   r   r*   r8   )r9  r   r6   rD   offsetr  r  r|  r   valrz  r{  
diag_shaper-   s                 r   r&  z+SymbolicShapeInference._infer_aten_diagonalN  s   ++D!4;$$T1-""4+""4+!d&64;KKK#D$/#D$/	!+.HC4,&  % / T"T"Q;1eii&HIJ1eii&HIJ$;;q>A/BKK--KKNNN4::a=166BBLL.y9 r   c           	         | j                  |d      }t        |      }|dv sJ | j                  |d      }|dz
  }|r|nt        | j	                  |d|            }|d d |gz   }| j
                  |j                  d      }|j                  t        j                  |j                  d   t        j                  j                  t        |                   y )Nr   rP   r  rP   r  )r  rQ   r  r   r  rc  r  r_  r   re  r0   r  r=  r8   )	r9  r   r6   rD   num_samplesr  last_dimrC  r-   s	            r   r)  z.SymbolicShapeInference._infer_aten_multinomialp  s    ++D!4;v~~))$2AX"-;3t7Y7YZ^`ace7f3g"3B'8*4^^DKKN+
))A  &&*<8	
r   c           
      *   | j                  |d      }t        |      dk(  sJ dD cg c]  }| j                  |d|       c}|dd  | j                  |       t	        |j
                        D ]  \  }}|s	| j                  |   }|dk(  rt        j                  j                  n9| j                  |j                  d      j                  j                  j                  }|j                  t        j                   ||t#        |                    y c c}w )Nr      r  r  r  rP   )r  rQ   r  r  r  r  rc  r0   r  r=  rX  r   r   r*   r_  r   re  r8   )r9  r   r6   r7   r  r-   r*   s          r   r'  z)SymbolicShapeInference._infer_aten_pool2d  s    ++D!4;1$$$TZ[TZqD>>tQJTZ[BC"";/dkk*DAq"B23q&((..dnnTZZXY]>[>`>`>l>l>v>vIKK55aD^_jDklm + \s   Dc                 \   | j                   |j                  d      }t        |j                        dk(  rl|j	                  t        j                  |j                  d   | j                   |j                  d      j                  j                  j                  g              y t        |j                        dk(  sJ | j                  |d      }|J | j                  |d      }|,| j                  |d      }| j                  |r|n|dz
  |      }n?| j                  |d      }t        |t        |            }|d | }|r|dgz  }|||dz   d  z  }t        |      }|j	                  t        j                  |j                  d   | j                   |j                  d      j                  j                  j                  |             | j                   |j                  d      }|j	                  t        j                  |j                  d   t         j"                  j$                  |             y )Nr   rP   r  r  )rc  r  rQ   rX  r_  r   re  r   r   r*   r  r  r  r  rE   r8   r0   r  r=  )	r9  r   r-   keepdimr   rD   rC  r$   vi1s	            r   r(  z)SymbolicShapeInference._infer_aten_minmax  s   ^^DKKN+tzz?aKK--KKNDNN4::a=$A$F$F$R$R$\$\^` tzz?a'''))$2G&&&%%dA.C{++D!4#77TTUXW[\--dA6*3E
;$Tc{ QC'LcAgi 005lCLKK--KKNDNN4::a=$A$F$F$R$R$\$\^j
 ..Q0CLL66t{{1~tGWGWG]G]_klmr   c           	         | j                  |d      }| j                  |d      }| j                  |d      }| j                  |d      }|7|5|3|t        |      k  sJ ||   |z
  |z  dz   ||<   |j                  |       n t        |      }| j	                  |dz   |      }| j                  |       |j                  d   r| j                  |j                  d      }|j                  t        j                  |j                  d   | j                  |j                  d      j                  j                  j                  t        |                   y y r  )r  r  rQ   r  r  r  r  rc  r_  r   re  rX  r   r   r*   r8   )r9  r   r6   	dimensionsizesteprD   r-   s           r   r*  z)SymbolicShapeInference._infer_aten_unfold  s@   ++D!4''a0	""4+""4+ T%5$:Js;////&1)&<t&C%Lq%PK	"t${#D224!8TBK"";/;;q>A/BKK--KKNNN4::a=166BBLL.{; r   c                 V   d }|j                   d   sg }n| j                  |d      }| j                  |d      }|u| j                  |d      }|!t        |t	        |            }|rd||<   n(||= n$t	        |      }| j                  |r|n|dz
  |      }| j                  |       t        |      }|j                  d   rk|h| j                  |j                  d      }|j                  t        j                  |j                  d   t        j                  j                  |             y y y NrP   r  r   )rX  r  r  rE   rQ   r  r  r8   r  rc  r_  r   re  r0   r  r=  )r9  r   r|  r   r  r6   rD   r-   s           r   r+  z)SymbolicShapeInference._infer_aten_argmax  s   	zz!}I%%dA.C))$2G""33D!<?.sC4DEC+,C(',{+D"&":":74PTWXPXZ^"_K**;76{C	;;q>i3A/BKK55dkk!ndFVFVF\F\^ghi 4>r   c                 j   | j                  |       | j                  |d      }|t        |      dk7  r|d   nd }| j                  |d      }| j                  |j
                  d      j                  j                  j                  }dD ]  }|j                  |   s| j                  |j                  |      }|j                  t        j                  |j                  |   |||nt        | j                  ||d            |t        |      nt        | j                  ||d            g              y )Nr      r  rP   )_propagate_shape_and_typer  rQ   r  rc  rX  r   r   r*   r  r_  r   re  r   r  rV   )r9  r   rA  r  groupr  r7   r-   s           r   r,  z-SymbolicShapeInference._infer_aten_group_norm  s   &&t,oodA.)5#k:Ja:OKNUY##D!,~~djjm499EEOOA{{1~^^DKKN311A$!"AC8Z8Z[_abde8f4g $)#4 !*% 0%()K)KDRSUV)W%X r   c                    d }| j                  |d      }||d d }| j                  |d      }|?||D cg c]/  }t        |      t        j                  u r|j                         n|1 c}z  }nBt        |      }|t        d|      D cg c]  }t        | j                  |d|              c}z  }|j                  d   r|| j                  |j                  d      j                  j                  j                  }| j                  |j                  d      }	|	j                  t!        j"                  |j                  d   ||             y y y c c}w c c}w Nr   r  rP   )r  r  r   r;   r<   rS   rQ   ry  r   r  r  rc  rX  r   r*   r_  r   re  )
r9  r   r|  rA  output_sizedim_sizerD   r7   r  r-   s
             r   r-  z+SymbolicShapeInference._infer_aten_upsample  sA   	oodA."#BQI--dA6K&juvju^fh2881KhmmoQYYjuvv	;'[`abdh[ij[iVWc$"D"DT1a"PQ[ijj	;;q>i3>>$**Q-8==IISSLA/BKK55dkk!nlT]^_ 4>	 w ks   4E	#Ec                     | j                  |       dD ]?  }|t        |j                        k  s|j                  |   s,| j                  |d|       A y )N)rP   r  r  r  rP   input_indexoutput_indexr  rQ   r  )r9  r   r7   s      r   r   z0SymbolicShapeInference._infer_BatchNormalization  sM    &&t, A3t{{##A..tQR.S r   c           	         | j                   |j                  d      }| j                  |      }t        |D cg c]  }|d u c}      r[t	        |d         }t	        |d         }t	        |d         }t        j                  t        j                  ||z
  |z        d      g}n| j                  |      g}| j                  |       |j                  t        j                  |j                  d   | j                   |j                  d      j                  j                  j                   t#        |                   y c c}w r7  )rc  r  r  rB  rV   r>   r}   r  r  r  r_  r   re  rX  r   r   r*   r8   )	r9  r   r-   
input_datar7   startlimitdeltar  s	            r   r   z#SymbolicShapeInference._infer_Range  s   ^^DKKN+2248
z2z!z23jm,Ejm,Ejm,E$yy7N)OQRSTO#AA$GHO""?3
))Atzz!}-22>>HH*?;	
 3s   D<c                    t        |dd      }t        | j                        dk\  rt        |j                        dkD  r| j                  |d      }| j                  |j                  d      }||sJ |j                  t        j                  |j                  d   | j                  |j                  d      j                  j                  j                  t        | j                  | j!                  |d      |                         y | j#                  |d      }g }|D cg c]  }t%        |t        |             }}t'        |      D ]/  \  }}	||v r|s|j)                  d       |j)                  |	       1 |j                  t        j                  |j                  d   | j                  |j                  d      j                  j                  j                  |             y y y c c}w )NkeepdimsrP      r   )r   rM   rV  rQ   rX  r  rc  r  r_  r   re  r   r   r*   r8   r  r  r  rE   r  r  )
r9  r   	keep_dimsaxesr-   r$   rC  ar7   r&   s
             r   r   z'SymbolicShapeInference._infer_ReduceSum"  s   !$
A6	T\\"b(S_q-@&&tQ/DA/B|  y11Atzz!}5::FFPP243K3KDL`L`aeghLiko3pq a0!EIJT,QE
;TJ%e,DAqDy$(//2$++A. - 11Atzz!}5::FFPP$/ .A(  Ks   !G*c                     t        |d      }t        |dd      }|dk(  rD|dgk(  r=| j                  |      d   }|&t        |      | j                  |j                  d   <   y y y y )Nr  r  rP   r   )r   r  r]   r  r  )r9  r   r  r  rt  s        r   r   z(SymbolicShapeInference._infer_ReduceProdC  so    T6*!$
A6	>dqck006q9D3G3M  Q0   *>r   c                    | j                  |d      }| j                  |d      }||y | j                  |d      d   }d|t        |      t        |      g}| j                  |j                  d      j
                  j                  j                  }| j                  |j                  d      }|j                  t        j                  |j                  d   ||             y r  )r  r  r   rc  rX  r   r   r*   r  r_  r   re  )r9  r   seq_lenreal_seq_len	num_headsr|  r  r-   s           r   r  z2SymbolicShapeInference._infer_RelativePositionBiasK  s    %%dA.**43?l2))$215		3w<\1BC	~~djjm499EEOO^^DKKN+
F11$++a.,PYZ[r   c                 <   | j                  |d      }| j                  |j                  d      }|| j                  |d      }t	        |      dk(  sJ |d   }t        |      sJ |j                  t        j                  |j                  d   |j                  j                  j                  t        | j                  ||                         n;| j                  |d      }d}|D ]  }||z  }	 g }	d}
d}t        |      D ]x  \  }}t        |      t         j"                  u r|	j%                  |       n3|dk(  r|	j%                  ||          |||   z  }n|	j%                  |       |dk(  r|}
n|dk7  st||z  }z |	j'                  d      dk  sJ d|	v r
||z  }||	|
<   | j)                  |	       |j                  t        j                  |j                  d   |j                  j                  j                  t        |	                   | j+                  |       y )NrP   r   r  r  )r  rc  r  r  rQ   r4   r_  r   re  r   r   r*   r8   r  r  r  r>   rG  r  countr  r  )r9  r   shape_valuer-   shape_shape
shape_rankinput_sympy_shapetotalr&   r  deferred_dim_idxnon_deferred_sizer7   r  s                 r   r   z%SymbolicShapeInference._infer_ReshapeX  s   ))$2^^DKKN+//$2K{#q((($QJj)))KK--KKNGG''11.t/G/G
TX/YZ !% 5 5dA >E&	 ' O! !!+.17ell*#**1-!V#**+<Q+?@(9<Ma<P(P%#**1-7'($!V(9A(=% / #((,q000_$#444; 01&&7KK--KKNGG''11.? 	  &r   c                 8   | j                   |j                  d      }| j                  |d      }t        | j                        dk  r| j                  |d      }|t        ||      D cg c]0  \  }}t        j                  t        j                  ||z              2 }}}| j                  |       |j                  t        j                  |j                  d   | j                   |j                  d      j                  j                   j"                  t%        |                   y y | j                  |d      }| j                  |d      }| j                  |d      }	|	G|	D cg c]*  }t        j                  t        j                  |            , }}| j                  |       n|t'        |      }
t)        |d      dk(  r0t'        |      d|
z  k(  sJ t+        |      d |
 }t+        |      |
d  }ndg|
z  }dg|
z  }t+        |      }t        ||||      D cg c]8  \  }}}}t        j                  t        j                  |||z
  z  |z              : }}}}}| j                  |       n"| j-                  | j/                  |d      |      }|j                  t        j                  |j                  d   | j                   |j                  d      j                  j                   j"                  t%        |                   y c c}}w c c}w c c}}}}w )Nr   r  rP   r  r  coordinate_transformation_modetf_crop_and_resize)rc  r  r  rM   rV  r  r  r>   simplifyr0  r  r_  r   re  rX  r   r   r*   r8   rQ   r   rH   r  r  )r9  r   r-   r  scalesr&   rO  r  roisizesrD   	roi_startroi_endr  endscales                   r   r   z$SymbolicShapeInference._infer_Resize  s   ^^DKKN+ 11$:T\\"b(((q1F!RUVgioRp"qRp$!Q5>>%++a!e2D#ERp"q**?;11Atzz!}5::FFPP2?C " %%dA.C((q1F''a0E KP"Q5a5>>%++a.#A5"Q**?;#6{ 'GHL``s8q4x/// $S	%4 0I"3i.G!"d
I cDjGf 144EyRY[a0b#0b,5#u NN5;;qC%K/@5/H#IJ0b   # **?;"&":":4;O;OPTVW;XZ^"_KK--KKNNN4::a=166BBLL.?E #r #R#s   *5L	%/L=L
c                    t        |d      }t        |d      }t        |ddg|z        }t        |j                        |z
  }t        |      D cg c]$  \  }}t	        || j                  |||z               & }}}t        |j                        t        |j                        k\  sJ |j                  d t        |j                         }t        |      D ]  \  }}	|	j                  }
|	j                  | j                  |j                  |             ||k\  rD|	j                  j                  j                  j                  }|j                  ||||z
               |
|	_         | j                  ||       t        |j                        |z
  }t        |ddg|z        }t!        | j                  |j                  d      j                        |d      }t        |j                        D ]  \  }}| j                  |   }||k\  rt!        |j                  |   j                        }t	        |||z
     t        |      dz         }|d | |gz   ||d  z   }|j                  t#        j$                  ||j                  |   j                  j                  j&                  |             n|j                  |j                  |          ||_         y c c}}w )Nr  num_scan_inputsscan_input_axesr   scan_output_axesr  rP   )r   rQ   rX  r  rE   r  r
   r_  rc  r   r   r$   r   rE  r  r  r'   r   re  r*   )r9  r   r  r  r  num_scan_statesr7   axr  r  subgraph_namescan_input_dimnum_scan_outputsr  r  r-   r$   r  s                     r   r   z"SymbolicShapeInference._infer_Scan  s    v.'.?@'.?!AVWdjj/O; #?3
32 !T%9%9$O@S%TU3 	 
 8>>"c$**o555"..):3tzz?;/EArGGMKKtzz!}56O#!#!4!4!:!:!>!>%%n_QEX5Y&Z[#BG 0 	!!$1t{{+o=(/AA3IYCYZ24>>$**R.3Q3V3VWXghjXkldkk*DAq"BO#1(//!2D2I2IJ./?O@S/TVYZ_V`cdVdehw>*::U78_LF99!X__Q=O=T=T=`=`=j=jlqrsHOOA./BG +'
s   )Kc                 6   | j                  |d      }| j                  |j                  d      }|j                  t	        j
                  |j                  d   | j                  |j                  d      j                  j                  j                  |             y r   r"  )r9  r   r#  r-   s       r   r   z-SymbolicShapeInference._infer_ScatterElements  sv    __T1-
^^DKKN+
))Atzz!}-22>>HH	
r   c                    | j                  |d      }| j                  |j                  d      }|t        |      D ]  \  }}|	t        j
                  j                         }t        | j                  |d|            |_	        |j                  j                  j                  j                  |   j                  |        y y r   )r  rc  r  r  r0   r  r  r   r  rZ  r   r   r$   r   r_  )r9  r   rH  r-   r  r&   r  s          r   r   z(SymbolicShapeInference._infer_SequenceAt  s    OOD!,	^^DKKN+ "9-A=//99;$'(J(J4QRTV(W$X!##))--b1::7C . !r   c                 F   | j                   |j                  d      }| j                   |j                  d      }| j                   |j                  d      }|j                  |       |j                  d   |_        | j                  |d|j                  |j                         y r'  )rc  rX  r  r_  r
   r  r   )r9  r   vi_seq	vi_tensor
vi_out_seqs        r   r   z,SymbolicShapeInference._infer_SequenceInsert  s}    

1.NN4::a=1	^^DKKN3
F#++a.
tQ
Hr   c                 \    | j                  |d      | j                  |j                  d   <   y r   )r  r  r  r  s     r   r   z#SymbolicShapeInference._infer_Shape  s'    +/+@+@q+IQ(r   c                 <   | j                  |d      }t        |      | j                  |j                  d   <   | j                  |j                  d      j                  t        j                  |j                  d   t        j                  j                  g              y r   )r  r]   r  r  rc  r_  r   re  r0   r  r=  )r9  r   r6   s      r   r   z"SymbolicShapeInference._infer_Size  sw    ++D!4+?+LQ(t{{1~&//))$++a.$:J:J:P:PRTU	
r   c           	      P	    d fd fd}t         j                        dk  rSt        |d      }t        |d      }t        |d      }|st        t	        t        |                  }dgt        |      z  }nt         j                  |d      d	
      }t         j                  |d      d	
      } j                  |d      } j                  |d      }|%||!t        t	        t        ||n|                  }|||dgt        ||n|      z  }t        |d	
      }t        |d	
      } j                  |d      }||]|1t	        t        |            D ]  } j                  |d|      ||<    nt        |      }|D ]  } j                  |d|      ||<    not        ||||      D ]L  \  }}	}
} ||
||         }
t        |
      r|
 j                  k\  r||   }
n|
 j                   k  r
|	dkD  rdnd}
nt        ||         r'|
dk  rt        d|
||   z         }
t        |
||         }
n`|
dkD  r[|
dkD  rt!        j"                  |
||         n|
}
n:t        ||         rt!        j"                  |
||         }
n	  |
||         s||   }
 ||	||         }	t        ||         r$t        |	      rt        dt        |	||               }	t!        j*                  |
|	z
  |z   |dkD  rdndz   |z        ||<   O  j-                  |        j.                  |j0                  d      }|j3                  t5        j6                  |j0                  d   |j8                  j:                  j<                  t        |                   |j>                  d    j@                  v r|dgk(  r|t        |      dk(  r|t        |      dk(  r|t        |      dk(  r j@                  |j>                  d      }t9        |      t        u s3t9        |      tB        jD                  u rEt        |jF                        dk(  r,||d   |d   |d       j@                  |j0                  d   <   y y y y y y y y y y y # t$        $ r( t&        j)                  d|
 d||    d       ||   }
Y 
w xY w)Nc                 V    t         t        j                        s
J d         t        t	         j
                              D cg c],  }t         j
                  |   t        j                        s+|. }}t	        |      dk(  r|d    fd} |d       |d      gS  gS c c}w )Nz%Expected a sum of two arguments, got rP   r   c                 &   t        j                        }t        |   t        j                        sJ d d|           t        |   j                        dk(  sJ d|           |   j                  |    |<   t        j                  | S )Nz#Expected a sympy.Min() at position z, got r  z5Expected a sympy.Min() with exactly 2 arguments, got )rH   argsr  r>   r   rQ   ra   )arg_idxreplacedexprmin_poss     r   replace_min_with_argzVSymbolicShapeInference._infer_Slice.<locals>.flatten_min.<locals>.replace_min_with_arg  s    #DIIH% )599 `<WIVHU\L]K^_`  HW-223q8cNxX_O`Nabc8(0(9(>(>w(GHW% 99h//r   )r  r>   ra   ry  rQ   r   r   )r  r  min_positionsr  r  s   `   @r   flatten_minz8SymbolicShapeInference._infer_Slice.<locals>.flatten_min  s    dEII.^2WX\W]0^^.,1#dii.,Ak,ASZPTPYPYZ]P^`e`i`iEjS,AMk=!Q&'*	0 )+(+  6M' ls   ,B&4B&c                 t   	 t        | |k        S # t        $ r Y nw xY w	 t        || k\        S # t        $ r Y nw xY w	 t        |  | k\        S # t        $ r Y nw xY w	 t        | |  k        S # t        $ r Y nw xY w	 t        || z
  dk\        S # t        $ r t        d  || z
        D              cY S w xY w)Nr   c              3   8   K   | ]  }t        |d k\          yw)r   N)bool).0r&   s     r   	<genexpr>zJSymbolicShapeInference._infer_Slice.<locals>.less_equal.<locals>.<genexpr>=  s     D1CA4Q<1Cs   )r
  r  rB  )rU   yr  s     r   
less_equalz7SymbolicShapeInference._infer_Slice.<locals>.less_equal(  s    AF|# AF|# QB1"H~% QB1"H~% EAEQJ'' EDQU1CDDDEsM    	/ 	;;A 	AAA/ /	A;:A;?B $B76B7c                     	  d|       s"t        |       r| j                   k  r| S || z   S 	 | S # t        $ r t        j	                  d|  d       Y | S w xY w)z/normalizes a negative index to be in [0, bound)r   zCannot determine if z < 0)r4   r6  r  rH  rI  )rK  boundr  r9  s     r   handle_negative_indexzBSymbolicShapeInference._infer_Slice.<locals>.handle_negative_index?  sq    C!!U+!%(Ut}}n-D$ 5=(	 , L  C!5eWDABLCs   %1 1 "AAr  r  startsendsrP   Trq  r  r  r  r   r  zUnable to determine if z <= z, treat as equal)$rM   rV  r   rH   ry  rQ   rY   r  r  r  r8   r  r4   r6  r   r   r>   r   	ExceptionrH  rI  r  r  rc  r  r_  r   re  r   r   r*   rX  r  r;   arrayr$   )r9  r   r  r  r  r  stepsr  r7   rO  erK  r-   input_sympy_datar  r  s   `             @@r   r   z#SymbolicShapeInference._infer_Slice	  s   	.	E.
	 T\\"a' v.D"42F v.DE#f+./C#d)OET00q9TJF4..tQ74HD&&tQ/D''a0E|V^E#0Bf"MNO}fncF,>&DII440DET2E//a8>T\|s?34A)-)K)KDRSUV)WOA& 5 #=_"MA)-)K)KDRSUV)WOA&  "$e<
1a)!_Q-?@a=DMM)+A.t}}n,!"QAB#OA$67q5 #Aq?1+='= >A?1#56q5DEE		!_Q-? @q  "/!"45!IIa);<3#-a1C#D$3A$6
 *!_Q-?@oa01jmAs1oa&89:A%*^^QUQYA"ST5UZ[4[%\"? =B &&7^^DKKN+
))A##--*?;	
 JJqMT---"Fq  D	Q!E
a#//

1>$%-%&"((2s;K;Q;Q7RVW7W3CF1IPTUVPWZ_`aZbDb3c  Q0 8X2	   "  ! ! #  ./  ) 3"NN-DQCtO\]L^K__o+pq / 2A3s   	Q44-R%$R%c                 x   | j                   |j                  d      }| j                   |j                  d      j                  j                  j
                  }t        |dd       }||}||j                  j                  _        |j                  j                  j                  j                  t        j                                t        |j                        dkD  r_| j                  |d      }| j                   |j                  d      }|j                  t        j                  |j                  ||             y y )Nr   r?  rP   )rc  r  rX  r   r   r*   r   r$   r_  r0   r  rQ   r  r   re  r
   )r9  r   r-   r*   specified_output_typer#  s         r   r   z5SymbolicShapeInference._infer_SoftmaxCrossEntropyLoss  s    ^^DKKN+NN4::a=166BBLL	 !.dM4 H ,-I(1%
!!**4+@+@+BCt{{aq1JA/BKK55bggy*UV  r   c                    | j                  |d      }t        t        |dd      t        |            }t	        | j
                        }|dk  r t        |d      }| j                  |d      "J | j                  |d      }t        |d      J |Ft        |j                        }||   t        j                  |      z  g|z  }| j                  |       n"|D cg c]  }t        j                  |       }}t        t        |            D ]  }	| j                  |j                  |	      }
|
j                   ||j                  |	   | j                  |j                  d      j                  j                   j"                  t%        |d | ||	   gz   ||dz   d  z                      |
| j                  |
j&                  <    y c c}w )Nr   rC   r  r_  rP   )r  rE   r   rQ   rM   rV  r  r  r>   r?   r  ry  rc  r_  rX  r   r   r*   r8   r
   )r9  r   make_value_info_funcr  rC   op_setr_  num_outputsrO  r  r-   s              r   _infer_Split_Commonz*SymbolicShapeInference._infer_Split_Common  s    11$:#M$$BCHYDZ[4<<( B;!$0E&&tQ/777''a0E w/777=dkk*K&t,u}}[/IIJ[XE&&u-/45u!U]]1%uE5U$CC 01BKK$KK$NN4::a=166BBLL./@$/G5QT:,/VYjkorskskuYv/vw ')DNN277# % 6s   G c                 D    | j                  |t        j                         y r)   )r  r   re  r  s     r   r   z#SymbolicShapeInference._infer_Split  s      v'D'DEr   c                 D    | j                  |t        j                         y r)   )r  r   make_sequence_value_infor  s     r   r   z-SymbolicShapeInference._infer_SplitToSequence  s      v'F'FGr   c                    | j                  |d      }t        | j                        }|dk  r t        |d      }| j	                  |d      "J | j	                  |d      }t        |d      J ||D cg c]
  }|dk7  s	| }}| j
                  dkD  r8|D cg c]  }t        |      t        k7  s| }}t        |      dkD  rt        j                  d|j                   d|j                   d|        n|D cg c]  }t        |t        |             }}g }t        t        |            D ]  }	|	|vr|j                  ||	          ||	   dk(  st        ||	         t        k7  sJ | j
                  dkD  sKt        ||	         t        k7  sat        j                  d|j                   d|j                   d||	    d	|	 d
	        | j                   |j"                  d      }
|
j%                  t'        j(                  |j"                  d   | j                   |j*                  d      j                  j,                  j.                  |             | j1                  |       y c c}w c c}w c c}w )Nr   r  r  rP   z+Symbolic dimensions in input shape of op: 'z	' node: 'z;'. Assuming the following dimensions are never equal to 1: z'. Assuming the dimension 'z' at index z of the input to be equal to 1.)r  rM   rV  r   r  r5  r   r5   rQ   rH  rn  r  r
   rE   ry  r  rc  r  r_  r   re  rX  r   r*   r  )r9  r   rA  r  r  rO  rC  symbolic_dimensionsr  r7   r-   s              r   r   z%SymbolicShapeInference._infer_Squeeze  sf   oodA.4<<( B; v.D&&tQ/777&&tQ/D v.666< (3={!a1fA{L=}}q 2=&P+QaCq+#&P*+a/LLEdll^S\]a]f]f\g hSSfRgi
 HLLt!(C,<=tDLL3{+,D= ''A7&q>Q.${1~2F#2MMM}}q(T+a.-AS-HI$,,W`aeajaj`k l77B1~6FkRSQTTsu - ^^DKKN+
))Atzz!}-22>>HH	
 	  &= >&P Ms   3
I%>I%I*0I*<I/c           	          | j                  |d      }g }|P| j                  |d      }t        |      D ]  \  }}|||   z  }|j                  |         | j	                  |       n"| j                  | j                  |d      |      }| j                  |j                  d      }|j                  t        j                  |j                  d   |j                  j                  j                  t        |                   y rO   )r  r  r  r  r  r  r  rc  r  r_  r   re  r   r   r*   r8   )	r9  r   repeats_valuer  r  r7   r&   r  r-   s	            r   r   z"SymbolicShapeInference._infer_Tile  s    ++D!4$ $ 5 5dA >!"341mA..&&w/ 5 &&7"66t7K7KDRS7TVZ[O^^DKKN+
))A##--*?;	
r   c                    | j                  |d      }t        t        |dd      |      }| j                  |d      }t	        | j
                        dk  rt        |d      }n| j                  |      d   }|| j                  |      }nt        |      }t        |      t        t        fv r|||<   n3| j                  |d      }|||<   | j                  |       t        |      }t        t!        |j"                              D ]o  }| j$                  |j"                  |      }|j'                  t)        j*                  |j"                  |   |j                  j,                  j.                  |             q y )Nr   rC   r  r  rP  rP   )r  rE   r   r  rM   rV  r  r  rV   r   r5   r   r  r  r8   ry  rQ   r  rc  r_  r   re  r   r*   )	r9  r   rD   rC   r|  rP  r  r  r-   s	            r   r  z"SymbolicShapeInference._infer_TopK  s?   ##D!,#M$$CTJOOD!,	T\\"a'dC(A--d3A6A92248A!A7sCj IdO"33D!<O$%OD!&& 3?CIT[[)*CC 01BKK55dkk#6FH[H[HeHegpqr +r   c                    |j                   d   | j                  v r| j                  |d      }t        |dt	        t        t        t        |                              }| j                  |j                   d      }t        j                   t        j                  |      j                  | t        |            j                         j                         | j                  |j                  d   <   y y )Nr   perm)r  )rX  r  r  r   reversedrH   ry  rQ   r;   	transposer  reshapetupleflattentolistr  )r9  r   r#  r)  r  s        r   r  z'SymbolicShapeInference._infer_Transpose<  s    ::a=D,,,q1J vxU3z?=S8T/UVD))$**Q-8J9RXXj199:FUSW[Yaacjjl T[[^,	 -r   c                    | j                  |d      }t        | j                        }|dk  r t        |d      }| j	                  |d      "J | j	                  |d      }t        |d      J t        |      t        |      z   }|D cg c]  }t        ||       }}d}g }t        |      D ]1  }	|	|v r|j                  d       |j                  ||          |dz  }3 | j                  |j                  d      }
|
j                  t        j                  |j                  d   | j                  |j                  d      j                  j                   j"                  |             | j%                  |       y c c}w )Nr   r  r  rP   )r  rM   rV  r   r  rQ   rE   ry  r  rc  r  r_  r   re  rX  r   r   r*   r  )r9  r   rA  r  r  output_rankr  
input_axisrC  r7   r-   s              r   r  z'SymbolicShapeInference._infer_UnsqueezeE  sh   oodA.4<<( B; v.D&&tQ/777&&tQ/D v.666+&T2>BCd$Q4dC
{#ADy##A&##K
$;<a
 $ ^^DKKN+
))Atzz!}-22>>HH	
 	  &) Ds   E9c                 h   d }t        |d      t        j                  j                  }n&t        |d      t        j                  j                  }|J t        j
                         }|j                  d   |_        t        j                  j                  |j                  j                  j                  j                  j                  j                  _        ||j                  j                  j                  j                  _        | j                   |j                  d      }|j#                  |       y )Nclasslabels_int64sclasslabels_stringsr   )r   r0   r  r=  r<  r1   r  r
   FLOATr   r   r*   map_type
value_typer   key_typerc  r_  )r9  r   map_key_typenew_vir-   s        r   r  z$SymbolicShapeInference._infer_ZipMaph  s    34@++11L4!67C++22L'''$$&kk!nX\XhXhXnXn!!++44??KKU@L!!++44=^^DKKN+
Fr   c                 :   | j                  |d      }| j                  |d      }| j                  |d      }|t        |      dk(  sJ ||d   n|d   }|rt        |      dk(  rt        |d      }|"t        |      dk(  sJ t	        |d         |d<   n!t        |t              rt	        |dz        |d<   | j                  |j                  d      j                  j                  j                  }| j                  |j                  d      }|j                  t        j                  |j                  d   ||             t        |j                        dkD  r| j                  |d      }	t        |j                        dkD  r!|j                  d   r| j                  |d      ng }
t        |j                        dkD  r!|j                  d   r| j                  |d      ng }|
rt        |
      dk(  r|rt        |      dv r	|d	   |
d<   nU|	rSt        |	      dk(  rEt        |	d   t              r"t        |
d   t              r|	d   |
d   z   |
d<   n|
d    d
|	d    |
d<   | j                  |j                  d      }|j                  t        j                  |j                  ||
             y t        |d      }|	d   |z  }d|	d   ||	d   |g}| j                  |j                  d      }|j                  t        j                  |j                  ||             y y y y )Nr   rP   r  r  qkv_hidden_sizesr     r  r  +r  )r  r  rQ   r   r5   r  rc  rX  r   r   r*   r  r_  r   re  r
   )r9  r   r$   shape_weights
shape_biastripled_hidden_sizeqkv_hidden_sizes_attrr  r-   rA  
past_shape
mask_shaper  	head_sizepresent_shapes                  r   r  z'SymbolicShapeInference._infer_Attentionw  s   a(a0((q1
!z?a'''/9/Ejm=YZK[SZ1_$1$8J$K!$001Q6664Q78a/52Q67a>>$**Q-8==IISSLA/BKK55dkk!nlTYZ[4;;!#
 #oodA69<TZZ19LQUQ[Q[\]Q^T__T15df
9<TZZ19LQUQ[Q[\]Q^T__T15df
#j/Q"6!c*o&?(22
1$[)9Q)>%k!nc:z*UV-Y\?],7NZ],JJqM/9!}oQ{1~>N,OJqMA7BKK = =bgg|U_ `a !.dK @I +A) ;I%&A	;q>S\$]MA7BKK = =bgg|Ub cd3 $ %5r   c                    t        |d      }| j                  |d      }||d   ||d   |d   g}n3| j                  |d      }|t        |      dk(  sJ |d   ||d   |d   g}| j                  |j
                  d      j                  j                  j                  }| j                  |j                  d      }|j                  t        j                  |j                  d   ||             y )Nr  r  r   rP   r  )r   r  r  rQ   rc  rX  r   r   r*   r  r_  r   re  )r9  r   r  token_offset_shaperC  query_layer_shaper  r-   s           r   r  z7SymbolicShapeInference._infer_GatedRelativePositionBias  s     "$4	!00q9).q19>PQR>SUghiUjkL $a 8$0S9J5Kq5PPP-a0)=Nq=QSdefSghL~~djjm499EEOO^^DKKN+
F11$++a.,P\]^r   c                    | j                  |d      }| j                  |d      }| j                  |d      }|t        |      dk(  sJ ||d   n|d   }|rt        |      dk(  rt        |d      }|"t        |      dk(  sJ t	        |d         |d<   n!t        |t              rt	        |dz        |d<   | j                  |j                  d      j                  j                  j                  }| j                  |j                  d      }|j                  t        j                  |j                  d   ||             y y y )Nr   rP   r  r=  r  )r  r  rQ   r   r5   r  rc  rX  r   r   r*   r  r_  r   re  )	r9  r   r$   r@  rA  rB  rC  r  r-   s	            r   r  z-SymbolicShapeInference._infer_PackedAttention  s4   a(a0((q1
!z?a'''/9/Ejm=YZK[SZ1_$1$8J$K!$001Q6664Q78a/52Q67a>>$**Q-8==IISSLA/BKK55dkk!nlTYZ[ %5r   c                    | j                  |d      }|t        |      dk(  r|}n4| j                  |d      }|t        |      dk(  sJ |d   |d   |d   z  g}| j                  |j                  d      j
                  j                  j                  }| j                  |j                  d      }|j                  t        j                  |j                  d   ||             y )Nr  r   r  rP   r  )r  rQ   r  rc  rX  r   r   r*   r  r_  r   re  )r9  r   r  rC  shape_queryr  r-   s          r   r  z6SymbolicShapeInference._infer_PackedMultiHeadAttention  s    ))$2"s;'71'<&L//$2K*s;/?1/DDD'NKN[^,KLL~~djjm499EEOO^^DKKN+
F11$++a.,P\]^r   c           	         | j                  |d      }|rt        |      dk(  r| j                  |j                  d      j                  j
                  j                  }| j                  |j                  d      }|j                  t        j                  |j                  d   |d|d   g             | j                  |j                  d      }|j                  t        j                  |j                  d   t        j                  j                  |d   |d   g             | j                  |j                  d      }|j                  t        j                  |j                  d   t        j                  j                  dg             | j                  |j                  d      }|j                  t        j                  |j                  d   t        j                  j                  dg             y y y )Nr   r  token_countr  rP   zbatch_size + 1r  rQ   rc  rX  r   r   r*   r  r_  r   re  r0   r  r  )r9  r   r$   r  r-   vi_token_offsetvi_cumulated_seq_lenvi_max_seq_lens           r   r  z+SymbolicShapeInference._infer_RemovePadding  s   a(SZ1_>>$**Q-8==IISSLA/BKK55dkk!nlUbdijkdlTmno"nnT[[^<O$$--dkk!nd>N>N>T>TW\]^W_afghaiVjk $(>>$++a.#A  ))--dkk!nd>N>N>T>TWgVhi "^^DKKN;N##F$A$A$++a.RVRbRbRhRhkljm$no! %5r   c                    | j                  |d      }| j                  |d      }|rt        |      dk(  r|rt        |      dk(  r| j                  |j                  d      j                  j
                  j                  }| j                  |j                  d      }|d   |d   |d   g}|j                  t        j                  |j                  d   ||             y y y y y r7  )r  rQ   rc  rX  r   r   r*   r  r_  r   re  )r9  r   shape_inputshape_token_offsetr  r-   rC  s          r   r  z,SymbolicShapeInference._infer_RestorePadding  s    oodA.!__T153{+q05GCPbLcghLh>>$**Q-8==IISSLA/B.q13Ea3H+VW.YLKK55dkk!nlT`ab Mi5G0;r   c                 &    | j                  |       y r)   r  r  s     r   r  z&SymbolicShapeInference._infer_BiasGelu      &&t,r   c                    | j                  |d      }d }d }|mt        |      dk(  r| j                  |d      }|}|=t        |      dk(  r/| j                  |d      }|t        |      dk(  r|d   |d<   |d   }| j                  |j                  d      j
                  j                  j                  }| j                  |j                  d      }|j                  t        j                  |j                  d   ||             nt        |      dk(  rt        |d   t              r(t        |d   t              r|d   |d   |d   |d   z  g}n|d   |d   |d    d|d    g}|d   }| j                  |j                  d      j
                  j                  j                  }| j                  |j                  d      }|j                  t        j                  |j                  d   ||             t        |j                        dkD  r{|d   }	t        |d      }
d }t        |      dk(  r/t        |d   t              rt        |d   |
z        n	|d    d	|
 }n|d   }| j                  |d
      }|6t        |d   t              rt        |t              r	|d   |z   }n
|d    d| }|	|
||g}|J t        |j                        dkD  r|j                  d   r|j                  d   r| j                  |j                  d      }|j                  t        j                  |j                  ||             | j                  |j                  d      }|j                  t        j                  |j                  ||             y y y y y y )Nr   r  rP   r  r>  r  *r  /r  r?  )r  rQ   r  rc  rX  r   r   r*   r  r_  r   re  r  r5   r   r
   )r9  r   query_shapetotal_sequence_lengthr  	key_shaperC  value_shaper-   
batch_sizer  rF  rD  rG  s                 r   r  z0SymbolicShapeInference._infer_MultiHeadAttention  sw    oodA. $";1$ //a8	*(S^q-@"&"5"5dA">K".3{3Cq3H*5a.Q,5aL)#~~djjm<AAMMWW^^DKKN3F99$++a.,Xdef[!Q&k!nc2z+a.RU7V$/NKNKPQNU`abUcDc#dL$/NKN{ST~FVVWXcdeXfWgDh#iL(3A%#~~djjm<AAMMWW^^DKKN3F99$++a.,Xdef4;;!#(^
)$<	 	{#q( &k!nc: KNY67 +A/q<  !,AI!00q9
)!*Q-5*EZ\_:`0:1@U0U-3=a=/CXBY0Z-!+Y8My Y#///t{{#a'DKKNt{{1~A7BKK = =bgg|Ub cdA7BKK = =bgg|Ub cd	 @NN'3 $7 #r   c                    | j                  |d      }|v|}| j                  |j                  d      j                  j                  j
                  }|J | j                  |j                  d      }|j                  t        j                  |j                  d   ||             t        |j                        dkD  r|j                  d   r|j                  d   r| j                  |d      }|| j                  |j                  d      }|j                  t        j                  |j                  ||             | j                  |j                  d      }|j                  t        j                  |j                  ||             y y y y y y )Nr   r  rP   r>  )r  rc  rX  r   r   r*   r  r_  r   re  rQ   r  r
   )r9  r   r]  rC  r  r-   rD  s          r   r	  z=SymbolicShapeInference._infer_DecoderMaskedMultiHeadAttentionF	  sK    oodA."&L>>$**Q-8==IISSL+++A/BKK55dkk!nlT`ab4;;!#A4;;q>!00q9
)A7BKK = =bgg|U_ `aA7BKK = =bgg|U_ `a	 * <J# #r   c                 &    | j                  |       y r)   rX  r  s     r   r  z&SymbolicShapeInference._infer_FastGelu\	  rY  r   c                 &    | j                  |       y r)   rX  r  s     r   r  z"SymbolicShapeInference._infer_Gelu_	  rY  r   c                 &    | j                  |       y r)   rX  r  s     r   _infer_QuickGeluz'SymbolicShapeInference._infer_QuickGelub	  rY  r   c                 &    | j                  |       y r)   r  r  s     r   r  z*SymbolicShapeInference._infer_GemmFastGelue	  r  r   c                 &    | j                  |       y r)   r  r  s     r   r  z(SymbolicShapeInference._infer_GemmFloat8h	  r  r   c                    | j                  |       t        |j                        dkD  rt        |d      }|d}| j	                  |d      }|t        |      }t        ||      }|d | t        ||z
        D cg c]  }d c}z   }| j                  |j                  d      j                  j                  j                  }|t        j                  j                  k(  s|t        j                  j                  k(  rt        j                  j                   }| j                  |j                  d      }|j#                  t%        j&                  |j                  d   ||             t        |j                        dkD  rP| j                  |j                  d      }|j#                  t%        j&                  |j                  d   ||             y y y y c c}w )NrP   rC   r  r   r  )r  rQ   r  r   r  rE   ry  rc  rX  r   r   r*   r0   r  FLOAT16BFLOAT16r6  r_  r   re  )	r9  r   rC   x_shaperD   r  
mean_shape
mean_dtyper-   s	            r   r  z0SymbolicShapeInference._infer_LayerNormalizationk	  s   &&t,t{{a v.D|oodA.G"7|+D$7$Ud^%t:L.M:LQq:L.MM
!^^DJJqM:??KKUU
!1!1!9!99Z4K[K[KdKd=d!%!1!1!7!7J^^DKKN3F99$++a.*V`abt{{#a'A7BKK = =dkk!njZd ef ( #   /Ns   ;	Gc                 &    | j                  |       y r)   rX  r  s     r   r  z1SymbolicShapeInference._infer_LongformerAttention	  rY  r   c                    | j                  |d      }| j                  |d      }t        |      dk(  rt        |      dk(  sJ g ||d   }| j                  |j                  d      j                  j
                  j                  }| j                  |j                  d      }|j                  t        j                  |j                  d   ||             t        |j                        dkD  r||j                  d   rm|d   g}| j                  |j                  d      }|j                  t        j                  |j                  d   t        j                  j                  |             t        |j                        dkD  rP| j                  |j                  d      }|j                  t        j                  |j                  d   ||             y y r  rP  )r9  r   input_ids_shapeword_embedding_shaperC  word_embedding_dtyper-   mask_index_shapes           r   r  z5SymbolicShapeInference._infer_EmbedLayerNormalization	  s~   //$2#tQ7?#q(S1E-F!-KKKBB*>q*AB#~~djjm<AAMMWW^^DKKN+
F11$++a.BVXdeft{{aDKKN / 23A/BKK55dkk!ndFVFVF\F\^nopt{{a A/BKK55dkk!nFZ\hij	  r   c                 ~    | j                  |       t        |j                        dkD  r| j                  |dd       y y )Nr  r   r  r  s     r   r"  z4SymbolicShapeInference._infer_SkipLayerNormalization	  s:    &&t, t{{a**4A6  r   c                 &    | j                  |       y r)   rX  r  s     r   r  z'SymbolicShapeInference._infer_GroupNorm	  rY  r   c                 &    | j                  |       y r)   rX  r  s     r   r  z,SymbolicShapeInference._infer_PagedAttention	  rY  r   c                    | j                   |j                  d      j                  j                  j                  }| j                  |d      }|| j                   |j                  d      }|j                  t        j                  |j                  ||             | j                   |j                  d      }|j                  t        j                  |j                  ||             |j                  d   dk7  r&|j                  d   dk7  r| j                  |dd       y |j                  d   dk(  r|j                  d   dk(  sJ t        |d      }t        |d      }| j                  |d      }||d   }t        |t              rlt        ||d|z  z   z        }	||	z  |d<   | j                   |j                  d      }|j                  t        j                  |j                  d   ||             y y y )Nr   r  rP   r  rG   r  kv_num_heads)rc  rX  r   r   r*   r  r  r_  r   re  r
   r  r   r  r  r5   )
r9  r   r  rD  r-   r  ry  r]  hidden_sizerF  s
             r   r  z1SymbolicShapeInference._infer_GroupQueryAttention	  s   ~~djjm499EEOO((q1
! A/BKK55bgg|ZXYA/BKK55bgg|ZXY::a=B4::a=B#6**4A6 ::a=B&4::a=B+>>>%dK8I(~>L//$2K&)!nk3/ #K9q<?O3O$P QI%.%:KNA7BKK = =dkk!nl\g hi	 0 'r   c                 &    | j                  |       y r)   )r  r  s     r   r#  z-SymbolicShapeInference._infer_SparseAttention	  s    ''-r   c                     | j                  |dd       t        |j                        dkD  r| j                  |dd       y y r'  r  r  s     r   r!  z+SymbolicShapeInference._infer_SkipGroupNorm	  s<    &&tQ2t{{a**4A6  r   c                    | j                  |d      }| j                  |d      }|r|rt        |d   t              r|}t        |d   dz        |d<   | j                  |j                  d      }| j                  |j
                  d      j                  j                  j                  }|j                  t        j                  |j                  ||             y y y y r7  )r  r  r5   rc  r  rX  r   r   r*   r_  r   re  r
   )r9  r   rA  
bias_shaperC  r-   r  s          r   r  z+SymbolicShapeInference._infer_BiasSplitGelu	  s    oodA.__T1-
:*Z]C*H&L!*Q-!"34LOA/B>>$**Q-8==IISSLKK55bgg|\Z[ +I:;r   c                 &    | j                  |       y r)   rX  r  s     r   r  z%SymbolicShapeInference._infer_BiasAdd	  rY  r   c                    t        |j                        dk(  r| j                  |       y t        |j                        dk(  r)| j                  |dd       | j                  |dd       y t        |j                        dk(  r=| j                  |dd       | j                  |dd       | j                  |dd       y y )NrP   r  r   r  r  )rQ   r  r  r  s     r   r   z-SymbolicShapeInference._infer_RotaryEmbedding	  s    t{{q **40"**4QQ*O**4QQ*O"**4QQ*O**4QQ*O**4QQ*O	 #r   c                    t        |d      }|sJ d|j                   d       t        |d      }|sJ d|j                   d       ddlm} t        |d      j	                         } ||      }| j
                  |j                  d      }|j                  t        j                  |j                  d   t        j                  j                  g              |g }g }	t        t        |j                              D ]p  }
| j!                  ||
      }|j#                  |       | j
                  |j                  |
      j$                  j&                  j(                  }|	j#                  |       r  ||||	      \  }}t        |      t        |      cxk(  rt        |j                        d	z
  k(  s>n J d| d
t        |       dt        |       dt        |j                        d	z
   d	       t        t        |j                        d	z
        D ]\  }|d	z   }| j
                  |j                  |      }|j                  t        j                  |j                  |   ||   ||                ^ y t        t        |j                        d	z
        D ]|  }| j
                  |j                  |d	z         }| j+                  ||   |      }t-        |      }t        j                  |j                  |d	z      ||   |      }|j                  |       ~ y )Noutput_tensor_typesz
PythonOp 'z'' has no output_tensor_types attribute.output_tensor_ranksz'' has no output_tensor_ranks attribute.r   )get_shape_inference_function	func_namerP   z' returned z shapes and z dtypes, but expected z	 outputs.)r   r
   onnxruntime.capi._pybind_stater  r  rc  r  r_  r   re  r0   r  r=  ry  rQ   rX  r  r  r   r   r*   r  r8   )r9  r   r  r  r  r  shape_infererr-   input_shapesinput_dtypesr  r$   input_dtypeoutput_shapesoutput_dtypesr7   r  r6   rY  s                      r   r  z&SymbolicShapeInference._infer_PythonOp	  s   +D2GH"cj;b$cc"+D2GH"cj;b$cc"O!$4;;=	4Y? ^^DKKN+
F11$++a.$BRBRBXBXZ\]^$LL$S_5k:##E*"nnTZZ-DEJJVV``##K0	  6
 ,9|\+Z(M=}%]);UDKK@PST@TU YK{3}3E2FlSVWdSeRf g  #DKK 01 45Y@U 3t{{+a/0 1u^^DKK$=>11$++l2K][\M]_lmn_op 1 3t{{+a/0^^DKKA$67"667J17MtT2;?#::4;;q1u;MObcdOeglm
J' 1r   c                 :   | j                  ||      }| j                  |j                  |      j                  j                  j
                  }| j                  |j                  |      }|j                  t        j                  |j                  |   ||             y r)   )
r  rc  rX  r   r   r*   r  r_  r   re  )r9  r   r  r  r$   r  r-   s          r   r  z0SymbolicShapeInference._propagate_shape_and_type
  sw    k2~~djj&=>CCOOYY^^DKK56
F11$++l2K\[`abr   c                 R    t        |      t        k7  ryd|vry|| j                  v ryy)NFunk__T)r   r   r1  )r9  r[  s     r   _is_none_dimz#SymbolicShapeInference._is_none_dim
  s0    	?c!)#+++r   c                 <    |D ]  }| j                  |      s|c S  y r)   )r  )r9  	out_shapeouts      r   _is_shape_contains_none_dimz2SymbolicShapeInference._is_shape_contains_none_dim!
  s$    C  %
  r   c                 !  % |xs i | _         | j                  j                  j                  d       | j	                  d       t               | _        | j                  j                  j                  D ]  }t        |      }|t        |j                        r?|j                  j                  j                  j                  j                  j                  }n*|j                  j                  j                  j                  }t!        |      D ]5  \  }}|	t#        | j%                  |j&                  |            ||   _        7 | j                  j+                  |D cg c]  }t        |      t"        u s| c}        | j                  D ]q  }|| j,                  v r<| j,                  |   }	|	| j.                  v sJ | j.                  |	   | j.                  |<   Mt1        j2                  |dd      | j.                  |<   s t5        j6                         | _        | j8                  j;                  | j                         | j8                  j                  j                  d       i }
%fd%| j8                  j                  j<                  D ]  } %|      |
|j>                  d   <    g }tA        | j                  j                  j                        tA        | j                  j                  jB                        z   D ch c]  }|j&                   }}tE        | j                  j                  j>                  D cg c]  }|j&                  |v  c}      r"| j                  j                  j<                  }ntG        | j                  j                  j>                  D cg c]  }|j&                  |v  c}      s>tI        |      }| j                  j                  j<                  D ]o  }|j>                  d   |vstG        |
|j>                  d      D cg c]	  }|s||v  c}      sD|j+                  |j>                         |jK                  |       q |tI        |      k(  rNtG        | j                  j                  j>                  D cg c]  }|j&                  |v  c}      stM        d      tG        | j                  j                  j>                  D cg c]  }|j&                  |v  c}      s>|D ]  }tG        |j                  D cg c]  }|s|| jN                  v  c}      sJ | jQ                  |       d	}|jR                  | jT                  v r! | jT                  |jR                     |       n:|jR                  d
v r| jN                  |j>                  d      }tI        |j                  j                  j                  j                        dk(  rt4        jV                  jX                  |j                  j                  _        n|jR                  dk(  r|jZ                  dk(  r|j\                  D ]y  }|j&                  dk(  st_        |j`                  tb              r|j`                  je                  d      n|j`                  }|| jf                  v rd} | jf                  |   |        n | jh                  dkD  rttj        jm                  |jR                  dz   |j&                  z          t!        |j                        D ]-  \  }}tj        jm                  d|||| jn                  v rdnd       / |jR                  dv r| jN                  |j>                  d      }tI        tq        |j                              }ts        tI        |j                              D cg c]  }| ju                  ||       }}ts        ||jR                  dv rdndz
        D ]W  }|D cg c](  }tI        |      |z   |k\  s|tI        |      |z
  |z      * }}tI        |      dkD  sE| jw                  |d       Y ts        tI        |j>                              D ]N  }|jR                  dk(  s|jR                  dk(  r|dv r'|jR                  dk(  rtI        |j>                        dkD  rO| jN                  |j>                  |      }|j                  }|jy                  d      }|dvr1| jh                  dkD  r|dk(  r|j                  j                  jy                  d      }|dk(  rtj        jm                  dj{                  |j>                  |   t#        t        |            t4        jV                  j|                  j                  |j                  j                  j                  j                  j                                     nQtj        jm                  d |j>                  |    d!|        n(tj        jm                  d |j>                  |    d|        t        |      }|j                  j                  t4        jV                  jX                  k(  }| jh                  dkD  rtj        jm                  d |j>                  |    d|d"t4        jV                  j|                  j                  |j                  j                  j                                |j>                  |   | j                   v r;tj        jm                  d#t#        | j                   |j>                  |            z          |d |v s| j                  |      s|s| j                  r!|jR                  d$v rts        tI        |j                              D cg c]  }| ju                  ||       }}|jR                  dv rd |v s| j                  |      rd |v r|j                  d       } n |j                  | j                  |            } |D cg c]  }tI        |      tI        |      z
  | z    }!}tI        |d         dkD  r|!d   tI        |d         dz
  k  sJ tI        |d         dkD  r|!d   tI        |d         dz
  k  s8J |jR                  d%k(  r%| ju                  |d      | j                  |d      g}ng }|rts        tI        |            D ]  } ||    | j                  ||          s|D cg c]  }tI        |      tI        |      z
  | z    }!}tI        |!      dkD  sS| j                  t        ||!      D cg c]+  \  }}|dk\  r!t        ||         r||   nt#        ||         - c}}        d| _H        nd	| _H        nd	| _H        | j                  d	u r|jR                  | jT                  vr|s|xr |d u xs tI        |      dk(  }"|"r!| j                  r| j                  |d      nd&}ntI        |      }|dk\  rX| j                  |||      }#|r;| jN                  |j                  d      j                  j                  j                  }$n |j                  j                  j                  }$|j;                  t        j                  |j&                  |$t        |#                   | jh                  dkD  r|"r=tj        jm                  d'|jR                   d(|j&                   d)|j&                   d*       | jh                  dkD  rItj        jm                  d |j>                  |    d|#d"|j                  j                  j                          d| _H        | jh                  dkD  s| j                  r|rBtj        jm                  d+|jR                  |j&                         tj        jm                  d,       |j                  D ]K  }|| jN                  v r#tj        jm                  | jN                  |          4tj        jm                  d-|        M tj        jm                  d.       |j>                  D ]K  }|| jN                  v r#tj        jm                  | jN                  |          4tj        jm                  d-|        M | j                  r-|s+tj        jm                  d/t#        | j,                        z            y	  d	| _H        yc c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}}w )0NrY  T)r\  )r  positivera  c           	         | j                   D ch c]  }|s|	 }}g }| j                  dk(  rt        | d      t        | d      g}n| j                  dv rt        | d      g}|D ]  }|j                  D ch c]  }|j                   }}t               }|j                  D ]  }|j                  |j                          |j                  D ],  }|j                   |      D cg c]	  }||vs| c}       . |j                  |       |j                   D ],  }|j                  |v s|j                  |j                         .  |S c c}w c c}w c c}w )Nrx   rz  r{  )ry   r   r  )
rX  r  r   ra  r
   rC  r   rd  r  rE  )	r   r7   namesr|  gg_outputs_and_initializersg_prereqn
get_prereqs	           r   r  z6SymbolicShapeInference._infer_impl.<locals>.get_prereqP
  s7    $

0
1aQ
E0I||t#!$6!$6	 !11*489	>?mm-Lmaffm*-L5A.55ahh?  AOO
1$e1JdAdQ$ef  X&AvvQVV, !  L+ 1 .M
 %fs   EE6E%	E/Er   zInvalid model with cyclic graphF)ConvTransposeATenzorg.pytorch.atenoperatorr  r  z: z  Input %s: %s %srG   r  r  rP   rk  r   r   r  r   r   )r   sparse_tensor_typeNr   r   z  {}: sequence of {} {}z  z: sequence of rx  z  Sympy Data: )ra   r   r   rn   rz   r  r{   rh   r   r  rq   LessGreaterLessOrEqualGreaterOrEqualr   r}   rp   r  zPossible unknown op: z node: z, guessing z shapez0Stopping at incomplete shape inference at %s: %sznode inputs:znot in known_vi_ for znode outputs:z	Merging: )Or  rV  rW  r  rL  rC  r2  rX  r.   r"   r   r   r*   r   r$   r   r  r   r  r
   rZ  rd  r0  r1  r>   rG  r0   r^  r  r_  r   r  rH   ra  r  rB  rQ   r  r  rc  r  r  r$  r  	UNDEFINEDrJ   r	   r  rO  bytesr  r.  r5  rH  rn  rb  r'   ry  r  ro  r   formatr  r  r  r3  rK  r  r  rT  r  r4   r/  r4  r  r  r   re  r8   )&r9  start_sympy_datar7   rA  
input_dimsi_dimr   r&   rO  s_mergeprereq_for_noder  sorted_nodessorted_known_vir  old_sorted_nodes_lenr   known_aten_opr-   r   aten_op_namer
   r  r  r  r  out_typeout_type_kindseq_cls_typer  out_type_undefinedshapesr  dim_idxis_unknown_opr|  	out_dtyper  s&                                        @r   r  z"SymbolicShapeInference._infer_impl'
  s   +1r%%l3##T#:!e##))A3A6K"166"VV11;;GGMMQQ
VV//5599
'4
s;25d6L6LQVVUZ6[2\Ju%/ 5
 &&;'Q;a$q'S.;'QR *" $$AD)))//2$"5"5555)-)<)<W)E##A& */aPT)U##A& % (dll+%%m4 	0 ##((A+5a=OAHHQK( ) +/0B0B0H0H+IDQUQ]Q]QcQcQoQoLp+pq+pa166+pq4<<3E3E3L3LM3La/)3LMN<<--22Ldll>P>P>W>WX>W166_4>WXY'*<'8$ LL..33DAo=37Ft{{ST~7V\7V!Z[o-7V\D (..t{{;$++D1 4 (3|+<<S8<8J8J8Q8QR8Q1QVV.8QRF $$EFF dll>P>P>W>WX>W166_4>WXY !DTZZEZ1T^^+ZEFFF((.!M||t///.  .t4!22 ^^DKKN3rww**00445:484D4D4N4NBGG''1'DKK;M,M NNDyyJ.AKDFFTYAZtvv}}W'=`d`f`f'4+C+CC,0MBD44\B4H + }}q T\\D0499<=(4GAtLL!4aPTX\XjXjPj}prs  5
 || 
  
 ^^DKKN38AB?DS_?UV?U!T__T15?U	Vx@n0n1tuvwAAJeAcRSfWXj\dNdqQ(!2Q!67Ge7|a'///N x
 S-. LL$<<Pr@rVm<<#44T[[9IA9M ^^DKK$4577 ( 3 3G < !(SS}}q((O;+3+A+A+K+K+V+VW^+_L+}< &$=$D$D(,C(8(+,Eb,I(J(,(8(8(A(A(F(F,.GG,A,A,K,K,W,W,a,a)*%&!" !'r$++c2B1C>R^Q_-` a"LL2dkk#.>-?r-)QR5b9	%-%9%9%C%CtGWGWGaGa%a"==1$LLT[[-.bQt?O?O?X?X?]?]^`^e^e^q^q^{^{?|>}~ {{3'4+;+;;%5D<L<LT[[Y\M]<^8_%_` )ty/@DDdDdenDo'''<< , & INcRVR\R\oH^%_H^1doodA&>H^F%_#|| 0  
 $(9#48X8XYb8c'+y'8.7ood.C.7ood>^>^_h>i.jV\.]V\QRs1vI/F/LV\G.]+.vay>A+='!*sSYZ[S\~`aOaBa$a+a+.vay>A+='!*sSYZ[S\~`aOaBa$a+a!\\X5 !%a 8 $a 8&F
 &(F!',S^'<#,S>#=dFWFWXabeXfFg$, SY*YRXQ3q6C	N+BS+HRX*Y#&w<!#3$($=$= 9<FG8L)*8L1/0Av 5?qt4DAaD#aPQd),S8L)*%& (= )-DI(-DI$)	 yyE)dll$BRBR.R[h(:(i	T@Q@hUXYbUcghUh( IMH_H_t';';D!'DegH (+9~H#q=(,(@(@4QT(UI1,0NN4::a=,I,N,N,Z,Z,d,d	 -/GG,?,?,I,I	KK & = =$&GG$-$>y$I!"  $}}q0#0$*LL*?~WUYU^U^T__jkmkrkrjssy(z%& $(==1#4$*LL2dkk#6F5Gr)VWXZX_X_XkXkXuXuWv1w$x(,DI$}}q(0@0@DV%WY]YeYegkgpgpq^4!%A DNN2 &T^^A-> ? &/DQC-H I	 ",
 _5!%A DNN2 &T^^A-> ? &/DQC-H I	 "-
  ++4F"LLs4;P;P7Q)QR Y /c !~ 	I	 (Rd rM Y ]
 S Y FT WeZ &` /^& +Z)*s~   AB7
6AB7
AB<>AC#ACAC
!AC
AC ACAC
AC
)AC)AC$ AC$ AC)8!AC.!AC3
(0AC8c                     | j                   j                  j                  D ]C  }|j                  | j                  v s|j                  | j                  |j                            E y r)   )rV  rW  r  r
   rc  r_  )r9  r  s     r   r  z-SymbolicShapeInference._update_output_from_via  sE    ll((//F{{dnn,v{{ ;< 0r   c                 |   t        |       }|r|dk  rt        j                  d       y t        ||||      }d}|j	                  |        |j
                  r|j                         }|j
                  r|j                          |s-t        j                  |j                  dd       t        d      |j                  S )N   z.Only support models of onnx opset 7 and above.Fzsym_shape_infer_temp.onnxT)save_as_external_dataz#Incomplete symbolic shape inference)rM   rH  rI  r_   ri  r/  r  r  r0   
save_modelrV  r  )rh  r:  r;  r<  r=  
onnx_opsetr  all_shapes_inferreds           r   r  z#SymbolicShapeInference.infer_shapesf  s    u%
zA~NNKL#9':O`bi#j # ,,U3&++":"F"F"H '++ 779"OO4<<>YquvABB'///r   )rG   )F)TT)FF)r   r   )r   )Tr)   )FFr   )|__name__
__module____qualname__r?  rT  rL  ri  ru  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  ro  r  r  r   r   r   r   r   r   r   r   r   r   r  r
  r  r   r   r   r   r   r   r   r   r   r  r   r   r   r   r   r%  r&  r)  r'  r(  r*  r+  r,  r-  r   r   r   r   r  r   r   r   r   r   r   r   r   r   r   r  r   r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  rf  r  r  r  r  r  r"  r  r  r  r#  r!  r  r  r   r  r  r  r  r  r  staticmethodr  rB   r   r   r_   r_   }   s   DL+*Z
(
<27	/w
D`'D6(p#JC&:
 
[BH8\>6:

?4'j
('
R
&D
2



__<b| <4	

"l89%v)A\&j
x
&
2m D
"
nnB.j20` T
&BN\2'h.`!F	

DIJ
ZdxW")>FH.'`
(s:!'F+eZ_,\$_p(c-JeXb,---))g(-k*7--j8.7
\-P-(^cxt	=
 0 0r   r_   c                     t        j                         } | j                  ddd       | j                  dd       | j                  dd	d
d       | j                  ddt        d       | j                  ddd
d       | j                  ddt        d       | j                  ddd
d       | j                  ddd
d       | j                  ddd       | j                  ddt        d        | j	                         S )!Nz--inputTzThe input model file)requiredhelpz--outputzThe output model file)r  z--auto_mergez:Automatically merge symbolic dims when confliction happens
store_trueF)r  actiondefaultz	--int_maxzGmaximum value for integer to be treated as boundless for ops like slicer  )r  r   r  z--guess_output_rankz;guess output rank to be the same as input 0 for unknown opsz	--verbosezHPrints detailed logs of inference, 0: turn off, 1: warnings, 3: detailedr   z--save_as_external_dataz%Saving an ONNX model to external dataz--all_tensors_to_one_filez(Saving all the external data to one filez--external_data_locationz+The file location to save the external filez./)r  r  z--external_data_size_thresholdz$The size threshold for external datai   )argparseArgumentParseradd_argumentr5   
parse_args)parsers    r   parse_argumentsr  x  sN   $$&F
	D7MN

)@A
I	   V	   J	   W	   !4	   #7	   ":  
 (3	   r   __main__zinput model: zoutput model z!Doing symbolic shape inference...TF)r  all_tensors_to_one_filelocationsize_thresholdconvert_attributezDone!r)   )1r  loggingnumpyr;   r0   r>   r   r   r   	packagingr   parse__version__	getLoggerr  rH  r   r   r"   r'   r+   r.   r2   r8   r4   rE   rM   rV   rY   r]   r_   r  r   inforX  r  r  loadr:  r;  r<  r=  out_mpr  r  r  external_data_locationexternal_data_size_thresholdsaverB   r   r   <module>r     s  
      6 6 w}}T%%&-'--*@@ @@			8	$c'0
2_r.
x+0 x+0vW3l zD
KK$**,-{{Odkk12
KK34#00		$**F {{v%%DOO&*(,(D(D44#@@"' DIIfdkk*G { r   