ó
    Ú°›jO  ã                   ó.  • S r SSKrSSKJr  SSKrSSKrSSKr\R                  " 5        S\R                  " 5        3r \R                  " 5       S   r
\R                  " 5       r " S S5      r " S	 S
5      r " S S5      rS rS rg! \ a    Sr
 N@f = f)zY
runpod | serverless | rp_debugger.py

A collection of functions to help with debugging.
é    N)ÚtimezoneÚ Ú	brand_rawzUnable to get processor info.c                   óH   • \ rS rSrSrSr/ r0 rS rS r	S r
S rS rS	 rS
rg)ÚCheckpointsé   aÍ  
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                 óÔ   • [         R                  cH  [        R                  U 5      [         l        / [         R                  l        0 [         R                  l        [         R                  $ ©N)r   Ú_Checkpoints__instanceÚobjectÚ__new__ÚcheckpointsÚname_lookup)Úclss    Ú`/home/mande/repo/quber/.venv/lib/python3.13/site-packages/runpod/serverless/utils/rp_debugger.pyr   ÚCheckpoints.__new__<   sG   € Ü×!Ñ!Ñ)Ü%+§^¡^°CÓ%8ŒKÔ"Ø13ŒK×"Ñ"Ô.Ø13ŒK×"Ñ"Ô.Ü×%Ñ%Ð%ó    c                 óÆ   • XR                   ;   a  [        SU S35      eU R                  R                  SU05        [	        U R                  5      S-
  nX R                   U'   g)z8
Add a checkpoint.
Returns the index of the checkpoint.
zCheckpoint name "z" already exists.Únameé   N)r   ÚKeyErrorr   ÚappendÚlen©Úselfr   Úindexs      r   ÚaddÚCheckpoints.addC   sa   € ð
 ×#Ñ#Ó#ÜÐ.¨t¨fÐ4EÐFÓGÐGà×Ñ×Ñ ¨ Ô/ä�D×$Ñ$Ó%¨Ñ)ˆØ!&×Ñ˜Òr   c                 óD  • XR                   ;  a  [        SU S35      eU R                   U   n[        R                  " 5       U R                  U   S'   [
        R
                  R                  [        R                  5      R                  5       S-   U R                  U   S'   g)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"   ÚCheckpoints.startP   s�   € ð ×'Ñ'Ó'ÜÐ.¨t¨fÐ4EÐFÓGÐGà× Ñ  Ñ&ˆÜ+/×+<Ò+<Ó+>ˆ×Ñ˜Ñ Ñ(ä×Ñ×!Ñ!¤(§,¡,Ó/×9Ñ9Ó;¸cÑAð 	×Ñ˜Ñ Ò,r   c                 ó€  • XR                   ;  a  [        SU S35      eU R                   U   nSU R                  U   ;  a  [        S5      e[        R                  " 5       U R                  U   S'   [
        R
                  R                  [        R                  5      R                  5       S-   U R                  U   S'   g)	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   ÚstopÚCheckpoints.stop]   s®   € ð ×'Ñ'Ó'ÜÐ.¨t¨fÐ4EÐFÓGÐGà× Ñ  Ñ&ˆà˜$×*Ñ*¨5Ñ1Ó1ÜÐ=Ó>Ð>ä)-×):Ò):Ó)<ˆ×Ñ˜Ñ Ñ&ä×Ñ×!Ñ!¤(§,¡,Ó/×9Ñ9Ó;¸cÑAð 	×Ñ˜Ñ 
Ò+r   c                 óÚ   • / nU R                    HX  nSU;  d  SU;  a  M  US   nUS   nXC-
  S-  US'   UR                  S5        UR                  S5        UR                  U5        MZ     U$ )z%
Get the results of the checkpoints.
r"   r-   iè  Úduration_ms)r   Úpopr   )r   ÚresultsÚ
checkpointÚ
start_timeÚend_times        r   Úget_checkpointsÚCheckpoints.get_checkpointsn   s|   € ð ˆØ×*Ô*ˆJØ˜jÓ(¨E¸Ó,CÙØ# GÑ,ˆJØ! %Ñ(ˆHØ)1Ñ)>À$Ñ(FˆJ�}Ñ%à�N‰N˜7Ô#Ø�N‰N˜5Ô!à�N‰N˜:Ö&ñ +ð ˆr   c                 ó    • / U l         0 U l        g)z
Clear the checkpoints.
N©r   r   ©r   s    r   ÚclearÚCheckpoints.clear�   s   € ð ˆÔØˆÕr   r;   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   r   r   r   r"   r/   r8   r=   Ú__static_attributes__© r   r   r   r      s6   † ñð8 €JØ€KØ€Kò&ò'ò
ò
ò"õ&r   r   c                   ó*   • \ rS rSrSrS rS rS rSrg)Ú	LineTimeré‰   zŒ
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   • [        5       U l        Xl        U R                  R                  U R                  5        g r
   )r   r   r   r   )r   r   s     r   Ú__init__ÚLineTimer.__init__�   s)   € Ü&›=ˆÔØŒ	Ø×Ñ×Ñ˜TŸY™YÕ'r   c                 óN   • U R                   R                  U R                  5        g r
   )r   r"   r   r<   s    r   Ú	__enter__ÚLineTimer.__enter__”   s   € Ø×Ñ×Ñ˜tŸy™yÕ)r   c                 óN   • U R                   R                  U R                  5        g r
   )r   r/   r   )r   Úargss     r   Ú__exit__ÚLineTimer.__exit__—   s   € Ø×Ñ×Ñ˜dŸi™iÕ(r   )r   r   N)	r?   r@   rA   rB   rC   rJ   rM   rQ   rD   rE   r   r   rG   rG   ‰   s   † ñò
(ò
*õ)r   rG   c                   ó$   • \ rS rSrSrS rS rSrg)ÚFunctionTimeré›   z2
A class-based decorator to benchmark a function.
c                 ó.   • Xl         [        5       U l        g r
   )Úfunctionr   r   )r   rW   s     r   rJ   ÚFunctionTimer.__init__    s   € Ø ŒÜ&›=ˆÕr   c                 óh  • U R                   R                  U R                  R                  5         U R                   R	                  U R                  R                  5        U R                  " U0 UD6nU R                  R                  U R                   R
                  ;   a/  U R                   R                  U R                  R                  5        U$ ! U R                  R                  U R                   R
                  ;   a0  U R                   R                  U R                  R                  5        f f = fr
   )r   r   rW   r?   r"   r   r/   )r   rP   ÚkwargsÚresults       r   Ú__call__ÚFunctionTimer.__call__¤   sß   € Ø×Ñ×Ñ˜TŸ]™]×3Ñ3Ô4ð	>Ø×Ñ×"Ñ" 4§=¡=×#9Ñ#9Ô:Ø—]’] DÐ3¨FÑ3ˆFð �}‰}×%Ñ%¨×)9Ñ)9×)EÑ)EÓEØ× Ñ ×%Ñ% d§m¡m×&<Ñ&<Ô=àˆøð �}‰}×%Ñ%¨×)9Ñ)9×)EÑ)EÓEØ× Ñ ×%Ñ% d§m¡m×&<Ñ&<Õ=ð Fús   ±AC ÃA D1)r   rW   N)r?   r@   rA   rB   rC   rJ   r\   rD   rE   r   r   rT   rT   ›   s   † ñò)õr   rT   c                  óú   • [        S5        SSKn [        S5        [        5       nUR                  5       nUR	                  5         [        S5        [
        [        [        U R                  S.n[        S5        UU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)	Úprintrb   r   r8   r=   ÚOS_INFOÚ	PROCESSORÚPYTHON_VERSIONÚ__version__)rb   r   Úckpt_resultsrc   s       r   Úget_debugger_outputrk   ²   s{   € ô 
Ð
&Ô'Ûä	Ð
"Ô#ä“-€KØ×.Ñ.Ó0€LØ×ÑÔä	Ð
"Ô#ô ÜÜ(Ø×$Ñ$ñ	€Kô 
Ð
%Ô&ð #Ø"ñð r   c                  ó8   • [        5       n U R                  5         g)z
Clear the debugger output.
N)r   r=   )r   s    r   Úclear_debugger_outputrm   Ð   s   € ô “-€KØ×ÑÕr   )rC   r'   r   Úplatformr%   ÚcpuinfoÚsystemÚreleaserf   Úget_cpu_inforg   r   ra   rh   r   rG   rT   rk   rm   rE   r   r   Ú<module>rs      s©   ðñó Ý Û Û ã ð
 �_Š_ÓÐ˜q ×!1Ò!1Ó!3Ð 4Ð
5€ð0Ø×$Ò$Ó& {Ñ3€Ið ×(Ò(Ó*€÷kñ k÷\)ñ )÷$ñ ò.ó<øðw ó 0Ø/‚Ið0ús   ¿B	 Â	BÂB