§
    ŠŠtj"  ã                  óÒ   — d Z ddlmZ ddlZddlZddlmZ ddlmZ ddl	Z	ddl
mZ ej         G d„ d	¦  «        ¦   «         Z G d
„ d¦  «        Zdd„Zdd„Z G d„ d¦  «        Zdd„ZdS )aN  
Dynamo profiling implementation.

This module provides profiling functionality for Dynamo, including:
- ProfileMetrics: Class for collecting and aggregating performance metrics like
  execution time, operator counts, and fusion statistics
- ProfileResult: Class for analyzing and reporting profiling results
- Utilities for tracking missed/uncaptured operations
- Functions for instrumenting FX graphs with profiling capabilities

The profiler helps measure and optimize the performance of Dynamo-compiled code
by tracking both captured and total operations, timing, and graph statistics.
é    )ÚannotationsN)ÚAny)ÚSelfé   )Ú
print_oncec                  óp   — e Zd ZU dZded<   dZded<   dZded<   dZded<   dd„Zdd„Z	dd„Z
dd„Zdd„ZdS )ÚProfileMetricsg        ÚfloatÚmicrosecondsr   ÚintÚ	operatorsÚfusionsÚgraphsÚotherr   Úreturnc                ó„   — | xj         |j         z  c_         | xj        |j        z  c_        | xj        |j        z  c_        | S ©N©r   r   r   ©Úselfr   s     úT/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/_dynamo/profiler.pyÚ__iadd__zProfileMetrics.__iadd__"   sB   € ØÐÔ˜UÔ/Ñ/ÐÔØˆŒ˜%œ/Ñ)ˆŒØˆŒ˜œÑ%ˆŒØˆó    c                óÚ   — t          |t          ¦  «        st          dt          |¦  «        › �¦  «        ‚t          | j        |j        z   | j        |j        z   | j        |j        z   ¦  «        S )NzExpected ProfileMetrics, got )Ú
isinstancer	   ÚAssertionErrorÚtyper   r   r   r   s     r   Ú__add__zProfileMetrics.__add__(   sj   € Ý˜%¥Ñ0Ô0ð 	PÝ Ð!NÅÀeÁÄÐ!NÐ!NÑOÔOÐOÝØÔ Ô 2Ñ2ØŒN˜Uœ_Ñ,ØŒL˜5œ=Ñ(ñ
ô 
ð 	
r   r   c           	     ó  — t          |t          ¦  «        rt          |||¦  «        }t          | j        t	          d|j        ¦  «        z  | j        t	          d|j        ¦  «        z  | j        t	          d|j        ¦  «        z  ¦  «        S )Nr   )r   r   r	   r   Úmaxr   r   r   s     r   Ú__truediv__zProfileMetrics.__truediv__1   s{   € Ý�e�SÑ!Ô!ð 	8Ý" 5¨%°Ñ7Ô7ˆEÝØÔ¥ A uÔ'9Ñ :Ô :Ñ:àŒN�S  E¤OÑ4Ô4Ñ4àŒL�3˜q %¤-Ñ0Ô0Ñ0ñ
ô 
ð 	
r   Ústrc                ó*   — | j         d›d| j        d›d�S )Nz4.0%z ops z time©r   r   ©r   s    r   Ú__str__zProfileMetrics.__str__<   s$   € Ø”.ÐIÐIÐI¨DÔ,=ÐIÐIÐIÐIÐIr   úlist[float]c                ó   — | j         | j        gS r   r$   r%   s    r   ÚtocsvzProfileMetrics.tocsv?   s   € Ø” Ô 1Ð2Ð2r   N©r   r   r   r   )r   r	   r   r	   )r   r   r   r	   ©r   r"   )r   r'   )Ú__name__Ú
__module__Ú__qualname__r   Ú__annotations__r   r   r   r   r   r!   r&   r)   © r   r   r	   r	      s¾   € € € € € € à€LÐÐÐÑØ€IÐÐÐÑØ€GÐÐÐÑØ€F€O€O€O�Oðð ð ð ð
ð 
ð 
ð 
ð	
ð 	
ð 	
ð 	
ðJð Jð Jð Jð3ð 3ð 3ð 3ð 3ð 3r   r	   c                  ó6   — e Zd Zdd„Zdd„Zdd„Zdd„Zdd„ZdS )ÚProfileResultÚcapturedr	   ÚtotalÚunique_graphsr   r   ÚNonec                óh   — |pt          ¦   «         | _        |pt          ¦   «         | _        || _        d S r   )r	   r3   r4   r5   )r   r3   r4   r5   s       r   Ú__init__zProfileResult.__init__D   s6   € ð )1Ð(DµNÑ4DÔ4DˆŒØ%*Ð%>­nÑ.>Ô.>ˆŒ
Ø"/ˆÔÐÐr   r   r   c                ó„   — | xj         |j         z  c_         | xj        |j        z  c_        | xj        |j        z  c_        | S r   ©r3   r4   r5   r   s     r   r   zProfileResult.__iadd__K   sB   € ØˆŒ˜œÑ'ˆŒØˆ
Œ
�e”kÑ!ˆ
Œ
ØÐÔ˜eÔ1Ñ1ÐÔØˆr   c                ó    — | j         | j        z  S r   )r3   r4   r%   s    r   ÚpercentzProfileResult.percentQ   s   € ØŒ}˜tœzÑ)Ð)r   r"   c                ó°   — | j         d›d| j        j        d›d| j        j        d›d| j        j        d›d�t          |                      ¦   «         ¦  «        z   S )NÚ2z graphs z graph calls Ú4ú/z = )r5   r3   r   r   r4   r"   r<   r%   s    r   r&   zProfileResult.__str__T   s~   € àÔ!ÐRð Gð G¨T¬]Ô-AÐRð Gð GØŒ}Ô&ÐFðGð GØ+/¬:Ô+?ÐFðGð Gð Gå�$—,’,‘.”.Ñ!Ô!ñ"ð	
r   ú	list[Any]c                ó¢   — | j         | j        j        | j        j        | j        j        g|                      ¦   «                              ¦   «         z   S r   )r5   r3   r   r   r4   r<   r)   r%   s    r   r)   zProfileResult.tocsv[   sH   € àÔØŒMÔ ØŒMÔ#ØŒJÔ ð	
ð
 �LŠL‰NŒN× Ò Ñ"Ô"ñ#ð 	#r   N)r3   r	   r4   r	   r5   r   r   r6   r*   )r   r	   r+   )r   rA   )r,   r-   r.   r8   r   r<   r&   r)   r0   r   r   r2   r2   C   sx   € € € € € ð0ð 0ð 0ð 0ðð ð ð ð*ð *ð *ð *ð
ð 
ð 
ð 
ð#ð #ð #ð #ð #ð #r   r2   r   Úboolc                 óH   — t           j                             d¦  «        dk    S )NÚTORCHDYNAMO_PRINT_MISSINGÚ1)ÚosÚenvironÚgetr0   r   r   Úshould_print_missingrJ   d   s   € ÝŒ:�>Š>Ð5Ñ6Ô6¸#Ò=Ð=r   Ústackú	list[str]r6   c                óª   — t          d„ | D ¦   «         ¦  «        rd S d„ | D ¦   «         } t          dd                     | dd …         ¦  «        ¦  «         d S )Nc              3  ó   K  — | ]}d |v V — Œ	dS )z/torch/autograd/profiler.pyNr0   ©Ú.0Úxs     r   ú	<genexpr>z print_missing.<locals>.<genexpr>i   s(   è è € Ð
=Ð
=°!Ð(¨AÐ-Ð
=Ð
=Ð
=Ð
=Ð
=Ð
=r   c                ó"   — g | ]}d |v¯d|v¯
|‘ŒS )z	<built-inzsite-packages/torch/r0   rO   s     r   ú
<listcomp>z!print_missing.<locals>.<listcomp>k   s5   € ð ð ð Ø˜[°Ð1Ð1Ð6LÐTUÐ6UÐ6UˆÐ6UÐ6UÐ6Ur   ÚMISSINGz >> éýÿÿÿ)Úanyr   Újoin)rK   s    r   Úprint_missingrY   h   sp   € Ý
Ð
=Ð
=°uÐ
=Ñ
=Ô
=Ñ=Ô=ð Øˆðð Øðñ ô €Eõ ˆy˜&Ÿ+š+ e¨B¨C¨C¤jÑ1Ô1Ñ2Ô2Ð2Ð2Ð2r   c                  ó.   — e Zd ZU dZded<   d
d„Zdd„Zd	S )ÚProfilerr   r   r5   r   r6   c                ó”   — t           j                             t           j        j        j        gt          ¦   «         ¬¦  «        | _        d S )N)Ú
activitiesÚ
with_stack)ÚtorchÚprofilerÚprofileÚProfilerActivityÚCPUrJ   Úprofr%   s    r   r8   zProfiler.__init__t   s;   € Ý”N×*Ò*ÝœÔ7Ô;Ð<Ý+Ñ-Ô-ð +ñ 
ô 
ˆŒ	ˆ	ˆ	r   r2   c           	     óŽ  — d}d}d}d}d}d}d}t          | j                             ¦   «         d„ ¬¦  «        }|D ]¶}	|	j        dk    r|	j        j        }|dz  }|dz  }Œ$|	j        j        |k    r‚|	j        j        }|	j        j        |k    r"|dz  }||	j                             ¦   «         z  }n"t          ¦   «         rt          |	j
        ¦  «         |dz  }||	j                             ¦   «         z  }Œ¶Œ·t          j        }
dt          _        |dz  }t          t          ||||z
  |¬¦  «        t          |||dz
  ¬¦  «        |
¬	¦  «        S )
Nr   éÿÿÿÿc                ó   — | j         j        S r   )Ú
time_rangeÚstart)rQ   s    r   ú<lambda>z"Profiler.results.<locals>.<lambda>ƒ   s   € ¸!¼,Ô:L€ r   )ÚkeyÚTORCHDYNAMOr   )r   r   r   r   r   r:   )Úsortedrd   ÚeventsÚnamerh   Úendri   Ú
elapsed_usrJ   rY   rK   r[   r5   r2   r	   )r   Úcaptured_regionsÚcaptured_opsÚcaptured_microsecondsÚ	total_opsÚtotal_microsecondsÚlast_op_end_timeÚcaptured_region_end_timern   Úer5   s              r   ÚresultszProfiler.resultsz   sž  € ØÐØˆØ !ÐØˆ	ØÐàÐØ#%Ð Ý˜œ	×(Ò(Ñ*Ô*Ð0LÐ0LÐMÑMÔMˆØð 	ð 	ˆAØŒv˜Ò&Ð&Ø+,¬<Ô+;Ð(Ø  AÑ%Ð à˜Q‘�	�	Ø”Ô#Ð'7Ò7Ð7Ø#$¤<Ô#3Ð Ø”<Ô#Ð'?Ò?Ð?Ø  AÑ%�LØ)¨Q¬\×-DÒ-DÑ-FÔ-FÑFÐ)Ð)Ý)Ñ+Ô+ð +Ý! !¤'Ñ*Ô*Ð*Ø˜Q‘�	Ø" a¤l×&=Ò&=Ñ&?Ô&?Ñ?Ð"Ð"àå Ô.ˆØ!"�Ôà�Q‰ˆ	åÝ#Ø2Ø&Ø$Ð'7Ñ7Ø'ð	ñ ô õ !Ø/Ø#Ø! A™ðñ ô ð
 (ð
ñ 
ô 
ð 	
r   N)r   r6   )r   r2   )r,   r-   r.   r5   r/   r8   rz   r0   r   r   r[   r[   q   sO   € € € € € € Ø€MÐÐÐÑð
ð 
ð 
ð 
ð.
ð .
ð .
ð .
ð .
ð .
r   r[   Úgmútorch.fx.GraphModuleÚexample_inputsrA   r   c                ó>   ‡ — dˆ fd„}t           xj        dz  c_        |S )NÚargsr   r   c                 óŠ   •— t           j                             d¦  «        5   ‰j        | Ž cd d d ¦  «         S # 1 swxY w Y   d S )Nrl   )r_   r`   Úrecord_functionÚforward)r   r{   s    €r   Ú_wrappedz%fx_insert_profiling.<locals>._wrapped¬   s‰   ø€ ÝŒ^×+Ò+¨MÑ:Ô:ð 	%ð 	%Ø�2”:˜tÐ$ð	%ð 	%ð 	%ð 	%ñ 	%ô 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%øøøð 	%ð 	%ð 	%ð 	%ð 	%ð 	%s   ¡
8¸<¿<r   )r   r   r   r   )r[   r5   )r{   r}   rƒ   s   `  r   Úfx_insert_profilingr„   «   s<   ø€ ð%ð %ð %ð %ð %ð %õ ÐÔ˜aÑÐÔØ€Or   )r   rC   )rK   rL   r   r6   )r{   r|   r}   rA   r   r   )Ú__doc__Ú
__future__r   ÚdataclassesrG   Útypingr   Útyping_extensionsr   r_   Úutilsr   Ú	dataclassr	   r2   rJ   rY   r[   r„   r0   r   r   ú<module>rŒ      sH  ððð ð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "à €€€à Ð Ð Ð Ð Ð ð Ôð$3ð $3ð $3ð $3ð $3ñ $3ô $3ñ Ôð$3ðN#ð #ð #ð #ð #ñ #ô #ð #ðB>ð >ð >ð >ð3ð 3ð 3ð 3ð7
ð 7
ð 7
ð 7
ð 7
ñ 7
ô 7
ð 7
ðtð ð ð ð ð r   