Ë
    g^(hO¡  ã                   óh  — 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
 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ÚOptional)Ú
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         €úZ/var/www/skyplay_api_hub/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 ]ã  }	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+   )rB   Ú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ÚendrF   s    r"   rH   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Úgroupbyr2   rJ   rK   rL   r   Úappend_cpu_childr3   rC   Úset_cpu_parentÚappend)r   ÚevtÚsync_eventsÚeventsÚthreadsÚ
_thread_idÚthread_eventsÚthread_events_Úcurrent_eventsrG   Úparents              r"   r%   z EventList._populate_cpu_childrenD   ss  € ð$ ö
àØ—<’< C§O¡O´z·~±~Ò$Eò ð
ˆð 
ô
 ØÜ˜8Ó$ô
ˆô ×#Ñ#ØÑCô
ˆð  *1ò 	-Ñ%ˆJ˜Ü#ØÙQôˆNð 35ˆNØ'ò -�Ü˜.Ó)¨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 ©Nr/   )Úscoper3   )rW   Ú	bw_parents    €r"   rd   z6EventList._set_backward_stacktraces.<locals>.bw_parentŠ   s*   ø€ Øˆ{ØØ—‘˜a’Ø�
á  §¡Ó0Ð0r#   )ÚstackÚsequence_nrrB   Ú
fwd_thread)r   Ú
fwd_stacksrW   ÚtÚprd   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©Ú.0rG   s     r"   ú	<genexpr>z0EventList.self_cpu_time_total.<locals>.<genexpr>¥   s   è ø€ Ò?°�5×,Õ,Ñ?ùó   ‚)Úsumr(   s    r"   rm   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   rt   ru   rv   rw   rx   ry   rz   s           r"   r,   zEventList.table§   s;   € ô: ØØØØ!5Ø"7Ø$;ØØ×/Ñ/Ø×'Ñ'Ø"7ô
ð 	
r#   c                 ó^  — ddl }| j                  sdn| j                  }t        |d«      5 }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": {}}, r/   é   ú])Úosr   ÚopenÚwriteÚ
trace_nameÚformatrJ   rK   Ú
elapsed_usÚ	is_remoterB   rE   r6   r2   ÚseekÚtellÚSEEK_SETÚtruncate)r   Úpathr‚   Údevice_nameÚfÚnext_idrW   Ú_s           r"   Úexport_chrome_tracezEventList.export_chrome_traceÑ   s�  € ó 	à$(×$4Ò$4‘f¸$×:JÑ:JˆÜ�$˜‹_ð +	 Øˆ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÷W+	÷ +	ñ +	ús   «E/F#Æ#F,c                 ó
   — g d¢S )N)rm   Ú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Ú ú;rM   ú ú
)r˜   Ú
ValueErrorÚstrÚ	maketransrƒ   re   r2   ÚgetattrÚreplaceÚintÚreversedÚ	translater„   )	r   r�   r™   Útranslate_tabler�   rW   Ú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                 ó†  ‡— | j                   sJ ‚t        t        «      }dt        t        df   fˆfd„}| D ]  Š| |‰|||«         j                  ‰«       Œ! t        |j                  «       | j                  | j                  | j                  ¬«      }|D ])  Š‰j                  d| ‰_        |sd‰_        |rŒ#d‰_        Œ+ |S )aî  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

            group_by_overload_name: Differentiate operators by their overload name e.g. aten::add.Tensor
            and aten::add.out will be aggregated separately

        Returns:
            An EventList containing FunctionEventAvg objects.
        Úreturn.c                 óš  •— t        | j                  «      t        | j                  «      t        | j                  «      t        | j                  «      t        | j
                  «      g}|r|j                  ‰j                  «       |r$|j                  t        | j                  «      «       |dkD  r|| j                  d | z  }t        |«      S ©Nr   )r¤   rC   rE   rO   Ú	is_legacyÚis_user_annotationrV   Úoverload_nameÚinput_shapesre   Útuple)rG   Úgroup_by_input_shapesÚgroup_by_stack_nÚgroup_by_overload_namerC   rW   s        €r"   Úget_keyz'EventList.key_averages.<locals>.get_keyC  s¥   ø€ ô �E—I‘I“Ü�E—M‘MÓ"Ü�E×%Ñ%Ó&Ü�E—O‘OÓ$Ü�E×,Ñ,Ó-ðˆCñ &Ø—
‘
˜3×,Ñ,Ô-Ù$Ø—
‘
œ3˜u×1Ñ1Ó2Ô3Ø !Ò#Ø�u—{‘{Ð#4Ð$4Ð5Ñ5�Ü˜“:Ðr#   ©r   r   r   NrŸ   )r   r   r   r¸   r¤   r7   r
   Úvaluesr   r   r   re   r·   r¶   )r   r¹   rº   r»   Ústatsr¼   Úavg_listrW   s          @r"   Úkey_averageszEventList.key_averages)  sÞ   ø€ ð. ×ÒÐÐÜ9DÔEUÓ9Vˆð	ä”3˜�8‰_õ	ð$ ò 	ˆCØÙØÐ.Ð0@ÐBXóñ÷ ‰c�#�hð	ô Ø�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   rC   )r   Ú
total_statrW   s      r"   Útotal_averagezEventList.total_averagej  s;   € ô &Ó'ˆ
Øò 	"ˆCØ˜#ÑˆJØ!ˆJ�Nð	"ð !ˆ
ŒØÐr#   )Néd   éK   é7   éP   NF)Fr   F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r)   r-   r&   r%   r'   Úpropertyrm   r,   r’   r˜   r¤   r¯   rÁ   rÅ   Ú__classcell__)r!   s   @r"   r
   r
      s�   ø„ Ù1ô&ò òò"ò(C-òJ#ð4 ñ@ó ð@ð
 ØØØ Ø "ØØ#ó(
òT6òp
ð2 #ð 2¨só 2ð4 $ØØ$ó	?öB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Ø   x  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?   € à˜ÒØ˜!Š|Ð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   r4   s    €r"   rH   z!_attr_formatter.<locals>.<lambda>›  s   ø€ ¤¬g°d¸DÓ.AÓ!B€ r#   )rÎ   ©r4   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_totalrm   Ú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+   )rK   rL   )r   rK   rL   s      r"   r   zInterval.__init__½  s   € ØˆŒ
Øˆ�r#   c                 ó4   — | j                   | j                  z
  S )z4
        Returns the length of the interval
        )rL   rK   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   )r4   rœ   Údurationc                   ó\  — e Zd ZdZd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   FrM   c                 óà  — || _         || _        || _        || _        || _        t        ||«      | _        || _        || _        g | _	        d| _
        g | _        d | _        || _        || _        || _        |	| _        |
| _        || _        || _        || _        || _        || _        || _        || _        || _        |€|n|| _        || _        || _        || _        d| _        d| _        d| _         y )Nr/   rM   )!ÚidrE   r4   r¶   r…   r   rJ   rB   rg   r6   ró   r5   r3   r·   Úconcrete_inputsÚkwinputsre   rc   r   Úcpu_memory_usageÚdevice_memory_usagerN   rˆ   rf   rO   Údevice_indexÚdevice_resource_idr´   Úflopsrµ   Úself_cpu_percentÚtotal_cpu_percentÚtotal_device_percent)r   r  r4   rB   Ústart_usÚend_usr¶   rg   r·   re   rc   r   r	  r
  rN   rˆ   rf   rE   rO   r  r  r´   r  r…   r  r  rµ   s                              r"   r   zFunctionEvent.__init__Î  s  € ð: ˆŒØ#ˆŒØˆŒ	Ø"/ˆÔØ)ˆŒÜ$,¨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+   )rO   r	   rP   r6   rV   r   )r   r4   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)rO   r	   rP   Ú
isinstancer   r5   rV   )r   Úchilds     r"   rT   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)rO   r	   rP   r  r   r3   )r   r_   s     r"   rU   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	  ©ro   r  s     r"   rp   z6FunctionEvent.self_cpu_memory_usage.<locals>.<genexpr>/  s   è ø€ ò +
Ø',ˆE×"Õ"ñ+
ùrq   )rN   rO   r	   rP   r	  rr   r5   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"   rp   z9FunctionEvent.self_device_memory_usage.<locals>.<genexpr>7  s   è ø€ ò .
Ø*/ˆE×%Õ%ñ.
ùrq   )rN   rO   r	   rP   r
  rr   r5   r(   s    r"   Úself_device_memory_usagez&FunctionEvent.self_device_memory_usage3  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³   )rO   r	   rP   rJ   r‡   r(   s    r"   rî   zFunctionEvent.cpu_time_totalC  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"   rp   z4FunctionEvent.self_cpu_time_total.<locals>.<genexpr>N  s   è ø€ ò )
Ø%*ˆE× Õ ñ)
ùrq   )rN   rO   r	   rP   rî   rr   r5   r(   s    r"   rm   z!FunctionEvent.self_cpu_time_totalJ  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  ©ro   Úkinfos     r"   rp   z2FunctionEvent.device_time_total.<locals>.<genexpr>Y  ó   è ø€ ÒD¨e˜5Ÿ>�>ÑDùrq   c              3   ó4   K  — | ]  }|j                   –— Œ y ­wr+   ©rï   )ro   r=   s     r"   rp   z2FunctionEvent.device_time_total.<locals>.<genexpr>Y  s   è ø€ ò KØ-/�B×(Õ(ñKùrq   c              3   ó4   K  — | ]  }|j                   –— Œ y ­wr+   r(  r)  s     r"   rp   z2FunctionEvent.device_time_total.<locals>.<genexpr>^  r+  rq   )rN   r   rO   r	   rP   r´   rr   r6   r5   ÚCUDAÚPrivateUse1ÚMTIArJ   r‡   r(   s    r"   rï   zFunctionEvent.device_time_totalR  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+   r-  r(   s    r"   Úcuda_time_totalzFunctionEvent.cuda_time_totalg  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+   r-  r  s     r"   rp   z7FunctionEvent.self_device_time_total.<locals>.<genexpr>t  s   è ø€ ò 0Ø,1�×'Õ'ñ0ùrq   )rN   r   rO   r	   rP   rï   rr   r5   r/  r0  r1  r(   s    r"   rð   z$FunctionEvent.self_device_time_totalo  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_total  s   € ð ×*Ñ*Ð*r#   c                 ó   — | j                   S r+   ré   r(   s    r"   rC   zFunctionEvent.key‡  s   € à�y‰yÐr#   c           	      ó  — | j                   }| j                  }| j                  }dj                  g d‘| j                  › ‘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 overload_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  r4   r¶   rO   rE   rù   rJ   rK   rL   r¤   r5   rB   r·   r	  rN   rˆ   rf   r´   )r   rŽ   rí   r
  r  s        r"   Ú__repr__zFunctionEvent.__repr__‹  sÁ  € Ø—o‘oˆØ×*Ñ*ˆØ"×6Ñ6Ð÷yó yÐ ð y §¡ 	ð y¨ð y°·	±	¨{ð y¸/ð yÈ$×J\ÑJ\ÐI]ð yð ^ð yØ×+Ñ+Ð,ðyØ,5ðyØ6:·l±l°^ðyØCMðyØNR×N_ÑN_ÐM`ðyðaðyàŸ™×-Ñ-Ð.ðyà.6ðyà7;·±×7JÑ7JÐ6KðyðLðyô  °t×7HÑ7HÖ I¨e §£Ò IÓJÐKðyð LMðyð NYÈMðyð Z`ðyð alÐ_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   ÃF	)rÊ   rË   rÌ   rÍ   r	   rP   r   r  rT   rU   rÎ   r  r  r   rÿ   r"  rî   rm   rï   r3  rð   r”   rC   rA  r—   r#   r"   r   r   Ë  se  „ Ù8ð ØØØØØØØØØØØØ—N‘NØØØØØØØØ ó7>'ò@<ò	(ò
!ð ñ
ó ð
ð ñ
ó ð
ð ÙØ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                 ób  — d | _         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)rC   ró   rE   rN   rˆ   r   rî   rï   rm   rð   r·   r¶   re   rc   r	  r
  r  r  r5   r3   r	   rP   rO   r´   r  r(   s    r"   r   zFunctionEventAvg.__init__�  s³   € Ø"&ˆŒØˆŒ
ØˆŒØ#ˆŒØ$ˆŒØ)-ˆŒØ#$ˆÔØ&'ˆÔØ()ˆÔ Ø+,ˆÔ#Ø7;ˆÔØ,0ˆÔØ%)ˆŒ
Ø$(ˆŒ
Ø%&ˆÔØ()ˆÔ Ø*+ˆÔ"Ø-.ˆÔ%Ø;?ˆÔØ37ˆŒÜ'1§~¡~ˆÔØ$ˆŒØˆ�
r#   c                 ó"  — | j                   €î|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j0                  |j0                  z  c_        | xj2                  |j2                  z  c_        | j4                  €|j4                  | _        | S |j4                  �| xj4                  |j4                  z  c_        | S r+   )rC   rE   rN   rˆ   r3   r5   r¶   r·   re   rc   rO   r´   r   rµ   r  r   r   rî   rï   rm   rð   r	  r
  r  r  ró   r  ©r   Úothers     r"   r7   zFunctionEventAvg.add¶  sð  € Ø�8‰8Ðð —y‘yˆDŒHØ Ÿ=™=ˆDŒLØ!ŸN™NˆDŒMØ"Ÿ_™_ˆDŒNØ#×.Ñ.ˆDŒOØ %× 2Ñ 2ˆDÔà!&×!4Ñ!4ˆ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+   )r7   rE  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=  r>  r?  )
r   rþ   rú   r
  rC   rý   rù   r¤   r·   r	  )r   rŽ   Úself_device_timerí   Údevice_memorys        r"   rA  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   r7   rH  rA  r—   r#   r"   r   r   š  s   „ ÙDóò2$òLó	
r#   r   c                   ó   — e Zd Zd„ Zy)r   c                 óp   — t        |«      dkD  rt        j                  j                  |«      n|| |<   | |   S rb   )r2   ÚtorchÚ_CÚ	_demangle)r   rC   s     r"   Ú__missing__zStringTable.__missing__ì  s2   € ô 03°3«x¸!ª|”E—H‘H×&Ñ& sÔ+ÀˆˆS‰	Ø�C‰yÐr#   N)rÊ   rË   rÌ   rQ  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Ú_indicesr2   rQ   r8   Ú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_leftrU  Úbisect_rightr1   rT  rV  )r   r  r  Ú	start_idxÚend_idxrZ  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   rc  r—   r#   r"   r   r   ô  s   „ ÙGò8ó6r#   r   c                 ó4   ‡ — g d¢}t        ˆ fd„|D «       «      S )N))úautograd/__init__Ú_make_grads)re  Úbackward)ztorch/tensorrg  )ú_internal/common_utilsÚprof_callable)rh  Úprof_func_call)rh  Úprof_meth_callc              3   ó@   •K  — | ]  }|d    ‰v xr |d   ‰v  –— Œ y­w)r   r/   Nr—   )ro   r�   r®   s     €r"   rp   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_entryro  
  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)r4   Úfiltered_out_namess     r"   Ú_filter_namert    s2   € ô 	Ü Ø*Ø.Ø)ØØØð	Ðð Ð%Ð%Ð%r#   c                 óN   — t        «       }||    } |r| j                  d«      rd} | S )NzProfilerStep#zProfilerStep*)r   Ú
startswith)r4   Úwith_wildcardÚstring_tables      r"   Ú_rewrite_namery  -  s,   € Ü“=€LØ˜Ñ€DÙØ�?‰?˜?Ô+Ø"ˆDØ€Kr#   c
                 ól  ‡‡.‡/‡0‡1‡2— t        | «      dk(  ryt        d„ | D «       «      }
t        d„ | D «       «      }| d   j                  }|s|
rt        d«      ‚t        d„ | D «       «      }t        d„ | D «       «      }‰�t	        t        | ˆfd	„d
¬«      |||¬«      } t        d„ | D «       «      dz   }|�t        ||«      }t        d„ | D «       «      dz   }|�t        ||«      }d}|}d}| D �cg c]4  }|j                  €Œt        |j                  «      dkD  sŒ)|j                  ‘Œ6 }}t        |«      dkD  }|r#t        d„ |D «       «      dz   }|�t        ||«      }dg}|r|j                  d«       |g d¢z  }|�|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Š2dgŠ/‰. gŠ0d4ˆ.ˆ/ˆ0ˆ2fd!„	}d"„ } ||«       |r ||«       |d#|z   d D ]
  } ||«       Œ |r|j                  d$«        ||«       |r|j                  d%«        ||d&¬'«       |rj| D �cg c]  }|j                  dkD  sŒ|j                  ‘Œ  }}t        |«      dk7  r1 |t        |«      «      \  }}|j                  d(|› �«        ||«       nd)}‰2d   } ‰/d   }!‰0d   }"d}g Š1ˆ1f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 �n4|	r|j0                  �Œ|'d#z  }'|j2                  }(|�t        |(«      |d.z
  k\  r|(d|d.z
   d/z   }(t5        |j                  |$«      |_        |j8                  st5        |j:                  |$«      nd|_        |(g})|r0|j>                  }*|�t        |*«      |d.z
  k\  r|*d|d.z
   d/z   }*|)|*gz  })|)|j6                  |j@                  |j<                  |jB                  |jD                  gz  })|
rXt5        |j$                  |%«      |_#        |)j                  |jH                  |jF                  |jJ                  |jL                  g«       |rv|)j                  tO        |jP                  «      tO        |jR                  «      g«       |r;|r9|)j                  tO        |jT                  «      tO        |jV                  «      g«       |)j                  |jX                  «       |r|)j                  |jZ                  «       |r'|)j                  t]        |j^                  «      d| «       |rA|j                  dk  r|)j                  d0«       n |)j                  |j                  z  d1›«       |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.                  |,Ž «       �Œ?  |#|!«        |#d2ta        |$«      › �«       |
r) |#d|�|j                  «       nd› d3ta        |%«      › �«       djc                  ‰1«      S c c}w c c}w )5zUPrint a summary of events (which can be a list of FunctionEvent or FunctionEventAvg).r   rŸ   c              3   ó:   K  — | ]  }|j                   d kD  –— Œ y­w©r   Nr7  rn   s     r"   rp   z_build_table.<locals>.<genexpr>F  s   è ø€ ÒO¸u˜%×6Ñ6¸Õ:ÑOùó   ‚c              3   ó:   K  — | ]  }|j                   d kD  –— Œ y­wr|  r!  rn   s     r"   rp   z_build_table.<locals>.<genexpr>G  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·   r2   rn   s     r"   rp   z_build_table.<locals>.<genexpr>O  s;   è ø€ ò àð 
×	Ñ	 4Ð	'Ò	G¬C°×0BÑ0BÓ,CÀaÑ,GÓ	Gñùó   ‚24c              3   ól   K  — | ],  }|j                   d uxr t        |j                   «      dkD  –— Œ. y ­wr³   )r¶   r2   rn   s     r"   rp   z_build_table.<locals>.<genexpr>T  s;   è ø€ ò àð 
×	Ñ	 DÐ	(Ò	I¬S°×1DÑ1DÓ-EÈÑ-IÓ	Iñùr€  Nc                 ó|   •— t        | ‰j                  dd«      j                  dd«      j                  dd«      «      S )Nr}   rœ   r�   rž   )r¦   r§   )rW   rt   s    €r"   rH   z_build_table.<locals>.<lambda>]  s5   ø€ ¤ØØ—O‘O F¨HÓ5ß‘W˜U HÓ-ß‘W˜]¨HÓ5ó	!€ r#   T)rC   Úreverser½   c              3   óF   K  — | ]  }t        |j                  «      –— Œ y ­wr+   )r2   rC   ©ro   rW   s     r"   rp   z_build_table.<locals>.<genexpr>j  s   è ø€ Ò;¨SœC §¡ŸLÑ;ùs   ‚!é   c              3   óX   K  — | ]"  }t        t        |j                  «      «      –— Œ$ y ­wr+   )r2   r¤   r·   r…  s     r"   rp   z_build_table.<locals>.<genexpr>n  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+   ©r2   )ro   r®   s     r"   rp   z)_build_table.<locals>.<genexpr>.<genexpr>|  s   è ø€ Ò2 5”C˜—JÑ2ùs   ‚N)Úmax)ro   re   s     r"   rp   z_build_table.<locals>.<genexpr>|  s   è ø€ ÒG°u”Ñ2¨EÔ2×2ÑGùs   ‚ÚNamezOverload Name)z
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)rM   N)rE   r…  s     r"   rp   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   é   r/   é
   g      À)	rŒ  ÚminÚmathÚlog10Úfloatr2   Ú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#   r/   zInput ShapeszSource Locationú<)r”  zTotal Fc                 óJ   •— ‰j                  | «       ‰j                  d«       y )Nr¢   )rV   )rÒ   Úresults    €r"   rV   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: )r?  )2r2   Úanyr   ÚRuntimeErrorr
   rQ   rŒ  r£  re   rV   Úupperr:   r  rm   rO   r	   rP   r´   rð   r/  r0  r1  rµ   r†   r3   rC   rÞ   r  rN   rî   r  r¶   rý   rû   rù   r  rþ   rü   rú   ræ   r	  r  r
  r  ró   rE   r¤   r·   rØ   r@  )3rY   rt   ry   ru   rv   rw   rx   r   r   rz   Úhas_device_timeÚhas_device_memr   Úhas_input_shapesÚhas_overload_namesÚname_column_widthÚshapes_column_widthÚDEFAULT_COLUMN_WIDTHÚflops_column_widthr²  rW   ÚstacksÚ	has_stackÚheadersrŽ   Úappend_node_idr™  r«  r‘   Ú	raw_flopsÚflops_scaleÚflops_headerÚ
row_formatÚ
header_sepÚline_lengthrV   Úsum_self_cpu_time_totalÚsum_self_device_time_totalr´  Úevent_limitr4   Ú
row_valuesr¶   Ú	src_fieldÚempty_headersr®   r•  r–  r—  r®  r˜  s3    `                                            @@@@@r"   r{   r{   6  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ÐàÐØ-ÐàÐà#öØ s§y¡yÑ'<ÄÀSÇYÁYÃÐRSÓASˆ�	‹	ð€Fð ô �F“˜a‘€IÙäÑGÀÔGÓGÈ!ÑKð 	ð  Ð+Ü"Ð#3Ð5IÓJÐàˆh€GÙØ�‰�Ô'Øò ñ €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Ð+Ñ+Ð-Ð.ò )ˆÙÐ'Õ(ð)ñ Ø�‰�~Ô&ÙÐ&Ô'áØ�‰Ð(Ô)ÙÐ#¨cÕ2áà*0ÖB 3°C·I±IÀ³M�S—Y“YÐBˆ	ÐBÜˆ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Øó b6ˆØ˜)Ò#ÚÙ  S§^¡^Ð%?Øà˜1ÑˆKØ�w‰wˆØ Ð,´°T³Ð>SÐVWÑ>WÒ1WØÐ5Ð0°1Ñ4Ð6¸Ñ>ˆDä1Ø×#Ñ#Ð%<ó 
ˆÔð
 —<’<ô ˜s×1Ñ1Ð3JÔKàð 	Ôð �Vˆ
ÙØ×-Ñ-ˆMà%Ð1Ü˜Ó&Ð*?À!Ñ*CÒCà -Ð.KÐ1FÈÑ1JÐ LÈuÑ T�Ø˜=˜/Ñ)ˆJØà× Ñ Ø×'Ñ'à×!Ñ!Ø×"Ñ"Ø×Ñð
ñ 	
ˆ
ñ Ü'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ðEb6ñH ˆ:ÔÙ
Ð"¤<Ð0GÓ#HÐ"IÐJÔKÙÙØ¨*Ð*@�J×$Ñ$Ô&ÀfÐMð NÜ'Ð(BÓCÐDðFô	
ð �7‰7�6‹?ÐùòMùò~ Cs   Ã,^,Ã>^,Ä^,Ê^1Ê*^1)F)	NNrÆ   rÇ   rÈ   rÉ   FFF)$r^  rR   r¤  Úcollectionsr   r   Úoperatorr   Útypingr   r   Útyping_extensionsr   rN  Útorch.autogradr	   Ú__all__Úlistr
   rØ   rÞ   ræ   rê   r   r   r   r   r   r   r   ro  rq  rr  rt  ry  r{   r—   r#   r"   ú<module>r×     så   ðã Û Û ß /Ý ß  Ý (ã Ý %ò	€ô[�ô [ò|
ò5ò"òD÷ ñ  ÷<	%ñ 	%ñ 
�HÒ<Ó	=€ôL
Ð'ô L
ô^N
Ð*ô N
ôb�+ô ÷6ñ 6ò,	Pð Ð Ø*Ð ò&ó&ð ØØØØØØØØôFr#   