
    -Ph                        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	 	 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mZ 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_CHECKINGTF)SphinxParallelError)logging)CallableSequence)Anyposixc                  2    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     T/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sphinx/util/parallel.py__init__zSerialTasks.__init__"           N	task_func(Callable[[Any], Any] | Callable[[], Any]argr
   result_funcCallable[[Any], Any] | 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.join2   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      sh        OO     37	         r   r   c                  H    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_precvs_waiting	_pworking_taskidr   s     r   r   zParallelTasks.__init__9   s@    
CE24
&(')/1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._processJ   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    Callable[[Any, Any], Any] | Nonec                   | j         }| xj         dz  c_         |pd | j        |<   || j        |<   t          j        d          \  }}t          j        d          }|                    | j        |||f          }|| j        |<   || j	        |<   	 | 
                                 d S # t          $ r |                                  Y d S w xY w)Nr   c                    d S r   r   )r   results     r   <lambda>z(ParallelTasks.add_task.<locals>.<lambda>d   s    d r   Ffork)targetargs)r8   r2   r3   multiprocessingPipeget_contextProcessrL   r4   r6   	_join_one	Exception	terminate)	r   r   r   r   tidprecvpsendcontextprocs	            r   r#   zParallelTasks.add_task\   s     l"-"K2J2J3
3&+E22u&26::dm5)S:QRRC$)S!	NN 	 	 	 NN	s   B$ $CCc                    	 | j         r/|                                 st          j        d           | j         /|                                  d S # |                                  w xY w)Ng{Gz?)r7   rY   timesleepr[   r%   s    r   r&   zParallelTasks.joinr   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   r[   r2   popr7   )r   r\   s     r   r[   zParallelTasks.terminate{   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   rf   r3   r4   r&   r7   r6   r   popitemstart)
r   
joined_anyr\   r9   excrE   rP   lognewtidnewprecvs
             r   rY   zParallelTasks._join_one   s   
++-- 	 	ICyy{{ $(IIKK!T6 7-v66 ' 'CMM#&&&&+"&&s++DJNN3,?,?HHHC %%'''  %%%!#!
 " 	 t~
'B'B#3;;==FH#+DL K%%'''NNaNN	 " 	 t~
'B'B r   r(   )r9   r
   r:   r   r   r
   r   r   r)   )r   r   r   r
   r   rM   r   r   r*   )r   rg   )
r+   r,   r-   r.   r   rL   r#   r&   r[   rY   r   r   r   r0   r0   6   s        ;;   "1 1 1 1* 8<	    ,               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irv   	chunksizes     r   
<listcomp>zmake_chunks.<locals>.<listcomp>   s0    SSSqIa)mq1u	&99:SSSr   )lenr   r   divmodrange)rv   r   rx   nargsnchunksrestr~   s   `     @r   make_chunksr      s    	NNEIHUU]X56677	A~~	5),,MGT 1SSSSSE'NNSSSSr   )ru   )rv   rw   r   r   rx   r   r   ry   )r.   
__future__r   osrb   r?   mathr   typingr   rU   HAS_MULTIPROCESSINGImportErrorsphinx.errorsr   sphinx.utilr   collections.abcr   r	   r
   	getLoggerr+   rl   nameparallel_availabler   r0   r   r   r   r   <module>r      s   " " " " " " " " 				                                . - - - - -       22222222		8	$	$ )?RW-?        .c c c c c c c cLT T T T T T Ts   ) 33