§
    ­˜º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#dS ))é    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                 óö   •— |                      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         €úd/var/www/html/services/rag-service/venv/lib/python3.11/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 © r1   )Ú.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_evtsr5   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                 ój  — d„ | D ¦   «         }t          |t          d¦  «        ¬¦  «        }t          j        |d„ ¬¦  «        }|D ]î\  }}t          |d„ ¬¦  «        }g }|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 r1   )Úis_asyncÚdevice_typer	   ÚCPU©r2   Úevts     r"   r6   z4EventList._populate_cpu_children.<locals>.<listcomp>T   s=   € ð 
ð 
ð 
àØ”<ð
ð %(¤Oµz´~Ò$EÐ$Eð à$EÐ$EÐ$Er#   Úthread)Úkeyc                 ó   — | j         | j        fS r+   )rL   Ú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ÚendrP   s    r"   rR   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Úgroupbyr9   rT   rU   rV   r   Úappend_cpu_childr:   rM   Úset_cpu_parentÚappend)
r   Úsync_eventsÚeventsÚthreadsÚ
_thread_idÚthread_eventsÚthread_events_Úcurrent_eventsrQ   Úparents
             r"   r%   z EventList._populate_cpu_childrenD   s�  € ð 
ð 
àð
ñ 
ô 
ˆõ
 ØÝ˜8Ñ$Ô$ð
ñ 
ô 
ˆõ Ô#ØÐCÐCð
ñ 
ô 
ˆð  *1ð 	-ð 	-Ñ%ˆJ˜Ý#ØØQÐQðñ ô ˆNð 35ˆNØ'ð -ð -�Ý˜.Ñ)Ô)¨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 ©Nr/   )Úscoper:   )rK   Ú	bw_parents    €r"   rj   z6EventList._set_backward_stacktraces.<locals>.bw_parentŠ   s/   ø€ Øˆ{Ø�tØ”˜a’�Ø�
à �y ¤Ñ0Ô0Ð0r#   )ÚstackÚsequence_nrrL   Ú
fwd_thread)r   Ú
fwd_stacksrK   ÚtÚprj   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©r2   rQ   s     r"   ú	<genexpr>z0EventList.self_cpu_time_total.<locals>.<genexpr>¥   s%   è è € Ð?Ð?°�5Ô,Ð?Ð?Ð?Ð?Ð?Ð?r#   )Úsumr(   s    r"   rs   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 }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": {}}, r/   é   ú])Úosr   ÚopenÚwriteÚ
trace_nameÚformatrT   rU   Ú
elapsed_usÚ	is_remoterL   rO   r=   r9   ÚseekÚtellÚSEEK_SETÚtruncate)r   ÚpathrŠ   Údevice_nameÚfÚnext_idrK   Ú_s           r"   Úexport_chrome_tracezEventList.export_chrome_traceÑ   s  € ð 	ˆ	ˆ	ˆ	à$(Ô$4ÐJ�f�f¸$Ô:JˆÝ�$˜‰_Œ_ð +	 Øˆ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ðW+	ð +	ð +	ñ +	ô +	ð +	ð +	ð +	ð +	ð +	ð +	ð +	øøøð +	ð +	ð +	ð +	ð +	ð +	s   ¥E	E;Å;E?ÆE?c                 ó
   — g d¢S )N)rs   Úself_cuda_time_totalÚself_xpu_time_totalÚself_privateuse1_time_totalr1   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Ú ú;rW   ú ú
)rŸ   Ú
ValueErrorÚstrÚ	maketransr‹   rk   r9   ÚgetattrÚreplaceÚintÚreversedÚ	translaterŒ   )	r   r•   r    Útranslate_tabler—   rK   Ú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                 óŒ  ‡— | j         sJ ‚t          t          ¦  «        }dt          t          df         fˆfd„}| D ])Š| |‰|||¦  «                                      ‰¦  «         Œ*t          |                     ¦   «         | j        | j	        | j
        ¬¦  «        }|D ](Š‰j        d|…         ‰_        |sd‰_        |s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        ¦  «         |r'|                     t          | j        ¦  «        ¦  «         |dk    r|| j	        d |…         z  }t          |¦  «        S ©Nr   )r«   rM   rO   rH   Ú	is_legacyÚis_user_annotationr]   Úoverload_nameÚinput_shapesrk   Útuple)rQ   Úgroup_by_input_shapesÚgroup_by_stack_nÚgroup_by_overload_namerM   rK   s        €r"   Úget_keyz'EventList.key_averages.<locals>.get_keyC  sÀ   ø€ õ �E”I‘”Ý�E”MÑ"Ô"Ý�EÔ%Ñ&Ô&Ý�E”OÑ$Ô$Ý�EÔ,Ñ-Ô-ðˆCð &ð .Ø—
’
˜3Ô,Ñ-Ô-Ð-Ø$ð 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«   r>   r
   Úvaluesr   r   r   rk   r¾   r½   )r   rÀ   rÁ   rÂ   ÚstatsrÃ   Úavg_listrK   s          @r"   Úkey_averageszEventList.key_averages)  s  ø€ ð. ÔÐÐÐÝ9DÕEUÑ9VÔ9Vˆð	å•3˜�8Œ_ð	ð 	ð 	ð 	ð 	ð 	ð$ ð 	ð 	ˆCØØ�ØÐ.Ð0@ÐBXñô ô÷ Šc�#‰hŒhˆhˆhåØ�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   rM   )r   Ú
total_statrK   s      r"   Útotal_averagezEventList.total_averagej  s>   € õ &Ñ'Ô'ˆ
Øð 	"ð 	"ˆCØ˜#ÑˆJØ!ˆJŒNˆNØ ˆ
ŒØÐr#   )Nrw   rx   ry   rz   NF)Fr   F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r)   r-   r&   r%   r'   Úpropertyrs   r,   rš   rŸ   r«   r¶   rÈ   rÌ   Ú__classcell__)r!   s   @r"   r
   r
      sG  ø€ € € € € Ø1Ð1ð&ð &ð &ð &ð &ð ð  ð  ðð ð ð"ð "ð "ð(C-ð C-ð C-ðJ#ð #ð #ð4 ð@ð @ñ „Xð@ð
 ØØØ Ø "ØØ#ð(
ð (
ð (
ð (
ðT6ð 6ð 6ðp
ð 
ð 
ð2 #ð 2¨sð 2ð 2ð 2ð 2ð4 $ØØ$ð	?ð ?ð ?ð ?ðBð ð ð ð ð ð 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Úusr1   )Útime_usÚUS_IN_SECONDÚUS_IN_MSs      r"   Ú_format_timerÛ   x  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ú%r1   )rØ   Útotal_time_uss     r"   Ú_format_time_sharerá   ƒ  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"   rR   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_totalrs   Ú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û   r1   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+   )rU   rV   )r   rU   rV   s      r"   r   zInterval.__init__½  s   € ØˆŒ
ØˆŒˆˆr#   c                 ó    — | j         | j        z
  S )z4
        Returns the length of the interval
        )rV   rU   r(   s    r"   r�   zInterval.elapsed_usÁ  s   € ð Œx˜$œ*Ñ$Ð$r#   N)rÍ   rÎ   rÏ   r   r�   r1   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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   FrW   c                 óê  — || _         || _        || _        || _        || _        t          ||¦  «        | _        || _        || _        g | _	        d| _
        g | _        d | _        || _        || _        || _        |	| _        |
| _        || _        || _        || _        || _        || _        || _        || _        || _        |€|n|| _        || _        || _        || _        d| _        d| _        d| _         d S )Nr/   rW   )!ÚidrO   r;   r½   r�   r   rT   rL   rm   r=   rö   r<   r:   r¾   Úconcrete_inputsÚkwinputsrk   ri   r   Úcpu_memory_usageÚdevice_memory_usagerG   r�   rl   rH   Údevice_indexÚdevice_resource_idr»   Úflopsr¼   Úself_cpu_percentÚtotal_cpu_percentÚtotal_device_percent)r   r	  r;   rL   Ústart_usÚend_usr½   rm   r¾   rk   ri   r   r  r  rG   r�   rl   rO   rH   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ˆFÐ6Hð 	Ôð  )ˆŒØ$)ˆŒ
Ø2DˆÔØ "ˆÔØ!#ˆÔØ$&ˆÔ!Ð!Ð!r#   c                 ó†   — | j         t          j        k    sJ ‚| j                             t          |||¦  «        ¦  «         d S r+   )rH   r	   rI   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)rH   r	   rI   Ú
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)rH   r	   rI   r  r   r:   )r   re   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  ©r2   r  s     r"   ru   z6FunctionEvent.self_cpu_memory_usage.<locals>.<genexpr>/  s6   è è € ð +
ð +
Ø',ˆEÔ"ð+
ð +
ð +
ð +
ð +
ð +
r#   )rG   rH   r	   rI   r  rv   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"   ru   z9FunctionEvent.self_device_memory_usage.<locals>.<genexpr>7  s6   è è € ð .
ð .
Ø*/ˆEÔ%ð.
ð .
ð .
ð .
ð .
ð .
r#   )rG   rH   r	   rI   r  rv   r<   r(   s    r"   Úself_device_memory_usagez&FunctionEvent.self_device_memory_usage3  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º   )rH   r	   rI   rT   r�   r(   s    r"   rñ   zFunctionEvent.cpu_time_totalC  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"   ru   z4FunctionEvent.self_cpu_time_total.<locals>.<genexpr>N  s6   è è € ð )
ð )
Ø%*ˆEÔ ð)
ð )
ð )
ð )
ð )
ð )
r#   )rG   rH   r	   rI   rñ   rv   r<   r(   s    r"   rs   z!FunctionEvent.self_cpu_time_totalJ  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        t          j        fv sJ ‚| j                             ¦   «         S )Nr   c              3   ó$   K  — | ]}|j         V — Œd S r+   ©r  ©r2   Úkinfos     r"   ru   z2FunctionEvent.device_time_total.<locals>.<genexpr>Y  ó$   è è € ÐDÐD¨e˜5œ>ÐDÐDÐDÐDÐDÐDr#   c              3   ó$   K  — | ]}|j         V — Œd S r+   ©rò   )r2   rC   s     r"   ru   z2FunctionEvent.device_time_total.<locals>.<genexpr>Y  s>   è è € ð Kð KØ-/�BÔ(ðKð Kð Kð Kð Kð Kr#   c              3   ó$   K  — | ]}|j         V — Œd S r+   r+  r,  s     r"   ru   z2FunctionEvent.device_time_total.<locals>.<genexpr>^  r.  r#   )rG   r   rH   r	   rI   r»   rv   r=   r<   ÚCUDAÚPrivateUse1ÚMTIAÚHPUrT   r�   r(   s    r"   rò   zFunctionEvent.device_time_totalR  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+   r0  r(   s    r"   Úcuda_time_totalzFunctionEvent.cuda_time_totalh  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
        t          j        fv sJ ‚| j        S )Nr   c              3   ó$   K  — | ]}|j         V — Œd S r+   r0  r  s     r"   ru   z7FunctionEvent.self_device_time_total.<locals>.<genexpr>u  s6   è è € ð 0ð 0Ø,1�Ô'ð0ð 0ð 0ð 0ð 0ð 0r#   )rG   r   rH   r	   rI   rò   rv   r<   r2  r3  r4  r5  r(   s    r"   ró   z$FunctionEvent.self_device_time_totalp  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_total�  s   € ð Ô*Ð*r#   c                 ó   — | j         S r+   rì   r(   s    r"   rM   zFunctionEvent.key‰  s
   € àŒyÐr#   c                 ó2  — | j         }| j        }| j        }d                     g d‘| j        › ‘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 overload_name=z device_type=z	 node_id=ú
 cpu_time=z
 start_us=z end_us=z cpu_children=c                 ó   — g | ]	}|j         ‘Œ
S r1   )r	  r  s     r"   r6   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;   r½   rH   rO   rü   rT   rU   rV   r«   r<   rL   r¾   r  rG   r�   rl   r»   )r   r–   rð   r  s       r"   Ú__repr__zFunctionEvent.__repr__�  sù  € Ø”oˆØÔ*ˆØ"Ô6Ððy÷ yò yð yð yð y ¤ð yð yð yð y°´	ð yð yð yð yÈ$ÔJ\ð yð yð yð yØÔ+ðyð yð yð yØ6:´lðyð yð yð yØNRÔN_ðyð yð yð yàœÔ-ðyð yð yð yà7;´Ô7Jðyð yð yð yõ  Ð IÐ I°tÔ7HÐ IÑ IÔ IÑJÔJðyð yð yð yð NYðyð yð yð yð alð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	   rI   r   r  r[   r\   rÑ   r  r"  r   r  r%  rñ   rs   rò   r7  ró   rœ   rM   rF  r1   r#   r"   r   r   Ë  s(  € € € € € Ø8Ð8ð ØØØØØØØØØØØØ”NØØØØØØØØ ð7>'ð >'ð >'ð >'ð@<ð <ð <ð	(ð 	(ð 	(ð
!ð 
!ð 
!ð ð
ð 
ñ „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                 ó\  — d | _         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)rM   rö   rO   rG   r�   r   rñ   rò   rs   ró   r¾   r½   rk   ri   r  r  r  r"  r<   r:   r	   rI   rH   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j        |j        z  c_        | xj        |j        z  c_        | j        €|j        | _        n|j        �| xj        |j        z  c_        | S r+   )rM   rO   rG   r�   r:   r<   r½   r¾   rk   ri   rH   r»   r   r¼   r  r   r   rñ   rò   rs   ró   r  r  r  r"  rö   r  ©r   Úothers     r"   r>   zFunctionEventAvg.add¸  sÃ  € ØŒ8Ðð ”yˆDŒHØ œ=ˆDŒLØ!œNˆDŒMØ"œ_ˆDŒNØ#Ô.ˆDŒOØ %Ô 2ˆDÔà!&Ô!4ˆ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+   )r>   rJ  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¨   rA  rB  rC  rD  )
r   r  rý   r  rM   r   rü   r«   r¾   r  )r   r–   Úself_device_timerð   Údevice_memorys        r"   rF  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   r>   rM  rF  r1   r#   r"   r   r   œ  s\   € € € € € ØDÐDðð ð ð ð2$ð $ð $ðLð ð ð	
ð 	
ð 	
ð 	
ð 	
r#   r   c                   ó   — e Zd Zd„ ZdS )r   c                 ó€   — t          |¦  «        dk    rt          j                             |¦  «        n|| |<   | |         S rh   )r9   ÚtorchÚ_CÚ	_demangle)r   rM   s     r"   Ú__missing__zStringTable.__missing__î  s:   € õ 03°3©x¬x¸!ª|¨|•E”H×&Ò& sÑ+Ô+Ð+ÀˆˆS‰	Ø�CŒyÐr#   N)rÍ   rÎ   rÏ   rV  r1   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)r2   ÚiÚrs      r"   r6   z*MemRecordsAcc.__init__.<locals>.<listcomp>þ  s-   € ÐRÐRÐR±4°1°a˜1˜Qœ4Ÿ=š=™?œ?¨AÐ.ÐRÐRÐRr#   )Ú_mem_recordsÚ_start_nsesÚ_indicesr9   rX   r?   Ú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_leftr_  Úbisect_rightr8   r^  r`  )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   rj  r1   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)rl  Úbackward)ztorch/tensorrn  )ú_internal/common_utilsÚprof_callable)ro  Úprof_func_call)ro  Úprof_meth_callc              3   óB   •K  — | ]}|d          ‰v o	|d         ‰v  V — ŒdS )r   r/   Nr1   )r2   r—   rµ   s     €r"   ru   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_entryrv    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#   rw   rx   ry   rz   c
                 ó¸  ‡‡.‡/‡0‡1‡2— t          | ¦  «        dk    rdS 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„ | D ¦   «         }t          |¦  «        dk    }|r.t          d„ |D ¦   «         ¦  «        dz   }|�t          ||¦  «        }dg}|r|                     d¦  «         |g d¢z  }|�| 	                    ¦   «         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Š2dgŠ/‰. gŠ0d7ˆ.ˆ/ˆ0ˆ2fd#„	}d$„ } ||¦  «         |r ||¦  «         |d%|z   d…         D ]} ||¦  «         Œ|r |                     d&¦  «          ||¦  «         |r"|                     d'¦  «          ||d(¬)¦  «         |r`d*„ | D ¦   «         }t          |¦  «        dk    r? |t          |¦  «        ¦  «        \  }}|                     d+|› �¦  «          ||¦  «         nd,}‰2d         }‰/d         } ‰0d         }!d}g Š1ˆ1f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        |Ž ¦  «          |"| ¦  «         d0„ }&d}'| D �] }%|'|k    r �n|	r|%j        �Œ|'d%z  }'|%j        }(|�&t          |(¦  «        |d1z
  k    r|(d|d1z
  …         d2z   }(t1          |%j        |#¦  «        |%_        |%j        st1          |%j        |#¦  «        nd|%_        |(g})|r5|%j        }*|�&t          |*¦  «        |d1z
  k    r|*d|d1z
  …         d2z   }*|)|*gz  })|)|%j        |%j        |%j        |%j        |%j         gz  })|
rGt1          |%j        |$¦  «        |%_!        |) 
                    |%j"        |%j!        |%j#        |%j$        g¦  «         |rz|) 
                    tK          |%j&        ¦  «        tK          |%j'        ¦  «        g¦  «         |r=|r;|) 
                    tK          |%j(        ¦  «        tK          |%j)        ¦  «        g¦  «         |)                     |%j*        ¦  «         |r|)                     |%j+        ¦  «         |r/|)                     tY          |%j-        ¦  «        d|…         ¦  «         |r@|%j.        dk    r|)                     d3¦  «         n|)                     |%j.        |z  d4›¦  «         |rFd}+t          |%j/        ¦  «        dk    r |&|%j/        d         |¦  «        }+|)                     |+¦  «          |" |j        |)Ž ¦  «         |rqdgt          |¦  «        d%z
  z  },|%j/        d%d…         D ]#}- |" |j        |, |&|-|¦  «        gz   Ž ¦  «         Œ$|,                     d¦  «          |" |j        |,Ž ¦  «         �Œ" |"| ¦  «          |"d5ta          |#¦  «        › �¦  «         |
r4 |"d|�| 	                    ¦   «         nd› d6ta          |$¦  «        › �¦  «         d 1                    ‰1¦  «        S )8zUPrint 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;  rt   s     r"   ru   z_build_table.<locals>.<genexpr>H  s*   è è € ÐOÐO¸u˜%Ô6¸Ò:ÐOÐOÐOÐOÐOÐOr#   c              3   ó,   K  — | ]}|j         d k    V — ŒdS rƒ  r$  rt   s     r"   ru   z_build_table.<locals>.<genexpr>I  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¾   r9   rt   s     r"   ru   z_build_table.<locals>.<genexpr>Q  sS   è è € ð ð àð 
Ô	 4Ð	'Ð	G­C°Ô0BÑ,CÔ,CÀaÒ,Gðð ð ð ð ð r#   c              3   óX   K  — | ]%}|j         d uot          |j         ¦  «        dk    V — Œ&d S rº   )r½   r9   rt   s     r"   ru   z_build_table.<locals>.<genexpr>V  sS   è è € ð ð àð 
Ô	 DÐ	(Ð	I­S°Ô1DÑ-EÔ-EÈÒ-Iðð ð ð ð ð r#   Nc                 óœ   •— t          | ‰                     dd¦  «                             dd¦  «                             dd¦  «        ¦  «        S )Nr…   r£   r¤   r¥   )r­   r®   )rK   r|   s    €r"   rR   z_build_table.<locals>.<lambda>_  sC   ø€ ¥ØØ—O’O F¨HÑ5Ô5ß’W˜U HÑ-Ô-ß’W˜]¨HÑ5Ô5ñ	!ô !€ r#   T)rM   ÚreverserÄ   c              3   ó>   K  — | ]}t          |j        ¦  «        V — Œd S r+   )r9   rM   rJ   s     r"   ru   z_build_table.<locals>.<genexpr>l  s*   è è € Ð;Ð;¨S�C ¤™LœLÐ;Ð;Ð;Ð;Ð;Ð;r#   é   c              3   óX   K  — | ]%}t          t          |j        ¦  «        ¦  «        V — Œ&d S r+   )r9   r«   r¾   rJ   s     r"   ru   z_build_table.<locals>.<genexpr>p  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º   )rk   r9   rJ   s     r"   r6   z _build_table.<locals>.<listcomp>x  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+   ©r9   )r2   rµ   s     r"   ru   z)_build_table.<locals>.<genexpr>.<genexpr>~  s(   è è € Ð2Ð2 5•C˜‘J”JÐ2Ð2Ð2Ð2Ð2Ð2r#   N)Úmax)r2   rk   s     r"   ru   z_build_table.<locals>.<genexpr>~  s9   è è € ÐGÐG°u•Ð2Ð2¨EÐ2Ñ2Ô2Ñ2Ô2ÐGÐGÐGÐGÐGÐGr#   Ú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 k    V — ŒdS )rW   N)rO   rJ   s     r"   ru   z_build_table.<locals>.<genexpr>¨  s)   è è € Ð=Ð=¨s˜œ¨Ò*Ð=Ð=Ð=Ð=Ð=Ð=r#   zNode IDrˆ   rD  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   é   r/   é
   g      À)	r‘  ÚminÚmathÚlog10Úfloatr9   Ú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#   r/   zInput ShapeszSource Locationú<)r™  c                 ó2   — g | ]}|j         d k    ¯|j         ‘ŒS rZ  )r  rJ   s     r"   r6   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: )rD  )2r9   Úanyr   ÚRuntimeErrorr
   rX   r‘  r¨  r]   ÚupperrA   rs   rH   r	   rI   r»   ró   r2  r3  r4  r¼   rŽ   r:   rM   rá   r  rG   rñ   r  r½   r   rþ   rü   r  r  rÿ   rý   ré   r  r  r  r"  rö   rO   r«   r¾   r  rk   rÛ   rE  )3r_   r|   r�   r}   r~   r   r€   r   r   r‚   Úhas_device_timeÚhas_device_memr   Úhas_input_shapesÚhas_overload_namesÚname_column_widthÚshapes_column_widthÚDEFAULT_COLUMN_WIDTHÚflops_column_widthr¸  ÚstacksÚ	has_stackÚheadersr–   Úappend_node_idrž  r°  r™   Ú	raw_flopsÚflops_scaleÚflops_headerÚ
row_formatÚ
header_sepÚline_lengthr]   Úsum_self_cpu_time_totalÚsum_self_device_time_totalrK   rº  Úevent_limitr;   Ú
row_valuesr½   Ú	src_fieldÚempty_headersrµ   rš  r›  rœ  r´  r�  s3    `                                            @@@@@r"   rƒ   rƒ   8  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Ðàˆh€GØð (Ø�Š�Ñ'Ô'Ð'Øð ð ð ñ €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Ð+Ñ+Ð-Ð-Ô.ð )ð )ˆØˆ
Ð'Ñ(Ô(Ð(Ð(àð (Ø�Š�~Ñ&Ô&Ð&Øˆ
Ð&Ñ'Ô'Ð'àð 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Øð b6ñ b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àð 	Ôð �Vˆ
Øð 	*ØÔ-ˆMà%Ð1Ý˜Ñ&Ô&Ð*?À!Ñ*CÒCÐCà -Ð.KÐ1FÈÑ1JÐ.KÔ LÈuÑ T�Ø˜=˜/Ñ)ˆJØàÔ ØÔ'àÔ!ØÔ"ØÔð
ñ 	
ˆ
ð ð 	Ý'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)	NNrw   rx   ry   rz   FFF)$re  rY   r©  Úcollectionsr   r   Úoperatorr   Útypingr   r   Útyping_extensionsr   rS  Útorch.autogradr	   Ú__all__Úlistr
   rÛ   rá   ré   rí   r   r   r   r   r   r   r   rv  rx  ry  r{  r€  rƒ   r1   r#   r"   ú<module>rÝ     s½  ðà €€€Ø Ð Ð Ð Ø €€€Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ð  Ð  Ø (Ð (Ð (Ð (Ð (Ð (à €€€Ø %Ð %Ð %Ð %Ð %Ð %ð	ð 	ð 	€ð[ð [ð [ð [ð [�ñ [ô [ð [ð|
ð ð ð5ð 5ð 5ð"ð "ð "ðDð Dð Dð ð  ð  ð  ð  ñ  ô  ð  ð<	%ð 	%ð 	%ð 	%ð 	%ñ 	%ô 	%ð 	%ð 
ˆ�HÐ<Ð<Ð<Ñ	=Ô	=€ðN
ð N
ð N
ð N
ð N
Ð'ñ N
ô N
ð N
ðbN
ð N
ð N
ð N
ð N
Ð*ñ N
ô N
ð N
ðbð ð ð ð �+ñ ô ð ð6ð 6ð 6ð 6ð 6ñ 6ô 6ð 6ð,	Pð 	Pð 	Pð Ð Ø*Ð ð&ð &ð &ð&ð ð ð ð ØØØØØØØØðFð Fð Fð Fð Fð Fr#   