o
     JAfk7                     @   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 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yz   Y dS w ej ZZdS ))Futurewrap_futureisfuture    N)GenericAlias   )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ee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   &/usr/lib/python3.10/asyncio/futures.py__init__H   s   

zFuture.__init__c                 C   s   d | jjd|  S )Nz<{} {}> )format	__class____name__join
_repr_infor   r   r   r   __repr__Z   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   | j S N)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
_CANCELLEDr/   _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)   )r5   r7   r   r   r   r   	cancelled   s   
zFuture.cancelledc                 C   s   	 | j tkS r)   )r5   r6   r   r   r   r   done   s   
zFuture.donec                 C   sP   	 | j tkr|  }|| j tkrtdd| _| jd ur%| j| j	| j
S )NzResult is not ready.F)r5   r7   r4   	_FINISHEDr	   InvalidStateErrorr$   r%   with_traceback_exception_tb_resultr3   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)r5   r7   r4   rB   r	   rC   r$   r%   r3   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;   )r5   r6   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fr?   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: )r5   r6   r	   rC   rF   rB   r8   )r   rG   r   r   r   
set_result   s   
zFuture.set_resultc                 C   sl   	 | j tkrt| j  d| t|tr| }t|tu r#td|| _|j	| _
t| _ |   d| _d S )NrR   zPStopIteration interacts badly with generators and cannot be raised into a FutureT)r5   r6   r	   rC   
isinstancetypeStopIteration	TypeErrorr%   __traceback__rE   rB   r8   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)rA   _asyncio_future_blockingr-   rG   r   r   r   r   	__await__  s   zFuture.__await__r)   )'r   
__module____qualname__r6   r5   rF   r%   r   r   r/   r1   rZ   r$   r   r   Z_future_repr_infor   r    r(   classmethodr   __class_getitem__propertyr*   setterr.   r4   r:   r8   r@   rA   rG   r"   rK   rQ   rS   rY   r[   __iter__r   r   r   r   r      sD    


r   c                 C   s&   z| j }W | S  ty   Y | jS w r)   )r.   AttributeErrorr   )futr.   r   r   r   	_get_loop)  s   re   c                 C   s   	 |   rd S | | d S r)   )r@   rS   )rd   rG   r   r   r   _set_result_unless_cancelled5  s   rf   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)   )rU   
concurrentfuturesr0   r	   argsTimeoutErrorrC   )r&   Z	exc_classr   r   r   _convert_future_exc<  s   rk   c                 C   sV   	 |  r	|   |  sd S | }|d ur | t| d S | }| | d S r)   )r@   r:   set_running_or_notify_cancelr"   rY   rk   rG   rS   )rg   sourcer"   rG   r   r   r   _set_concurrent_future_stateH  s   rn   c                 C   sZ   	 |  rd S |   r|  d S |  }|d ur"|t| d S |  }|| d S r)   )r@   r:   r"   rY   rk   rG   rS   )rm   destr"   rG   r   r   r   _copy_future_stateW  s   rp   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   rp   rn   )r#   otherr   r   r   
_set_state{  s   z!_chain_future.<locals>._set_statec                    s8   |   rd u s u r  d S j d S d S r)   )r@   r:   call_soon_threadsafe)destination)	dest_looprm   source_loopr   r   _call_check_cancel  s
   z)_chain_future.<locals>._call_check_cancelc                    sX     rd ur rd S d u su r |  d S  r#d S  |  d S r)   )r@   Z	is_closedrs   )rm   )rr   ru   rt   rv   r   r   _call_set_state  s   z&_chain_future.<locals>._call_set_state)r   rT   rg   rh   r   rW   re   rK   )rm   rt   rw   rx   r   )rr   ru   rt   rm   rv   r   _chain_futurek  s    
ry   r   c                C   s4   	 t | r| S |d u rt }| }t| | |S r)   )r   r   r   Zcreate_futurery   )r#   r   Z
new_futurer   r   r   r     s   
r   )__all__concurrent.futuresrg   rH   loggingr   typesr    r   r   r	   r
   r   r6   r7   rB   DEBUGZSTACK_DEBUGr   Z	_PyFuturere   rf   rk   rn   rp   ry   r   Z_asyncioImportErrorZ_CFuturer   r   r   r   <module>   sB    
  
,