ó
    ÊÙ¢jP  ã                   óÚ   • S r SSKrSSKrSSKrSSKrSSKJr  SSKJr  SSK	J
r
Jr  SSKJr  SSKJr  \R                   " \5      r\\\\\\4   r\\   r\\\\4   r\\   r " S S	\5      rg)
z<Profiler to check if there are any bottlenecks in your code.é    N)Údefaultdict)ÚPath)ÚOptionalÚUnion)Úoverride)ÚProfilerc            	       óØ   ^ • \ rS rSrSr   SS\\\\4      S\\   S\	SS4U 4S jjjr
\S	\SS4S
 j5       r\S	\SS4S j5       rS\\\\4   4S jrS\4S jr\S\4S j5       rSrU =r$ )ÚSimpleProfileré$   z¥This profiler simply records the duration of actions (in seconds) and reports the mean duration of each action
and the total time spent over the entire training run.NÚdirpathÚfilenameÚextendedÚreturnc                 ó–   >• [         TU ]  XS9  0 U l        [        [        5      U l        X0l        [        R                  " 5       U l	        g)aÑ  
Args:
    dirpath: Directory path for the ``filename``. If ``dirpath`` is ``None`` but ``filename`` is present, the
        ``trainer.log_dir`` (from :class:`~pytorch_lightning.loggers.tensorboard.TensorBoardLogger`)
        will be used.

    filename: If present, filename where the profiler results will be saved instead of printing to stdout.
        The ``.txt`` extension will be used automatically.

    extended: If ``True``, adds extra columns representing number of calls and percentage of total time spent on
        respective action.

Raises:
    ValueError:
        If you attempt to start an action which has already started, or
        if you attempt to stop recording an action which was never started.
)r   r   N)
ÚsuperÚ__init__Úcurrent_actionsr   ÚlistÚrecorded_durationsr   ÚtimeÚperf_counterÚ
start_time)Úselfr   r   r   Ú	__class__s       €Ú°C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\pytorch_lightning/profilers/simple.pyr   ÚSimpleProfiler.__init__(   s?   ø€ ô. 	‰Ñ ÐÑ<Ø13ˆÔÜ(3´DÓ(9ˆÔØ ŒÜ×+Ò+Ó-ˆ�ó    Úaction_namec                 ó„   • XR                   ;   a  [        SU S35      e[        R                  " 5       U R                   U'   g )NzAttempted to start z which has already started.)r   Ú
ValueErrorr   r   )r   r   s     r   ÚstartÚSimpleProfiler.startE   s=   € à×.Ñ.Ó.ÜÐ2°;°-Ð?ZÐ[Ó\Ð\Ü,0×,=Ò,=Ó,?ˆ×Ñ˜[Ò)r   c                 óä   • [         R                  " 5       nXR                  ;  a  [        SU S35      eU R                  R	                  U5      nX#-
  nU R
                  U   R                  U5        g )Nz(Attempting to stop recording an action (z) which was never started.)r   r   r   r    Úpopr   Úappend)r   r   Úend_timer   Údurations        r   ÚstopÚSimpleProfiler.stopK   si   € ä×$Ò$Ó&ˆØ×2Ñ2Ó2ÜÐGÈÀ}ÐTnÐoÓpÐpØ×)Ñ)×-Ñ-¨kÓ:ˆ
ØÑ(ˆØ×Ñ Ñ,×3Ñ3°HÕ=r   c                 ó^  • [         R                  " 5       U R                  -
  n/ nU R                  R	                  5        HE  u  p4[        U5      n[        R                  " U5      nSU-  U-  nUR                  X6U-  XVU45        MG     UR                  S SS9  [        S U 5       5      nX(U4$ )Ng      Y@c                 ó   • U S   $ )Né   © ©Úxs    r   Ú<lambda>Ú6SimpleProfiler._make_report_extended.<locals>.<lambda>_   ó   €  ! A¢$r   T©ÚkeyÚreversec              3   ó*   #   • U  H	  oS    v •  M     g7f)é   Nr-   )Ú.0r/   s     r   Ú	<genexpr>Ú7SimpleProfiler._make_report_extended.<locals>.<genexpr>`   s   é € Ð/ª 1˜Až$ªùs   ‚)r   r   r   r   ÚitemsÚlenÚmathÚfsumr%   ÚsortÚsum)	r   Útotal_durationÚreportÚaÚdÚlen_dÚsum_dÚpercentage_dÚtotal_callss	            r   Ú_make_report_extendedÚ$SimpleProfiler._make_report_extendedT   s¡   € Ü×*Ò*Ó,¨t¯©Ñ>ˆØˆà×+Ñ+×1Ñ1Ö3‰DˆAÜ˜“FˆEÜ—I’I˜a“LˆEØ  5™=¨>Ñ9ˆLà�M‰M˜1 e™m¨U¸<ÐHÖIñ 4ð 	�‰™°ˆÑ5ÜÑ/©Ó/Ó/ˆØ NÐ2Ð2r   c                 óÜ   • / nU R                   R                  5        H:  u  p#[        R                  " U5      nUR	                  X$[        U5      -  U45        M<     UR                  S SS9  U$ )Nc                 ó   • U S   $ )Né   r-   r.   s    r   r0   Ú-SimpleProfiler._make_report.<locals>.<lambda>j   r2   r   Tr3   )r   r;   r=   r>   r%   r<   r?   )r   rB   ÚactionrD   rF   s        r   Ú_make_reportÚSimpleProfiler._make_reportc   s_   € ØˆØ×0Ñ0×6Ñ6Ö8‰IˆFÜ—I’I˜a“LˆEà�M‰M˜6¬3¨q«6¡>°5Ð9Ö:ñ 9ð
 	�‰™°ˆÑ5Øˆr   c                 óÚ  ^^• [         R                  mSnU R                  b  XR                  R                  5        S3-  nUST 3-  nU R                  (       aê  [        U R                  5      S:”  aÐ  [        S U R                   5       5      mS[        S[        S[        S	[        S
[        S[        4UU4S jjnU" SSSSS5      n[        UR                  5       5      nT SU-   3nXU-   U-   -  nU R                  5       u  pgnX" SSUS US S5      -  nX-  nU H  u  pšp¸nX" U	U
S U US US 5      -  nM     X-  nO¢[        S U R                   5       5      mS[        S[        S	[        S[        4UU4S jjnU" SSS5      n[        UR                  5       5      nT SU-   3nXU-   U-   -  nU R                  5       nU H  u  pšnX" XšS US 5      -  nM     X-  nUT-  nU$ )NÚ Ú zProfiler Reportr   c              3   ó8   #   • U  H  n[        U5      v •  M     g 7f©N©r<   ©r8   Úks     r   r9   Ú)SimpleProfiler.summary.<locals>.<genexpr>w   s   é € ÐFÒ.E¨œc !Ÿf˜fÒ.Eùó   ‚rO   ÚmeanÚ	num_callsÚtotalÚperr   c                 óN   >• T SU ST S3 SUS S3nUSUS SUS SUS S3-  nU$ )Nú|  Ú<Úsú	|  ú<15ú	|z  r-   )rO   r\   r]   r^   r_   ÚrowÚmax_keyÚseps         €€r   Úlog_row_extendedÚ0SimpleProfiler.summary.<locals>.log_row_extendedy   sR   ø€ Ø ˜E  V¨A¨g¨Y°a¨<Ð$8¸¸dÀ3¸ZÀsÐK�CØ˜R 	¨#˜¨e°E¸#°;¸eÀCÈÀ9ÈCÐPÑP�CØ�Jr   ÚActionzMean duration (s)z	Num callszTotal time (s)zPercentage %Ú-ÚTotalz.5z100 %c              3   ó8   #   • U  H  n[        U5      v •  M     g 7frV   rW   rX   s     r   r9   rZ   ’   s   é € ÐBÒ*A Qœ#˜aŸ&˜&Ò*Aùr[   c                 ó.   >• T SU ST S3 SUS SUS S3$ )Nra   rb   rc   rd   re   rf   r-   )rO   r\   r^   rh   ri   s      €€r   Úlog_rowÚ'SimpleProfiler.summary.<locals>.log_row”   s3   ø€ Ø˜˜c &¨¨7¨)°1¨Ð!5°U¸4À¸*ÀEÈ%ÐPSÈÐTWÐXÐXr   )ÚosÚlinesepÚ_stageÚupperr   r<   r   ÚmaxÚstrÚ
expandtabsrI   rP   )r   Úoutput_stringrj   Úheader_stringÚoutput_string_lenÚ	sep_linesÚreport_extendedrH   rA   rO   Úmean_durationr]   Úduration_perrq   rB   rh   ri   s                  @@r   ÚsummaryÚSimpleProfiler.summarym   sw  ù€ ä�j‰jˆØˆØ�;‰;Ñ"Ø§¡× 1Ñ 1Ó 3Ð4°AÐ6Ñ6ˆMØ˜?¨3¨%Ð0Ñ0ˆà�=�=Ü�4×*Ñ*Ó+¨aÓ/ÜÑF¨d×.EÒ.EÓFÓF�ð¬Sð ¼ð Ìð ÔTWð Ô^að Ôfi÷ ð ñ
 !1ØÐ1°;Ð@PÐR`ó!�ô %(¨×(@Ñ(@Ó(BÓ$CÐ!Ø"˜e CÐ*;Ñ$;Ð#<Ð=�	Ø¨]Ñ!:¸YÑ!FÑF�à?C×?YÑ?YÓ?[Ñ<�¨nØÐ!1°'¸3À;ÈaÀ.ÐVdÐegÐUhÐkrÓ!sÑs�ØÑ*�ÛVeÑR�F¨9ÀlØ!Ð%5ØØ(¨Ð,Ø$˜+Ø)¨"Ð-Ø'¨Ð+ó&ñ ’Mñ Wfð Ñ*�øäÑB¨$×*AÒ*AÓBÓBˆGðY¤ð Y¬3ð Y´sð Y¼s÷ Yð Yñ $ HÐ.AÐCSÓTˆMÜ # M×$<Ñ$<Ó$>Ó ?ÐØ˜% Ð&7Ñ 7Ð8Ð9ˆIØ¨Ñ6¸ÑBÑBˆMØ×&Ñ&Ó(ˆFã9?Ñ5� ~Ø ¨À"Ð3EÈ>ÐZ\ÐJ]Ó!_Ñ_’ñ :@àÑ&ˆMØ˜ÑˆØÐr   )r   r   r   r   )NNT)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   rx   r   Úboolr   r   r!   r(   ÚtupleÚ_TABLE_DATA_EXTENDEDÚfloatrI   Ú_TABLE_DATArP   r�   Ú__static_attributes__Ú__classcell__)r   s   @r   r
   r
   $   sÝ   ø† ñ>ð
 /3Ø"&Øñ	.à˜%  T 	Ñ*Ñ+ð.ð ˜3‘-ð.ð ð	.ð
 
÷.ð .ð: ð@ ð @¨ó @ó ð@ð
 ð> ð >¨ó >ó ð>ð3 uÐ-AÀ5È%Ð-OÑ'Pô 3ð˜kô ð ð3˜ó 3ó ö3r   r
   )r‡   Úloggingr=   rs   r   Úcollectionsr   Úpathlibr   Útypingr   r   Útyping_extensionsr   Ú$pytorch_lightning.profilers.profilerr   Ú	getLoggerrƒ   Úlogr‰   rx   r‹   ÚintÚ_TABLE_ROW_EXTENDEDr   rŠ   Ú
_TABLE_ROWrŒ   r
   r-   r   r   Ú<module>rš      s�   ðñ Cã Û Û 	Û Ý #Ý ß "å &å 9à×Ò˜Ó!€à˜C ¨¨U°EÐ9Ñ:Ð ØÐ/Ñ0Ð Ø�3˜˜uÐ$Ñ%€
Ø�:Ñ€ô}�Xõ }r   