Ë
    ÿÍ:j2  ã                   óÊ   — d Z ddlZddlZddlZddlZddlZddlZddlmZ ddl	m
Z
 ddlmZmZ ddlmZ ddlmZ ddlmZ dd	lmZ  ej,                  e«      Z G d
„ de«      Zy)z<Profiler to check if there are any bottlenecks in your code.é    N)Údefaultdict)ÚPath)ÚOptionalÚUnion)Úoverride)Úget_filesystem)ÚProfiler)Úrank_zero_onlyc                   óú   ‡ — e Zd ZdZ	 	 	 	 ddeeeef      dee   dede	ddf
ˆ fd„Z
ed	eddfd
„«       Zed	eddfd„«       Zd	edej                  ddfd„Zedefd„«       Zedee   ddfˆ fd„«       Zdefd„Zˆ xZS )ÚAdvancedProfilerzûThis profiler uses Python's cProfiler to record more detailed information about time spent in each function call
    recorded during a given action.

    The output is quite verbose and you should only use this if you want very detailed reports.

    NÚdirpathÚfilenameÚline_count_restrictionÚ
dump_statsÚreturnc                 ó€   •— t         ‰| �  ||¬«       t        t        j                  «      | _        || _        || _        y)aÓ  
        Args:
            dirpath: Directory path for the ``filename``. If ``dirpath`` is ``None`` but ``filename`` is present, the
                ``trainer.log_dir`` (from :class:`~lightning.pytorch.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.

            line_count_restriction: this can be used to limit the number of functions
                reported for each action. either an integer (to select a count of lines),
                or a decimal fraction between 0.0 and 1.0 inclusive (to select a percentage of lines)

            dump_stats: Whether to save raw profiler results. When ``True`` then ``dirpath`` must be provided.

        Raises:
            ValueError:
                If you attempt to stop recording an action which was never started.
        )r   r   N)ÚsuperÚ__init__r   ÚcProfileÚProfileÚprofiled_actionsr   r   )Úselfr   r   r   r   Ú	__class__s        €úy/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/lightning/pytorch/profilers/advanced.pyr   zAdvancedProfiler.__init__+   s9   ø€ ô4 	‰Ñ °8ÐÔ<Ü=HÌ×IYÑIYÓ=ZˆÔØ&<ˆÔ#Ø$ˆ�ó    Úaction_namec                 óœ   — | j                   j                  «       D ]  }|j                  «        Œ | j                   |   j                  «        y )N)r   ÚvaluesÚdisableÚenable©r   r   Úprs      r   ÚstartzAdvancedProfiler.startJ   sB   € ð ×'Ñ'×.Ñ.Ó0ò 	ˆBØ�J‰J�Lð	à×Ñ˜kÑ*×1Ñ1Õ3r   c                 ó|   — | j                   j                  |«      }|€t        d|› d�«      ‚|j                  «        y )Nz(Attempting to stop recording an action (z) which was never started.)r   ÚgetÚ
ValueErrorr   r!   s      r   ÚstopzAdvancedProfiler.stopQ   s<   € à×"Ñ"×&Ñ& {Ó3ˆØˆ:ÜÐGÈÀ}ÐTnÐoÓpÐpØ
�
‰
�r   Úprofilec                 óä  — | j                   sJ ‚t        j                  j                  | j                   | j	                  |d¬«      «      }t        |«      }|j                  | j                   d¬«       t        j                  dt        t        j                  «      t        j                  «       ¬«      5 }|j                  |d«      5 }t        j                  j                  |d«      }|j                  |«       t        |«      }|j                  |d	«      5 }	|j                  |	j!                  «       «       d d d «       d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   y xY w)
Nz.prof)r   Ú	extensionT)Úexist_okÚtest)ÚprefixÚsuffixÚdirÚwbztmp.profÚrb)r   ÚosÚpathÚjoinÚ_prepare_filenamer   ÚmkdirsÚtempfileÚTemporaryDirectoryÚstrr
   ÚrankÚgetcwdÚopenr   ÚwriteÚread)
r   r   r(   Údst_filepathÚdst_fsÚtmp_dirÚdst_fileÚsrc_filepathÚsrc_fsÚsrc_files
             r   Ú_dump_statszAdvancedProfiler._dump_statsX   s%  € Ø�|Š|Ðˆ|Ü—w‘w—|‘| D§L¡L°$×2HÑ2HÐU`ÐlsÐ2HÓ2tÓuˆÜ Ó-ˆØ�‰�d—l‘l¨TˆÔ2ô ×'Ñ'¨v¼cÄ.×BUÑBUÓ>VÔ\^×\eÑ\eÓ\gÔhð	0ØlsØ�K‰K˜ dÓ+ð	0à/7äŸ7™7Ÿ<™<¨°Ó<ˆLØ×Ñ˜|Ô,Ü# LÓ1ˆFØ—‘˜\¨4Ó0ð 0°HØ—‘˜xŸ}™}›Ô/÷0÷	0÷ 	0ð 	0÷0ð 0ú÷	0ð 	0ú÷ 	0ð 	0ús=   Â3E&ÃAEÄ EÄ5EÄ=E&ÅEÅEÅE#	ÅE&Å&E/c                 ó”  — i }| j                   j                  «       D ]™  \  }}| j                  r| j                  ||«       t	        j
                  «       }t        j                  ||¬«      j                  «       j                  d«      }|j                  | j                  «       |j                  «       ||<   Œ› | j                  |«      S )N)ÚstreamÚ
cumulative)r   Úitemsr   rF   ÚioÚStringIOÚpstatsÚStatsÚ
strip_dirsÚ
sort_statsÚprint_statsr   ÚgetvalueÚ_stats_to_str)r   Úrecorded_statsr   r"   ÚsÚpss         r   ÚsummaryzAdvancedProfiler.summaryh   s¤   € àˆØ#×4Ñ4×:Ñ:Ó<ò 	7‰OˆK˜Ø�ŠØ× Ñ  ¨bÔ1Ü—‘“ˆAÜ—‘˜b¨Ô+×6Ñ6Ó8×CÑCÀLÓQˆBØ�N‰N˜4×6Ñ6Ô7Ø*+¯*©*«,ˆN˜;Ò'ð	7ð ×!Ñ! .Ó1Ð1r   Ústagec                 óZ   •— t         ‰| �  |¬«       | j                  j                  «        y )N)rX   )r   Úteardownr   Úclear)r   rX   r   s     €r   rZ   zAdvancedProfiler.teardownt   s%   ø€ ä‰Ñ˜uÐÔ%Ø×Ñ×#Ñ#Õ%r   c                 ód   — | j                   d| j                  | j                  | j                  dœfS )N© )r   r   r   )r   r   r   r   )r   s    r   Ú
__reduce__zAdvancedProfiler.__reduce__y   s1   € ð �N‰NØØŸ™°$·-±-Ð[_×[vÑ[vÑwð
ð 	
r   )NNg      ð?F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r9   r   ÚfloatÚboolr   r   r#   r'   r   r   rF   rW   rZ   Útupler^   Ú__classcell__)r   s   @r   r   r   #   s  ø„ ñð /3Ø"&Ø(+Ø ñ%à˜%  T 	Ñ*Ñ+ð%ð ˜3‘-ð%ð !&ð	%ð
 ð%ð 
õ%ð> ð4 ð 4¨ò 4ó ð4ð ð ð ¨ò ó ðð0 sð 0°X×5EÑ5Eð 0È$ó 0ð  ð	2˜ò 	2ó ð	2ð ð&˜h s™mð &°ô &ó ð&ð
˜E÷ 
r   r   )rb   r   rK   Úloggingr2   rM   r7   Úcollectionsr   Úpathlibr   Útypingr   r   Útyping_extensionsr   Ú#lightning.fabric.utilities.cloud_ior   Ú$lightning.pytorch.profilers.profilerr	   Ú%lightning.pytorch.utilities.rank_zeror
   Ú	getLoggerr_   Úlogr   r]   r   r   ú<module>rq      sR   ðñ Cã Û 	Û Û 	Û Û Ý #Ý ß "å &å >Ý 9Ý @à€g×Ñ˜Ó!€ô\
�xõ \
r   