o
    gC                     @   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m	Z	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rce  dS dS )    N)OrderedDict)pprint)AnyDictList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   W/var/www/visachat/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__strr   r(   r+   r-   r   r   r   r   EpAndValidators1   s    r2   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)r3   r&   r   r    
setdefaultappend)
r'   r   evflat_resultsr7   r5   op_sig
params_sig	kernel_id
kernel_mapr   r   r   
get_mergedD   s   
zMerger.get_mergedr5   c                 C   sf   t |d |d }| j|i }|d  D ]\}}| D ]\}}||f|vr/||||f< qqd S )Nr   r    r7   )r   r2   r3   r8   r&   )r'   r5   r:   r;   r<   r?   r=   r>   r   r   r   r4   S   s   zMerger._merge_oneN)
r.   r/   r0   r2   r(   r   TuningResultsr6   r@   r4   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   r6   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>r6   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   r6   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   r   r   ri   r1   rA   r   r   
ModelProtor   r   r   rS   rs   r.   r   r   r   r   <module>   s&   	,0
