
    z%i7                     h   	 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	 ddlm
Z
 ddlmZ ddlmZ e	j                  Ze	j                  Ze	j                  Ze	j                   Zej"                  dz
  Z G d	 d
      ZeZd Zd Zd Zd Zd Zd ZdddZ	 ddlZej&                  xZZy# e$ r Y yw xY w))Futurewrap_futureisfuture    N)GenericAlias   )base_futures)events)
exceptions)format_helpersc                       e Zd Z	 eZdZdZdZdZdZ	dZ
dZdZdddZd Zd Z ee      Zed        Zej*                  d        Zd	 Zd
 ZddZd Zd Zd Zd Zd ZdddZd Zd Z d Z!d Z"e"Z#y)r   NFloopc                    	 |t        j                         | _        n|| _        g | _        | j                  j	                         r.t        j                  t        j                  d            | _	        y y )Nr   )
r	   get_event_loop_loop
_callbacks	get_debugr   extract_stacksys	_getframe_source_tracebackselfr   s     C/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/asyncio/futures.py__init__zFuture.__init__H   s`    	 <..0DJDJ::!%3%A%Aa &"D" "    c                 ,    t        j                  |       S N)r   _future_reprr   s    r   __repr__zFuture.__repr__X   s    ((..r   c                     | j                   sy | j                  }| j                  j                   d|| d}| j                  r| j                  |d<   | j
                  j                  |       y )Nz exception was never retrieved)message	exceptionfuturesource_traceback)_Future__log_traceback
_exception	__class____name__r   r   call_exception_handler)r   exccontexts      r   __del__zFuture.__del__[   sl    ## oo >>**++IJ	
 !!*.*@*@G&'

))'2r   c                     | j                   S r   )r'   r    s    r   _log_tracebackzFuture._log_tracebackm   s    ###r   c                 ,    |rt        d      d| _        y )Nz'_log_traceback can only be set to FalseF)
ValueErrorr'   )r   vals     r   r0   zFuture._log_tracebackq   s    FGG$r   c                 :    	 | j                   }|t        d      |S )Nz!Future object is not initialized.)r   RuntimeErrorr   s     r   get_loopzFuture.get_loopw   s$    ;zz<BCCr   c                     	 | j                   | j                   }d | _         |S | j                  t        j                         }nt        j                  | j                        }| j                   |_        d | _         |S r   )_cancelled_exc_cancel_messager
   CancelledError__context__r   r,   s     r   _make_cancelled_errorzFuture._make_cancelled_error~   sw    	
 *%%C"&DJ'++-C++D,@,@AC--"
r   c                     	 d| _         | j                  t        k7  ryt        | _        || _        | j                          y)NFT)r'   _state_PENDING
_CANCELLEDr9   _Future__schedule_callbacks)r   msgs     r   cancelzFuture.cancel   s>    	  %;;(" "!!#r   c                     	 | j                   d d  }|sy g | j                   d d  |D ]#  \  }}| j                  j                  || |       % y Nr-   )r   r   	call_soon)r   	callbackscallbackctxs       r   __schedule_callbackszFuture.__schedule_callbacks   sW    	
 OOA&	& 	>MHcJJ  4 =	>r   c                 *    	 | j                   t        k(  S r   )r?   rA   r    s    r   	cancelledzFuture.cancelled   s    6{{j((r   c                 *    	 | j                   t        k7  S r   )r?   r@   r    s    r   donezFuture.done   s    	
 {{h&&r   c                 &   	 | j                   t        k(  r| j                         }|| j                   t        k7  rt	        j
                  d      d| _        | j                  %| j                  j                  | j                        | j                  S )NzResult is not ready.F)r?   rA   r=   	_FINISHEDr
   InvalidStateErrorr'   r(   with_traceback_exception_tb_resultr<   s     r   resultzFuture.result   s}    	 ;;*$,,.CI;;)#../EFF$??&//001C1CDD||r   c                     	 | j                   t        k(  r| j                         }|| j                   t        k7  rt	        j
                  d      d| _        | j                  S )NzException is not set.F)r?   rA   r=   rR   r
   rS   r'   r(   r<   s     r   r$   zFuture.exception   sX    	 ;;*$,,.CI;;)#../FGG$r   rG   c                    	 | j                   t        k7  r| j                  j                  || |       y |t	        j
                         }| j                  j                  ||f       y rF   )r?   r@   r   rH   contextvarscopy_contextr   append)r   fnr-   s      r   add_done_callbackzFuture.add_done_callback   sW    	 ;;("JJ  T7 ;%224OO""B=1r   c                     	 | j                   D cg c]  \  }}||k7  r||f }}}t        | j                         t        |      z
  }|r|| j                   d d  |S c c}}w r   )r   len)r   r]   frK   filtered_callbacksremoved_counts         r   remove_done_callbackzFuture.remove_done_callback   sq    	
 /3oo*"*1c!"b  !#h * * DOO,s3E/FF!3DOOA*s   Ac                     	 | j                   t        k7  r$t        j                  | j                    d|       || _        t
        | _         | j                          y )N: )r?   r@   r
   rS   rV   rR   rB   )r   rW   s     r   
set_resultzFuture.set_result   sO    	
 ;;("..$++b/IJJ!!#r   c                 N   	 | j                   t        k7  r$t        j                  | j                    d|       t	        |t
              r |       }t        |      t        u rt        d      || _        |j                  | _
        t        | _         | j                          d| _        y )Nrf   zPStopIteration interacts badly with generators and cannot be raised into a FutureT)r?   r@   r
   rS   
isinstancetypeStopIteration	TypeErrorr(   __traceback__rU   rR   rB   r'   )r   r$   s     r   set_exceptionzFuture.set_exception	  s    	
 ;;("..$++b/IJJi&!I	?m+ A B B#&44!!##r   c              #      K   | j                         sd| _        |  | j                         st        d      | j                         S w)NTzawait wasn't used with future)rP   _asyncio_future_blockingr5   rW   r    s    r   	__await__zFuture.__await__  s=     yy{,0D)Jyy{>??{{}s   AA	r   )$r*   
__module____qualname__r@   r?   rV   r(   r   r   r9   r8   rp   r'   r   r!   r.   classmethodr   __class_getitem__propertyr0   setterr6   r=   rD   rB   rN   rP   rW   r$   r^   rd   rg   rn   rq   __iter__ r   r   r   r      s    & FGJEON  %O# " /3  $L1$ $ % %
(>)'"  04 2 
$$& Hr   r   c                 ^    	 | j                   } |       S # t        $ r Y | j                  S w xY wr   )r6   AttributeErrorr   )futr6   s     r   	_get_loopr}   +  s:    << z   99	s    	,,c                 J    	 | j                         ry | j                  |       y r   )rN   rg   )r|   rW   s     r   _set_result_unless_cancelledr   7  s    I
}}NN6r   c                 l   t        |       }|t        j                  j                  u rt	        j                  | j
                   S |t        j                  j                  u rt	        j                  | j
                   S |t        j                  j                  u rt	        j                  | j
                   S | S r   )rj   
concurrentfuturesr:   r
   argsTimeoutErrorrS   )r,   	exc_classs     r   _convert_future_excr   >  s    S	IJ&&555((#((33	j((55	5&&11	j((::	:++SXX66
r   c                    	 |j                         r | j                           | j                         sy |j                         }| | j                  t        |             y |j                         } | j                  |       y r   )rN   rD   set_running_or_notify_cancelr$   rn   r   rW   rg   )r   sourcer$   rW   s       r   _set_concurrent_future_stater   J  su    B
2:224  "I 
  !4Y!?@
f%r   c                    	 |j                         ry | j                         r|j                          y | j                         }||j                  t	        |             y | j                         }|j                  |       y r   )rN   rD   r$   rn   r   rW   rg   )r   destr$   rW   s       r   _copy_future_stater   Y  sj    
 ~~$$&	 29=>]]_FOOF#r   c                     	 t               s/t         t        j                  j                        st        d      t              s/t        t        j                  j                        st        d      t               rt               nd t              rt              nd d  fd}fd}j                  |        j                  |       y )Nz(A future is required for source argumentz-A future is required for destination argumentc                 L    t        |       rt        ||        y t        | |       y r   )r   r   r   )r%   others     r   
_set_statez!_chain_future.<locals>._set_state}  s    Fuf-(7r   c                     | j                         r3u rj                          y j                  j                         y y r   )rN   rD   call_soon_threadsafe)destination	dest_loopr   source_loops    r   _call_check_cancelz)_chain_future.<locals>._call_check_cancel  s<      ""kY&>00?	 #r   c                     j                         rj                         ry u r
 |        y j                         ry j                  |        y r   )rN   	is_closedr   )r   r   r   r   r   s    r   _call_set_statez&_chain_future.<locals>._call_set_state  s[    !!#%)*=*=*?	[ 8{F+""$**:{FKr   )r   ri   r   r   r   rl   r}   r^   )r   r   r   r   r   r   r   s   ``  @@@r   _chain_futurer   m  s     FJv/9/A/A/H/H%JBCCK K4>4F4F4M4M*OGHH'/'7)F#TK*2;*?	+&TI8@	L !!"45
_-r   r   c                    	 t        |       r| S |t        j                         }|j                         }t	        | |       |S r   )r   r	   r   create_futurer   )r%   r   
new_futures      r   r   r     sE    0 |$$&##%J&*%r   )__all__concurrent.futuresr   rZ   loggingr   typesr    r   r	   r
   r   r   r@   rA   rR   DEBUGSTACK_DEBUGr   	_PyFuturer}   r   r   r   r   r   r   _asyncio_CFutureImportErrorry   r   r   <module>r      s    4    
           $$
""	 mmaF FT 			&$().X !% 
(
 !'FX	  		s   B) )B10B1