Ë
    P/æjMœ  ã                   ót  — d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlm	Z	m
Z
mZmZmZ d dlmZ d dlZd dlmZ g d¢Z G d„ d	e«      Zd
„ Zd„ Zd„ Zd„ Z G d„ d«      Z G d„ d«      Z edg d¢«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ d«      Z d„ Z!dZ"dZ#d„ Z$d"d „Z%	 	 	 	 	 	 	 	 	 d#d!„Z&y)$é    N)ÚdefaultdictÚ
namedtuple)Ú
attrgetter)ÚAnyÚDictÚListÚOptionalÚTuple)Ú
deprecated)Ú
DeviceType)Ú	EventListÚFormattedTimesMixinÚIntervalÚKernelÚFunctionEventÚFunctionEventAvgÚStringTableÚMemRecordsAccc                   ó�   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	e
d„ «       Z	 	 	 	 	 	 	 dd	„Zd
„ Zd„ Zdedefd„Zdd„Zd„ Zˆ xZS )r   z'A list of Events (for pretty printing).c                 óÈ   •— |j                  dd «      }|j                  dd«      }|j                  dd«      }t        ‰| �  |i |¤Ž || _        || _        d| _        || _        y )NÚ
use_deviceÚprofile_memoryFÚ
with_flops)ÚpopÚsuperÚ__init__Ú_use_deviceÚ_profile_memoryÚ_tree_builtÚ_with_flops)ÚselfÚargsÚkwargsr   r   r   Ú	__class__s         €ú_/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/torch/autograd/profiler_util.pyr   zEventList.__init__   sf   ø€ Ø—Z‘Z ¨dÓ3ˆ
ØŸ™Ð$4°eÓ<ˆØ—Z‘Z ¨eÓ4ˆ
Ü‰Ñ˜$Ð) &Ò)Ø%ˆÔØ-ˆÔØ ˆÔØ%ˆÕó    c                 ór   — | j                  «        | j                  «        | j                  «        d| _        y )NT)Ú_populate_cpu_childrenÚ_remove_dup_nodesÚ_set_backward_stacktracesr   ©r!   s    r%   Ú_build_treezEventList._build_tree'   s.   € Ø×#Ñ#Ô%Ø×ÑÔ Ø×&Ñ&Ô(ØˆÕr&   c                 ó"   — | j                  «       S ©N)Útabler+   s    r%   Ú__str__zEventList.__str__-   s   € Ø�z‰z‹|Ðr&   c                 ó´  — 	 t        «       }t        t        | «      «      D ]Ý  }| |   j                  €Œ| |   j                  j                  | |   j                  k(  sŒ=t        | |   j                  j
                  «      dk(  sŒc| |   j
                  | |   j                  _        | |   j                  | |   j                  _        | |   j
                  D ]  }| |   j                  |_        Œ |j                  |«       Œß t        |«      dk(  ry t        | «      D ��cg c]  \  }}||vsŒ|‘Œ }}}| j                  «        | j                  |«       �ŒRc c}}w )Né   r   )ÚsetÚrangeÚlenÚ
cpu_parentÚnameÚcpu_childrenÚkernelsÚaddÚ	enumerateÚclearÚextend)r!   Ú	to_deleteÚidxÚchÚindÚevÚnew_evtss          r%   r)   zEventList._remove_dup_nodes0   s2  € ØÜ›ˆIÜœS ›YÓ'ò 
'�à˜‘I×(Ñ(Ñ4Ø˜S™	×,Ñ,×1Ñ1°T¸#±Y·^±^ÓCÜ˜D ™I×0Ñ0×=Ñ=Ó>À!ÓCà8<¸S¹	×8NÑ8N�D˜‘I×(Ñ(Ô5Ø37¸±9×3DÑ3D�D˜‘I×(Ñ(Ô0Ø" 3™i×4Ñ4ò =˜Ø(,¨S©	×(<Ñ(<˜�ð=à—M‘M #Õ&ð
'ô �9‹~ Ò"ØÜ*3°D«/×R™w˜s B¸SÈ	Ò=QšÐRˆHÑRØ�J‰JŒLØ�K‰K˜Ô!ñ# ùó Ss   ÄEÄ*Ec                 óæ  — | D �cg c]-  }|j                   s|j                  t        j                  k(  r|‘Œ/ }}t	        |t        d«      ¬«      }t        j                  |d„ ¬«      }|D �]   \  }}t	        |d„ ¬«      }g }d}	|D ]ã  }
t        |«      dkD  rÂ|d   }|
j                  j                  |j                  j                  k\  s-|
j                  j                  |j                  j                  kD  r|j                  «        nC|j                  |
«       |
j                  �J d|
j                  › �«       ‚|
j!                  |«       nt        |«      dkD  rŒÂ|j#                  |
«       Œå �Œ yc c}w )	a4  Populate child events into each underlying FunctionEvent object.

        One event is a child of another if [s1, e1) is inside [s2, e2). Where
        s1 and e1 would be start and end of the child event's interval. And
        s2 and e2 start and end of the parent event's interval

        Example: In event list [[0, 10], [1, 3], [3, 4]] would have make [0, 10]
        be a parent of two other intervals.

        If for any reason two intervals intersect only partially, this function
        will not record a parent child relationship between then.
        Úthread)Úkeyc                 ó2   — | j                   | j                  fS r.   )rE   Únode_id©Úevents    r%   ú<lambda>z2EventList._populate_cpu_children.<locals>.<lambda>a   s   €  u§|¡|°U·]±]Ð&C€ r&   c                 ó\   — | j                   j                  | j                   j                   gS r.   )Ú
time_rangeÚstartÚendrI   s    r%   rK   z2EventList._populate_cpu_children.<locals>.<lambda>s   s&   €  5×#3Ñ#3×#9Ñ#9¸E×<LÑ<L×<PÑ<PÐ;PÐ"Q€ r&   r   éÿÿÿÿNz(There is already a CPU parent event for )Úis_asyncÚdevice_typer   ÚCPUÚsortedr   Ú	itertoolsÚgroupbyr5   rM   rN   rO   r   Úappend_cpu_childr6   rF   Úset_cpu_parentÚappend)r!   ÚevtÚsync_eventsÚeventsÚthreadsÚ	thread_idÚthread_eventsÚthread_events_Úcurrent_eventsÚcur_endrJ   Úparents               r%   r(   z EventList._populate_cpu_childrenD   sx  € ð$ ö
àØ—<’< C§O¡O´z·~±~Ò$Eò ð
ˆð 
ô
 ØÜ˜8Ó$ô
ˆô ×#Ñ#ØÑCô
ˆð  )0ó 	-Ñ$ˆI�}Ü#ØÙQôˆNð 35ˆNØˆGØ'ò -�Ü˜.Ó)¨AÒ-Ø+¨BÑ/�Fà×(Ñ(×.Ñ.°&×2CÑ2C×2GÑ2GÒGØ ×+Ñ+×/Ñ/°&×2CÑ2C×2GÑ2GÒGð '×*Ñ*Õ,à×/Ñ/°Ô6à!×,Ñ,Ð4ðRàEÀeÇiÁiÀ[ÐQóRØ4à×,Ñ,¨VÔ4Øô ˜.Ó)¨AÓ-ð  ×%Ñ% eÕ,ò#-ñ	-ùò9
s   …2E.c                 óB  ‡— ˆfd„Ši }| D ]D  } ‰|«      �Œ|j                   €Œ|j                  |j                  f}||vsŒ6|j                   ||<   ŒF | D ]I  } ‰|«      }|€Œ|j                  €J ‚|j                  |j                  f}||v r||   |_         ŒCg |_         ŒK y )Nc                 óP   •— | €y | j                   dk(  r| S  ‰| j                  «      S ©Nr2   )Úscoper6   )rZ   Ú	bw_parents    €r%   rh   z6EventList._set_backward_stacktraces.<locals>.bw_parent‹   s*   ø€ Øˆ{ØØ—‘˜a’Ø�
á  §¡Ó0Ð0r&   )ÚstackÚsequence_nrrE   Ú
fwd_thread)r!   Ú
fwd_stacksrZ   ÚtÚprh   s        @r%   r*   z#EventList._set_backward_stacktracesŠ   s²   ø€ ô	1ð ˆ
Øò 	.ˆCÙ˜‹~Ñ%¨#¯)©)Ñ*?Ø—_‘_ c§j¡jÐ1�Ø˜JÒ&Ø$'§I¡I�J˜q’Mð		.ð ò 	#ˆCÙ˜#“ˆAØ‰}Ø—|‘|Ð/Ð/Ð/Ø—]‘] A§L¡LÐ1�Ø˜
‘?Ø *¨1¡�C•Ià "�C•Iñ	#r&   c                 ó&   — t        d„ | D «       «      S )Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr.   )Úself_cpu_time_total©Ú.0rJ   s     r%   ú	<genexpr>z0EventList.self_cpu_time_total.<locals>.<genexpr>¦   s   è ø€ Ò?°�5×,Õ,Ñ?ùó   ‚)Úsumr+   s    r%   rq   zEventList.self_cpu_time_total¤   s   € äÑ?¸$Ô?Ó?Ð?r&   c                 óT   — t        | ||||||| j                  | j                  |¬«
      S )a(  Print an EventList as a nicely formatted table.

        Args:
            sort_by (str, optional): Attribute used to sort entries. By default
                they are printed in the same order as they were registered.
                Valid keys include: ``cpu_time``, ``cuda_time``, ``xpu_time``,
                ``cpu_time_total``, ``cuda_time_total``, ``xpu_time_total``,
                ``cpu_memory_usage``, ``cuda_memory_usage``, ``xpu_memory_usage``,
                ``self_cpu_memory_usage``, ``self_cuda_memory_usage``,
                ``self_xpu_memory_usage``, ``count``.
            top_level_events_only(bool, optional): Boolean flag to determine the
                selection of events to display. If true, the profiler will only
                display events at top level like top-level invocation of python
                `lstm`, python `add` or other functions, nested events like low-level
                cpu/cuda/xpu ops events are omitted for profiler result readability.

        Returns:
            A string containing the table.
        )	Úsort_byÚ	row_limitÚmax_src_column_widthÚmax_name_column_widthÚmax_shapes_column_widthÚheaderr   r   Útop_level_events_only)Ú_build_tabler   r    )r!   rx   ry   rz   r{   r|   r}   r~   s           r%   r/   zEventList.table¨   s;   € ô: ØØØØ!5Ø"7Ø$;ØØ×/Ñ/Ø×'Ñ'Ø"7ô
ð 	
r&   c                 ób  — ddl }| j                  sdn| j                  }t        |d«      5 }g }d}|j                  d«       | D ]ú  }|j                  €Œ|j                  dj                  |j                  |j                  j                  |j                  j                  «       |j                  s|j                  nd|j                  › d|j                  › d	�«      «       |j                  D ]P  }|j                  d
|j                  › d|j                  j                  › d|j                  › d|› d|› d�«       |dz  }ŒR Œü t        | «      dkD  r=|j                  |j                  «       dz
  |j                   «       |j#                  «        |j                  d«       ddd«       y# 1 sw Y   yxY w)zãExport an EventList as a Chrome tracing tools file.

        The checkpoint can be later loaded and inspected under ``chrome://tracing`` URL.

        Args:
            path (str): Path where the trace will be written.
        r   NÚcudaÚwú[zc{{"name": "{}", "ph": "X", "ts": {}, "dur": {}, "tid": {}, "pid": "CPU functions", "args": {{}}}}, z
" node_id:z, thread_id:z "z
{"name": "z", "ph": "s", "ts": z	, "tid": z , "pid": "CPU functions", "id": z, "cat": "cpu_to_z", "args": {}}, r2   é   ú])Úosr   ÚopenÚwriteÚ
trace_nameÚformatrM   rN   Ú
elapsed_usÚ	is_remoterE   rH   r9   r5   ÚseekÚtellÚSEEK_SETÚtruncate)	r!   Úpathr†   Údevice_nameÚfÚchrome_eventsÚnext_idrZ   Úks	            r%   Úexport_chrome_tracezEventList.export_chrome_traceÒ   s”  € ó 	à$(×$4Ò$4‘f¸$×:JÑ:JˆÜ�$˜‹_ð ,	 ØˆMØˆGð �G‰G�CŒLØò !!�Ø—>‘>Ð)ØØ—‘ð'÷ (.¡vØŸ™ØŸ™×,Ñ,ØŸ™×1Ñ1Ó3à"Ÿ}š}ð Ÿ
š
à)¨#¯+©+¨°lÀ3Ç:Á:À,ÈbÐQó(ôð  Ÿ™ò !�Að —G‘GØ% c§n¡nÐ%5ð 6!à!$§¡×!5Ñ!5Ð 6ð 7"Ø"%§*¡* ð .!à!( 	ð **Ø*5¨ð 7(ð(ô	ð ˜q‘L‘Gñ!ð'!!ôD �4‹y˜1Š}à—‘�q—v‘v“x !‘| R§[¡[Ô1Ø—
‘
”Ø�G‰G�CŒL÷Y,	÷ ,	ñ ,	ús   «E1F%Æ%F.c                 ó
   — g d¢S )N)rq   Úself_cuda_time_totalÚself_xpu_time_totalÚself_privateuse1_time_total© r+   s    r%   Úsupported_export_stacks_metricsz)EventList.supported_export_stacks_metrics  s   € ò
ð 	
r&   r‘   Úmetricc           	      óž  — || j                  «       vr%t        dt        | j                  «       «      z   «      ‚t        j                  dd«      }t	        |d«      5 }| D ]Ù  }|j
                  sŒt        |j
                  «      dkD  sŒ)t        ||j                  dd«      j                  dd«      j                  d	d«      «      }t        |«      dkD  sŒtd
}t        |j
                  «      D ]  }||j                  |«      z  }|dz  }Œ |d d dz   t        t        |«      «      z   }|j                  |dz   «       ŒÛ 	 d d d «       y # 1 sw Y   y xY w)Nzmetric should be one of: z ;	
Ú____r‚   r   r�   ÚdeviceÚxpuÚprivateuse1Ú ú;rP   ú ú
)r�   Ú
ValueErrorÚstrÚ	maketransr‡   ri   r5   ÚgetattrÚreplaceÚintÚreversedÚ	translaterˆ   )	r!   r‘   rž   Útranslate_tabler“   rZ   Úmetric_valueÚ	stack_strÚentrys	            r%   Úexport_stackszEventList.export_stacks  s>  € Ø˜×=Ñ=Ó?Ñ?ÜØ+Ü�d×:Ñ:Ó<Ó=ñ>óð ô Ÿ-™-¨°&Ó9ˆÜ�$˜‹_ð 	2 Øò 2�Ø—9“9¤ S§Y¡Y£°!Ó!3Ü#*ØØŸ™ v¨xÓ8ß ™ ¨Ó1ß ™ °Ó9ó	$�Lô ˜<Ó(¨1Ó,Ø$&˜	Ü%-¨c¯i©iÓ%8ò -˜EØ%¨¯©¸Ó)IÑI˜IØ%¨Ñ,™Ið-ð %.¨c¨r N°SÑ$8¼3¼sÀ<Ó?PÓ;QÑ$Q˜	ØŸ™ 	¨DÑ 0Õ1ñ2÷	2÷ 	2ñ 	2ús    ÁEÁ-EÂA
EÃA(EÅEc                 ól  — | j                   sJ ‚t        t        «      }dt        t        df   fd„}| D ]  }| ||||«         j                  |«       Œ  t        |j                  «       | j                  | j                  | j                  ¬«      }|D ]   }|j                  d| |_        |rŒd|_        Œ" |S )aH  Averages all function events over their keys.

        Args:
            group_by_input_shapes: group entries by
                (event name, input shapes) rather than just event name.
                This is useful to see which input shapes contribute to the runtime
                the most and may help with size-specific optimizations or
                choosing the best candidates for quantization (aka fitting a roof line)

            group_by_stack_n: group by top n stack trace entries

        Returns:
            An EventList containing FunctionEventAvg objects.
        Úreturn.c                 ó^  — t        | j                  «      t        | j                  «      t        | j                  «      t        | j                  «      t        | j
                  «      g}|r$|j                  t        | j                  «      «       |dkD  r|| j                  d | z  }t        |«      S ©Nr   )
r©   rF   rH   rR   Ú	is_legacyÚis_user_annotationrY   Úinput_shapesri   Útuple)rJ   Úgroup_by_input_shapesÚgroup_by_stack_nrF   s       r%   Úget_keyz'EventList.key_averages.<locals>.get_key=  s�   € ä�E—I‘I“Ü�E—M‘MÓ"Ü�E×%Ñ%Ó&Ü�E—O‘OÓ$Ü�E×,Ñ,Ó-ðˆCñ %Ø—
‘
œ3˜u×1Ñ1Ó2Ô3Ø !Ò#Ø�u—{‘{Ð#4Ð$4Ð5Ñ5�Ü˜“:Ðr&   ©r   r   r   Nr¤   )r   r   r   r
   r©   r:   r   Úvaluesr   r   r    ri   r»   )r!   r½   r¾   Ústatsr¿   rZ   Úavg_lists          r%   Úkey_averageszEventList.key_averages+  sË   € ð ×ÒÐÐÜ9DÔEUÓ9Vˆð	ÄuÌSÐRUÈXÁó 	ð ò 	RˆCØ‘'˜#Ð4Ð6FÓGÑH×LÑLÈSÕQð	Rô Ø�L‰L‹NØ×'Ñ'Ø×/Ñ/Ø×'Ñ'ô	
ˆð ò 	&ˆCØŸ	™	Ð"3Ð#3Ð4ˆCŒIÚ(Ø#%�Õ ð	&ð ˆr&   c                 óN   — t        «       }| D ]  }||z  }d|_        Œ d|_        |S )zVAverages all events.

        Returns:
            A FunctionEventAvg object.
        NÚTotal)r   rF   )r!   Ú
total_statrZ   s      r%   Útotal_averagezEventList.total_averageZ  s;   € ô &Ó'ˆ
Øò 	"ˆCØ˜#ÑˆJØ!ˆJ�Nð	"ð !ˆ
ŒØÐr&   )Néd   éK   é7   éP   NF)Fr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r,   r0   r)   r(   r*   Úpropertyrq   r/   r—   r�   r©   r´   rÄ   rÈ   Ú__classcell__)r$   s   @r%   r   r      s‚   ø„ Ù1ô&ò òò"ò(D-òL#ð4 ñ@ó ð@ð
 ØØØ Ø "ØØ#ó(
òT7òr
ð2 #ð 2¨só 2ó0-ö^r&   r   c                 óN   — d}d}| |k\  r	| |z  d›d�S | |k\  r	| |z  d›d�S | d›d�S )ú+Define how to format time in FunctionEvent.g    €„.Ag     @�@z.3fÚsÚmsÚusrœ   )Útime_usÚUS_IN_SECONDÚUS_IN_MSs      r%   Ú_format_timerÛ   h  sU   € à"€LØ€HØ�,ÒØ˜LÑ(¨Ð-¨QÐ/Ð/Ø�(ÒØ˜HÑ$ SÐ)¨Ð,Ð,Ø�cˆ]˜"ÐÐr&   c                 óD   — |dk(  r| dk(  s
J d| › �«       ‚y| dz  |z  d›d�S )rÔ   r   zExpected time_us == 0 but got ÚNaNg      Y@ú.2fú%rœ   )rØ   Útotal_time_uss     r%   Ú_format_time_sharerá   s  s?   € à˜ÒØ˜!Š|ÐGÐ=¸g¸YÐGÓGˆ|ØØ˜‰o Ñ-¨cÐ2°!Ð4Ð4r&   c                 óÒ   — d}d|z  }d|z  }t        | «      |k\  r| dz  |z  d›d�S t        | «      |k\  r| dz  |z  d›d�S t        | «      |k\  r| dz  |z  d›d�S t        | «      dz   S )z&Return a formatted memory size string.i   ç      ð?rÞ   z Gbz Mbz Kbz b)Úabsr©   )ÚnbytesÚKBÚMBÚGBs       r%   Ú_format_memoryré   {  s—   € à	€BØ	�‰€BØ	�‰€BÜ
ˆ6ƒ{�bÒØ˜3‘, Ñ# CÐ(¨Ð,Ð,Ü	ˆV‹˜Ò	Ø˜3‘, Ñ# CÐ(¨Ð,Ð,Ü	ˆV‹˜Ò	Ø˜3‘, Ñ# CÐ(¨Ð,Ð,ä�6‹{˜TÑ!Ð!r&   c                 ó    ‡ — t        ˆ fd„«      S )Nc                 ó.   •— t        t        | ‰«      «      S r.   )rÛ   r«   )r!   r7   s    €r%   rK   z!_attr_formatter.<locals>.<lambda>‹  s   ø€ ¤¬g°d¸DÓ.AÓ!B€ r&   )rÑ   ©r7   s   `r%   Ú_attr_formatterrí   Š  s   ø€ ÜÓBÓCÐCr&   c                   óº   — e Zd ZdZ ed«      Z ed«      Z ed«      Z ed«      Z ed«      Z	 ed«      Z
ed„ «       Zed	„ «       Ze ed
e¬«      d„ «       «       Zy)r   z{Helpers for FunctionEvent and FunctionEventAvg.

    The subclass should define `*_time_total` and `count` attributes.
    Úcpu_timeÚdevice_timeÚcpu_time_totalÚdevice_time_totalrq   Úself_device_time_totalc                 ó\   — | j                   dk(  rdS d| j                  z  | j                   z  S ©Nr   g        rã   )Úcountrñ   r+   s    r%   rï   zFormattedTimesMixin.cpu_time›  s+   € à—j‘j A’oˆsÐQ¨3°×1DÑ1DÑ+DÀtÇzÁzÑ+QÐQr&   c                 ó\   — | j                   dk(  rdS d| j                  z  | j                   z  S rõ   )rö   rò   r+   s    r%   rð   zFormattedTimesMixin.device_timeŸ  s+   € à—j‘j A’oˆsÐT¨3°×1GÑ1GÑ+GÈ$Ï*É*Ñ+TÐTr&   z<`cuda_time` is deprecated, please use `device_time` instead.©Úcategoryc                 ó   — | j                   S r.   )rð   r+   s    r%   Ú	cuda_timezFormattedTimesMixin.cuda_time£  s   € ð ×ÑÐr&   N)rÍ   rÎ   rÏ   rÐ   rí   Úcpu_time_strÚdevice_time_strÚcpu_time_total_strÚdevice_time_total_strÚself_cpu_time_total_strÚself_device_time_total_strrÑ   rï   rð   r   ÚFutureWarningrû   rœ   r&   r%   r   r   Ž  sž   „ ññ
 # :Ó.€LÙ% mÓ4€OÙ(Ð)9Ó:ÐÙ+Ð,?Ó@ÐÙ-Ð.CÓDÐÙ!0Ð1IÓ!JÐàñRó ðRð ñUó ðUð ÙØFØôñ ó	ó ñ
 r&   r   c                   ó   — e Zd Zd„ Zd„ Zy)r   c                 ó    — || _         || _        y r.   )rN   rO   )r!   rN   rO   s      r%   r   zInterval.__init__­  s   € ØˆŒ
Øˆ�r&   c                 ó4   — | j                   | j                  z
  S )z4
        Returns the length of the interval
        )rO   rN   r+   s    r%   r‹   zInterval.elapsed_us±  s   € ð �x‰x˜$Ÿ*™*Ñ$Ð$r&   N)rÍ   rÎ   rÏ   r   r‹   rœ   r&   r%   r   r   ¬  s   „ òó%r&   r   r   )r7   r¡   Údurationc                   óZ  — e Zd ZdZdddddddddddej
                  ddddddddfd„Zd„ Zd„ Zd	„ Z	e
d
„ «       Ze
d„ «       Ze
 ede¬«      d„ «       «       Ze
d„ «       Ze
d„ «       Ze
d„ «       Ze
 ede¬«      d„ «       «       Ze
d„ «       Ze
 ede¬«      d„ «       «       Ze
d„ «       Zd„ Zy)r   z.Profiling information about a single function.Nr   FrP   c                 óÒ  — || _         || _        || _        || _        t	        ||«      | _        || _        || _        g | _        d| _	        g | _
        d | _        || _        || _        || _        || _        |	| _        |
| _        || _        || _        || _        || _        || _        || _        || _        |€|n|| _        || _        || _        || _        d| _        d| _        d| _        y )Nr2   rP   ) ÚidrH   r7   r‰   r   rM   rE   rk   r9   rö   r8   r6   r»   Úconcrete_inputsÚkwinputsri   rg   r   Úcpu_memory_usageÚdevice_memory_usagerQ   rŒ   rj   rR   Údevice_indexÚdevice_resource_idr¹   Úflopsrº   Úself_cpu_percentÚtotal_cpu_percentÚtotal_device_percent)r!   r	  r7   rE   Ústart_usÚend_usrk   r»   ri   rg   r   r  r  rQ   rŒ   rj   rH   rR   r  r  r¹   r  r‰   r
  r  rº   s                             r%   r   zFunctionEvent.__init__¾  sþ   € ð8 ˆŒØ#ˆŒØˆŒ	Ø)ˆŒÜ$,¨X°vÓ$>ˆŒØ!ˆŒØ)3ˆŒØ%'ˆŒØˆŒ
Ø13ˆÔØ37ˆŒØ-9ˆÔØ*9ˆÔØ(0ˆŒØ ˆŒ
ØˆŒ
Ø)3ˆŒØ%5ˆÔØ(;ˆÔ Ø&ˆŒØ(ˆŒØ +ˆÔØ'2ˆÔØ!-ˆÔà(Ð0‰FÐ6Hð 	Ôð  )ˆŒØ$)ˆŒ
Ø2DˆÔØ "ˆÔØ!#ˆÔØ$&ˆÕ!r&   c                 óŽ   — | j                   t        j                  k(  sJ ‚| j                  j	                  t        |||«      «       y r.   )rR   r   rS   r9   rY   r   )r!   r7   r¡   r  s       r%   Úappend_kernelzFunctionEvent.append_kernelü  s5   € Ø×Ñ¤:§>¡>Ò1Ð1Ð1Ø�‰×ÑœF 4¨°Ó:Õ;r&   c                 óÚ   — | j                   t        j                  k(  sJ ‚t        |t        «      sJ ‚|j                   t        j                  k(  sJ ‚| j
                  j                  |«       y)z­Append a CPU child of type FunctionEvent.

        One is supposed to append only direct children to the event to have
        correct self cpu time being reported.
        N)rR   r   rS   Ú
isinstancer   r8   rY   )r!   Úchilds     r%   rW   zFunctionEvent.append_cpu_child   sX   € ð ×Ñ¤:§>¡>Ò1Ð1Ð1Ü˜%¤Ô/Ð/Ð/Ø× Ñ ¤J§N¡NÒ2Ð2Ð2Ø×Ñ× Ñ  Õ'r&   c                 ó²   — | j                   t        j                  k(  sJ ‚t        |t        «      sJ ‚|j                   t        j                  k(  sJ ‚|| _        y)a$  Set the immediate CPU parent of type FunctionEvent.

        One profiling FunctionEvent should have only one CPU parent such that
        the child's range interval is completely inside the parent's. We use
        this connection to determine the event is from top-level op or not.
        N)rR   r   rS   r  r   r6   )r!   rc   s     r%   rX   zFunctionEvent.set_cpu_parent  sK   € ð ×Ñ¤:§>¡>Ò1Ð1Ð1Ü˜&¤-Ô0Ð0Ð0Ø×!Ñ!¤Z§^¡^Ò3Ð3Ð3Ø ˆ�r&   c                 ó¨   — | j                   s| j                  t        j                  k7  ry| j                  t        d„ | j                  D «       «      z
  S )Nr   c              3   ó4   K  — | ]  }|j                   –— Œ y ­wr.   )r  ©rs   r  s     r%   rt   z6FunctionEvent.self_cpu_memory_usage.<locals>.<genexpr>  s   è ø€ ò +
Ø',ˆE×"Õ"ñ+
ùru   )rQ   rR   r   rS   r  rv   r8   r+   s    r%   Úself_cpu_memory_usagez#FunctionEvent.self_cpu_memory_usage  sJ   € à�=Š=˜D×,Ñ,´
·±Ò>ØØ×$Ñ$¤sñ +
Ø04×0AÑ0Aô+
ó (
ñ 
ð 	
r&   c                 ó¨   — | j                   s| j                  t        j                  k7  ry| j                  t        d„ | j                  D «       «      z
  S )Nr   c              3   ó4   K  — | ]  }|j                   –— Œ y ­wr.   )r  r  s     r%   rt   z9FunctionEvent.self_device_memory_usage.<locals>.<genexpr>%  s   è ø€ ò .
Ø*/ˆE×%Õ%ñ.
ùru   )rQ   rR   r   rS   r  rv   r8   r+   s    r%   Úself_device_memory_usagez&FunctionEvent.self_device_memory_usage!  sJ   € à�=Š=˜D×,Ñ,´
·±Ò>ØØ×'Ñ'¬#ñ .
Ø37×3DÑ3Dô.
ó +
ñ 
ð 	
r&   zO`self_cuda_memory_usage` is deprecated. Use `self_device_memory_usage` instead.rø   c                 ó   — | j                   S r.   ©r"  r+   s    r%   Úself_cuda_memory_usagez$FunctionEvent.self_cuda_memory_usage)  s   € ð ×,Ñ,Ð,r&   c                 ór   — | j                   t        j                  k(  r| j                  j	                  «       S yr¸   )rR   r   rS   rM   r‹   r+   s    r%   rñ   zFunctionEvent.cpu_time_total1  s*   € à×ÑœzŸ~™~Ò-Ø—?‘?×-Ñ-Ó/Ð/àr&   c                 ó¨   — | j                   s| j                  t        j                  k7  ry| j                  t        d„ | j                  D «       «      z
  S )Nr   c              3   ó4   K  — | ]  }|j                   –— Œ y ­wr.   )rñ   r  s     r%   rt   z4FunctionEvent.self_cpu_time_total.<locals>.<genexpr><  s   è ø€ ò )
Ø%*ˆE× Õ ñ)
ùru   )rQ   rR   r   rS   rñ   rv   r8   r+   s    r%   rq   z!FunctionEvent.self_cpu_time_total8  sJ   € à�=Š=˜D×,Ñ,´
·±Ò>ØØ×"Ñ"¤Sñ )
Ø.2×.?Ñ.?ô)
ó &
ñ 
ð 	
r&   c                 óÞ  — | j                   s| j                  sy| j                  t        j                  k(  ra| j
                  s9t        d„ | j                  D «       «      t        d„ | j                  D «       «      z   S t        d„ | j                  D «       «      S | j                  t        j                  t        j                  t        j                  fv sJ ‚| j                  j                  «       S )Nr   c              3   ó4   K  — | ]  }|j                   –— Œ y ­wr.   ©r  ©rs   Úkinfos     r%   rt   z2FunctionEvent.device_time_total.<locals>.<genexpr>G  ó   è ø€ ÒD¨e˜5Ÿ>�>ÑDùru   c              3   ó4   K  — | ]  }|j                   –— Œ y ­wr.   ©rò   )rs   r@   s     r%   rt   z2FunctionEvent.device_time_total.<locals>.<genexpr>G  s   è ø€ ò KØ-/�B×(Õ(ñKùru   c              3   ó4   K  — | ]  }|j                   –— Œ y ­wr.   r+  r,  s     r%   rt   z2FunctionEvent.device_time_total.<locals>.<genexpr>L  r.  ru   )rQ   r   rR   r   rS   r¹   rv   r9   r8   ÚCUDAÚPrivateUse1ÚMTIArM   r‹   r+   s    r%   rò   zFunctionEvent.device_time_total@  sÄ   € à�=Š= §¢ØØ×ÑœzŸ~™~Ò-Ø—>’>äÑD°t·|±|ÔDÓDÄsñ KØ37×3DÑ3DôKó Hñ ð ô
 ÑD°t·|±|ÔDÓDÐDà×#Ñ#Ü—‘Ü×&Ñ&Ü—‘ð(ñ ð ð ð
 —?‘?×-Ñ-Ó/Ð/r&   zA`cuda_time_total` is deprecated. Use `device_time_total` instead.c                 ó   — | j                   S r.   r0  r+   s    r%   Úcuda_time_totalzFunctionEvent.cuda_time_totalU  s   € ð ×%Ñ%Ð%r&   c                 óR  — | j                   s| j                  sy| j                  t        j                  k(  r)| j
                  t        d„ | j                  D «       «      z
  S | j                  t        j                  t        j                  t        j                  fv sJ ‚| j
                  S )Nr   c              3   ó4   K  — | ]  }|j                   –— Œ y ­wr.   r0  r  s     r%   rt   z7FunctionEvent.self_device_time_total.<locals>.<genexpr>b  s   è ø€ ò 0Ø,1�×'Õ'ñ0ùru   )rQ   r   rR   r   rS   rò   rv   r8   r2  r3  r4  r+   s    r%   ró   z$FunctionEvent.self_device_time_total]  s•   € à�=Š= §¢ØØ×ÑœzŸ~™~Ò-Ø×)Ñ)¬Cñ 0Ø59×5FÑ5Fô0ó -ñ ð ð ×#Ñ#Ü—‘Ü×&Ñ&Ü—‘ð(ñ ð ð ð
 ×)Ñ)Ð)r&   zK`self_cuda_time_total` is deprecated. Use `self_device_time_total` instead.c                 ó   — | j                   S r.   ©ró   r+   s    r%   r™   z"FunctionEvent.self_cuda_time_totalm  s   € ð ×*Ñ*Ð*r&   c                 ó   — | j                   S r.   rì   r+   s    r%   rF   zFunctionEvent.keyu  s   € à�y‰yÐr&   c           	      óþ  — | j                   }| j                  }| j                  }dj                  g d‘| j                  › ‘d‘| j
                  › ‘d‘| j                  › ‘d‘| j                  › ‘d‘| j                  › ‘d‘| j                  j                  › ‘d‘| j                  j                  › ‘d	‘t        | j                  D �cg c]  }|j                  ‘Œ c}«      › ‘d
‘|› ‘d‘|› ‘d‘| j
                  › ‘d‘| j                  › ‘d‘t        | j                  «      › ‘d‘| j                   › ‘d
‘|› ‘d‘|› ‘d‘| j"                  › ‘d‘| j$                  › ‘d‘| j&                  › ‘d‘| j(                  › ‘d‘«      S c c}w )Nr¤   z<FunctionEvent id=z name=z device_type=z	 node_id=ú
 cpu_time=z
 start_us=z end_us=z cpu_children=r¦   ú_time=z thread=ú input_shapes=ú cpu_memory_usage=ú_memory_usage=z
 is_async=z is_remote=z seq_nr=z is_legacy=ú>)r   rý   r  Újoinr	  r7   rR   rH   rü   rM   rN   rO   r©   r8   rE   r»   r  rQ   rŒ   rj   r¹   )r!   r’   rð   r  r  s        r%   Ú__repr__zFunctionEvent.__repr__y  s–  € Ø—o‘oˆØ×*Ñ*ˆØ"×6Ñ6Ð÷yó yÐ ð y §¡ 	ð y¨ð y°·	±	¨{ð y¸-ð yÈ×HXÑHXÐGYð yÐYbð yÐcg×coÑcoÐbpð yð qð yØ×)Ñ)Ð*ðyØ*4ðyØ59·_±_×5JÑ5JÐ4KðyØKSðyØTX×TcÑTc×TgÑTgÐShðyðiðyä°t×7HÑ7HÖ I¨e §£Ò IÓJÐKðyàKLðyàMXÈMðyàY_ðyà`kÐ_lðyðmðyð —I‘I�;ðyð 'ðyð (,§{¡{ mðyð 4Bðyô CFÀd×FWÑFWÓBXÐAYðyðZ ðyð !%× 5Ñ 5Ð6ð	yð 78ð	yð 9D°}ð	yð ESð	yð TgÐRgð	yðhð	yð
 Ÿ™�ðyð
 '2ðyð
 37·.±.Ð1Aðyð
 BJðyð
 KO×JZÑJZÐI[ðyð
 \gðyð
 hl×guÑguÐfvðyð
 wxôyð	
ùò !Js   ÃE:)rÍ   rÎ   rÏ   rÐ   r   rS   r   r  rW   rX   rÑ   r  r"  r   r  r%  rñ   rq   rò   r6  ró   r™   rF   rD  rœ   r&   r%   r   r   »  sb  „ Ù8ð ØØØØØØØØØØØ—N‘NØØØØØØØØ ó5<'ò|<ò	(ò
!ð ñ
ó ð
ð ñ
ó ð
ð ÙØYØôñ-ó	ó ð
-ð ñó ðð ñ
ó ð
ð ñ0ó ð0ð( ÙØKØôñ&ó	ó ð
&ð ñ*ó ð*ð ÙØUØôñ+ó	ó ð
+ð ñó ðó
r&   r   c                   ó*   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zy)r   z:Used to average stats over multiple FunctionEvent objects.Nc                 óT  — d | _         d| _        d| _        d| _        d| _        d | _        d| _        d| _        d| _        d| _	        d | _
        d | _        d | _        d| _        d| _        d| _        d| _        d | _        d | _        t&        j(                  | _        d| _        d| _        y )Nr   F)rF   rö   rH   rQ   rŒ   r   rñ   rò   rq   ró   r»   ri   rg   r  r  r  r"  r8   r6   r   rS   rR   r¹   r  r+   s    r%   r   zFunctionEventAvg.__init__Š  s«   € Ø"&ˆŒØˆŒ
ØˆŒØ#ˆŒØ$ˆŒØ)-ˆŒØ#$ˆÔØ&'ˆÔØ()ˆÔ Ø+,ˆÔ#Ø7;ˆÔØ%)ˆŒ
Ø$(ˆŒ
Ø%&ˆÔØ()ˆÔ Ø*+ˆÔ"Ø-.ˆÔ%Ø;?ˆÔØ37ˆŒÜ'1§~¡~ˆÔØ$ˆŒØˆ�
r&   c                 ó   — | j                   €Ý|j                   | _         |j                  | _        |j                  | _        |j                  | _        |j                  | _        |j
                  | _        |j                  | _        |j                  | _        |j                  | _        |j                  | _	        |j                  | _
        |j                  | _        |j                  | _        t        |t        t        f«      sJ ‚|j                   | j                   k(  sJ ‚| xj                   |j                   z  c_        | xj"                  |j"                  z  c_        | xj$                  |j$                  z  c_        | xj&                  |j&                  z  c_        | xj(                  |j(                  z  c_        | xj*                  |j*                  z  c_        | xj,                  |j,                  z  c_        | xj.                  |j.                  z  c_        | xj0                  |j0                  z  c_        | j2                  €|j2                  | _        | S |j2                  �| xj2                  |j2                  z  c_        | S r.   )rF   rH   rQ   rŒ   r6   r8   r»   ri   rg   rR   r¹   r   rº   r  r   r   rñ   rò   rq   ró   r  r  r  r"  rö   r  ©r!   Úothers     r%   r:   zFunctionEventAvg.add¢  sâ  € Ø�8‰8Ðð —y‘yˆDŒHØ Ÿ=™=ˆDŒLØ!ŸN™NˆDŒMØ"Ÿ_™_ˆDŒNØ#×.Ñ.ˆDŒOØ %× 2Ñ 2ˆDÔà %× 2Ñ 2ˆDÔØŸ™ˆDŒJØŸ™ˆDŒJØ$×0Ñ0ˆDÔØ"Ÿ_™_ˆDŒNØ#×.Ñ.ˆDŒOØ&+×&>Ñ&>ˆDÔ#ä˜%¤-Ô1AÐ!BÔCÐCÐCØ�y‰y˜DŸH™HÒ$Ð$Ð$Ø×Ò˜u×3Ñ3Ñ3ÕØ×Ò %×"9Ñ"9Ñ9ÕØ× Ò  E×$=Ñ$=Ñ=Õ Ø×#Ò# u×'CÑ'CÑCÕ#Ø×Ò ×!7Ñ!7Ñ7ÕØ× Ò  E×$=Ñ$=Ñ=Õ Ø×"Ò" e×&AÑ&AÑAÕ"Ø×%Ò%¨×)GÑ)GÑGÕ%Ø�
Š
�e—k‘kÑ!�
Ø�:‰:ÐØŸ™ˆDŒJð ˆð �[‰[Ð$Ø�JŠJ˜%Ÿ+™+Ñ%�JØˆr&   c                 ó$   — | j                  |«      S r.   )r:   rH  s     r%   Ú__iadd__zFunctionEventAvg.__iadd__Æ  s   € Ø�x‰x˜‹Ðr&   c                 ó<  — | j                   sdn| j                   }| j                  }| j                  }| j                  }d| j                  › d| j
                  › d| j                  › d|› d|› d|› d|› dt        | j                  «      › d	| j                  › d|› d
|› d�S )Nr�   z<FunctionEventAvg key=z self_cpu_time=r=  z  self_r>  r¦   r?  r@  rA  rB  )
r   r  rý   r  rF   r   rü   r©   r»   r  )r!   r’   Úself_device_timerð   Údevice_memorys        r%   rD  zFunctionEventAvg.__repr__É  sÂ   € Ø$(§O¢O‘f¸¿¹ˆØ×:Ñ:ÐØ×*Ñ*ˆØ×0Ñ0ˆà$ T§X¡X J¨o¸d×>ZÑ>ZÐ=[Ð[eÐfj×fwÑfwÐexð yØ �M Ð(8Ð'9¸¸;¸-ÀvÈkÈ]ÐZhÔilÐmq×m~Ñm~Óið  iAð A Ø $× 5Ñ 5Ð6°a¸°}ÀNÐS`ÐRaÐabðdð	
r&   )r¶   N)rÍ   rÎ   rÏ   rÐ   r   r:   rK  rD  rœ   r&   r%   r   r   ‡  s   „ ÙDóò0"òHó	
r&   r   c                   ó   — e Zd Zd„ Zy)r   c                 óp   — t        |«      dkD  rt        j                  j                  |«      n|| |<   | |   S rf   )r5   ÚtorchÚ_CÚ	_demangle)r!   rF   s     r%   Ú__missing__zStringTable.__missing__Ö  s2   € ô 03°3«x¸!ª|”E—H‘H×&Ñ& sÔ+ÀˆˆS‰	Ø�C‰yÐr&   N)rÍ   rÎ   rÏ   rT  rœ   r&   r%   r   r   Õ  s   „ ór&   r   c                   ó   — e Zd ZdZd„ Zd„ Zy)r   z=Acceleration structure for accessing mem_records in interval.c                 óö   — || _         g | _        g | _        t        |«      dkD  rPt	        t        |«      D ��cg c]  \  }}|d   j                  «       |f‘Œ c}}«      }t        |Ž \  | _        | _        y y c c}}w r¸   )Ú_mem_recordsÚ_start_nsesÚ_indicesr5   rT   r;   Ústart_nsÚzip)r!   Úmem_recordsÚiÚrÚtmps        r%   r   zMemRecordsAcc.__init__á  sn   € Ø'ˆÔØ&(ˆÔØ#%ˆŒÜˆ{Ó˜aÒÜ¼9À[Ó;Q×R±4°1°a˜1˜Q™4Ÿ=™=›?¨AÒ.ÓRÓSˆCÜ.1°3¨iÑ+ˆDÔ˜d�mð  ùÛRs   ·A5
c              #   óö   K  — t        j                  | j                  |dz  «      }t        j                  | j                  |dz  «      }t	        ||«      D ]   }| j
                  | j                  |      –— Œ" y­w)zƒ
        Return all records in the given interval
        To maintain backward compatibility, convert us to ns in function
        iè  N)ÚbisectÚbisect_leftrX  Úbisect_rightr4   rW  rY  )r!   r  r  Ú	start_idxÚend_idxr]  s         r%   Úin_intervalzMemRecordsAcc.in_intervalé  sp   è ø€ ô
 ×&Ñ& t×'7Ñ'7¸ÀD¹ÓIˆ	Ü×%Ñ% d×&6Ñ&6¸À¹ÓFˆÜ�y 'Ó*ò 	6ˆAØ×#Ñ# D§M¡M°!Ñ$4Ñ5Ó5ñ	6ùs   ‚A7A9N)rÍ   rÎ   rÏ   rÐ   r   rf  rœ   r&   r%   r   r   Þ  s   „ ÙGò8ó6r&   r   c                 ó4   ‡ — g d¢}t        ˆ fd„|D «       «      S )N))úautograd/__init__Ú_make_grads)rh  Úbackward)ztorch/tensorrj  )ú_internal/common_utilsÚprof_callable)rk  Úprof_func_call)rk  Úprof_meth_callc              3   ó@   •K  — | ]  }|d    ‰v xr |d   ‰v  –— Œ y­w)r   r2   Nrœ   )rs   r“   r³   s     €r%   rt   z&_filter_stack_entry.<locals>.<genexpr>ý  s)   øè ø€ ÒO¸�A�a‘D˜E�MÒ3 a¨¡d¨e mÔ4ÑOùs   ƒ)Úall)r³   Úfiltered_entriess   ` r%   Ú_filter_stack_entryrr  ô  s   ø€ òÐô ÓOÐ>NÔOÓOÐOr&   z[memory]z[OutOfMemory]c                 ó.   — t         t        ddddddg}| |v S )Nz profiler::_record_function_enterz$profiler::_record_function_enter_newzprofiler::_record_function_exitzaten::is_leafzaten::output_nrzaten::_version)ÚMEMORY_EVENT_NAMEÚOUT_OF_MEMORY_EVENT_NAME)r7   Úfiltered_out_namess     r%   Ú_filter_namerw    s2   € ô 	Ü Ø*Ø.Ø)ØØØð	Ðð Ð%Ð%Ð%r&   c                 óN   — t        «       }||    } |r| j                  d«      rd} | S )NzProfilerStep#zProfilerStep*)r   Ú
startswith)r7   Úwith_wildcardÚstring_tables      r%   Ú_rewrite_namer|    s,   € Ü“=€LØ˜Ñ€DÙØ�?‰?˜?Ô+Ø"ˆDØ€Kr&   c
                 ó¦  ‡‡,‡-‡.‡/‡0— t        | «      dk(  ryt        d„ | D «       «      }
t        d„ | D «       «      }| d   j                  }|s|
rt        d«      ‚t        d„ | D «       «      }‰�t	        t        | ˆfd„d	¬
«      |||¬«      } t        d„ | D «       «      dz   }|�t        ||«      }t        d„ | D «       «      dz   }|�t        ||«      }d}|}d}g }| D ]C  }|j                  €Œt        |j                  «      dkD  sŒ)|j                  |j                  «       ŒE t        |«      dkD  }|r#t        d„ |D «       «      dz   }|�t        ||«      }g d¢}|�|j                  «       nd}|
r"|j                  d|› �d|› d�|› d�|› d�g«       |r1|j                  ddg«       |r|r|j                  |› d�d|› d�g«       |j                  d«       t        d„ | D «       «      }|r|j                  d«       dŠ,dgŠ0dgŠ-‰, gŠ.d1ˆ,ˆ-ˆ.ˆ0fd„	}d„ } ||«       |d d D ]
  } ||«       Œ |r|j                  d!«        ||«       |r|j                  d"«        ||d#¬$«       |rug }| D ]-  }|j                  dkD  sŒ|j                  |j                  «       Œ/ t        |«      dk7  r1 |t        |«      «      \  }}|j                  d%|› �«        ||«       nd&}‰0d   }‰-d   } ‰.d   }!d}g Š/ˆ/fd'„}"d}#d}$| D ]¢  }|#|j                  z  }#|j                  t        j                   k(  r|j"                  r|$|j$                  z  }$ŒK|j                  t        j&                  t        j(                  t        j*                  fv sŒ‡|j,                  rŒ”|$|j$                  z  }$Œ¤ |� |"d(|!z  «        |"|«       |	r |"d(|!z  «        |"d)«        |"| «        |" |j.                  |Ž «        |"| «       d*„ }%d}&| D �]  }|&|k(  r �ný|	r|j0                  �Œ|&d z  }&|j2                  }'|�t        |'«      |d+z
  k\  r|'d|d+z
   d,z   }'t5        |j                  |#«      |_        |j8                  st5        |j:                  |#«      nd|_        |'|j6                  |j>                  |j<                  |j@                  |jB                  g}(|
rXt5        |j$                  |$«      |_"        |(j                  |jF                  |jD                  |jH                  |jJ                  g«       |rv|(j                  tM        |jN                  «      tM        |jP                  «      g«       |r;|r9|(j                  tM        |jR                  «      tM        |jT                  «      g«       |(j                  |jV                  «       |r|(j                  |jX                  «       |r'|(j                  t[        |j\                  «      d| «       |rA|j                  dk  r|(j                  d-«       n |(j                  |j                  z  d.›«       |rAd})t        |j                  «      dkD  r |%|j                  d   |«      })|(j                  |)«        |" |j.                  |(Ž «       |s�Œšdgt        |«      d z
  z  }*|j                  d d D ]"  }+ |" |j.                  |* |%|+|«      gz   Ž «       Œ$ |*j                  d«        |" |j.                  |*Ž «       �Œ  |"| «        |"d/t_        |#«      › �«       |
r) |"d|�|j                  «       nd› d0t_        |$«      › �«       dja                  ‰/«      S )2zUPrint a summary of events (which can be a list of FunctionEvent or FunctionEventAvg).r   r¤   c              3   ó:   K  — | ]  }|j                   d kD  –— Œ y­w©r   Nr:  rr   s     r%   rt   z_build_table.<locals>.<genexpr>0  s   è ø€ ÒO¸u˜%×6Ñ6¸Õ:ÑOùó   ‚c              3   ó:   K  — | ]  }|j                   d kD  –— Œ y­wr  r$  rr   s     r%   rt   z_build_table.<locals>.<genexpr>1  s   è ø€ ÒPÀ˜×7Ñ7¸!Õ;ÑPùr€  z9use_device is None, but there is device performance data.c              3   ól   K  — | ],  }|j                   d uxr t        |j                   «      dkD  –— Œ. y ­wr¸   )r»   r5   rr   s     r%   rt   z_build_table.<locals>.<genexpr>9  s;   è ø€ ò àð 
×	Ñ	 4Ð	'Ò	G¬C°×0BÑ0BÓ,CÀaÑ,GÓ	Gñùs   ‚24Nc                 ó|   •— t        | ‰j                  dd«      j                  dd«      j                  dd«      «      S )Nr�   r¡   r¢   r£   )r«   r¬   )rZ   rx   s    €r%   rK   z_build_table.<locals>.<lambda>B  s5   ø€ ¤ØØ—O‘O F¨HÓ5ß‘W˜U HÓ-ß‘W˜]¨HÓ5ó	!€ r&   T)rF   ÚreverserÀ   c              3   óF   K  — | ]  }t        |j                  «      –— Œ y ­wr.   )r5   rF   ©rs   rZ   s     r%   rt   z_build_table.<locals>.<genexpr>O  s   è ø€ Ò;¨SœC §¡ŸLÑ;ùs   ‚!é   c              3   óX   K  — | ]"  }t        t        |j                  «      «      –— Œ$ y ­wr.   )r5   r©   r»   r†  s     r%   rt   z_build_table.<locals>.<genexpr>S  s    è ø€ ÒK¸Sœc¤# c×&6Ñ&6Ó"7×8ÑKùs   ‚(*é   c              3   ó@   K  — | ]  }t        d „ |D «       «      –— Œ y­w)c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr.   ©r5   )rs   r³   s     r%   rt   z)_build_table.<locals>.<genexpr>.<genexpr>b  s   è ø€ Ò2 5”C˜—JÑ2ùs   ‚N)Úmax)rs   ri   s     r%   rt   z_build_table.<locals>.<genexpr>b  s   è ø€ ÒG°u”Ñ2¨EÔ2×2ÑGùs   ‚)ÚNamez
Self CPU %zSelf CPUzCPU total %z	CPU totalzCPU time avgÚNonezSelf z %z totalz	 time avgzCPU MemzSelf CPU Memz Memz
# of Callsc              3   ó:   K  — | ]  }|j                   d k7  –— Œ y­w)rP   N)rH   r†  s     r%   rt   z_build_table.<locals>.<genexpr>‰  s   è ø€ Ò=¨s˜Ÿ™¨Õ*Ñ=ùr€  zNode IDr„   c                 óœ   •— ‰dxx   d|z   t        | «      z   dz   d‰z  z   z  cc<   ‰dxx   d| z  d‰z  z   z  cc<   ‰dxx   | ‰z   z  cc<   y )Nr   z{: ú}r¦   ú-)r©   )ÚpaddingÚtext_dirÚSPACING_SIZEÚheader_sep_lstÚline_length_lstÚrow_format_lsts     €€€€r%   Ú
add_columnz _build_table.<locals>.add_column“  sh   ø€ Ø�qÓØ�HÑœs 7›|Ñ+¨cÑ1°S¸<Ñ5GÑHñ	
Óð 	�qÓ˜S 7™]¨c°LÑ.@ÑAÑAÓØ˜Ó˜g¨Ñ4Ñ4Ôr&   c                 ó$  — g d¢}| dkD  sJ ‚t        dt        t        j                  | «      dz  t	        t        |«      dz
  «      «      «      }|dk\  r|t        |«      k  sJ ‚t        dt        j                  |«      dz  «      |t        |«         fS )N)ÚFLOPsÚKFLOPsÚMFLOPsÚGFLOPsÚTFLOPsÚPFLOPsr   é   r2   é
   g      À)	r�  ÚminÚmathÚlog10Úfloatr5   ÚpowÚfloorr­   )r  Úflop_headersÚ	log_flopss      r%   Úauto_scale_flopsz&_build_table.<locals>.auto_scale_flopsš  sŠ   € ò
ˆð �qŠyÐˆyÜ˜œ3œtŸz™z¨%Ó0°1Ñ4´e¼CÀÓ<MÐPQÑ<QÓ6RÓSÓTˆ	Ø˜AŠ~ )¬c°,Ó.?Ò"?Ð?Ð?Ü�BœŸ™ IÓ.°Ñ5Ó7¸ÄcÈ)ÃnÑ9UÐVÐVr&   r2   zInput ShapeszSource Locationú<)r•  zTotal Fc                 óJ   •— ‰j                  | «       ‰j                  d«       y )Nr§   )rY   )rÕ   Úresults    €r%   rY   z_build_table.<locals>.appendÉ  s   ø€ Ø�‰�aÔØ�‰�dÕr&   ú=z1This report only display top-level ops statisticsc                 ót   — t        | «      |kD  r)t        | «      |z
  }| |d  } t        | «      dkD  rd| dd  z   } | S )Nr¢  ú...rŒ  )r‘   Úsrc_column_widthÚoffsets      r%   Ú	trim_pathz_build_table.<locals>.trim_pathì  sI   € Üˆt‹9Ð'Ò'Ü˜“YÐ!1Ñ1ˆFØ˜˜�=ˆDÜ�4‹y˜1Š}Ø˜t A B˜xÑ'�Øˆr&   r¢  r²  z--z8.3fzSelf CPU time total: z time total: )rB  )1r5   Úanyr   ÚRuntimeErrorr   rT   r�  r¤  ri   rY   Úupperr=   r  rq   rR   r   rS   r¹   ró   r2  r3  r4  rº   rŠ   r6   rF   rá   r  rQ   rñ   r  r   rþ   rü   r  r  rÿ   rý   ré   r  r  r  r"  rö   rH   r©   r»   rÛ   rC  )1r\   rx   r}   ry   rz   r{   r|   r   r   r~   Úhas_device_timeÚhas_device_memr   Úhas_input_shapesÚname_column_widthÚshapes_column_widthÚDEFAULT_COLUMN_WIDTHÚflops_column_widthr³  ÚstacksrZ   Ú	has_stackÚheadersr’   Úappend_node_idrš  r¬  Ú_Ú	raw_flopsÚflops_scaleÚflops_headerÚ
row_formatÚ
header_sepÚline_lengthrY   Úsum_self_cpu_time_totalÚsum_self_device_time_totalrµ  Úevent_limitr7   Ú
row_valuesÚ	src_fieldÚempty_headersr³   r–  r—  r˜  r¯  r™  s1    `                                          @@@@@r%   r   r      s  ý€ ô ˆ6ƒ{�aÒØäÑOÈÔOÓO€OÜÑPÈÔPÓP€NØ˜‘×%Ñ%€Jñ ™/ÜÐVÓWÐWäñ àôó Ðð
 ÐÜÜØóð ô	ð "Ø)Ø!ô
ˆô  Ñ;°FÔ;Ó;¸aÑ?ÐØÐ(ÜÐ 1Ð3HÓIÐäÑKÀFÔKÓKÈaÑOÐØÐ*Ü!Ð"5Ð7NÓOÐàÐØ-ÐàÐØ€FØò %ˆØ�9‰9Ñ ¤S¨¯©£^°aÓ%7Ø�M‰M˜#Ÿ)™)Õ$ð%ô �F“˜a‘€IÙäÑGÀÔGÓGÈ!ÑKð 	ð  Ð+Ü"Ð#3Ð5IÓJÐò€Gð )3Ð(>�*×"Ñ"Ô$ÀF€KÙØ�‰à˜�}Ð%Ø˜�} BÐ'Ø�-˜vÐ&Ø�-˜yÐ)ð	ô	
ñ Ø�‰àØðô	
ñ ™.Ø�N‰Nà"�m 4Ð(Ø˜K˜=¨Ð-ðôð ‡N�N�<Ô äÑ=°fÔ=Ó=€NÙØ�‰�yÔ!ð €LØ�T€NØ�T€NØ$�}�o€O÷5ð 5òWñ Ð Ô!Ø�Q�Rˆ[ò )ˆÙÐ'Õ(ð)ñ Ø�‰�~Ô&ÙÐ&Ô'áØ�‰Ð(Ô)ÙÐ#¨cÕ2áàˆ	Øò 	,ˆCØ�y‰y˜1‹}Ø× Ñ  §¡Õ+ð	,ô ˆy‹>˜QÒÙ*:¼3¸y»>Ó*JÑ'ˆ[˜,Ø�N‰N˜V L >Ð2Ô3ÙÐ)Õ*àˆJà Ñ"€JØ Ñ"€JØ! !Ñ$€KØ€Jð €Fôð  ÐØ!"ÐØò EˆØ 3×#:Ñ#:Ñ:ÐØ�?‰?œjŸn™nÒ,°·²à&¨#×*DÑ*DÑDÑ&à�O‰Oä—‘Ü×&Ñ&Ü—‘ðòð ×*Ó*ð '¨#×*DÑ*DÑDÑ&ðEð$ ÐÙˆs�[Ñ Ô!ÙˆvŒÙÙˆs�[Ñ Ô!ÙÐBÔCÙ
ˆ:ÔÙ
Ðˆ:×Ñ˜gÐ&Ô'á
ˆ:Ôòð €KØó X6ˆØ˜)Ò#ÚÙ  S§^¡^Ð%?Øà˜1ÑˆKØ�w‰wˆØ Ð,´°T³Ð>SÐVWÑ>WÒ1WØÐ5Ð0°1Ñ4Ð6¸Ñ>ˆDÜ1Ø×#Ñ#Ð%<ó 
ˆÔð
 —<’<ô ˜s×1Ñ1Ð3JÔKàð 	Ôð à× Ñ Ø×'Ñ'à×!Ñ!Ø×"Ñ"Ø×Ñð	
ˆ
ñ Ü'9Ø×*Ñ*Ð,Fó(ˆCÔ$ð ×Ñà×2Ñ2à×,Ñ,Ø×-Ñ-Ø×'Ñ'ðôñ Ø×Ñô # 3×#7Ñ#7Ó8ä" 3×#<Ñ#<Ó=ð	ôñ ™nØ×!Ñ!ô ' s×'>Ñ'>Ó?ä& s×'CÑ'CÓDð	ôð 	×ÑØ�I‰Iô	
ñ Ø×Ñ˜cŸk™kÔ*ÙØ×Ñœc #×"2Ñ"2Ó3Ð4HÐ5HÐIÔJÙØ�y‰y˜AŠ~Ø×!Ñ! $Õ'à×!Ñ! S§Y¡Y°Ñ%<¸TÐ$BÔDÙØˆIÜ�3—9‘9‹~ Ò!Ù% c§i¡i°¡lÐ4DÓE�	Ø×Ñ˜iÔ(ÙÐ ˆz× Ñ  *Ð-Ô.ãØ˜D¤C¨£L°1Ñ$4Ñ5ˆMØŸ™ 1 2˜ò �ÙØ%�J×%Ñ%Ø'©9°UÐ<LÓ+MÐ*NÑNðõðð × Ñ  Ô$ÙÐ$�:×$Ñ$ mÐ4Ö5ðqX6ñt ˆ:ÔÙ
Ð"¤<Ð0GÓ#HÐ"IÐJÔKÙÙØ¨*Ð*@�J×$Ñ$Ô&ÀfÐMð NÜ'Ð(BÓCÐDðFô	
ð �7‰7�6‹?Ðr&   )F)	NNrÉ   rÊ   rË   rÌ   FFF)'ra  rU   r¥  Úcollectionsr   r   Úoperatorr   Útypingr   r   r   r	   r
   Útyping_extensionsr   rQ  Útorch.autogradr   Ú__all__Úlistr   rÛ   rá   ré   rí   r   r   r   r   r   r   r   rr  rt  ru  rw  r|  r   rœ   r&   r%   ú<module>rØ     sè   ðã Û Û ß /Ý ß 3Õ 3Ý (ã Ý %ò	€ôK�ô Kò\
ò5ò"òD÷ ñ  ÷<	%ñ 	%ñ 
�HÒ<Ó	=€ôI
Ð'ô I
ôXK
Ð*ô K
ô\�+ô ÷6ñ 6ò,	Pð Ð Ø*Ð ò&ó&ð ØØØØØØØØôvr&   