§
    AxÅjO  ã                   ó8  — d Z ddlZddlmZ ddlZddlZddlZ ej        ¦   «         › d ej        ¦   «         › �Z	  ej	        ¦   «         d         Z
n# e$ r dZ
Y nw xY w ej        ¦   «         Z G d„ d¦  «        Z G d	„ d
¦  «        Z G d„ d¦  «        Zd„ Zd„ ZdS )zY
runpod | serverless | rp_debugger.py

A collection of functions to help with debugging.
é    N)Útimezoneú Ú	brand_rawzUnable to get processor info.c                   óB   — e Zd ZdZdZg Zi Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd„ ZdS )	ÚCheckpointsa  
    A singleton class to store checkpoint times.

    Format:
    [
        {
            'name': 'checkpoint_name',
            'start': 1234567890.123456,
            'end': 1234567890.123456
            'duration_ms': 1234567890.123456
        },
    ]

    Usage:
    from rp_debugger import Checkpoints

    checkpoints = Checkpoints()

    # Add a checkpoint
    checkpoints.add('checkpoint_name')

    # Start a checkpoint
    checkpoints.start('checkpoint_name')

    # Stop a checkpoint
    checkpoints.stop('checkpoint_name')
    Nc                 ó¾   — t           j        €Ft                               | ¦  «        t           _        g t           j        _        i t           j        _        t           j        S ©N)r   Ú_Checkpoints__instanceÚobjectÚ__new__ÚcheckpointsÚname_lookup)Úclss    úTC:\Projects\Historical\venv\Lib\site-packages\runpod/serverless/utils/rp_debugger.pyr   zCheckpoints.__new__<   s>   € ÝÔ!Ð)Ý%+§^¢^°CÑ%8Ô%8�KÔ"Ø13�KÔ"Ô.Ø13�KÔ"Ô.ÝÔ%Ð%ó    c                 ó¸   — || j         v rt          d|› d�¦  «        ‚| j                             d|i¦  «         t	          | j        ¦  «        dz
  }|| j         |<   dS )zP
        Add a checkpoint.
        Returns the index of the checkpoint.
        zCheckpoint name "z" already exists.Únameé   N)r   ÚKeyErrorr   ÚappendÚlen©Úselfr   Úindexs      r   ÚaddzCheckpoints.addC   so   € ð
 �4Ô#Ð#Ð#ÝÐF¨tÐFÐFÐFÑGÔGÐGàÔ×Ò ¨ Ñ/Ô/Ð/å�DÔ$Ñ%Ô%¨Ñ)ˆØ!&ˆÔ˜ÑÐÐr   c                 ó2  — || j         vrt          d|› d�¦  «        ‚| j         |         }t          j        ¦   «         | j        |         d<   t
          j                             t          j        ¦  «         	                    ¦   «         dz   | j        |         d<   dS )z%
        Start a checkpoint.
        úCheckpoint name 'ú' does not exist.ÚstartÚZÚ	start_utcN)
r   r   ÚtimeÚperf_counterr   ÚdatetimeÚnowr   ÚutcÚ	isoformatr   s      r   r   zCheckpoints.startP   s“   € ð �tÔ'Ð'Ð'ÝÐF¨tÐFÐFÐFÑGÔGÐGàÔ  Ô&ˆÝ+/Ô+<Ñ+>Ô+>ˆÔ˜Ô Ñ(åÔ×!Ò!¥(¤,Ñ/Ô/×9Ò9Ñ;Ô;¸cÑAð 	Ô˜Ô Ñ,Ð,Ð,r   c                 ón  — || j         vrt          d|› d�¦  «        ‚| j         |         }d| j        |         vrt          d¦  «        ‚t          j        ¦   «         | j        |         d<   t
          j                             t          j        ¦  «         	                    ¦   «         dz   | j        |         d<   dS )	z$
        Stop a checkpoint.
        r   r   r   z Checkpoint has not been started.Úendr    Ústop_utcN)
r   r   r   r"   r#   r$   r%   r   r&   r'   r   s      r   ÚstopzCheckpoints.stop]   sµ   € ð �tÔ'Ð'Ð'ÝÐF¨tÐFÐFÐFÑGÔGÐGàÔ  Ô&ˆà˜$Ô*¨5Ô1Ð1Ð1ÝÐ=Ñ>Ô>Ð>å)-Ô):Ñ)<Ô)<ˆÔ˜Ô Ñ&åÔ×!Ò!¥(¤,Ñ/Ô/×9Ò9Ñ;Ô;¸cÑAð 	Ô˜Ô 
Ñ+Ð+Ð+r   c                 óä   — g }| j         D ]e}d|vsd|vrŒ|d         }|d         }||z
  dz  |d<   |                     d¦  «         |                     d¦  «         |                     |¦  «         Œf|S )z5
        Get the results of the checkpoints.
        r   r)   iè  Úduration_ms)r   Úpopr   )r   ÚresultsÚ
checkpointÚ
start_timeÚend_times        r   Úget_checkpointszCheckpoints.get_checkpointsn   s™   € ð ˆØÔ*ð 
	'ð 
	'ˆJØ˜jÐ(Ð(¨E¸Ð,CÐ,CØØ# GÔ,ˆJØ! %Ô(ˆHØ)1°JÑ)>À$Ñ(FˆJ�}Ñ%à�NŠN˜7Ñ#Ô#Ð#Ø�NŠN˜5Ñ!Ô!Ð!à�NŠN˜:Ñ&Ô&Ð&Ð&àˆr   c                 ó"   — g | _         i | _        dS )z(
        Clear the checkpoints.
        N)r   r   ©r   s    r   ÚclearzCheckpoints.clear�   s   € ð ˆÔØˆÔÐÐr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   r   r   r   r   r   r+   r3   r6   © r   r   r   r      s‰   € € € € € ðð ð8 €JØ€KØ€Kð&ð &ð &ð'ð 'ð 'ð
ð 
ð 
ð
ð 
ð 
ð"ð ð ð&ð ð ð ð r   r   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )Ú	LineTimerz˜
    A utility that can be used to time code execution using the with statement.
    When used the times should be added to the checkpoints object.
    c                 óx   — t          ¦   «         | _        || _        | j                             | j        ¦  «         d S r	   )r   r   r   r   )r   r   s     r   Ú__init__zLineTimer.__init__�   s4   € Ý&™=œ=ˆÔØˆŒ	ØÔ×Ò˜TœYÑ'Ô'Ð'Ð'Ð'r   c                 óD   — | j                              | j        ¦  «         d S r	   )r   r   r   r5   s    r   Ú	__enter__zLineTimer.__enter__”   s!   € ØÔ×Ò˜tœyÑ)Ô)Ð)Ð)Ð)r   c                 óD   — | j                              | j        ¦  «         d S r	   )r   r+   r   )r   Úargss     r   Ú__exit__zLineTimer.__exit__—   s!   € ØÔ×Ò˜dœiÑ(Ô(Ð(Ð(Ð(r   N)r7   r8   r9   r:   r?   rA   rD   r;   r   r   r=   r=   ‰   sK   € € € € € ðð ð
(ð (ð (ð
*ð *ð *ð)ð )ð )ð )ð )r   r=   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚFunctionTimerz:
    A class-based decorator to benchmark a function.
    c                 ó:   — || _         t          ¦   «         | _        d S r	   )Úfunctionr   r   )r   rH   s     r   r?   zFunctionTimer.__init__    s   € Ø ˆŒÝ&™=œ=ˆÔÐÐr   c                 ó°  — | j                              | j        j        ¦  «         	 | j                              | j        j        ¦  «          | j        |i |¤Ž}| j        j        | j         j        v r$| j                              | j        j        ¦  «         nB# | j        j        | j         j        v r%| j                              | j        j        ¦  «         w w xY w|S r	   )r   r   rH   r7   r   r   r+   )r   rC   ÚkwargsÚresults       r   Ú__call__zFunctionTimer.__call__¤   sÒ   € ØÔ×Ò˜Tœ]Ô3Ñ4Ô4Ð4ð	>ØÔ×"Ò" 4¤=Ô#9Ñ:Ô:Ð:Ø"�T”] DÐ3¨FÐ3Ð3ˆFð Œ}Ô%¨Ô)9Ô)EÐEÐEØÔ ×%Ò% d¤mÔ&<Ñ=Ô=Ð=øøð Œ}Ô%¨Ô)9Ô)EÐEÐEØÔ ×%Ò% d¤mÔ&<Ñ=Ô=Ð=Ð=ð Føøøð ˆs   ¦1B Â?CN)r7   r8   r9   r:   r?   rL   r;   r   r   rF   rF   ›   s<   € € € € € ðð ð)ð )ð )ðð ð ð ð r   rF   c                  ó.  — t          d¦  «         ddl} t          d¦  «         t          ¦   «         }|                     ¦   «         }|                     ¦   «          t          d¦  «         t
          t          t          | j        dœ}t          d¦  «         ||dœS )	z%
    Return the debugger output.
    zGetting debugger output...r   NzGetting checkpoints...zGetting system info...)ÚosÚ	processorÚpython_versionÚrunpodzDebugger output complete.)Úsystem_infoÚ
timestamps)	ÚprintrQ   r   r3   r6   ÚOS_INFOÚ	PROCESSORÚPYTHON_VERSIONÚ__version__)rQ   r   Úckpt_resultsrR   s       r   Úget_debugger_outputrZ   ²   s«   € õ 
Ð
&Ñ'Ô'Ð'Ø€M€M€Må	Ð
"Ñ#Ô#Ð#å‘-”-€KØ×.Ò.Ñ0Ô0€LØ×ÒÑÔÐå	Ð
"Ñ#Ô#Ð#õ ÝÝ(ØÔ$ð	ð €Kõ 
Ð
%Ñ&Ô&Ð&ð #Ø"ðð ð r   c                  óJ   — t          ¦   «         } |                      ¦   «          dS )z$
    Clear the debugger output.
    N)r   r6   )r   s    r   Úclear_debugger_outputr\   Ð   s%   € õ ‘-”-€KØ×ÒÑÔÐÐÐr   )r:   r$   r   Úplatformr"   ÚcpuinfoÚsystemÚreleaserU   Úget_cpu_inforV   r   rP   rW   r   r=   rF   rZ   r\   r;   r   r   ú<module>rb      sm  ððð ð €€€Ø Ð Ð Ð Ð Ð Ø €€€Ø €€€à €€€ð
 ˆXŒ_ÑÔÐ
5Ð
5Ð!1 Ô!1Ñ!3Ô!3Ð
5Ð
5€ð0Ø$�Ô$Ñ&Ô& {Ô3€I€IøØð 0ð 0ð 0Ø/€I€I€Ið0øøøð )�Ô(Ñ*Ô*€ðkð kð kð kð kñ kô kð kð\)ð )ð )ð )ð )ñ )ô )ð )ð$ð ð ð ð ñ ô ð ð.ð ð ð<ð ð ð ð s   »A ÁAÁA