o
    %Th7                     @   s   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 d dl	Z	e
eef ZdZdd Zde	jfd	d
Zdde	jdee fddZG dd dZdd Zdd Zedkr_e  dS dS )    N)OrderedDict)pprint)Anytuning_resultsc                 C   s(   t | D ]\}}|jtkr|  S qdS )N)	enumeratekey_TUNING_RESULTS_KEY)metadata_propsidxprop r   a/home/air/segue/gemini/back/venv/lib/python3.10/site-packages/onnxruntime/tools/offline_tuning.py_find_tuning_results_in_props   s
   
r   modelc                 C   s,   t | j}|dk rd S | j| }t|jS )Nr   )r   r
   jsonloadsvalue)r   r   tuning_results_propr   r   r   extract   s
   

r   Fc                 C   sR   t | j}|s|dksJ d|dkr| j| | j }t|_t||_| S )Nr   z<the supplied onnx file already have tuning results embedded!)	r   r
   popaddr	   r   r   dumpsr   )r   r   	overwriter   entryr   r   r   embed#   s   

r   c                   @   sJ   e Zd ZG dd dZdd Zdee fddZdd	 Zd
efddZ	dS )Mergerc                   @   s6   e Zd Zdedeeef fddZdd Zdd Zd	S )
zMerger.EpAndValidatorsep
validatorsc                 C   s,   || _ t|| _|tt| f| _d S N)r   copydeepcopyr   tuplesorteditemsr   )selfr   r   r   r   r   __init__2   s   zMerger.EpAndValidators.__init__c                 C   s
   t | jS r   )hashr   r%   r   r   r   __hash__7   s   
zMerger.EpAndValidators.__hash__c                 C   s   | j |j ko| j|jkS r   )r   r   )r%   otherr   r   r   __eq__:   s   zMerger.EpAndValidators.__eq__N)__name__
__module____qualname__strdictr&   r)   r+   r   r   r   r   EpAndValidators1   s    r1   c                 C   s   t  | _d S r   )r   ev_to_resultsr(   r   r   r   r&   =   s   zMerger.__init__r   c                 C   s   |D ]}|  | qd S r   )
_merge_one)r%   r   trsr   r   r   merge@   s   zMerger.mergec           
      C   sd   g }| j  D ](\}}i }|j|j|d}| D ]\\}}}||i }	||	|< q|| q|S )N)r   r   results)r2   r$   r   r   
setdefaultappend)
r%   r   evflat_resultsr6   r4   op_sig
params_sig	kernel_id
kernel_mapr   r   r   
get_mergedD   s   
zMerger.get_mergedr4   c                 C   sf   t |d |d }| j|i }|d  D ]\}}| D ]\}}||f|vr/||||f< qqd S )Nr   r   r6   )r   r1   r2   r7   r$   )r%   r4   r9   r:   r;   r>   r<   r=   r   r   r   r3   S   s   zMerger._merge_oneN)
r,   r-   r.   r1   r&   listTuningResultsr5   r?   r3   r   r   r   r   r   0   s    r   c                  C   s   t  } | jddd}|jddd}|d |d |jd	d
d}|jddddd |jddd |jddd |jdddd |jddd}|jddd |jdddd |jddd}|jddd |  }tt|dkrz|   t	d  |S )!NzCommand to executecmd)helpdestr   z2Extract embedded tuning results from an onnx file.)rC   
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.)actionrC   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.)nargsrC   r5   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argsr   r   r   rS   \   s(   

rS   c                  C   s  t  } | jdkr/tt| j}|d u r#tj| j d t	d t
|t| jd d S | jdkr_t| j}t }dd | jD D ]}|| qEt|| | j}t|| j d S | jdkrt }d	d | jD D ]}|| qot
| t| jd d S | jd
krd }z
t
t| j}W n	 ty   Y nw |d u rzt| j}t|}|d u rtj| j d t	d W n	 ty   Y nw |d u rtj| j d t	d t| d S 	 d S )Nr   z( does not have tuning results embedded!
r   wr   c                 S      g | ]	}t t|qS r   r   loadopen.0fr   r   r   
<listcomp>       zmain.<locals>.<listcomp>r5   c                 S   r`   r   ra   rd   r   r   r   rg      rh   r   z1 is not a valid tuning results file or onnx file!)rS   rB   r   onnx
load_modelrE   sysstderrwriterW   r   dumprc   rF   r   rJ   r5   r   r?   force
save_modelrI   rb   rM   	Exceptionr   )r^   r   r   mergerr   r   r   mainx   sT   






rs   __main__)F)rN   r    r   rk   collectionsr   r   typingr   ri   r0   r/   rA   r	   r   
ModelProtor   r@   r   r   rS   rs   r,   r   r   r   r   <module>   s&   	,0
