a
    QIh>L                     @  s  d dl mZ d dlZd dlmZmZ d dlZd dlZd dlmZm	Z	m
Z
 ddlmZmZmZmZ ejdk rvd dlmZ erd d	lmZ d
dddZdd
dddZd
dddZd
dddZd
dddZd
dddZd
dddZd
dddZd
dddZd
dd d!Zd
dd"d#Zd
dd$d%Z d
dd&d'Z!d
dd(d)Z"d
dd*d+Z#d
dd,d-Z$d
dd.d/Z%d0d
dd1d2Z&d
dd3d4Z'd
dd5d6Z(d
dd7d8Z)d
dd9d:Z*d
dd;d<Z+d
dd=d>Z,d
dd?d@Z-dS )A    )annotationsN)TYPE_CHECKINGUnion)EndOfChannelas_safe_channelopen_memory_channel   )MatcherRaisesGroupassert_checkpointswait_all_tasks_blocked)      )ExceptionGroup)AsyncGeneratorNonereturnc                    s@  t t td W d    n1 s(0    Y  t jtdd td W d    n1 s^0    Y  ttttd f  d\} }t|  t| | 	d t
   | dI d H  W d    n1 s0    Y  t tj | 	d  W d    n1 s0    Y  t
 ( | I d H dks(J W d    n1 s>0    Y  | dksZJ t tj |  W d    n1 s0    Y  | 	d |  I d H  t tj  | dI d H  W d    n1 s0    Y  t tj | 	d W d    n1 s0    Y  t tj |   W d    n1 sJ0    Y  |  I d H  | dkstJ t t | I d H  W d    n1 s0    Y  | I d H  t tj | I d H  W d    n1 s0    Y  t tj |  W d    n1 s$0    Y  | I d H  d S )	Ng      ?z^max_buffer_size must be >= 0$matchr      lastztoo late)pytestraises	TypeErrorr   
ValueErrorr   intstrreprsend_nowaitr   sendtrio
WouldBlockreceivereceive_nowaitacloseClosedResourceErrorcloner   )sr r+   R/var/www/html/venv_bot_3.9/lib/python3.9/site-packages/trio/_tests/test_channel.pytest_channel   sF    &&
.(8(
0*(..(r-   ztrio.abc.Clock)autojump_clockr   c                   sf   t t d\}}td}| I d H  W d    n1 s>0    Y  |jsRJ |dI d H  d S )Nr   
   zTest for PR #553)r   r   r"   move_on_afterr$   Zcancelled_caughtr!   )r.   r)   r*   Ztimeout_scoper+   r+   r,   test_553?   s
    ,
r1   c               
     s   dddddd} t t d\}}t 4 I d H }|4 I d H 6 tdD ]}|| | | qJW d   I d H  q1 I d H s0    Y  d	d
 |2 I d H }|  |ttdksJ W d   I d H  q1 I d H s0    Y  d S )Ntrio.MemorySendChannel[int]r   r   )send_channelir   c              	     sh   | 4 I d H B t d| d|d  D ]}| |I d H  q$W d   I d H  qd1 I d H sZ0    Y  d S )Nr   r   )ranger!   )r3   r4   jr+   r+   r,   producerH   s    z1test_channel_multiple_producers.<locals>.producerr   r/   c                   s   g | z3 d H W }|q6 S Nr+   ).0valuer+   r+   r,   
<listcomp>V       z3test_channel_multiple_producers.<locals>.<listcomp>   )	r   r   r"   open_nurseryr5   
start_soonr(   sortlist)r7   r3   receive_channelnurseryr4   gotr+   r+   r,   test_channel_multiple_producersG   s    >rE   c               
     s4  t  g  dddd fdd} t 4 I d H }tjt d\}}|4 I d H \ tdD ]}|| || q\t I d H  td	D ]}||I d H  qW d   I d H  q1 I d H s0    Y  W d   I d H  q1 I d H s0    Y  t tdksJ t	 d	ksJ t  t td	ks0J d S )
Ntrio.MemoryReceiveChannel[int]r   r   )rB   r4   r   c                   s,   | 2 z 3 d H W } |  | q6 d S r8   )addappend)rB   r4   r:   ZreceivedZsuccessful_receiversr+   r,   consumer`   s    
z1test_channel_multiple_consumers.<locals>.consumerr      r/   )
setr"   r>   r   r   r5   r?   r   r!   len)rJ   rC   r3   rB   r4   r+   rI   r,   test_channel_multiple_consumers\   s    frN   c               	     sT  dddddd} t d  d\}}t 4 I d H @}|| |tj t I d H  | I d H  W d   I d H  q1 I d H s~0    Y  ttj |	d  W d    n1 s0    Y  ttj  |
d I d H  W d    n1 s0    Y  tt |  W d    n1 s$0    Y  tt | I d H  W d    n1 s^0    Y  t d  d\}}t 4 I d H B}|| |tj t I d H  | I d H  W d   I d H  q1 I d H s0    Y  ttj |	d  W d    n1 s0    Y  ttj  |
d I d H  W d    n1 sN0    Y  ddd	d
d}t t d\}}t 4 I d H >}||| t I d H  | I d H  W d   I d H  q1 I d H s0    Y  ttj |  W d    n1 s
0    Y  ttj | I d H  W d    n1 sF0    Y  d S )Ntrio.MemorySendChannel[None]type[BaseException]r   r)   expectr   c                   s>   t |  | d I d H  W d    n1 s00    Y  d S r8   r   r   r!   r)   rR   r+   r+   r,   
send_blockt   s    z%test_close_basics.<locals>.send_blockr   rF   r*   r   c                   s>   t tj |  I d H  W d    n1 s00    Y  d S r8   r   r   r"   r'   r$   r*   r+   r+   r,   receive_block   s    z(test_close_basics.<locals>.receive_block)r   r"   r>   r?   r'   r   r&   r   r   r    r!   r   r%   r$   BrokenResourceErrorr   )rU   r)   r*   rC   rY   Z_s2r2r+   r+   r,   test_close_basicss   sB    8(.(.<*0<(r\   c               	     sB  dddddd} t d  d\}}t 4 I d H :}|| |tj t I d H  |  W d   I d H  q1 I d H sx0    Y  ttj |	d  W d    n1 s0    Y  ttj  |
d I d H  W d    n1 s0    Y  tt |  W d    n1 s0    Y  tt | I d H  W d    n1 sX0    Y  t d  d\}}t 4 I d H <}|| |tj t I d H  |  W d   I d H  q1 I d H s0    Y  ttj |	d  W d    n1 s0    Y  ttj  |
d I d H  W d    n1 sB0    Y  ddd	d
d}t d  d\}}t 4 I d H 8}||| t I d H  |  W d   I d H  q1 I d H s0    Y  ttj |  W d    n1 s0    Y  ttj | I d H  W d    n1 s40    Y  d S )NrO   rP   r   rQ   c                   s>   t |  | d I d H  W d    n1 s00    Y  d S r8   rS   rT   r+   r+   r,   rU      s    z#test_close_sync.<locals>.send_blockr   ztrio.MemoryReceiveChannel[None]rV   c                   s>   t tj |  I d H  W d    n1 s00    Y  d S r8   rW   rX   r+   r+   r,   rY      s    z&test_close_sync.<locals>.receive_block)r   r"   r>   r?   r'   r   closer   r   r    r!   r   r%   r$   rZ   )rU   r)   r*   rC   rY   r+   r+   r,   test_close_sync   sB    2(.(.6*06(r^   c                    s  t d  d\} }| }| }| d  | I d H  | W d    n1 sR0    Y  ttj |  W d    n1 s0    Y  ttj |  W d    n1 s0    Y  | d  | I d H  ttj | d  W d    n1 s
0    Y  d S )Nr/   )	r   r(   r    r&   r   r   r"   r'   rZ   )r)   r*   r[   Zr3r+   r+   r,   $test_receive_channel_clone_and_close   s    
&&
r_   c               	     s   t t d\ }   dd fdd}ddfdd}t 4 I d H Z}|| || t I d H    I d H  |  I d H dksJ W d   I d H  q1 I d H s0    Y  d S )	Nr   r   r   c                     s@   t tj   dI d H  W d    n1 s20    Y  d S )NZnope)r   r   r"   r'   r!   r+   )s1r+   r,   send_will_close  s    z9test_close_multiple_send_handles.<locals>.send_will_closec                     s     dI d H  d S Nok)r!   r+   )s2r+   r,   send_will_succeed  s    z;test_close_multiple_send_handles.<locals>.send_will_succeedrc   )	r   r   r(   r"   r>   r?   r   r&   r$   )r*   ra   re   rC   r+   )r`   rd   r,    test_close_multiple_send_handles  s    

rf   c               	     s   t t d\}    dd fdd}ddfdd}t 4 I d H T}|| || t I d H    I d H  | dI d H  W d   I d H  q1 I d H s0    Y  d S )	Nr   r   r   c                     s>   t tj   I d H  W d    n1 s00    Y  d S r8   rW   r+   )r1r+   r,   receive_will_close  s    z?test_close_multiple_receive_handles.<locals>.receive_will_closec                     s      I d H dksJ d S rb   r$   r+   )r[   r+   r,   receive_will_succeed!  s    zAtest_close_multiple_receive_handles.<locals>.receive_will_succeedrc   )	r   r   r(   r"   r>   r?   r   r&   r!   )r)   rh   rj   rC   r+   )rg   r[   r,   #test_close_multiple_receive_handles  s    

rk   c                    s|   t t td\} }| ( tdD ]}| | q"W d    n1 sF0    Y  dd |2 I d H }|ttdksxJ d S )Ninfr/   c                   s   g | z3 d H W }|q6 S r8   r+   )r9   r4   r+   r+   r,   r;   4  r<   z%test_inf_capacity.<locals>.<listcomp>)r   r   floatr5   r    rA   )r!   r$   r4   rD   r+   r+   r,   test_inf_capacity,  s    *rn   c               	     s  t d  d\} }|  | ks$J |  }|jdks:J |jdksHJ |jdksVJ |jdksdJ |jdksrJ |jdksJ | d  |  jdksJ | 	 }|  jdksJ | 
 I d H  | jdksJ |	 }| jdksJ |
 I d H  | jdksJ t 4 I d H |}|d  |  jdksBJ ||jd  ||jd  t I d H  |  jdks~J |j  W d   I d H  q1 I d H s0    Y  |  jdksJ z|  qW n tjy   Y n0 t 4 I d H N}||j t I d H  |  jdks0J |j  W d   I d H  qh1 I d H s^0    Y  |  jdks|J d S )Nr   r   r   )r   
statisticsZcurrent_buffer_usedmax_buffer_sizeZopen_send_channelsZopen_receive_channelsZtasks_waiting_sendZtasks_waiting_receiver    r(   r&   r"   r>   r?   r!   r   Zcancel_scopecancelr%   r#   r$   )r)   r*   statsrd   r[   rC   r+   r+   r,   test_statistics8  sL    

88rs   c               	     s  t ttd f  d\} }| d | dks2J | d | dksLJ d  ddd fdd}t 4 I d H l}||| t I d H  | d t	
tj |  W d    n1 s0    Y  W d   I d H  q1 I d H s0    Y   dksJ t ttd f  d\} }| d t	
tj | d  W d    n1 sT0    Y  t 4 I d H }|| jd t I d H  | dksJ t	
tj | d W d    n1 s0    Y  | I d H dksJ W d   I d H  q1 I d H s0    Y  d S )	Nr   r   z%trio.MemoryReceiveChannel[int | None]r   rV   c                   s   |   I d H  d S r8   ri   rX   resultr+   r,   
do_receivex  s    z)test_channel_fairness.<locals>.do_receiver   )r   r   r   r    r%   r"   r>   r?   r   r   r   r#   r!   r$   )r)   r*   rv   rC   r+   rt   r,   test_channel_fairnessj  s2    


P
**rw   c               	     sP  t t d\} }ttj |  W d    n1 s:0    Y  ttj | d W d    n1 sp0    Y  dddddd}t 4 I d H b}|	|| d t
 & | I d H dksJ W d    n1 s0    Y  W d   I d H  q1 I d H s0    Y  ttj |  W d    n1 sB0    Y  d S )	Nr   r   r2   r   r   )r)   vr   c                   s:   t    | |I d H  W d    n1 s,0    Y  d S r8   )r   r!   )r)   rx   r+   r+   r,   do_send  s    z test_unbuffered.<locals>.do_send)r   r   r   r   r"   r#   r%   r    r>   r?   r   r$   )r)   r*   ry   rC   r+   r+   r,   test_unbuffered  s    &(brz   c               	     sp   t dddd} |  4 I d H 6}|2 z3 d H W }|dks&J q&6 W d   I d H  ql1 I d H sb0    Y  d S )NAsyncGenerator[int]r   c                   S s
   dV  d S Nr   r+   r+   r+   r+   r,   agen  s    z*test_as_safe_channel_exhaust.<locals>.agenr   r   r}   	recv_chanxr+   r+   r,   test_as_safe_channel_exhaust  s
    r   c               	     s   t dddd} |  4 I d H t}| I d H dks8J | I d H  ttj | I d H  W d    n1 sv0    Y  W d   I d H  q1 I d H s0    Y  d S )Nr{   r   c                   S s   dV  dV  d S )Nr   r   r+   r+   r+   r+   r,   r}     s    z2test_as_safe_channel_broken_resource.<locals>.agenr   )r   	__anext__r&   r   r   r"   r'   r}   r   r+   r+   r,   $test_as_safe_channel_broken_resource  s    r   c               
     s   t  d} tdddd}| 4 I d H  |   W d   I d H  q^1 I d H sT0    Y  W d    n1 sr0    Y  d S )NAsyncGenerator[None]r   c                   S s   t dd V  d S )Nz@cancel before consumption means generator should not be iteratedAssertionErrorr+   r+   r+   r,   r}     s    z,test_as_safe_channel_cancelled.<locals>.agen)r"   CancelScoper   rq   )csr}   r+   r+   r,   test_as_safe_channel_cancelled  s
    
r   c               
     s   t dddd} tjtddj |  4 I d H 6}|2 z3 d H W }|dks6J q66 W d   I d H  q|1 I d H sr0    Y  W d    n1 s0    Y  d S )Nr{   r   c                   S s   dV  t dd S )Nr   Zoae)r   r+   r+   r+   r,   r}     s    z*test_as_safe_channel_no_race.<locals>.agenz^oae$r   r   )r   r   r   r   r   r+   r+   r,   test_as_safe_channel_no_race  s    r   ztrio.testing.MockClockc              
     s   t dddd}tdx | 4 I d H D}|2 z&3 d H W }|dksJJ t I d H  q26 W d   I d H  q1 I d H s|0    Y  W d    n1 s0    Y  d S )Nr{   r   c                   S s   dV  t dd S )Nr   z;buffer size 0 means we shouldn't be asked for another valuer   r+   r+   r+   r,   r}     s    z8test_as_safe_channel_buffer_size_too_small.<locals>.agenrK   r   )r   r"   r0   Zsleep_forever)r.   r}   r   r   r+   r+   r,   *test_as_safe_channel_buffer_size_too_small  s    r   c               	     sv   t dddd} |  4 I d H <}| I d H dks8J tj I d H  W d   I d H  qr1 I d H sh0    Y  d S )Nr{   r   c                   S s   dV  t d S r|   r   r+   r+   r+   r,   r}     s    z0test_as_safe_channel_no_interleave.<locals>.agenr   )r   r   r"   lowlevel
checkpointr   r+   r+   r,   "test_as_safe_channel_no_interleave  s
    r   c               
     s   t ddddd} g }ttttddttddd	dt | |4 I d H >}|2 z 3 d H W }|d
ksjJ tdqR6 W d   I d H  q1 I d H s0    Y  W d    n1 s0    Y  |ddgksJ d S )N	list[str]r{   eventsr   c              
   S sp   zVz
dV  W n4 t y@ } z| t|  W Y d }~n
d }~0 0 W | d tdn| d td0 d S )Nr   finallyr}   )BaseExceptionrH   r   r   )r   er+   r+   r,   r}     s    



z2test_as_safe_channel_genexit_finally.<locals>.agenz^agen$r   z
^iterator$z^Encountered exception during cleanup of generator object, as well as exception in the contextmanager body - unable to unwrap.$r   iteratorzGeneratorExit()r   )r   r
   r	   r   r   )r}   r   r   r4   r+   r+   r,   $test_as_safe_channel_genexit_finally  s    


Tr   c                    s   t dddd} d}|  4 I d H }|2 z3 d H W }|  4 I d H J}d}|2 z(3 d H W }||f||fksnJ |d7 }qN6 W d   I d H  q1 I d H s0    Y  |d7 }q*6 W d   I d H  q1 I d H s0    Y  d S )Nr{   r   c                  S s   t dD ]
} | V  qd S )Nr   )r5   )r4   r+   r+   r,   r}     s    z.test_as_safe_channel_nested_loop.<locals>.agenr   r   r~   )r}   iiZ
recv_chan1r4   r   Zjjr6   r+   r+   r,    test_as_safe_channel_nested_loop  s    6r   c               
     s   t dddd} ttf |  4 I d H *}|2 z3 d H W }q26 W d   I d H  ql1 I d H sb0    Y  tdW d    n1 s0    Y  d S )Nr   r   c                  S s:   t  } |   d V  W d    n1 s,0    Y  d S r8   )r"   r   rq   )Zcscoper+   r+   r,   r}   *  s    
z;test_as_safe_channel_doesnt_leak_cancellation.<locals>.agenzshould be reachable)r   r   r   r   )r}   r   _r+   r+   r,   -test_as_safe_channel_doesnt_leak_cancellation)  s    .r   c               
     s   t dddd} tttddddZ |  4 I d H &}tdtdgW d   I d H  qr1 I d H sh0    Y  W d    n1 s0    Y  d S )Nr   r   c                   S s   t dd V  d S )Nznot entered)NotImplementedErrorr+   r+   r+   r,   r}   8  s    zBtest_as_safe_channel_dont_unwrap_user_exceptiongroup.<locals>.agenbarr   Zfoo)r   r
   r	   r   r   )r}   r   r+   r+   r,   4test_as_safe_channel_dont_unwrap_user_exceptiongroup7  s
    r   c               
     s   t   tdd fdd} ddddd	d
d}|  4 I d H }t  4 I d H F}|||dI d H  |||dI d H     W d   I d H  q1 I d H s0    Y  W d   I d H  q1 I d H s0    Y  d S )Nr{   r   c                    s      I d H  dV  dV  d S )Nr   r   )waitr+   eventr+   r,   r}   E  s    z4test_as_safe_channel_multiple_receiver.<locals>.agenztrio.abc.ReceiveChannel[int]r   ztrio.TaskStatusr   )r   r:   task_statusr   c                   s"   |   |  I d H |ksJ d S r8   )startedr$   )r   r:   r   r+   r+   r,   handle_valueK  s    z<test_as_safe_channel_multiple_receiver.<locals>.handle_valuer   r   )r"   Eventr   r>   startrL   )r}   r   r   rC   r+   r   r,   &test_as_safe_channel_multiple_receiverB  s    r   c                    s  t ddddd} g }t }ttj | |4 I d H h}|2 zJ3 d H W }|  ztj I d H  W qF tjy   |	d  Y qF0 qF6 W d   I d H  q1 I d H s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  |ddgksJ d S )Nr   r   r   c                 S s~   z@d V  W zt j I d H  W qz t jy>   | d  Y qz0 n8zt j I d H  W n  t jyv   | d  Y n0 0 d S )Nagen cancel)r"   r   r   	CancelledrH   )r   r+   r+   r,   r}   [  s    


z/test_as_safe_channel_multi_cancel.<locals>.agenzbody cancelr   )
r   r"   r   r   r   r   rq   r   r   rH   )r}   r   r   r   r   r+   r+   r,   !test_as_safe_channel_multi_cancelZ  s    

rr   ).
__future__r   systypingr   r   r   r"   r   r   r   testingr	   r
   r   r   version_infoZexceptiongroupr   collections.abcr   r-   r1   rE   rN   r\   r^   r_   rf   rk   rn   rs   rw   rz   r   r   r   r   r   r   r   r   r   r   r   r   r+   r+   r+   r,   <module>   sF   
+::2*
