Ë
    ÝÍ:j7  ã                   óî   — 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„ 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«        yy)é    N)ÚOrderedDict)Úpprint)ÚAnyÚtuning_resultsc                 óX   — t        | «      D ]  \  }}|j                  t        k(  sŒ|c S  y)Néÿÿÿÿ)Ú	enumerateÚkeyÚ_TUNING_RESULTS_KEY)Úmetadata_propsÚidxÚprops      úu/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/onnxruntime/tools/offline_tuning.pyÚ_find_tuning_results_in_propsr      s1   € Ü˜~Ó.ò ‰	ˆˆTØ�8‰8Ô*Ó*ØŠJðð ó    Úmodelc                 ó”   — t        | j                  «      }|dk  ry | j                  |   }t        j                  |j                  «      S )Nr   )r   r   ÚjsonÚloadsÚvalue)r   r   Útuning_results_props      r   Úextractr      sC   € Ü
'¨×(<Ñ(<Ó
=€CØ
ˆQ‚wØà×.Ñ.¨sÑ3ÐÜ�:‰:Ð)×/Ñ/Ó0Ð0r   c                 ó
  — t        | j                  «      }|s|dk  sJ d«       ‚|dk\  r| j                  j                  |«       | 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   #   sr   € Ü
'¨×(<Ñ(<Ó
=€CÙ˜˜qšÐ`Ð"`Ó`Ð à
ˆa‚xØ×Ñ× Ñ  Ô%à× Ñ ×$Ñ$Ó&€EÜ#€E„IÜ—*‘*˜^Ó,€E„KØ€Lr   c                   óJ   — e Zd Z G d„ d«      Zd„ Zdee   fd„Zd„ Zdefd„Z	y	)
ÚMergerc                   ó2   — e Zd Zdedeeef   fd„Zd„ Zd„ Zy)úMerger.EpAndValidatorsÚepÚ
validatorsc                 ó˜   — || _         t        j                  |«      | _        |t	        t        |j                  «       «      «      f| _        y ©N)r$   ÚcopyÚdeepcopyr%   ÚtupleÚsortedÚitemsr
   )Úselfr$   r%   s      r   Ú__init__zMerger.EpAndValidators.__init__2   s8   € ØˆDŒGÜ"Ÿm™m¨JÓ7ˆDŒOØœE¤&¨×)9Ñ)9Ó);Ó"<Ó=Ð>ˆD�Hr   c                 ó,   — t        | j                  «      S r'   )Úhashr
   ©r-   s    r   Ú__hash__zMerger.EpAndValidators.__hash__7   s   € Ü˜Ÿ™“>Ð!r   c                 ój   — | j                   |j                   k(  xr | j                  |j                  k(  S r'   )r$   r
   )r-   Úothers     r   Ú__eq__zMerger.EpAndValidators.__eq__:   s'   € Ø—7‘7˜eŸh™hÑ&Ò@¨4¯8©8°u·y±yÑ+@Ð@r   N)Ú__name__Ú
__module__Ú__qualname__ÚstrÚdictr.   r2   r5   © r   r   ÚEpAndValidatorsr#   1   s(   „ ð	?˜sð 	?°°S¸#°X±ó 	?ò
	"ó	Ar   r<   c                 ó"   — t        «       | _        y r'   )r   Úev_to_resultsr1   s    r   r.   zMerger.__init__=   s   € Ü(›]ˆÕr   r   c                 ó4   — |D ]  }| j                  |«       Œ y r'   )Ú
_merge_one)r-   r   Útrss      r   ÚmergezMerger.merge@   s   € Ø!ò 	!ˆCØ�O‰O˜CÕ ñ	!r   c                 ó  — g }| j                   j                  «       D ]d  \  }}i }|j                  |j                  |dœ}|j                  «       D ]  \  \  }}}|j	                  |i «      }	||	|<   Œ! |j                  |«       Œf |S )N)r$   r%   Úresults)r>   r,   r$   r%   Ú
setdefaultÚappend)
r-   r   ÚevÚflat_resultsrD   rA   Úop_sigÚ
params_sigÚ	kernel_idÚ
kernel_maps
             r   Ú
get_mergedzMerger.get_mergedD   s    € ØˆØ $× 2Ñ 2× 8Ñ 8Ó :ò 
	'ÑˆB�ØˆGà—e‘eØ Ÿm™mØ"ñˆCð
 4@×3EÑ3EÓ3Gò 3Ñ/Ñ$�˜ iØ$×/Ñ/°¸Ó;�
Ø)2�
˜:Ò&ð3ð ×!Ñ! #Õ&ð
	'ð Ðr   rA   c                 óö   — t         j                  |d   |d   «      }| j                  j                  |i «      }|d   j	                  «       D ]+  \  }}|j	                  «       D ]  \  }}||f|vsŒ||||f<   Œ Œ- y )Nr$   r%   rD   )r!   r<   r>   rE   r,   )r-   rA   rG   rH   rI   rL   rJ   rK   s           r   r@   zMerger._merge_oneS   s“   € Ü×#Ñ# C¨¡I¨s°<Ñ/@ÓAˆØ×)Ñ)×4Ñ4°R¸Ó<ˆØ"% i¡.×"6Ñ"6Ó"8ò 	CÑˆF�JØ)3×)9Ñ)9Ó);ò CÑ%�
˜IØ˜JÐ'¨|Ò;Ø9B�L &¨*Ð!5Ò6ñCñ	Cr   N)
r6   r7   r8   r<   r.   ÚlistÚTuningResultsrB   rM   r@   r;   r   r   r!   r!   0   s7   „ ÷
Añ 
Aò+ð! D¨Ñ$7ó !òðC˜mô Cr   r!   c                  óÆ  — t        j                  «       } | j                  dd¬«      }|j                  dd¬«      }|j	                  d«       |j	                  d«       |j                  d	d
¬«      }|j	                  dddd¬«       |j	                  dd¬«       |j	                  dd¬«       |j	                  ddd¬«       |j                  dd¬«      }|j	                  dd¬«       |j	                  ddd¬«       |j                  dd¬«      }|j	                  dd¬«       | j                  «       }t        t        |«      «      dk(  r| j                  «        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   rB   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   \   sd  € Ü×$Ñ$Ó&€FØ×'Ñ'Ð-AÈÐ'ÓN€Kà ×+Ñ+¨IÐ<pÐ+Óq€NØ×Ñ Ô-Ø×Ñ Ô.à×)Ñ)¨'Ð8eÐ)Óf€LØ×Ñ˜i¨°lÐIvÐÔwØ×Ñ˜mÐ2QÐÔRØ×Ñ˜lÐ1OÐÔPØ×Ñ˜l°#Ð<sÐÔtà×)Ñ)¨'Ð8nÐ)Óo€LØ×Ñ˜mÐ2[ÐÔ\Ø×Ñ˜l°#Ð<mÐÔnà×*Ñ*¨8Ð:\Ð*Ó]€MØ×Ñ˜~Ð4aÐÔbà×ÑÓ€DÜ
Œ4�‹:ƒ˜!ÒØ×ÑÔÜˆRŒØ€Kr   c                  ót  — t        «       } | j                  dk(  r–t        t        j                  | j
                  «      «      }|€At        j                  j                  | j
                  › d�«       t        j                  d«       t        j                  |t        | j                  d«      «       y | j                  dk(  r»t        j                  | j
                  «      }t        «       }| j                  D �cg c]   }t        j                   t        |«      «      ‘Œ" c}D ]  }|j#                  |«       Œ t%        ||j'                  «       | j(                  «      }t        j*                  || j,                  «       y | j                  dk(  r�t        «       }| j                  D �cg c]   }t        j                   t        |«      «      ‘Œ" c}D ]  }|j#                  |«       Œ t        j                  |j'                  «       t        | j                  d«      «       y | j                  dk(  rêd }	 t        j                   t        | j.                  «      «      }|€n	 t        j                  | j.                  «      }t        |«      }|€At        j                  j                  | j
                  › d�«       t        j                  d«       |€At        j                  j                  | j.                  › d�«       t        j                  d«       t3        |«       y y c c}w c c}w # t0        $ r Y ŒÕw xY w# t0        $ r Y Œtw xY w)	Nr   z( does not have tuning results embedded!
r   Úwr   rB   r   z1 is not a valid tuning results file or onnx file!)rc   rR   r   ÚonnxÚ
load_modelrU   ÚsysÚstderrÚwriterg   r   ÚdumpÚopenrV   r!   rZ   ÚloadrB   r   rM   ÚforceÚ
save_modelrY   r]   Ú	Exceptionr   )rn   r   r   ÚmergerÚfs        r   Úmainr~   x   sn  € Ü‹<€DØ‡x�x�9ÒÜ ¤§¡°·±Ó!AÓBˆØÐ!Ü�J‰J×Ñ §¡Ð0Ð0YÐZÔ[Ü�H‰H�RŒLÜ�	‰	�.¤$ t×'7Ñ'7¸Ó"=Õ>Ø	�‰�WÒ	Ü—‘ §¡Ó0ˆÜ“ˆØ;?¿?¹?ÖK°aœtŸy™y¬¨a«Õ1ÒKò 	)ˆNØ�L‰L˜Õ(ð	)ä�e˜V×.Ñ.Ó0°$·*±*Ó=ˆÜ�‰˜˜t×/Ñ/Õ0Ø	�‰�WÒ	Ü“ˆØ;?¿?¹?ÖK°aœtŸy™y¬¨a«Õ1ÒKò 	)ˆNØ�L‰L˜Õ(ð	)ä�	‰	�&×#Ñ#Ó%¤t¨D×,<Ñ,<¸cÓ'BÕCØ	�‰�XÒ	Øˆð	Ü!ŸY™Y¤t¨D×,=Ñ,=Ó'>Ó?ˆNð
 Ð!ðÜŸ™¨×(9Ñ(9Ó:�Ü!(¨£�Ø!Ð)Ü—J‘J×$Ñ$¨¯©Ð'8Ð8aÐ%bÔcÜ—H‘H˜R”Lð Ð!Ü�J‰J×Ñ × 1Ñ 1Ð2Ð2cÐdÔeÜ�H‰H�RŒLäˆ~Õð 	ùòE Lùò Løô ò 	áð	ûô ò Ùðús1   Ã6%LÆ!%LÈ*(L ÉA-L+ Ì	L(Ì'L(Ì+	L7Ì6L7Ú__main__)F)r^   r(   r   rs   Úcollectionsr   r   Útypingr   rq   r:   r9   rP   r   r   Ú
ModelProtor   rO   r   r!   rc   r~   r6   r;   r   r   ú<module>rƒ      s�   ðó Û Û Û 
Ý #Ý Ý ã à�S˜#�X‘€à&Ð òð1�4—?‘?ó 1ñ
�—‘ð 
°$°}Ñ2Eó 
÷)Cñ )CòXò8-ð` ˆzÒÙ…Fð r   