
     Ng             	       `   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     b/var/www/html/ai-engine/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   s/    $;;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ddZddZddZd Zd Zd Zd	 Z	d
 Z
d Zd Zd Zd Zd Zd Z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 ZtddxZudy Zvdz Zwdd{Zxd| Zyezdd~            Z{dS )SymbolicShapeInferencerP   c                    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| jA        | jB        | jC        | jD        | jE        | jF        | j6        | jG        | jH        | jI        | jJ        | j=        | jK        | jL        | jL        | jM        dV| _N        i dW| j        dX| jO        dY| jP        dZ| jQ        d[| jR        d\| jR        d]| jS        d^| jT        d_| jU        d`| jQ        da| jQ        db| j,        dc| jV        dd| jW        de| jW        df| jW        dg| jW        | _X        dh| _Y        i | _Z        i | _[        i | _\        || _]        || _^        || __        || _`        di| _a        || _b        d S )jNAddArrayFeatureExtractorAveragePoolBatchNormalizationCastCategoryMapperCompressConcatConcatFromSequenceConstantConstantOfShapeConvCumSumDivEinsumExpandEqualFloorGatherGatherElementsGatherNDIdentity	AllReduceIfLoopMatMulMatMulInteger16MaxPoolMaxMemcpyFromHostMemcpyToHostMinMoEMulNonMaxSuppressionNonZeroOneHotPadRange
Reciprocal	ReduceSum
ReduceProdReshapeResizeRoundScanScatterElements
SequenceAtSequenceInsertShapeSizeSliceSoftmaxCrossEntropyLossSoftmaxCrossEntropyLossInternal!NegativeLogLikelihoodLossInternalSplitSplitToSequenceSqueezeSubTileTopK	Transpose	UnsqueezeWhereZipMapNeg	AttentionBiasAddBiasGeluBiasSplitGeluDecoderMaskedMultiHeadAttentionDequantizeLinearEmbedLayerNormalizationFastGeluGatedRelativePositionBiasGeluGemmFastGelu
GemmFloat8	GroupNormGroupQueryAttentionLayerNormalizationLongformerAttentionMatMulNBitsMultiHeadAttentionNhwcConv)PackedAttentionPackedMultiHeadAttentionPagedAttentionPythonOpQuantizeLinear	QuickGeluRelativePositionBiasRemovePaddingRestorePaddingRotaryEmbeddingSimplifiedLayerNormalizationSkipGroupNormSkipLayerNormalization SkipSimplifiedLayerNormalizationSparseAttention	embedding
bitwise_ordiagonalmax_pool2d_with_indicesmaxminmultinomialunfoldargmax
avg_pool2d_adaptive_avg_pool2dnumpy_Tnative_group_normupsample_nearest1dupsample_nearest2dupsample_nearest3dupsample_bicubic2dTr   )c_infer_symbolic_compute_ops_infer_ArrayFeatureExtractor_infer_Pool_infer_BatchNormalization_infer_Cast_infer_CategoryMapper_infer_Compress_infer_Concat_infer_ConcatFromSequence_infer_Constant_infer_ConstantOfShape_infer_Conv_pass_on_shape_and_type_infer_Einsum_infer_Expand_infer_Gather_infer_GatherElements_infer_GatherND	_infer_If_infer_Loop_infer_MatMul_infer_MatMulInteger_infer_NonMaxSuppression_infer_NonZero_infer_OneHot
_infer_Pad_infer_Range_infer_ReduceSum_infer_ReduceProd_infer_Reshape_infer_Resize_infer_Scan_infer_ScatterElements_infer_SequenceAt_infer_SequenceInsert_infer_Shape_infer_Size_infer_Slice_infer_SoftmaxCrossEntropyLoss_infer_Split_infer_SplitToSequence_infer_Squeeze_infer_Tile_infer_TopK_infer_Transpose_infer_Unsqueeze_infer_ZipMap_infer_Attention_infer_BiasAdd_infer_BiasGelu_infer_BiasSplitGelu&_infer_DecoderMaskedMultiHeadAttention_infer_DequantizeLinear_infer_EmbedLayerNormalization_infer_FastGelu _infer_GatedRelativePositionBias_infer_Gelu_infer_GemmFastGelu_infer_GemmFloat8_infer_GroupNorm_infer_GroupQueryAttention_infer_LayerNormalization_infer_LongformerAttention_infer_MatMulNBits_infer_MultiHeadAttention_infer_NhwcConv_infer_PackedAttention_infer_PackedMultiHeadAttention_infer_PagedAttention_infer_PythonOp_infer_QuantizeLinear_infer_RelativePositionBias_infer_RemovePadding_infer_RestorePadding_infer_RotaryEmbedding_infer_SkipGroupNorm_infer_SkipLayerNormalization_infer_SparseAttentiondispatcher__infer_aten_bitwise_or_infer_aten_diagonal_infer_aten_pool2d_infer_aten_minmax_infer_aten_multinomial_infer_aten_unfold_infer_aten_argmax_infer_aten_group_norm_infer_aten_upsampleaten_op_dispatcher_run_suggested_merge_symbolic_dims_input_symbols_auto_merge_guess_output_rank_verbose_int_max_subgraph_id_prefix_)selfint_max
auto_mergeguess_output_rankverboseprefixs         r   __init__zSymbolicShapeInference.__init__~   s   f
43f
#T%Ff
 4+f
 !$"@	f

 D$f
 d8f
 ,f
 d(f
 !$"@f
 ,f
 t:f
 D$f
 d2f
 43f
 d(f
  d(!f
" T5#f
 f
$ T5%f
& d('f
( d8)f
* ,+f
, 4-f
. 5/f
0 $.1f
2 D$3f
4 d(5f
6 t87f
8 t'9f
: 43;f
< d:=f
> D8?f
@ 43Af
B 4/Cf
D 43Ef
 f
 f
F  !>Gf
H t*If
J d(Kf
L 4?Mf
N T&Of
P $6Qf
R .Sf
T $0Uf
V t*Wf
X d(Yf
Z T1[f
\ D$]f
^ t:_f
` $0af
b d8cf
d T&ef
f D$gf
 f
 f
h T&if
j &t'Jkf
l .t/Rmf
n 01Tof
p T&qf
r t:sf
t t*uf
v 43wf
x D$yf
z D${f
| .}f
~ .f
@ T5Af
B d(Cf
D 43Ef
H .If
J t*Kf
 f
 f
L ,Mf
N T6Of
P .t/ZQf
R  <Sf
T &t'JUf
V ,Wf
X ()NYf
Z D$[f
\ D4]f
^ $0_f
` .af
b "4#Bcf
d !$"@ef
f "4#Bgf
h 42if
j !$"@kf
l ,mf
 f
n  $:(,(L"8,"8-$($D!6"8#:,0,J!6&*&H040R#:Kf
 f
 f
N$
+$
$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                 l    g | ]0}t          |          t          u r	|j        v pt          |          1S r	   )r   r   r:  r<   )r   srB  s     r   r   z?SymbolicShapeInference._add_suggested_merge.<locals>.<listcomp>  s=    dddWXT!WW^@T-@(@RZPQ]]dddr   r   z9Potential unsafe merge between symbolic expressions: (%s),c                 ,    g | ]}t          |          S r	   rZ   r   rK  s     r   r   z?SymbolicShapeInference._add_suggested_merge.<locals>.<listcomp>!  s    111qCFF111r   )allsetr9  itemsremoveaddr<   r;  r   r:  rG   Symbolr>  loggerwarningjoinrQ   indexr   r=   r<  _apply_suggested_merge)	rB  symbolsapplykre   map_torK  symbols_listlenss	   `        r   _add_suggested_mergez+SymbolicShapeInference._add_suggested_merge  s   dddd\cdddeeeee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   )r9  rQ   out_mp_graphinput
value_infor   r"   r(   r   	dim_paramr<   r=   	dim_value)rB  graph_input_onlyr?   r+   re   s        r   rZ  z-SymbolicShapeInference._apply_suggested_merge1  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>@      PPPAafaPPPr   c                     i | ]
}|j         |S r	   r
   r>   s     r   rl  z6SymbolicShapeInference._preprocess.<locals>.<dictcomp>A  rm  r   c                     i | ]
}|j         |S r	   r
   r>   s     r   rl  z6SymbolicShapeInference._preprocess.<locals>.<dictcomp>B  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   rl  z6SymbolicShapeInference._preprocess.<locals>.<dictcomp>D  sI        5afak4PQPV<<XX  r   )r7   
ModelProtorc  CopyFromrQ   rd  re  graph_inputs_initializerinitializers_	known_vi_update)rB  in_mps     r   _preprocessz"SymbolicShapeInference._preprocess=  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                 :    g | ]}t          |          t          u S r	   r   r   r*   s     r   r   z9SymbolicShapeInference._merge_symbols.<locals>.<listcomp>K  s"    111qDGGsN111r   c                 ,    g | ]}t          |          S r	   r<   r*   s     r   r   z9SymbolicShapeInference._merge_symbols.<locals>.<listcomp>N  s    ===A*Q--===r   rY   r   zdim z has been merged with value Fallow_broadcastz has been merged with dim c                 (    g | ]}|d          k    S r   r	   r   r+   rs  s     r   r   z9SymbolicShapeInference._merge_symbols.<locals>.<listcomp>^  s!    +++T!W+++r   c                 F    g | ]}j                             ||          S r	   )r9  get)r   r+   rB  s     r   r   z9SymbolicShapeInference._merge_symbols.<locals>.<listcomp>`  s,    @@@a$'++Aq11@@@r   c                 (    g | ]}|d          k    S r  r	   )r   r+   mergeds     r   r   z9SymbolicShapeInference._merge_symbols.<locals>.<listcomp>a  s!    ///1VAY///r   )rP  r<  rQ   rQ  sumrY  r>  rV  debug_check_merged_dimsr:  )rB  rs  unique_dimsis_intint_dimr  s   ``   @r   _merge_symbolsz%SymbolicShapeInference._merge_symbolsJ  s    11D11122 	 "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++++d+++,, 	7N@@@@4@@@///////00 	!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r\  zunsupported broadcast between  )	rZ   r   ranger  r<  ra  rV  rW  r   )rB  shape1shape2	new_shaperank1rank2new_rankr?   dim1dim2new_dims              r   _broadcast_shapesz(SymbolicShapeInference._broadcast_shapesh  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   )re  ry  r5   rx  rQ   rs  rB  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   re  ry  r5   rx  rQ   rs  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  )rB  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   appendr:  rG   rU  )rB  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   )re  sympy_data_rx  r   to_arrayrB  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   re  r  rx  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   r9  r:  )rB  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   c                 N    g | ]!}|j         v |j        vj         |         "S r	   )rx  rv  )r   r   rB  s     r   r   zBSymbolicShapeInference._onnx_infer_single_node.<locals>.<listcomp>  sF           222t4CU7U7U &t,7U7U7Ur   	rj   r   r   rw   r   MatMulIntegerr   r   Sumr   c                 <    g | ]}                     |          S r	   r  r   r?   r   rB  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	   rN  r   rK  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	   ry  r   r?   rB  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   rc  re  outputry  rZ   r.   r   r  r  r   
make_graphtmp_mp_rd  ru  r   infer_shapesrf  rT  r   )rB  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   \ #&
 #

J  /	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>)  s    ]]]a16]]]r   c                     h | ]}|v|	S r	   r	   )r   r   subgraph_inputss     r   r  z>SymbolicShapeInference._onnx_infer_subgraph.<locals>.<setcomp>*  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>1  s(    %u%u%uASTSY]tStStaStStStr   _)rG  rY   re  r  rf  r   c                 ,    g | ]}t          |          S r	   )r5   )r   r  s     r   r   z?SymbolicShapeInference._onnx_infer_subgraph.<locals>.<listcomp>O  s!    oooA4Q77ooor   c                 `    h | ]*}|r&|D ]#}t          |          t          u |j        v!|$+S r	   r   r   r:  )r   rK  r+   rB  s      r   r  z>SymbolicShapeInference._onnx_infer_subgraph.<locals>.<setcomp>P  sV     &
 &
 &
!&
56&
 &
01$q''S..QVZViMiMiAMiMiMiMir   )%r>  rV  r  r   r  r  rQ   rw  re  ry  r   r  r   extendrc  rd  r  ru  rh   r?  r<  r=  rA  r   r@  r|  r9  copyr8  _infer_implr  _update_output_from_vi
ClearFieldrZ   rf  r:  rz  )rB  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_float[  s'    ! eai1nnu::r   c                 <    g | ]}                     |          S r	   )r  r  s     r   r   zCSymbolicShapeInference._get_int_or_float_values.<locals>.<listcomp>a  s)    OOO1$%%dA..OOOr   c                     g | ]}|d uS r0   r	   r   re   s     r   r   zCSymbolicShapeInference._get_int_or_float_values.<locals>.<listcomp>b      ...!...r   rY   r   c                 (    g | ]} |          S r	   r	   )r   vvr  r  s     r   r   zCSymbolicShapeInference._get_int_or_float_values.<locals>.<listcomp>m  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>o  s1    KKKq
1d 3 3:c!fffKKKr   )r  rZ   re  rP  r  r   rD   r[   r(   r\   r   r   rQ   )rB  r   	broadcastr  valuesr?   re   new_v
values_lenmax_lenr  s   `` `      @r   _get_int_or_float_valuesz/SymbolicShapeInference._get_int_or_float_valuesZ  s   	 	 	 POOOOc$*oo8N8NOOO..v...// 	"!&)) 
" 
"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                       rgd |D             }t          |          }|r*fdt          | D             | j        |j        d	         <   d S  |          | j        |j        d	         <   d S d S )
NrY   )r   rw   T)r  r  )r  c                     g | ]}|d uS r0   r	   r  s     r   r   zASymbolicShapeInference._compute_on_sympy_data.<locals>.<listcomp>  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!    3W3W3WBGGBKK3W3W3Wr   r   )rZ   r  r  r  rP  anyzipr  )rB  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..v...// 	C;;F;;;G'llG C3W3W3W3W#v,3W3W3W 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   re  r  r  rB  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   )	ry  r  ru  r   rq  r2   re  r   r  )rB  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  )r9  r<   rG   rH   r=   rU  r:  )rB  rG  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  rA  rQ   rc  rd  r   rY  )rB  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  rB  s     r   r   z>SymbolicShapeInference._new_symbolic_shape.<locals>.<listcomp>  s+    ZZZ224!DDZZZr   )r  )rB  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             }t          |d          }|dgd|z  z  }t          |dd          	                    d          }|dk    rp|dk    rj	 d t          || d          |          D             }d t          |||          D             }n|# t          $ r d t          ||          D             }Y nVw xY w|dk    rg }nIdg|z  }nBt          |          d|z  k    sJ d t          |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	   r)  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   r]  r+   s      r   r   zCSymbolicShapeInference._compute_conv_pool_shape.<locals>.<listcomp>  s(    ![![![da1q5A+/![![![r   padsauto_pads   NOTSETutf-8VALIDNOTSETc                 >    g | ]\  }}t          j        ||          S r	   )rG   Modr   r+   rK  s      r   r   zCSymbolicShapeInference._compute_conv_pool_shape.<locals>.<listcomp>  s&    ^^^DAq	!Q^^^r   c                 R    g | ]$\  }}}t          d |d k    r||z
  n||z
            %S r  r   )r   r]  rK  rs       r   r   zCSymbolicShapeInference._compute_conv_pool_shape.<locals>.<listcomp>  sL     " " "#Aq! A!q&&Aq1u>>" " "r   c                 :    g | ]\  }}t          d ||z
            S r  r8  )r   r]  rK  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     NNNfb""r'NNNr   	ceil_mode)r  rZ   re  r   r  r5   ry  r  r  decode	TypeErrorr  rG   ceiling)rB  r   channels_lastr@   W_shaperM   r&  spatial_shapeis_symbolic_dimsr(   r+  r,  effective_kernel_shaper/  r0  residual
total_padsr>  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<<![![c,PY>Z>Z![![![T6**<3!d(#D$T:yAAHHQQH7""x8';';	^^CTEFF@SU\<]<]^^^H" "'*+A7H'U'U" " "JJ !   " "478NPW4X4X" " "JJJ W$$

S4Z

t99D((((NND$Kdee0M0MNNNJ!$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   >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                 (    g | ]}|d          k    S r  r	   r  s     r   r   z=SymbolicShapeInference._check_merged_dims.<locals>.<listcomp>  !    ///QAaL///r   Tr  )rP  ra  )rB  rs  r  s    ` r   r  z)SymbolicShapeInference._check_merged_dims  sm     	LKKtKKKD////$///00 	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}|d |         |d         gz   }	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   r$  Fr  )r  rZ   r  r  ry  re  r   r"   r1   r  ru  r   rq  )rB  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!/>/2i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         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(   r   rY   N)r&   r#   r1   r"   r   r  
ValueErrorr7   onnx_pbTensorProtoDataTypeNamer,   r  r  r(   r   TensorShapeProto	Dimensionr   r  rg  ru  )rB  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\$]$]^^ 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   r$  
r  ry  r  ru  r   rq  re  r   r"   r1   )rB  r   
data_shapeindices_shaper4   s        r   r   z3SymbolicShapeInference._infer_ArrayFeatureExtractor=  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>K      QqTAaD[ r   c                     t          | d         | d         z  t                    rt          | d         | d         z            n| d         | d         z  S rq  r   floatr=   rr  s    r   r  zDSymbolicShapeInference._infer_symbolic_compute_ops.<locals>.<lambda>L  sM    %/!!e%D%DVAaDAaDL!!!!A$RSTURV, r   c                 &    | d         | d         k    S rq  r	   rr  s    r   r  zDSymbolicShapeInference._infer_symbolic_compute_ops.<locals>.<lambda>O  s    qtqt| r   c                 6    t          j        | d                   S rK   )rG   floorrr  s    r   r  zDSymbolicShapeInference._infer_symbolic_compute_ops.<locals>.<lambda>P  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 rq  )r<   r=   r?  rG   r   rs  rB  s    r   r  zDSymbolicShapeInference._infer_symbolic_compute_ops.<locals>.<lambda>Q  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 rq  )r<   r=   r?  rG   r   r|  s    r   r  zDSymbolicShapeInference._infer_symbolic_compute_ops.<locals>.<lambda>V  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 rq  rv  rr  s    r   r  zDSymbolicShapeInference._infer_symbolic_compute_ops.<locals>.<lambda>[  sM    AaD1Q4K1O1O`S1!---UVWXUY\]^_\`U` r   c                 $    | d         | d         z
  S rq  r	   rr  s    r   r  zDSymbolicShapeInference._infer_symbolic_compute_ops.<locals>.<lambda>\  rt  r   c                 2    | d         r| d         n| d         S Nr   rY   r  r	   rr  s    r   r  zDSymbolicShapeInference._infer_symbolic_compute_ops.<locals>.<lambda>]  s    qt5qtt1 r   c                     | d          S rK   r	   rr  s    r   r  zDSymbolicShapeInference._infer_symbolic_compute_ops.<locals>.<lambda>^  s    adU r   )
rj   rw   rz   r{   r   r   r   r   r   r   )r  r  )rB  r   funcss   `  r   r   z2SymbolicShapeInference._infer_symbolic_compute_opsI  s    ((  ,+00   
   
 a`((55"?)
 
, |u$$$$##D%*=>>>>>r   c                 0    |                      |           d S r0   )r  r  s     r   r   z"SymbolicShapeInference._infer_Castc  s      &&&&&r   c           
         | j         |j        d                  j        j        j        }|t
          j        j        k    rt
          j        j        }nt
          j        j        }| j         |j	        d                  }|
                    t          j        |j	        d         ||                     |d                               d S rK   )ry  re  r   r"   r1   r7   r]  STRINGINT64r  ru  r   rq  r  )rB  r   
input_typeoutput_typer4   s        r   r   z,SymbolicShapeInference._infer_CategoryMapperf  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   ry  r  ru  r   rq  re  r   r"   r1   )rB  r   input_shapecompress_lenrL   output_shaper4   s          r   r   z&SymbolicShapeInference._infer_Compresso  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                 4    g | ]}|j         v p|j        v S r	   )r  rx  r  s     r   r   z8SymbolicShapeInference._infer_Concat.<locals>.<listcomp>  s.    UUUQT%%@d.@)@UUUr   c                     g | ]}|d uS r0   r	   r  s     r   r   z8SymbolicShapeInference._infer_Concat.<locals>.<listcomp>  s    222aATM222r   rL   r   rY   c                 t    g | ]4}                     |                               |                   5S r	   r  )r   i_idxr+   r   rB  s     r   r   z8SymbolicShapeInference._infer_Concat.<locals>.<listcomp>  sD    xxx[_[j[jkoqv[w[wxDOOD%003xxxr   c                 (    g | ]}|d          k    S r  r	   r  s     r   r   z8SymbolicShapeInference._infer_Concat.<locals>.<listcomp>  rO  r   )r  re  r  rP  r   r  r  r  rZ   r   rQ   r  r  r  rN   r  r  r   r   r:  ry  ru  r   rq  r"   r1   rA   )rB  r   r  r?   r   r@   rL   r  r  r  r4   r+   rs  s   ``         @@r   r   z$SymbolicShapeInference._infer_Concat  s   UUUU$*UUUVV 
	G22488F22622233 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////$///00 ((..FF||s""@F!P!4V!<!<DA!'A^DKN+
)Atz!}-2>H*;77 	
 	
 	
 	
 	
r   c                 :   |                      |d          }t          |d          rdnd}t          t          |d          t          |          |z             }t	          |                     |d|                    }|}|r|d |         |gz   ||d          z   }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  ry  r  ru  r   rq  re  r   r#   r1   r"   )rB  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
	 	)!%4%(J<7)DEE:J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  )rB  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                 ,    g | ]}t          |          S r	   r  r   r^   s     r   r   zASymbolicShapeInference._infer_ConstantOfShape.<locals>.<listcomp>  s#    OsOsOsbcPZ[\P]P]OsOsOsr   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  ry  r  r   rQ   r  r"   r1   r7   r]  r  rP  rD   onesrE   r   r  r   r  r"  r  ru  r   rq  rA   rB  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F3OsOsgrOsOsOsKtKt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   )rK  r  ry  r  ru  r   rq  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)rB  r   )rK  r  ry  r  ru  r   rq  re  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   )
ry  re  r   r"   r1   r  r  ru  r   rq  rB  r   rR  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   r]  UINT8rZ   re  ry  r   r"   r1   r  r  ru  r   rq  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                    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   ->r$  r      ,s   ...r%  rY   .   )OrderedDictr  ,   )r   replacefindsplitr  rZ   r  r   rG   rU  collectionsr  r  rR  ry  re  r"   r1   r  ru  r   rq  )rB  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   rR  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   ry  r  ru  r   rq  re  r   r"   r1   )rB  r   expand_to_shaper(   r  r4   s         r   r   z$SymbolicShapeInference._infer_ExpandI  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                  }|                    t          j        |j        d         | j        |j	        d                  j
        j        j        |d |         |z   ||dz   d          z                        |j	        d         | j        v rt          |          dk    rt          |dd          dk    r|                     |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   c                 :    g | ]}t          |                   S r	   r  )r   r?   datas     r   r   z8SymbolicShapeInference._infer_Gather.<locals>.<listcomp>l  s#    ;V;V;VQDQL;V;V;Vr   r$  )r  rN   r   rZ   ry  r  ru  r   rq  re  r   r"   r1   r  r  rQ   rD   r[   r(   r=   )rB  r   rm  rL   rn  r4   r  r  s          @r   r   z$SymbolicShapeInference._infer_GatherY  s   __T1--
#M$$B$BC
OOTTa00^DKN+
)Atz!}-2>H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!88sbyyyy7;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   rl  )rB  r   rn  r4   s       r   r   z,SymbolicShapeInference._infer_GatherElementss  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 rk  )r  rZ   r<   ry  r  ru  r   rq  re  r   r"   r1   )rB  r   rm  	data_rankrn  last_index_dimensionr  r4   s           r   r   z&SymbolicShapeInference._infer_GatherND~  s    __T1--

OO	a00M,R0.//U4HI4U4U4U4U!#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_   ru  r  r  r  rZ   r  ry  r   ri  r   r  )	rB  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 ]x}|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         k    rt           j                                        }t'          |                     |||                    |_        |j        j        j        j        |                             |           |	j        j        j        j        |                             |           d}z|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   zRerun Loop: (z3...), because of sequence in loop carried variables)r  r   ) r   rZ   re  r  r   ru  ry  r  r  r  r5   r&   r   r#   r1   r  r7   r`  ra  r   r  rg  r"   r(   r   r>  rV  r  r  rT  r  rQ   )rB  r   r  num_loop_carriedr?   sisi_nameneed_second_inferr  soso_shapesi_shaperg  rs  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*A*A B B 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   rY  r  s     r   r   z$SymbolicShapeInference._infer_MatMul      ""4(((((r   c                 P    |                      |t          j        j                   d S r0   )rY  r7   r]  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   r$  Fr  )r  r   rZ   r  ry  re  r   r"   r1   r  ru  r   rq  )rB  r   rS  rT  rU  r  rR  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 )Nr   r%  )
r   r  ry  r  ru  r   rq  r7   r]  r  )rB  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 rq  )r  r   r  ry  r  ru  r   rq  r   r"   r1   )rB  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                 6   |                      |d          }|                     |d          }t          |dd          }t          |t	          |          dz             }t          |d |         t          |          s|                     |          n|gz   ||d          z             }| j        |j	        d                  }|
                    t          j        |j	        d         | j        |j        d                  j        j        j        |                     d S )Nr   rY   rL   r$  r  )r  r  r   rN   rZ   rA   r<   r  ry  r  ru  r   rq  re  r   r"   r1   )rB  r   r@   depthrL   r  r4   s          r   r   z$SymbolicShapeInference._infer_OneHot  s   ++D!44##D!,,T62..#D#k*:*:Q*>??.?I%?P?P[t11$777V[\]$%% !
 
	
 ^DKN+
)Atz!}-2>H 	
 	
 	
 	
 	
r   c           	         t          | j                  dk    rt          |d          }n|                     |d          }|                     |d          }t          |          }|Yt          |          d|z  k    sJ d t          ||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>)  s4       *=!VXF
X%  r   )rV   rc  r   r  r  rZ   r  r  r"  ry  re  r   r"   r1   r  ru  r   rq  rA   )rB  r   r/  r@   rM   r  	output_tpr4   s           r   r   z!SymbolicShapeInference._infer_Pad  sc   T\""b(( v..DD&&tQ//D++D!44;t99D(((( AD[RVW\X\W\R]_cdhdidi_jAkAk  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   )rK  r  r  ry  ru  r   rq  r   r"   r1   rA   )rB  r   r@   r  r4   s        r   r   z"SymbolicShapeInference._infer_Pool7  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 rq  )r  r  ry  re  r  ru  r   rq  r   r"   r1   )rB  r   shape0r  r  t0r4   s          r   r.  z-SymbolicShapeInference._infer_aten_bitwise_orF  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  r%  )r  rZ   r  rN   r  r  rG   r   r   r  ry  ru  r   rq  re  r   r"   r1   rA   )rB  r   r@   rM   offsetr  r  r  r   valr  r  
diag_shaper4   s                 r   r/  z+SymbolicShapeInference._infer_aten_diagonalN  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|                    }|d d         |gz   }| j        |j        d                  }|                    t          j	        |j        d         t          j        j        t          |                               d S )Nr   rY   r  rY   r$  )r  rZ   r  r   r  ry  r  ru  r   rq  r7   r]  r  rA   )	rB  r   r@   rM   num_samplesrg  last_dimr  r4   s	            r   r2  z.SymbolicShapeInference._infer_aten_multinomialp  s    ++D!44;v~~~~))$22AX"-g;;3t7Y7YZ^`ace7f7f3g3g"3B3'8*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  r%  rQ  rY   )r  rZ   r  r  r  ry  r7   r]  r  re  r   r"   r1   ru  r   rq  rA   )rB  r   r@   r?   r  r4   r1   s   ``     r   r0  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   r%  r  )ry  r  rZ   re  ru  r   rq  r   r"   r1   r  r  r"  r  rN   rA   r7   r]  r  )	rB  r   r4   keepdimr   rM   r  r(   vi1s	            r   r1  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  r"  r  r  ry  ru  r   rq  re  r   r"   r1   rA   )rB  r   r@   	dimensionsizesteprM   r4   s           r   r3  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   )re  r  r  rN   rZ   r"  r  rA   r  ry  ru  r   rq  r7   r]  r  )rB  r   r  r   r  r@   rM   r4   s           r   r4  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  ry  re  r   r"   r1   r  ru  r   rq  r   r  r_   )rB  r   r  r  grouprR  r?   r4   s           r   r5  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  ry  re  r   r"   r1   ru  r   rq  )rB  r   r  r  output_sizerM   rR  r4   s   ``      r   r6  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  r%  r  rY   input_indexoutput_indexr  rZ   r  )rB  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                     g | ]}|d uS r0   r	   r>   s     r   r   z7SymbolicShapeInference._infer_Range.<locals>.<listcomp>  s    222!222r   rY   r  )ry  r  r  rP  r_   rG   r   rA  r  r  ru  r   rq  re  r   r"   r1   rA   )rB  r   r4   
input_datastartlimitdeltar  s           r   r   z#SymbolicShapeInference._infer_Range  s+   ^DKN+22488
22z22233 	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>4  s*    JJJ,QE

;;JJJr   )r   rV   rc  rZ   re  r  ry  r  ru  r   rq  r   r"   r1   rA   r"  r  r  r  r  )	rB  r   	keep_dimsaxesr4   r  r?   r+   r(   s	           @r   r   z'SymbolicShapeInference._infer_ReduceSum"  s   !$
A66	T\""b((S__q-@-@&&tQ//DA/B|    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                     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*  r$  rY   r   )r   r  rf   r  r  )rB  r   r*  r)  r  s        r   r   z(SymbolicShapeInference._infer_ReduceProdC  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   ry  re  r   r"   r1   r  ru  r   rq  )rB  r   seq_lenreal_seq_len	num_headsr  rR  r4   s           r   r&  z2SymbolicShapeInference._infer_RelativePositionBiasK  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   r$  r  )r  ry  r  r  rZ   r<   ru  r   rq  r   r"   r1   rA   r"  r  r  rG   rU  r  countr  r  )rB  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_ReshapeX  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           	      R   | j         |j        d                  }|                     |d          }t          | j                  dk    r|                     |d          }|d t          ||          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             }|                     |           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   simplifyrz  r6  s      r   r   z8SymbolicShapeInference._infer_Resize.<locals>.<listcomp>  s4    "q"q"q$!Q5>%+a!e2D2D#E#E"q"q"qr   r  r%  c                 Z    g | ](}t          j        t          j        |                    )S r	   r;  rO  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	   r;  )r   r+   r   endscales        r   r   z8SymbolicShapeInference._infer_Resize.<locals>.<listcomp>  sR     # # #,5#u N5;qC%K/@5/H#I#IJJ# # #r   )ry  r  r  rV   rc  r  r  r  ru  r   rq  re  r   r"   r1   rA   rZ   r   rQ   r"  r  )rB  r   r4   r5  scalesr  roisizesrM   	roi_startroi_ends              r   r   z$SymbolicShapeInference._infer_Resize  s   ^DKN+ 11$::T\""b((((q11F!"q"qRUVgioRpRp"q"q"q**?;;;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[a0b0b# # # **?;;;;"&":":4;O;OPTVW;X;XZ^"_"_KK-KNN4:a=16BL.??     r   c                 v    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             }|d |         |	gz   ||d          z   }|                    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_statesrB  s      r   r   z6SymbolicShapeInference._infer_Scan.<locals>.<listcomp>  sL     
 
 
2 !T%9%9$O@S%T%TUU
 
 
r   scan_output_axesr$  rY   )r   rZ   re  r  r   ru  ry  r   r"   r(   r   rS  r  r  r.   rN   r   rq  r1   )rB  r   r  rI  rJ  r  r?   r  subgraph_namescan_input_dimnum_scan_outputsrN  r  r4   r(   r  rM  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hwh>*::U788_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   rl  )rB  r   rm  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  ry  r  r  r7   r`  ra  r   r  rg  r   r"   r(   r   ru  )rB  r   r  r4   rg  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 rq  )ry  re  r  ru  r   ri  r   )rB  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  ry  ru  r   rq  r7   r]  r  )rB  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|          ||<   n5t          |          }|D ]} 	                    |d|          ||<   nt          ||||          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   r]  r   rG   r   rZ   rj   )arg_idxreplacedr^  min_poss     r   replace_min_with_argzVSymbolicShapeInference._infer_Slice.<locals>.flatten_min.<locals>.replace_min_with_arg  s    #DIH% )59  ` `_W__HU\L]__` ` ` HW-233q888bxX_O`bb 988(0(9(>w(GHW% 9h//r   )r   rG   rj   r  rZ   r]  )r^  min_positionsrc  rb  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   N)boolr*   s     r   	<genexpr>zJSymbolicShapeInference._infer_Slice.<locals>.less_equal.<locals>.<genexpr>=  s,      DDA4Q<<DDDDDDr   )rh  r@  rP  )r^   yre  s     r   
less_equalz7SymbolicShapeInference._infer_Slice.<locals>.less_equal(  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<   r?  r@  rV  rW  )rY  boundrk  rB  s     r   handle_negative_indexzBSymbolicShapeInference._infer_Slice.<locals>.handle_negative_index?  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  r%  r  r   r$  zUnable to determine if z <= z, treat as equal)$rV   rc  r   rQ   r  rZ   rb   r  r  r  rA   r  r<   r?  r   r   rG   r   	ExceptionrV  rW  r<  r  ry  r  ru  r   rq  r   r"   r1   re  r  rD   arrayr(   )rB  r   rn  r*  ro  rp  stepsr  r?   rK  er  r4   input_sympy_datare  rk  s   `             @@r   r  z#SymbolicShapeInference._infer_Slice	  sD   	 	 	.	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 "$e<< ] ]
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   L229M.-M.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   )ry  r  re  r   r"   r1   r   r(   ru  r7   r`  rZ   r  r   rq  r   )rB  r   r4   r1   specified_output_typerm  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%          |d |         ||         gz   ||dz   d          z                                  |	| j        |	j        <   d S )Nr   rL   r%  r  rY   c                 6    g | ]}t          j        |          S r	   r)  rO  s     r   r   z>SymbolicShapeInference._infer_Split_Common.<locals>.<listcomp>  s"    555!U]1%%555r   )r  rN   r   rZ   rV   rc  r  r  rG   rH   r  r  ry  ru  re  r   r"   r1   rA   r   )
rB  r   make_value_info_funcr5  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./@$/G5QT:,/VYjkorskskukuYv/vww    ')DN27##		) 		)r   c                 F    |                      |t          j                   d S r0   )r}  r   rq  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   r%  r*  rY   c                     g | ]
}|d k    |S r.  r	   rO  s     r   r   z9SymbolicShapeInference._infer_Squeeze.<locals>.<listcomp>  s    ===!a1ffAfffr   c                 B    g | ]}t          |          t          k    |S r	   )r   r=   rO  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   rc  r   r  r>  rZ   rV  r  r  r   r  r  r   r=   ry  r  ru  r   rq  re  r"   r1   r  )	rB  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#2M2M2M2M}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  r"  r  ry  r  ru  r   rq  r   r"   r1   rA   )	rB  r   repeats_valuer  r5  r?   r+   r  r4   s	            r   r	  z"SymbolicShapeInference._infer_Tile  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   r$  r  r]  rY   )r  rN   r   r  rV   rc  r  r  r_   r   r=   r   r  r  rA   r  rZ   r  ry  ru  r   rq  r"   r1   )	rB  r   rM   rL   r  r]  r  r  r4   s	            r   r
  z"SymbolicShapeInference._infer_TopK  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*  )re  r  r  r   reversedrQ   r  rZ   rD   	transposerr  reshapetupleflattentolistr  )rB  r   rm  r  r  s        r   r  z'SymbolicShapeInference._infer_Transpose<  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   r%  r*  rY   c                 0    g | ]}t          |          S r	   )rN   )r   r(  output_ranks     r   r   z;SymbolicShapeInference._infer_Unsqueeze.<locals>.<listcomp>R  s$    CCC$Q44CCCr   )r  rV   rc  r   r  rZ   r  r  ry  r  ru  r   rq  re  r   r"   r1   r  )
rB  r   r  r{  r*  
input_axisr  r?   r4   r  s
            @r   r  z'SymbolicShapeInference._infer_UnsqueezeE  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   r]  r  r  r8   r  r   FLOATr   r#   r1   map_type
value_typer"   key_typery  ru  )rB  r   map_key_typenew_vir4   s        r   r  z$SymbolicShapeInference._infer_ZipMaph  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  r%  qkv_hidden_sizesr     r  r$  +r/  )r  r  rZ   r   r=   r   ry  re  r   r"   r1   r  ru  r   rq  r   )rB  r   r(   shape_weights
shape_biastripled_hidden_sizeqkv_hidden_sizes_attrrR  r4   r  
past_shape
mask_shaper/  	head_sizepresent_shapes                  r   r  z'SymbolicShapeInference._infer_Attentionw  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 )Nr/  r  r   rY   r%  )r   r  r  rZ   ry  re  r   r"   r1   r  ru  r   rq  )rB  r   r/  token_offset_shaper  query_layer_shaperR  r4   s           r   r  z7SymbolicShapeInference._infer_GatedRelativePositionBias  s     "$44	!00q99).q19>PQR>SUghiUjkLL $a 8 8$0S9J5K5Kq5P5P5P5P-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  r%  )r  r  rZ   r   r=   r   ry  re  r   r"   r1   r  ru  r   rq  )	rB  r   r(   r  r  r  r  rR  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   r%  )r  rZ   r  ry  re  r   r"   r1   r  ru  r   rq  )rB  r   r2  r  shape_queryrR  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   r%  token_countr  rY   zbatch_size + 1r  rZ   ry  re  r   r"   r1   r  ru  r   rq  r7   r]  r  )rB  r   r(   rR  r4   vi_token_offsetvi_cumulated_seq_lenvi_max_seq_lens           r   r'  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   ry  re  r   r"   r1   r  ru  r   rq  )rB  r   shape_inputshape_token_offsetrR  r4   r  s          r   r(  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   r%  rY   r  r  r  *r/  /r  r  )r  rZ   r  ry  re  r   r"   r1   r  ru  r   rq  r   r=   r   r   )rB  r   query_shapetotal_sequence_lengthrR  	key_shaper  value_shaper4   
batch_sizer/  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  ry  re  r   r"   r1   r  ru  r   rq  rZ   r  r   )rB  r   r  r  rR  r4   r  s          r   r  z=SymbolicShapeInference._infer_DecoderMaskedMultiHeadAttentionF	  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                 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_QuickGelub	  r  r   c                 0    |                      |           d S r0   r  r  s     r   r  z*SymbolicShapeInference._infer_GemmFastGelue	  r  r   c                 0    |                      |           d S r0   r  r  s     r   r  z(SymbolicShapeInference._infer_GemmFloat8h	  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   r$  r   c                     g | ]}d S r.  r	   )r   r  s     r   r   zDSymbolicShapeInference._infer_LayerNormalization.<locals>.<listcomp>u	  s    .M.M.MQq.M.M.Mr   r  )r  rZ   r  r   r  rN   r  ry  re  r   r"   r1   r7   r]  FLOAT16BFLOAT16r  ru  r   rq  )rB  r   rL   x_shaperM   
mean_shape
mean_dtyper4   s           r   r  z0SymbolicShapeInference._infer_LayerNormalizationk	  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  )rB  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 )Nr%  r   r  r  s     r   r+  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   r%  rY   r  rP   r/  kv_num_heads)ry  re  r   r"   r1   r  r  ru  r   rq  r   r  r   r  r   r=   )
rB  r   rR  r  r4   r/  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   r,  z-SymbolicShapeInference._infer_SparseAttention	  s    ''-----r   c                     |                      |dd           t          |j                  dk    r|                      |dd           d S d S rq  r  r  s     r   r*  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=   ry  r  re  r   r"   r1   ru  r   rq  r   )rB  r   r  
bias_shaper  r4   rR  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  r%  )rZ   r  r  r  s     r   r)  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  r?  ry  r  ru  r   rq  r7   r]  r  r  rZ   re  r  r  r   r"   r1   r"  rA   )rB  r   r  r  r  r  shape_infererr4   input_shapesinput_dtypesr  r(   input_dtypeoutput_shapesoutput_dtypesr?   r  r@   rf  s                      r   r$  z&SymbolicShapeInference._infer_PythonOp	  sx   +D2GHH"cc$c$c$c$cccc+D2GHH"c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  ry  re  r   r"   r1   r  ru  r   rq  )rB  r   r  r  r(   rR  r4   s          r   r  z0SymbolicShapeInference._propagate_shape_and_type
  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  )rB  rh  s     r   _is_none_dimz#SymbolicShapeInference._is_none_dim
  s@    	??c!!5)##5+++5tr   c                 B    |D ]}|                      |          r|c S d S r0   )r  )rB  	out_shapeouts      r   _is_shape_contains_none_dimz2SymbolicShapeInference._is_shape_contains_none_dim!
  s:     	 	C  %% 


tr   c                 t    !"#$% |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 
]U"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 ]u!$!          D                    $!                   s&!$fd1|D             }tI          |          dk    r- E                    d2 t          ||          D                        vd _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d3#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                    d4"j(         d5"j         d6|j         d7            j4        dk    r=tj          6                    d)"j        |          d|d+|j
        j        j                    d _G        C j4        dk    s
 j@        r|r>tj          6                    d8"j(        "j                   tj          6                    d9           "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 
Wd _G        dS )=Nrf  T)ri  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  positiverw  c                 8   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        |v r|	                    |j                   &|S )	Nc                     h | ]}||S r	   r	   r>   s     r   r  zISymbolicShapeInference._infer_impl.<locals>.get_prereq.<locals>.<setcomp>Q
  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   )
re  r  r   rw  rQ  r   rz  r  r   rS  )	r   namesr  gg_prereqnr?   r  
get_prereqs	          @r   r  z6SymbolicShapeInference._infer_impl.<locals>.get_prereqP
  s^   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vQV,,,- Lr   r   c                     h | ]	}|j         
S r	   r
   r>   s     r   r  z5SymbolicShapeInference._infer_impl.<locals>.<setcomp>m
  s    qqqa16qqqr   c                 "    g | ]}|j         v S r	   r
   r   r  sorted_known_vis     r   r   z6SymbolicShapeInference._infer_impl.<locals>.<listcomp>n
  s     MMMa/)MMMr   c                 "    g | ]}|j         v S r	   r
   r  s     r   r   z6SymbolicShapeInference._infer_impl.<locals>.<listcomp>r
  s     XXX16_4XXXr   c                     g | ]}||v 	S r	   r	   )r   r?   r  s     r   r   z6SymbolicShapeInference._infer_impl.<locals>.<listcomp>v
  s$    \\\!Z[\o-\\\r   c                 "    g | ]}|j         v S r	   r
   r  s     r   r   z6SymbolicShapeInference._infer_impl.<locals>.<listcomp>{
  s     RRR1QV.RRRr   zInvalid model with cyclic graphc                 &    g | ]}||j         v S r	   r  r  s     r   r   z6SymbolicShapeInference._infer_impl.<locals>.<listcomp>
  s%    EEE1ET^+EEEr   F)ConvTransposeATenzorg.pytorch.atenoperatorr1  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	   rN  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   rw   r   r  r   rq   r   r  rz   LessGreaterLessOrEqualGreaterOrEqualr   r   c                 <    g | ]}                     |          S r	   r  r  s     r   r   z6SymbolicShapeInference._infer_impl.<locals>.<listcomp>
  s'    %_%_%_1doodA&>&>%_%_%_r   c                 T    g | ]$}t          |          t                    z
  z   %S r	   rN  r   rK  r  r  s     r   r   z6SymbolicShapeInference._infer_impl.<locals>.<listcomp>  s0    .].].]QRs1vvI/F/L.].].]r   ry   c                 T    g | ]$}t          |          t                    z
  z   %S r	   rN  r  s     r   r   z6SymbolicShapeInference._infer_impl.<locals>.<listcomp>  s/    *Y*Y*YQ3q66C	NN+BS+H*Y*Y*Yr   c                     g | ]=\  }}|d k    t          ||                   r||         nt          ||                   >S r  )r<   r   )r   rK  r?   s      r   r   z6SymbolicShapeInference._infer_impl.<locals>.<listcomp>  sQ     )* )* )*041/0Avv 5?qt4D4D,SAaDD#aPQd))/5vvr   r$  zPossible unknown op: z node: z, guessing z shapez0Stopping at incomplete shape inference at %s: %sznode inputs:znot in known_vi_ for znode outputs:z	Merging: )Nr  rc  rd  r  rZ  rQ  r;  re  r5   r&   r   r#   r1   r"   r(   r   r  r   r  r   rg  rz  r9  r:  rG   rU  r7   rt  r  ru  r   r  rQ   rw  r  rP  rZ   r  rq  r  r  r-  ry  r]  	UNDEFINEDrS   r   r   rK  bytesr?  r7  r>  rV  r  rx  r.   r  r  r   formatr^  r_  r  r<  rY  r  r  r  ra  r  r8  r=  r  r"  r   rq  rA   )&rB  start_sympy_datar?   r  
input_dimsi_dimr   rK  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_impl'
  s<   +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 	 	 	 	 	0 #( 	9 	9A+5:a==OAHQK(( qq40B0H+I+IDQUQ]QcQoLpLp+pqqqMMMM4<3E3LMMMNN 	G<-2LLXXXXdl>P>WXXXYY G'*<'8'8$ L.3 2 2DAo==3\\\\t{ST~7V\\\D D= (..t{;;;$++D111'3|+<+<<<SRRRR8J8QRRRF F< $$EFFF XXXXdl>P>WXXXYY G ! ]	! ]	!DEEEETZEEEFFFFF((...!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\~~`aOaBaBaBaBa+.vay>>A+=+='!*sSYZ[S\~~`aOaBaBaBaBa!\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;FG8L8L)* )* )*%& %& %& )-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   )rc  rd  r  r   ry  ru  )rB  r  s     r   r  z-SymbolicShapeInference._update_output_from_via  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   rV  rW  rh   r|  r8  r  r  r7   
save_modelrc  rq  )r{  rC  rD  rE  rF  
onnx_opsetr  all_shapes_inferreds           r   r  z#SymbolicShapeInference.infer_shapesf  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   )r1  FFr   )|__name__
__module____qualname__rH  ra  rZ  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r"  rK  r  rY  ri  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/  r2  r0  r1  r3  r4  r5  r6  r   r   r   r   r&  r   r   r   r   r   r  r  r  r  r  r}  r  r  r  r	  r
  r  r  r  r  r  r!  r"  r'  r(  r  r  r  r  r  r  r  r  r  r  r  r+  r  r#  r  r,  r*  r  r  r)  r$  r  r  r  r  r  staticmethodr  r	   r   r   rh   rh   }   s       D D D DL+* +* +* +*Z
( 
( 
( 
(
 
 
  <  27 7 7	 	 	/ / /  w w w
  D D D`' `' `'D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|   < < <4	
 	
 	

 
 
"l l l89% 9% 9%v) ) )A A A\ \ \&j j j
x x x
 
 
&
 
 
2  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. . .`! ! !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,- - -- - -- - -) ) )) ) )g g g(- - -k k k*7 7 7- - -- - -j j j8. . .7 7 7
\ \ \- - -P P P-( -( -(^c c c c    x x x xt	= = =
 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)r>  z--auto_mergez:Automatically merge symbolic dims when confliction happens
store_trueF)r>  actiondefaultz	--int_maxzGmaximum value for integer to be treated as boundless for ops like slicer1  )r>  r   rA  z--guess_output_rankz;guess output rank to be the same as input 0 for unknown opsz	--verbosezHPrints detailed logs of inference, 0: turn off, 1: warnings, 3: detailedr   z--save_as_external_dataz%Saving an ONNX model to external dataz--all_tensors_to_one_filez(Saving all the external data to one filez--external_data_locationz+The file location to save the external filez./)r>  rA  z--external_data_size_thresholdz$The size threshold for external datai   )argparseArgumentParseradd_argumentr=   
parse_args)parsers    r   parse_argumentsrG  x  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)r4  all_tensors_to_one_filelocationsize_thresholdconvert_attributezDone!r0   )1rB  loggingnumpyrD   r7   rG   r   r   r   	packagingr   parse__version__	getLoggerr8  rV  r   r    r&   r.   r2   r5   r9   rA   r<   rN   rV   r_   rb   rf   rh   rG  r]  infore  r  r  loadrC  rD  rE  rF  out_mpr4  r5  rI  external_data_locationexternal_data_size_thresholdsaver	   r   r   <module>rY     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. . .
         x+0 x+0 x+0 x+0 x+0 x+0 x+0 x+0vW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   