
     NgC                         d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
 d dlZe	eef         ZdZd Zdej        fdZddej        de
e         fd
Z G d d          Zd Zd Zedk    r e             dS dS )    N)OrderedDict)pprint)AnyDictListtuning_resultsc                 X    t          |           D ]\  }}|j        t          k    r|c S dS )N)	enumeratekey_TUNING_RESULTS_KEY)metadata_propsidxprops      \/var/www/html/ai-engine/env/lib/python3.11/site-packages/onnxruntime/tools/offline_tuning.py_find_tuning_results_in_propsr      s>    ~..  	T8***JJJ +2    modelc                     t          | j                  }|dk     rd S | j        |         }t          j        |j                  S )Nr   )r   r   jsonloadsvalue)r   r   tuning_results_props      r   extractr      sB    
'(<
=
=C
Qwwt.s3:)/000r   Fc                    t          | j                  }|s|dk    s
J d            |dk    r| j                            |           | j                                        }t          |_        t          j        |          |_        | S )Nr   z<the supplied onnx file already have tuning results embedded!)	r   r   popaddr   r   r   dumpsr   )r   r   	overwriter   entrys        r   embedr!   #   s|    
'(<
=
=C`q"`
axx  %%% $$&&E#EI*^,,EKLr   c                   X    e Zd Z G d d          Zd Zdee         fdZd ZdefdZ	d	S )
Mergerc                   :    e Zd Zdedeeef         fdZd Zd ZdS )Merger.EpAndValidatorsep
validatorsc                     || _         t          j        |          | _        |t	          t          |                                                    f| _        d S N)r&   copydeepcopyr'   tuplesorteditemsr   )selfr&   r'   s      r   __init__zMerger.EpAndValidators.__init__2   sF    DG"mJ77DOE&)9)9););"<"<==>DHHHr   c                 *    t          | j                  S r)   )hashr   r/   s    r   __hash__zMerger.EpAndValidators.__hash__7   s    >>!r   c                 B    | j         |j         k    o| j        |j        k    S r)   )r&   r   )r/   others     r   __eq__zMerger.EpAndValidators.__eq__:   s    7eh&@48uy+@@r   N)__name__
__module____qualname__strr   r0   r4   r7    r   r   EpAndValidatorsr%   1   sa        	?s 	?S#X 	? 	? 	? 	?
	" 	" 	"	A 	A 	A 	A 	Ar   r=   c                 ,    t                      | _        d S r)   )r   ev_to_resultsr3   s    r   r0   zMerger.__init__=   s    (]]r   r   c                 :    |D ]}|                      |           d S r)   )
_merge_one)r/   r   trss      r   mergezMerger.merge@   s0    ! 	! 	!COOC    	! 	!r   c                    g }| j                                         D ]d\  }}i }|j        |j        |d}|                                D ]#\  \  }}}|                    |i           }	||	|<   $|                    |           e|S )N)r&   r'   results)r?   r.   r&   r'   
setdefaultappend)
r/   r   evflat_resultsrE   rB   op_sig
params_sig	kernel_id
kernel_maps
             r   
get_mergedzMerger.get_mergedD   s     $ 2 8 8 : : 
	' 
	'BGe m" C
 4@3E3E3G3G 3 3/$i$//;;
)2
:&&!!#&&&&r   rB   c                    t                               |d         |d                   }| j                            |i           }|d                                         D ],\  }}|                                D ]\  }}||f|vr||||f<   -d S )Nr&   r'   rE   )r#   r=   r?   rF   r.   )r/   rB   rH   rI   rJ   rM   rK   rL   s           r   rA   zMerger._merge_oneS   s    ##CIs</@AA)44R<<"%i."6"6"8"8 	C 	CFJ)3)9)9);); C C%
IJ'|;;9BL&*!56C	C 	Cr   N)
r8   r9   r:   r=   r0   r   TuningResultsrC   rN   rA   r<   r   r   r#   r#   0   s        
A 
A 
A 
A 
A 
A 
A 
A+ + +!D$7 ! ! ! !  Cm C C C C C Cr   r#   c                  ^   t          j                    } |                     dd          }|                    dd          }|                    d           |                    d           |                    d	d
          }|                    dddd           |                    dd           |                    dd           |                    ddd           |                    dd          }|                    dd           |                    ddd           |                    dd          }|                    dd           |                                 }t          t          |                    dk    r#|                                  t          d            |S )!NzCommand to executecmd)helpdestr   z2Extract embedded tuning results from an onnx file.)rS   
input_onnxoutput_jsonr!   z+Embed the tuning results into an onnx file.z--forcez-f
store_truez+Overwrite the tuning results if it existed.)actionrS   output_onnxzPath of the output onnx file.zPath of the input onnx file.
input_json+z5Path(s) of the tuning results file(s) to be embedded.)nargsrS   rC   z4Merge multiple tuning results files as a single one.z'Path of the output tuning results file.z/Paths of the tuning results files to be merged.r   z Pretty print the tuning results.json_or_onnxz+A tuning results json file or an onnx file.r   r
   )
argparseArgumentParseradd_subparsers
add_parseradd_argument
parse_argslenvars
print_helpexit)parsersub_parsersextract_parserembed_parsermerge_parserpprint_parserargss          r   rc   rc   \   s   $&&F''-A'NNK ++I<p+qqN---...))'8e)ffLilIvwwwm2QRRRl1OPPPl#<sttt))'8n)ooLm2[\\\l#<mnnn**8:\*]]M~4abbbD
4::!RKr   c                     t                      } | j        dk    rt          t          j        | j                            }|;t          j                            | j         d           t          j	        d           t          j        |t          | j        d                     d S | j        dk    rt          j        | j                  }t                      }d | j        D             D ]}|                    |           t#          ||                                | j                  }t          j        || j                   d S | j        dk    rst                      }d | j        D             D ]}|                    |           t          j        |                                t          | j        d                     d S | j        d	k    rd }	 t          j        t          | j                            }n# t0          $ r Y nw xY w|w	 t          j        | j                  }t          |          }|;t          j                            | j         d           t          j	        d           n# t0          $ r Y nw xY w|;t          j                            | j         d
           t          j	        d           t3          |           d S d S )Nr   z( does not have tuning results embedded!
r
   wr!   c                 P    g | ]#}t          j        t          |                    $S r<   r   loadopen.0fs     r   
<listcomp>zmain.<locals>.<listcomp>   (    KKKatya11KKKr   rC   c                 P    g | ]#}t          j        t          |                    $S r<   rr   ru   s     r   rx   zmain.<locals>.<listcomp>   ry   r   r   z1 is not a valid tuning results file or onnx file!)rc   rR   r   onnx
load_modelrU   sysstderrwriterg   r   dumprt   rV   r#   rZ   rC   r!   rN   force
save_modelrY   rs   r]   	Exceptionr   )rn   r   r   mergers       r   mainr   x   s   <<Dx9 !A!ABB!JZZZ[[[HRLLL	.$t'7"="=>>>>>	W		00KK4?KKK 	) 	)NLL((((eV..00$*==t/00000	W		KK4?KKK 	) 	)NLL((((	&##%%tD,<c'B'BCCCCC	X			!YtD,='>'>??NN 	 	 	D	 !(9::!(!)J$$%b%b%bcccHRLLL    !J 1dddeeeHRLLL~ 	s%   &G: :
HHA%I3 3
J ?J __main__)F)r^   r*   r   r}   collectionsr   r   typingr   r   r   r{   r;   rP   r   r   
ModelProtor   r!   r#   rc   r   r8   r<   r   r   <module>r      sW      



 # # # # # #       " " " " " " " " " " S#X&   14? 1 1 1 1
 
 
$}2E 
 
 
 
)C )C )C )C )C )C )C )CX  8- - -` zDFFFFF r   