o
    g6                     @   s   	 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
 ejZejZejZejZejd ZG dd	 d	ZeZd
d Zdd Zdd Zdd Zdd Zdd ZddddZzddlZW n
 eyt   Y dS w ej ZZdS ))Futurewrap_futureisfuture    N   )base_futures)events)
exceptions)format_helpersc                   @   s   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dZejZdd Zdd	 Zd
d Zedd Zejdd Zdd Zdd Zd*ddZdd Zdd Zdd Zdd Zdd Zddd d!Zd"d# Z d$d% Z!d&d' Z"d(d) Z#e#Z$dS )+r   NFloopc                C   sF   	 |d u rt  | _n|| _g | _| j r!ttd| _	d S d S )Nr   )
r   _get_event_loop_loop
_callbacksZ	get_debugr	   extract_stacksys	_getframe_source_tracebackselfr    r   E/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/asyncio/futures.py__init__G   s   

zFuture.__init__c                 C   s   d | jjd|  S )Nz<{} {}> )format	__class____name__join
_repr_infor   r   r   r   __repr__Y   s   
zFuture.__repr__c                 C   sF   | j sd S | j}| jj d|| d}| jr| j|d< | j| d S )Nz exception was never retrieved)message	exceptionfutureZsource_traceback)_Future__log_traceback
_exceptionr   r   r   r   Zcall_exception_handler)r   exccontextr   r   r   __del__]   s   
zFuture.__del__c                 C   s   | S Nr   )clstyper   r   r   __class_getitem__m   s   zFuture.__class_getitem__c                 C   s   | j S r(   )r#   r   r   r   r   _log_tracebackp   s   zFuture._log_tracebackc                 C   s   |rt dd| _d S )Nz'_log_traceback can only be set to FalseF)
ValueErrorr#   )r   valr   r   r   r,   t   s   
c                 C   s   	 | j }|d u rtd|S )Nz!Future object is not initialized.)r   RuntimeErrorr   r   r   r   get_loopz   s
   zFuture.get_loopc                 C   s4   	 | j d u rt }nt| j }| j|_d | _|S r(   )_cancel_messager   CancelledError_cancelled_exc__context__r   r%   r   r   r   _make_cancelled_error   s   

zFuture._make_cancelled_errorc                 C   s.   	 d| _ | jtkrdS t| _|| _|   dS )NFT)r#   _state_PENDING
_CANCELLEDr1   _Future__schedule_callbacks)r   msgr   r   r   cancel   s   
zFuture.cancelc                 C   sJ   	 | j d d  }|sd S g | j d d < |D ]\}}| jj|| |d qd S Nr&   )r   r   	call_soon)r   Z	callbackscallbackctxr   r   r   Z__schedule_callbacks   s   zFuture.__schedule_callbacksc                 C   s   	 | j tkS r(   )r7   r9   r   r   r   r   	cancelled   s   
zFuture.cancelledc                 C   s   	 | j tkS r(   )r7   r8   r   r   r   r   done   s   
zFuture.donec                 C   sH   	 | j tkr|  }|| j tkrtdd| _| jd ur!| j| jS )NzResult is not ready.F)	r7   r9   r6   	_FINISHEDr   InvalidStateErrorr#   r$   _resultr5   r   r   r   result   s   



zFuture.resultc                 C   s8   	 | j tkr|  }|| j tkrtdd| _| jS )NzException is not set.F)r7   r9   r6   rD   r   rE   r#   r$   r5   r   r   r   r!      s   


zFuture.exceptionr>   c                C   sF   	 | j tkr| jj|| |d d S |d u rt }| j||f d S r=   )r7   r8   r   r?   contextvarsZcopy_contextr   append)r   fnr&   r   r   r   add_done_callback   s   
zFuture.add_done_callbackc                    s>   	  fdd| j D }t| j t| }|r|| j d d < |S )Nc                    s    g | ]\}}| kr||fqS r   r   ).0frA   rJ   r   r   
<listcomp>   s    z/Future.remove_done_callback.<locals>.<listcomp>)r   len)r   rJ   Zfiltered_callbacksZremoved_countr   rN   r   remove_done_callback   s   
zFuture.remove_done_callbackc                 C   s:   	 | j tkrt| j  d| || _t| _ |   d S )N: )r7   r8   r   rE   rF   rD   r:   )r   rG   r   r   r   
set_result   s   
zFuture.set_resultc                 C   sd   	 | j tkrt| j  d| t|tr| }t|tu r#td|| _t	| _ | 
  d| _d S )NrR   zPStopIteration interacts badly with generators and cannot be raised into a FutureT)r7   r8   r   rE   
isinstancer*   StopIteration	TypeErrorr$   rD   r:   r#   )r   r!   r   r   r   set_exception  s   


zFuture.set_exceptionc                 c   s.    |   sd| _| V  |   std|  S )NTzawait wasn't used with future)rC   _asyncio_future_blockingr/   rG   r   r   r   r   	__await__  s   zFuture.__await__r(   )%r   
__module____qualname__r8   r7   rF   r$   r   r   r1   r3   rX   r#   r   r   Z_future_repr_infor   r   r'   r+   propertyr,   setterr0   r6   r<   r:   rB   rC   rG   r!   rK   rQ   rS   rW   rY   __iter__r   r   r   r   r      sD    


r   c                 C   s&   z| j }W | S  ty   Y | jS w r(   )r0   AttributeErrorr   )futr0   r   r   r   	_get_loop(  s   ra   c                 C   s   	 |   rd S | | d S r(   )rB   rS   )r`   rG   r   r   r   _set_result_unless_cancelled4  s   rb   c                 C   sT   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(   )r*   
concurrentfuturesr2   r   argsTimeoutErrorrE   )r%   Z	exc_classr   r   r   _convert_future_exc;  s   rg   c                 C   sV   	 |  r	|   |  sd S | }|d ur | t| d S | }| | d S r(   )rB   r<   set_running_or_notify_cancelr!   rW   rg   rG   rS   )rc   sourcer!   rG   r   r   r   _set_concurrent_future_stateG  s   rj   c                 C   sZ   	 |  rd S |   r|  d S |  }|d ur"|t| d S |  }|| d S r(   )rB   r<   r!   rW   rg   rG   rS   )ri   destr!   rG   r   r   r   _copy_future_stateV  s   rl   c                    s   	 t sttjjstdt sttjjstdt r'tnd t r1tnd dd  fdd} fdd}| | d S )	Nz(A future is required for source argumentz-A future is required for destination argumentc                 S   s$   t | rt||  d S t| | d S r(   )r   rl   rj   )r"   otherr   r   r   
_set_statez  s   z!_chain_future.<locals>._set_statec                    s8   |   rd u s u r  d S j d S d S r(   )rB   r<   call_soon_threadsafe)destination)	dest_loopri   source_loopr   r   _call_check_cancel  s
   z)_chain_future.<locals>._call_check_cancelc                    sL     rd ur rd S d u su r |  d S  |  d S r(   )rB   Z	is_closedro   )ri   )rn   rq   rp   rr   r   r   _call_set_state  s   z&_chain_future.<locals>._call_set_state)r   rT   rc   rd   r   rV   ra   rK   )ri   rp   rs   rt   r   )rn   rq   rp   ri   rr   r   _chain_futurej  s    
	ru   r
   c                C   s4   	 t | r| S |d u rt }| }t| | |S r(   )r   r   r   Zcreate_futureru   )r"   r   Z
new_futurer   r   r   r     s   
r   )__all__concurrent.futuresrc   rH   loggingr    r   r   r   r	   r   r8   r9   rD   DEBUGZSTACK_DEBUGr   Z	_PyFuturera   rb   rg   rj   rl   ru   r   Z_asyncioImportErrorZ_CFuturer   r   r   r   <module>   s@    
  
*