
    P&i              
          d 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m	Z	m
Z
mZmZmZ 	 ddlZdZn# e$ r dZY nw xY wddlmZ ddlmZ  ej        e          Zej        d	k    rej        j        Zej        j        ZnexZZeo
ej        d
k    Z G d d          Z G d d          Zddee          de!de!dee         fdZ"dS )zParallel building utilities.    N)sqrt)AnyCallableDictListOptionalSequenceTF)SphinxParallelError)loggingwin32posixc            	       T    e Zd ZdZddeddfdZ	 ddeded	ee         ddfd
Z	ddZ
dS )SerialTaskszEHas the same interface as ParallelTasks, but executes tasks directly.   nprocreturnNc                     d S N selfr   s     a/home/geonatureadmin/si_en_reseau/tutos/venv/lib/python3.11/site-packages/sphinx/util/parallel.py__init__zSerialTasks.__init__#           	task_funcargresult_funcc                 T    | ||          }n
 |            }|r ||           d S d S r   r   )r   r   r   r   ress        r   add_taskzSerialTasks.add_task&   sK     ?)C..CC)++C 	K	 	r   c                     d S r   r   r   s    r   joinzSerialTasks.join0   r   r   r   NNr   N)__name__
__module____qualname____doc__intr   r   r   r   r!   r$   r   r   r   r   r       s        OO c $     W[ !(+AI(AS	        r   r   c            	       ~    e Zd ZdZdeddfdZdedededdfd	Z	 dd
edede	e         ddfdZ
ddZddZdefdZdS )ParallelTasksz1Executes *nproc* tasks in parallel after forking.r   r   Nc                 v    || _         i | _        i | _        i | _        i | _        i | _        d| _        d| _        d S )Nr   )r   _result_funcs_args_procs_precvs_precvsWaiting	_pworking_taskidr   s     r   r   zParallelTasks.__init__7   s@    
2457
.0').0r   pipefuncr   c                    	 t          j                    }|                                5  | |            }n ||          }d d d            n# 1 swxY w Y   d}n`# t          $ rS}d}t	          j        |j        |          d                                         }|t	          j                    f}Y d }~nd }~ww xY wt          j	        |j
                   |                    ||j
        |f           d S )NFTr   )r   LogCollectorcollectBaseException	tracebackformat_exception_only	__class__strip
format_excconvert_serializablelogssend)	r   r7   r8   r   	collectorretfailederrerrmsgs	            r   _processzParallelTasks._processH   s@   	3,..I""$$ $ $;$&&CC$s))C	$ $ $ $ $ $ $ $ $ $ $ $ $ $ $
 FF 	3 	3 	3F4S]CHHKQQSSF9/112CCCCCC	3 	$Y^444		69>3/00000s;   'A AA AA AA 
B9&A	B44B9r   r   c                 F   | j         }| xj         dz  c_         |pd | j        |<   || j        |<   t          j        d          \  }}t          j        d          }|                    | j        |||f          }|| j        |<   || j	        |<   | 
                                 d S )Nr   c                     d S r   r   )r   results     r   <lambda>z(ParallelTasks.add_task.<locals>.<lambda>]   s    d r   Ffork)targetargs)r6   r0   r1   multiprocessingPipeget_contextProcessrJ   r2   r4   	_join_one)	r   r   r   r   tidprecvpsendcontextprocs	            r   r!   zParallelTasks.add_taskX   s     l"-"K2J2J3
3&+E22u.:6BBdm5)S:QRRC#(C r   c                     	 | j         r1|                                 st          j        d           | j         /d S d S # t          $ r |                                   w xY w)Ng{Gz?)r5   rV   timesleep	Exception	terminater#   s    r   r$   zParallelTasks.joinf   s    	. %~~'' %Jt$$$ . % % % % %  	 	 	NN	s	   6<  Ac                 .   t          | j                  D ]}| j        |                                          | j                            |           | j                            |           | j                            |           | xj        dz  c_        d S )Nr   )listr3   r2   r`   r0   popr5   )r   rW   s     r   r`   zParallelTasks.terminatep   s    %% 	  	 CK&&(((""3'''KOOC   LS!!!NNaNNN	  	 r   c                    d}| j                                         D ]\  }}|                                r|                                \  }}}|r	t	          | |D ]}t
                              |            | j                            |          | j	                            |          |           | j
        |                                          | j                             |           | xj        dz  c_        d} n| j        r|| j        | j        k     rl| j                                        \  }}	|	| j         |<   | j
        |                                          | xj        dz  c_        | j        r| j        | j        k     l|S )NFr   T)r3   itemspollrecvr
   loggerhandler0   rc   r1   r2   r$   r5   r4   r   popitemstart)
r   
joined_anyrW   r7   excrC   rM   lognewtidnewprecvs
             r   rV   zParallelTasks._join_onex   s   
++-- 	 	ICyy{{ $(IIKK!T6 7-v66 ' 'CMM#&&&&+"&&s++DJNN3,?,?HHHC %%'''  %%%!#!
 ! 	 dntz&A&A#2::<<FH#+DL K%%'''NNaNN	 ! 	 dntz&A&A r   r&   r'   )r(   r)   r*   r+   r,   r   r   r   rJ   r   r!   r$   r`   boolrV   r   r   r   r.   r.   4   s        ;;c d    "1S 1 1s 1t 1 1 1 1" W[ !(+AI(AS	             4      r   r.   
   	argumentsr   maxbatchr   c                      t                     }||z  |k    r"t          t          ||z  |z                      dk    rdt          |          \  }}|r|dz  } fdt	          |          D             S )Nr   r   c                 6    g | ]}|z  |d z   z           S r%   r   ).0irs   	chunksizes     r   
<listcomp>zmake_chunks.<locals>.<listcomp>   s0    QQQQIa)mQUi$778QQQr   )lenr,   r   divmodrange)rs   r   rt   nargsnchunksrestry   s   `     @r   make_chunksr      s    	NNEIHUU]X56677	A~~	5),,MGT 1QQQQQ%..QQQQr   )rr   )#r+   ossysr]   r=   mathr   typingr   r   r   r   r   r	   rR   HAS_MULTIPROCESSINGImportErrorsphinx.errorsr
   sphinx.utilr   	getLoggerr(   rh   platformrZ   ForkContextForkProcessnameparallel_availabler   r.   strr,   r   r   r   r   <module>r      s   " " 				 



            @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @         . - - - - -      		8	$	$<7!)5K!)5KK !$#K+ %;G);        (Z Z Z Z Z Z Z ZzR R8C= R R RTRUY R R R R R Rs   1 ;;