ó
    !Eñi?2  ã                   ó0  • S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
JrJr  SSKJr  Sr\ R                   " \5      r/ SQr " S S\5      r " S	 S
\5      r " S S\5      rS r " S S5      r " S S\5      r     SS jrSS jrg)é    N)Úas_completedÚThreadPoolExecutoré   )Ú_prctl_pr_set_pdeathsigÚTORCH_MP_PARALLEL_START)ÚProcessContextÚProcessExceptionÚProcessExitedExceptionÚProcessRaisedExceptionÚspawnÚSpawnContextÚstart_processesc                   óF   ^ • \ rS rSrSS/rS\S\S\4U 4S jjrS rSr	U =r
$ )r	   é    Úerror_indexÚ	error_pidÚmsgc                 óH   >• [         TU ]  U5        Xl        X l        X0l        g ©N)ÚsuperÚ__init__r   r   r   )Úselfr   r   r   Ú	__class__s       €ÚX/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/multiprocessing/spawn.pyr   ÚProcessException.__init__#   s    ø€ Ü‰Ñ˜ÔØŒØ&ÔØ"�ó    c                 ó^   • [        U 5      U R                  U R                  U R                  44$ r   )Útyper   r   r   ©r   s    r   Ú
__reduce__ÚProcessException.__reduce__)   s&   € Ü�D‹z˜DŸH™H d×&6Ñ&6¸¿¹ÐGÐGÐGr   )r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú	__slots__ÚstrÚintr   r    Ú__static_attributes__Ú__classcell__©r   s   @r   r	   r	       s3   ø† Ø Ð,€Ið#˜Cð #¨cð #¸c÷ #÷Hð Hr   r	   c                   ó   • \ rS rSrSrSrg)r   é-   zNException raised when a process failed due to an exception raised by the code.© N)r"   r#   r$   r%   Ú__doc__r)   r.   r   r   r   r   -   s   † ÜXr   r   c                   ó\   ^ • \ rS rSrSrS/r SS\S\S\S\S\S-  4
U 4S	 jjjrS
 r	Sr
U =r$ )r
   é1   zTException raised when a process failed due to signal or exited with a specific code.Ú	exit_codeNr   r   r   Úsignal_namec                 ó>   >• [         TU ]  XU5        X@l        XPl        g r   )r   r   r2   r3   )r   r   r   r   r2   r3   r   s         €r   r   ÚProcessExitedException.__init__6   s   ø€ ô 	‰Ñ˜¨9Ô5Ø"ŒØ&Õr   c                 óŠ   • [        U 5      U R                  U R                  U R                  U R                  U R
                  44$ r   )r   r   r   r   r2   r3   r   s    r   r    Ú!ProcessExitedException.__reduce__B   s?   € ä�‹Jà—‘Ø× Ñ Ø—‘Ø—‘Ø× Ñ ðð	
ð 		
r   )r2   r3   r   )r"   r#   r$   r%   r/   r&   r'   r(   r   r    r)   r*   r+   s   @r   r
   r
   1   sZ   ø† Ù^à�€Ið #'ñ
'àð
'ð ð
'ð ð	
'ð
 ð
'ð ˜4‘Z÷
'ð 
'÷

ð 

r   r
   c                 óL  • [        [        R                  5         U " U/UQ76   g ! [         a     g [         ai    SS Kn[        US5       n[        R                  " UR                  5       U5        S S S 5        O! , (       d  f       O= f[        R                  " S5         g f = f)Nr   Úwbr   )r   ÚsignalÚSIGINTÚKeyboardInterruptÚ	ExceptionÚ	tracebackÚopenÚpickleÚdumpÚ
format_excÚsysÚexit)ÚfnÚiÚargsÚ
error_filer>   Úfhs         r   Ú_wraprJ   O   sw   € ô
 œFŸM™MÔ*ð
Ù
ˆ1ˆˆtŒøÜó ÙÜó ãä�*˜dÔ# rÜ�KŠK˜	×,Ñ,Ó.°Ô3÷ $×#Ö#úä�Š�Žðús,   ›	% ¥
B#±B#Á
&A9Á0	B#Á9
B	ÂB#Â"B#c                   óP   • \ rS rSrS rS rS\4S jrS
S\S-  S\S-  4S jjrS	r	g)r   éc   c                 óˆ   • X l         Xl        [        U5       VVs0 s H  u  p4UR                  U_M     snnU l        g s  snnf r   )Úerror_filesÚ	processesÚ	enumerateÚsentinelÚ	sentinels)r   rO   rN   ÚindexÚprocesss        r   r   ÚProcessContext.__init__d   s@   € Ø&ÔØ"Œä:CÀIÔ:Nô
Ú:N©¨ˆG×Ñ˜eÒ#Ñ:Nò
ˆ�ùó 
s   ›>c                 ól   • U R                    Vs/ s H  n[        UR                  5      PM     sn$ s  snf r   )rO   r(   Úpid)r   rT   s     r   ÚpidsÚProcessContext.pidsk   s'   € Ø04·²Ó?² W”�G—K‘KÖ ±Ñ?Ð?ùÒ?s   �1Útimeoutc                 óÀ   • [         R                  " 5       U-   nU R                   H6  n[        SU[         R                  " 5       -
  5      nUR	                  U5        M8     g)z4Attempt to join all processes with a shared timeout.r   N)ÚtimeÚ	monotonicrO   ÚmaxÚjoin)r   rZ   ÚendrT   Útime_to_waits        r   Ú_join_procs_with_timeoutÚ'ProcessContext._join_procs_with_timeoutn   sE   € ä�nŠnÓ Ñ(ˆØ—~”~ˆGä˜q #¬¯ªÓ(8Ñ"8Ó9ˆLØ�L‰L˜Ö&ò &r   NÚgrace_periodc                 óì  • [        U R                  5      S:X  a  g[        R                  R	                  U R                  R                  5       US9nSnU HQ  nU R                  R                  U5      nU R                  U   nUR                  5         UR                  S:w  d  MO  Un  O   Uc  [        U R                  5      S:H  $ Ub  U R                  U5        U R                   HJ  nUR                  5       (       d  M  [        R                  SUR                  5        UR                  5         ML     U R                  Uc  SOU5        U R                   HX  nUR                  5       (       a0  [        R                  SUR                  5        UR!                  5         UR                  5         MZ     U R                  U   n["        R$                  " U R&                  U   ["        R(                  5      (       d}  U R                  U   R                  n	U	S:  a@   [*        R,                  " U	* 5      R.                  n
[3        S
US SU
 3UUR                  U	U
S9e[3        S
US SU	S 3UUR                  U	S9e[5        U R&                  U   S5       n[6        R8                  " U5      nSSS5        SUS S3nUW-  n[;        XÔUR                  5      e! [0         a
    SU	*  S	3n
 N©f = f! , (       d  f       NG= f)aì  Join one or more processes within spawn context.

Attempt to join one or more processes in this spawn context.
If one of them exited with a non-zero exit status, this function
kills the remaining processes (optionally with a grace period)
and raises an exception with the cause of the first process exiting.

Returns ``True`` if all processes have been joined successfully,
``False`` if there are more processes that need to be joined.

Args:
    timeout (float): Wait this long (in seconds) before giving up on waiting.
    grace_period (float): When any processes fail, wait this long (in seconds)
        for others to shutdown gracefully before terminating them. If they
        still don't exit, wait another grace period before killing them.
r   T)rZ   Nz)Terminating process %s via signal SIGTERMé   zJUnable to shutdown process %s via SIGTERM , forcefully exiting via SIGKILLz<Unknown signal Ú>zprocess Údz terminated with signal )r   r   r2   r3   z terminated with exit code )r   r   r2   Úrbz

-- Process z& terminated with the following error:
)ÚlenrR   ÚmultiprocessingÚ
connectionÚwaitÚkeysÚpoprO   r_   Úexitcoderb   Úis_aliveÚlogÚwarningrW   Ú	terminateÚkillÚosÚaccessrN   ÚR_OKr:   ÚSignalsÚnameÚ
ValueErrorr
   r?   r@   Úloadr   )r   rZ   rd   Úreadyr   rQ   rS   rT   Úfailed_processrp   rz   rI   Úoriginal_tracer   s                 r   r_   ÚProcessContext.joinv   s·  € ô$ ˆt�~‰~Ó !Ó#Øô  ×*Ñ*×/Ñ/Ø�N‰N×ÑÓ!Øð 0ð 
ˆð
 ˆÛˆHØ—N‘N×&Ñ& xÓ0ˆEØ—n‘n UÑ+ˆGØ�L‰LŒNØ×Ñ 1Õ$Ø#�Ùñ ð Ñä�t—~‘~Ó&¨!Ñ+Ð+ð Ñ#Ø×)Ñ)¨,Ô7à—~”~ˆGØ×Ñ×!Ó!Ü—‘ÐGÈÏÉÔUØ×!Ñ!Ö#ñ &ð 	×%Ñ%¨LÑ,@¡bÀlÔSØ—~”~ˆGØ×Ñ×!Ñ!Ü—‘Ø`Ø—K‘Kôð —‘”Ø�L‰LŽNñ &ð Ÿ™¨Ñ4ˆÜ�yŠy˜×)Ñ)¨+Ñ6¼¿¹×@Ñ@Ø—~‘~ kÑ2×;Ñ;ˆHØ˜!‹|ð;Ü!Ÿ>š>¨8¨)Ó4×9Ñ9�Dô -Ø˜{¨1˜oÐ-EÀdÀVÐLØ +Ø,×0Ñ0Ø&Ø $ñð ô -Ø˜{¨1˜oÐ-HÈÐRSÈÐUØ +Ø,×0Ñ0Ø&ñ	ð ô �$×"Ñ" ;Ñ/°Ô6¸"Ü#Ÿ[š[¨›_ˆN÷ 7à ¨A˜Ð.UÐVˆØˆ~ÑˆÜ$ S°~×7IÑ7IÓJÐJøô+ "ó ;Ø-¨x¨i¨[¸Ð:’Dð;ú÷" 7Õ6ús   È!K ÊK%ËK"Ë!K"Ë%
K3)rN   rO   rR   )NN)
r"   r#   r$   r%   r   rX   Úfloatrb   r_   r)   r.   r   r   r   r   c   sA   † ò
ò@ð'°ô 'ñ]K˜E D™Lð ]K¸uÀt¹|÷ ]Kð ]Kr   r   c                   ó(   ^ • \ rS rSrU 4S jrSrU =r$ )r   éÖ   c                 óN   >• [         R                  " SSS9  [        TU ]  X5        g )Nz<SpawnContext is renamed to ProcessContext since 1.4 release.é   ©Ú
stacklevel)ÚwarningsÚwarnr   r   )r   rO   rN   r   s      €r   r   ÚSpawnContext.__init__×   s$   ø€ Ü�ŠØJÐWXò	
ô 	‰Ñ˜Õ0r   r.   )r"   r#   r$   r%   r   r)   r*   r+   s   @r   r   r   Ö   s   ø† ÷1ó 1r   r   c                 óÌ  ^ ^^^• US:X  a@  [         R                  R                  [        S5      S:X  a  [        R                  S5        SnOSn[        R                  " U5      mS /U-  nS /U-  nUUU U4S jn	U(       d&  [        U5       H  n
U	" U
5      u  p¼nX×U'   XÈU'   M     Oh[        US9 n[        U5       V
s/ s H  o®R                  Xš5      PM     nn
[        U5       H  nUR                  5       u  p¼nX×U'   XÈU'   M      S S S 5        [        X‡5      nU(       d  U$ UR                  5       (       d   UR                  5       (       d  M  g g s  sn
f ! , (       d  f       NV= f)	NÚ
forkserverÚ0Ú1zStarting processes in parallel.TFc                 ó  >• [         R                  " SSSS9nUR                  5         [        R                  " UR
                  5        TR                  [        TU TUR
                  4TS9nUR                  5         XUR
                  4$ )Nzpytorch-errorfile-z.pickleF)ÚprefixÚsuffixÚdelete)ÚtargetrG   Údaemon)	ÚtempfileÚNamedTemporaryFileÚcloserv   Úunlinkrz   ÚProcessrJ   Ústart)rF   ÚtfrT   rG   r”   rE   Úmps      €€€€r   Ústart_processÚ&start_processes.<locals>.start_process   sz   ø€ ô ×(Ò(Ø'°	À%ñ
ˆð 	�‰Œ
Ü
�	Š	�"—'‘'Ôà—*‘*ÜØ�a˜˜rŸw™wÐ'Øð ð 
ˆð 	�‰ŒØ˜2Ÿ7™7Ð"Ð"r   )Úmax_workers)rv   ÚenvironÚgetÚENV_VAR_PARALLEL_STARTrr   Úinfork   Úget_contextÚranger   Úsubmitr   Úresultr   r_   )rE   rG   Únprocsr_   r”   Ústart_methodÚstart_parallelrN   rO   r�   rF   ÚidxrT   Útf_nameÚexecutorÚfuturesÚfutÚcontextrœ   s   ``  `             @r   r   r   æ   s=  û€ ð 	˜Ó$Ü�J‰J�N‰NÔ1°3Ó7¸3Ó>ä�‰Ð2Ô3Ø‰ð ˆä	×	$Ò	$ \Ó	2€BØ�&˜6‘/€KØ�˜‘€I÷#ð #ö, Ü�v–ˆAÙ$1°!Ó$4Ñ!ˆC˜'Ø&˜ÑØ$�c‹Nò ô
  ¨FÒ3°xÜBGÈÄ-ÓPÂ-¸Q—‘ }Ö8Á-ˆGÐPÜ# GÖ,�Ø(+¯
©
«Ñ%�˜gà#*˜CÑ Ø!(˜#“ñ	 -÷ 4ô ˜YÓ4€GÞØˆð �l‰l�n‰nØð �l‰l�n�nùò Q÷ 4Õ3ús   Â.EÂ<EÃ/EÅEÅ
E#c           	      óf   • US:w  a   SU S3n[         R                  " U[        SS9  [        XX#USS9$ )aR  Spawns ``nprocs`` processes that run ``fn`` with ``args``.

If one of the processes exits with a non-zero exit status, the
remaining processes are killed and an exception is raised with the
cause of termination. In the case an exception was caught in the
child process, it is forwarded and its traceback is included in
the exception raised in the parent process.

Args:
    fn (function): Function is called as the entrypoint of the
        spawned process. This function must be defined at the top
        level of a module so it can be pickled and spawned. This
        is a requirement imposed by multiprocessing.

        The function is called as ``fn(i, *args)``, where ``i`` is
        the process index and ``args`` is the passed through tuple
        of arguments.

    args (tuple): Arguments passed to ``fn``.
    nprocs (int): Number of processes to spawn.
    join (bool): Perform a blocking join on all processes.
    daemon (bool): The spawned processes' daemon flag. If set to True,
                   daemonic processes will be created.
    start_method (str): (deprecated) this method will always use ``spawn``
                           as the start method. To use a different start method
                           use ``start_processes()``.

Returns:
    None if ``join`` is ``True``,
    :class:`~ProcessContext` if ``join`` is ``False``

r   z3This method only supports start_method=spawn (got: zU).
To use a different start_method use:
		 torch.multiprocessing.start_processes(...)r…   r†   )r©   )rˆ   r‰   ÚFutureWarningr   )rE   rG   r¨   r_   r”   r©   r   s          r   r   r   ,  sG   € ðB �wÓàAÀ,Àð P:ð :ð 	ô
 	�Š�cœ=°QÒ7Ü˜2 V°6ÈÑPÐPr   )r.   r   TFr   )Úloggingrk   Úmultiprocessing.connectionrv   r@   r:   rC   r•   r\   rˆ   Úconcurrent.futuresr   r   Ú r   r¢   Ú	getLoggerr"   rr   Ú__all__r=   r	   r   r
   rJ   r   r   r   r   r.   r   r   Ú<module>r¹      s°   ðã Û Û !Û 	Û Û Û 
Û Û Û ß ?å %ð 3Ð à×Ò˜Ó!€ò€ô
H�yô 
HôYÐ-ô Yô
Ð-ô 
ò<÷(pKñ pKôf1�>ô 1ð$ 
ØØ	ØØôCõL(Qr   