+
    G-jx]  ã                   ó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       MˆVP
                  \        P                  P                  8X  dU   . pVP                   F3  p\        WÑ4      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)	z´Clean 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   &  Út/Volumes/fast/ai/experiments/nudenet-smoke/.venv/lib/python3.14/site-packages/onnxruntime/quantization/onnx_model.pyÚ	<genexpr>Ú-_clean_initializers_helper.<locals>.<genexpr>   s"   é € Ð"p¹*°$×WaÔWaÈÓ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Á¸×ZeÔZeÐPV¬fÑZe©fÃù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   é € Ð-RÁk¸U¯j®jÃkùó   ‚)Ú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Ø×"Ñ"Ñ"V¸5¿<º<Ó"VÔVà€IØ—
•
ˆØˆð Ÿšó
á&�Ø�y‰yœD×/Ñ/×5Ñ5Ô5¸¿¹Äd×FYÑFY×F`ÑF`Ñ9`÷ ˆDÙ&ð 	ð 
÷
 ˆ;ØˆFØŸ��Ø "�Ø—9‘9¤× 3Ñ 3× 9Ñ 9Ô9ô 3°4·6±6¸5ÓAñØ)Ø3à%)§Y¡YÐ0AÐ$B�MØ+×2Ñ2Ð3NÕOØ—Y‘Y¤$×"5Ñ"5×"<Ñ"<Ô<Ø&(�OØ$(§K¤K˜ô 7°xÓGñØ-Ø7à'×.Ñ.Ð/@ÔAØ/×6Ñ6Ð7RÖSñ %0ð &*§Y¡Y°Ð$@‘Mä$6°tÓ$<�MØ—‘˜m×,ñ+ 'ô, #×,Ò,¨T¯\©\¸4¿:¹:ÀtÇ{Á{ÑmÐY]×YbÑYbÐmÐflÑmˆHØ×Ñ˜×"ñA ðD 
×Ñ�VÔØ	‡J�J×Ñ�iÔ à×-Ñ-Ñ-fÀÇÂÓ-fÔfàÐØ×(Ô(ˆØ×ÑÐ6Ô6Ø#×*Ñ*¨;×+;Ñ+;Ö<ð ×%Ñ% kÖ2ñ )ð 5:·K²KÓ@±K¨5�U—Z‘Z Ò&±K€MÐ@Û)ˆØ×Ñ× Ñ  Ô-Ø×Ñ˜}Ö,ðuØ—‘×"Ñ" =°×1AÑ1AÕ#BÖCñ	 *ð ×-Ñ-Ñ-RÀeÇkÂkÓ-RÔRàÐ)Ð)ùòs
ùòZ Aøô !ô uØ×#Ñ# aÔ'ÜÐ9¸+×:JÑ:JÐ9KÐKrÐ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   € Ø�z‰z×Ñ×$Ñ$Ð$rH   c                óB   € V P                   P                  P                  # r
   )r2   r1   r,   rO   s   &r   r,   ÚONNXModel.initializer`   s   € Ø�z‰z×Ñ×+Ñ+Ð+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Ø×Ñ˜T 6Ö*ñ 'ãˆDØ×Ñ˜TÔ"Ø�J‰J×Ñ×(Ñ(×/Ñ/°Ö5ó rH   c                ó.   € V P                   P                  # r
   )r2   r1   rO   s   &r   r1   ÚONNXModel.graphl   s   € Ø�z‰z×ÑÐrH   c                ó.   € V P                   P                  # r
   )r2   r/   rO   s   &r   r/   ÚONNXModel.ir_versiono   s   € Ø�z‰z×$Ñ$Ð$rH   c                ó.   € V P                   P                  # r
   )r2   Úopset_importrO   s   &r   rb   ÚONNXModel.opset_importr   s   € Ø�z‰z×&Ñ&Ð&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   € Ø—Z‘Z×,Ô,ˆ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;   € Ø—:‘:×#Ñ#×(Ñ(Ô(Ø�J‰J×Ñ×!Ñ!×(Ñ(¨Ö.ñ )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Ñ&6°tÓ&<Ð%=Ö>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Ø�M‰M˜$Öó !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   € Ü˜Ÿ™ T§Z¡Z×%5Ñ%5×%AÑ%AÓBÒJØ×Ñ˜VÔ$Ø�J‰J×Ñ×(Ñ(×/Ñ/°°Ö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   € Ø—j‘j×&Ñ&×2Ô2ˆFØ�{‰{˜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   € Ø—Z‘Z×%Ñ%×+Ô+ˆEØ�z‰z˜ZÖ'Ø’ñ ,ñ 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   € Ø—j‘j×&Ñ&×-Ô-ˆ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=¿¹×9IÑ9I×9TÒ9TÓUÑ9T°#Ÿ8™8 S§X¡XÒ-Ñ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“   € Ø—J‘J×$Ñ$×)Ô)ˆDØ�|‰|˜zÖ)Ø—;‘;˜q•> [Ö0Ø $§¤˜ØŸ9™9¨Ö/Ü#4×#=Ò#=¸d¿f¹fÓ#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   € Ø48·J±J×4DÑ4D×4PÒ4PÓQÑ4P [× Ô Ñ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†   € Ø—Z‘Z×%Ñ%×1Ñ1Ô1Ø�J‰J×Ñ×(Ñ(×/Ñ/°Ô7ØŸ™×)Ñ)×/Ô/�Ø—:‘: §¡Ö,Ø—J‘J×$Ñ$×*Ñ*×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Ó;ÐÜ!$£ÐØ—Z‘Z×%Ñ%×+Ô+ˆEØ�z‰zÐ!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_   € Ø ÐØ—J‘J×$Ñ$×)Ô)ˆDØ"Ÿjœj�
ß‘:Ø!Ô<Ø;?¸&Ð+Ó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   € Ø ÐØ—J‘J×$Ñ$×)Ô)ˆ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   € ØÒ&Ø"&×":Ñ":Ó"<ÐàˆØ—k”kˆFØÖ,Ø/×7Ð7�DØ—O‘O DÖ)ó 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   € ØÒ&Ø"&×":Ñ":Ó"<ÐàˆØ—Z”ZˆEØÖ+Ø—‘Ð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   € ØÒ&Ø"&×":Ñ":Ó"<Ðäˆt�z‰z‹?˜cÔ!Ùà—
‘
˜3•ˆØÔ+Ùà"Õ)Ð)rH   c                óh   € \        VP                  4      pVP                  V4       \        W4      pV# )z�Find 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‡   € ð
 ˆà—J‘J×$Ñ$×)Ô)ˆDØ�y�yŠy˜TŸY™Y×1Ñ1Ð2B×CÔCðÜ §	¡	¬#Ð.>Ó*?Ð*AÐ BÓC�EÜ  Ó/’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Ô7ˆKØ×Ñ×*Ñ*Ð+B×CÔCðÜ × 0Ñ 0´Ð5LÓ1MÐ1OÐ PÓQ�EÜ  Ó/’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   € ð ˆØ—J”JˆDØ"Ÿjœj�
Ø×!1Ñ!1Ö1Ø—L‘L Ö&ó )ñ ð ˆ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°"Ö5ˆCØ•OˆEØ×+Ô+�Ø—;‘; $Ö&Ø!˜=Ô(ó ,ñ 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•ˆØ—J•JˆDØ,0¯NªNÓ`©N D¿i¹iÈ1¼nÐPT×PYÑPYÐ]_ÑP_Ÿ4˜4©NˆKÐ`ßˆ{Ø�Ø ŸNœN�DØ—y‘y A”~Ø"×)Ñ)¨$¯&©&Ô1Ø"Ÿi™i¬×)MÑ)MÈjÓ)YÐZ™ØŸ™ bœØ "˜Ø(,¯¬˜HØ&×-Ñ-¨hÔ7Ø!ŸL™L¬)×*NÑ*NÈzÓ*ZÐ)[Ö\ñ )4ð #Ÿi™i¨Ð/™ä/°Ó5˜Ø—M‘M "Ö%ñ +ô #×,Ò,Ø—L‘L $§*¡*¨d¯k©kñØ@DÇ	Á	ðØMSñ�ð �|‰|˜vÕ%Ø�Ø�Ø�Ø�Ø ŸNœN�DØ—y‘y GÔ+Ü +× ?Ò ?ÀÓ EšØŸ™ fÔ,Ü*×>Ò>¸tÓDšØŸ™ hÔ.Ü!,×!@Ò!@ÀÓ!FšØŸ™ hÖ.Ü!,×!@Ò!@ÀÓ!Fšñ +ð ˜C•< D¨C¥K°F¸aµKØ!ŸZ™Z¨�]�FØ •{Ü&/×&AÑ&AÀ$Ç*Á*ÈQÅ-ÐQ[Ó&\™˜˜8ßä&7×&@Ò&@ÀÓ&C˜GÜ&7×&BÒ&BÀ7Ç9Á9Ó&M˜GØ+,¯6©6˜GœLØ$×0Ñ0×7Ñ7¸Ô:Ø)1¯¬ Ø#(§:¡:°Ö#7Ø$,§N¡N×$9Ñ$9¸%Ô$@Ù$)ñ *8ð %×0Ñ0×7Ñ7¸¸	ÕBà" mÕ3˜FÜ-8×-BÒ-BØ +Ø(,¯
©
°1­ Ø)/¨ØAEÇÇÀ T§Y¡Y°Ö%=ÐPRô	.˜Nð &×,Ñ,¨^Ô<ä"-×"7Ò"7Ø Ø $§
¡
¨1¥¨vÐ6Ø!%§¡¨Q¥ÄÀDÇJÁJÃÐRSÔ@S±9ÐY[Õ!\Ð ]Ø6:·i·i°i˜TŸY™Y¨Ö2ÀRô	#�Kð ×$Ñ$ [Ô1ä˜4Ÿ:™:“¨Ô*Ü#.×#8Ò#8Ø!Ø$(§K¡K°¥N°YÕ$>ÀÇ
Á
È1ÅÐ#NØ$(§K¡KØ7;·y·y°y §¡¨VÖ!3Àbô	$˜ð "×(Ñ(¨×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   € Ø—j‘j“l�^ˆ
Ü×,Ñ,¨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ô ð —J‘J×$Ñ$×0Ô0ˆDØ×Ñ˜T 5Ö)ñ 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   € ä˜.¬#×.Ò.´:¸nÌc×3RÒ3RÐRÐRÜ”s˜4Ÿ:™:“Ö'ˆAØ�z‰z˜!�} Ö.Ø .—
‘
˜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,   € Ø—J‘J×$Ñ$×)Ô)ˆ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   € Ø—J‘J×$Ñ$×)Ô)ˆDØ�y‰y˜NÖ*Ü×,Ñ,¨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¸ÔPS×4TÒ4TÐTÐTÜ”s˜4Ÿ;™;Ó'Ö(ˆ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,   € Ø—J‘J×$Ñ$×)Ô)ˆ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   € Ø—J‘J×$Ñ$×)Ô)ˆDØ�y‰y˜NÖ*Ü×-Ñ-¨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¯[©[¸­^×<Ô<Ø—K‘K •NÐ*=Ö=à×#Ñ# DÖ)ñ ð 	×Ñ˜,Ô'àˆØ×!Ñ!Ö#ˆAØ�v‰vÐ0Ö0¸×9MÑ9MÈaÏfÉf×9UÔ9UØ×&Ñ& qÔ)à#'§:¡:£<×#5Ô#5�KØ"×'Ñ'¨1¯6©6Ö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ÔT¸D¿J¹J×<LÑ<L×<SÒ<SÓT�sŒsÐTŠsÐTˆsÔT¸D¿J¹J×<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°—:‘: Ö,Ó:Pùr4  TF)r5  r2   r1   r   )rK   r‹   s   &fr   Úis_graph_inputÚONNXModel.is_graph_input  sL   ø€ ß‹sÔQ¸$¿*¹*×:JÑ:J×:PÒ:PÓQ�sŒsÐQŠsÐQˆsÔ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  q™P                  NK  	  p
p	WŠ,           pVP                  4        RpV Fj  pWÆ8X  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WÞ8  d‹   W=,          P                   Fi  pWò9   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Ã§q¢q³*ù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  € Ø�Sœ3˜tŸz™z›|Ó,Õ,ˆ
ØˆØˆÜ'¨¯
©
«Ö5‰NˆHä#&Ñ&B°$·*²*Ó&BÓ#BˆJÑ ØÕ# qÔ(Ø×#Ñ# D§J¡J£L°Õ$:Ô;Ùà"Ÿjœj�
ß!ÙØÔ2Ø19°
�MÓ-à!Õ-×4Ñ4°XÖ>ó )ñ 6ð 48×3CÑ3CÔ3EÓFÑ3E¨4ŸYœYÑ3EÐÐFØ59·Z±Z×5EÑ5E×5KÒ5KÓLÑ5K¨EŸZœZÑ5KÐÐLØ'Õ;ˆØ×ÑÔØˆÛ%ˆJØÔ,Ùà(ˆOØÖ*Ø -× 9Ð 9�HØ+5Õ+?À!Õ+C�JÑ(Ø!Õ+¨qÖ0Ø$×+Ñ+¨D¯J©J«L¸Õ,BÖCó !:ñ &ð ˆÜ�,ÓˆàŒkØ&Õ-×4Ô4�ØÖ*Ø$1×$9Ð$9˜Ø/9Õ/CÀaÕ/G˜
Ñ,Ø%Õ/°1Ö4Ø(×/Ñ/°·
±
³¸XÕ0FÔGØ"%¨¥'šCó	 %:ñ 5ð ˜A•IŠEà”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±¨A˜C� 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±Ó3—3—3’3Ñ3±Ó3×3Ò3Ü$ |°D·I±I±=À	Ð%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Ø×'Ñ'¨
Ó3ˆDØ—N‘NˆEØÜ× Ñ ×(Ñ(Ü× Ñ ×&Ñ&Ü× Ñ ×'Ñ'Ü× Ñ ×)Ñ)ð	ô ô #Ð%`ÐafÐ`gÐghÐ#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ò
2ò6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   