
    7 f                       d Z ddlm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 	 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	rdd
lmZ  ej        e          Zeo
ej        dk    Z G d d          Z G d d          ZdddZdS )zParallel building utilities.    )annotationsN)sqrt)TYPE_CHECKINGAnyCallableTF)SphinxParallelError)logging)Sequenceposixc                  0    e Zd ZdZdddZ	 dddZddZdS )SerialTaskszEHas the same interface as ParallelTasks, but executes tasks directly.   nprocintreturnNonec                    d S N selfr   s     J/var/www/equiseq/venv/lib/python3.11/site-packages/sphinx/util/parallel.py__init__zSerialTasks.__init__            N	task_funcr   argr   result_funcCallable | Nonec                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.join-   r   r   r   r   r   r   r   NNr   r   r   r   r   r   r   r   r   r   )__name__
__module____qualname____doc__r   r"   r%   r   r   r   r   r      sg        OO     TX         r   r   c                  F    e Zd ZdZddZddZ	 dddZddZddZddZ	dS )ParallelTasksz1Executes *nproc* tasks in parallel after forking.r   r   r   r   c                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__4   s@    
2424
&(').0r   piper   funcr   r   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   r9   r:   r   	collectorretfailederrerrmsgs	            r   _processzParallelTasks._processE   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Nr   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>Z   s    d r   Ffork)targetargs)r8   r2   r3   multiprocessingPipeget_contextProcessrL   r4   r6   	_join_one)	r   r   r   r   tidprecvpsendcontextprocs	            r   r"   zParallelTasks.add_taskU   s     l"-"K2J2J3
3&+E22u&26::dm5)S:QRRC#(C r   c                    	 | j         r/|                                 st          j        d           | j         /|                                  d S # |                                  w xY w)Ng{Gz?)r7   rX   timesleep	terminater$   s    r   r%   zParallelTasks.joinc   sm    	. %~~'' %Jt$$$ . %
 NNDNNs   6A A$c                .   t          | j                  D ]}| j        |                                          | j                            |           | j                            |           | j                            |           | xj        dz  c_        d S )Nr   )listr5   r4   ra   r2   popr7   )r   rY   s     r   ra   zParallelTasks.terminatel   s    %% 	  	 CK&&(((""3'''KOOC   LS!!!NNaNNN	  	 r   boolc                   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)r5   itemspollrecvr   loggerhandler2   rd   r3   r4   r%   r7   r6   r   popitemstart)
r   
joined_anyrY   r9   excrE   rO   lognewtidnewprecvs
             r   rX   zParallelTasks._join_onet   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'   )r9   r   r:   r   r   r   r   r   r(   r)   r*   )r   re   )
r+   r,   r-   r.   r   rL   r"   r%   ra   rX   r   r   r   r0   r0   1   s        ;;   "1 1 1 1" TX                   r   r0   
   	argumentsSequence[str]r   r   maxbatchr   	list[Any]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irt   	chunksizes     r   
<listcomp>zmake_chunks.<locals>.<listcomp>   s0    QQQQIa)mQUi$778QQQr   )lenr   r   divmodrange)rt   r   rv   nargsnchunksrestr|   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   )rs   )rt   ru   r   r   rv   r   r   rw   )r.   
__future__r   osr_   r?   mathr   typingr   r   r   rT   HAS_MULTIPROCESSINGImportErrorsphinx.errorsr   sphinx.utilr	   collections.abcr
   	getLoggerr+   rj   nameparallel_availabler   r0   r   r   r   r   <module>r      s   " " " " " " " " 				            / / / / / / / / / /         . - - - - -       )((((((		8	$	$ %;G);        (Y Y Y Y Y Y Y YxR R R R R R Rs   - 77