+
    9ix]                     h    ^ RI Ht ^ RIt^ RIHt ^ RIHt ^ RI	H
t
 ^RIHtHt R t ! R R4      tR# )    )PathN
ModelProto)attribute_to_kwargfind_by_namec                   \        4       pVP                  R V P                   4       4       VP                  R V P                   4       4       . pV P                   EF  pTpVP                   Uu. uFY  pVP
                  \        P                  P                  8X  g,   VP
                  \        P                  P                  8X  g   KW  VNK[  	  ppV'       EdX   / pVP                   EF  p/ p	VP
                  \        P                  P                  8X  d:   \        VP                  V4      w  p
pVP                  V
/p	VP                  V4       MVP
                  \        P                  P                  8X  dU   . pVP                   F3  p\        W4      w  p
pVP                  V
4       VP                  V4       K5  	  VP                  V/p	M\        V4      p	VP                  V	4       EK  	  \         P"                  ! VP$                  VP&                  VP                  3RVP                  /VB pVP                  V4       EK  	  V P)                  R4       V P                  P+                  V4       VP-                  R V P                   4       4       . pV P.                   FB  pVP                  V9   d   VP1                  VP                  4       K1  VP                  V4       KD  	  V P&                   Uu/ uF  pVP                  VbK  	  ppV F^  pV P.                  P1                  V4       VP                  V9   g   K1   V P&                  P1                  VVP                  ,          4       K`  	  VP-                  R V P&                   4       4       W3# u upi u upi   \2         d2    TP4                  ^8  d   \7        RTP                   R24        K   K  i ; i)	zClean unused initializers from graph.

Returns:
    A cleaned graph without unused initializers
    A list of tensor names, which are not produced by this graph and its subgraphes
c              3   \   "   T F"  qP                    F  q"'       g   K  Vx  K  	  K$  	  R # 5iN)input).0node
input_names   &  a/var/www/html/photoedit/myenv/lib/python3.14/site-packages/onnxruntime/quantization/onnx_model.py	<genexpr>-_clean_initializers_helper.<locals>.<genexpr>   s"     "p*$WaWaeo::Wa:*s   ,,c              3   `   "   T F$  qP                   '       g   K  VP                   x  K&  	  R # 5ir
   name)r   g_outs   & r   r   r      s     "V<%:::5::<s   ..r   r   c              3   H   "   T F  qP                    F  q"x  K  	  K  	  R # 5ir
   )output)r   r   r   s   &  r   r   r   @   s     -fZeZePVfZefs    "zWarning: invalid weight name z' found in the graph (not a graph input)c              3   8   "   T F  qP                   x  K  	  R # 5ir
   r   )r   r   s   & r   r   r   T   s     -RkUjjk   )setupdater   r   	attributetypeonnxAttributeProtoGRAPHGRAPHS_clean_initializers_helpergr   graphsappendr   onnx_helper	make_nodeop_typer   
ClearFieldextenddifference_updateinitializerremoveStopIteration
ir_versionprint)graphmodelrequesting_tensor_names	new_nodesr   new_nodeattrgraph_attrskwargsnew_attributecleaned_sub_graphsub_requesting_tensor_namescleaned_graphessubgraphunused_initializerr,   r   name_to_inputs   &&                r   r"   r"      sH    "e"""p%**"pp"""V5<<"VVI

 
&yyD//555dFYFYF`F`9` D& 	 

 ;F "99 3 3 9 99 34665A)3%)YY0A$BM+223NOYY$"5"5"<"<<&(O$(KK 7xG-7'../@A/667RS %0 &*YY$@M$6t$<Mm,+ ', #,,T\\4::t{{mY]YbYbmflmH"A D 
V	JJi ---f-ff((66#**;+;+;< %%k2 ) 5:KK@K5UZZ&KM@)  -},u""=1A1A#BC	 * ---Rekk-RR))s
Z A ! u##a'9+:J:J9KKrst (us%   1AN
N8N,N##5OOc                     a  ] tR t^Yt o V 3R lR ltR tR tR tR tR t	R t
R	 tR
 tR tR tR tR tR tR tR tV 3R lR ltR tR tR tR tR tR tR tR6R ltR6R ltR6R ltR tR  t R! t!R" t"]#R# 4       t$]#R$ 4       t%R% t&R7R& lt']#R' 4       t(R( t)R) t*]#R* 4       t+R+ t,R, t-R- t.R. t/V 3R/ lR0 lt0R1 t1R2 t2R6R3 lt3R4 t4R5t5V t6R# )8	ONNXModelc                    < V ^8  d   QhRS[ /# )   r2   r   )format__classdict__s   "r   __annotate__ONNXModel.__annotate__Z   s      j     c                    Wn         R # r
   r2   )selfr2   s   &&r   __init__ONNXModel.__init__Z   s    
rH   c                B    V P                   P                  P                  # r
   )r2   r1   r   rK   s   &r   nodesONNXModel.nodes]   s    zz$$$rH   c                B    V P                   P                  P                  # r
   )r2   r1   r,   rO   s   &r   r,   ONNXModel.initializer`   s    zz+++rH   c                    \        V4      ^ 8X  d   \        R4      hV P                  4        F  pV P                  VR4       K  	  V FC  pV P                  V4       V P                  P
                  P                  P                  V4       KE  	  R# )r   zCan add an empty list.gainN)len
ValueErrorr,   _check_initr2   r1   r%   )rK   initsinits   && r   initializer_extendONNXModel.initializer_extendc   sr    u:?566$$&DT6* 'DT"JJ((//5 rH   c                .    V P                   P                  # r
   )r2   r1   rO   s   &r   r1   ONNXModel.graphl   s    zzrH   c                .    V P                   P                  # r
   )r2   r/   rO   s   &r   r/   ONNXModel.ir_versiono   s    zz$$$rH   c                .    V P                   P                  # r
   )r2   opset_importrO   s   &r   rb   ONNXModel.opset_importr   s    zz&&&rH   c                    V P                   P                   F  pVP                  V8X  g   K  W#n         R # 	  V P                   P                  P	                  \
        P                  ! W4      .4       R # r
   )r2   rb   domainversionr*   r&   make_opsetid)rK   re   rf   opsets   &&& r   set_opset_importONNXModel.set_opset_importu   sR    ZZ,,E||v% ' -
 	

&&(@(@(Q'RSrH   c                    WP                   P                  P                  9   d2   V P                   P                  P                  P                  V4       R # R # r
   )r2   r1   r   r-   rK   r   s   &&r   remove_nodeONNXModel.remove_node}   s;    ::##(((JJ!!((. )rH   c                :    V F  pV P                  V4       K  	  R # r
   )rm   )rK   nodes_to_remover   s   && r   remove_nodesONNXModel.remove_nodes   s    #DT" $rH   c                    V P                   P                  P                  P                  V P	                  V4      .4       R # r
   )r2   r1   r   r*   _check_noderl   s   &&r   add_nodeONNXModel.add_node   s.    

$$d&6&6t&<%=>rH   c                :    V F  pV P                  V4       K  	  R # r
   )ru   )rK   nodes_to_addr   s   && r   	add_nodesONNXModel.add_nodes   s     DMM$ !rH   c                    \        VP                  V P                  P                  P                  4      fD   V P                  V4       V P                  P                  P                  P                  V.4       R # R # r
   )r   r   r2   r1   r,   rX   r*   )rK   tensors   &&r   add_initializerONNXModel.add_initializer   sW    TZZ%5%5%A%ABJV$JJ((//9 KrH   c                ~    V P                   P                  P                   F  pVP                  V8X  g   K  Vu # 	  R # r
   r2   r1   r,   r   )rK   r   r|   s   && r   get_initializerONNXModel.get_initializer   s2    jj&&22F{{d" 3 rH   c                ~    V P                   P                  P                   F  pVP                  V8X  g   K  Vu # 	  R # r
   )r2   r1   r   r   )rK   r   r   s   && r   find_graph_inputONNXModel.find_graph_input   s2    ZZ%%++EzzZ' , rH   c                ~    V P                   P                  P                   F  pVP                  V8X  g   K  Vu # 	  R # r
   )r2   r1   r   r   )rK   output_namer   s   && r   find_graph_outputONNXModel.find_graph_output   s2    jj&&--F{{k) . rH   c                    < V ^8  d   QhRS[ /# )rC   tensor_name)str)rD   rE   s   "r   rF   rG      s      3 rH   c                   V P                   P                  P                   Uu/ uF  q"P                  VP                  bK  	  ppW9   d   W1,          P
                  # V P                  V4      pV'       d   VP                  P
                  # V P                  V4      pV'       d   VP                  P
                  # R # u upi r
   )r2   r1   
value_infor   r   tensor_typer   r   )rK   r   objtensor_type_mapg_inputg_outputs   &&    r   get_tensor_typeONNXModel.get_tensor_type   s    9=9I9I9T9TU9T#88SXX-9TU)"/;;;''4<<+++))+6==,,, Vs   B<c                   V P                   P                  P                   Fx  pVP                  R 8X  g   K  VP                  ^ ,          V8X  g   K0  VP
                   F8  pVP                  R8X  g   K  \        P                  ! VP                  4      u u # 	  Kz  	  V P                  V4      pVe   \        P                  ! V4      # R# )ConstantvalueN)r2   r1   r   r(   r   r   r   onnx_numpy_helperto_arraytr   )rK   r   r   r6   r,   s   &&   r   get_constant_valueONNXModel.get_constant_value   s    JJ$$))D||z);;q>[0 $99/#4#=#=dff#EE !/ * **;7"$--k::rH   c                ~    V P                   P                  P                   Uu0 uF  qP                  kK  	  up# u upi r
   r   )rK   r,   s   & r   get_initializer_name_set"ONNXModel.get_initializer_name_set   s0    48JJ4D4D4P4PQ4P[  4PQQQs   :c                   WP                   P                  P                  9   d   V P                   P                  P                  P                  V4       V P                   P                  P                   FP  pVP
                  VP
                  8X  g   K   V P                   P                  P                  P                  V4        R # 	  R # R # r
   )r2   r1   r,   r-   r   r   )rK   r|   r   s   && r   remove_initializerONNXModel.remove_initializer   s    ZZ%%111JJ((//7))//::,JJ$$**11%8 0 2rH   c                :    V F  pV P                  V4       K  	  R # r
   )r   )rK   init_to_remover,   s   && r   remove_initializersONNXModel.remove_initializers   s    )K##K0 *rH   c                    V P                  4       p\        4       pV P                  P                  P                   F1  pVP
                  V9  g   K  VP                  VP
                  4       K3  	  V# r
   )r   r   r2   r1   r   r   add)rK   initializer_namesnon_initializer_inputsr   s   &   r   get_non_initializer_inputs$ONNXModel.get_non_initializer_inputs   sZ     99;!$ZZ%%++Ezz!22&**5::6 , &%rH   c                    / pV P                   P                  P                   FD  pVP                   F1  pV'       g   K  W19  d   V.W&   K  W,          P	                  V4       K3  	  KF  	  V# r
   )r2   r1   r   r   r%   )rK   input_name_to_nodesr   r   s   &   r   r   ONNXModel.input_name_to_nodes   s_     JJ$$))D"jj
:!<;?&+7+7>>tD ) * #"rH   c                    / pV P                   P                  P                   F$  pVP                   F  pV'       g   K  W!V&   K  	  K&  	  V# r
   )r2   r1   r   r   )rK   output_name_to_noder   r   s   &   r   r   ONNXModel.output_name_to_node   sE     JJ$$))D#{{;7;4  + * #"rH   Nc                    Vf   V P                  4       p. pVP                   F+  pWB9   g   K  W$,           F  pVP                  V4       K  	  K-  	  V# r
   )r   r   r%   )rK   r   r   childrenr   s   &&&  r   get_childrenONNXModel.get_children   sS    &"&":":"<kkF,/77DOOD) 8 " rH   c                    Vf   V P                  4       p. pVP                   F"  pWB9   g   K  VP                  W$,          4       K$  	  V# r
   )r   r   r%   )rK   r   r   parentsr   s   &&&  r   get_parentsONNXModel.get_parents   sG    &"&":":"<ZZE+29:   rH   c                    Vf   V P                  4       p\        VP                  4      V8:  d   R # VP                  V,          pWC9  d   R # W4,          # r
   )r   rV   r   )rK   r   idxr   r   s   &&&& r   
get_parentONNXModel.get_parent  sI    &"&":":"<tzz?c!

3+"))rH   c                h    \        VP                  4      pVP                  V4       \        W4      pV# )zFind out if a node exists in a graph or a node is in the
new set of nodes created during quantization.

Returns:
    The node found or None.
)listr   r*   r   )rK   	node_namenew_nodes_listr1   graph_nodes_listr   s   &&&&  r   find_node_by_nameONNXModel.find_node_by_name  s0      

+/I8rH   c                D   RpV P                   P                  P                   Fg  pVP                  '       g   K  VP                  P	                  V4      '       g   K:   \        VP                  \        V4      R 4      p\        WB4      pKi  	  V#   \         d     K{  i ; i)z
Gets the largest node name (int) suffix for all node names that begin with `node_name_prefix`.
Example: for nodes my_prefix_0 and my_prefix_3, this method returns 3.
N)	r2   r1   r   r   
startswithintrV   maxrW   )rK   node_name_prefixsuffixr   indexs   &&   r   get_largest_node_name_suffix&ONNXModel.get_largest_node_name_suffix  s    
 JJ$$))DyyyTYY112BCC		#.>*?*A BCE /F	 *  " s   ,BBBc                   RpV P                   P                  P                   FS  pVP                  P	                  V4      '       g   K&   \        VP                  \        V4      R 4      p\        WB4      pKU  	  V#   \         d     Kg  i ; i)a:  
Gets the largest initializer name integer suffix for all initializer names that begin
with `initializer_name_prefix`. This can be used to create unique initializer names.

Example: for initializer names 'my_weight_0' and 'my_weight_3', this method returns 3 if
         `initializer_name_prefix` is 'my_weight_'.
Nr   )	r2   r1   r,   r   r   r   rV   r   rW   )rK   initializer_name_prefixr   r,   r   s   &&   r   #get_largest_initializer_name_suffix-ONNXModel.get_largest_initializer_name_suffix+  s     ::++77K**+BCC 0 05L1M1O PQE /F	 8  " s   
,A<<B
Bc                    . pVP                    F9  pVP                   F&  pWRP                  8X  g   K  VP                  V4       K(  	  K;  	  V# )z4
Find all nodes with given initializer as an input.
)r   r   r   r%   )rK   r1   r,   rP   r   
node_inputs   &&&   r   find_nodes_by_initializer#ONNXModel.find_nodes_by_initializer?  sD     JJD"jj
!1!11LL& )  rH   c                    \        \        V4      ^,
          RR4       F6  pW,          pVP                   F  pVP                  V 8X  g   K  WC3u u # 	  K8  	  R# )   r   )NN)rangerV   r,   r   )r   
graph_pathgidr1   r|   s   &&   r   __get_initializerONNXModel.__get_initializerJ  sQ    Z1,b"5COE++;;$&!=( , 6
 rH   c           	     8   . pV R,          pVP                    EF<  pVP                   Uu. uF(  qDP                  ^8X  g   VP                  ^
8X  g   K&  VNK*  	  ppV'       Ed.   / pVP                   F  pVP                  ^8X  d>   V P                  VP                  4       VP
                  \        P                  V 4      /pMvVP                  ^
8X  d[   . pVP                   F9  p	V P                  V	4       VP                  \        P                  V 4      .4       K;  	  VP
                  V/pM\        V4      pVP                  V4       K  	  \        P                  ! VP                  VP                  VP                   3RVP
                  /VB pVP                  R8X  Ed   Rp
Rp^ p^ pVP                   F  pVP
                  R8X  d   \        P"                  ! V4      p
K,  VP
                  R8X  d   \        P"                  ! V4      pKU  VP
                  R8X  d   \        P"                  ! V4      pK~  VP
                  R8X  g   K  \        P"                  ! V4      pK  	  V
R8X  Ed   VR8X  Ed   V^ 8X  Ed   VP                  ^,          pV^8X  Ed_   \        P%                  VP                  ^,          V 4      w  ppV'       d   \&        P(                  ! V4      p\&        P*                  ! VP,                  4      pVP
                  Vn        VP.                  P1                  V4       VP                   F1  pVP
                  V8X  g   K  VP                  P1                  V4        M	  VP.                  P                  V.4       MlVR,          p\        P                  ! R	VP                  ^,          .V.VP
                  '       d   VP
                  R
,           MRR7      pVP                  V4       \        P                  ! RVP                  ^ ,          V.VP                   ^ ,          \3        VP                  4      ^8  d   RMR,           .VP
                  '       d   VP
                  R,           MRR7      pVP                  V4       \3        VP                  4      ^8  d   \        P                  ! RVP                   ^ ,          R,           VP                  ^,          .VP                   VP
                  '       d   VP
                  R,           MRR7      pVP                  V4       EK  EK  VP                  V4       EK+  VP                  V4       EK?  	  VP5                  R4       VP                   P                  V4       V P7                  4        V# u upi )r   r   Gemmg      ?alphabetatransAtransB_Transposed	Transpose
_Transpose )inputsoutputsr   MatMul_MatMulAdd_Addr   r   )r   r   r   r%   r#   r   rA   $_ONNXModel__replace_gemm_with_matmulr$   r*   r   r   r&   r'   r(   r   r   get_attribute_value_ONNXModel__get_initializerr   r   
from_arrayTr,   r-   rV   r)   pop)r   r4   r1   r   r6   r7   r8   kvr   r=   r   r   r   r   inputBBBs_graphB_arrayB_transr   transpose_nodematmul_noderu   s   &                      r   __replace_gemm_with_matmul$ONNXModel.__replace_gemm_with_matmulS  sH   	2JJD,0NN`NDii1nPTPYPY]_P_44NK`{ NNDyyA~"))$&&1"ii)M)Mj)YZb "(,H&--h7!LL)*N*Nz*Z)[\ )4 #ii//5MM"% + #,,LL$**dkk@D		MS ||v% NNDyyG+ + ? ? Ef,*>>tDh.!,!@!@!Fh.!,!@!@!F + C<DCKFaK!ZZ]F{&/&A&A$**Q-Q[&\8&7&@&@&CG&7&B&B799&MG+,66GL$0077:)1#(::#7$,NN$9$9%$@$) *8 %0077	B"m3F-8-B-B +(,

1)/AETYY%=PR	.N &,,^<"-"7"7  $

1v6!%QDJJRS@S9Y[!\ ]6:iiiTYY2R	#K $$[14::*#.#8#8!$(KKNY$>

1#N$(KK7;yyyV!3b	$ "((2 + $$T*   &g j 	 

)$o as   #VVc                R    V P                  4       .p\        P                  V4       R # r
   )r1   rA   r   )rK   r   s   & r   replace_gemm_with_matmul"ONNXModel.replace_gemm_with_matmul  s    jjl^
,,Z8rH   c                x   V P                  4        V'       dH   \        P                  P                  V P                  R\        V4      P                  R,           RR7       V P                  P                  P                   F  pV P                  VR4       K  	  \        P                  ! V P                  V4       R# )zC
Save model to external data, which is needed for model size > 2GB
Tz.data)all_tensors_to_one_filelocationconvert_attributeendN)topological_sortr   external_data_helperconvert_model_to_external_datar2   r   r   r1   r,   rX   
save_model)rK   output_pathuse_external_data_formatrZ   s   &&& r   save_model_to_fileONNXModel.save_model_to_file  s     	#%%DD

(,k*//'9"&	 E  JJ$$00DT5) 1

K0rH   c                    \        V\        4      '       d   \        V\        4      '       g   Q h\        \        V P                  4      4       F+  pV P                  V,          V8X  g   K  W P                  V&   K-  	  R # r
   )
isinstancer   r   rV   r   )r   old_input_namenew_input_namejs   &&& r   replace_node_inputONNXModel.replace_node_input  sS    .#..:nc3R3RRRs4::'Azz!}. .

1 (rH   c                    V P                   P                  P                   F  p\        P	                  W1V4       K  	  R # r
   )r2   r1   r   rA   r  )rK   r  r  r   s   &&& r   replace_input_of_all_nodes$ONNXModel.replace_input_of_all_nodes  s,    JJ$$))D((~N *rH   c                    V P                   P                  P                   F,  pVP                  V9   g   K  \        P                  WAV4       K.  	  R # r
   )r2   r1   r   r   rA   r  )rK   r  r  node_names_setr   s   &&&& r   replace_input_of_nodes ONNXModel.replace_input_of_nodes  s8    JJ$$))DyyN*,,T>R *rH   c                    \        V\        4      '       d   \        V\        4      '       g   Q h\        \        V P                  4      4       F+  pV P                  V,          V8X  g   K  W P                  V&   K-  	  R # r
   )r  r   r   rV   r   )r   old_output_namenew_output_namer  s   &&& r   replace_node_outputONNXModel.replace_node_output  sU    /3//JPS4T4TTTs4;;'(A{{1~0!0A )rH   c                    V P                   P                  P                   F  p\        P	                  W1V4       K  	  R # r
   )r2   r1   r   rA   r!  )rK   r  r   r   s   &&& r   replace_output_of_all_nodes%ONNXModel.replace_output_of_all_nodes  s,    JJ$$))D))$Q *rH   c                    V P                   P                  P                   F,  pVP                  V9   g   K  \        P                  WAV4       K.  	  R # r
   )r2   r1   r   r   rA   r!  )rK   r  r   r  r   s   &&&& r   replace_output_of_nodes!ONNXModel.replace_output_of_nodes  s8    JJ$$))DyyN*--d_U *rH   c                   V P                  4       p. pV P                  4       pV Fk  pVP                  R 8X  g   K  V P                  VP                  ^ ,          4      '       d   K@  VP                  ^ ,          V9  g   KZ  VP                  V4       Km  	  V P                  V4       . pV P                  4        F  pVP                  V9  g   K  V P                  VP                  4      '       d   K9  VP                  V4       V P                  4       P                   FI  pVP                  VP                  8X  g   K   V P                  4       P                  P                  V4       KK  	  K  	  V P                  V4       R# )r   N)r   rP   r(   is_graph_outputr   r%   rq   r,   r   r1   r   r-   r   )rK   r   unused_nodesrP   r   ununsed_weightswgraph_inputs   &       r   remove_unused_constant ONNXModel.remove_unused_constant  s   "668 

D
*,,T[[^<<KKN*==##D)  	,'!!#Avv009M9Maff9U9U&&q)#'::<#5#5K"''1661

**11+> $6	 $ 	  1rH   c                   a \         ;QJ d=    V3R  lV P                  P                  P                   4       F  '       g   K   R# 	  R# ! V3R  lV P                  P                  P                   4       4      # )c              3   @   <"   T F  qP                   S8H  x  K  	  R # 5ir
   r   )r   r   r   s   & r   r   ,ONNXModel.is_graph_output.<locals>.<genexpr>  s     T<S&;;+-<S   TF)anyr2   r1   r   )rK   r   s   &fr   r*  ONNXModel.is_graph_output   sL    sTDJJ<L<L<S<STssTsTsTDJJ<L<L<S<STTTrH   c                &   < V ^8  d   QhRS[ RS[/# )rC   r   return)r   bool)rD   rE   s   "r   rF   rG     s     R R# R$ RrH   c                   a \         ;QJ d=    V3R  lV P                  P                  P                   4       F  '       g   K   R# 	  R# ! V3R  lV P                  P                  P                   4       4      # )c              3   @   <"   T F  qP                   S8H  x  K  	  R # 5ir
   r   )r   r   r   s   & r   r   +ONNXModel.is_graph_input.<locals>.<genexpr>  s     Q:P::,:Pr4  TF)r5  r2   r1   r   )rK   r   s   &fr   is_graph_inputONNXModel.is_graph_input  sL    sQ$**:J:J:P:PQssQsQsQ$**:J:J:P:PQQQrH   c                   ^ .\        V P                  4       4      ,          p/ p. p\        V P                  4       4       F  w  rE\        R VP                   4       4      W&   W,          ^ 8X  d)   VP                  V P                  4       V,          4       KX  VP                   F1  pV'       g   K  Wb9  d   V.W&&   K  W&,          P                  V4       K3  	  K  	  V P                  4        Uu. uF  qwP                  NK  	  ppV P                  P                  P                   U	u. uF  qP                  NK  	  p
p	W,           pVP                  4        RpV Fj  pW8X  d   K  TpWb9   g   K  W&,           FI  pW,          ^,
          W&   W,          ^ 8X  g   K#  VP                  V P                  4       V,          4       KK  	  Kl  	  ^ p\        V4      pW8  d   W=,          P                   Fi  pW9   g   K  W/,           FR  pW,          ^,
          W&   W,          ^ 8X  g   K#  VP                  V P                  4       V,          4       V^,           pKT  	  Kk  	  V^,           pK  V\        V P                  4       P                  4      8X  g   Q R4       hV P                  4       P                  R4       V P                  4       P                  P                  V4       R# u upi u up	i )r   c              3   8   "   T F  q'       g   K  ^x  K  	  R# 5i)r   N )r   _s   & r   r   -ONNXModel.topological_sort.<locals>.<genexpr>  s     &B*Qqq*s   	
NzGraph is not a DAGr   )rV   rP   	enumeratesumr   r%   r,   r   r2   r1   sortr   r   r)   r*   )rK   
deps_countdeps_to_nodessorted_nodesnode_idxr   r   rZ   r   r   graph_input_namesinput_namesprev_input_namestartr  r   s   &               r   r  ONNXModel.topological_sort  sX   S3tzz|,,
'

5NH#&&B$**&B#BJ #q(##DJJL$:;"jj
!219
M-!-44X> ) 6 483C3C3EF3E4YY3EF59ZZ5E5E5K5KL5KEZZ5KL';%J,(O* - 9 9H+5+?!+CJ(!+q0$++DJJL,BC !: & ,k&-44*$1$9$9/9/Ca/G
,%/14(//

X0FG"%'C	 %: 5 AIEc$**,++,,B.BB,

'

  .? GLs   .K&K!c                J    \        V P                  4       V P                  4      # r
   )r"   r1   r2   rO   s   &r   clean_initializersONNXModel.clean_initializers<  s    )$**,

CCrH   c                X   VP                   \        P                  P                  8X  d   VP	                  R 4      '       dj   \        VP                  4      p\        ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      '       d   \        RVP                  : R24      hV# )raw_datac              3   8   "   T F  q^,          ^8H  x  K  	  R# 5i)   NrA  )r   is   & r   r   (ONNXModel._check_init.<locals>.<genexpr>C  s     3ACC'r   TFzInitializer z	 has nan.)
	data_typer   TensorProtoFLOAT8E4M3FNHasFieldr   rT  r5  rW   r   )rK   rZ   testbs   &&& r   rX   ONNXModel._check_init?  su    >>T--:::}}Z(('3333333333$|DII=	%JKKrH   c                |   VP                   R8X  d   VP                  ^,          pV P                  V4      pVP                  pV\        P
                  P                  \        P
                  P                  \        P
                  P                  \        P
                  P                  09   d   \        RV R24      hV# )z
A quantization to float 8 does not use quantized bias but float 16 bias.
This function checks that DequantizeLinear is not used to
dequantize from float 16.
DequantizeLinearz;Unsupported DequantizeLinear operator, dequantization from .)r(   r   r   rY  r   rZ  FLOAT16FLOATDOUBLEBFLOAT16RuntimeError)rK   r   
zero_pointrZ   dtypes   &&   r   rt   ONNXModel._check_nodeG  s     <<--AJ''
3DNNE  ((  &&  ''  ))	  #%`af`ggh#ijjrH   rJ   r
   )F)7__name__
__module____qualname____firstlineno__rL   rP   r,   r[   r1   r/   rb   ri   rm   rq   ru   ry   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   staticmethodr   r   r  r  r  r  r  r!  r$  r'  r/  r*  r=  r  rQ  rX   rt   __static_attributes____classdictcell__)rE   s   @r   rA   rA   Y   sS     %,6 %'T/#? :
  R1&	##	*
"(	   [ [z91  / /OS
 1 1RV
26UR R
2/hD rH   rA   )pathlibr   r   onnx.helperhelperr&   onnx.numpy_helpernumpy_helperr   onnx.onnx_pbr   quant_utilsr   r   r"   rA   rA  rH   r   <module>ry     s,   
   ! - # 9G*T rH   