Ë
    g^(hO  ã                   ó  — d 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efd„Zdee   ddfd„Z G d„ d«      Zdej&                  j(                  dee   defd„Zy)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.
é    N)ÚAny)ÚSelfé   )Ú
print_oncec                   óŒ   — e Zd ZU dZeed<   dZeed<   dZeed<   dZ	eed<   de
de
fd	„Zdd
„Zdedd fd„Zdefd„Zdee   fd„Zy)ÚProfileMetricsg        Úmicrosecondsr   Ú	operatorsÚfusionsÚgraphsÚotherÚ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/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/_dynamo/profiler.pyÚ__iadd__zProfileMetrics.__iadd__    sB   € Ø×Ò˜U×/Ñ/Ñ/ÕØ�Š˜%Ÿ/™/Ñ)�Ø�Š˜Ÿ™Ñ%�Øˆó    c                 óÊ   — t        |t        «      sJ ‚t        | j                  |j                  z   | j                  |j                  z   | j                  |j                  z   «      S r   )Ú
isinstancer   r	   r
   r   r   s     r   Ú__add__zProfileMetrics.__add__&   sS   € Ü˜%¤Ô0Ð0Ð0ÜØ×Ñ × 2Ñ 2Ñ2Ø�N‰N˜UŸ_™_Ñ,Ø�L‰L˜5Ÿ=™=Ñ(ó
ð 	
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   Úintr   r	   Úmaxr
   r   r   s     r   Ú__truediv__zProfileMetrics.__truediv__.   sp   € Ü�eœSÔ!Ü" 5¨%°Ó7ˆEÜØ×Ñ¤ A u×'9Ñ'9Ó :Ñ:Ø�N‰NœS  E§O¡OÓ4Ñ4Ø�L‰Lœ3˜q %§-¡-Ó0Ñ0ó
ð 	
r   c                 ó>   — | j                   d›d| j                  d›d�S )Nz4.0%z ops z time©r
   r	   ©r   s    r   Ú__str__zProfileMetrics.__str__7   s%   € Ø—.‘. Ð& e¨D×,=Ñ,=¸dÐ+CÀ5ÐIÐIr   c                 ó2   — | j                   | j                  gS r   r   r    s    r   ÚtocsvzProfileMetrics.tocsv:   s   € Ø—‘ × 1Ñ 1Ð2Ð2r   N)r   r   r   r   )Ú__name__Ú
__module__Ú__qualname__r	   ÚfloatÚ__annotations__r
   r   r   r   r   r   r   r   r   Ústrr!   Úlistr#   © r   r   r   r      ss   … à€L�%ÓØ€IˆsÓØ€GˆSÓØ€FˆCƒOð˜dð  tó ó
ð
 ð 
Ð)9ó 
ðJ˜ó Jð3�t˜E‘{ô 3r   r   c                   ó^   — e Zd Zdedededdfd„Zdedefd„Zdefd	„Zde	fd
„Z
dee   fd„Zy)ÚProfileResultÚcapturedÚtotalÚunique_graphsr   Nc                 ó^   — |xs
 t        «       | _        |xs
 t        «       | _        || _        y r   )r   r.   r/   r0   )r   r.   r/   r0   s       r   Ú__init__zProfileResult.__init__?   s*   € ð )1Ò(D´NÓ4DˆŒØ%*Ò%>¬nÓ.>ˆŒ
Ø"/ˆÕr   r   c                 óÀ   — | xj                   |j                   z  c_         | xj                  |j                  z  c_        | xj                  |j                  z  c_        | S r   ©r.   r/   r0   r   s     r   r   zProfileResult.__iadd__F   sB   € Ø�Š˜Ÿ™Ñ'�Ø�
Š
�e—k‘kÑ!�
Ø×Ò˜e×1Ñ1Ñ1ÕØˆr   c                 ó4   — | j                   | j                  z  S r   )r.   r/   r    s    r   ÚpercentzProfileResult.percentL   s   € Ø�}‰}˜tŸz™zÑ)Ð)r   c                 óæ   — | j                   d›d| j                  j                  d›d| j                  j                  d›d| j                  j                  d›d�t        | j                  «       «      z   S )NÚ2z graphs z graph calls Ú4ú/z = )r0   r.   r   r
   r/   r)   r6   r    s    r   r!   zProfileResult.__str__O   sj   € à×!Ñ! !Ð$ H¨T¯]©]×-AÑ-AÀ!Ð,DÀMØ�}‰}×&Ñ& qÐ)¨¨4¯:©:×+?Ñ+?ÀÐ*BÀ#ðGä�$—,‘,“.Ó!ñ"ð	
r   c                 óØ   — | j                   | j                  j                  | j                  j                  | j                  j                  g| j                  «       j                  «       z   S r   )r0   r.   r   r
   r/   r6   r#   r    s    r   r#   zProfileResult.tocsvV   sU   € à×ÑØ�M‰M× Ñ Ø�M‰M×#Ñ#Ø�J‰J× Ñ ð	
ð
 �L‰L‹N× Ñ Ó"ñ#ð 	#r   )r$   r%   r&   r   r   r2   r   r   r6   r)   r!   r*   r   r#   r+   r   r   r-   r-   >   sb   „ ð0Ø&ð0Ø/=ð0ØNQð0à	ó0ð˜dð  tó ð*˜ó *ð
˜ó 
ð#�t˜C‘yô #r   r-   r   c                  óF   — t         j                  j                  d«      dk(  S )NÚTORCHDYNAMO_PRINT_MISSINGÚ1)ÚosÚenvironÚgetr+   r   r   Úshould_print_missingrB   _   s   € Ü�:‰:�>‰>Ð5Ó6¸#Ñ=Ð=r   Ústackc                 ó¢   — t        d„ | D «       «      ry | D �cg c]  }d|vsŒd|vsŒ|‘Œ } }t        ddj                  | dd  «      «       y c c}w )Nc              3   ó$   K  — | ]  }d |v –— Œ
 y­w)z/torch/autograd/profiler.pyNr+   )Ú.0Úxs     r   ú	<genexpr>z print_missing.<locals>.<genexpr>d   s   è ø€ Ò
=°!Ð(¨AÔ-Ñ
=ùs   ‚z	<built-inzsite-packages/torch/ÚMISSINGz >> éýÿÿÿ)Úanyr   Újoin)rC   rG   s     r   Úprint_missingrM   c   s]   € Ü
Ñ
=°uÔ
=Ô=ØàöØ˜[°Ò1Ð6LÐTUÒ6UŠð€Eð ô ˆy˜&Ÿ+™+ e¨B¨C jÓ1Õ2ùòs   ˜	A¢A§Ac                   ó0   — e Zd ZU dZeed<   dd„Zdefd„Zy)ÚProfilerr   r0   r   Nc                 ó¦   — t         j                  j                  t         j                  j                  j                  gt        «       ¬«      | _        y )N)Ú
activitiesÚ
with_stack)ÚtorchÚprofilerÚprofileÚProfilerActivityÚCPUrB   Úprofr    s    r   r2   zProfiler.__init__o   s9   € Ü—N‘N×*Ñ*ÜŸ™×7Ñ7×;Ñ;Ð<Ü+Ó-ð +ó 
ˆ�	r   c           	      óÌ  — d}d}d}d}d}d}d}t        | j                  j                  «       d„ ¬«      }|D ]ß  }	|	j                  dk(  r!|	j                  j
                  }|dz  }|dz  }Œ3|	j                  j                  |k\  r”|	j                  j
                  }|	j                  j
                  |k  r#|dz  }||	j                  j                  «       z  }nt        «       rt        |	j                  «       |dz  }||	j                  j                  «       z  }ŒàŒá t        j                  }
dt        _        |dz  }t        t        ||||z
  |¬«      t        |||dz
  ¬«      |
¬	«      S )
Nr   éÿÿÿÿc                 ó.   — | j                   j                  S r   )Ú
time_rangeÚstart)rG   s    r   ú<lambda>z"Profiler.results.<locals>.<lambda>~   s   € ¸!¿,¹,×:LÑ:L€ r   )ÚkeyÚTORCHDYNAMOr   )r	   r
   r   r   r   r4   )ÚsortedrX   ÚeventsÚnamer\   Úendr]   Ú
elapsed_usrB   rM   rC   rO   r0   r-   r   )r   Úcaptured_regionsÚcaptured_opsÚcaptured_microsecondsÚ	total_opsÚtotal_microsecondsÚlast_op_end_timeÚcaptured_region_end_timerb   Úer0   s              r   ÚresultszProfiler.resultsu   sr  € ØÐØˆØ !ÐØˆ	ØÐàÐØ#%Ð Ü˜Ÿ	™	×(Ñ(Ó*Ñ0LÔMˆØò 	ˆAØ�v‰v˜Ò&Ø+,¯<©<×+;Ñ+;Ð(Ø  AÑ%Ð à˜Q‘‘	Ø—‘×#Ñ#Ð'7Ò7Ø#$§<¡<×#3Ñ#3Ð Ø—<‘<×#Ñ#Ð'?Ò?Ø  AÑ%�LØ)¨Q¯\©\×-DÑ-DÓ-FÑFÑ)Ü)Ô+Ü! !§'¡'Ô*Ø˜Q‘�	Ø" a§l¡l×&=Ñ&=Ó&?Ñ?Ñ"àð!	ô$ !×.Ñ.ˆØ!"ŒÔà�Q‰ˆ	äÜ#Ø2Ø&Ø$Ð'7Ñ7Ø'ô	ô !Ø/Ø#Ø! A™ôð
 (ô
ð 	
r   )r   N)	r$   r%   r&   r0   r   r(   r2   r-   rn   r+   r   r   rO   rO   l   s   … Ø€M�3Óó
ð.
˜ô .
r   rO   ÚgmÚexample_inputsc                 ó^   ‡ — dt         dt         fˆ fd„}t        xj                  dz  c_        |S )NÚargsr   c                  óŒ   •— t         j                  j                  d«      5   ‰j                  | Ž cd d d «       S # 1 sw Y   y xY w)Nr`   )rS   rT   Úrecord_functionÚforward)rr   ro   s    €r   Ú_wrappedz%fx_insert_profiling.<locals>._wrapped§   s8   ø€ Ü�^‰^×+Ñ+¨MÓ:ñ 	%Ø�2—:‘:˜tÐ$÷	%÷ 	%ò 	%ús	   ¡:ºAr   )r   rO   r0   )ro   rp   rv   s   `  r   Úfx_insert_profilingrw   ¦   s.   ø€ ð%œð %¤õ %ô ×Ò˜aÑÕØ€Or   )Ú__doc__Údataclassesr?   Útypingr   Útyping_extensionsr   rS   Úutilsr   Ú	dataclassr   r-   ÚboolrB   r*   r)   rM   rO   ÚfxÚGraphModulerw   r+   r   r   ú<module>r�      s    ðñó Û 	Ý Ý "ã å ð ×Ñ÷!3ð !3ó ð!3÷H#ñ #ðB>˜dó >ð3˜˜c™ð 3 tó 3÷7
ñ 7
ðt˜EŸH™H×0Ñ0ð À$ÀsÁ)ð ÐPSô r   