§
    OŠtj´G  ã                   óð  — d dl Z d dlmZ d dlZd dlZ	 d dlZd dlm	Z	 n# e
$ r  e
d¦  «        ‚w xY wd dlZd dlmZ d dlmZ d dlmZ d„ Zd	efd
„Zdeej        ee         ee         ef         fd„Zd„ Zd„ Z edddg¦  «        Z eddddddœ¦  «        Z edd„ ej                              ¦   «         D ¦   «         ¦  «        Z! eddddddœ¦  «        Z" edd„ e"j                              ¦   «         D ¦   «         ¦  «        Z# edddd d!œ¦  «        Z$i d"„ e$j         %                    ¦   «         D ¦   «         ¥Z&ddd d#œZ'e& (                    d$„ e' %                    ¦   «         D ¦   «         ¦  «         ej)        D ]LZ*d%e*› �Z+d&e*› d'�dd(e*› d'�dd)e*› d'�d iZ,e& (                    d*„ e, %                    ¦   «         D ¦   «         ¦  «         ŒMd+„ Z-d,„ Z.d8d-„Z/d.„ Z0d9d1„Z1d2„ Z2d:d3„Z3d4„ Z4d5„ Z5d6„ Z6e7d7k    r e6¦   «          dS dS );é    N)Ú
namedtuple)ÚNegationQueryzPFailed to import hatchet. `pip install llnl-hatchet` to get the correct version.)ÚCOMPUTE_METADATA_SCOPE_NAME)Ú
LaunchHook)Úspecsc                 óš  — g }t          | t          ¦  «        s| g} | rˆ| D ]…}|                     ¦   «         }||z   D ]i}||v rdnd}|                     d¦  «        d                              ¦   «                              ¦   «         }|||fv r|                     ||z   ¦  «          nŒjŒ†t          |¦  «        dk    rt          d|› d�¦  «        ‚|S )Nú (inc)Ú ú(r   zMetric z< is not found. Use the --list flag to list available metrics)Ú
isinstanceÚlistÚlowerÚsplitÚstripÚappendÚlenÚRuntimeError)ÚmetricsÚinclusive_metricsÚexclusive_metricsÚretÚmetricÚ
raw_metricÚsuffixÚraw_metric_no_units           úT/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/triton/profiler/viewer.pyÚmatch_available_metricsr      s  € Ø
€CÝ�g�tÑ$Ô$ð Ø�)ˆØð Øð 	ð 	ˆFØ—\’\‘^”^ˆFØ/Ð2CÑCð ð �
Ø%/Ð3DÐ%DÐ%D˜˜È"�Ø%/×%5Ò%5°cÑ%:Ô%:¸1Ô%=×%CÒ%CÑ%EÔ%E×%KÒ%KÑ%MÔ%MÐ"Ø˜jÐ*<Ð=Ð=Ð=Ø—J’J˜z¨FÑ2Ñ3Ô3Ð3Ø�Eð >øõ ˆ3�x„x�1‚}€}ÝÐi VÐiÐiÐiÑjÔjÐjØ€Jó    Údatabasec                 ód   ‡— ˆfd„Šg }| D ]$} ‰|¦  «        }|�|                      |¦  «         Œ%|S )Nc                 ó†  •— d| vr| S | d         d         t           k    rd S t          | d         ¦  «        dk    rt          | d         ¦  «        dk    rd S |                      dg ¦  «        }g }|D ]$} ‰|¦  «        }|�|                     |¦  «         Œ%t          |¦  «        dk    st          |¦  «        dk    r|| d<   | S d S )NÚframeÚnamer   r   Úchildren)r   r   Úgetr   )Únoder$   Únew_childrenÚchildÚ	new_childÚremove_frame_helpers        €r   r*   z*remove_frames.<locals>.remove_frame_helper)   sé   ø€ Ø˜$ÐÐØˆKØ�Œ=˜Ô Õ$?Ò?Ð?Ø�4Ýˆt�IŒÑÔ 1Ò$Ð$­¨T°*Ô-=Ñ)>Ô)>À!Ò)CÐ)CØ�4Ø—8’8˜J¨Ñ+Ô+ˆØˆØð 	/ð 	/ˆEØ+Ð+¨EÑ2Ô2ˆIØÐ$Ø×#Ò# IÑ.Ô.Ð.øÝˆ|ÑÔ˜qÒ Ð ¥C¨¡M¤M°QÒ$6Ð$6Ø+ˆD�ÑØˆKØˆtr   )r   )r   Únew_databaser&   Únew_noder*   s       @r   Úremove_framesr-   #   sc   ø€ ðð ð ð ð ð$ €LØð *ð *ˆØ&Ð& tÑ,Ô,ˆØÐØ×Ò Ñ)Ô)Ð)øØÐr   Úreturnc                 ó  ‡— t          | ¦  «        } t          | ¦  «        dk     ri n|                      d¦  «        }t          j                             | ¦  «        }|                     ¦   «         Šˆfd„|j        j        D ¦   «         }|‰||fS )Né   é   c                 ó   •— g | ]}|‰v¯|‘Œ	S © r3   )Ú.0r   r   s     €r   ú
<listcomp>z#get_raw_metrics.<locals>.<listcomp>H   s$   ø€ ÐfÐfÐf FÀfÐTeÐFeÐFe˜ÐFeÐFeÐFer   )	r-   r   ÚpopÚhtÚ
GraphFrameÚfrom_literalÚshow_metric_columnsÚ	dataframeÚcolumns)r   Údevice_infoÚgfr   r   s       @r   Úget_raw_metricsr?   C   sŠ   ø€ Ý˜XÑ&Ô&€HÝ˜H™œ¨Ò)Ð)�"�"¨x¯|ª|¸A©¬€KÝ	Œ×	#Ò	# HÑ	-Ô	-€BØ×.Ò.Ñ0Ô0ÐØfÐfÐfÐf¨b¬lÔ.BÐfÑfÔfÐØÐ Ð"3°[Ð@Ð@r   c           
      óÔ  — t          j        d| j        dg¬¦  «        }|D ]Ç}||         D ]¼}||         |         d         }||         |         d         }||         |         d         }t          j        D ]q}| d         |k    }	| |	         }
d|› �|
j        vrŒ#t          j        |||||¦  «        }|j        |	dfxx         |
d|› �          	                    d	¦  «        |z  z  cc<   ŒrŒ½ŒÈ|S )
Nç        Úmin_time©Úindexr<   ÚarchÚnum_smsÚ
clock_rateÚ	device_idÚflopsr   )
ÚpdÚ	DataFramerD   r   Úflops_widthr<   r   Ú	max_flopsÚlocÚfillna)Údfr=   Úmin_time_flopsÚdevice_typeÚdevice_indexrE   rF   rG   ÚwidthÚidxÚdevice_framesrM   s               r   Úget_min_time_flopsrW   L   s2  € Ý”\ #¨R¬XÀ
¸|ÐLÑLÔL€NØ"ð lð lˆØ'¨Ô4ð 
	lð 
	lˆLØ˜{Ô+¨LÔ9¸&ÔAˆDØ! +Ô.¨|Ô<¸YÔGˆGØ$ [Ô1°,Ô?ÀÔMˆJÝ#Ô/ð lð l�Ø˜”o¨Ò5�Ø " 3¤�Ø"˜5�?�?¨-Ô*?Ð?Ð?ØÝ!œO¨K¸¸uÀgÈzÑZÔZ�	ØÔ" 3¨
 ?Ð3Ð3Ô3°}À_ÈUÀ_À_Ô7U×7\Ò7\Ð]^Ñ7_Ô7_ÐbkÑ7kÑkÐ3Ð3Ñ3Ð3ðlð	
	lð Ðr   c                 ó>  — t          j        d| j        dg¬¦  «        }|D ]|}||         D ]q}| d         |k    }| |         }||         |         }|d         }|d         }	t          j        ||d         |	|¦  «        }
|j        |dfxx         |d         |
z  z  cc<   ŒrŒ}|S )	NrA   rB   rC   rH   Úmemory_clock_rateÚ	bus_widthrE   Úbytes)rJ   rK   rD   r   Úmax_bpsrN   )rP   r=   Úmin_time_bytesrR   rS   rU   rV   ÚdevicerY   rZ   Úpeak_bandwidths              r   Úget_min_time_bytesr`   ]   s×   € Ý”\ #¨R¬XÀ
¸|ÐLÑLÔL€NØ"ð [ð [ˆØ'¨Ô4ð 	[ð 	[ˆLØ�[”/ \Ò1ˆCØ˜sœGˆMØ  Ô-¨lÔ;ˆFØ &Ð':Ô ;ÐØ˜{Ô+ˆIÝ"œ]¨;¸¸v¼È	ÐSdÑeÔeˆNØÔ˜s J˜Ð/Ð/Ô/°=ÀÔ3IÈNÑ3ZÑZÐ/Ð/Ñ/Ð/ð	[ð Ðr   Ú
FactorDictr#   ÚfactorÚtimer1   gü©ñÒMbP?g�íµ ÷Æ°>g•Ö&è.>)ztime/sztime/msztime/usztime/nsÚavg_timec                 ó    — i | ]\  }}d |› �|“ŒS ©Úavg_r3   ©r4   ÚkeyÚvalues      r   ú
<dictcomp>rk   m   s$   € Ð.uÐ.uÐ.uÁzÀsÈE¨|°c¨|¨|¸UÐ.uÐ.uÐ.ur   Úcpu_time)z
cpu_time/szcpu_time/mszcpu_time/uszcpu_time/nsÚavg_cpu_timec                 ó    — i | ]\  }}d |› �|“ŒS rf   r3   rh   s      r   rk   rk   q   s:   € ð '^ð '^ð '^Ù+5¨3°ð (4¨c | |°Uð '^ð '^ð '^r   r[   g    eÍÍAg   ¢”mB)zbyte/szgbyte/sztbyte/sc                 ó   — i | ]
}|t           “ŒS r3   )Úbytes_factor_dict©r4   ri   s     r   rk   rk   v   s+   € ð 3ð 3ð 3Øð Õð 3ð 3ð 3r   )zflop/szgflop/sztflop/sc                 ó:   — i | ]}|t          d t          ¦  «        “ŒS )rI   )ra   Údefault_flop_factor_dictrq   s     r   rk   rk   }   s5   € ð 1ð 1ð 1Ø	ð 	�*�WÕ6Ñ
7Ô
7ð 1ð 1ð 1r   rI   Úflopz/sÚgflopÚtflopc                 óD   — i | ]}|t          t          t          ¦  «        “ŒS r3   )ra   Úfactor_nameÚfactor_dictrq   s     r   rk   rk   ‚   s$   € ÐfÐfÐfÈC˜c¥:­k½;Ñ#GÔ#GÐfÐfÐfr   c                 ó¼  ‡‡— g }ˆˆfd„}|D �]~}|dk    rÃt          | j        |¦  «        }t          | j        |¦  «        }	 || j        dt          ¦  «        }
| j        d                              ¦   «         }|	d                              |d         t          ¦  «        |
z  | j        d<   t          j        | j        j	        |df<   | 
                    d¦  «         ŒÌ|t          v r…t          |         }|j        }|j        }t          |‰‰¦  «        d         }| j        |          || j        dt          ¦  «        z  ||         z  | j        |› d�<   | 
                    |› d�¦  «         �ŒZ|t          j        v s*|t          j        v s|t           j        v s|t"          j        v rß|t          j        v p|t"          j        v }|t           j        v p|t"          j        v }|r|rt"          nt          n|rt           nt          }|rdnd}|j        d	z   |                     d	¦  «        d
         z   } || j        ||¦  «        }|r|| j        d         z  }||j        |         z  | j        |› d�<   | 
                    |› d�¦  «         �Œq|                     d	¦  «        }|d         }t'          |¦  «        d
k    r±|d
         }|dk    rt)          d|› �¦  «        ‚t          |‰‰¦  «        d         }| j        |         }d}d|v rd}| j        |         j        d         }n| j        |                              ¦   «         }||z  dz  | j        ||z   <   | 
                    ||z   ¦  «         �ŒRt          |‰‰¦  «        d         }| 
                    |¦  «         �Œ€|D ]L}|                     d¦  «        r| j         
                    |¦  «         Œ2| j         
                    |¦  «         ŒM|S )Nc                 óÜ   •— t          |‰‰¦  «        d         }|j        dz   |                     d¦  «        d                              d¦  «        d         z   }| |         |j        |         z  S )Nr   ú/r   r1   ú))r   r#   r   rb   )rP   r   ry   Útime_metric_nameÚ	time_unitr   r   s        €€r   Úget_time_secondsz(derive_metrics.<locals>.get_time_secondsˆ   sq   ø€ Ý2°6Ð;LÐN_Ñ`Ô`ÐabÔcÐØÔ$ sÑ*Ð-=×-CÒ-CÀCÑ-HÔ-HÈÔ-K×-QÒ-QÐRUÑ-VÔ-VÐWXÔ-YÑYˆ	ØÐ"Ô# kÔ&8¸Ô&CÑCÐCr   Úutilrc   rH   rB   r   r	   rl   r|   r1   zcount (inc)ú%zUnsupported unit r
   ú(inc)g      Y@)r`   r;   rW   Útime_factor_dictÚisnaÚcombineÚmaxÚnpÚnanrN   r   Úderivable_metricsr#   rb   r   Úcpu_time_factor_dictÚavg_time_factor_dictÚavg_cpu_time_factor_dictr   r   Ú
ValueErrorÚilocÚsumÚendswithÚinc_metricsÚexc_metrics)r>   r   r   r   r=   Úderived_metricsr€   r   r]   rQ   Útime_secÚinternal_frame_indicesÚderivable_metricÚmetric_nameÚmetric_factor_dictÚmatched_metric_nameÚis_cpuÚis_avgry   Úmetric_time_unitÚ
time_valueÚmetric_name_and_unitÚmetric_unitÚsingle_framer   ÚtotalÚderived_metrics     ``                       r   Úderive_metricsr¤   …   su  øø€ Ø€OðDð Dð Dð Dð Dð Dð
 ð 5<ñ 5<ˆØ�VÒÐÝ/°´¸kÑJÔJˆNÝ/°´¸kÑJÔJˆNØ'Ð'¨¬°fÕ>NÑOÔOˆHØ%'¤\°+Ô%>×%CÒ%CÑ%EÔ%EÐ"Ø#1°*Ô#=×#EÒ#EÀnÐU_ÔF`ÕbeÑ#fÔ#fÐiqÑ#qˆBŒL˜Ñ Ý?A¼vˆBŒLÔÐ3°VÐ;Ñ<Ø×"Ò" 6Ñ*Ô*Ð*Ð*ØÕ(Ð(Ð(Ý0°Ô8ÐØ*Ô/ˆKØ!1Ô!8ÐÝ"9¸+ÐGXÐZkÑ"lÔ"lÐmnÔ"oÐØ/1¬|Ð<OÔ/PØ0@Ð0@ÀÄÈvÕWgÑ0hÔ0hñ0jà/AÀ&Ô/Iñ0JˆBŒL˜FÐ*Ð*Ð*Ñ+ð ×"Ò" fÐ#4Ð#4Ð#4Ñ5Ô5Ð5Ñ5ØÕ(Ô/Ð/Ð/°6Õ=QÔ=XÐ3XÐ3XØÕ/Ô6Ð6Ð6¸&ÕD\ÔDcÐ:cÐ:cØÕ3Ô:Ð:Ðg¸fÕH`ÔHgÐ>gˆFØÕ3Ô:Ð:Ðg¸fÕH`ÔHgÐ>gˆFà]cð R¸ÐXÕ4Ð4ÕDXÐDXØ4:ÐPÕ0Ð0Õ@Pð à(.Ð:˜*˜*°FˆKØ*Ô/°#Ñ5¸¿ºÀSÑ8IÔ8IÈ!Ô8LÑLÐà)Ð)¨"¬,¸À[ÑQÔQˆJØð FØ'¨"¬,°}Ô*EÑE�
à.8¸;Ô;MÐN^Ô;_Ñ._ˆBŒL˜FÐ*Ð*Ð*Ñ+Ø×"Ò" fÐ#4Ð#4Ð#4Ñ5Ô5Ð5Ñ5à#)§<¢<°Ñ#4Ô#4Ð Ø.¨qÔ1ˆKÝÐ'Ñ(Ô(¨1Ò,Ð,Ø2°1Ô5�Ø #Ò%Ð%Ý$Ð%F¸Ð%FÐ%FÑGÔGÐGÝ&=¸kÐK\Ð^oÑ&pÔ&pÐqrÔ&sÐ#Ø!œ|Ð,?Ô@�Ø�ØÐ1Ð1Ð1Ø%�FØœLÐ)<Ô=ÔBÀ1ÔE�E�EàœLÐ)<Ô=×AÒAÑCÔC�EØ1=ÀÑ1EÈÑ0N�”˜V f™_Ñ-Ø×&Ò& v°¡Ñ7Ô7Ð7Ñ7å&=¸kÐK\Ð^oÑ&pÔ&pÐqrÔ&sÐ#Ø×&Ò&Ð':Ñ;Ô;Ð;Ñ;ð *ð 2ð 2ˆØ×"Ò" 7Ñ+Ô+ð 	2ØŒN×!Ò! .Ñ1Ô1Ð1Ð1àŒN×!Ò! .Ñ1Ô1Ð1Ð1àÐr   c                 ó$  — |dk    r*| j         d                              d„ ¦  «        | j         d<   n_|dk    r*| j         d                              d„ ¦  «        | j         d<   n/|dk    r)| j         d                              d„ ¦  «        | j         d<   | S )NÚfile_function_liner#   c                 ó8   — |                       d¦  «        d         S )Nr|   éÿÿÿÿ©r   ©Úxs    r   ú<lambda>zformat_frames.<locals>.<lambda>Ð   ó   € ÀAÇGÂGÈCÁLÄLÐQSÔDT€ r   Úfunction_linec                 ó8   — |                       d¦  «        d         S )Nú:r¨   r©   rª   s    r   r¬   zformat_frames.<locals>.<lambda>Ò   r­   r   Úfile_functionc                 óØ   — |                       d¦  «        d                               d¦  «        d         › d|                       d¦  «        d                               d¦  «        d         › �S )Nr|   r¨   r°   r   ú@r©   rª   s    r   r¬   zformat_frames.<locals>.<lambda>Õ   sZ   € ˜Ÿš ™œ bÔ)×/Ò/°Ñ4Ô4°QÔ7ÐZÐZ¸!¿'º'À#¹,¼,ÀrÔ:J×:PÒ:PÐQTÑ:UÔ:UÐVWÔ:XÐZÐZ€ r   )r;   Úapply)r>   Úformats     r   Úformat_framesr¶   Î   s¤   € ØÐ%Ò%Ð%Ø!œ|¨FÔ3×9Ò9Ð:TÐ:TÑUÔUˆŒ�VÑÐØ	�?Ò	"Ð	"Ø!œ|¨FÔ3×9Ò9Ð:TÐ:TÑUÔUˆŒ�VÑÐØ	�?Ò	"Ð	"Ø!œ|¨FÔ3×9Ò9ØZÐZñ \ô  \ˆŒ�VÑà€Ir   c                 óä   — |rd|› d�}|                       |d¬¦  «        } |r,d|› d�}t          |¦  «        }|                       |d¬¦  «        } |r d|d|› �ig}|                       |d¬¦  «        } | S )Nz1
MATCH ("*")->(".", p)->("*")
WHERE p."name" =~ "z"
T)Úsquashz*
MATCH (".", p)->("*")
WHERE p."name" =~ "Ú*z>= )Úfilterr   )r>   ÚincludeÚexcludeÚ	thresholdr   ÚqueryÚinclusion_querys          r   Úfilter_framesrÀ   Ù   s¹   € Øð +ðàðð ð ˆð �YŠY�u TˆYÑ*Ô*ˆØð +ðàðð ð ˆõ ˜oÑ.Ô.ˆØ�YŠY�u TˆYÑ*Ô*ˆØð +Ø�vÐ0 YÐ0Ð0Ð1Ð2ˆØ�YŠY�u TˆYÑ*Ô*ˆØ€Ir   c                 óŒ   — d|v r=| j         d         j        }t          j        |¦  «        }|dk     rt	          d¦  «         d S d S d S )Nzbytes (inc)r   zZWarning: Negative byte values detected, this is usually the result of a datatype overflow
)r;   Úvaluesrˆ   ÚnanminÚprint)r>   r   Úbyte_valuesÚmin_byte_values       r   Úemit_warningsrÇ   í   s[   € Ø˜ÐÐØ”l =Ô1Ô8ˆÝœ ;Ñ/Ô/ˆØ˜AÒÐÝÐoÑpÔpÐpÐpÐpð	  Ðð Ðr   éd   Fc           	      ój  — t          | |¦  «        } t          |                      |d|d¬¦  «        ¦  «         |rêt          d|d         z   ¦  «         | j                             |d         gd¬¦  «        }t          dt          |¦  «        ¦  «        D ]‘}t          |j        |         d         ¦  «        d	k    r|j        |         d         d d	…         d
z   n|j        |         d         }t          d                     ||j        |         |d                  ¦  «        ¦  «         Œ’t          | |¦  «         d S )NTF)Úmetric_columnÚexpand_nameÚdepthÚrender_headerzSorted kernels by metric r   )ÚbyÚ	ascendingr1   r#   rÈ   z...z{:105} {:.4})
r¶   rÄ   Útreer;   Úsort_valuesÚranger   r�   rµ   rÇ   )r>   r   rÌ   rµ   Úprint_sortedÚ	sorted_dfÚrowÚkernel_names           r   Ú
print_treer×   õ   s;  € Ý	�r˜6Ñ	"Ô	"€BÝ	ˆ"�'Š' °TÀÐV[ˆ'Ñ
\Ô
\Ñ]Ô]Ð]àð WÝÐ)¨G°A¬JÑ6Ñ7Ô7Ð7Ø”L×,Ò,°¸´°ÈÐ,ÑNÔNˆ	Ý˜�C 	™NœNÑ+Ô+ð 	Wð 	WˆCå$'¨	¬°sÔ(;¸FÔ(CÑ$DÔ$DÀsÒ$JÐ$Jð %œ>¨#Ô.¨vÔ6°t¸°tÔ<Ø ñ!ð !ØPYÔP^Ð_bÔPcÐdjÔPkð å�.×'Ò'¨°Y´^ÀCÔ5HÈÐQRÌÔ5TÑUÔUÑVÔVÐVÐVÝ�"�gÑÔÐÐÐr   c                 ó  — t          | d¦  «        5 }t          j        |¦  «        }t          |¦  «        \  }}}}t	          ||z   ¦  «        dk    s
J d¦   «         ‚|                     ¦   «          ||||fcd d d ¦  «         S # 1 swxY w Y   d S )NÚrr   z"No metrics found in the input file)ÚopenÚjsonÚloadr?   r   Úupdate_inclusive_columns)ÚfilenameÚfr   r>   r   r   r=   s          r   Úreadrà     sõ   € Ý	ˆh˜Ñ	Ô	ð E Ý”9˜Q‘<”<ˆÝ@OÐPXÑ@YÔ@YÑ=ˆÐÐ0°+ÝÐ$Ð'8Ñ8Ñ9Ô9¸AÒ=Ð=Ð=Ð?cÑ=Ô=Ð=Ø
×#Ò#Ñ%Ô%Ð%ØÐ$Ð&7¸ÐDðEð Eð Eð Eñ Eô Eð Eð Eð Eð Eð Eð Eøøøð Eð Eð Eð Eð Eð Es   ‘A"B Â BÂBc                 óŠ   — t          |¦  «        \  }}}}t          || |||¦  «        } t          ||||| d         ¦  «        }|| fS )Nr   )rà   r¤   rÀ   )	r   rÞ   r»   r¼   r½   r>   r   r   r=   s	            r   Úparserâ     sS   € Ý<@À¹N¼NÑ9€BÐÐ,¨kÝ˜R Ð*;Ð=NÐP[Ñ\Ô\€Gå	�r˜7 G¨Y¸À¼
Ñ	CÔ	C€BØˆwˆ;Ðr   c                 óÀ   — t          |||||¦  «        \  }}d„ |D ¦   «         }	d„ |D ¦   «         }
|	| _        |
| _        |	|_        |
|_        |                      |¦  «        S )Nc                 ó<   — g | ]}|                      d ¦  «        ¯|‘ŒS ©rƒ   ©r‘   ©r4   r   s     r   r5   z&apply_diff_profile.<locals>.<listcomp>  s*   € Ð\Ð\Ð\ fÀ6Ç?Â?ÐSZÑC[ÔC[Ð\˜6Ð\Ð\Ð\r   c                 ó<   — g | ]}|                      d ¦  «        °|‘ŒS rå   ræ   rç   s     r   r5   z&apply_diff_profile.<locals>.<listcomp>  s*   € Ð`Ð`Ð` fÀvÇÂÐW^ÑG_ÔG_Ð`˜6Ð`Ð`Ð`r   )râ   r’   r“   Úsub)r>   r”   Ú	diff_filer   r»   r¼   r½   Úgf2Ú_Úderived_inc_metricsÚderived_exc_metricss              r   Úapply_diff_profilerï     so   € å�7˜I w°¸ÑCÔC�F€Cˆà\Ð\°Ð\Ñ\Ô\ÐØ`Ð`°Ð`Ñ`Ô`Ðà(€B„NØ(€B„NØ)€C„OØ)€C„OØ�6Š6�#‰;Œ;Ðr   c                 óD  — t          | d¦  «        5 }t          j        |¦  «        }t          |¦  «        \  }}}}t	          d¦  «         |rV|D ]S}|                     d¦  «        d                              ¦   «                              ¦   «         }t	          d|› �¦  «         ŒTt	          d¦  «         |rV|D ]S}|                     d¦  «        d                              ¦   «                              ¦   «         }t	          d|› �¦  «         ŒTd d d ¦  «         d S # 1 swxY w Y   d S )NrÙ   zAvailable inclusive metrics:r   r   z- zAvailable exclusive metrics:)rÚ   rÛ   rÜ   r?   rÄ   r   r   r   )Ú	file_namerß   r   rì   r   r   r   r   s           r   Úshow_metricsrò   "  s|  € Ý	ˆi˜Ñ	Ô	ð 1 Ý”9˜Q‘<”<ˆÝ5DÀXÑ5NÔ5NÑ2ˆÐÐ/°ÝÐ,Ñ-Ô-Ð-Øð 	1Ø/ð 1ð 1�
Ø%/×%5Ò%5°cÑ%:Ô%:¸1Ô%=×%CÒ%CÑ%EÔ%E×%KÒ%KÑ%MÔ%MÐ"ÝÐ/Ð-Ð/Ð/Ñ0Ô0Ð0Ð0ÝÐ,Ñ-Ô-Ð-Øð 	1Ø/ð 1ð 1�
Ø%/×%5Ò%5°cÑ%:Ô%:¸1Ô%=×%CÒ%CÑ%EÔ%E×%KÒ%KÑ%MÔ%MÐ"ÝÐ/Ð-Ð/Ð/Ñ0Ô0Ð0Ð0ð1ð 1ð 1ñ 1ô 1ð 1ð 1ð 1ð 1ð 1ð 1ð 1øøøð 1ð 1ð 1ð 1ð 1ð 1s   ‘C7DÄDÄDc            	      ó`  — t          j        dt           j        ¬¦  «        } |                      dddd¬¦  «         |                      dd	t          d d
¬¦  «         |                      ddt          d d¬¦  «         |                      ddt          d d¬¦  «         |                      ddt
          d d¬¦  «         |                      ddt          dd¬¦  «         |                      ddt          g d¢dd¬¦  «         |                      ddd d!¬"¦  «         |                      d#d$t          d d%¬¦  «         |                      ¦   «         \  }}t          |¦  «        d&k    s
J d'¦   «         ‚|d(         }|j	        r|j	         
                    d)¦  «        nd }|j        }|j        }|j        }|j        }|j        }	|j        }
|j        }|r|rt%          d*¦  «        ‚|j        rt)          |¦  «         d S |rBt+          |||||¦  «        \  }}|
rt-          |||
||||¦  «        }t/          ||||	|¦  «         d S d S )+Nz,Performance data viewer for proton profiles.)ÚdescriptionÚformatter_classz-lz--listÚ
store_truea-  List available metrics. Metric names are case insensitive and ignore units.
Derived metrics can be created when source metrics are available.
- time/s, time/ms, time/us, time/ns: time
- avg_time/s, avg_time/ms, avg_time/us, avg_time/ns: time / count
- flop[<8/16/32/64>]/s, gflop[<8/16/32/64>]/s, tflop[<8/16/32/64>]/s: flops / time
- byte/s, gbyte/s, tbyte/s: bytes / time
- util: max(sum(flops<width>) / peak_flops<width>_time, sum(bytes) / peak_bandwidth_time)
- <metric>/%%: frame(metric) / sum(metric). Only available for inclusive metrics (e.g. time)
)ÚactionÚhelpz-mz	--metricszÐAt maximum two metrics can be specified, separated by comma.
There are two modes:
1) Choose the output metric to display. It's case insensitive and ignore units.
2) Derive a new metric from existing metrics.
)ÚtypeÚdefaultrø   z-iz	--includea  Find frames that match the given regular expression and return all nodes in the paths that pass through the matching frames.
For example, the following command will display all paths that contain frames that contains "test":
```
proton-viewer -i ".*test.*" path/to/file.json
```
z-ez	--excludezæExclude frames that match the given regular expression and their children.
For example, the following command will exclude all paths starting from frames that contains "test":
```
proton-viewer -e ".*test.*" path/to/file.json
```
z-tz--thresholdzrExclude frames(kernels) whose metrics are below the given threshold. This filter only applies on the first metric.z-dz--depthrÈ   z The depth of the tree to displayz-fz--format)Úfullr¦   r®   r±   rû   a!  Formatting the frame name.
- full: include the path, file name, function name and line number.
- file_function_line: include the file name, function name and line number.
- function_line: include the function name and line number.
- file_function: include the file name and function name.
)rù   Úchoicesrú   rø   z--print-sortedFz6Sort output by metric value instead of chronologically)r÷   rú   rø   z--diff-profilez-diffzŒCompare two profiles. When used as 'proton-viewer -m time -diff file1.log file2.log', computes the difference: file2['time'] - file1['time']r1   zMust specify a file to readr   ú,z'Cannot specify both include and exclude)ÚargparseÚArgumentParserÚRawTextHelpFormatterÚadd_argumentÚstrÚfloatÚintÚparse_known_argsr   r   r   r»   r¼   r½   rÌ   rµ   Údiff_profilerÓ   rŽ   r   rò   râ   rï   r×   )Ú	argparserÚargsÚtarget_argsrñ   r   r»   r¼   r½   rÌ   rµ   ÚdiffrÓ   r>   r”   s                 r   Úmainr  2  s  € ÝÔ'ØBÝ Ô5ðñ ô €Ið ×ÒØØØðð	 ñ ô ð ð ×ÒØØÝØðð ñ 
ô 
ð 
ð ×ÒØØÝØð	ð ñ ô ð ð ×ÒØØÝØðð ñ ô ð ð ×ÒØØÝØà|ð ñ ô ð ð ×ÒØØÝØØ/ð ñ ô ð ð ×ÒØØÝØPÐPÐPØðð ñ ô ð ð ×ÒØØØØEð	 ñ ô ð ð ×ÒØØÝØðAð ñ ô ð ð "×2Ò2Ñ4Ô4Ñ€Dˆ+Ýˆ{ÑÔ˜qÒ Ð Ð Ð"?Ñ Ô Ð à˜A”€IØ)-¬Ð?ˆdŒl× Ò  Ñ%Ô%Ð%¸4€GØŒl€GØŒl€GØ”€IØŒJ€EØŒ[€FØÔ€DØÔ$€LØð D�7ð DÝÐBÑCÔCÐCØ„yð EÝ�YÑÔÐÐÐØ	ð EÝ# G¨Y¸ÀÈ)ÑTÔTÑˆˆOØð 	eÝ# B¨¸¸wÈÐQXÐZcÑdÔdˆBÝ�2�¨¨v°|ÑDÔDÐDÐDÐDð	Eð Er   Ú__main__)NNNN)rÈ   NF)NNN)8rþ   Úcollectionsr   rÛ   ÚpandasrJ   Úhatchetr7   Úhatchet.queryr   ÚImportErrorÚnumpyrˆ   Útriton.profiler.stater   Útriton.profiler.hooks.launchr   Útriton.profilerr   r   r-   Útupler8   r   r  Údictr?   rW   r`   ra   r„   rb   ÚitemsrŒ   r‹   r�   rp   ÚkeysrŠ   rs   ÚupdaterL   rT   rx   ry   r¤   r¶   rÀ   rÇ   r×   rà   râ   rï   rò   r  Ú__name__r3   r   r   ú<module>r     s2  ðØ €€€Ø "Ð "Ð "Ð "Ð "Ð "Ø €€€Ø Ð Ð Ð ðjØÐÐÐØ+Ð+Ð+Ð+Ð+Ð+Ð+øØð jð jð jØ
ˆ+ÐhÑ
iÔ
iÐiðjøøøà Ð Ð Ð Ø =Ð =Ð =Ð =Ð =Ð =Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø !Ð !Ð !Ð !Ð !Ð !ðð ð ð$˜Dð ð ð ð ð@A  r¤}°d¸3´iÀÀcÄÈDÐ'PÔ!Qð Að Að Að Aðð ð ð"ð ð ð ˆZ˜ v¨xÐ&8Ñ9Ô9€
Ø�:˜f°¸tÐPTÐaeÐ&fÐ&fÑgÔgÐ Ø!�z *Ð.uÐ.uÐUeÔUl×UrÒUrÑUtÔUtÐ.uÑ.uÔ.uÑvÔvÐ Ø!�z *Ø12À4ÐX\ÐmqÐ"rÐ"rñtô tÐ à%˜: nð'^ð '^Ø9MÔ9T×9ZÒ9ZÑ9\Ô9\ð'^ñ '^ô '^ñ_ô _Ð ð �J˜w°1ÀÐQUÐ(VÐ(VÑWÔWÐ ðð3ð 3Ø#Ô*×/Ò/Ñ1Ô1ð3ñ 3ô 3ðÐ ð '(°CÀDÐIÐIÐ Ø × Ò ð1ð 1Ø(×-Ò-Ñ/Ô/ð1ñ 1ô 1ñ2ô 2ð 2ð Ô#ð hð h€EØ!˜%�/�/€KØ#˜%Ð#Ð#Ð# QÐ(9°Ð(9Ð(9Ð(9¸3Ð@QÈÐ@QÐ@QÐ@QÐSWÐX€KØ×ÒÐfÐfÐS^×ScÒScÑSeÔSeÐfÑfÔfÑgÔgÐgÐgðFð Fð FðRð ð ðð ð ð ð(qð qð qðð ð ð ðEð Eð Eðð ð ð ðð ð ð1ð 1ð 1ð vEð vEð vEðr ˆzÒÐØ€D�F„F€F€F€Fð Ðs   ”
 Ÿ0