§
    Ÿ²ÅjJ   ã                   ó¦  — 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&dS ))é    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                 óö   •— |                      dd ¦  «        }|                      dd¦  «        }|                      dd¦  «        } t          ¦   «         j        |i |¤Ž || _        || _        d| _        || _        d S )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         €úMC:\Projects\Historical\venv\Lib\site-packages\torch/autograd/profiler_util.pyr   zEventList.__init__   s   ø€ Ø—Z’Z ¨dÑ3Ô3ˆ
ØŸšÐ$4°eÑ<Ô<ˆØ—Z’Z ¨eÑ4Ô4ˆ
Ø�‰ŒÔ˜$Ð) &Ð)Ð)Ð)Ø%ˆÔØ-ˆÔØ ˆÔØ%ˆÔÐÐó    c                 óŒ   — |                       ¦   «          |                      ¦   «          |                      ¦   «          d| _        d S )NT)Ú_populate_cpu_childrenÚ_remove_dup_nodesÚ_set_backward_stacktracesr   ©r!   s    r%   Ú_build_treezEventList._build_tree'   sF   € Ø×#Ò#Ñ%Ô%Ð%Ø×ÒÑ Ô Ð Ø×&Ò&Ñ(Ô(Ð(ØˆÔÐÐr&   c                 ó*   — |                       ¦   «         S ©N)Útabler+   s    r%   Ú__str__zEventList.__str__-   s   € Ø�zŠz‰|Œ|Ðr&   c                 óš  ‡— 	 t          ¦   «         Št          t          | ¦  «        ¦  «        D ]Ä}| |         j        �µ| |         j        j        | |         j        k    r”t          | |         j        j        ¦  «        dk    rq| |         j        | |         j        _        | |         j        | |         j        _        | |         j        D ]}| |         j        |_        Œ‰                     |¦  «         ŒÅt          ‰¦  «        dk    rd S ˆfd„t          | ¦  «        D ¦   «         }|  	                    ¦   «          |  
                    |¦  «         �ŒJ)NTé   r   c                 ó"   •— g | ]\  }}|‰v¯	|‘ŒS © r4   )Ú.0ÚindÚevÚ	to_deletes      €r%   ú
<listcomp>z/EventList._remove_dup_nodes.<locals>.<listcomp>@   s'   ø€ ÐRÐRÐR™w˜s B¸SÈ	Ð=QÐ=Q˜Ð=QÐ=QÐ=Qr&   )ÚsetÚrangeÚlenÚ
cpu_parentÚnameÚcpu_childrenÚkernelsÚaddÚ	enumerateÚclearÚextend)r!   ÚidxÚchÚnew_evtsr8   s       @r%   r)   zEventList._remove_dup_nodes0   s1  ø€ ð	"Ý™œˆIÝ�S ™YœYÑ'Ô'ð 
'ð 
'�à˜”IÔ(Ð4Ø˜Sœ	Ô,Ô1°T¸#´Y´^ÒCÐCÝ˜D œIÔ0Ô=Ñ>Ô>À!ÒCÐCà8<¸S¼	Ô8N�D˜”IÔ(Ô5Ø37¸´9Ô3D�D˜”IÔ(Ô0Ø" 3œiÔ4ð =ð =˜Ø(,¨S¬	Ô(<˜œ˜Ø—M’M #Ñ&Ô&Ð&øÝ�9‰~Œ~ Ò"Ð"Ø�ØRÐRÐRÐR­)°D©/¬/ÐRÑRÔRˆHØ�JŠJ‰LŒLˆLØ�KŠK˜Ñ!Ô!Ð!ñ#	"r&   c                 ón  — d„ | D ¦   «         }t          |t          d¦  «        ¬¦  «        }t          j        |d„ ¬¦  «        }|D ]ð\  }}t          |d„ ¬¦  «        }g }d}|D ]Ò}	t	          |¦  «        dk    r¨|d         }
|	j        j        |
j        j        k    s|	j        j        |
j        j        k    r|                     ¦   «          nD|
 	                    |	¦  «         |	j
        �J d	|	j        › �¦   «         ‚|	                     |
¦  «         nt	          |¦  «        dk    °¨|                     |	¦  «         ŒÓŒñdS )
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.
        c                 óJ   — g | ] }|j         s|j        t          j        k    ¯|‘Œ!S r4   )Úis_asyncÚdevice_typer   ÚCPU©r5   Úevts     r%   r9   z4EventList._populate_cpu_children.<locals>.<listcomp>T   s=   € ð 
ð 
ð 
àØ”<ð
ð %(¤Oµz´~Ò$EÐ$Eð à$EÐ$EÐ$Er&   Úthread)Úkeyc                 ó   — | j         | j        fS r.   )rO   Únode_id©Úevents    r%   ú<lambda>z2EventList._populate_cpu_children.<locals>.<lambda>a   s   €  u¤|°U´]Ð&C€ r&   c                 ó4   — | j         j        | j         j         gS r.   )Ú
time_rangeÚstartÚendrS   s    r%   rU   z2EventList._populate_cpu_children.<locals>.<lambda>s   s   €  5Ô#3Ô#9¸EÔ<LÔ<PÐ;PÐ"Q€ r&   r   éÿÿÿÿNz(There is already a CPU parent event for )Úsortedr   Ú	itertoolsÚgroupbyr<   rW   rX   rY   r   Úappend_cpu_childr=   rP   Úset_cpu_parentÚappend)r!   Úsync_eventsÚeventsÚthreadsÚ	thread_idÚthread_eventsÚthread_events_Úcurrent_eventsÚcur_endrT   Úparents              r%   r(   z EventList._populate_cpu_childrenD   s¢  € ð 
ð 
àð
ñ 
ô 
ˆõ
 ØÝ˜8Ñ$Ô$ð
ñ 
ô 
ˆõ Ô#ØÐCÐCð
ñ 
ô 
ˆð  )0ð 	-ð 	-Ñ$ˆI�}Ý#ØØQÐQðñ ô ˆNð 35ˆNØˆGØ'ð -ð -�Ý˜.Ñ)Ô)¨AÒ-Ð-Ø+¨BÔ/�FàÔ(Ô.°&Ô2CÔ2GÒGÐGØ Ô+Ô/°&Ô2CÔ2GÒGÐGð '×*Ò*Ñ,Ô,Ð,Ð,à×/Ò/°Ñ6Ô6Ð6à!Ô,Ð4Ð4ØQÀeÄiÐQÐQñ 5Ô4Ð4à×,Ò,¨VÑ4Ô4Ð4Øõ ˜.Ñ)Ô)¨AÒ-Ð-ð  ×%Ò% eÑ,Ô,Ð,Ð,ð#-ð	-ð 	-r&   c                 ó   ‡— ˆfd„Ši }| D ]0} ‰|¦  «        €#|j         �|j        |j        f}||vr
|j         ||<   Œ1| D ]?} ‰|¦  «        }|�0|j        €J ‚|j        |j        f}||v r||         |_         Œ8g |_         Œ@d S )Nc                 óF   •— | €d S | j         dk    r| S  ‰| j        ¦  «        S ©Nr2   )Úscoper=   )rN   Ú	bw_parents    €r%   rn   z6EventList._set_backward_stacktraces.<locals>.bw_parent‹   s/   ø€ Øˆ{Ø�tØ”˜a’�Ø�
à �y ¤Ñ0Ô0Ð0r&   )ÚstackÚsequence_nrrO   Ú
fwd_thread)r!   Ú
fwd_stacksrN   ÚtÚprn   s        @r%   r*   z#EventList._set_backward_stacktracesŠ   sÑ   ø€ ð	1ð 	1ð 	1ð 	1ð 	1ð ˆ
Øð 	.ð 	.ˆCØˆy˜‰~Œ~Ð%¨#¬)Ð*?Ø”_ c¤jÐ1�Ø˜JÐ&Ð&Ø$'¤I�J˜q‘Møàð 	#ð 	#ˆCØ�	˜#‘”ˆAØˆ}Ø”|Ð/Ð/Ð/Ø”] A¤LÐ1�Ø˜
�?�?Ø *¨1¤�C”I�Ià "�C”Iøð	#ð 	#r&   c                 ó4   — t          d„ | D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S r.   )Úself_cpu_time_total©r5   rT   s     r%   ú	<genexpr>z0EventList.self_cpu_time_total.<locals>.<genexpr>¦   s%   è è € Ð?Ð?°�5Ô,Ð?Ð?Ð?Ð?Ð?Ð?r&   )Úsumr+   s    r%   rw   zEventList.self_cpu_time_total¤   s   € åÐ?Ð?¸$Ð?Ñ?Ô?Ñ?Ô?Ð?r&   Néd   éK   é7   éP   Fc                 óH   — 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!   r€   r�   r‚   rƒ   r„   r…   r†   s           r%   r/   zEventList.table¨   s?   € õ: ØØØØ!5Ø"7Ø$;ØØÔ/ØÔ'Ø"7ð
ñ 
ô 
ð 	
r&   c                 ó  — ddl }| j        sdn| j        }t          |d¦  «        5 }g }d}|                     d¦  «         | D ]Â}|j        €Œ
|                     d                     |j        |j        j        |j                             ¦   «         |j	        s|j
        nd|j        › d|j
        › d	�¦  «        ¦  «         |j        D ]@}|                     d
|j        › d|j        j        › d|j
        › d|› d|› d�¦  «         |dz  }ŒAŒÃt          | ¦  «        dk    rD|                     |                     ¦   «         dz
  |j        ¦  «         |                     ¦   «          |                     d¦  «         ddd¦  «         dS # 1 swxY w Y   dS )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ÚformatrW   rX   Ú
elapsed_usÚ	is_remoterO   rR   r@   r<   ÚseekÚtellÚSEEK_SETÚtruncate)	r!   ÚpathrŽ   Údevice_nameÚfÚchrome_eventsÚnext_idrN   Úks	            r%   Úexport_chrome_tracezEventList.export_chrome_traceÒ   s   € ð 	ˆ	ˆ	ˆ	à$(Ô$4ÐJ�f�f¸$Ô:JˆÝ�$˜‰_Œ_ð ,	 ØˆMØˆGð �GŠG�C‰LŒLˆLØð !!ð !!�Ø”>Ð)ØØ—’ð'÷ (.¢vØœØœÔ,Øœ×1Ò1Ñ3Ô3à"œ}ðR˜œ
˜
àQ¨#¬+ÐQÐQÀ3Ä:ÐQÐQÐQñ(ô (ñô ð ð  œð !ð !�Að —G’Gð( c¤nð (ð (à!$¤Ô!5ð(ð (ð #&¤*ð(ð (ð
 ")ð(ð (ð +6ð(ð (ð (ñ	ô 	ð 	ð ˜q‘L�G�Gð!õ �4‰yŒy˜1Š}ˆ}à—’�q—v’v‘x”x !‘| R¤[Ñ1Ô1Ð1Ø—
’
‘”�Ø�GŠG�C‰LŒLˆLðY,	ð ,	ð ,	ñ ,	ô ,	ð ,	ð ,	ð ,	ð ,	ð ,	ð ,	ð ,	øøøð ,	ð ,	ð ,	ð ,	ð ,	ð ,	s   ¥EE=Å=FÆFc                 ó
   — g d¢S )N)rw   Úself_cuda_time_totalÚself_xpu_time_totalÚself_privateuse1_time_totalr4   r+   s    r%   Úsupported_export_stacks_metricsz)EventList.supported_export_stacks_metrics  s   € ð
ð 
ð 
ð 	
r&   r™   Úmetricc           	      ó  — ||                       ¦   «         vr1t          dt          |                       ¦   «         ¦  «        z   ¦  «        ‚t                               dd¦  «        }t	          |d¦  «        5 }| D ]ø}|j        rït          |j        ¦  «        dk    r×t          ||                     dd¦  «                             dd¦  «                             d	d¦  «        ¦  «        }t          |¦  «        dk    rxd
}t          |j        ¦  «        D ]}||                     |¦  «        z  }|dz  }Œ |d d…         dz   t          t          |¦  «        ¦  «        z   }|                     |dz   ¦  «         Œù	 d d d ¦  «         d S # 1 swxY w Y   d S )Nzmetric should be one of: z ;	
Ú____rŠ   r   r‰   ÚdeviceÚxpuÚprivateuse1Ú ú;rZ   ú ú
)r¤   Ú
ValueErrorÚstrÚ	maketransr�   ro   r<   ÚgetattrÚreplaceÚintÚreversedÚ	translater�   )	r!   r™   r¥   Útranslate_tabler›   rN   Úmetric_valueÚ	stack_strÚentrys	            r%   Úexport_stackszEventList.export_stacks  sÓ  € Ø˜×=Ò=Ñ?Ô?Ð?Ð?ÝØ+Ý�d×:Ò:Ñ<Ô<Ñ=Ô=ñ>ñô ð õ Ÿ-š-¨°&Ñ9Ô9ˆÝ�$˜‰_Œ_ð 	2 Øð 2ð 2�Ø”9ð 2¥ S¤Y¡¤°!Ò!3Ð!3Ý#*ØØŸš v¨xÑ8Ô8ß š ¨Ñ1Ô1ß š °Ñ9Ô9ñ	$ô $�Lõ ˜<Ñ(Ô(¨1Ò,Ð,Ø$&˜	Ý%-¨c¬iÑ%8Ô%8ð -ð -˜EØ%¨¯ª¸Ñ)IÔ)IÑI˜IØ%¨Ñ,˜I˜IØ$-¨c¨r¨c¤N°SÑ$8½3½sÀ<Ñ?PÔ?PÑ;QÔ;QÑ$Q˜	ØŸš 	¨DÑ 0Ñ1Ô1Ð1øð2ð	2ð 	2ð 	2ñ 	2ô 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2øøøð 	2ð 	2ð 	2ð 	2ð 	2ð 	2s   Á3C<E=Å=FÆFr   c                 ór  — | j         sJ ‚t          t          ¦  «        }dt          t          df         fd„}| D ](}| ||||¦  «                                      |¦  «         Œ)t          |                     ¦   «         | j        | j	        | j
        ¬¦  «        }|D ]}|j        d|…         |_        |s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                 ód  — t          | j        ¦  «        t          | j        ¦  «        t          | j        ¦  «        t          | j        ¦  «        t          | j        ¦  «        g}|r'|                     t          | j        ¦  «        ¦  «         |dk    r|| j        d |…         z  }t          |¦  «        S ©Nr   )
r°   rP   rR   rK   Ú	is_legacyÚis_user_annotationr`   Úinput_shapesro   Útuple)rT   Úgroup_by_input_shapesÚgroup_by_stack_nrP   s       r%   Úget_keyz'EventList.key_averages.<locals>.get_key=  s    € å�E”I‘”Ý�E”MÑ"Ô"Ý�EÔ%Ñ&Ô&Ý�E”OÑ$Ô$Ý�EÔ,Ñ-Ô-ðˆCð %ð 4Ø—
’
�3˜uÔ1Ñ2Ô2Ñ3Ô3Ð3Ø !Ò#Ð#Ø�u”{Ð#4Ð$4Ð#4Ô5Ñ5�Ý˜‘:”:Ðr&   ©r   r   r   Nr«   )r   r   r   r
   r°   rA   r   Úvaluesr   r   r    ro   rÂ   )r!   rÄ   rÅ   ÚstatsrÆ   rN   Úavg_lists          r%   Úkey_averageszEventList.key_averages+  sñ   € ð ÔÐÐÐÝ9DÕEUÑ9VÔ9Vˆð	ÅuÍSÐRUÈXÄð 	ð 	ð 	ð 	ð ð 	Rð 	RˆCØ�'�'˜#Ð4Ð6FÑGÔGÔH×LÒLÈSÑQÔQÐQÐQåØ�LŠL‰NŒNØÔ'ØÔ/ØÔ'ð	
ñ 
ô 
ˆð ð 	&ð 	&ˆCØœ	Ð"3Ð#3Ð"3Ô4ˆCŒIØ(ð &Ø#%�Ô øØˆr&   c                 óR   — t          ¦   «         }| D ]}||z  }d|_        Œd|_        |S )zVAverages all events.

        Returns:
            A FunctionEventAvg object.
        NÚTotal)r   rP   )r!   Ú
total_statrN   s      r%   Útotal_averagezEventList.total_averageZ  s>   € õ &Ñ'Ô'ˆ
Øð 	"ð 	"ˆCØ˜#ÑˆJØ!ˆJŒNˆNØ ˆ
ŒØÐr&   )Nr{   r|   r}   r~   NF)Fr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r,   r0   r)   r(   r*   Úpropertyrw   r/   rŸ   r¤   r°   r»   rË   rÏ   Ú__classcell__)r$   s   @r%   r   r      s<  ø€ € € € € Ø1Ð1ð&ð &ð &ð &ð &ð ð  ð  ðð ð ð"ð "ð "ð(D-ð D-ð D-ðL#ð #ð #ð4 ð@ð @ñ „Xð@ð
 ØØØ Ø "ØØ#ð(
ð (
ð (
ð (
ðT7ð 7ð 7ðr
ð 
ð 
ð2 #ð 2¨sð 2ð 2ð 2ð 2ð0-ð -ð -ð -ð^ð ð ð ð ð ð r&   r   c                 óR   — 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Úusr4   )Útime_usÚUS_IN_SECONDÚUS_IN_MSs      r%   Ú_format_timerÞ   h  sb   € à"€LØ€HØ�,ÒÐØ˜LÑ(Ð/Ð/Ð/Ð/Ð/Ø�(ÒÐØ˜HÑ$Ð,Ð,Ð,Ð,Ð,ØÐÐÐÐÐr&   c                 óP   — |dk    r| dk    sJ d| › �¦   «         ‚dS | dz  |z  d›d�S )r×   r   zExpected time_us == 0 but got ÚNaNg      Y@ú.2fú%r4   )rÛ   Útotal_time_uss     r%   Ú_format_time_sharerä   s  sI   € à˜ÒÐØ˜!Š|ˆ|ˆ|ÐG¸gÐGÐG‰|Œ|ˆ|ØˆuØ˜‰o Ñ-Ð4Ð4Ð4Ð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‘, Ñ#Ð,Ð,Ð,Ð,Ð,Ý	ˆV‰Œ˜Ò	Ð	Ø˜3‘, Ñ#Ð,Ð,Ð,Ð,Ð,Ý	ˆV‰Œ˜Ò	Ð	Ø˜3‘, Ñ#Ð,Ð,Ð,Ð,Ð,å�6‰{Œ{˜TÑ!Ð!r&   c                 ó(   ‡ — t          ˆ fd„¦  «        S )Nc                 ó>   •— t          t          | ‰¦  «        ¦  «        S r.   )rÞ   r²   )r!   r>   s    €r%   rU   z!_attr_formatter.<locals>.<lambda>‹  s   ø€ ¥­g°d¸DÑ.AÔ.AÑ!BÔ!B€ r&   )rÔ   ©r>   s   `r%   Ú_attr_formatterrð   Š  s   ø€ ÝÐBÐBÐBÐBÑCÔ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dS )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_totalrw   Úself_device_time_totalc                 ó@   — | j         dk    rdnd| j        z  | j         z  S ©Nr   g        ræ   )Úcountrô   r+   s    r%   rò   zFormattedTimesMixin.cpu_time›  s%   € à”j A’o�oˆsˆs¨3°Ô1DÑ+DÀtÄzÑ+QÐQr&   c                 ó@   — | j         dk    rdnd| j        z  | j         z  S rø   )rù   rõ   r+   s    r%   ró   zFormattedTimesMixin.device_timeŸ  s%   € à”j A’o�oˆsˆs¨3°Ô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þ   r4   r&   r%   r   r   Ž  sû   € € € € € ðð ð
 #�? :Ñ.Ô.€LØ%�o mÑ4Ô4€OØ(˜Ð)9Ñ:Ô:ÐØ+˜OÐ,?Ñ@Ô@ÐØ-˜oÐ.CÑDÔDÐØ!0 Ð1IÑ!JÔ!JÐàðRð Rñ „XðRð ðUð Uñ „XðUð Ø€ZØFØðñ ô ð ð  ñ	ô ñ „Xð
 ð  ð  r&   r   c                   ó   — e Zd Zd„ Zd„ ZdS )r   c                 ó"   — || _         || _        d S r.   )rX   rY   )r!   rX   rY   s      r%   r   zInterval.__init__­  s   € ØˆŒ
ØˆŒˆˆr&   c                 ó    — | j         | j        z
  S )z4
        Returns the length of the interval
        )rY   rX   r+   s    r%   r“   zInterval.elapsed_us±  s   € ð Œx˜$œ*Ñ$Ð$r&   N)rÐ   rÑ   rÒ   r   r“   r4   r&   r%   r   r   ¬  s2   € € € € € ðð ð ð%ð %ð %ð %ð %r&   r   r   )r>   r¨   Údurationc                   ó²  — 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dS )r   z.Profiling information about a single function.Nr   FrZ   c                 óÜ  — || _         || _        || _        || _        t	          ||¦  «        | _        || _        || _        g | _        d| _	        g | _
        d | _        || _        || _        || _        || _        |	| _        |
| _        || _        || _        || _        || _        || _        || _        || _        |€|n|| _        || _        || _        || _        d| _        d| _        d| _        d S )Nr2   rZ   ) ÚidrR   r>   r‘   r   rW   rO   rq   r@   rù   r?   r=   rÂ   Úconcrete_inputsÚkwinputsro   rm   r   Úcpu_memory_usageÚdevice_memory_usagerJ   r”   rp   rK   Údevice_indexÚdevice_resource_idrÀ   ÚflopsrÁ   Úself_cpu_percentÚtotal_cpu_percentÚtotal_device_percent)r!   r  r>   rO   Ústart_usÚend_usrq   rÂ   ro   rm   r   r  r  rJ   r”   rp   rR   rK   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ˆFÐ6Hð 	Ôð  )ˆŒØ$)ˆŒ
Ø2DˆÔØ "ˆÔØ!#ˆÔØ$&ˆÔ!Ð!Ð!r&   c                 ó†   — | j         t          j        k    sJ ‚| j                             t          |||¦  «        ¦  «         d S r.   )rK   r   rL   r@   r`   r   )r!   r>   r¨   r	  s       r%   Úappend_kernelzFunctionEvent.append_kernelü  s@   € ØÔ¥:¤>Ò1Ð1Ð1Ð1ØŒ×Ò�F 4¨°Ñ:Ô:Ñ;Ô;Ð;Ð;Ð;r&   c                 óÄ   — | j         t          j        k    sJ ‚t          |t          ¦  «        sJ ‚|j         t          j        k    sJ ‚| j                             |¦  «         dS )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)rK   r   rL   Ú
isinstancer   r?   r`   )r!   Úchilds     r%   r^   zFunctionEvent.append_cpu_child   sc   € ð Ô¥:¤>Ò1Ð1Ð1Ð1Ý˜%¥Ñ/Ô/Ð/Ð/Ð/ØÔ ¥J¤NÒ2Ð2Ð2Ð2ØÔ× Ò  Ñ'Ô'Ð'Ð'Ð'r&   c                 óž   — | j         t          j        k    sJ ‚t          |t          ¦  «        sJ ‚|j         t          j        k    sJ ‚|| _        dS )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)rK   r   rL   r  r   r=   )r!   ri   s     r%   r_   zFunctionEvent.set_cpu_parent  sQ   € ð Ô¥:¤>Ò1Ð1Ð1Ð1Ý˜&¥-Ñ0Ô0Ð0Ð0Ð0ØÔ!¥Z¤^Ò3Ð3Ð3Ð3Ø ˆŒˆˆr&   c                 óŠ   — | j         s| j        t          j        k    rdS | j        t          d„ | j        D ¦   «         ¦  «        z
  S )Nr   c              3   ó$   K  — | ]}|j         V — Œd S r.   )r  ©r5   r  s     r%   ry   z6FunctionEvent.self_cpu_memory_usage.<locals>.<genexpr>  s6   è è € ð +
ð +
Ø',ˆEÔ"ð+
ð +
ð +
ð +
ð +
ð +
r&   )rJ   rK   r   rL   r  rz   r?   r+   s    r%   Úself_cpu_memory_usagez#FunctionEvent.self_cpu_memory_usage  s[   € àŒ=ð 	˜DÔ,µ
´Ò>Ð>Ø�1ØÔ$¥sð +
ð +
Ø04Ô0Að+
ñ +
ô +
ñ (
ô (
ñ 
ð 	
r&   c                 óŠ   — | j         s| j        t          j        k    rdS | j        t          d„ | j        D ¦   «         ¦  «        z
  S )Nr   c              3   ó$   K  — | ]}|j         V — Œd S r.   )r  r!  s     r%   ry   z9FunctionEvent.self_device_memory_usage.<locals>.<genexpr>%  s6   è è € ð .
ð .
Ø*/ˆEÔ%ð.
ð .
ð .
ð .
ð .
ð .
r&   )rJ   rK   r   rL   r  rz   r?   r+   s    r%   Úself_device_memory_usagez&FunctionEvent.self_device_memory_usage!  s[   € àŒ=ð 	˜DÔ,µ
´Ò>Ð>Ø�1ØÔ'­#ð .
ð .
Ø37Ô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                 ób   — | j         t          j        k    r| j                             ¦   «         S dS r¿   )rK   r   rL   rW   r“   r+   s    r%   rô   zFunctionEvent.cpu_time_total1  s+   € àÔ�zœ~Ò-Ð-Ø”?×-Ò-Ñ/Ô/Ð/à�1r&   c                 óŠ   — | j         s| j        t          j        k    rdS | j        t          d„ | j        D ¦   «         ¦  «        z
  S )Nr   c              3   ó$   K  — | ]}|j         V — Œd S r.   )rô   r!  s     r%   ry   z4FunctionEvent.self_cpu_time_total.<locals>.<genexpr><  s6   è è € ð )
ð )
Ø%*ˆEÔ ð)
ð )
ð )
ð )
ð )
ð )
r&   )rJ   rK   r   rL   rô   rz   r?   r+   s    r%   rw   z!FunctionEvent.self_cpu_time_total8  s[   € àŒ=ð 	˜DÔ,µ
´Ò>Ð>Ø�1ØÔ"¥Sð )
ð )
Ø.2Ô.?ð)
ñ )
ô )
ñ &
ô &
ñ 
ð 	
r&   c                 óš  — | j         s| j        sdS | j        t          j        k    rb| j        s=t          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                             ¦   «         S )Nr   c              3   ó$   K  — | ]}|j         V — Œd S r.   ©r	  ©r5   Úkinfos     r%   ry   z2FunctionEvent.device_time_total.<locals>.<genexpr>G  ó$   è è € ÐDÐD¨e˜5œ>ÐDÐDÐDÐDÐDÐDr&   c              3   ó$   K  — | ]}|j         V — Œd S r.   ©rõ   )r5   rF   s     r%   ry   z2FunctionEvent.device_time_total.<locals>.<genexpr>G  s>   è è € ð Kð KØ-/�BÔ(ðKð Kð Kð Kð Kð Kr&   c              3   ó$   K  — | ]}|j         V — Œd S r.   r.  r/  s     r%   ry   z2FunctionEvent.device_time_total.<locals>.<genexpr>L  r1  r&   )rJ   r   rK   r   rL   rÀ   rz   r@   r?   ÚCUDAÚPrivateUse1ÚMTIArW   r“   r+   s    r%   rõ   zFunctionEvent.device_time_total@  só   € àŒ=ð 	 ¤ð 	Ø�1ØÔ�zœ~Ò-Ð-Ø”>ð EåÐDÐD°t´|ÐDÑDÔDÑDÔDÅsð Kð KØ37Ô3DðKñ Kô Kñ Hô Hñ ð õ
 ÐDÐD°t´|ÐDÑDÔDÑDÔDÐDàÔ#Ý”ÝÔ&Ý”ð(ð ð ð ð ð
 ”?×-Ò-Ñ/Ô/Ð/r&   zA`cuda_time_total` is deprecated. Use `device_time_total` instead.c                 ó   — | j         S r.   r3  r+   s    r%   Úcuda_time_totalzFunctionEvent.cuda_time_totalU  s   € ð Ô%Ð%r&   c                 óþ   — | j         s| j        sdS | 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   ó$   K  — | ]}|j         V — Œd S r.   r3  r!  s     r%   ry   z7FunctionEvent.self_device_time_total.<locals>.<genexpr>b  s6   è è € ð 0ð 0Ø,1�Ô'ð0ð 0ð 0ð 0ð 0ð 0r&   )rJ   r   rK   r   rL   rõ   rz   r?   r5  r6  r7  r+   s    r%   rö   z$FunctionEvent.self_device_time_total]  s¡   € àŒ=ð 	 ¤ð 	Ø�1ØÔ�zœ~Ò-Ð-ØÔ)­Cð 0ð 0Ø59Ô5Fð0ñ 0ô 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%   rP   zFunctionEvent.keyu  s
   € àŒyÐr&   c                 ó  — | j         }| j        }| j        }d                     g d‘| j        › ‘d‘| j        › ‘d‘| j        › ‘d‘| j        › ‘d‘| j        › ‘d‘| j	        j
        › ‘d‘| j	        j        › ‘d	‘t          d
„ | j        D ¦   «         ¦  «        › ‘d‘|› ‘d‘|› ‘d‘| j        › ‘d‘| j        › ‘d‘t          | j        ¦  «        › ‘d‘| j        › ‘d‘|› ‘d‘|› ‘d‘| j        › ‘d‘| j        › ‘d‘| j        › ‘d‘| j        › ‘d‘¦  «        S )Nr«   z<FunctionEvent id=z name=z device_type=z	 node_id=ú
 cpu_time=z
 start_us=z end_us=z cpu_children=c                 ó   — g | ]	}|j         ‘Œ
S r4   )r  r!  s     r%   r9   z*FunctionEvent.__repr__.<locals>.<listcomp>€  s   € Ð IÐ IÐ I¨e ¤Ð IÐ IÐ Ir&   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  r>   rK   rR   rÿ   rW   rX   rY   r°   r?   rO   rÂ   r  rJ   r”   rp   rÀ   )r!   rš   ró   r  s       r%   Ú__repr__zFunctionEvent.__repr__y  sÓ  € Ø”oˆØÔ*ˆØ"Ô6Ððy÷ yò yð yð yð y ¤ð yð yð yð y°´	ð yð yð yð yÈÔHXð yð yð yð yÐcgÔcoð yð yð yð yØÔ)ðyð yð yð yØ59´_Ô5Jðyð yð yð yØTXÔTcÔTgðyð yð yð yåÐ IÐ I°tÔ7HÐ IÑ IÔ IÑJÔJðyð yð yð yàMXðyð yð yð yà`kðyð yð yð yð ”Iðyð yð yð yð (,¤{ðyð yð yð yõ CFÀdÔFWÑBXÔBXðyð yð yð yð !%Ô 5ð	yð yð yð yð 9Dð	yð yð yð yð Tgð	yð yð yð yð
 œðyð yð yð yð
 37´.ðyð yð yð yð
 KOÔJZðyð yð yð yð
 hlÔguðyð yð yð yñ yô yð	
r&   )rÐ   rÑ   rÒ   rÓ   r   rL   r   r  r^   r_   rÔ   r"  r%  r   r  r(  rô   rw   rõ   r9  rö   r¡   rP   rH  r4   r&   r%   r   r   »  s%  € € € € € Ø8Ð8ð ØØØØØØØØØØØ”NØØØØØØØØ ð5<'ð <'ð <'ð <'ð|<ð <ð <ð	(ð 	(ð 	(ð
!ð 
!ð 
!ð ð
ð 
ñ „Xð
ð ð
ð 
ñ „Xð
ð Ø€ZØYØðñ ô ð-ð -ñ	ô ñ „Xð
-ð ðð ñ „Xðð ð
ð 
ñ „Xð
ð ð0ð 0ñ „Xð0ð( Ø€ZØKØðñ ô ð&ð &ñ	ô ñ „Xð
&ð ð*ð *ñ „Xð*ð Ø€ZØUØðñ ô ð+ð +ñ	ô ñ „Xð
+ð ðð ñ „Xðð
ð 
ð 
ð 
ð 
r&   r   c                   ó,   — e Zd ZdZdd„Zd„ Zd„ Zd„ ZdS )	r   z:Used to average stats over multiple FunctionEvent objects.r½   Nc                 óN  — d | _         d| _        d| _        d| _        d| _        d | _        d| _        d| _        d| _        d| _	        d | _
        d | _        d | _        d| _        d| _        d| _        d| _        d | _        d | _        t&          j        | _        d| _        d| _        d S )Nr   F)rP   rù   rR   rJ   r”   r   rô   rõ   rw   rö   rÂ   ro   rm   r  r  r"  r%  r?   r=   r   rL   rK   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j        |j        z  c_        | j        €|j        | _        n|j        �| xj        |j        z  c_        | S r.   )rP   rR   rJ   r”   r=   r?   rÂ   ro   rm   rK   rÀ   r   rÁ   r  r   r   rô   rõ   rw   rö   r  r  r"  r%  rù   r  ©r!   Úothers     r%   rA   zFunctionEventAvg.add¢  s¸  € ØŒ8Ðð ”yˆDŒHØ œ=ˆDŒLØ!œNˆDŒMØ"œ_ˆDŒNØ#Ô.ˆDŒOØ %Ô 2ˆDÔà %Ô 2ˆDÔØœˆDŒJØœˆDŒJØ$Ô0ˆDÔØ"œ_ˆDŒNØ#Ô.ˆDŒOØ&+Ô&>ˆDÔ#å˜%¥-Õ1AÐ!BÑCÔCÐCÐCÐCØŒy˜DœHÒ$Ð$Ð$Ð$ØÐÔ˜uÔ3Ñ3ÐÔØÐÔ %Ô"9Ñ9ÐÔØÐ Ô  EÔ$=Ñ=Ð Ô ØÐ#Ô# uÔ'CÑCÐ#Ô#ØÐÔ Ô!7Ñ7ÐÔØÐ Ô  EÔ$=Ñ=Ð Ô ØÐ"Ô" eÔ&AÑAÐ"Ô"ØÐ%Ô%¨Ô)GÑGÐ%Ô%Øˆ
Œ
�e”kÑ!ˆ
Œ
ØŒ:ÐØœˆDŒJˆJØŒ[Ð$ØˆJŒJ˜%œ+Ñ%ˆJŒJØˆr&   c                 ó,   — |                       |¦  «        S r.   )rA   rL  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_rB  r­   rC  rD  rE  rF  )
r   r  r   r  rP   r  rÿ   r°   rÂ   r  )r!   rš   Úself_device_timeró   Údevice_memorys        r%   rH  zFunctionEventAvg.__repr__É  sø   € Ø$(¤OÐH�f�f¸¼ˆØÔ:ÐØÔ*ˆØÔ0ˆðd T¤Xð dð d¸dÔ>Zð dð dÐfjÔfwð dð dØ ðdð dØ(8ðdð dØ;Fðdð dØNYðdð dÝilÐmqÔm~ÑiÔiðdð dà $Ô 5ðdð dà8Cðdð dàS`ðdð dð dð	
r&   )r½   N)rÐ   rÑ   rÒ   rÓ   r   rA   rO  rH  r4   r&   r%   r   r   ‡  s\   € € € € € ØDÐDðð ð ð ð0"ð "ð "ðHð ð ð	
ð 	
ð 	
ð 	
ð 	
r&   r   c                   ó   — e Zd Zd„ ZdS )r   c                 ó€   — t          |¦  «        dk    rt          j                             |¦  «        n|| |<   | |         S rl   )r<   ÚtorchÚ_CÚ	_demangle)r!   rP   s     r%   Ú__missing__zStringTable.__missing__Ö  s:   € õ 03°3©x¬x¸!ª|¨|•E”H×&Ò& sÑ+Ô+Ð+ÀˆˆS‰	Ø�CŒyÐr&   N)rÐ   rÑ   rÒ   rX  r4   r&   r%   r   r   Õ  s#   € € € € € ðð ð ð ð r&   r   c                   ó   — e Zd ZdZd„ Zd„ ZdS )r   z=Acceleration structure for accessing mem_records in interval.c                 óÒ   — || _         g | _        g | _        t          |¦  «        dk    r>t	          d„ t          |¦  «        D ¦   «         ¦  «        }t          |Ž \  | _        | _        d S d S )Nr   c                 óL   — g | ]!\  }}|d                                ¦   «         |f‘Œ"S ©r   )Ústart_ns)r5   ÚiÚrs      r%   r9   z*MemRecordsAcc.__init__.<locals>.<listcomp>æ  s-   € ÐRÐRÐR±4°1°a˜1˜Qœ4Ÿ=š=™?œ?¨AÐ.ÐRÐRÐRr&   )Ú_mem_recordsÚ_start_nsesÚ_indicesr<   r[   rB   Úzip)r!   Úmem_recordsÚtmps      r%   r   zMemRecordsAcc.__init__á  so   € Ø'ˆÔØ&(ˆÔØ#%ˆŒÝˆ{ÑÔ˜aÒÐÝÐRÐR½9À[Ñ;QÔ;QÐRÑRÔRÑSÔSˆCÝ.1°3¨iÑ+ˆDÔ˜dœm˜m˜mð  Ðr&   c              #   óØ   K  — t          j        | j        |dz  ¦  «        }t          j        | j        |dz  ¦  «        }t	          ||¦  «        D ]}| j        | j        |                  V — ŒdS )zƒ
        Return all records in the given interval
        To maintain backward compatibility, convert us to ns in function
        iè  N)ÚbisectÚbisect_leftra  Úbisect_rightr;   r`  rb  )r!   r  r  Ú	start_idxÚend_idxr^  s         r%   Úin_intervalzMemRecordsAcc.in_intervalé  s{   è è € õ
 Ô& tÔ'7¸ÀD¹ÑIÔIˆ	ÝÔ% dÔ&6¸À¹ÑFÔFˆÝ�y 'Ñ*Ô*ð 	6ð 	6ˆAØÔ# D¤M°!Ô$4Ô5Ð5Ð5Ð5Ð5ð	6ð 	6r&   N)rÐ   rÑ   rÒ   rÓ   r   rl  r4   r&   r%   r   r   Þ  s8   € € € € € ØGÐGð8ð 8ð 8ð6ð 6ð 6ð 6ð 6r&   r   c                 óB   ‡ — g d¢}t          ˆ fd„|D ¦   «         ¦  «        S )N))úautograd/__init__Ú_make_grads)rn  Úbackward)ztorch/tensorrp  )ú_internal/common_utilsÚprof_callable)rq  Úprof_func_call)rq  Úprof_meth_callc              3   óB   •K  — | ]}|d          ‰v o	|d         ‰v  V — ŒdS )r   r2   Nr4   )r5   r›   rº   s     €r%   ry   z&_filter_stack_entry.<locals>.<genexpr>ý  s;   øè è € ÐOÐO¸�A�a”D˜E�MÐ3 a¨¤d¨e mÐ4ÐOÐOÐOÐOÐOÐOr&   )Úall)rº   Úfiltered_entriess   ` r%   Ú_filter_stack_entryrx  ô  s;   ø€ ðð ð Ðõ ÐOÐOÐOÐOÐ>NÐOÑOÔOÑOÔOÐOr&   z[memory]z[OutOfMemory]c                 ó2   — 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)r>   Úfiltered_out_namess     r%   Ú_filter_namer}    s2   € õ 	Ý Ø*Ø.Ø)ØØØð	Ðð Ð%Ð%Ð%r&   Fc                 ód   — t          ¦   «         }||          } |r|                      d¦  «        rd} | S )NzProfilerStep#zProfilerStep*)r   Ú
startswith)r>   Úwith_wildcardÚstring_tables      r%   Ú_rewrite_namer‚    s;   € Ý‘=”=€LØ˜Ô€DØð #Ø�?Š?˜?Ñ+Ô+ð 	#Ø"ˆDØ€Kr&   r{   r|   r}   r~   c
                 ó´  ‡‡,‡-‡.‡/‡0— t          | ¦  «        dk    rdS 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}d„ | D ¦   «         }t          |¦  «        dk    }|r.t          d„ |D ¦   «         ¦  «        dz   }|�t          ||¦  «        }g d¢}|�|                     ¦   «         nd}|
r&| 	                    d|› �d|› d�|› d�|› d�g¦  «         |r9| 	                    ddg¦  «         |r |r| 	                    |› d�d|› d�g¦  «         | 
                    d¦  «         t          d„ | D ¦   «         ¦  «        }|r| 
                    d¦  «         dŠ,dgŠ0dgŠ-‰, gŠ.d4ˆ,ˆ-ˆ.ˆ0fd „	}d!„ } ||¦  «         |d"d…         D ]} ||¦  «         Œ|r | 
                    d#¦  «          ||¦  «         |r"| 
                    d$¦  «          ||d%¬&¦  «         |r`d'„ | D ¦   «         }t          |¦  «        dk    r? |t          |¦  «        ¦  «        \  }}| 
                    d(|› �¦  «          ||¦  «         nd)}‰0d         }‰-d         }‰.d         } d}g Š/ˆ/fd*„}!d}"d}#| D ]n}$|"|$j        z  }"|$j        t          j        k    r|$j        r|#|$j        z  }#Œ3|$j        t          j        t          j        t          j        fv r|$j        s
|#|$j        z  }#Œo|� |!d+| z  ¦  «          |!|¦  «         |	r |!d+| z  ¦  «          |!d,¦  «          |!|¦  «          |! |j        |Ž ¦  «          |!|¦  «         d-„ }%d}&| D �]ä}$|&|k    r �nÚ|	r|$j        �Œ|&d"z  }&|$j        }'|�&t          |'¦  «        |d.z
  k    r|'d|d.z
  …         d/z   }'t1          |$j        |"¦  «        |$_        |$j        st1          |$j        |"¦  «        nd|$_        |'|$j        |$j        |$j        |$j        |$j        g}(|
rGt1          |$j        |#¦  «        |$_         |( 	                    |$j!        |$j         |$j"        |$j#        g¦  «         |rz|( 	                    tI          |$j%        ¦  «        tI          |$j&        ¦  «        g¦  «         |r=|r;|( 	                    tI          |$j'        ¦  «        tI          |$j(        ¦  «        g¦  «         |( 
                    |$j)        ¦  «         |r|( 
                    |$j*        ¦  «         |r/|( 
                    tW          |$j,        ¦  «        d|…         ¦  «         |r@|$j-        dk    r|( 
                    d0¦  «         n|( 
                    |$j-        |z  d1›¦  «         |rFd})t          |$j.        ¦  «        dk    r |%|$j.        d         |¦  «        })|( 
                    |)¦  «          |! |j        |(Ž ¦  «         |rqdgt          |¦  «        d"z
  z  }*|$j.        d"d…         D ]#}+ |! |j        |* |%|+|¦  «        gz   Ž ¦  «         Œ$|* 
                    d¦  «          |! |j        |*Ž ¦  «         �Œæ |!|¦  «          |!d2t_          |"¦  «        › �¦  «         |
r4 |!d|�|                     ¦   «         nd› d3t_          |#¦  «        › �¦  «         d 0                    ‰/¦  «        S )5zUPrint a summary of events (which can be a list of FunctionEvent or FunctionEventAvg).r   r«   c              3   ó,   K  — | ]}|j         d k    V — ŒdS ©r   Nr=  rx   s     r%   ry   z_build_table.<locals>.<genexpr>0  s*   è è € ÐOÐO¸u˜%Ô6¸Ò:ÐOÐOÐOÐOÐOÐOr&   c              3   ó,   K  — | ]}|j         d k    V — ŒdS r…  r'  rx   s     r%   ry   z_build_table.<locals>.<genexpr>1  s*   è è € ÐPÐPÀ˜Ô7¸!Ò;ÐPÐPÐPÐPÐPÐPr&   z9use_device is None, but there is device performance data.c              3   óX   K  — | ]%}|j         d uot          |j         ¦  «        dk    V — Œ&d S r¿   )rÂ   r<   rx   s     r%   ry   z_build_table.<locals>.<genexpr>9  sS   è è € ð ð àð 
Ô	 4Ð	'Ð	G­C°Ô0BÑ,CÔ,CÀaÒ,Gðð ð ð ð ð r&   Nc                 óœ   •— t          | ‰                     dd¦  «                             dd¦  «                             dd¦  «        ¦  «        S )Nr‰   r¨   r©   rª   )r²   r³   )rN   r€   s    €r%   rU   z_build_table.<locals>.<lambda>B  sC   ø€ ¥ØØ—O’O F¨HÑ5Ô5ß’W˜U HÑ-Ô-ß’W˜]¨HÑ5Ô5ñ	!ô !€ r&   T)rP   ÚreverserÇ   c              3   ó>   K  — | ]}t          |j        ¦  «        V — Œd S r.   )r<   rP   rM   s     r%   ry   z_build_table.<locals>.<genexpr>O  s*   è è € Ð;Ð;¨S�C ¤™LœLÐ;Ð;Ð;Ð;Ð;Ð;r&   é   c              3   óX   K  — | ]%}t          t          |j        ¦  «        ¦  «        V — Œ&d S r.   )r<   r°   rÂ   rM   s     r%   ry   z_build_table.<locals>.<genexpr>S  s5   è è € ÐKÐK¸S�c¥# cÔ&6Ñ"7Ô"7Ñ8Ô8ÐKÐKÐKÐKÐKÐKr&   é   c                 óZ   — g | ](}|j         ®	t          |j         ¦  «        dk    ¯!|j         ‘Œ)S r¿   )ro   r<   rM   s     r%   r9   z _build_table.<locals>.<listcomp>[  s;   € ð ð ð Ø s¤yÐ'<ÅÀSÄYÁÄÐRSÒASÐASˆŒ	ÐASÐASÐASr&   c              3   óH   K  — | ]}t          d „ |D ¦   «         ¦  «        V — ŒdS )c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r.   ©r<   )r5   rº   s     r%   ry   z)_build_table.<locals>.<genexpr>.<genexpr>a  s(   è è € Ð2Ð2 5•C˜‘J”JÐ2Ð2Ð2Ð2Ð2Ð2r&   N)Úmax)r5   ro   s     r%   ry   z_build_table.<locals>.<genexpr>a  s9   è è € ÐGÐG°u•Ð2Ð2¨EÐ2Ñ2Ô2Ñ2Ô2ÐGÐGÐGÐGÐGÐGr&   )Ú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 k    V — ŒdS )rZ   N)rR   rM   s     r%   ry   z_build_table.<locals>.<genexpr>ˆ  s)   è è € Ð=Ð=¨s˜œ¨Ò*Ð=Ð=Ð=Ð=Ð=Ð=r&   zNode IDrŒ   rF  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<   d S )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’  s”   ø€ Ø�qÐÐÔØ�HÑ�s 7™|œ|Ñ+¨cÑ1°S¸<Ñ5GÑHñ	
ÐÐÑð 	�qÐÐÔ˜S 7™]¨c°LÑ.@ÑAÑAÐÐÑØ˜ÐÐÔ˜g¨Ñ4Ñ4ÐÐÑÐÐr&   c                 ód  — g d¢}| dk    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Úfloatr<   ÚpowÚfloorr´   )r  Úflop_headersÚ	log_flopss      r%   Úauto_scale_flopsz&_build_table.<locals>.auto_scale_flops™  s°   € ð
ð 
ð 
ˆð �qŠyˆyˆyˆyÝ˜�3�tœz¨%Ñ0Ô0°1Ñ4µe½CÀÑ<MÔ<MÐPQÑ<QÑ6RÔ6RÑSÔSÑTÔTˆ	Ø˜AŠ~ˆ~ )­c°,Ñ.?Ô.?Ò"?Ð"?Ð"?Ð?Ý�B�œ IÑ.Ô.°Ñ5Ñ7Ô7¸ÅcÈ)ÁnÄnÔ9UÐVÐVr&   r2   zInput ShapeszSource Locationú<)rš  c                 ó2   — g | ]}|j         d k    ¯|j         ‘ŒS r\  )r  rM   s     r%   r9   z _build_table.<locals>.<listcomp>µ  s!   € ÐBÐBÐB 3°C´IÀ²M°M�S”Y°M°M°Mr&   zTotal Fc                 ó\   •— ‰                      | ¦  «         ‰                      d¦  «         d S )Nr®   )r`   )rØ   Úresults    €r%   r`   z_build_table.<locals>.appendÅ  s-   ø€ Ø�Š�aÑÔÐØ�Š�dÑÔÐÐÐr&   ú=z1This report only display top-level ops statisticsc                 ó¤   — t          | ¦  «        |k    r<t          | ¦  «        |z
  }| |d …         } t          | ¦  «        dk    rd| dd …         z   } | S )Nr§  ú...r‘  )r™   Úsrc_column_widthÚoffsets      r%   Ú	trim_pathz_build_table.<locals>.trim_pathè  sX   € Ýˆt‰9Œ9Ð'Ò'Ð'Ý˜‘Y”YÐ!1Ñ1ˆFØ˜˜˜”=ˆDÝ�4‰yŒy˜1Š}ˆ}Ø˜t A B BœxÑ'�Øˆr&   r§  r¸  z--z8.3fzSelf CPU time total: z time total: )rF  )1r<   Úanyr   ÚRuntimeErrorr   r[   r’  r©  ÚupperrD   r`   rw   rK   r   rL   rÀ   rö   r5  r6  r7  rÁ   r’   r=   rP   rä   r  rJ   rô   r  r  r  rÿ   r  r  r  r   rì   r  r"  r  r%  rù   rR   r°   rÂ   r  ro   rÞ   rG  )1rb   r€   r…   r�   r‚   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¹  ÚstacksÚ	has_stackÚheadersrš   Úappend_node_idrŸ  r±  Ú_Ú	raw_flopsÚflops_scaleÚflops_headerÚ
row_formatÚ
header_sepÚline_lengthr`   Úsum_self_cpu_time_totalÚsum_self_device_time_totalrN   r»  Úevent_limitr>   Ú
row_valuesÚ	src_fieldÚempty_headersrº   r›  rœ  r�  rµ  rž  s1    `                                          @@@@@r%   r‡   r‡      s€
  øøøøøø€ õ ˆ6�{„{�aÒÐØˆråÐOÐOÈÐOÑOÔOÑOÔO€OÝÐPÐPÈÐPÑPÔPÑPÔP€NØ˜”Ô%€Jð ð X˜/ð XÝÐVÑWÔWÐWåð ð àðñ ô ñ ô Ðð
 ÐÝÝØðð ð ð ð ð	ñ 	ô 	ð "Ø)Ø!ð
ñ 
ô 
ˆõ  Ð;Ð;°FÐ;Ñ;Ô;Ñ;Ô;¸aÑ?ÐØÐ(ÝÐ 1Ð3HÑIÔIÐåÐKÐKÀFÐKÑKÔKÑKÔKÈaÑOÐØÐ*Ý!Ð"5Ð7NÑOÔOÐàÐØ-ÐàÐðð Ø#ðñ ô €Fõ �F‘”˜a’€IØð KåÐGÐGÀÐGÑGÔGÑGÔGÈ!ÑKð 	ð  Ð+Ý"Ð#3Ð5IÑJÔJÐðð ð €Gð )3Ð(>�*×"Ò"Ñ$Ô$Ð$ÀF€KØð 
Ø�Šà%˜Ð%Ð%Ø'˜Ð'Ð'Ð'ØÐ&Ð&Ð&ØÐ)Ð)Ð)ð	ñ	
ô 	
ð 	
ð ð Ø�ŠàØðñ	
ô 	
ð 	
ð ð 	˜.ð 	Ø�NŠNà"Ð(Ð(Ð(Ø-˜KÐ-Ð-Ð-ðñô ð ð ‡N‚N�<Ñ Ô Ð åÐ=Ð=°fÐ=Ñ=Ô=Ñ=Ô=€NØð "Ø�Š�yÑ!Ô!Ð!ð €LØ�T€NØ�T€NØ$�}�o€Oð5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ðWð Wð Wð €JÐ Ñ!Ô!Ð!Ø�Q�R�RŒ[ð )ð )ˆØˆ
Ð'Ñ(Ô(Ð(Ð(àð (Ø�Š�~Ñ&Ô&Ð&Øˆ
Ð&Ñ'Ô'Ð'àð 3Ø�ŠÐ(Ñ)Ô)Ð)Øˆ
Ð#¨cÐ2Ñ2Ô2Ð2àð àBÐB¨&ÐBÑBÔBˆ	Ýˆy‰>Œ>˜QÒÐØ*:Ð*:½3¸y¹>¼>Ñ*JÔ*JÑ'ˆ[˜,Ø�NŠNÐ2 LÐ2Ð2Ñ3Ô3Ð3ØˆJÐ)Ñ*Ô*Ð*Ð*àˆJà Ô"€JØ Ô"€JØ! !Ô$€KØ€Jð €Fðð ð ð ð ð  ÐØ!"ÐØð Eð EˆØ 3Ô#:Ñ:ÐØŒ?�jœnÒ,Ð,°´Ð,à&¨#Ô*DÑDÐ&Ð&àŒOå”ÝÔ&Ý”ððð ð Ô*ðð '¨#Ô*DÑDÐ&øð ÐØˆˆs�[Ñ Ñ!Ô!Ð!Øˆˆv‰ŒˆØð DØˆˆs�[Ñ Ñ!Ô!Ð!ØˆÐBÑCÔCÐCØ
€Fˆ:ÑÔÐØ
€FÐˆ:Ô˜gÐ&Ñ'Ô'Ð'à
€Fˆ:ÑÔÐðð ð ð €KØð X6ñ X6ˆØ˜)Ò#Ð#Ø‰EØ ð 	 S¤^Ð%?Øà˜1ÑˆKØŒwˆØ Ð,µ°T±´Ð>SÐVWÑ>WÒ1WÐ1WØÐ5Ð0°1Ñ4Ð5Ô6¸Ñ>ˆDÝ1ØÔ#Ð%<ñ 
ô  
ˆÔð
 ”<ðÕ˜sÔ1Ð3JÑKÔKÐKàð 	Ôð àÔ ØÔ'àÔ!ØÔ"ØÔð	
ˆ
ð ð 	Ý'9ØÔ*Ð,Fñ(ô (ˆCÔ$ð ×ÒàÔ2àÔ,ØÔ-ØÔ'ðñô ð ð ð 	Ø×Òõ # 3Ô#7Ñ8Ô8å" 3Ô#<Ñ=Ô=ð	ñô ð ð ð ˜nð Ø×!Ò!õ ' sÔ'>Ñ?Ô?å& sÔ'CÑDÔDð	ñô ð ð 	×ÒØŒIñ	
ô 	
ð 	
ð ð 	+Ø×Ò˜cœkÑ*Ô*Ð*Øð 	KØ×Ò�c #Ô"2Ñ3Ô3Ð4HÐ5HÐ4HÔIÑJÔJÐJØð 	EØŒy˜AŠ~ˆ~Ø×!Ò! $Ñ'Ô'Ð'Ð'à×!Ò! S¤Y°Ñ%<Ð"CÐ"CÑDÔDÐDØð 	)ØˆIÝ�3”9‰~Œ~ Ò!Ð!Ø%˜I c¤i°¤lÐ4DÑEÔE�	Ø×Ò˜iÑ(Ô(Ð(ØˆÐ ˆzÔ  *Ð-Ñ.Ô.Ð.àð 		6Ø˜D¥C¨¡L¤L°1Ñ$4Ñ5ˆMØœ 1 2 2œð ð �Ø�Ø%�JÔ%Ø'¨9¨9°UÐ<LÑ+MÔ+MÐ*NÑNðñô ð ð ð
 × Ò  Ñ$Ô$Ð$ØˆFÐ$�:Ô$ mÐ4Ñ5Ô5Ð5ùà
€Fˆ:ÑÔÐØ
€FÐJ¥<Ð0GÑ#HÔ#HÐJÐJÑKÔKÐKØð 
ØˆðF¨*Ð*@�J×$Ò$Ñ&Ô&Ð&Àfð Fð FÝ'Ð(BÑCÔCðFð Fñ	
ô 	
ð 	
ð �7Š7�6‰?Œ?Ðr&   )F)	NNr{   r|   r}   r~   FFF)'rg  r\   rª  Úcollectionsr   r   Úoperatorr   Útypingr   r   r   r	   r
   Útyping_extensionsr   rU  Útorch.autogradr   Ú__all__Úlistr   rÞ   rä   rì   rð   r   r   r   r   r   r   r   rx  rz  r{  r}  r‚  r‡   r4   r&   r%   ú<module>rÞ     sÏ  ðà €€€Ø Ð Ð Ð Ø €€€Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø Ð Ð Ð Ð Ð Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø (Ð (Ð (Ð (Ð (Ð (à €€€Ø %Ð %Ð %Ð %Ð %Ð %ð	ð 	ð 	€ðKð Kð Kð Kð K�ñ Kô Kð Kð\
ð ð ð5ð 5ð 5ð"ð "ð "ðDð Dð Dð ð  ð  ð  ð  ñ  ô  ð  ð<	%ð 	%ð 	%ð 	%ð 	%ñ 	%ô 	%ð 	%ð 
ˆ�HÐ<Ð<Ð<Ñ	=Ô	=€ðI
ð I
ð I
ð I
ð I
Ð'ñ I
ô I
ð I
ðXK
ð K
ð K
ð K
ð K
Ð*ñ K
ô K
ð K
ð\ð ð ð ð �+ñ ô ð ð6ð 6ð 6ð 6ð 6ñ 6ô 6ð 6ð,	Pð 	Pð 	Pð Ð Ø*Ð ð&ð &ð &ð&ð ð ð ð ØØØØØØØØðrð rð rð rð rð rr&   