+
    –°³jº  ã                   óÌ   € ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RIH	t	 ^RI
HtHtHtHt . ROt] P                   ! ]4      t ! R R]4      t ! R	 R]4      t ! R
 R]4      tR# )é    N)ÚEmpty)ÚAny)ÚRequestQueueÚTimerClientÚTimerRequestÚTimerServerÚLocalTimerClientÚMultiprocessingRequestQueueÚLocalTimerServerc                   óB   a a€ ] tR t^t oRtV 3R ltR tR tRtVt	V ;t
# )r	   a.  
Client side of ``LocalTimerServer``. This client is meant to be used
on the same host that the ``LocalTimerServer`` is running on and uses
pid to uniquely identify a worker. This is particularly useful in situations
where one spawns a subprocess (trainer) per GPU on a host with multiple
GPU devices.
c                ó0   <€ \         SV `  4        Wn        R # ©N©ÚsuperÚ__init__Ú	_mp_queue©ÚselfÚmp_queueÚ	__class__s   &&€Úl/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/distributed/elastic/timer/local_timer.pyr   ÚLocalTimerClient.__init__    ó   ø€ Ü‰ÑÔØ!Žó    c                ó~   € \         P                  ! 4       p\        W1V4      pV P                  P	                  V4       R # r   ©ÚosÚgetpidr   r   Úput)r   Úscope_idÚexpiration_timeÚpidÚacquire_requests   &&&  r   ÚacquireÚLocalTimerClient.acquire$   s+   € Ü�iŠi‹kˆÜ& s°oÓFˆØ�‰×Ñ˜?Ö+r   c                ó~   € \         P                  ! 4       p\        W!R4      pV P                  P	                  V4       R# )é   Néÿÿÿÿr   )r   r    r"   Úrelease_requests   &&  r   ÚreleaseÚLocalTimerClient.release)   s+   € Ü�iŠi‹kˆÜ& s°bÓ9ˆØ�‰×Ñ˜?Ö+r   ©r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r$   r*   Ú__static_attributes__Ú__classdictcell__Ú__classcell__©r   Ú__classdict__s   @@r   r	   r	      s   ù‡ € ñõ"ò,÷
,ò ,r   c                   óf   a a€ ] tR t^/t oRtV3R lV 3R lltV3R lR ltV3R lR ltRtVt	V ;t
# )	r
   z?
A ``RequestQueue`` backed by python ``multiprocessing.Queue``
c                ó4   <€ V ^8„  d   QhRS[ P                  /# )é   r   )ÚmpÚQueue)Úformatr6   s   "€r   Ú__annotate__Ú(MultiprocessingRequestQueue.__annotate__4   s   ø€ ÷ "ñ "¡§¡ñ "r   c                ó0   <€ \         SV `  4        Wn        R # r   r   r   s   &&€r   r   Ú$MultiprocessingRequestQueue.__init__4   r   r   c                ó    <€ V ^8„  d   QhRS[ /# )r9   Úreturn)Úint)r<   r6   s   "€r   r=   r>   8   s   ø€ ÷ &ñ &‘cñ &r   c                ó6   € V P                   P                  4       # r   )r   Úqsize)r   s   &r   ÚsizeÚ MultiprocessingRequestQueue.size8   s   € Ø�~‰~×#Ñ#Ó%Ð%r   c                ó6   <€ V ^8„  d   QhRS[ RS[S[,          /# )r9   ÚtimeoutrB   )ÚfloatÚlistr   )r<   r6   s   "€r   r=   r>   ;   s    ø€ ÷ ñ ¡ð ©4±Õ+=ñ r   c                ó:  € . pTp\        V4       Ft  p\        P                  ! 4       p V P                  P                  R VR7      pTP                  T4       T\        P                  ! 4       T,
          ,
          pT^ 8:  g   Ks   T# 	  V#   \         d      T# i ; i)T)ÚblockrI   )ÚrangeÚtimer   Úgetr   Úappend)r   rF   rI   ÚrequestsÚwaitÚ_ÚstartÚrs   &&&     r   rP   ÚMultiprocessingRequestQueue.get;   s—   € ØˆØˆÜ�t–ˆAÜ—I’I“KˆEðØ—N‘N×&Ñ&¨T¸4Ð&Ó@�ð �O‰O˜AÔØœ4Ÿ9š9›;¨Õ.Õ/ˆDØ�qŽyØàˆñ ð ˆøô ô Ùð ˆðús   ©B
Â
BÂBr,   )r-   r.   r/   r0   r1   r   rF   rP   r2   r3   r4   r5   s   @@r   r
   r
   /   s-   ù‡ € ñ÷"ó "÷&ð &÷÷ ð r   c                   óŽ   a a€ ] tR t^Nt oRtRV3R lV 3R llltV3R lR ltV3R lR ltV3R lR	 ltV3R
 lR lt	Rt
VtV ;t# )r   a3  
Server that works with ``LocalTimerClient``. Clients are expected to be
subprocesses to the parent process that is running this server. Each host
in the job is expected to start its own timer server locally and each
server instance manages timers for local workers (running on processes
on the same host).
c                ó@   <€ V ^8„  d   QhRS[ P                  RS[RS[/# )r9   r   Úmax_intervalÚdaemon)r:   r;   rJ   Úbool)r<   r6   s   "€r   r=   ÚLocalTimerServer.__annotate__W   s)   ø€ ÷ ?ñ ?ÙŸ™ð?Ù05ð?ÙDHñ?r   c                óH   <€ \         SV `  \        V4      W#4       / V n        R # r   )r   r   r
   Ú_timers)r   r   rZ   r[   r   s   &&&&€r   r   ÚLocalTimerServer.__init__W   s!   ø€ ô 	‰ÑÔ4°XÓ>ÀÔUØ<>ˆŽr   c                ó4   <€ V ^8„  d   QhRS[ S[,          RR/# )r9   Útimer_requestsrB   N)rK   r   )r<   r6   s   "€r   r=   r]   ]   s    ø€ ÷ 
8ñ 
8©d±<Õ.@ð 
8ÀTñ 
8r   c                óÊ   € V F\  pVP                   pVP                  pVP                  pV^ 8  d    V P                  P	                  W43R4       KM  W P                  W43&   K^  	  R# )r   N)Ú	worker_idr    r!   r_   Úpop)r   rb   Úrequestr"   r    r!   s   &&    r   Úregister_timersÚ LocalTimerServer.register_timers]   s[   € Û%ˆGØ×#Ñ#ˆCØ×'Ñ'ˆHØ%×5Ñ5ˆOð  Ô"Ø—‘× Ñ  # °$Ö7à07—‘˜c˜_Ó-ó &r   c                ó4   <€ V ^8„  d   QhRS[ S[,          RR/# )r9   Ú
worker_idsrB   N)ÚsetrC   )r<   r6   s   "€r   r=   r]   i   s   ø€ ÷ 2ñ 2¡s©3¥xð 2°Dñ 2r   c                ó¦   € \        V P                  P                  4       4       F)  w  r#W!9   g   K  V P                  P                  W#34       K+  	  R # r   )rK   r_   Úkeysre   )r   rj   r"   r    s   &&  r   Úclear_timersÚLocalTimerServer.clear_timersi   s:   € Ü! $§,¡,×"3Ñ"3Ó"5Ö6‰MˆCØÖ Ø—‘× Ñ  # Ö1ó 7r   c                óL   <€ V ^8„  d   QhRS[ RS[S[S[S[,          3,          /# )r9   ÚdeadlinerB   )rJ   Údictr   rK   r   )r<   r6   s   "€r   r=   r]   n   s*   ø€ ÷ ñ ©5ð ±T¹#¹tÁLÕ?QÐ:QÕ5Rñ r   c                óÌ   € / pV P                   P                  4        FC  pVP                  V8:  g   K  VP                  VP                  . 4      pVP                  V4       KE  	  V# r   )r_   Úvaluesr!   Ú
setdefaultrd   rQ   )r   rq   Úexpired_timersrf   Úexpired_scopess   &&   r   Úget_expired_timersÚ#LocalTimerServer.get_expired_timersn   sZ   € à8:ˆØ—|‘|×*Ñ*Ö,ˆGØ×&Ñ&¨(Ö2Ø!/×!:Ñ!:¸7×;LÑ;LÈbÓ!Q�Ø×%Ñ% gÖ.ñ -ð Ðr   c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r9   rd   rB   )rC   r\   )r<   r6   s   "€r   r=   r]   w   s   ø€ ÷ 	ñ 	¡cð 	©dñ 	r   c                óè   €  \         P                  ! V\        P                  4       R #   \         d    \
        P                  RT4        R # \         d    \
        P                  RT4        R# i ; i)Tz,Process with pid=%s does not exist. SkippingzError terminating pid=%sF)	r   ÚkillÚsignalÚSIGKILLÚProcessLookupErrorÚloggerÚinfoÚ	ExceptionÚ	exception)r   rd   s   &&r   Ú_reap_workerÚLocalTimerServer._reap_workerw   s\   € ð	DÜ�GŠG�IœvŸ~™~Ô.ÙøÜ!ô 	Ü�K‰KÐFÈ	ÔRÚÜô 	DÜ×ÑÐ7¸ÕCÙð	Dús   ‚%) ©!A1ÁA1ÁA1Á0A1)r_   )é<   T)r-   r.   r/   r0   r1   r   rg   rn   rx   r„   r2   r3   r4   r5   s   @@r   r   r   N   sA   ù‡ € ñ÷?õ ?÷
8ð 
8÷2ð 2÷
ð ÷	÷ 	ð 	r   )r	   r
   r   )ÚloggingÚmultiprocessingr:   r   r}   rO   Úqueuer   Útypingr   Úapir   r   r   r   Ú__all__Ú	getLoggerr-   r€   r	   r
   r   © r   r   Ú<module>r�      s^   ðó Û Û 	Û Û Ý Ý ç EÓ Eò R€à	×	Ò	˜8Ó	$€ô,�{ô ,ô0 ,ô ô>2�{ö 2r   