a
    ze1X                  
   @   sx  d Z ddlZddlZddlZddlZddlZdZdZdZdZ	dZ
dZd	Zd
ZdZe
eeeegZe
dedededediZedZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd  d eZG d!d" d"eZd#d$ Zd%d& Zd3d'd(Z e!d)d*Z"defd+d,Z#G d-d. d.eZ$G d/d0 d0eZ%G d1d2 d2e&Z'dS )4z"Brian Quinlan (brian@sweetapp.com)    NFIRST_COMPLETEDFIRST_EXCEPTIONALL_COMPLETED_AS_COMPLETEDPENDINGRUNNING	CANCELLEDCANCELLED_AND_NOTIFIEDFINISHEDpendingrunning	cancelledfinishedzconcurrent.futuresc                   @   s   e Zd ZdS )ErrorN__name__
__module____qualname__ r   r   ./usr/lib/python3.9/concurrent/futures/_base.pyr   -   s   r   c                   @   s   e Zd ZdS )CancelledErrorNr   r   r   r   r   r   1   s   r   c                   @   s   e Zd ZdS )TimeoutErrorNr   r   r   r   r   r   5   s   r   c                   @   s   e Zd ZdS )InvalidStateErrorNr   r   r   r   r   r   9   s   r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
_Waiterc                 C   s   t  | _g | _d S N)	threadingEventeventfinished_futuresselfr   r   r   __init__?   s    
z_Waiter.__init__c                 C   s   | j | d S r   r   appendr    futurer   r   r   
add_resultC   s    z_Waiter.add_resultc                 C   s   | j | d S r   r"   r$   r   r   r   add_exceptionF   s    z_Waiter.add_exceptionc                 C   s   | j | d S r   r"   r$   r   r   r   add_cancelledI   s    z_Waiter.add_cancelledN)r   r   r   r!   r&   r'   r(   r   r   r   r   r   =   s   r   c                       s@   e Zd Z fddZ fddZ fddZ fddZ  ZS )	_AsCompletedWaiterc                    s   t t|   t | _d S r   )superr)   r!   r   Locklockr   	__class__r   r   r!   O   s    z_AsCompletedWaiter.__init__c                    sD   | j * tt| | | j  W d    n1 s60    Y  d S r   )r,   r*   r)   r&   r   setr$   r-   r   r   r&   S   s    z_AsCompletedWaiter.add_resultc                    sD   | j * tt| | | j  W d    n1 s60    Y  d S r   )r,   r*   r)   r'   r   r/   r$   r-   r   r   r'   X   s    z _AsCompletedWaiter.add_exceptionc                    sD   | j * tt| | | j  W d    n1 s60    Y  d S r   )r,   r*   r)   r(   r   r/   r$   r-   r   r   r(   ]   s    z _AsCompletedWaiter.add_cancelled)r   r   r   r!   r&   r'   r(   __classcell__r   r   r-   r   r)   L   s   r)   c                       s4   e Zd Z fddZ fddZ fddZ  ZS )_FirstCompletedWaiterc                    s   t  | | j  d S r   )r*   r&   r   r/   r$   r-   r   r   r&   e   s    z _FirstCompletedWaiter.add_resultc                    s   t  | | j  d S r   )r*   r'   r   r/   r$   r-   r   r   r'   i   s    z#_FirstCompletedWaiter.add_exceptionc                    s   t  | | j  d S r   )r*   r(   r   r/   r$   r-   r   r   r(   m   s    z#_FirstCompletedWaiter.add_cancelled)r   r   r   r&   r'   r(   r0   r   r   r-   r   r1   b   s   r1   c                       sH   e Zd Z fddZdd Z fddZ fddZ fd	d
Z  ZS )_AllCompletedWaiterc                    s$   || _ || _t | _t   d S r   )num_pending_callsstop_on_exceptionr   r+   r,   r*   r!   )r    r3   r4   r-   r   r   r!   t   s    
z_AllCompletedWaiter.__init__c                 C   sH   | j . |  jd8  _| js&| j  W d    n1 s:0    Y  d S )N   )r,   r3   r   r/   r   r   r   r   _decrement_pending_callsz   s    z,_AllCompletedWaiter._decrement_pending_callsc                    s   t  | |   d S r   )r*   r&   r6   r$   r-   r   r   r&      s    z_AllCompletedWaiter.add_resultc                    s*   t  | | jr| j  n|   d S r   )r*   r'   r4   r   r/   r6   r$   r-   r   r   r'      s    z!_AllCompletedWaiter.add_exceptionc                    s   t  | |   d S r   )r*   r(   r6   r$   r-   r   r   r(      s    z!_AllCompletedWaiter.add_cancelled)	r   r   r   r!   r6   r&   r'   r(   r0   r   r   r-   r   r2   q   s
   r2   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )_AcquireFuturesc                 C   s   t |td| _d S )N)key)sortedidfutures)r    r;   r   r   r   r!      s    z_AcquireFutures.__init__c                 C   s   | j D ]}|j  qd S r   )r;   
_conditionacquirer$   r   r   r   	__enter__   s    
z_AcquireFutures.__enter__c                 G   s   | j D ]}|j  qd S r   )r;   r<   release)r    argsr%   r   r   r   __exit__   s    
z_AcquireFutures.__exit__N)r   r   r   r!   r>   rA   r   r   r   r   r7      s   r7   c                 C   s   |t krt }nZ|tkr t }nJtdd | D }|tkrHt|dd}n"|tkr^t|dd}ntd| | D ]}|j	
| qn|S )Nc                 s   s   | ]}|j ttfvV  qd S r   _stater	   r
   .0fr   r   r   	<genexpr>   s   z._create_and_install_waiters.<locals>.<genexpr>T)r4   FzInvalid return condition: %r)r   r)   r   r1   sumr   r2   r   
ValueError_waitersr#   )fsreturn_whenwaiterpending_countrF   r   r   r   _create_and_install_waiters   s    rO   c                 c   sd   | r`| d }|D ]}| | q|j |j | W d    n1 sH0    Y  ~|  V  q d S )N)remover<   rJ   pop)rK   rM   ref_collectrF   futures_setr   r   r   _yield_finished_futures   s    *rU   c           	      c   s  |d ur|t   }t| } t| }t| 4 tdd | D }| | }t| t}W d    n1 sf0    Y  t|}zt||| fdE d H  |r:|d u rd }n(|t   }|dk rt	dt||f |j
| |j& |j}g |_|j
  W d    n1 s0    Y  |  t||| |fdE d H  qW | D ]:}|j |j| W d    n1 sn0    Y  q@nB| D ]:}|j |j| W d    n1 s0    Y  q0 d S )Nc                 s   s    | ]}|j ttfv r|V  qd S r   rB   rD   r   r   r   rG      s   zas_completed.<locals>.<genexpr>)rS   r   z%d (of %d) futures unfinished)time	monotonicr/   lenr7   rO   r   listrU   r   r   waitr,   r   clearreverser<   rJ   rQ   )	rK   timeoutend_timetotal_futuresr   r   rM   wait_timeoutrF   r   r   r   as_completed   sP    
(*2ra   DoneAndNotDoneFutureszdone not_donec              	   C   s6  t | } t|  dd | D }| | }|tkrL|rLt||W  d    S |tkr|rtdd |D rt||W  d    S t|t| krt||W  d    S t| |}W d    n1 s0    Y  |j	| | D ]8}|j
 |j| W d    q1 s0    Y  q||j t|| | S )Nc                 S   s   h | ]}|j ttfv r|qS r   rB   rD   r   r   r   	<setcomp>$  s   zwait.<locals>.<setcomp>c                 s   s&   | ]}|  s| d ur|V  qd S r   )r   	exceptionrD   r   r   r   rG   *  s   zwait.<locals>.<genexpr>)r/   r7   r   rb   r   anyrX   rO   r   rZ   r<   rJ   rQ   updater   )rK   r]   rL   donenot_donerM   rF   r   r   r   rZ   	  s$    
(.rZ   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdddZdddZdd Zdd Zdd ZeejZdS ) Futurec                 C   s,   t  | _t| _d | _d | _g | _g | _d S r   )	r   	Conditionr<   r   rC   _result
_exceptionrJ   _done_callbacksr   r   r   r   r!   >  s    
zFuture.__init__c              	   C   s<   | j D ]0}z||  W q ty4   td|  Y q0 qd S Nz!exception calling callback for %r)rm   	ExceptionLOGGERrd   )r    callbackr   r   r   _invoke_callbacksG  s
    
zFuture._invoke_callbacksc                 C   s   | j  | jtkr|| jrJd| jjt| t| j | jjjf W  d    S d| jjt| t| j | jjjf W  d    S d| jjt| t| j f W  d    S 1 s0    Y  d S )Nz<%s at %#x state=%s raised %s>z <%s at %#x state=%s returned %s>z<%s at %#x state=%s>)	r<   rC   r
   rl   r.   r   r:   _STATE_TO_DESCRIPTION_MAPrk   r   r   r   r   __repr__N  s(    
zFuture.__repr__c                 C   s~   | j \ | jttfv r&W d    dS | jttfv rDW d    dS t| _| j   W d    n1 sh0    Y  |   dS )NFT)r<   rC   r   r
   r   r	   
notify_allrr   r   r   r   r   cancelb  s    (zFuture.cancelc                 C   s8   | j  | jttfv W  d    S 1 s*0    Y  d S r   )r<   rC   r   r	   r   r   r   r   r   u  s    zFuture.cancelledc                 C   s4   | j  | jtkW  d    S 1 s&0    Y  d S r   )r<   rC   r   r   r   r   r   r   z  s    zFuture.runningc                 C   s:   | j   | jtttfv W  d    S 1 s,0    Y  d S r   )r<   rC   r   r	   r
   r   r   r   r   rg     s    zFuture.donec                 C   s(   | j rz| j W d } q$d } 0 n| jS d S r   )rl   rk   r   r   r   r   __get_result  s
    zFuture.__get_resultc                 C   s   | j < | jtttfvr4| j| W d    d S W d    n1 sH0    Y  z||  W n ty|   t	d|  Y n0 d S rn   )
r<   rC   r   r	   r
   rm   r#   ro   rp   rd   )r    fnr   r   r   add_done_callback  s    .zFuture.add_done_callbackNc                 C   s   z| j  | jttfv r t n&| jtkrF|  W  d    W d } S | j | | jttfv rht n,| jtkr|  W  d    W d } S t W d    n1 s0    Y  W d } nd } 0 d S r   )	r<   rC   r   r	   r   r
   _Future__get_resultrZ   r   r    r]   r   r   r   result  s"    

&zFuture.resultc                 C   s   | j  | jttfv rt n| jtkr<| jW  d    S | j | | jttfv r^t n$| jtkr|| jW  d    S t W d    n1 s0    Y  d S r   )	r<   rC   r   r	   r   r
   rl   rZ   r   r{   r   r   r   rd     s    

zFuture.exceptionc                 C   s   | j  | jtkr>t| _| jD ]}||  qW d    dS | jtkr^t| _W d    dS t	dt
| | j tdW d    n1 s0    Y  d S )NFTz!Future %s in unexpected state: %szFuture in unexpected state)r<   rC   r   r	   rJ   r(   r   r   rp   criticalr:   RuntimeError)r    rM   r   r   r   set_running_or_notify_cancel  s    


z#Future.set_running_or_notify_cancelc                 C   s   | j ^ | jttthv r*td| j| || _t| _| jD ]}|	|  q<| j 
  W d    n1 sj0    Y  |   d S Nz{}: {!r})r<   rC   r   r	   r
   r   formatrk   rJ   r&   ru   rr   )r    r|   rM   r   r   r   
set_result  s    
(zFuture.set_resultc                 C   s   | j ^ | jttthv r*td| j| || _t| _| jD ]}|	|  q<| j 
  W d    n1 sj0    Y  |   d S r   )r<   rC   r   r	   r
   r   r   rl   rJ   r'   ru   rr   )r    rd   rM   r   r   r   set_exception  s    
(zFuture.set_exception)N)N)r   r   r   r!   rr   rt   rv   r   r   rg   rz   ry   r|   rd   r   r   r   classmethodtypesGenericAlias__class_getitem__r   r   r   r   ri   ;  s   	

#
"(ri   c                   @   sD   e Zd Zdd ZdddddZdd	d
ddZdd Zdd ZdS )Executorc                O   s
   t  d S r   )NotImplementedError)r    rx   r@   kwargsr   r   r   submit2  s    	zExecutor.submitNr5   )r]   	chunksizec                   sB   d urt    fddt| D  fdd}| S )Nc                    s   g | ]}j  g|R  qS r   )r   )rE   r@   )rx   r    r   r   
<listcomp>V      z Executor.map.<locals>.<listcomp>c               	   3   sn   zT   r@d u r&  V  q
  t  V  q
W D ]} |   qFnD ]} |   qZ0 d S r   )r\   rR   r|   rV   rW   rv   )r%   )r^   rK   r]   r   r   result_iteratorZ  s    z%Executor.map.<locals>.result_iterator)rV   rW   zip)r    rx   r]   r   	iterablesr   r   )r^   rx   rK   r    r]   r   map=  s
    zExecutor.mapTF)cancel_futuresc                C   s   d S r   r   )r    rZ   r   r   r   r   shutdowni  s    zExecutor.shutdownc                 C   s   | S r   r   r   r   r   r   r>   y  s    zExecutor.__enter__c                 C   s   | j dd dS )NT)rZ   F)r   )r    exc_typeexc_valexc_tbr   r   r   rA   |  s    zExecutor.__exit__)T)r   r   r   r   r   r   r>   rA   r   r   r   r   r   /  s
   ,r   c                   @   s   e Zd ZdS )BrokenExecutorNr   r   r   r   r   r     s   r   )N)(
__author__collectionsloggingr   rV   r   r   r   r   r   r   r   r   r	   r
   _FUTURE_STATESrs   	getLoggerrp   ro   r   r   r   r   objectr   r)   r1   r2   r7   rO   rU   ra   
namedtuplerb   rZ   ri   r   r~   r   r   r   r   r   <module>   s^   		

>2 uR