
    fPi,             	       `   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    r	 e            Z e!                    de j"        z              e j#        re!                    de j#        z              e!                    d           e$                     ej%        e j"                  e j&        e j'        e j(        e j)                  Z*e j#        rde*rde j+        r, ej,        e*e j#        de j-        e j.        e j/        d           n ej0        e*e j#                   e!                    d           dS dS dS dS )    N)helpernumpy_helpershape_inference)versionz1.8.0c                 f    fd| j         D             }|rt          j        |d                   S |S )Nc                 *    g | ]}|j         k    |S  name).0attr	attr_names     z/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/onnxruntime/tools/symbolic_shape_infer.py
<listcomp>z!get_attribute.<locals>.<listcomp>   s%    GGGd	Y0F0FT0F0F0F    r   )	attributer   get_attribute_value)noder   default_valuefounds    `  r   get_attributer      sA    GGGGdnGGGE 4)%(333r   c                     t          |                     d                    t          u r#t          | |                     d                    nd S )Nvalue)type
WhichOneofstrgetattrdims    r   get_dim_from_protor       sC    489P9P4Q4QUX4X4X73w//000^bbr   c                 D    |                      d          }|dv sJ |dk    S )Nr   )tensor_typesequence_typer#   )r   )
type_protocls_types     r   is_sequencer&      s2    $$W--H77777&&r   c                     t          |           rJ | j                            d          rd | j        j        j        D             S d S )Nshapec                 ,    g | ]}t          |          S r	   )r    r   ds     r   r   z-get_shape_from_type_proto.<locals>.<listcomp>'   s!    PPP!"1%%PPPr   )r&   r"   HasFieldr(   r   r$   s    r   get_shape_from_type_protor.   $   sQ    :&&&&&&&w// PPz/E/K/OPPPPtr   c                 d    t          |           r| j        j        j        j        S | j        j        S N)r&   r#   	elem_typer"   r-   s    r   get_elem_type_from_type_protor2   ,   s0    : 0'1=GG%//r   c                    | j                             d          }|d S t          | j                   rH| j         j        j                            d          dk    rt          | j         j        j                  S d S t          | j                   S )Nr   r"   )r   r   r&   r#   r1   r.   )vir%   s     r   get_shape_from_value_infor5   3   s    w!!'**Ht27 27 *55g>>-OO,RW-B-LMMM4(111r   c                 :    t          j                    }| |_        |S r0   )onnxValueInfoProtor   )r   r4   s     r   make_named_value_infor9   @   s    				BBGIr   c                     d | D             S )Nc                 p    g | ]3}|d n,t          |          rt          |          nt          |          4S r0   )
is_literalintr   r   is     r   r   z.get_shape_from_sympy_shape.<locals>.<listcomp>G   s;    ^^^QAIDDjmm$GCFFFQ^^^r   r	   )sympy_shapes    r   get_shape_from_sympy_shaperA   F   s    ^^R]^^^^r   c                     t          |           t          t          j        t          j        t
          j        fv pt          | d          o| j        S )N	is_number)	r   r=   npint64int32sympyIntegerhasattrrC   r   s    r   r<   r<   J   s;    99bh%-@@qWSR]E^E^Epcfcpqr   c                 :    | |k     r| | k    sJ | dk    r| n|| z   S Nr   r	   )axisranks     r   handle_negative_axisrN   N   s0    $;;4D5===(19944$+-r   c                     |pg d}t          |          t          k    r|g}| j        D ]}|j        |v r	|j        c S d S )N) r7   zai.onnx)r   listopset_importdomainr   )mprS   opsets      r   	get_opsetrV   S   sc    ....FF||t ! !<6!!=    " 4r   c                     t          |           t          u rt          |           dk    sJ | d         S t          |           t          j        u r|                                 S | S N   r   )r   rQ   lenrD   ndarrayitemxs    r   	as_scalarr_   ^   sR    Aww$1vv{{{{t	aBJ		vvxxr   c                     t          |           t          u r| S t          |           t          j        u rt          |           S |r| d S | gS r0   )r   rQ   rD   r[   )r^   	keep_nones     r   as_listrb   h   sL    Aww$	aBJ		Aww	 qyts
r   c                 t    t          |           t          u rt          j        d          }| D ]}||z  }n| }|S NrY   )r   rQ   rG   rH   )r^   r   vs      r   sympy_reduce_productrf   s   sK    Aww$a   	 	AAIEE	 Lr   c                       e Zd Zdd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ddZddZd Zd Zd Zd ZddZddZdd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,d0 Z-d1 Z.d2 Z/d3 Z0d4 Z1d5 Z2d6 Z3d7 Z4d8 Z5d9 Z6d: Z7d; Z8d< Z9d= Z:d> Z;d? Z<d@ Z=dA Z>dB Z?dC Z@dD ZAdE ZBdF ZCdG ZDdH ZEdI ZFdJ ZGdK ZHdL ZIdM ZJdN ZKdO ZLdP ZMdQ ZNdR ZOdS ZPdT ZQdU ZRdV ZSdW ZTdX ZUdY ZVdZ ZWd[ ZXd\ ZYd] ZZd^ Z[d_ Z\d` Z]da Z^db Z_dc Z`dd Zade Zbdf Zcdg Zddh Zedi Zfdj Zgdk Zhdl Zidm Zjdn Zkdo Zldp Zmdq Zndr Zods Zpdt Zqdu Zrdv Zsdw Ztdx Zudy Zvdz Zwd{ Zxdd|Zyd} Zzd~ Z{ddZ|d Z}e~dd            ZdS )SymbolicShapeInferencerP   c                 t   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%| j        d&| j        d'| j        d(| j        d)| j        d*| j        d+| j        d,| j        d-| j        d.| j        d/| j         d0| j!        d1| j"        d2| j#        d3| j$        i d4| j%        d5| j&        d6| j'        d7| j'        d8| j'        d9| j(        d:| j)        d;| j*        d<| j         d=| j+        d>| j,        d?| j-        d@| j.        dA| j         dB| j/        dC| j         dD| j0        i dE| j1        dF| j2        dG| j3        dH| j4        dI| j5        dJ| j6        dK| j7        dL| j8        dM| j9        dN| j        dO| j:        dP| j;        dQ| j<        dR| j=        dS| j=        dT| j>        dU| j?        i dV| j@        dW| jA        dX| jB        dY| jC        dZ| jD        d[| jE        d\| jF        d]| jG        d^| jH        d_| jH        d`| jI        da| j8        db| jJ        dc| jK        dd| jL        de| jM        df| j?        | jN        | jO        | jO        | jP        | jQ        dg| _R        i dh| j        di| jS        dj| jT        dk| jU        dl| jV        dm| jV        dn| jW        do| jX        dp| jY        dq| jU        dr| jU        ds| j-        dt| jZ        du| j[        dv| j[        dw| j[        dx| j[        | _\        dy| _]        i | _^        i | __        i | _`        || _a        || _b        || _c        || _d        dz| _e        || _f        d S ){NAdd	AllReduceArrayFeatureExtractorAveragePoolBatchNormalizationCastCategoryMapperCompressConcatConcatFromSequenceConstantConstantOfShapeConvCumSumDivEinsumExpandEqualFloorGatherGatherElementsGatherNDIdentityIfLoopMatMulMatMulInteger16MaxPoolMaxMemcpyFromHostMemcpyToHostMinMoEMulNonMaxSuppressionNonZeroOneHotPadRange
Reciprocal	ReduceSum
ReduceMean
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DynamicTimeWarpingEmbedLayerNormalizationFastGeluGatedRelativePositionBiasGatherBlockQuantizedGeluGemmFastGelu
GemmFloat8	GroupNormGroupNormalizationGroupQueryAttentionLayerNormalizationLongformerAttentionMatMulNBitsMultiHeadAttentionNhwcConvPackedAttentionPackedMultiHeadAttentionPagedAttentionPythonOp
QLinearAdd
QLinearMulQuantizeLinear	QuickGeluRelativePositionBiasRemovePaddingRestorePaddingRotaryEmbeddingSimplifiedLayerNormalization)SkipGroupNormSkipLayerNormalization SkipSimplifiedLayerNormalizationSparseAttentionUnfoldTensor	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   )g_infer_symbolic_compute_ops_pass_on_shape_and_type_infer_ArrayFeatureExtractor_infer_Pool_infer_BatchNormalization_infer_Cast_infer_CategoryMapper_infer_Compress_infer_Concat_infer_ConcatFromSequence_infer_Constant_infer_ConstantOfShape_infer_Conv_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_ReduceMean_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_DynamicTimeWarping_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_QLinearBinary_infer_QuantizeLinear_infer_RelativePositionBias_infer_RemovePadding_infer_RestorePadding_infer_RotaryEmbedding_infer_SkipGroupNorm_infer_SkipLayerNormalization_infer_SparseAttention_infer_UnfoldTensor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   m
43m
5m
 $T%Fm
 4+	m

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

 4*$
 4*$
 47$
 d-$
 d-$
 $1$
 #D$;$
 t,$
  !<$
 !$";$
 !$";$
  !$";!$
" !$";#$
 & 	 "  %"3r   Fc                 f    t           fd|D                       sJ t          |          } j                                        D ]3\  }}||v r*|                    |           |                    |           4d }|D ]}t          |          r|} n||D ]}| j        v r|} n|/|D ],}t           j	        |                   t          j        u r|} n-| j        dk    r.t                              dd                    |                     t!          |          }d |D             }||                    t%          |                             }|                    |           |D ]}||k    r	t          |          r1t          |          r"t'          |          t'          |          k    sJ t          |          rt'          |          n| j        |<    j                                        D ]\  }}||k    r
| j        |<   |r j        r                                  d S d S d S )Nc              3   t   K   | ]2}t          |          t          u r	|j        v pt          |          V  3d S r0   )r   r   rE  r<   )r   srM  s     r   	<genexpr>z>SymbolicShapeInference._add_suggested_merge.<locals>.<genexpr>  sF      ccVWDGGsN?qD,?'?QJqMMccccccr   r   z9Potential unsafe merge between symbolic expressions: (%s),c                 ,    g | ]}t          |          S r	   rZ   r   rV  s     r   r   z?SymbolicShapeInference._add_suggested_merge.<locals>.<listcomp>(  s    111qCFF111r   )allsetrD  itemsremoveaddr<   rF  r   rE  rG   SymbolrI  loggerwarningjoinrQ   indexr   r=   rG  _apply_suggested_merge)	rM  symbolsapplykre   map_torV  symbols_listlenss	   `        r   _add_suggested_mergez+SymbolicShapeInference._add_suggested_merge  s   cccc[bccccccccg,,)//11 	 	DAqG||q!!!A 	 	A!}}  >  +++FE , >  +A.//5<??FE @ >}q  Z\_\d\del\m\mnnn==L11L111D!$**SYY"7"78FNN6""" 	6 	6AF{{&!! -jmm -6{{c!ff,,,,6@6H6H'Ts6{{{fD!!$-3355 6 6166/5D)!,6  	*T% 	*'')))))	* 	* 	* 	*r   c                 h   | j         sd S t          | j        j        j                  |rg nt          | j        j        j                  z   D ]f}|j        j        j        j	        D ]M}|j
        | j         v r=| j         |j
                 }t          |          rt          |          |_        F||_
        Ngd S r0   )rD  rQ   out_mp_graphinput
value_infor   r"   r(   r   	dim_paramr<   r=   	dim_value)rM  graph_input_onlyr?   r+   re   s        r   rf  z-SymbolicShapeInference._apply_suggested_merge8  s    $ 	Fdl(.//9I3r22tTXT`TfTqOrOrs 	( 	(AV'-1 ( (;$"777-ak:A!!}} (&)!ff&'(	( 	(r   c                    t          j                    | _        | j                            |           d t	          | j        j        j                  D             | _        d | j        j        j        D             | _	        d t	          | j        j        j                  D             | _
        | j
                            d | j        j        j        D                        d S )Nc                     i | ]
}|j         |S r	   r
   r>   s     r   
<dictcomp>z6SymbolicShapeInference._preprocess.<locals>.<dictcomp>G      PPPAafaPPPr   c                     i | ]
}|j         |S r	   r
   r>   s     r   rx  z6SymbolicShapeInference._preprocess.<locals>.<dictcomp>H  ry  r   c                     i | ]
}|j         |S r	   r
   r>   s     r   rx  z6SymbolicShapeInference._preprocess.<locals>.<dictcomp>I  s    LLL!&!LLLr   c           
      ~    i | ]:}|j         t          j        |j         |j        t	          |j                            ;S r	   )r   r   make_tensor_value_info	data_typerQ   dimsr>   s     r   rx  z6SymbolicShapeInference._preprocess.<locals>.<dictcomp>K  sI        5afak4PQPV<<XX  r   )r7   
ModelProtoro  CopyFromrQ   rp  rq  graph_inputs_initializerinitializers_	known_vi_update)rM  in_mps     r   _preprocessz"SymbolicShapeInference._preprocessD  s    ((e$$$PPdl6H6N1O1OPPPPP1C1OPPPLLT$,2D2J-K-KLLL +7  	
 	
 	
 	
 	
r   c                 6    t          d D                       s j        rt          t                              }d |D             }t	          |          dk    sJ t	          |          dk    r{|                    d          } j        dk    r<t                              d|d |         ||dz   d          z    d||                      	                    |d           ||         S  j        dk    r.t                              d|dd           d	|d                     d         S d S t          fd
D                       rd         S  fdD             t          fdD                       rd          j
        v sJ d         S d S )Nc              3   B   K   | ]}t          |          t          u V  d S r0   r   r   r*   s     r   rW  z8SymbolicShapeInference._merge_symbols.<locals>.<genexpr>R  s,      00a477c>000000r   c                 ,    g | ]}t          |          S r	   r<   r*   s     r   r   z9SymbolicShapeInference._merge_symbols.<locals>.<listcomp>U  s    ===A*Q--===r   rY   r   zdim z has been merged with value Fallow_broadcastz has been merged with dim c              3   0   K   | ]}|d          k    V  dS r   Nr	   r   r+   r  s     r   rW  z8SymbolicShapeInference._merge_symbols.<locals>.<genexpr>e  s+      **qDG|******r   c                 F    g | ]}j                             ||          S r	   )rD  get)r   r+   rM  s     r   r   z9SymbolicShapeInference._merge_symbols.<locals>.<listcomp>g  s,    @@@a$'++Aq11@@@r   c              3   0   K   | ]}|d          k    V  dS r  r	   )r   r+   mergeds     r   rW  z8SymbolicShapeInference._merge_symbols.<locals>.<genexpr>h  s+      ..!qF1I~......r   )r\  rG  rQ   r]  sumre  rI  rb  debug_check_merged_dimsrE  )rM  r  unique_dimsis_intint_dimr  s   ``   @r   _merge_symbolsz%SymbolicShapeInference._merge_symbolsQ  s    00400000 	 "3t99oo=====6{{a''''v;;!##$ll1ooG}q(( J;xx#8;wQR{}};U#U  J  Js~  @G  tH  J  J   ++K+OOO&w//}q((%gKO%g%gWbcdWe%g%ghhh7Nt****T***** 	7N@@@@4@@@....v..... 	!9 33333!94r   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|	}
n|	dk    r|}
nw|                     ||	g          }
|
s^| j        r|                     ||	gd           n=t                              dt          |          z   dz   t          |	          z              |
g|}|S )NrY   Trh  zunsupported broadcast between  )	rZ   r   ranger  rG  rm  rb  rc  r   )rM  shape1shape2	new_shaperank1rank2new_rankr?   dim1dim2new_dims              r   _broadcast_shapesz(SymbolicShapeInference._broadcast_shapeso  s=   	FFue$$x 	. 	.A,-II6%!)a-((1D,-II6%!)a-((1DqyyDDLL--tTl;; g ' g114,d1KKKK'G#d))'SVY'Y\_`d\e\e'efff -9-IIr   c                     |j         |         }|| j        v r| j        |         }t          |          S || j        v sJ t	          | j        |         j                  S r0   )rq  r  r5   r  rQ   r  rM  r   idxr   r4   s        r   
_get_shapez!SymbolicShapeInference._get_shape  sa    z#4>!!%B,R0004-----*405666r   c                     |t          |j                  dz
  k    rd S |j        |         }|| j        v r| j        |         }t          |          S || j        v rt          | j        |         j                  S d S rd   )rZ   rq  r  r5   r  rQ   r  r  s        r   _try_get_shapez%SymbolicShapeInference._try_get_shape  s}    TZ1$$$4z#4>!!%B,R0004%%%*405666tr   c                 H    t          |                     ||                    S r0   )rZ   r  )rM  r   r  s      r   _get_shape_rankz&SymbolicShapeInference._get_shape_rank  s    4??4--...r   c                     g }|                      ||          D ]t}t          |          t          u rA|                    || j        v r| j        |         nt          j        |dd                     Yd |usJ |                    |           u|S )NTintegernonnegative)r  r   r   appendrE  rG   ra  )rM  r   r  r@   r+   s        r   _get_sympy_shapez'SymbolicShapeInference._get_sympy_shape  s    s++ 		& 		&AAww#~~""D/// '**a4HHH    1}}}}""1%%%%r   c                     |j         |         }|| j        v s|| j        v sJ || j        v r| j        |         nt          j        | j        |                   S r0   )rq  sympy_data_r  r   to_arrayrM  r   r  r   s       r   
_get_valuez!SymbolicShapeInference._get_value  sc    z#t'''443E+E+E+EE)-1A)A)At%%|G\]a]opt]uGvGvvr   c                     |t          |j                  k    rd S |j        |         }|| j        v s	|| j        v r|                     ||          S d S r0   )rZ   rq  r  r  r  r  s       r   _try_get_valuez%SymbolicShapeInference._try_get_value  sY    #dj//!!4z#4###tt/A'A'A??4---tr   c                 v   t          |          D ]\  }}t          |          st          |          t          k    r|t          |          }|| j        v r7t          | j        |                   r_| j        | j        |                  ||<   {t          |          | j        vr|| j        t          |          <   d S r0   )	enumerater<   r   r   rD  rE  )rM  new_sympy_shaper?   r  str_dims        r   _update_computed_dimsz,SymbolicShapeInference._update_computed_dims  s    #O44 
	D 
	DJAwg&& 	D4==C+?+?g,,d333!$"7"@AA ! )-)<T=RSZ=[)\OA&& 7||4+>>><C+CLL9
	D 
	Dr   c                 `   
 j         dv }|sg }t           j                  dk    rj         dv r fdj        D             }j         dv rԉj        d          j        v r j        j        d                  }t          t          |j                             fdt          t          j                            D             }t          j         dv rd	ndz
            D ];

fd
|D             }t          |          dk    r 
                    |d           <t          j        gd fdj        D             d j        D             |          } j        j                            |           t!          j         j                   _        t          t          j                            D ]r}j        |         }	|	ra j        j        j                                        }|s+|                     j        j        j        |                    n|	|_        | j        |	<   sd S )N)'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   c                 N    g | ]!}|j         v |j        vj         |         "S r	   )r  r  )r   r   rM  s     r   r   zBSymbolicShapeInference._onnx_infer_single_node.<locals>.<listcomp>  sF           222t4CU7U7U &t,7U7U7Ur   	rj   r   r   rx   r   MatMulIntegerr   r   Sumr   c                 <    g | ]}                     |          S r	   r  r   r?   r   rM  s     r   r   zBSymbolicShapeInference._onnx_infer_single_node.<locals>.<listcomp>  s'     Z Z Zaq!9!9 Z Z Zr   r   r  r      c                 r    g | ]3}t          |          z   k    |t          |          z
  z            4S r	   rZ  r   rV  r+   out_ranks     r   r   zBSymbolicShapeInference._onnx_infer_single_node.<locals>.<listcomp>  sI    "i"i"iRUVWRXRX[\R\`hRhRh1SVVh%6%:#;RhRhRhr   rY   Tr  tmpc                 .    g | ]}|j         |         S r	   r  r   r?   rM  s     r   r   zBSymbolicShapeInference._onnx_infer_single_node.<locals>.<listcomp>  s%    <<<q!<"<<<r   c                 ,    g | ]}t          |          S r	   )r9   r>   s     r   r   zBSymbolicShapeInference._onnx_infer_single_node.<locals>.<listcomp>  s!    ???a&q))???r   )op_typerV   ro  rq  outputr  rZ   r.   r   r  r  r   
make_graphtmp_mp_rp  r  r   infer_shapesrr  r`  r   )rM  r   
skip_inferinitializersr4   	in_shapesin_dims	tmp_graphi_oor+   r  s   ``        @@r   _onnx_infer_single_nodez.SymbolicShapeInference._onnx_infer_single_node  s   \ (&
 (

T  /	F L$,''1,,$,-2O2O        $
      | 
  
 
 ;q>T^33A7B"#<RW#E#EFFH Z Z Z Z Z5TZCYCY Z Z ZI" 9g)g)gAAmno  S S #j"i"i"i"iY"i"i"iw<<!++ 33GT3RRR )<<<<DJ<<<??4;??? I L''	222*7EEDLT[))** 	' 	'CC A '\'26688!  KK 2 9# >????BG$&q!	' 	'r   Tc           
      b     j         dk    r8t                              d|j         d|j        d          d|j                    d t          |j                  t          |j                  z   D             fd j	        D             t          j        t          |j                  dt          |j                   fd	D             z   d
 |j        D                       }|j                            fd j        j        j        D                        |j                            |j                    j        j                            |           t%           j         j         j         j          j        dz   t/           j                  z             }|r xj        dz  c_        |                     j                    j                                        |_        |j        r3|                     j                                                   |j        3|                                 |rX|                     d           |j                            |j        j        j        d tC          |j                                      |                     d           |j                            |j        j        j                   |                     d           |j"                            |j        j        j"                   |                     d           |j                            |j        j        j                   d |j        j        j        D             } fd|D             }i }	|D ]}
|
|j#        v sJ |j#        |
         |	|
<    j#        $                    |	           |S )Nr  zInferencing subgraph of node z with output(r   z...): c                     h | ]	}|j         
S r	   r
   r>   s     r   	<setcomp>z>SymbolicShapeInference._onnx_infer_subgraph.<locals>.<setcomp>5  s    ]]]a16]]]r   c                     h | ]}|v|	S r	   r	   )r   r   subgraph_inputss     r   r  z>SymbolicShapeInference._onnx_infer_subgraph.<locals>.<setcomp>6  s$    "b"b"bDdRaFaFa4FaFaFar   r  c                 *    g | ]}j         |         S r	   r  r  s     r   r   z?SymbolicShapeInference._onnx_infer_subgraph.<locals>.<listcomp>:  s     #W#W#W!DN1$5#W#W#Wr   c                 6    g | ]}t          |j                  S r	   )r9   r   r>   s     r   r   z?SymbolicShapeInference._onnx_infer_subgraph.<locals>.<listcomp>;  s#    DDDq"16**DDDr   c                 &    g | ]}|j         v |S r	   r
   )r   r?   subgraph_implicit_inputs     r   r   z?SymbolicShapeInference._onnx_infer_subgraph.<locals>.<listcomp>=  s(    %u%u%uASTSY]tStStaStStStr   _)rR  rY   rq  r  rr  r   c                 ,    g | ]}t          |          S r	   )r5   )r   r  s     r   r   z?SymbolicShapeInference._onnx_infer_subgraph.<locals>.<listcomp>[  s!    oooA4Q77ooor   c                 `    h | ]*}|r&|D ]#}t          |          t          u |j        v!|$+S r	   r   r   rE  )r   rV  r+   rM  s      r   r  z>SymbolicShapeInference._onnx_infer_subgraph.<locals>.<setcomp>\  sV     &
 &
 &
!&
56&
 &
01$q''S..QVZViMiMiAMiMiMiMir   )%rI  rb  r  r   r  r  rQ   r  rq  r  r   r  r   extendro  rp  r  r  rh   rJ  rG  rH  rL  r   rK  r  rD  copyrC  _infer_implr  _update_output_from_vi
ClearFieldrZ   rr  rE  r  )rM  r   subgraphuse_node_inputinc_subgraph_idr  symbolic_shape_inferencesubgraph_shapessubgraph_new_symbolic_dimsnew_dimsr+   r  r  s   `          @@r   _onnx_infer_subgraphz+SymbolicShapeInference._onnx_infer_subgraph.  s   =1LLuuuQUQ\]^Q_uugkgsuuvvv
 ^]40D+E+EX^H\H\+\]]]"b"b"b"bDN"b"b"b%  #W#W#W#W?V#W#W#WWDDHODDD	
 
	 	$$%u%u%u%u1C1O%u%u%uvvv$$X%9:::##I...#9M#M<#%D,=(>(>>$
 $
 $
   	#" ,,T\:::484I4N4N4P4P 1&+ 	J$001A1F1F1H1HIII '+ 	J 77999 	c(((N!!":"B"H"NO`QTUYU_Q`Q`O`"abbbH%%%7?ELMMML)))""#;#C#I#TUUUF###5=CHIIIooAYAaAgAnooo&
 &
 &
 &
&&
 &
 &
" + 	E 	EA0?????2A!DHQKK""8,,,''r   c                    
 d 
 fdt          t          j                            D             }t          d |D                       rt	          |          D ]\  }}t          |          t          j        ur!t          |j                  dk    rd }n`t          |j                  dk    r 
|	                                          }n)t          |j                  dk    sJ 
fd|D             }|||<   d |D             }t          |          }	|	dk    rj|rht	          |          D ]X\  }}|t          |t                    r2t          |          |	k     r	||	z  ||<   9t          |          |	k    sJ O|g|	z  ||<   Y|S )Nc                 :    |r| dz  dk    r| S t          |           S rX   r=   )r   allow_float_valuess     r   int_or_floatzESymbolicShapeInference._get_int_or_float_values.<locals>.int_or_floatg  s'    ! eai1nnu::r   c                 <    g | ]}                     |          S r	   )r  r  s     r   r   zCSymbolicShapeInference._get_int_or_float_values.<locals>.<listcomp>m  s)    OOO1$%%dA..OOOr   c              3      K   | ]}|d uV  	d S r0   r	   r   re   s     r   rW  zBSymbolicShapeInference._get_int_or_float_values.<locals>.<genexpr>n  &      --q}------r   rY   r   c                 (    g | ]} |          S r	   r	   )r   vvr  r  s     r   r   zCSymbolicShapeInference._get_int_or_float_values.<locals>.<listcomp>y  s&    NNNb\\".@AANNNr   c                 Z    g | ](}t          |t                    rt          |          nd )S r   )
isinstancerQ   rZ   r  s     r   r   zCSymbolicShapeInference._get_int_or_float_values.<locals>.<listcomp>{  s1    KKKq
1d 3 3:c!fffKKKr   )r  rZ   rq  r\  r  r   rD   r[   r(   r\   r   r  rQ   )rM  r   	broadcastr  valuesr?   re   new_v
values_lenmax_lenr  s   `` `      @r   _get_int_or_float_valuesz/SymbolicShapeInference._get_int_or_float_valuesf  s   	 	 	 POOOOc$*oo8N8NOOO--f----- 	"!&)) 
" 
"177"*,,qw<<!## EE\\Q&&(L3EFFEEqw<<1,,,,NNNNNANNNE!q		KKFKKK
j//a<<I<!&)) 	. 	.19a&& .1vv''$%Kq		"1vv00000!"gF1IIr   c                    t          |j                  dk    sJ |j        dv r|                     |dd          }n|                     |d          }t	          d |D                       rjd |D             }t          |          }|r-fdt          |d	d
iD             | j        |j        d         <   d S  |          | j        |j        d         <   d S d S )NrY   )r   rx   T)r  r  )r  c              3      K   | ]}|d uV  	d S r0   r	   r  s     r   rW  z@SymbolicShapeInference._compute_on_sympy_data.<locals>.<genexpr>  r  r   c                 8    g | ]}t          |t                    S r	   )r  rQ   r  s     r   r   zASymbolicShapeInference._compute_on_sympy_data.<locals>.<listcomp>  s"    ;;;qz!T**;;;r   c                 &    g | ]} |          S r	   r	   )r   vsop_funcs     r   r   zASymbolicShapeInference._compute_on_sympy_data.<locals>.<listcomp>  s!    3e3e3eBGGBKK3e3e3er   strictFr   )rZ   r  r  r  r\  anyzipr  )rM  r   r  r  is_listrb   s     `   r   _compute_on_sympy_dataz-SymbolicShapeInference._compute_on_sympy_data  s   4;1$$$$
 <>))2244\`2aaFF22442HHF--f----- 	C;;F;;;G'llG C3e3e3e3e#vJd^cJdJd3e3e3e Q0003:76?? Q000	C 	Cr   c                 z    t          |j                  dk    s|j        dv sJ |                     |d            d S )NrY   )r   r   r   c                     | d         S rK   r	   r]   s    r   <lambda>z<SymbolicShapeInference._pass_on_sympy_data.<locals>.<lambda>  s
    AaD r   )rZ   rq  r  r  rM  r   s     r   _pass_on_sympy_dataz*SymbolicShapeInference._pass_on_sympy_data  sR    4:!##t| 8
 (
 (
 (
 

 	##D..99999r   c           
         | j         |j        d                  }|                    t          j        |j        d         t          | j         |j        d                  j                  |                     |d                               d S rK   )	r  r  r  r   r}  r2   rq  r   r  )rM  r   r4   s      r   r   z.SymbolicShapeInference._pass_on_shape_and_type  sy    ^DKN+
)A-dnTZ].K.PQQa(( 	
 	
 	
 	
 	
r   c                     | d| }|| j         v r@| j         |         }t          |          r!t          j        t	          |                    n|}n!t          j        |dd          }|| j        |<   |S )N_dTr  )rD  r<   rG   rH   r=   ra  rE  )rM  rR  r   r  re   new_symbolic_dims         r   _new_symbolic_dimz(SymbolicShapeInference._new_symbolic_dim  s    $$s$$d+++%g.A8B1Lu}SVV4441$|GTtTTT+;D(r   r   c           	          |                      |j         | j         dt          | j        j        j                                      |           d| d|          S )Nr  _o)r(  r  rL  rQ   ro  rp  r   re  )rM  r   out_idxr   s       r   _new_symbolic_dim_from_outputz4SymbolicShapeInference._new_symbolic_dim_from_output  sb    %%|cT\ccD1C1H,I,I,O,OPT,U,UccY`ccc
 
 	
r   c                 B      fdt          |          D             S )Nc                 >    g | ]}                     |          S r	   r,  )r   r?   r   r+  rM  s     r   r   z>SymbolicShapeInference._new_symbolic_shape.<locals>.<listcomp>  s+    ZZZ224!DDZZZr   )r  )rM  rM   r   r+  s   ` ``r   _new_symbolic_shapez*SymbolicShapeInference._new_symbolic_shape  s,    ZZZZZZeTXkkZZZZr   c                    |                      |d          }t          |j                  dk    rS|                      |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 |D             }t	          |          st          | j        |j        d                            }	t          |	          dk    rct          |          t          |	          k    sJ |r"d |	| dz
  d         D             || dz
  d<   nd	 |	| d          D             || d <   |S t          |d
dg|z            }
t          |ddg|z            }d t          ||
d          D             }t          |d          }|dgd|z  z  }t          |dd          	                    d          }|dk    rv|dk    rp	 d t          || d          |d          D             }d t          |||d          D             }n# t          $ r d t          ||d          D             }Y nXw xY w|dk    rg }nKdg|z  }nDt          |          d|z  k    sJ d t          |d |         ||d          d          D             }t          |dd          }t          |          D ]}|| |z   |rdndz            }t          |          dk    r|||         z   }|r't          j        |||         z
  ||         z            }n|||         z
  ||         z  }|dz   || |z   |rdndz   <   |S )Nr   rY   r     kernel_shapec                 .    g | ]}t          |           S r	   r  r>   s     r   r   zCSymbolicShapeInference._compute_conv_pool_shape.<locals>.<listcomp>  s!    EEE!
1-EEEr   c                 6    g | ]}t          j        |          S r	   rG   rH   r*   s     r   r   zCSymbolicShapeInference._compute_conv_pool_shape.<locals>.<listcomp>  s"    2c2c2c5=3C3C2c2c2cr   c                 6    g | ]}t          j        |          S r	   r7  r*   s     r   r   zCSymbolicShapeInference._compute_conv_pool_shape.<locals>.<listcomp>  s"    *S*S*S5=+;+;*S*S*Sr   	dilationsstridesc                 *    g | ]\  }}|d z
  |z  d z   S rY   r	   )r   ri  r+   s      r   r   zCSymbolicShapeInference._compute_conv_pool_shape.<locals>.<listcomp>  s(    !i!i!ida1q5A+/!i!i!ir   Fr  padsauto_pads   NOTSETutf-8VALIDNOTSETc                 >    g | ]\  }}t          j        ||          S r	   )rG   Modr   r+   rV  s      r   r   zCSymbolicShapeInference._compute_conv_pool_shape.<locals>.<listcomp>  s&    lllDAq	!Qlllr   c                 R    g | ]$\  }}}t          d |d k    r||z
  n||z
            %S r  r   )r   ri  rV  rs       r   r   zCSymbolicShapeInference._compute_conv_pool_shape.<locals>.<listcomp>  sL     " " "#Aq! A!q&&Aq1u>>" " "r   c                 :    g | ]\  }}t          d ||z
            S r  rG  )r   ri  rV  s      r   r   zCSymbolicShapeInference._compute_conv_pool_shape.<locals>.<listcomp>  s5     " " ",0AqAA" " "r   c                     g | ]
\  }}||z   S r	   r	   )r   p1p2s      r   r   zCSymbolicShapeInference._compute_conv_pool_shape.<locals>.<listcomp>  s     \\\fb""r'\\\r   	ceil_mode)r  rZ   rq  r   r  r5   r  r  r  decode	TypeErrorr  rG   ceiling)rM  r   channels_lastr@   W_shaperM   r4  spatial_shapeis_symbolic_dimsr(   r9  r:  effective_kernel_shaper>  r?  residual
total_padsrM  r?   effective_input_sizestrided_kernel_positionss                        r   _compute_conv_pool_shapez/SymbolicShapeInference._compute_conv_pool_shape  s   ++D!44tz??Q++D!44Gw<<!#D6CX7D519r>22RVQVQWQWL5<QZK]122G(~>>L|$$D;4!8++++ 8E]TEAIN33+W[V[V\V\J]EE}EEE#$$ 	#-dnT[^.LMME5zzA~~;''3u::5555  T2c2cUTXSX[\S\_aSaMb2c2c2cK	B//*S*SUD566]*S*S*SK'""!$aS4Z@@	i!t<<!i!ic,PYbg>h>h>h!i!i!iT6**<3!d(#D$T:yAAHHQQH7""x8';';	llCTEFF@SU\ej<k<k<klllH" "'*+A7H]b'c'c'c" " "JJ !   " "478NPW`e4f4f4f" " "JJJ W$$

S4Z

t99D((((\\D$KdeeUZ0[0[0[\\\J!$Q77	t 
	a 
	aA#.uqy-<VBBUV/W#X :""';jm'K$ l+0=),B1,EEQRS, ,(( -ACYZ[C\,\ahijak+k(D\_`D`K	=%?RRa@AAs   AI! !&J
	J
c                     |rd D             t          fdD                       s|                     d           d S d S )Nc                 V    g | ]&}t          |          rt          |          d k    $|'S r<  )r<   r=   r*   s     r   r   z=SymbolicShapeInference._check_merged_dims.<locals>.<listcomp>	  s.    KKK!JqMMKc!ffkkAkkkr   c              3   0   K   | ]}|d          k    V  dS r  r	   r  s     r   rW  z<SymbolicShapeInference._check_merged_dims.<locals>.<genexpr>
  +      ..A1Q<......r   Tr  )r\  rm  )rM  r  r  s    ` r   r  z)SymbolicShapeInference._check_merged_dims  sm     	LKKtKKKD......... 	8%%d$%77777	8 	8r   Nc                    |                      |d          }|                      |d          }t          |          }t          |          }d}d}|dk    r|dk    sJ |dk    r	|dk    rg }	nl|dk    rd}g |d |         |d         }	nO|dk    rd}|d |         }	n<d}d}g |                     |d d         |d d                   |d         |d         }	|                     ||         ||         gd           |'| j        |j        d                  j        j        j        }| j        |j	        d                  }
|

                    t          j        |j	        d         ||	                     d S )Nr   rY   r2  Fr  )r  rZ   r  r  r  rq  r   r"   r1   r  r  r   r}  )rM  r   output_dtype	lhs_shape	rhs_shapelhs_rankrhs_ranklhs_reduce_dimrhs_reduce_dimr  r4   s              r   _compute_matmul_shapez,SymbolicShapeInference._compute_matmul_shape  s   OOD!,,	OOD!,,	y>>y>>!||1,q==X]]II]]ND)O^O4DimDII]]N!/>/2IINNo$003B33B3PPoR[\^R_oajkmanoI~&	.(AB! 	  	
 	
 	
 >$*Q-8=ISL^DKN+
F1$+a.,PYZZ[[[[[r   c           
         t          |          r|j        j        j        n|j        }t          |          r|j        j        j        n|j        }|j        |j        k    r|j        r|j        n|j        }t          d| dt          j        j	        j
                            |j                   dt          j        j	        j
                            |j                             |                    d          rt          t          |j        j        |j        j        d                    D ]\  }}	|	d         |	d         k    r{t          j                                        }
t          |          s)t'          |                     |||                    |
_        |j        j        |                             |
           d	S |                    |           d	S )
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(   Fr=  r   rY   N)r&   r#   r1   r"   r   r  
ValueErrorr7   onnx_pbTensorProtoDataTypeNamer,   r  r  r(   r   TensorShapeProto	Dimensionr   r,  rs  r  )rM  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<Q<QkH",88W_Wk 	 =H<Q<QkH",88W_Wk 	 $(AAA#'9>dii$,GWG W W<+499/:STTW W<+499/:STTW W  
 ##G,, 
	6#C(=(A?CXC\ej$k$k$kll D DBa5BqE>> #3==??G&x00 g,/0R0RSWY`bd0e0e,f,f)#)-b1::7CCCD D $$_55555r   c           	      V   |                      |d          }|                      |d          }| j        |j        d                  }|                    t	          j        |j        d         | j        |j        d                  j        j        j	        |d d         |z                        d S Nr   rY   r2  
r  r  r  r  r   r}  rq  r   r"   r1   )rM  r   
data_shapeindices_shaper4   s        r   r   z3SymbolicShapeInference._infer_ArrayFeatureExtractorI  s    __T1--
a00^DKN+
)Atz!}-2>H3B3-/ 	
 	
 	
 	
 	
r   c                      d d d d  fd fdd d d	 d
 d
}|j         |v sJ                      |||j                             d S )Nc                 $    | d         | d         z   S Nr   rY   r	   ls    r   r!  zDSymbolicShapeInference._infer_symbolic_compute_ops.<locals>.<lambda>W      QqTAaD[ r   c                     t          | d         | d         z  t                    rt          | d         | d         z            n| d         | d         z  S r  r  floatr=   r  s    r   r!  zDSymbolicShapeInference._infer_symbolic_compute_ops.<locals>.<lambda>X  sM    %/!!e%D%DVAaDAaDL!!!!A$RSTURV, r   c                 &    | d         | d         k    S r  r	   r  s    r   r!  zDSymbolicShapeInference._infer_symbolic_compute_ops.<locals>.<lambda>[  s    qtqt| r   c                 6    t          j        | d                   S rK   )rG   floorr  s    r   r!  zDSymbolicShapeInference._infer_symbolic_compute_ops.<locals>.<lambda>\  s    u{1Q400 r   c                 6   t          | d                   r't          | d                   j         k     r| d         n\t          | d                   r't          | d                   j         k     r| d         n t          j        | d         | d                   S r  )r<   r=   rJ  rG   r   r  rM  s    r   r!  zDSymbolicShapeInference._infer_symbolic_compute_ops.<locals>.<lambda>]  s    ad##j(+AaD		T]N(B(B !(1..h3qt99~3M3MaddSXS\]^_`]acdefcgShSh r   c                 2   t          | d                   r&t          | d                   j        k    r| d         n[t          | d                   r&t          | d                   j        k    r| d         n t          j        | d         | d                   S r  )r<   r=   rJ  rG   r   r  s    r   r!  zDSymbolicShapeInference._infer_symbolic_compute_ops.<locals>.<lambda>b  s    ad##i(+AaD		DM(A(A !(1..g3qt99t}3L3LaddRWR[\]^_\`bcdebfRgRg r   c                     t          | d         | d         z  t                    rt          | d         | d         z            n| d         | d         z  S r  r  r  s    r   r!  zDSymbolicShapeInference._infer_symbolic_compute_ops.<locals>.<lambda>g  sM    AaD1Q4K1O1O`S1!---UVWXUY\]^_\`U` r   c                 $    | d         | d         z
  S r  r	   r  s    r   r!  zDSymbolicShapeInference._infer_symbolic_compute_ops.<locals>.<lambda>h  r  r   c                 2    | d         r| d         n| d         S Nr   rY   r  r	   r  s    r   r!  zDSymbolicShapeInference._infer_symbolic_compute_ops.<locals>.<lambda>i  s    qt5qtt1 r   c                     | d          S rK   r	   r  s    r   r!  zDSymbolicShapeInference._infer_symbolic_compute_ops.<locals>.<lambda>j  s    adU r   )
rj   rx   r{   r|   r   r   r   r   r   r   )r  r  )rM  r   funcss   `  r   r   z2SymbolicShapeInference._infer_symbolic_compute_opsU  s    ((  ,+00   
   
 a`((55"?)
 
, |u$$$$##D%*=>>>>>r   c                 0    |                      |           d S r0   )r#  r"  s     r   r   z"SymbolicShapeInference._infer_Casto  s      &&&&&r   c           
         | j         |j        d                  j        j        j        }|t
          j        j        k    rt
          j        j        }nt
          j        j        }| j         |j	        d                  }|
                    t          j        |j	        d         ||                     |d                               d S rK   )r  rq  r   r"   r1   r7   rl  STRINGINT64r  r  r   r}  r  )rM  r   
input_typeoutput_typer4   s        r   r   z,SymbolicShapeInference._infer_CategoryMapperr  s    ^DJqM27CM
)000*0KK*1K^DKN+
F1$+a.+t_cefOgOghhiiiiir   c                    |                      |d          }t          |                     |                    }t          |d          }||g}n"|}||t	          |t          |                    <   | j        |j        d                  }|                    t          j
        |j        d         | j        |j        d                  j        j        j        |                     d S )Nr   rL   )r  r   r,  r   rN   rZ   r  r  r  r   r}  rq  r   r"   r1   )rM  r   input_shapecompress_lenrL   output_shaper4   s          r   r   z&SymbolicShapeInference._infer_Compress{  s    oodA..4==dCCDDT6**<(>LL&LIUL-dC4D4DEEF^DKN+
)Atz!}-2>H 	
 	
 	
 	
 	
r   c           	          t           fdj        D                       r                               }t          d |D                       rt	          d          dk    sJ g  j        j        d         <   t          t          j                            D ]v}||         }t          |t                    r, j        j        d                                      |           K j        j        d                                      |           w                     d          }t          t	          d          t          |                    }t          dt          j                            D ].}                     |          }|r||         ||         z   ||<   /                     |           t          t          |                    D ]|k    r	 fdt          t          j                            D             t          fdD                       rT                               }	t#          |	          t$          u r|	r j        |	         nd |<   |	|<    j        j        d                  }
|
                    t-          j        j        d          j        j        d                  j        j        j        t5          |                               d S )Nc              3   <   K   | ]}|j         v p|j        v V  d S r0   )r  r  r  s     r   rW  z7SymbolicShapeInference._infer_Concat.<locals>.<genexpr>  s8      TTAqD$$?T-?(?TTTTTTr   c              3      K   | ]}|d uV  	d S r0   r	   r  s     r   rW  z7SymbolicShapeInference._infer_Concat.<locals>.<genexpr>  s&      11Q1D=111111r   rL   r   rY   c                 t    g | ]4}                     |                               |                   5S r	   r  )r   i_idxr+   r   rM  s     r   r   z8SymbolicShapeInference._infer_Concat.<locals>.<listcomp>  sD    xxx[_[j[jkoqv[w[wxDOOD%003xxxr   c              3   0   K   | ]}|d          k    V  dS r  r	   r  s     r   rW  z7SymbolicShapeInference._infer_Concat.<locals>.<genexpr>  r^  r   )r  rq  r  r\  r   r  r  r  rZ   r  rQ   r  r  r  rN   r  r  r   r   rE  r  r  r   r}  r"   r1   rA   )rM  r   r  r?   r   r@   rL   r  r  r  r4   r+   r  s   ``         @@r   r   z$SymbolicShapeInference._infer_Concat  s   TTTTTTTTT 
	G22488F11&11111 G$T622a777735 Q0s4:// G GA"1IE!%.. G(Q8??FFFF(Q8??FFFF++D!44#M$$?$?[AQAQRR1c$*oo.. 	J 	JE//e<<K J$/$5D8I$ID!"";///s;''(( 
	( 
	(ADyyxxxxxxs4:AWAWxxxD......... ((..FF||s""@F!P!4V!<!<DA!'A^DKN+
)Atz!}-2>H*;77 	
 	
 	
 	
 	
r   c                 8   |                      |d          }t          |d          rdnd}t          t          |d          t          |          |z             }t	          |                     |d|                    }|}|rg |d |         |||d          }n|||<   | j        |j        d                  }|                    t          j
        |j        d         | j        |j        d                  j        j        j        j        j        |                     d S )Nr   new_axisrY   rL   )r  r   rN   rZ   r   r,  r  r  r  r   r}  rq  r   r#   r1   r"   )rM  r   	seq_shaper  rL   
concat_dimr  r4   s           r   r   z0SymbolicShapeInference._infer_ConcatFromSequence  s   OOD!,,	%dJ77>11Q#M$$?$?YRZAZ[[;;D!TJJKK
	 	)J)ETE*JJJ4559IJII(IdO^DKN+
)Atz!}-2@JV` 	
 	
 	
 	
 	
r   c                 t    t          |d          }t          j        |          | j        |j        d         <   d S )Nr   r   )r   r   r  r  r  )rM  r   ts      r   r   z&SymbolicShapeInference._infer_Constant  s5    $((+7+@+C+CQ(((r   c           	         |                      |          d         }| j        |j        d                  }|t          |          t          k    r|g}|                     |           |j        j        j        t          j	        j
        k    rzt          d |D                       rat          j        d |D             t          j                  t          j        t#          |dd                    z  | j        |j        d         <   n0|                     |                     |d          d         |          }|                    t-          j        |j        d         |j        j        j        t1          |                               d S )Nr   c              3   4   K   | ]}t          |          V  d S r0   r  r   r^   s     r   rW  z@SymbolicShapeInference._infer_ConstantOfShape.<locals>.<genexpr>  s*      NrNrabzZ[}}NrNrNrNrNrNrr   c                 ,    g | ]}t          |          S r	   r  r  s     r   r   zASymbolicShapeInference._infer_ConstantOfShape.<locals>.<listcomp>  s    111SVV111r   )dtyper   )r  r  r  r   rQ   r  r"   r1   r7   rl  r  r\  rD   onesrE   r   r  r   r  r0  r  r  r   r}  rA   rM  r   r@   r4   s       r   r   z-SymbolicShapeInference._infer_ConstantOfShape  sj   33D99!<^DKN+"K  D((*m&&{333w",0@0FFF3NrNrfqNrNrNrKrKrF35711[1114 4 4 )-gq*I*IJJ4K Q0 224??43K3KA3NPTUUK
)A#-*;77 	
 	
 	
 	
 	
r   c           	      *   |                      |          }|                     |           | j        |j        d                  }|                    t          j        |j        d         |j        j        j	        t          |                               d S rK   )rZ  r  r  r  r  r   r}  r   r"   r1   rA   r  s       r   r   z"SymbolicShapeInference._infer_Conv  s    33D99"";///^DKN+
)A#-*;77 	
 	
 	
 	
 	
r   c           	      Z   |                      |d          }|                     |           | j        |j        d                  }|                    t          j        |j        d         | j        |j        d                  j        j	        j
        t          |                               d S )NT)rQ  r   )rZ  r  r  r  r  r   r}  rq  r   r"   r1   rA   r  s       r   r)  z&SymbolicShapeInference._infer_NhwcConv  s    33D3MM"";///^DKN+
)Atz!}-2>H*;77 	
 	
 	
 	
 	
r   c                    | j         |j        d                  j        j        j        }|                     |d          }| j         |j        d                  }|                    t          j	        |j        d         ||                     d S rX   )
r  rq  r   r"   r1   r  r  r  r   r}  rM  r   ra  r  r4   s        r   r  z.SymbolicShapeInference._infer_DequantizeLinear   sr    ~djm49EO tQ//^DKN+
F1$+a.,P\]]^^^^^r   c                    t           j        j        }t          |j                  dk    r4|j        d         r'| j        |j        d                  j        j        j        }| 	                    |d          }| j        |j
        d                  }|                    t          j        |j
        d         ||                     d S )Nr  r   )r7   rl  UINT8rZ   rq  r  r   r"   r1   r  r  r  r   r}  r  s        r   r/  z,SymbolicShapeInference._infer_QuantizeLinear
  s     '-tz??Q4:a=>$*Q-8=ISL tQ//^DKN+
F1$+a.,P\]]^^^^^r   c                 p   | j         |j        d                  j        j        j        }|                     |d          }|                     |d          }|                     ||          }| j         |j        d                  }|                    t          j
        |j        d         ||                     d S Nr   r3  )r  rq  r   r"   r1   r  r  r  r  r   r}  )rM  r   ra  input_1_shapeinput_2_shaper  r4   s          r   r.  z+SymbolicShapeInference._infer_QLinearBinary  s    ~djm49EO a00a00 **=-HH	^DKN+
F1$+a.,PYZZ[[[[[r   c                    t          |d          }|                    dd          }|                    d          }|dk    r
|d |         n|}d}d}d}i }|                    d          }	|	D ]}
|
                    d          }|                     ||          }t          |          }|dk    r |dk    r|t          |
          z
  d	z   }|d
z   }t          d
|d
z             D ]D}|
|          }|dk    r3||          }||vr|||<   $t          |          t          j	        ur|||<   E|d
z   }g }ddl
m}  |            }|dk    r|||dz   d          }|                    d          }|dk    r-t          |          D ]}|                    ||                    |D ]#}|dk    r|                    ||                    $nt          |          D ]}|                    ||                    |D ]&}|dk    r|dk    r||v r||         d
z   ||<   !d
||<   '|                                D ]&\  }}|d
k    r|                    ||                    '| j        |j        d                  j        j        j        }| j        |j        d                  }|                    t)          j        |j        d         ||                     d S )Nequation    r   s   ->r2  r      ,s   ...r3  rY   .   )OrderedDictr  ,   )r   replacefindsplitr  rZ   r  r   rG   ra  collectionsr  r  r^  r  rq  r"   r1   r  r  r   r}  )rM  r   r  	mid_indexleft_equationnum_operandsnum_ellipsisnum_ellipsis_indicesletter_to_dimtermstermellipsis_indexr(   rM   r?   letterr   r  r  num_letter_occurrencesright_equationright_ellipsis_indexckeyr   ra  r4   s                              r   r   z$SymbolicShapeInference._infer_Einsum%  sV    z22##D#..MM%((	09R),,X ##D)) 	, 	,D!YYv..NOOD,77Eu::D##1$$+/#d))+;a+?(+a/1dQh'' 4 4qbR<<)C]2203f--c%,6603f-'!+LL++++++!,??%i!moo6N#1#6#6v#>#> #r))344 5 5A#**584444# = =77#**=+;<<<= /00 1 1&&uQx0000" 6 677qBww2224J14MPQ4Q.q1145.q14::<< ? ?
UA::#**=+=>>>~djm49EO^DKN+
F1$+a.,P_``aaaaar   c                    t          |                     |d          d          }||                     |           |                     |d          }|                     |t          |                    }| j        |j        d                  }|                    t          j
        |j        d         | j        |j        d                  j        j        j        |                     d S d S )NrY   Tra   r   )rb   r  r  r  r  rA   r  r  r  r   r}  rq  r   r"   r1   )rM  r   expand_to_shaper(   r  r4   s         r   r   z$SymbolicShapeInference._infer_Expandc  s    !$"5"5dA">">$OOO&&&777OOD!,,E..u6PQ`6a6abbIA/BKK-KNN4:a=16BL      '&r   c           
         |                      |d          }t          t          |dd          t          |                    }|                      |d          }| j        |j        d                  }|j        dk    r(| j        |j        d                  j        j	        j
        }nJ|j        dk    r(| j        |j        d                  j        j	        j
        }nt          d|j                   |                    t          j        |j        d         ||d |         |z   ||dz   d          z                        |j        d         | j        v rt          |          dk    rt          |dd          dk    r|                     |d          }|| j        |j        d                  t                    t"          u rt          |          t$          j        u r;t          |j                  dk    r#fd|D             | j        |j        d         <   d S t+          |                   | j        |j        d         <   d S |dk    s|d	k    sJ | j        |j        d         <   d S d S d S d S d S )
Nr   rL   rY   r}   r   r  zUnsupported Gather op_type: c                 :    g | ]}t          |                   S r	   r  )r   r?   datas     r   r   z8SymbolicShapeInference._infer_Gather.<locals>.<listcomp>  s#    ;V;V;VQDQL;V;V;Vr   r2  )r  rN   r   rZ   r  r  r  rq  r   r"   r1   rj  r  r   r}  r  r  rQ   rD   r[   r(   r=   )	rM  r   r|  rL   r}  r4   r1   r  r  s	           @r   r   z$SymbolicShapeInference._infer_Gathers  s[   __T1--
#M$$B$BC
OOTTa00^DKN+<8##tz!}5:FPII\333tz!}5:FPIIJDLJJKKK
)A5D5!M1Jtaxzz4JJ 	
 	
 	
 :a=D,,,ZA1E1E-X\^dfgJhJhlmJmJm%%dA..C'
16::%%CyyBJ..3sy>>Q3F3F;V;V;V;VRU;V;V;V(Q888;?C>(Q888!88sbyyy07;D$T[^444 -,1E1EJmJmr   c                    |                      |d          }| j        |j        d                  }|                    t	          j        |j        d         | j        |j        d                  j        j        j	        |                     d S rX   r{  )rM  r   r}  r4   s       r   r   z,SymbolicShapeInference._infer_GatherElements  s|    a00^DKN+
)Atz!}-2>H 	
 	
 	
 	
 	
r   c                    |                      |d          }t          |          }|                      |d          }t          |           |d         }t          |          r||k    sJ |d d         ||d          z   }| j        |j        d                  }|                    t          j        |j        d         | j        |j        d                  j	        j
        j        |                     d S rz  )r  rZ   r<   r  r  r  r   r}  rq  r   r"   r1   )rM  r   r|  	data_rankr}  last_index_dimensionr  r4   s           r   r   z&SymbolicShapeInference._infer_GatherND  s    __T1--

OO	a00M,R0.//U4HI4U4U4UU!#2#&4H4I4I)JJ	^DKN+
)Atz!}-2>H 	
 	
 	
 	
 	
r   c           	         t          |d          t          |d          g}|                     |d          }|Vt          |          dk    r"|d                             |d                    n!|d                             |d                    t	          |          D ] \  }}|                     ||d          }t          t          |j                            D ]}| j	        |j        |                  }|dk    r3|                    |j        |                    |j        |         |_
        n-|                     |||j        |j        |         j                   |^|t          |          dk    rdndk    rC|j        |         j
        |j        v r*|j        |j        |         j
                 | j        |j
        <   "d S )Nthen_branchelse_branchr   rY   F)r  )r   r  r_   r  r  r  r  rZ   r  r  r   rx  r   r  )	rM  r   	subgraphscondi_subr  subgraph_inferi_outr4   s	            r   r   z SymbolicShapeInference._infer_If  s    $..$..
	 ""4++""!%%il3333!%%il333(33 	l 	lOE8!66tXV[6\\Ns4;//00 l l^DK$67A::KK 6777"k%0BGG**4QVAWA\]]] #y7J7J!!PQ(R(Ru-2n6PPP4B4Nx_dOeOj4k(1l	l 	lr   c           	         t          |d          }t          |j                  t          |j                  k    sJ t          |j                  dz
  }t          |j                  D ]>\  }}|j        }|                    | j        |j        |                             ||_        ?|                     ||           d}t          d|dz             D ]z}|j	        |         }	t          |	          }
t          |	j                  rJ|
rGd |
v rC|j        |dz            j        j        j                            |	j        j        j                   d}}|j        |dz            }t          |          }t          t          ||
d                    D ]\  }}|d         |d         k    rt           j                                        }t'          |                     |||                    |_        |j        j        j        j        |                             |           |	j        j        j        j        |                             |           d}||rT| j        dk    r1t4                              d|j         d	|j	        d          d
           |                     ||d           t'          |                     |                    }t          t          |j	                            D ]}| j        |j	        |                  }|                    |j	        |dz                       ||k    rt          |j                  rJ |j	        |dz            j        j        j        j        }|j        j        j                            d           |j        j        j        j        }||                                _        |                    t?          |                     |j	        |         |_        d S )Nbodyr  FrY   Tr=  r   zRerun Loop: (z3...), because of sequence in loop carried variables)r  r   ) r   rZ   rq  r  r   r  r  r  r  r  r5   r&   r   r#   r1   r  r7   ro  rp  r   r,  rs  r"   r(   r   rI  rb  r  r  r`  r  rQ   )rM  r   r  num_loop_carriedr?   sisi_nameneed_second_inferr  soso_shapesi_shaperv  r  r  loop_iter_dimr4   subgraph_vi_dimvi_dims                      r   r   z"SymbolicShapeInference._infer_Loop  s    v..8>""c$*oo5555tz??Q. x~.. 	 	EArgGKKtz!}5666BGG!!$111
 "1.233 	1 	1E'B044H27## 1 - 0 0 N519-2@JSSTVT[TiTsttt(,%^EAI.4R88 )#h*O*O*O P P 1 1HBAw$q'))"&"7"A"A"C"C,/0R0RSWY^`b0c0c,d,d)+15b9BB7KKK+15b9BB7KKK,0)1  	M}q  r49rrt{1~rrr   %%dHe%LLL D>>tDDEEs4;''(( 
	% 
	%AA/BKKA.///$$$&rw/////"*/!a%"8"="I"O"S#)44U;;;,26)6

&d?33444k!nBGG
	% 
	%r   c                 0    |                      |           d S r0   rh  r"  s     r   r   z$SymbolicShapeInference._infer_MatMul      ""4(((((r   c                 P    |                      |t          j        j                   d S r0   )rh  r7   rl  INT32r"  s     r   r   z+SymbolicShapeInference._infer_MatMulInteger
  s$    ""4)9)?@@@@@r   c                    |                      |d          }t          |d          t          |d          g}t          |          }|dk    sJ |dk    r|dd          }n|d d         |dd          z   }|                     |d         |d         gd           | j        |j        d                  j        j        j        }| j        |j	        d                  }|
                    t          j        |j	        d         ||                     d S )Nr   KNrY   r2  Fr  )r  r   rZ   r  r  rq  r   r"   r1   r  r  r   r}  )rM  r   rb  rc  rd  r  ra  r4   s           r   r'  z)SymbolicShapeInference._infer_MatMulNBits  s
   OOD!,,	"4--}T3/G/GH	y>>!||||q==!!""II!#2#1226Ir]IaL)! 	  	
 	
 	

 ~djm49EO^DKN+
F1$+a.,PYZZ[[[[[r   c                    t          |                     |                    }| j        |j        d                  }|                    t          j        |j        d         t          j        j	        |dg                     d S r  )
r   r,  r  r  r  r   r}  r7   rl  r  )rM  r   selectedr4   s       r   r   z/SymbolicShapeInference._infer_NonMaxSuppression   si    t99$??@@^DKN+
F1$+a.$BRBX[cefZghhiiiiir   c                 4   |                      |d          }t          |                     |dd                    }| j        |j        d                  }|                    t          j        |j        d         |j        j	        j
        ||g                     d S r  )r  r   r,  r  r  r  r   r}  r   r"   r1   )rM  r   
input_ranknz_lenr4   s        r   r   z%SymbolicShapeInference._infer_NonZero%  s    ))$22
T77aCCDD^DKN+
F1$+a."'BUB_blntauvvwwwwwr   c                 4   |                      |d          }|                     |d          }t          |dd          }t          |t	          |          dz             }t          g |d |         t          |          s|                     |          n|||d                    }| j        |j	        d                  }|
                    t          j        |j	        d         | j        |j        d                  j        j        j        |                     d S )Nr   rY   rL   r2  r  )r  r  r   rN   rZ   rA   r<   r,  r  r  r  r   r}  rq  r   r"   r1   )rM  r   r@   depthrL   r  r4   s          r   r   z$SymbolicShapeInference._infer_OneHot,  s#   ++D!44##D!,,T62..#D#k*:*:Q*>??.UdU#@J5@Q@Q\224888W\ TUU#
 
	 ^DKN+
)Atz!}-2>H 	
 	
 	
 	
 	
r   c           	         t          | j                  dk    rt          |d          }n|                     |d          }|                     |d          }t          |          }|[t          |          d|z  k    sJ d t          ||d |         ||d          d          D             }|                     |           n|                     ||          }| j	        |j
        d                  j        j        j        }| j	        |j        d                  }|                    t!          j        |j        d         |t%          |                               d S )	N
   r>  rY   r   r  c                 &    g | ]\  }}}||z   |z   S r	   r	   )r   r+   pad_uppad_downs       r   r   z5SymbolicShapeInference._infer_Pad.<locals>.<listcomp>L  s7       'Avx F
X%  r   Fr=  )rV   ro  r   r  r  rZ   r  r  r0  r  rq  r   r"   r1   r  r  r   r}  rA   )rM  r   r>  r@   rM   r  	output_tpr4   s           r   r   z!SymbolicShapeInference._infer_PadA  s_   T\""b(( v..DD&&tQ//D++D!44;t99D(((( +.{D$Kdee]b+c+c+c  O &&7777 #66tTBBON4:a=16BL	^DKN+
)$+a.)E_`oEpEpqq	
 	
 	
 	
 	
r   c           
         |                      |          }|                     |           |j        D ]W}|s| j        |         }|                    t          j        ||j        j        j	        t          |                               Xd S r0   )rZ  r  r  r  r  r   r}  r   r"   r1   rA   )rM  r   r@   r  r4   s        r   r   z"SymbolicShapeInference._infer_Pool[  s    33D99"";/// 
	 
	A "BKK-G'1.{;;    	
	 
	r   c                 p   |                      |d          }|                      |d          }|                     ||          }| j        |j        d                  }| j        |j        d                  }|                    t          j        |j        d         |j        j	        j
        |                     d S r  )r  r  r  rq  r  r  r   r}  r   r"   r1   )rM  r   shape0r  r  t0r4   s          r   r9  z-SymbolicShapeInference._infer_aten_bitwise_orj  s    q))q))**66::	^DJqM*^DKN+
F1$+a."'BUB_ajkklllllr   c           	         |                      |d          }t          |          }|                     |d          }|                     |d          }|                     |d          }|||J t          ||          }t          ||          }g }t	          |          D ] \  }}	|||fvr|                    |	           !||         }
||         }|dk    r,t          j        dt          j        |
||z
                      }n+t          j        dt          j        |
|z   |                    }|                    |           |j	        d         r| j
        |j	        d                  }|                    t          j        |j	        d         | j
        |j        d                  j        j        j        t%          |                               d S d S Nr   rY   r  r3  )r  rZ   r  rN   r  r  rG   r   r   r  r  r  r   r}  rq  r   r"   r1   rA   )rM  r   r@   rM   offsetr  r  r  r   valr  r  
diag_shaper4   s                 r   r:  z+SymbolicShapeInference._infer_aten_diagonalr  s   ++D!44;$$T1--""4++""4++!d&64;K;KK#D$//#D$//	!+.. 	& 	&HC4,&&  %%%T"T"Q;;1ei&H&HIIJJ1ei&H&HIIJ$$$;q> 	A/BKK-KNN4:a=16BL.y99     	 	r   c           	         |                      |d          }t          |          }|dv sJ |                     |d          }|dz
  }|r|n#t          |                     |d|                    }g |d d         |}| j        |j        d                  }|                    t          j	        |j        d         t          j        j        t          |                               d S )Nr   rY   r  rY   r2  )r  rZ   r  r   r,  r  r  r  r   r}  r7   rl  r  rA   )	rM  r   r@   rM   num_samplesrv  last_dimr  r4   s	            r   r=  z.SymbolicShapeInference._infer_aten_multinomial  s    ++D!44;v~~~~))$22AX"-g;;3t7Y7YZ^`ace7f7f3g3g4SbS)484^DKN+
)A &*<88 	
 	
 	
 	
 	
r   c           
                                d          }t          |          dk    sJ  fddD             |dd <                        |           t          j                  D ]\  }}|s j        |         }|dk    rt          j        j        n& j        j	        d                  j
        j        j        }|                    t          j        ||t!          |                               d S )Nr      c                 >    g | ]}                     d |          S r  r/  r  s     r   r   z=SymbolicShapeInference._infer_aten_pool2d.<locals>.<listcomp>  s+    [[[qD>>tQJJ[[[r   r  r3  r`  rY   )r  rZ   r  r  r  r  r7   rl  r  rq  r   r"   r1   r  r   r}  rA   )rM  r   r@   r?   r  r4   r1   s   ``     r   r;  z)SymbolicShapeInference._infer_aten_pool2d  s   ++D!44;1$$$$[[[[[TZ[[[BCC"";///dk** 	n 	nDAq "B23q&&(..dnTZXY]>[>`>l>vIKK5aD^_jDkDkllmmmm	n 	nr   c                 L   | j         |j        d                  }t          |j                  dk    r[|                    t          j        |j        d         | j         |j        d                  j        j        j	        g                      d S t          |j                  dk    sJ | 
                    |d          }|J | 
                    |d          }|4|                     |d          }|                     |r|n|dz
  |          }nU|                     |d          }t          |t          |                    }|d |         }|r|dgz  }|||dz   d          z  }t          |          }|                    t          j        |j        d         | j         |j        d                  j        j        j	        |                     | j         |j        d                  }|                    t          j        |j        d         t           j        j        |                     d S )Nr   rY   r3  r  )r  r  rZ   rq  r  r   r}  r   r"   r1   r  r  r0  r  rN   rA   r7   rl  r  )	rM  r   r4   keepdimr   rM   r  r(   vi1s	            r   r<  z)SymbolicShapeInference._infer_aten_minmax  s   ^DKN+tz??aKK-KNDN4:a=$A$F$R$\^`      tz??a''''))$22G&&&%%dA..C{++D!44#778UTTUXW[\\--dA66*3E

;;$TcT{ ( QC'LcAgii 005lCCLKK-KNDN4:a=$A$F$R$\^j   
 .Q0CLL6t{1~tGWG]_kllmmmmmr   c           	         |                      |d          }|                     |d          }|                     |d          }|                     |d          }|C|A|?|t          |          k     sJ ||         |z
  |z  dz   ||<   |                    |           n(t          |          }|                     |dz   |          }|                     |           |j        d         r| j        |j        d                  }|                    t          j
        |j        d         | j        |j        d                  j        j        j        t          |                               d S d S r  )r  r  rZ   r  r0  r  r  r  r  r   r}  rq  r   r"   r1   rA   )rM  r   r@   	dimensionsizesteprM   r4   s           r   r>  z)SymbolicShapeInference._infer_aten_unfold  su   ++D!44''a00	""4++""4++ T%5$:Js;//////&1)&<t&C%Lq%PK	"t$$$${##D224!8TBBK"";///;q> 	A/BKK-KNN4:a=16BL.{;;     	 	r   c                    d }|j         d         sg }n|                     |d          }|                     |d          }||                     |d          }|)t          |t	          |                    }|rd||<   n0||= n,t	          |          }|                     |r|n|dz
  |          }|                     |           t          |          }|j        d         r_|_| j	        |j        d                  }|
                    t          j        |j        d         t          j        j        |                     d S d S d S NrY   r  r   )rq  r  r  rN   rZ   r0  r  rA   r  r  r  r   r}  r7   rl  r  )rM  r   r  r   r  r@   rM   r4   s           r   r?  z)SymbolicShapeInference._infer_aten_argmax  s^   	z!} 	DII%%dA..C))$22G""33D!<<?.sC4D4DEEC -+,C((',,{++D"&":":7;X44PTWXPXZ^"_"_K**;7776{CC	;q> 	ji3A/BKK5dk!ndFVF\^ghhiiiii	j 	j33r   c                    |                      |           |                     |d          }|t          |          dk    r|d         nd }|                     |d          }| j        |j        d                  j        j        j        }dD ]}|j	        |         r| j        |j	        |                  }|
                    t          j        |j	        |         |||n#t          |                     ||d                    |t          |          n#t          |                     ||d                    g                     d S )Nr      r  rY   )_propagate_shape_and_typer  rZ   r  r  rq  r   r"   r1   r  r  r   r}  r   r,  r_   )rM  r   r  r  groupra  r?   r4   s           r   r@  z-SymbolicShapeInference._infer_aten_group_norm  sN   &&t,,,oodA..)5#k:J:Ja:O:OKNNUY##D!,,~djm49EO 	 	A{1~ ^DKN31A$!"AAC8Z8Z[_abde8f8f4g4g $)#4 !*% 0 0 0%()K)KDRSUV)W)W%X%X   	 	r   c                     d }                      d          }|a|d d         }                     d          }||d |D             z  }n/t          |          }| fdt          d|          D             z  }j        d         rw|w j        j        d                  j        j        j	        } j        j        d                  }|
                    t          j        j        d         ||                     d S d S d S )Nr   r  rY   c                 p    g | ]3}t          |          t          j        u r|                                n|4S r	   )r   rD   rE   r\   )r   dim_sizes     r   r   z?SymbolicShapeInference._infer_aten_upsample.<locals>.<listcomp>!  s8    vvv^fh281K1KhmmoooQYvvvr   c           	      X    g | ]&}t                              d |                    'S r  )r   r,  r  s     r   r   z?SymbolicShapeInference._infer_aten_upsample.<locals>.<listcomp>$  s4    jjjVWc$"D"DT1a"P"PQQjjjr   )r  r  rZ   r  r  r  rq  r   r"   r1   r  r   r}  )rM  r   r  r  output_sizerM   ra  r4   s   ``      r   rA  z+SymbolicShapeInference._infer_aten_upsample  s#   	oodA.."#BQBI--dA66K&vvjuvvvv		;''jjjjj[`abdh[i[ijjjj	;q> 	`i3>$*Q-8=ISLA/BKK5dk!nlT]^^_____	` 	`33r   c                     |                      |           dD ]?}|t          |j                  k     r%|j        |         r|                      |d|           @d S )N)rY   r  r3  r  rY   input_indexoutput_indexr$  rZ   r  )rM  r   r?   s      r   r   z0SymbolicShapeInference._infer_BatchNormalization*  sr    &&t,,,  	T 	TA3t{####A#..tQR.SSS	T 	Tr   c           	         | j         |j        d                  }|                     |          }t          d |D                       rnt	          |d                   }t	          |d                   }t	          |d                   }t          j        t          j        ||z
  |z            d          g}n|                     |          g}| 	                    |           |
                    t          j        |j        d         | j         |j        d                  j        j        j        t#          |                               d S )Nr   c              3      K   | ]}|d uV  	d S r0   r	   r>   s     r   rW  z6SymbolicShapeInference._infer_Range.<locals>.<genexpr>6  s&      11q}111111r   rY   r  )r  r  r  r\  r_   rG   r   rP  r,  r  r  r   r}  rq  r   r"   r1   rA   )rM  r   r4   
input_datastartlimitdeltar  s           r   r   z#SymbolicShapeInference._infer_Range3  s+   ^DKN+22488
11j11111 	Ijm,,Ejm,,Ejm,,E$y7N)O)OQRSSTOO#AA$GGHO""?333
)Atz!}-2>H*?;; 	
 	
 	
 	
 	
r   c                    t          |dd          }t          | j                  dk    rt          |j                  dk    r|                     |d          }| j        |j        d                  }||sJ |                    t          j
        |j        d         | j        |j        d                  j        j        j        t          |                     |                     |d          |                                         d S |                     |d          g }fd|D             }t%                    D ]6\  }}||v r|r|                    d           !|                    |           7|                    t          j
        |j        d         | j        |j        d                  j        j        j        |                     d S d S d S )NkeepdimsrY      r   c                 J    g | ]}t          |t                               S r	   rN   rZ   )r   ar(   s     r   r   z;SymbolicShapeInference._infer_ReduceSum.<locals>.<listcomp>X  s*    JJJ,QE

;;JJJr   )r   rV   ro  rZ   rq  r  r  r  r  r   r}  r   r"   r1   rA   r0  r  r  r  r  )	rM  r   	keep_dimsaxesr4   r  r?   r+   r(   s	           @r   r  z'SymbolicShapeInference._infer_ReduceSumF  s   !$
A66	T\""b((S__q-@-@&&tQ//DA/B|   y1Atz!}5:FP243K3KDL`L`aeghLiLiko3p3pqq      a00!JJJJTJJJ%e,, / /DAqDyy$ 3(//222$++A....1Atz!}5:FP$     / )(-@-@r   c                 d    t          | j                  dk    r|                     |           d S d S )N   )rV   ro  r  r"  s     r   r  z(SymbolicShapeInference._infer_ReduceMeang  s9    T\""b((!!$''''' )(r   c                     t          |d          }t          |dd          }|dk    rH|dgk    rC|                     |          d         }|(t          |          | j        |j        d         <   d S d S d S d S )Nr=  r7  rY   r   )r   r  rf   r  r  )rM  r   r=  r<  r  s        r   r  z(SymbolicShapeInference._infer_ReduceProdl  s    T6**!$
A66	>>dqckk0066q9D3G3M3M Q000 >kkr   c                    |                      |d          }|                      |d          }||d S |                     |d          d         }d|t          |          t          |          g}| j        |j        d                  j        j        j        }| j        |j        d                  }|	                    t          j        |j        d         ||                     d S r!  )r  r  r   r  rq  r   r"   r1   r  r  r   r}  )rM  r   seq_lenreal_seq_len	num_headsr  ra  r4   s           r   r0  z2SymbolicShapeInference._infer_RelativePositionBiast  s    %%dA..**433?l2F))$2215		3w<<\1B1BC	~djm49EO^DKN+
F1$+a.,PYZZ[[[[[r   c                    |                      |d          }| j        |j        d                  }||                     |d          }t	          |          dk    sJ |d         }t          |          sJ |                    t          j        |j        d         |j	        j
        j        t          |                     ||                                         nR|                     |d          }d}|D ]}||z  }g }	d}
d}t          |          D ]\  }}t          |          t           j        u r|	                    |           nB|dk    r'|	                    ||                    |||         z  }n|	                    |           |dk    r|}
|dk    r||z  }|	                    d          dk     sJ d|	v r
||z  }||	|
<   |                     |	           |                    t          j        |j        d         |j	        j
        j        t          |	                               |                     |           d S )NrY   r   r2  r  )r  r  r  r  rZ   r<   r  r   r}  r   r"   r1   rA   r0  r  r  rG   ra  r  countr  r#  )rM  r   shape_valuer4   shape_shape
shape_rankinput_sympy_shapetotalr+   r  deferred_dim_idxnon_deferred_sizer?   r  s                 r   r  z%SymbolicShapeInference._infer_Reshape  s   ))$22^DKN+//$22K{##q(((($QJj)))))KK-KNG'1.t/G/G
TX/Y/YZZ     !% 5 5dA > >E& " "	 O! !!+.. > >177el**#**1----!VV#**+<Q+?@@@(9<Ma<P(P%%#**1---77'($$!VV(9A(=%"((,,q0000_$$#444; 01&&777KK-KNG'1.??    	  &&&&&r   c           	      Z   | j         |j        d                  }|                     |d          }t          | j                  dk    r|                     |d          }|d t          ||d          D             }|                     |           |                    t          j
        |j        d         | j         |j        d                  j        j        j        t          |                               d S d S |                     |d          }|                     |d          }|                     |d          }|"d	 |D             }|                     |           n|t!          |          }t#          |d
          dk    rGt!          |          d|z  k    sJ t%          |          d |         }	t%          |          |d          }
ndg|z  }	dg|z  }
t%          |          }d t          ||	|
|d          D             }|                     |           n*|                     |                     |d          |          }|                    t          j
        |j        d         | j         |j        d                  j        j        j        t          |                               d S )Nr   r  rY   c                 f    g | ].\  }}t          j        t          j        ||z                      /S r	   rG   simplifyr  rE  s      r   r   z8SymbolicShapeInference._infer_Resize.<locals>.<listcomp>  sA     # # #;?1aEN5;q1u#5#566# # #r   Fr=  r  r3  c                 Z    g | ](}t          j        t          j        |                    )S r	   rP  r[  s     r   r   z8SymbolicShapeInference._infer_Resize.<locals>.<listcomp>  s*    "Q"Q"Qa5>%+a..#A#A"Q"Q"Qr   coordinate_transformation_modetf_crop_and_resizec           	      v    g | ]6\  }}}}t          j        t          j        |||z
  z  |z                      7S r	   rP  )r   r+   r3  endscales        r   r   z8SymbolicShapeInference._infer_Resize.<locals>.<listcomp>  sR     # # #,5#u N5;qC%K/@5/H#I#IJJ# # #r   )r  r  r  rV   ro  r  r  r  r  r   r}  rq  r   r"   r1   rA   rZ   r   rQ   r0  r  )rM  r   r4   rJ  scalesr  roisizesrM   	roi_startroi_ends              r   r  z$SymbolicShapeInference._infer_Resize  s   ^DKN+ 11$::T\""b((((q11F!# #CFGXZ`inCoCoCo# # # **?;;;1Atz!}5:FP2?CC      "! %%dA..C((q11F''a00E "Q"Q5"Q"Q"Q**?;;;;#6{{ 'GHHL```s88q4x//// $S		%4% 0I"3ii.GG!"d
I cDjGf# #034EyRY[ajo0p0p0p# # # **?;;;;"&":":4;O;OPTVW;X;XZ^"_"_KK-KNN4:a=16BL.??     r   c                 t    t          d          }t          d          }t          ddg|z            }t          j                  |z
   fdt          |          D             }t          |j                  t          j                  k    sJ |j        d t          j                           }t          |          D ]~\  }}|j        }|                     j        j        |                             |k    r:|j        j        j	        j
        }	|	                    |	||z
                               ||_                             |           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             }g |d |         |	||d          }|                    t!          j        ||j        |         j        j        j        |                     n |                    |j        |                    ||_        d S )	Nr  num_scan_inputsscan_input_axesr   c           
      d    g | ],\  }}t          |                    |z                       -S r	   )rN   r  )r   r?   axr   num_scan_statesrM  s      r   r   z6SymbolicShapeInference._infer_Scan.<locals>.<listcomp>  sL     
 
 
2 !T%9%9$O@S%T%TUU
 
 
r   scan_output_axesr2  rY   )r   rZ   rq  r  r   r  r  r   r"   r(   r   r_  r  r  r.   rN   r   r}  r1   )rM  r   r  r^  r_  r  r?   r  subgraph_namescan_input_dimnum_scan_outputsrc  r  r4   r(   r  rb  s   ``              @r   r  z"SymbolicShapeInference._infer_Scan  s    v..'.?@@'.?!AVWWdj//O;
 
 
 
 
 
"?33
 
 
 8>""c$*oo5555".):3tz??):;// 	$ 	$EArGMKKtz!}5666O##!#!4!:!>%%n_QEX5Y&Z[[[#BGG!!$111t{++o=(/AA3IYCYZZ24>$*R.3Q3VWWXghjXkldk** 		 		DAq"BO##1(/!2D2IJJ./?O@S/TVYZ_V`V`cdVdeeL%/L>LE'((OLF9!X_Q=O=T=`=jlqrrssssHOA.///BGG		 		r   c                    |                      |d          }| j        |j        d                  }|                    t	          j        |j        d         | j        |j        d                  j        j        j	        |                     d S rK   r{  )rM  r   r|  r4   s       r   r  z-SymbolicShapeInference._infer_ScatterElements
  s|    __T1--
^DKN+
)Atz!}-2>H 	
 	
 	
 	
 	
r   c                    |                      |d          }| j        |j        d                  }|t          |          D ]\  }}|t          j                                        }t          |                     |d|                    |_	        |j
        j        j        j        |                             |           d S d S rK   )r  r  r  r  r7   ro  rp  r   r,  rs  r   r"   r(   r   r  )rM  r   r  r4   rv  r+   r  s          r   r  z(SymbolicShapeInference._infer_SequenceAt  s    OOD!,,	^DKN+ "9-- D DA=/99;;$'(J(J4QRTV(W(W$X$X!#)-b1::7CCCC ! D Dr   c                 (   | j         |j        d                  }| j         |j        d                  }| j         |j        d                  }|                    |           |j        d         |_        |                     |d|j        |j                   d S r  )r  rq  r  r  r   rx  r   )rM  r   vi_seq	vi_tensor
vi_out_seqs        r   r	  z,SymbolicShapeInference._infer_SequenceInsert!  s}    
1.N4:a=1	^DKN3
F###+a.
tQ
HHHHHr   c                 X    |                      |d          | j        |j        d         <   d S rK   )r  r  r  r"  s     r   r
  z#SymbolicShapeInference._infer_Shape*  s+    +/+@+@q+I+IQ(((r   c                 (   |                      |d          }t          |          | j        |j        d         <   | j        |j        d                                      t          j        |j        d         t          j	        j
        g                      d S rK   )r  rf   r  r  r  r  r   r}  r7   rl  r  )rM  r   r@   s      r   r  z"SymbolicShapeInference._infer_Size-  s    ++D!44+?+L+LQ(t{1~&//)$+a.$:J:PRTUU	
 	
 	
 	
 	
r   c           	      
    d fd fd}t           j                  dk    rot          |d          }t          |d          }t          |d          }|s)t          t	          t          |                              }dgt          |          z  }nt                               |d          d	
          }t                               |d          d	
          }                     |d          }                     |d          }|1||-t          t	          t          ||n|                              }|||dgt          ||n|          z  }t          |d	
          }t          |d	
          }                     |d          }||m|;t	          t          |                    D ]} 	                    |d|          ||<   n7t          |          }|D ]} 	                    |d|          ||<   nt          ||||d          D ]\  }}	}
} ||
||                   }
t          |
          r|
 j        k    r
||         }
n|
 j         k    r|	dk    rdnd}
nt          ||                   r6|
dk     rt          d|
||         z             }
t          |
||                   }
n|
dk    r#|
dk    rt!          j        |
||                   n|
}
nt          ||                   rt!          j        |
||                   }
n[	  |
||                   s||         }
n?# t$          $ r2 t&                              d|
 d||          d           ||         }
Y nw xY w ||	||                   }	t          ||                   r3t          |	          r$t          dt          |	||                             }	t!          j        |
|	z
  |z   |dk    rdndz   |z            ||<   މ                     |            j        |j        d                  }|                    t5          j        |j        d         |j        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          j"        u rZt          |j#                  dk    rD||d         |d         |d                   j         |j        d         <   d S d S d S d S d S d S d S d S d S d S d S )Nc                 "    t           t          j                  sJ d               fdt          t	           j                            D             }t	          |          dk    r$|d          fd} |d           |d          gS  gS )Nz%Expected a sum of two arguments, got c                 ^    g | ])}t          j        |         t          j                  '|*S r	   )r  argsrG   r   )r   r  exprs     r   r   zLSymbolicShapeInference._infer_Slice.<locals>.flatten_min.<locals>.<listcomp>>  s6    kkkSZPTPYZ]P^`e`iEjEjkSkkkr   rY   r   c                 B   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 )rQ   rr  r  rG   r   rZ   rj   )arg_idxreplacedrs  min_poss     r   replace_min_with_argzVSymbolicShapeInference._infer_Slice.<locals>.flatten_min.<locals>.replace_min_with_argB  s    #DIH%hw&7CC  `g``XV]M^`` C x0566!;;;cPXY`Pacc <;; )1(9(>w(GHW% 9h//r   )r  rG   rj   r  rZ   rr  )rs  min_positionsrx  rw  s   `  @r   flatten_minz8SymbolicShapeInference._infer_Slice.<locals>.flatten_min<  s    dEI..^^0^X\0^0^^^.kkkkE#di..,A,AkkkM=!!Q&&'*	0 	0 	0 	0 	0 	0 )(++((++  6Mr   c                    	 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   <   K   | ]}t          |d k              V  dS r  )boolr*   s     r   rW  zJSymbolicShapeInference._infer_Slice.<locals>.less_equal.<locals>.<genexpr>h  s,      DDA4Q<<DDDDDDr   )r}  rO  r\  )r^   yrz  s     r   
less_equalz7SymbolicShapeInference._infer_Slice.<locals>.less_equalS  sK   AF||#   AF||#   QB1"H~~%   QB1"H~~%   EAEQJ''' E E EDDQU1C1CDDDDDDDDEsQ    
##: 
AAA   
A-,A-1B 
BBB- -/CCc                     	  d|           s"t          |           r| j         k    r| S || z   S n.# t          $ r! t                              d|  d           Y nw xY w| S )z/normalizes a negative index to be in [0, bound)r   zCannot determine if z < 0)r<   rJ  rO  rb  rc  )re  boundr  rM  s     r   handle_negative_indexzBSymbolicShapeInference._infer_Slice.<locals>.handle_negative_indexj  s    C!z!U++ )!%(( %Ut}n-D-D$ 5=(	)
  C C CAeAAABBBBBCLs   (2 2 (AAr  r=  startsendsrY   Tr  r  r3  r  r   Fr=  r2  zUnable to determine if z <= z, treat as equal)$rV   ro  r   rQ   r  rZ   rb   r  r  r,  rA   r  r<   rJ  r   r   rG   r   	Exceptionrb  rc  rQ  r  r  r  r  r   r}  r   r"   r1   rq  r  rD   arrayr(   )rM  r   r  r=  r  r  stepsr  r?   rV  er  r4   input_sympy_datarz  r  s   `             @@r   r  z#SymbolicShapeInference._infer_Slice4  sI   	 	 	.	E 	E 	E 	E 	E.
	 
	 
	 
	 
	 
	 T\""a'' v..D"422F v..D 0E#f++..//C#d))OEET00q99TJJJF4..tQ774HHHD&&tQ//D''a00E|V^E#0Bff"M"MNNOO}fncF,>&&DIII44000DET222E//a88>T\|s?3344 X XA)-)K)KDRSUV)W)WOA&&X #=_"M"M X XA)-)K)KDRSUV)W)WOA&&X "$eEJJJ ] ]
1a))!_Q-?@@a== 3DM))+A.t}n,,!"QAAB#OA$677 q55 #Aq?1+='= > >A?1#566q55DEEE	!_Q-? @ @ @q  "/!"455 3!Ia);<<3#-:a1C#D#D 7$3A$6( 3 3 3"NN+pQ+p+pO\]L^+p+p+pqqq / 2AAA3 *)!_Q-?@@oa011 ;jmm ;As1oa&899::A%*^QUQYA""ST5UZ[4[%\%\""&&777^DKN+
)A#-*?;; 	
 	
 	
 JqMT---"Fq   D		Q!E

a#/
1>$%%--%&&"(22s;K;Q7R7RVW7W7W3CF1IPTUVPWZ_`aZbDb3c Q000 .-""    !! 327W7Ws   L449M0/M0c                 &   | j         |j        d                  }| j         |j        d                  j        j        j        }t          |dd           }||}||j        j        _        |j        j        j                            t          j
                               t          |j                  dk    r^|                     |d          }| j         |j        d                  }|                    t          j        |j        ||                     d S d S )Nr   r  rY   )r  r  rq  r   r"   r1   r   r(   r  r7   ro  rZ   r  r   r}  r   )rM  r   r4   r1   specified_output_typer|  s         r   r  z5SymbolicShapeInference._infer_SoftmaxCrossEntropyLoss  s    ^DKN+N4:a=16BL	 !.dM4 H H ,-I(1%
!**4+@+B+BCCCt{aq11JA/BKK5bgy*UUVVVVV  r   c                    |                      |d          }t          t          |dd          t          |                    }t	          | j                  }|dk     r)t          |d          }|                     |d          J n(|                     |d          }t          |d          J |Kt          |j                  }||         t          j	        |          z  g|z  }| 
                    |           nd |D             }t          t          |                    D ]}| j        |j        |                  }	|	                     ||j        |         | j        |j        d                  j        j        j        t%          g |d |         ||         ||dz   d                                         |	| j        |	j        <   d S )Nr   rL   r8  r  rY   c                 6    g | ]}t          j        |          S r	   r7  r[  s     r   r   z>SymbolicShapeInference._infer_Split_Common.<locals>.<listcomp>  s"    555!U]1%%555r   )r  rN   r   rZ   rV   ro  r  r  rG   rH   r  r  r  r  rq  r   r"   r1   rA   r   )
rM  r   make_value_info_funcrJ  rL   op_setr  num_outputsr  r4   s
             r   _infer_Split_Commonz*SymbolicShapeInference._infer_Split_Common  s    11$::#M$$B$BCHYDZDZ[[4<(( B;;!$00E&&tQ//7777''a00E w//777=dk**K&t,u}[/I/IIJ[XE&&u----55u555EU$$ 		) 		)CC 01BKK$$K$N4:a=16BL./v1B5D51I/v5QT:/vXijnqrjrjtjtXu/vww    ')DN27##		) 		)r   c                 F    |                      |t          j                   d S r0   )r  r   r}  r"  s     r   r  z#SymbolicShapeInference._infer_Split   s!      v'DEEEEEr   c                 F    |                      |t          j                   d S r0   )r  r   make_sequence_value_infor"  s     r   r  z-SymbolicShapeInference._infer_SplitToSequence  s!      v'FGGGGGr   c                    |                      |d          t          | j                  }|dk     r)t          |d          }|                     |d          J n(|                     |d          }t          |d          J |dd D             }| j        dk    rLd D             }t          |          dk    r-t                              d|j	         d|j
         d	|            nۈfd
|D             }g }t          t                              D ]}||vr|                    |                    "|         dk    s t          |                   t          k    sJ | j        dk    rUt          |                   t          k    r7t                              d|j	         d|j
         d|          d| d	           | j        |j        d                  }|                    t%          j        |j        d         | j        |j        d                  j        j        j        |                     |                     |           d S )Nr   r8  r=  rY   c                     g | ]
}|d k    |S r<  r	   r[  s     r   r   z9SymbolicShapeInference._infer_Squeeze.<locals>.<listcomp>  s    ===!a1ffAfffr   c                 B    g | ]}t          |          t          k    |S r	   )r   r=   r[  s     r   r   z9SymbolicShapeInference._infer_Squeeze.<locals>.<listcomp>  s#    &P&P&PQaCqr   z+Symbolic dimensions in input shape of op: 'z	' node: 'z;'. Assuming the following dimensions are never equal to 1: c                 J    g | ]}t          |t                               S r	   r:  )r   r;  r  s     r   r   z9SymbolicShapeInference._infer_Squeeze.<locals>.<listcomp>  s,    LLL!(C,<,<==LLLr   z'. Assuming the dimension 'z' at index z of the input to be equal to 1.)r  rV   ro  r   r  rI  rZ   rb  r  r  r   r  r  r   r=   r  r  r  r   r}  rq  r"   r1   r#  )	rM  r   r  r=  r  symbolic_dimensionsr?   r4   r  s	           @r   r  z%SymbolicShapeInference._infer_Squeeze  s   oodA..4<(( B;; v..D&&tQ//7777&&tQ//D v..666< >={===L}q  &P&P+&P&P&P#*++a//LLidl i i]a]f i iSfi i  
 MLLLtLLLDL3{++,, 	 	D== ''A7777&q>Q..${1~2F2F#2M2M2MM}q((T+a.-A-AS-H-Hu$, u uaeaj u u7B1~u uRSu u u  
 ^DKN+
)Atz!}-2>H 	
 	
 	
 	  &&&&&r   c           	          |                      |d          }g }|a|                     |d          }t          |          D ]%\  }}|||         z  }|                    |           &|                     |           n*|                     |                     |d          |          }| j        |j        d                  }|	                    t          j        |j        d         |j        j        j        t          |                               d S rX   )r  r  r  r  r  r0  r  r  r  r  r   r}  r   r"   r1   rA   )	rM  r   repeats_valuer  rJ  r?   r+   r  r4   s	            r   r  z"SymbolicShapeInference._infer_Tile6  s   ++D!44$ $ 5 5dA > >!"344 0 01mA..&&w////&&7777"66t7K7KDRS7T7TVZ[[O^DKN+
)A#-*?;; 	
 	
 	
 	
 	
r   c                 4   |                      |d          }t          t          |dd          |          }|                     |d          }t	          | j                  dk    rt          |d          }n|                     |          d         }||                     |          }nt          |          }t          |          t          t          fv r|||<   n?|                     |d          }|||<   |                     |           t          |          }t          t!          |j                            D ]]}| j        |j        |                  }|                    t)          j        |j        |         |j	        j        j        |                     ^d S )Nr   rL   r2  r  ri  rY   )r  rN   r   r  rV   ro  r  r,  r_   r   r=   r   r  r  rA   r  rZ   r  r  r  r   r}  r"   r1   )	rM  r   rM   rL   r  ri  r  r  r4   s	            r   r  z"SymbolicShapeInference._infer_TopKJ  s   ##D!,,#M$$C$CTJJOOD!,,	T\""a''dC((AA--d33A6A922488AA!A77sCj  IdOO"33D!<<O$%OD!&&   3?CCIT[))** 	s 	sCC 01BKK5dk#6FH[Hegpqqrrrr	s 	sr   c                     |j         d         | j        v r|                     |d          }t          |dt	          t          t          t          |                                                  }| j        |j         d                  }t          j	         t          j
        |          j        | t          |                                                                                    | j        |j        d         <   d S d S )Nr   perm)r=  )rq  r  r  r   reversedrQ   r  rZ   rD   	transposer  reshapetupleflattentolistr  )rM  r   r|  r  r2  s        r   r  z'SymbolicShapeInference._infer_Transposeg  s    :a=D,,,q11J vxU3z??=S=S8T8T/U/UVVD)$*Q-8J9RXj119:FUSW[[YYYaaccjjll T[^,,,	 -,r   c                   	 |                      |d          }t          | j                  }|dk     r)t          |d          }|                     |d          J n(|                     |d          }t          |d          J t          |          t          |          z   		fd|D             }d}g }t          	          D ]<}||v r|                    d           |                    ||                    |dz  }=| j        |j	        d                  }|
                    t          j        |j	        d         | j        |j        d                  j        j        j        |                     |                     |           d S )Nr   r8  r=  rY   c                 0    g | ]}t          |          S r	   )rN   )r   r;  output_ranks     r   r   z;SymbolicShapeInference._infer_Unsqueeze.<locals>.<listcomp>}  s$    CCC$Q44CCCr   )r  rV   ro  r   r  rZ   r  r  r  r  r  r   r}  rq  r   r"   r1   r#  )
rM  r   r  r  r=  
input_axisr  r?   r4   r  s
            @r   r  z'SymbolicShapeInference._infer_Unsqueezep  s   oodA..4<(( B;; v..D&&tQ//7777&&tQ//D v..666+&&T2CCCCdCCC
{## 	  	 ADyy##A&&&&##K
$;<<<a

^DKN+
)Atz!}-2>H 	
 	
 	
 	  &&&&&r   c                    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                  }|                    |           d S )Nclasslabels_int64sclasslabels_stringsr   )r   r7   rl  r  r  r8   r  r   FLOATr   r#   r1   map_type
value_typer"   key_typer  r  )rM  r   map_key_typenew_vir4   s        r   r  z$SymbolicShapeInference._infer_ZipMap  s    344@+1LL4!677C+2L'''$&&k!nX\XhXn!+4?KU@L!+4=^DKN+
Fr   c                    |                      |d          }|                      |d          }|                     |d          }|t          |          dk    sJ ||d         n|d         }|rt          |          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                  }|                    t          j        |j        d         ||                     t          |j                  dk    r|                      |d          }	t          |j                  dk    r#|j        d         r|                      |d          ng }
t          |j                  dk    r#|j        d         r|                      |d          ng }|
rt          |
          dk    r|rt          |          dv r|d	         |
d<   nv|	rtt          |	          dk    rat          |	d         t                    r0t          |
d         t                    r|	d         |
d         z   |
d<   n|
d          d
|	d          |
d<   | j        |j        d                  }|                    t          j        |j        ||
                     d S t          |d          }|	d         |z  }d|	d         ||	d         |g}| j        |j        d                  }|                    t          j        |j        ||                     d S d S d S d S )Nr   rY   r  r3  qkv_hidden_sizesr     r  r2  +rD  )r  r  rZ   r   r=   r  r  rq  r   r"   r1   r  r  r   r}  r   )rM  r   r(   shape_weights
shape_biastripled_hidden_sizeqkv_hidden_sizes_attrra  r4   r  
past_shape
mask_shaperD  	head_sizepresent_shapes                  r   r  z'SymbolicShapeInference._infer_Attention  s|   a((a00((q11
!z??a''''/9/Ejmm=YZK[ $	eSZZ1__$1$8J$K$K!$0011Q66664Q788a/55 82Q677a>$*Q-8=ISLA/BKK5dk!nlTYZZ[[[4;!##
 #oodA669<TZ19L9LQUQ[\]Q^9LT__T1555df
9<TZ19L9LQUQ[\]Q^9LT__T1555df
 e#j//Q"6"6! Pc*oo&?&?(22
1$ P[)9)9Q)>)>%k!nc:: Pz*UV-Y\?]?] P,7NZ],JJqMM/9!},O,O{1~,O,OJqMA7BKK =bg|U_ ` `aaaaa !.dK @ @I +A) ;I%&A	;q>S\$]MA7BKK =bg|Ub c cdddddI$	e $	e__ $#r   c                    t          |d          }|                     |d          }||d         ||d         |d         g}nE|                     |d          }|t          |          dk    sJ |d         ||d         |d         g}| j        |j        d                  j        j        j        }| j        |j	        d                  }|
                    t          j        |j	        d         ||                     d S )NrD  r#  r   rY   r3  )r   r  r  rZ   r  rq  r   r"   r1   r  r  r   r}  )rM  r   rD  token_offset_shaper  query_layer_shapera  r4   s           r   r  z7SymbolicShapeInference._infer_GatedRelativePositionBias  s     "$44	!00q99).q19>PQR>SUghiUjkLL $a 8 8$0S9J5K5Kq5P5P5PP-a0)=Nq=QSdefSghL~djm49EO^DKN+
F1$+a.,P\]]^^^^^r   c                    |                      |d          }|                      |d          }|                     |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                  }|                    t          j        |j        d         ||                     d S d S d S )Nr   rY   r  r  r3  )r  r  rZ   r   r=   r  r  rq  r   r"   r1   r  r  r   r}  )	rM  r   r(   r  r  r  r  ra  r4   s	            r   r*  z-SymbolicShapeInference._infer_PackedAttention  si   a((a00((q11
!z??a''''/9/Ejmm=YZK[ 		\SZZ1__$1$8J$K$K!$0011Q66664Q788a/55 82Q677a>$*Q-8=ISLA/BKK5dk!nlTYZZ[[[[[		\ 		\__r   c                    |                      |d          }|t          |          dk    r|}nF|                     |d          }|t          |          dk    sJ |d         |d         |d         z  g}| j        |j        d                  j        j        j        }| j        |j        d                  }|	                    t          j        |j        d         ||                     d S )Nr  r   r  rY   r3  )r  rZ   r  r  rq  r   r"   r1   r  r  r   r}  )rM  r   rG  r  shape_queryra  r4   s          r   r+  z6SymbolicShapeInference._infer_PackedMultiHeadAttention  s    ))$22"s;'7'71'<'<&LL//$22K*s;/?/?1/D/D/DD'NKN[^,KLL~djm49EO^DKN+
F1$+a.,P\]]^^^^^r   c           	         |                      |d          }|rt          |          dk    r| j        |j        d                  j        j        j        }| j        |j        d                  }|                    t          j
        |j        d         |d|d         g                     | j        |j        d                  }|                    t          j
        |j        d         t          j        j        |d         |d         g                     | j        |j        d                  }|                    t          j
        |j        d         t          j        j        dg                     | j        |j        d                  }|                    t          j
        |j        d         t          j        j        dg                     d S d S d S )Nr   r3  token_countr  rY   zbatch_size + 1r  rZ   r  rq  r   r"   r1   r  r  r   r}  r7   rl  r  )rM  r   r(   ra  r4   vi_token_offsetvi_cumulated_seq_lenvi_max_seq_lens           r   r1  z+SymbolicShapeInference._infer_RemovePadding	  s   a(( 	pSZZ1__>$*Q-8=ISLA/BKK5dk!nlUbdijkdlTmnnooo"nT[^<O$$-dk!nd>N>TW\]^W_afghaiVjkk   $(>$+a.#A  ))-dk!nd>N>TWgVhii   "^DKN;N##F$A$+a.RVRbRhkljm$n$nooooo!	p 	p__r   c                    |                      |d          }|                      |d          }|rt          |          dk    r|rt          |          dk    r| j        |j        d                  j        j        j        }| j        |j        d                  }|d         |d         |d         g}|                    t          j
        |j        d         ||                     d S d S d S d S d S r  )r  rZ   r  rq  r   r"   r1   r  r  r   r}  )rM  r   shape_inputshape_token_offsetra  r4   r  s          r   r2  z,SymbolicShapeInference._infer_RestorePadding	  s    oodA..!__T155 	c3{++q005G0CPbLcLcghLhLh>$*Q-8=ISLA/B.q13Ea3H+VW.YLKK5dk!nlT`aabbbbb	c 	c0000LhLhr   c                 0    |                      |           d S r0   r$  r"  s     r   r  z&SymbolicShapeInference._infer_BiasGelu"	      &&t,,,,,r   c                    |                      |d          }d }d }|t          |          dk    r|                     |d          }|}|Qt          |          dk    r>|                     |d          }|t          |          dk    r|d         |d<   |d         }| j        |j        d                  j        j        j        }| j        |j        d                  }|	                    t          j        |j        d         ||                     nt          |          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                  }|	                    t          j        |j        d         ||                     t          |j                  dk    r|d         }	t          |d          }
d }t          |          dk    rAt          |d         t                    rt          |d         |
z            n|d          d	|
 }n|d         }|                     |d
          }|It          |d         t                    r!t          |t                    r|d         |z   }n|d          d| }|	|
||g}|J t          |j                  dk    r|j        d         r|j        d         r| j        |j        d                  }|	                    t          j        |j        ||                     | j        |j        d                  }|	                    t          j        |j        ||                     d S d S d S d S d S d S )Nr   r3  rY   r  r  r  *rD  /r#  r  )r  rZ   r  r  rq  r   r"   r1   r  r  r   r}  r  r=   r   r   )rM  r   query_shapetotal_sequence_lengthra  	key_shaper  value_shaper4   
batch_sizerD  r  r  r  s                 r   r(  z0SymbolicShapeInference._infer_MultiHeadAttention%	  s    oodA.. $";1$$ //a88	*(S^^q-@-@"&"5"5dA">">K".3{3C3Cq3H3H*5a.Q,5aL)#~djm<AMW^DKN3F9$+a.,Xdeeffff[!!Q&&k!nc22 jz+a.RU7V7V j$/NKNKPQNU`abUcDc#dLL$/NKN{ST~DhDhXcdeXfDhDh#iL(3A%#~djm<AMW^DKN3F9$+a.,Xdeefff4;!##(^
)$<<	 	{##q(( &k!nc::=KNY6777 +A<<<< I !,AI!00q99
)!*Q-55 [*EZ\_:`:` [0:1@U0U--3=a=0Z0ZCX0Z0Z-!+Y8My Y#///t{##a''DKN't{1~'A7BKK =bg|Ub c cdddA7BKK =bg|Ub c cdddddq #"6 $#2 ('''''r   c                    |                      |d          }|Q|}| j        |j        d                  j        j        j        }|J | j        |j        d                  }|                    t          j	        |j        d         ||                     t          |j                  dk    r|j        d         r|j        d         r|                     |d          }|| j        |j        d                  }|                    t          j	        |j        ||                     | j        |j        d                  }|                    t          j	        |j        ||                     d S d S d S d S d S d S )Nr   r  rY   r  )r  r  rq  r   r"   r1   r  r  r   r}  rZ   r  r   )rM  r   r  r  ra  r4   r  s          r   r  z=SymbolicShapeInference._infer_DecoderMaskedMultiHeadAttentionq	  s]    oodA.."&L>$*Q-8=ISL+++A/BKK5dk!nlT`aabbb4;!##A#4;q>#!00q99
)A7BKK =bg|U_ ` `aaaA7BKK =bg|U_ ` `aaaaa #" $#####))r   c                 r   |                      |d          }||                                }| j        |j        d                  j        j        j        }|J t          |          d d d f\  }}}}|j        D ]G}	|	j	        dk    r|	j
        }|dk    r||z   n|}"|	j	        dk    r|	j
        }5|	j	        dk    r|	j
        }H|                    |           ||         |z
  |z  dz   ||<   | j        |j        d                  }
|
                    t          j        |j        d         ||                     d S d S )Nr   r   r2  r  r  rY   )r  r  r  rq  r   r"   r1   rZ   r   r   r?   r  r  r  r   r}  )rM  r   r  r  ra  rM   r   r  r  r   r4   s              r   r7  z*SymbolicShapeInference._infer_UnfoldTensor	  sS   oodA.."&++--L>$*Q-8=ISL+++$'$4$4dD$$F!D#tT " "9%%&C(+r		$**sCCY&((6DDY&((6D%%%!,S!1D!8T AA ELA/BKK5dk!nlT`aabbbbb' #"r   c           	      z   |                      |d          }|t          |          }|dk    s|dk    sJ ||dz
           ||dz
           }}dd| d| d| d| g}t          j        j        }| j        |j        d                  }|                    t          j	        |j        d         ||                     d S d S )	Nr   r  r3  rY   zmax(z, z	) <= O < z + )
r  rZ   r7   rl  r  r  r  r  r   r}  )	rM  r   r  	shape_lenMr  r  ra  r4   s	            r   r  z0SymbolicShapeInference._infer_DynamicTimeWarping	  s     oodA.."K((I>>Y!^^^3y1}-{9q=/IqA@a@@1@@q@@Q@@AL+1LA/BKK5dk!nlT`aabbbbb #"r   c                 0    |                      |           d S r0   r  r"  s     r   r  z&SymbolicShapeInference._infer_FastGelu	  r  r   c                 0    |                      |           d S r0   r  r"  s     r   r   z"SymbolicShapeInference._infer_Gelu	  r  r   c                 0    |                      |           d S r0   r  r"  s     r   _infer_QuickGeluz'SymbolicShapeInference._infer_QuickGelu	  r  r   c                 0    |                      |           d S r0   r  r"  s     r   r!  z*SymbolicShapeInference._infer_GemmFastGelu	  r  r   c                 0    |                      |           d S r0   r  r"  s     r   r"  z(SymbolicShapeInference._infer_GemmFloat8	  r  r   c                 x   |                      |           t          |j                  dk    rt          |d          }|d}|                     |d          }|\t          |          }t          ||          }|d |         d t          ||z
            D             z   }| j        |j        d                  j	        j
        j        }|t          j        j        k    s|t          j        j        k    rt          j        j        }| j        |j        d                  }|                    t%          j        |j        d         ||                     t          |j                  dk    rR| j        |j        d                  }|                    t%          j        |j        d         ||                     d S d S d S d S )NrY   rL   r2  r   c                     g | ]}d S r<  r	   )r   r  s     r   r   zDSymbolicShapeInference._infer_LayerNormalization.<locals>.<listcomp>	  s    .M.M.MQq.M.M.Mr   r  )r$  rZ   r  r   r  rN   r  r  rq  r   r"   r1   r7   rl  FLOAT16BFLOAT16r  r  r   r}  )rM  r   rL   x_shaperM   
mean_shape
mean_dtyper4   s           r   r%  z0SymbolicShapeInference._infer_LayerNormalization	  s   &&t,,,t{a v..D|oodA..G"7||+D$77$UdU^.M.M%t:L:L.M.M.MM
!^DJqM:?KU
!1!999Z4K[Kd=d=d!%!1!7J^DKN3F9$+a.*V`aabbbt{##a''A7BKK =dk!njZd e efffff!  
 #" ('r   c                 0    |                      |           d S r0   r  r"  s     r   r&  z1SymbolicShapeInference._infer_LongformerAttention	  r  r   c                    |                      |d          }|                      |d          }t          |          dk    rt          |          dk    sJ g ||d         }| j        |j        d                  j        j        j        }| j        |j        d                  }|                    t          j
        |j        d         ||                     t          |j                  dk    rq|j        d         rd|d         g}| j        |j        d                  }|                    t          j
        |j        d         t          j        j        |                     t          |j                  dk    rN| j        |j        d                  }|                    t          j
        |j        d         ||                     d S d S )Nr   r  rY   r  )rM  r   input_ids_shapeword_embedding_shaper  word_embedding_dtyper4   mask_index_shapes           r   r  z5SymbolicShapeInference._infer_EmbedLayerNormalization	  s   //$22#tQ77?##q((S1E-F-F!-K-K-KKBB*>q*AB#~djm<AMW^DKN+
F1$+a.BVXdeeffft{aDKN / 23A/BKK5dk!ndFVF\^noopppt{a A/BKK5dk!nFZ\hiijjjjj	  r   c                     |                      |           t          |j                  dk    r|                      |dd           d S d S )Nr3  r   r/  r"  s     r   r5  z4SymbolicShapeInference._infer_SkipLayerNormalization	  sS    &&t,,, t{a**4A66666  r   c                 0    |                      |           d S r0   r  r"  s     r   r#  z'SymbolicShapeInference._infer_GroupNorm	  r  r   c                 0    |                      |           d S r0   r  r"  s     r   r,  z,SymbolicShapeInference._infer_PagedAttention	  r  r   c                    | j         |j        d                  j        j        j        }|                     |d          }|| j         |j        d                  }|                    t          j	        |j
        ||                     | j         |j        d                  }|                    t          j	        |j
        ||                     |j        d         dk    r*|j        d         dk    r|                     |dd           d S |j        d         dk    r|j        d         dk    sJ t          |d          }t          |d          }|                     |d          }||d         }t          |t                    rpt          ||d|z  z   z            }	||	z  |d<   | j         |j        d                  }|                    t          j	        |j        d         ||                     d S d S d S )Nr   r3  rY   r  rP   rD  kv_num_heads)r  rq  r   r"   r1   r  r  r  r   r}  r   r$  r   r  r  r=   )
rM  r   ra  r  r4   rD  r  r  hidden_sizer  s
             r   r$  z1SymbolicShapeInference._infer_GroupQueryAttention	  s   ~djm49EO((q11
! A/BKK5bg|ZXXYYYA/BKK5bg|ZXXYYY:a=B4:a=B#6#6**4A66666 :a=B&&4:a=B+>+>+>>%dK88I(~>>L//$22K&)!nk3// j #K9q<?O3O$P Q QI%.%:KNA7BKK =dk!nl\g h hiiiii '&j jr   c                 0    |                      |           d S r0   )r$  r"  s     r   r6  z-SymbolicShapeInference._infer_SparseAttention
  s    ''-----r   c                     |                      |dd           t          |j                  dk    r|                      |dd           d S d S r  r/  r"  s     r   r4  z+SymbolicShapeInference._infer_SkipGroupNorm
  sU    &&tQ222t{a**4A66666  r   c                    |                      |d          }|                      |d          }|r|rt          |d         t                    r|}t          |d         dz            |d<   | j        |j        d                  }| j        |j        d                  j        j        j        }|	                    t          j        |j        ||                     d S d S d S d S r  )r  r  r=   r  r  rq  r   r"   r1   r  r   r}  r   )rM  r   r  
bias_shaper  r4   ra  s          r   r  z+SymbolicShapeInference._infer_BiasSplitGelu
  s    oodA..__T1--
 	\: 	\*Z]C*H*H 	\&L!*Q-!"344LOA/B>$*Q-8=ISLKK5bg|\ZZ[[[[[	\ 	\ 	\ 	\ 	\ 	\r   c                 0    |                      |           d S r0   r  r"  s     r   r  z%SymbolicShapeInference._infer_BiasAdd"
  r  r   c                    t          |j                  dk    r|                     |           d S t          |j                  dk    r2|                     |dd           |                     |dd           d S t          |j                  dk    rJ|                     |dd           |                     |dd           |                     |dd           d S d S )NrY   r  r   r,  r3  )rZ   r  r$  r"  s     r   r3  z-SymbolicShapeInference._infer_RotaryEmbedding%
  s    t{q  **400000""**4QQ*OOO**4QQ*OOOOO""**4QQ*OOO**4QQ*OOO**4QQ*OOOOO	 #"r   c                 f   t          |d          }|sJ d|j         d            t          |d          }|sJ d|j         d            ddlm} t          |d                                          } ||          }| j        |j        d                  }|                    t          j	        |j        d         t          j        j        g                      |g }g }	t          t          |j                            D ]i}
|                     ||
          }|                    |           | j        |j        |
                  j        j        j        }|	                    |           j ||||	          \  }}t          |          t          |          cxk    rt          |j                  d	z
  k    sHn J d| d
t          |           dt          |           dt          |j                  d	z
   d	            t          t          |j                  d	z
            D ]_}|d	z   }| j        |j        |                  }|                    t          j	        |j        |         ||         ||                              `d S t          t          |j                  d	z
            D ]}| j        |j        |d	z                     }|                     ||         |          }t-          |          }t          j	        |j        |d	z            ||         |          }|                    |           d S )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_namerY   z' returned z shapes and z dtypes, but expected z	 outputs.)r   r   onnxruntime.capi._pybind_stater  rN  r  r  r  r   r}  r7   rl  r  r  rZ   rq  r  r  r   r"   r1   r0  rA   )rM  r   r  r  r  r   shape_infererr4   input_shapesinput_dtypesr-  r(   input_dtypeoutput_shapesoutput_dtypesr?   r.  r@   rr  s                      r   r-  z&SymbolicShapeInference._infer_PythonOp2
  sx   +D2GHH"cc$c$c$c$ccc"+D2GHH"cc$c$c$c$ccc"OOOOOO!$44;;==	44Y?? ^DKN+
F1$+a.$BRBXZ\]]^^^$LL$S__55 1 1k::##E***"nTZ-DEJV`##K0000+8=|\+Z+Z(M=}%%]););UUUUDK@P@PST@TUUUUU@Y @ @3}3E3E @ @SVWdSeSe @ @ #DK 0 01 4@ @ @ VUU 3t{++a/00   1u^DK$=>1$+l2K][\M]_lmn_opp     3t{++a/00 ( (^DKA$67"667J17MtTT2;??#:4;q1u;MObcdOeglmm
J''''( (r   c                    |                      ||          }| j        |j        |                  j        j        j        }| j        |j        |                  }|                    t          j	        |j        |         ||                     d S r0   )
r  r  rq  r   r"   r1   r  r  r   r}  )rM  r   r-  r.  r(   ra  r4   s          r   r$  z0SymbolicShapeInference._propagate_shape_and_typea
  ss    k22~dj&=>COY^DK56
F1$+l2K\[`aabbbbbr   c                 \    t          |          t          k    rdS d|vrdS || j        v rdS dS )NFunk__Tr  )rM  rt  s     r   _is_none_dimz#SymbolicShapeInference._is_none_dimg
  s@    	??c!!5)##5+++5tr   c                 B    |D ]}|                      |          r|c S d S r0   )r  )rM  	out_shapeouts      r   _is_shape_contains_none_dimz2SymbolicShapeInference._is_shape_contains_none_dimp
  s:     	 	C  %% 


tr   c                 x    !"#$% |pi  _          j        j                            d                                d           t                       _         j        j        j        D ]}t          |          }|t          |j
                  r!|j
        j        j        j        j        j        }n|j
        j        j        j        }t!          |          D ]:\  }}|3t#                               |j        |                    ||         _        ; j                            d |D                        Ή j        D ]X}| j        v r. j        |         }| j        v sJ  j        |          j        |<   9t1          j        |dd           j        |<   Yt5          j                     _         j                             j                    j        j                            d           i }	 fd  j        j        j        D ]}
  |
          |	|
j        d         <   g }d	 tA           j        j        j                  tA           j        j        j!                  z   D             %tE          %fd
 j        j        j        D                       r j        j        j        }n/tG          %fd j        j        j        D                       stI          |          } j        j        j        D ]l""j        d         %vr[tG          %fd|	"j        d                  D                       r/%                    "j                   |%                    "           m|tI          |          k    r9tG          %fd j        j        j        D                       stM          d          tG          %fd j        j        j        D                       |D 
]W"tG           fd"j        D                       sJ  '                    "           d}"j(         j)        v r  j)        "j(                 "           n"j(        dv r` j*        "j        d                  }tI          |j
        j        j        j                  dk    r t4          j+        j,        |j
        j        _        n"j(        dk    r~"j-        dk    rs"j.        D ]k}|j        dk    r^t_          |j0        tb                    r|j0        2                    d          n|j0        }| j3        v rd}  j3        |         "            nl j4        dk    rltj          6                    "j(        dz   "j        z              t!          "j                  D ]-\  }}tj          6                    d||| j7        v rdnd           ."j(        dv r j*        "j        d                  }tI          tq          |j
                            #" fdts          tI          "j                            D             }ts          #"j(        dv rdndz
            D ];#fd|D             }tI          |          dk    r :                    |d           <ts          tI          "j                            D ]}"j(        d k    s"j(        d!k    r|d"v r"j(        d#k    rtI          "j                  dk    rB j*        "j        |                  }|j
        }|;                    d$          }|d%vr  j4        dk    r|d&k    r|j        j        ;                    d$          }|d'k    rtj          6                    d(<                    "j        |         t#          t          |                    t4          j+        j=        >                    |j
        j        j        j        j                                       nWtj          6                    d)"j        |          d*|            n+tj          6                    d)"j        |          d|            t          |          $|j        j        t4          j+        j,        k    } j4        dk    rtj          6                    d)"j        |          d$d+t4          j+        j=        >                    |j
        j        j                              "j        |          j         v r@tj          6                    d,t#           j         "j        |                            z              $d $v s ?                    $          s|r j@        r"j(        d-v r" fd.ts          tI          "j                            D             }"j(        dv rd $v s ?                    $          rd $v r$A                    d           !n($A                     ?                    $                    !!$fd/|D             }tI          |d                   dk    r"|d         tI          |d                   dz
  k     sJ tI          |d                   dk    r"|d         tI          |d                   dz
  k     sJ n:"j(        d0k    r- B                    "d           C                    "d          g}ng }|rts          tI          $                    D ]w!$!          D                    $!                   s&!$fd1|D             }tI          |          dk    r/ E                    d2 t          ||d3          D                        xd _G        nd _G        nd _G         jG        du r"j(         j)        vrr|so|o$d u ptI          $          dk    }|r  jH        r I                    "d          nd4#ntI          $          ##dk    r J                    #"|          }|r( j*        "j        d                  j
        j        j        }n|j
        j        j        }|                    t          jL        |j        |t          |                                j4        dk    r}|r3tj          6                    d5"j(         d6"j         d7|j         d8            j4        dk    r=tj          6                    d)"j        |          d|d+|j
        j        j                    d _G        E j4        dk    s
 j@        r|r>tj          6                    d9"j(        "j                   tj          6                    d:           "j        D ]N}| j*        v r&tj          6                     j*        |                    1tj          6                    d;|            Otj          6                    d<           "j        D ]N}| j*        v r&tj          6                     j*        |                    1tj          6                    d;|            O j@        r1|s/tj          6                    d=t#           j                  z                dS 
Yd _G        dS )>Nrr  T)ru  c                 >    g | ]}t          |          t          u |S r	   r  r*   s     r   r   z6SymbolicShapeInference._infer_impl.<locals>.<listcomp>
  s#    'Q'Q'Qa$q''S.....r   )r  positiver  c                 &   d | j         D             }g }| j        dk    r!t          | d          t          | d          g}n| j        dv rt          | d          g}|D ]}d |j        D             t	                      }|j        D ]}                    |j                   |j        D ],}|                    fd |          D                        -|                    |           |j         D ]}|                    |j	                   |S )	Nc                     h | ]}||S r	   r	   r>   s     r   r  zISymbolicShapeInference._infer_impl.<locals>.get_prereq.<locals>.<setcomp>
  s    0001a0Q000r   r   r  r  )r   r   r  c                     h | ]	}|j         
S r	   r
   r>   s     r   r  zISymbolicShapeInference._infer_impl.<locals>.get_prereq.<locals>.<setcomp>
  s    -L-L-Laf-L-L-Lr   c                     g | ]}|v|	S r	   r	   )r   r?   g_outputs_and_initializerss     r   r   zJSymbolicShapeInference._infer_impl.<locals>.get_prereq.<locals>.<listcomp>
  s$    $e$e$e1JdAdAdQAdAdAdr   )
rq  r  r   r  r]  r   r  r  discardr   )	r   namesr  gg_prereqnr?   r  
get_prereqs	          @r   r  z6SymbolicShapeInference._infer_impl.<locals>.get_prereq
  sS   00
000EI|t##!$66!$66		 !111*4889	 
* 
*-L-Lam-L-L-L*55 @ @A.55ah???? g gAOO$e$e$e$e

1$e$e$effffX&&& * *AMM!&))))*Lr   r   c                     h | ]	}|j         
S r	   r
   r>   s     r   r  z5SymbolicShapeInference._infer_impl.<locals>.<setcomp>
  s    qqqa16qqqr   c              3   *   K   | ]}|j         v V  d S r0   r
   r   r  sorted_known_vis     r   rW  z5SymbolicShapeInference._infer_impl.<locals>.<genexpr>
  s*      LLQqv(LLLLLLr   c              3   *   K   | ]}|j         v V  d S r0   r
   r   s     r   rW  z5SymbolicShapeInference._infer_impl.<locals>.<genexpr>
  s*      WW!&O3WWWWWWr   c              3   $   K   | ]
}||v V  d S r0   r	   )r   r?   r!  s     r   rW  z5SymbolicShapeInference._infer_impl.<locals>.<genexpr>
  sK       G G12YZG_,G G G G G Gr   c              3   *   K   | ]}|j         v V  d S r0   r
   r   s     r   rW  z5SymbolicShapeInference._infer_impl.<locals>.<genexpr>
  sC       I I23AFo-I I I I I Ir   zInvalid model with cyclic graphc              3   .   K   | ]}||j         v V  d S r0   r  r  s     r   rW  z5SymbolicShapeInference._infer_impl.<locals>.<genexpr>
  s/      DDq!DqDN*DDDDDDr   F)ConvTransposeATenzorg.pytorch.atenoperatorr@  r  z: z  Input %s: %s %srP   r  c                 <    g | ]}                     |          S r	   r  r  s     r   r   z6SymbolicShapeInference._infer_impl.<locals>.<listcomp>
  s'    VVV!T__T155VVVr   r  c                 r    g | ]3}t          |          z   k    |t          |          z
  z            4S r	   rZ  r  s     r   r   z6SymbolicShapeInference._infer_impl.<locals>.<listcomp>
  sE    eeeAcRSffWXj\dNdNdqQ(!2Q!67NdNdNdr   rY   r  r   r   r  r   r   )r"   sparse_tensor_typeNr#   r"   z  {}: sequence of {} {}z  z: sequence of r  z  Sympy Data: )rj   r   r   rx   r   r  r   rr   r   r  r{   LessGreaterLessOrEqualGreaterOrEqualr   r   c                 <    g | ]}                     |          S r	   r  r  s     r   r   z6SymbolicShapeInference._infer_impl.<locals>.<listcomp>G  s'    %_%_%_1doodA&>&>%_%_%_r   c                 T    g | ]$}t          |          t                    z
  z   %S r	   rZ  r   rV  r  r  s     r   r   z6SymbolicShapeInference._infer_impl.<locals>.<listcomp>R  s0    .].].]QRs1vvI/F/L.].].]r   rz   c                 T    g | ]$}t          |          t                    z
  z   %S r	   rZ  r2  s     r   r   z6SymbolicShapeInference._infer_impl.<locals>.<listcomp>e  s/    *Y*Y*YQ3q66C	NN+BS+H*Y*Y*Yr   c                     g | ]=\  }}|d k    t          ||                   r||         nt          ||                   >S r  )r<   r   )r   rV  r?   s      r   r   z6SymbolicShapeInference._infer_impl.<locals>.<listcomp>h  sQ     )* )* )*041/0Avv 5?qt4D4D,SAaDD#aPQd))/5vvr   r=  r2  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: )Nr  ro  rp  r  rf  r]  rF  rq  r5   r&   r   r#   r1   r"   r(   r   r  r   r(  r   rs  r  rD  rE  rG   ra  r7   r  r  r  r   r  rQ   r  r  r\  rZ   r  r  r  r  r8  r  rl  	UNDEFINEDrS   r   r  rV  bytesrN  rB  rI  rb  r  r  r.   r  r  r   formatrm  rn  r  rG  re  r  r  r  rm  r  rC  rH  r  r0  r   r}  rA   )&rM  start_sympy_datar?   r  
input_dimsi_dimr   rV  s_mergeprereq_for_noder  sorted_nodesold_sorted_nodes_lenknown_aten_opr4   r   aten_op_namer   r  r  r  out_typeout_type_kindseq_cls_typeout_type_undefinedshapesdim_idxis_unknown_opr  	out_dtyper  r+   r  r  r   r  r  r!  s&   `                              @@@@@@@r   r  z"SymbolicShapeInference._infer_implv
  sn   +1r%%l333##T#:::!ee#) 	S 	SA3A66K"16"" :V1;GMQ

V/59
'44 ] ]
s;25d6L6LQVUZ6[6[2\2\Ju%/&&'Q'Q;'Q'Q'QRRRR$ 	V 	VAD)))/2$"55555)-)<W)E#A&& */aPT)U)U)U#A&& ((dl+++%%m444 	 	 	 	 	. #( 	9 	9A+5:a==OAHQK(( qq40B0H+I+IDQUQ]QcQoLpLp+pqqqLLLL$,2D2KLLLLL 	G<-2LLWWWWT\=O=VWWWWW G'*<'8'8$ L.3 2 2DAo==3 G G G G6EdkRSn6UG G G D D= (..t{;;;$++D111'3|+<+<<<S I I I I7;|7I7PI I I F F< $$EFFF WWWWT\=O=VWWWWW G ! ]	! ]	!DDDDDDJDDDDDDDD((...!M|t///. .t4444!222 ^DKN3rw*0455::484D4NBG'1''DK;M,M,M N  DyJ..AKDFTYAZAZ'ftv}}W'='='=`d`f'4+CCC,0MBD4\B4HHH / }q  T\D049<===(44 t tGAtLL!4aPTX\XjPjPj}}prssss | 
  
 
 ^DKN38AABBVVVVVuS__?U?UVVV	x@n0n0n11tuvww O OAeeeeeeeeG7||a''///NNNS--.. l! l! L$<<<Pr@r@rVmm<#444T[9I9IA9M9M ^DK$457 ( 3 3G < < !(SSS}q(((O;;+3+A+K+V+VW^+_+_L+}<< &$=$D$D(,C(8(+,Eb,I,I(J(J(,(8(A(F(F,.G,A,K,W,a)* )*%& %&!" !" !" !" !'-`$+c2B-`-`R^-`-` a a a a"LL)Qdk#.>)Q)Q-)Q)QRRR5b99	%-%9%CtGWGa%a"=1$$LL~T[-~~~~t?O?X?]?]^`^e^q^{?|?|~~   {3'4+;;;%5D<LT[Y\M]<^8_8_%_``` )ty/@/@DDdDdenDoDo/@' 0A' ?*< ,  & &`%_%_%_%_cRVR\ooH^H^%_%_%_F#| 0    
 $(9#4#48X8XYb8c8c#4'+y'8'8.7ood.C.C.7ood>^>^_h>i>i.j.j.].].].].]V\.].].]G+.vay>>A+=+='!*sSYZ[S\~~`aOaBaBaBa+a+.vay>>A+=+='!*sSYZ[S\~~`aOaBaBaBa+a!\X55 !%a 8 8 $a 8 8&FF
 &(F! .',S^^'<'< & &#,S>#=dFWFWXabeXfFgFg#=$, +Z*Y*Y*Y*YRX*Y*Y*Y#&w<<!#3#3$($=$=)* )*8;FGTY8Z8Z8Z)* )* )*%& %& %& )-DII(-DII$)	 yE))dl$BR.R.R[h.R(:(i	T@Q@hUXYbUcUcghUh( 6 IMH_'gt';';D!'D'D'DegHH (+9~~H#q==(,(@(@4QT(U(UI1 J,0N4:a=,I,N,Z,d		 -/G,?,I	KK & =$&G$-$>y$I$I!" !"    $}q00#0 !&$*LL(z(z(zUYU^(z(zkmkr(z(z(z%& %& %& $(=1#4#4$*LL1wdk#6F1w1w)1w1wXZX_XkXu1w1w$x$x$x(,DI$}q((0@(DV(%WY]Yegkgpqqq^444!% J JA DN22 &T^A-> ? ? ? ? &-HQ-H-H I I I I_555!% J JA DN22 &T^A-> ? ? ? ? &-HQ-H-H I I I I+ S4F S"LLs4;P7Q7Q)QRRR 555s 0Agl!\ 	tr   c                     | j         j        j        D ]5}|j        | j        v r%|                    | j        |j                            6d S r0   )ro  rp  r  r   r  r  )rM  r  s     r   r  z-SymbolicShapeInference._update_output_from_vi  sN    l(/ 	= 	=F{dn,,v{ ;<<<	= 	=r   c                    t          |           }|r|dk     rt                              d           d S t          ||||          }d}|                    |            |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)rV   rb  rc  rh   r  rC  r  r  r7   
save_modelro  r  )r  rN  rO  rP  rQ  
onnx_opsetr  all_shapes_inferreds           r   r  z#SymbolicShapeInference.infer_shapes  s    u%%
 	zA~~NNKLLL4#9':O`bi#j#j # ,,U333&+ 	I":"F"F"H"H '+ 	I 77999" 	CO4<>YquvvvvABBB'//r   )rP   )F)TT)FF)r   r   r  )Tr0   )rJ  FFr   )__name__
__module____qualname__rS  rm  rf  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r   r(  r,  r0  rZ  r  rh  rx  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   r9  r:  r=  r;  r<  r>  r?  r@  rA  r   r   r  r  r  r0  r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r*  r+  r1  r2  r  r(  r  r7  r  r  r   r  r!  r"  r%  r&  r  r5  r#  r,  r$  r6  r4  r  r  r3  r-  r$  r  r  r  r  staticmethodr  r	   r   r   rh   rh   }   sd       K K K KZ+* +* +* +*Z
( 
( 
( 
(
 
 
  <  27 7 7	 	 	/ / /  w w w
  D D De' e' e'N6( 6( 6( 6(p# # # #JC C C&: : :
 
 
     
 
 
 
[ [ [ [B B B BH8 8 8 8\ \ \ \>6 6 6:

 

 

? ? ?4' ' 'j j j
 
 
('
 '
 '
R
 
 
&D D D
 
 
2

 

 



 

 

_ _ __ _ _\ \ \<b <b <b|   < < <B	
 	
 	

 
 
"l l l89% 9% 9%v) ) )A A A\ \ \&j j j
x x x
 
 
*
 
 
4  m m m     D
 
 
"
n 
n 
nn n nB  .j j j2  0` ` ` T T T
 
 
&  B( ( (
N N N\ \ \2' 2' 2'h0 0 0d! ! !F	
 	
 	

D 
D 
DI I IJ J J
 
 
Zd Zd ZdxW W W") ) )>F F FH H H.' .' .'`
 
 
(s s s:  !' !' !'F  +e +e +eZ_ _ _,\ \ \$_ _ _p p p(c c c- - -Je Je JeXb b b,c c c.c c c- - -- - -- - -) ) )) ) )g g g(- - -k k k*7 7 7- - -- - -j j j8. . .7 7 7
\ \ \- - -P P P-( -( -(^c c c c    w w w wr	= = =
 0 0 0 \0 0 0r   rh   c                  Z   t          j                    } |                     ddd           |                     dd           |                     dd	d
d           |                     ddt          d           |                     ddd
d           |                     ddt          d           |                     ddd
d           |                     ddd
d           |                     ddd           |                     ddt          d            |                                 S )!Nz--inputTzThe input model file)requiredhelpz--outputzThe output model file)rW  z--auto_mergez:Automatically merge symbolic dims when confliction happens
store_trueF)rW  actiondefaultz	--int_maxzGmaximum value for integer to be treated as boundless for ops like slicerJ  )rW  r   rZ  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./)rW  rZ  z--external_data_size_thresholdz$The size threshold for external datai   )argparseArgumentParseradd_argumentr=   
parse_args)parsers    r   parse_argumentsr`    s   $&&F
	D7MNNN

)@AAA
I	     V	     J	     W	     !4	     #7	     ":    
 (3	     r   __main__zinput model: zoutput model z!Doing symbolic shape inference...TF)rM  all_tensors_to_one_filelocationsize_thresholdconvert_attributezDone!r0   )1r[  loggingnumpyrD   r7   rG   r   r   r   	packagingr   parse__version__	getLoggerrQ  rb  r   r    r&   r.   r2   r5   r9   rA   r<   rN   rV   r_   rb   rf   rh   r`  rr  inforq  r  r  loadrN  rO  rP  rQ  out_mprM  rN  rb  external_data_locationexternal_data_size_thresholdsaver	   r   r   <module>rr     s  
         6 6 6 6 6 6 6 6 6 6      w}T%&&-'-*@*@@@@@		8	$	$   c c c' ' '  0 0 0
2 
2 
2  _ _ _r r r. . .
         F-0 F-0 F-0 F-0 F-0 F-0 F-0 F-0RZ3 3 3l z?D
KK$*,---{ 3Odk1222
KK3444#00	$* F { v % 	+DO&*(,(D4#@"'     DIfdk***G5    r   