o
    Ci>                     @   sN  d dl Z d dlmZ d dlmZ d dlZd dlmZmZmZm	Z	 d dl
ZG dd dZdd Zd	d
 Zdd Zedd Zd&ddZdd ZG dd dZe Zz
d dl mZmZ W n* ey   d dlZeddZG dd dejZe Zdd ZeefddZY nw G dd dZe ej!drej!j"e d d! Z#d"d# Z$d$d% Z%dS )'    N)wraps)	coroutine)getcoroutinestateCORO_CREATEDCORO_CLOSEDCORO_SUSPENDEDc                   @      e Zd Zdd ZdS )YieldWrapperc                 C   s
   || _ d S Npayload)selfr    r   H/home/kuhnn/.local/lib/python3.10/site-packages/async_generator/_impl.py__init__      
zYieldWrapper.__init__N__name__
__module____qualname__r   r   r   r   r   r	          r	   c                 C   s   t | S r
   )r	   valuer   r   r   _wrap   s   r   c                 C   s
   t | tS r
   )
isinstancer	   boxr   r   r   _is_wrapped   r   r   c                 C   s   | j S r
   r   r   r   r   r   _unwrap   s   r   c                 c   s    t | V S r
   )r   r   r   r   r   _yield_a   s   
r   c                    s   t | I d H S r
   )r   r   r   r   r   yield_i   s   r    c           	         s  dd }t | | }t|dr|I d H }zt ||I d H }W n ty9 } z||}W Y d }~|S d }~ww 	 z	t|I d H }W nn tyh } zz|j}W n
 ty[   Y |w | I d H  |d }~w t	y } z?t
 }z|j}W n	 ty   |w z	|| I d H }W n ty } z||}W Y d }~W Y d }~|S d }~ww W Y d }~n6d }~ww z|d u rt ||I d H }n||I d H }W n ty } z||}W Y d }~|S d }~ww q;)Nc                 S   s   | j r| j d S d S )Nr   )args)er   r   r   unpack_StopAsyncIterationy   s   
z.yield_from_.<locals>.unpack_StopAsyncIteration	__await__)type	__aiter__hasattr	__anext__StopAsyncIterationr    GeneratorExitacloseAttributeErrorBaseExceptionsysexc_infoathrowasend)	delegater#   _i_y_e_r_s_m_xr   r   r   yield_from_m   sn   

"



r:   c                   @   s>   e Zd Zdd Zdd Zdd Zdd Zdd
dZdd Zd	S )	ANextIterc                 G   s   || _ || _|| _d S r
   )_it	_first_fn_first_args)r   itfirst_fn
first_argsr   r   r   r      s   
zANextIter.__init__c                 C      | S r
   r   r   r   r   r   r$         zANextIter.__await__c                 C   sB   | j d ur| j }| j}d  | _ | _| j|g|R  S | | jjS r
   )r=   r>   _invoker<   __next__)r   r@   rA   r   r   r   rF      s   
zANextIter.__next__c                 C      |  | jj|S r
   )rE   r<   sendr   r   r   r   r   rH         zANextIter.sendNc                 C      |  | jj|||S r
   )rE   r<   throwr   r%   r   	tracebackr   r   r   rL         zANextIter.throwc              
   G   sh   z|| }W n! t y } zt|jd }~w ty' } ztd|d }~ww t|r2t t||S )Nz(async_generator raise StopAsyncIteration)StopIterationr)   r   RuntimeErrorr   r   )r   fnr!   resultr"   r   r   r   rE      s    
zANextIter._invokeNN)	r   r   r   r   r$   rF   rH   rL   rE   r   r   r   r   r;      s    	
r;   )get_asyncgen_hooksset_asyncgen_hooksasyncgen_hooks	firstiter	finalizerc                   @   r   )_hooks_storagec                 C   s   d | _ d | _d S r
   rX   rC   r   r   r   r      s   
z_hooks_storage.__init__Nr   r   r   r   r   r[      r   r[   c                   C   s   t tjtjdS )NrX   )rW   _hooksrY   rZ   r   r   r   r   rU      s   rU   c                 C   sn   | t ur| d u st| r| t_n
tdt| j|t ur5|d u s&t|r+|t_d S tdt|jd S )Nz#callable firstiter expected, got {}z#callable finalizer expected, got {})	UNSPECIFIEDcallabler\   rY   	TypeErrorformatr%   r   rZ   rX   r   r   r   rV      s"   
rV   c                   @   s   e Zd Ze Zdd Zejdk rdd Zndd Ze	dd Z
e	d	d
 Zdd Zdd ZdddZdd Zdd Zdd ZdS )AsyncGeneratorc                 C   s,   || _ | | _d| _d | _d| _d| _d S )NF)
_coroutiner$   r<   
ag_running
_finalizer_closed_hooks_inited)r   r   r   r   r   r   #  s   

zAsyncGenerator.__init__)         c                    s   | S r
   r   rC   r   r   r   r&   4  s   zAsyncGenerator.__aiter__c                 C   rB   r
   r   rC   r   r   r   r&   8  rD   c                 C      | j jS r
   )rb   cr_coderC   r   r   r   ag_code?     zAsyncGenerator.ag_codec                 C   rj   r
   )rb   cr_framerC   r   r   r   ag_frameC  rm   zAsyncGenerator.ag_framec                 C   s   |  | jjS r
   )_do_itr<   rF   rC   r   r   r   r(   P  s   zAsyncGenerator.__anext__c                 C   rG   r
   )rp   r<   rH   rI   r   r   r   r1   S  rJ   zAsyncGenerator.asendNc                 C   rK   r
   )rp   r<   rL   rM   r   r   r   r0   V  rO   zAsyncGenerator.athrowc                    sl   j s!d_ t \}_|d ur| tjjdkr!jj t	jt
u r+t  fdd}| S )NTpypyc                      sd   j rtdz%zd_ tjg R  I d H W W d_ S  ty-   jj  w d_ w )Nz!async generator already executingTF)rc   
ValueErrorr;   r<   r)   _pypy_issue2786_workarounddiscardrb   r   r!   r   start_fnr   r   stepi  s   z#AsyncGenerator._do_it.<locals>.step)rf   rU   rd   r.   implementationnamers   addrb   r   r   r)   )r   rv   r!   rY   rw   r   ru   r   rp   Y  s   zAsyncGenerator._do_itc              	      s|   t | j}|tu s| jrd S d| _|tu r| j  d S z| tI d H  W td tt	fy=   | j
| j Y d S w )NT%async_generator ignored GeneratorExit)r   rb   r   re   r   r<   closer0   r*   r)   rs   rt   rQ   )r   stater   r   r   r+   {  s   

zAsyncGenerator.aclosec              	   C   s   | j | j t| jtu r| j  t| jtu ra| jsc| jd ur)| |  d S | 	t
}z-z|d  W n t
tfyA   Y n tyK   tdw td| jjW |  d S |  w d S d S )Nr{   zasync_generator {!r} awaited during finalization; install a finalization hook to support this, or wrap it in 'async with aclosing(...):')rs   rt   rb   r   r   r|   r   re   rd   r0   r*   rH   r)   rP   rQ   r`   rl   co_name)r   throwerr   r   r   __del__  s2   



zAsyncGenerator.__del__rT   )r   r   r   setrs   r   r.   version_infor&   propertyrl   ro   r(   r1   r0   rp   r+   r   r   r   r   r   ra     s     




"ra   c                    s"   t   fdd}t||_|S )Nc                     s   t  | i |S r
   )ra   )r!   kwargscoroutine_makerr   r   async_generator_maker  s   z.async_generator.<locals>.async_generator_maker)r   id_async_gen_function)r   r   r   r   r   async_generator  s   
r   c                 C   s"   t tdrt| rdS t| tS )N
isasyncgenT)r'   inspectr   r   ra   objr   r   r   r     s   


r   c                 C   s,   t tdrt| rdS t| ddt| kS )NisasyncgenfunctionTr   )r'   r   r   getattrr   r   r   r   r   r     s   

r   r
   )&r.   	functoolsr   typesr   r   r   r   r   r   collections.abccollectionsr	   r   r   r   r   r    r:   r;   objectr]   rU   rV   ImportError	threading
namedtuplerW   localr[   r\   ra   r'   abcregisterr   r   r   r   r   r   r   <module>   sF    I

J-) 	