
    ,h>L                    n   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  rd dlmZ erd d	lmZ d#d
Zd$dZd#dZd#dZd#dZd#dZd#dZd#dZd#dZd#dZd#dZd#dZ d#dZ!d#dZ"d#dZ#d#dZ$d#dZ%	 	 	 	 d%dZ&d#dZ'd#dZ(d#dZ)d#dZ*d#d Z+d#d!Z,d#d"Z-y)&    )annotationsN)TYPE_CHECKINGUnion)EndOfChannelas_safe_channelopen_memory_channel   )MatcherRaisesGroupassert_checkpointswait_all_tasks_blocked)      )ExceptionGroup)AsyncGeneratorc                   K   t        j                  t              5  t        d       d d d        t        j                  t        d      5  t        d       d d d        t        t
        t        t        d f      d      \  } }t        |        t        |       | j                  d       t               5  | j                  d       d {    d d d        t        j                  t        j                        5  | j                  d        d d d        t               5  |j                          d {   dk(  sJ 	 d d d        |j                         dk(  sJ t        j                  t        j                        5  |j                          d d d        | j                  d       | j!                          d {    t        j                  t        j"                        5  | j                  d       d {    d d d        t        j                  t        j"                        5  | j                  d       d d d        t        j                  t        j"                        5  | j%                          d d d        | j!                          d {    |j                         dk(  sJ t        j                  t&              5  |j                          d {    d d d        |j!                          d {    t        j                  t        j"                        5  |j                          d {    d d d        t        j                  t        j"                        5  |j                          d d d        |j!                          d {    y # 1 sw Y   mxY w# 1 sw Y   KxY w7 # 1 sw Y   xY w# 1 sw Y   xY w7 # 1 sw Y   xY w# 1 sw Y   PxY w7 /7 # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w7 7 B# 1 sw Y   BxY w7 27 # 1 sw Y   xY w# 1 sw Y   xY w7 w)	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rs     Z/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/trio/_tests/test_channel.pytest_channelr+      s(    	y	! !C !	z)J	K  B  uS#t^45a8DAqGGMM!		 ffQi	t	' 	d 
	 &YY[ A%%%&""	t	' 	 MM&
((*	t//	0 !ffZ   !	t//	0 "	j!"	t//	0 		
((*''	|	$ iik
((*	t//	0 iik	t//	0 	
((*O! !    	   !& &   ! !" "  	   s  QN#QN AQ3N0N-	N0+Q8N=
QO0O
1	O;A Q;O,Q8O'9'Q O-5O*6O-:+Q%O:7+Q"P3QP2QPPPQ5P'6'QP,1P*2P,6+Q!P82QQQNQ N*%Q-N00N:5Q=OQ
OOQO$	Q*O--O72Q:P?QP	QPP$	Q*P,,P51Q8Q=Qc                  K   t        t           d      \  }}t        j                  d      5 }|j	                          d {    d d d        j
                  sJ |j                  d       d {    y 7 4# 1 sw Y   3xY w7 w)Nr   
   zTest for PR #553)r   r   r!   move_on_afterr#   cancelled_caughtr    )autojump_clockr(   r)   timeout_scopes       r*   test_553r2   ?   sw     s#A&DAq			B	 =iik)))
&&#
$$$ 	  %s:   +BA8A6A8*B0B1B6A88B=Bc                   K   dd} t        t           d      \  }}t        j                         4 d {   }|4 d {    t	        d      D ]#  }|j                  | |j                         |       % d d d       d {    |2 cg c3 d {   }|7 b7 Y7 # 1 d {  7  sw Y   *xY w7 "6 nc c}w }}|j                          |t        t	        d            k(  sJ d d d       d {  7   y # 1 d {  7  sw Y   y xY ww)Nc                   K   | 4 d {    t        d|z  d|dz   z        D ]  }| j                  |       d {     d d d       d {    y 7 H7 7 	# 1 d {  7  sw Y   y xY ww)Nr   r   )ranger    )send_channelijs      r*   producerz1test_channel_multiple_producers.<locals>.producerH   sr      	+ 	+1q5!q1u+. +"''***+	+ 	+ 	+*	+ 	+ 	+ 	+sT   A-AA--AAAA-AA-AA-A*A!A*&A-r   r-      )r6   trio.MemorySendChannel[int]r7   r   returnNone)	r   r   r!   open_nurseryr5   
start_soonr'   sortlist)r9   r6   receive_channelnurseryr7   valuegots          r*   test_channel_multiple_producersrF   G   s    + %8$<Q$?!L/  " 
& 
&g   	F 	F2Y F""8\-?-?-A1EF	F 	F )888uu
&	F 	F 	F 	F 	F 9888
d59o%%
& 
& 
& 
& 
&s   2DBDC8B C82B5C8 BC8	B6B4B2B4B6DC8C8B/	#B&$B/	+C82B44B651C8&D1C42D8D
>D?D
Dc                   K   t               g dfd} t        j                         4 d {   }t        j                  t           d      \  }}|4 d {    t        d      D ]  }|j                  | ||        t                d {    t        d      D ]  }|j                  |       d {     d d d       d {    d d d       d {    t        t        d            k(  sJ t              dk(  sJ t              t        t        d            k(  sJ y 7 7 7 7 x7 h# 1 d {  7  sw Y   xxY w7 o# 1 d {  7  sw Y   xY ww)Nc                p   K   | 2 3 d {   }j                  |       j                  |       ,7 '6 y wN)addappend)rB   r7   rD   receivedsuccessful_receiverss      r*   consumerz1test_channel_multiple_consumers.<locals>.consumer`   s8     * 	# 	#% $$Q'OOE"	#?s   6424$646r      r-   )rB   trio.MemoryReceiveChannel[int]r7   r   r<   r=   )
setr!   r>   r   r   r5   r?   r   r    len)rN   rC   r6   rB   r7   rL   rM   s        @@r*   test_channel_multiple_consumersrS   \   sG    5H#
   " + +g(,(@(@(Ea(H%o 	+ 	+1X A""8_a@A(***2Y +"''***+		+ 	++ +  3uQx=00x=Bx=Cb	N***+	+ +*	+ 	+ 	+ 	++ + + +s   ,ED)E&E
D+E
1D3D-&D36D/
7D3=E
D1	E
EEAE+E
-D3/D31E
3E	9D<:E	E
E
EEEEc                   K   	 	 	 	 	 	 dd} t        d    d      \  }}t        j                         4 d {   }|j                  | |t        j                         t                d {    |j                          d {    d d d       d {    t        j                  t        j                        5  |j                  d        d d d        t        j                  t        j                        5  |j                  d        d {    d d d        t        j                  t              5  |j                          d d d        t        j                  t              5  |j                          d {    d d d        t        d    d      \  }}t        j                         4 d {   }|j                  | |t        j                         t                d {    |j                          d {    d d d       d {    t        j                  t        j                        5  |j                  d        d d d        t        j                  t        j                        5  |j                  d        d {    d d d        dd}t        t           d      \  }}t        j                         4 d {   }|j                  ||       t                d {    |j                          d {    d d d       d {    t        j                  t        j                        5  |j                          d d d        t        j                  t        j                        5  |j                          d {    d d d        y 7 \7 ,7 7 
# 1 d {  7  sw Y   xY w# 1 sw Y   xY w7 # 1 sw Y   xY w# 1 sw Y   xY w7 g# 1 sw Y   gxY w7 A7 7 7 # 1 d {  7  sw Y    xY w# 1 sw Y   xY w7 # 1 sw Y   xY w7 m7 L7 77 *# 1 d {  7  sw Y   ;xY w# 1 sw Y   xY w7 # 1 sw Y   y xY ww)Nc                   K   t        j                  |      5  | j                  d        d {    d d d        y 7 # 1 sw Y   y xY wwrI   r   r   r    r(   expects     r*   
send_blockz%test_close_basics.<locals>.send_blockt   B      ]]6" 	&&,	 		 	%   A	=;=	A	=AA	r   c                   K   t        j                  t        j                        5  | j	                          d {    d d d        y 7 # 1 sw Y   y xY wwrI   r   r   r!   r&   r#   r)   s    r*   receive_blockz(test_close_basics.<locals>.receive_block   D     ]]4334 	))+	 		 	+   $AA
AA
	AA

AAr(   ztrio.MemorySendChannel[None]rX   ztype[BaseException]r<   r=   )r)   rP   r<   r=   )r   r!   r>   r?   r&   r   r%   r   r   r   r    r   r$   r#   BrokenResourceErrorr   )rY   r(   r)   rC   r_   _s2r2s          r*   test_close_basicsrf   s   s    '# 
 t$Q'DAq  "  g:q$*B*BC$&&&hhj  
t//	0 	d	t//	0 ffTl 
|	$ 		|	$ iik t$Q'DAq  "  g:q$*B*BC$&&&hhj  
t//	0 	d	t//	0 ffTl "#&q)GC  "  g="-$&&&iik  
t//	0 
	t//	0 jjl Y&     	   	 
&     	 &     	 s<  4Q*NQ*/N)N*NNNQ*N'Q*9N4+Q*6OOO!Q*1O!Q*#O!7O8O!<1Q*-O..Q*1/O: O1!O:8O49O:=Q*O7	'Q*0P+Q*-P PP 9Q* P-Q* P9$P0%P9<P3=P9Q*P6'Q*4Q+Q*0QQQ	
Q*NNQ*N1$N'%N1,Q*4N>9Q*OO	Q*OQ*O!!O+&	Q*1O:4O:7Q*:P PPQ*PQ*P  P*%	Q*0P93P96Q*9Q?Q QQ*QQ*QQ'#Q*c                   K   	 	 	 	 	 	 dd} t        d    d      \  }}t        j                         4 d {   }|j                  | |t        j                         t                d {    |j                          d d d       d {    t        j                  t        j                        5  |j                  d        d d d        t        j                  t        j                        5  |j                  d        d {    d d d        t        j                  t              5  |j                          d d d        t        j                  t              5  |j                          d {    d d d        t        d    d      \  }}t        j                         4 d {   }|j                  | |t        j                         t                d {    |j                          d d d       d {    t        j                  t        j                        5  |j                  d        d d d        t        j                  t        j                        5  |j                  d        d {    d d d        dd}t        d    d      \  }}t        j                         4 d {   }|j                  ||       t                d {    |j                          d d d       d {    t        j                  t        j                        5  |j                          d d d        t        j                  t        j                        5  |j                          d {    d d d        y 7 @7 7 # 1 d {  7  sw Y   xY w# 1 sw Y   xY w7 # 1 sw Y   xY w# 1 sw Y   zxY w7 P# 1 sw Y   PxY w7 *7 7 # 1 d {  7  sw Y   xY w# 1 sw Y   xY w7 # 1 sw Y   xY w7 _7 >7 !# 1 d {  7  sw Y   2xY w# 1 sw Y   xY w7 # 1 sw Y   y xY ww)Nc                   K   t        j                  |      5  | j                  d        d {    d d d        y 7 # 1 sw Y   y xY wwrI   rV   rW   s     r*   rY   z#test_close_sync.<locals>.send_block   rZ   r[   r   c                   K   t        j                  t        j                        5  | j	                          d {    d d d        y 7 # 1 sw Y   y xY wwrI   r]   r^   s    r*   r_   z&test_close_sync.<locals>.receive_block   r`   ra   rb   )r)   ztrio.MemoryReceiveChannel[None]r<   r=   )r   r!   r>   r?   r&   r   closer   r   r   r    r   r$   r#   rc   )rY   r(   r)   rC   r_   s        r*   test_close_syncrk      so    '# 
 t$Q'DAq  "  g:q$*B*BC$&&&		  
t//	0 	d	t//	0 ffTl 
|	$ 		|	$ iik t$Q'DAq  "  g:q$*B*BC$&&&		  
t//	0 	d	t//	0 ffTl t$Q'DAq  "  g=!,$&&&		  
t//	0 		t//	0 iik Y&     	   	 
&     	 &     	 s  4QM6Q/M?)M9*M?>Q	M<
'Q1N+Q.N%N"N%!Q)N2:!QO/N?0O41Q%O&Q)/OOO-Q8O9'Q O.2+QO>2O;3O>75Q,P-Q0 PPP%Q0P1'QP*)+QP9(P7)P9-
Q9M?<Q?NNNQNQ"N%%N/*Q2N<7Q?OO	QOQO+O!O+&Q.O83Q;O>>P	QPQP'PP'"Q*P4/Q7P99Q>Qc                   K   t        d    d      \  } }|j                         }|j                         }| j                  d        |j                          d {    |5  	 d d d        t	        j
                  t        j                        5  |j                          d d d        t	        j
                  t        j                        5  |j                          d d d        | j                  d        |j                          d {    t	        j
                  t        j                        5  | j                  d        d d d        y 7 # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w7 h# 1 sw Y   y xY ww)Nr-   )	r   r'   r   r%   r   r   r!   r&   rc   )r(   r)   re   r3s       r*   $test_receive_channel_clone_and_closern      s+    t$R(DAq	
B	
BMM$
((*	  
t//	0 		 
t//	0 

 MM$
))+ 
t//	0 	d !      s~   AE<EE<E
!+E<E+E<E",E<E.'E<-E0?
E<
EE<EE<"E+'E<0E95E<c                   K   t        t           d      \  } j                         dfd}dfd}t        j                         4 d {   }|j                  |       |j                  |       t                d {    j                          d {    | j                          d {   dk(  sJ d d d       d {    y 7 ~7 L7 67  7 # 1 d {  7  sw Y   y xY ww)Nr   c                    K   t        j                  t        j                        5   j	                  d       d {    d d d        y 7 # 1 sw Y   y xY ww)Nnope)r   r   r!   r&   r    )s1s   r*   send_will_closez9test_close_multiple_send_handles.<locals>.send_will_close  sG     ]]4334 	"''&/!!	" 	"!	" 	"s,   $AAA
A	A
AAAc                 D   K    j                  d       d {    y 7 wNok)r    )s2s   r*   send_will_succeedz;test_close_multiple_send_handles.<locals>.send_will_succeed  s     ggdms     rv   r<   r=   )	r   r   r'   r!   r>   r?   r   r%   r#   )r)   rs   rx   rC   rr   rw   s       @@r*    test_close_multiple_send_handlesrz     s       $Q'EB	B"   " ) )g?+,-$&&&iikYY[ D(() ) ) 	' ) ) ) )s~   A
C,CC,0CCCCC2C3	C<C,CC,CCCC,C)C C)%C,c                   K   t        t           d      \  } j                         dfd}dfd}t        j                         4 d {   }|j                  |       |j                  |       t                d {    j                          d {    | j                  d       d {    d d d       d {    y 7 z7 H7 27 7 # 1 d {  7  sw Y   y xY ww)Nr   c                    K   t        j                  t        j                        5   j	                          d {    d d d        y 7 # 1 sw Y   y xY wwrI   r]   )r1s   r*   receive_will_closez?test_close_multiple_receive_handles.<locals>.receive_will_close  sE     ]]4334 	**,	 		 	s,   $AAA	A 	A	AAAc                 L   K    j                          d {   dk(  sJ y 7 
wru   r#   )re   s   r*   receive_will_succeedzAtest_close_multiple_receive_handles.<locals>.receive_will_succeed!  s!     ZZ\!T)))!s   $"$rv   ry   )	r   r   r'   r!   r>   r?   r   r%   r    )r(   r~   r   rC   r}   re   s       @@r*   #test_close_multiple_receive_handlesr     s       $Q'EAr	B*   "  g-./0$&&&iikffTl   	'   s~   A
C(C	C(0CCCCC3C4C8C(CC(CCCC(C%CC%!C(c                 &  K   t        t           t        d            \  } }| 5  t        d      D ]  }| j	                  |        	 d d d        |2 cg c3 d {   }|# 1 sw Y   xY w7 6 nc c}w }}|t        t        d            k(  sJ y w)Ninfr-   )r   r   floatr5   r   rA   )r    r#   r7   rE   s       r*   test_inf_capacityr   ,  s     ',U5\:MD' 
  r 	 AQ	   $
$
$q1	    %
$
$C
$$uRy/!!!sL   !B"A BA0A.A,
A.A0 A)%B,A..A0/"Bc                   K   t        d    d      \  } }| j                         |j                         k(  sJ | j                         }|j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ |j
                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ | j                  d        | j                         j                  dk(  sJ | j                         }| j                         j                  dk(  sJ | j                          d {    |j                         j                  dk(  sJ |j                         }|j                         j
                  dk(  sJ |j                          d {    |j                         j
                  dk(  sJ t        j                         4 d {   }|j                  d        | j                         j                  dk(  sJ |j                  |j                  d        |j                  |j                  d        t                d {    | j                         j                  dk(  sJ |j                   j#                          d d d       d {    | j                         j                  dk(  sJ 	 	 |j%                          7 7 97 7 7 @# 1 d {  7  sw Y   PxY w# t        j&                  $ r Y nw xY wt        j                         4 d {  7  }|j                  |j(                         t                d {  7   | j                         j                  dk(  sJ |j                   j#                          d d d       d {  7   n# 1 d {  7  sw Y   nxY w| j                         j                  dk(  sJ y w)Nr	   r   r   )r   
statisticscurrent_buffer_usedmax_buffer_sizeopen_send_channelsopen_receive_channelstasks_waiting_sendtasks_waiting_receiver   r'   r%   r!   r>   r?   r    r   cancel_scopecancelr$   r"   r#   )r(   r)   statsrw   re   rC   s         r*   test_statisticsr   8  s    t$Q'DAq<<>Q\\^++LLNE$$))  A%%##q((&&!++##q((&&!++MM$<<>--22	
B<<>,,11
((*==?--22	
B==?00A55
))+==?00A55  " & &g
t||~11Q66277D)277D)$&&&||~00A55##%& & <<>,,11 ) 
 &
 	'& & & & ??    " & &g199%$&&&||~33q88##%	& & & & &
 <<>//1444s   DOJ; A%OJ>;OKOA6K;K<=K9OK#O)K ;O>OOKOKKKOK2/O1K22OLO)N;L><>N:ONONNN'Oc                 l  K   t        t        t        d f      d      \  } }| j                  d       |j	                         dk(  sJ | j                  d       |j	                         dk(  sJ d dfd}t        j                         4 d {   }|j                  ||       t                d {    | j                  d       t        j                  t
        j                        5  |j	                          d d d        d d d       d {    dk(  sJ t        t        t        d f      d      \  } }| j                  d       t        j                  t
        j                        5  | j                  d        d d d        t        j                         4 d {   }|j                  | j                  d       t                d {    |j	                         dk(  sJ t        j                  t
        j                        5  | j                  d       d d d        |j                          d {   dk(  sJ d d d       d {    y 7 7 # 1 sw Y   ^xY w7 V# 1 d {  7  sw Y   gxY w# 1 sw Y   xY w7 7 # 1 sw Y   txY w7 c7 P# 1 d {  7  sw Y   y xY ww)Nr   r	   c                B   K   | j                          d {   y 7 wrI   r   )r)   results    r*   
do_receivez)test_channel_fairness.<locals>.do_receivex  s     yy{""s   r   )r)   z%trio.MemoryReceiveChannel[int | None]r<   r=   )r   r   r   r   r$   r!   r>   r?   r   r   r   r"   r    r#   )r(   r)   r   rC   r   s       @r*   test_channel_fairnessr   j  s8     uS$Y/03DAqMM!""MM!""
 F#   "  g:q)$&&&	a]]4??+ 			  Q;
 uS$Y/03DAqMM!	t	' 	d  " ( (g1661%$&&&!Q&&]]4??+ 	MM!	iik!a''( ( (&	 		    (&	 	!( ( ( (s  BJ4IJ4 I(2I38I(+I<I(J4I%AJ4-I>? J4J J4#*JJ<J
JJ7J8	JJ4JJ4I(I"	I(%J4(I;.I1/I;6J4>J	J4JJ	JJ4J1%J(&J1-J4c                    K   t        t           d      \  } }t        j                  t        j
                        5  |j                          d d d        t        j                  t        j
                        5  | j                  d       d d d        dd}t	        j                         4 d {   }|j                  || d       t               5  |j                          d {   dk(  sJ 	 d d d        d d d       d {    t        j                  t        j
                        5  |j                          d d d        y # 1 sw Y   xY w# 1 sw Y   xY w7 7 y# 1 sw Y   rxY w7 i# 1 d {  7  sw Y   yxY w# 1 sw Y   y xY ww)Nr   r   c                   K   t               5  | j                  |       d {    d d d        y 7 # 1 sw Y   y xY wwrI   )r   r    )r(   vs     r*   do_sendz test_unbuffered.<locals>.do_send  s8     ! 	&&)OO	 		 	s    >202	>2;>)r(   r;   r   r   r<   r=   )r   r   r   r   r!   r"   r$   r   r>   r?   r   r#   )r(   r)   r   rC   s       r*   test_unbufferedr     sA    s#A&DAq	t	' 		t	' 	a   " * *g7Aq)! 	*$)))	** * 
t	' 	   * %	* 	** * * * s   9FE+F7E	$F-E.F1E-E#E$	E.E-6FE+'F)F:	FEFEFEE(	$E-+F-E?3E64E?;FFFc                    K   t         dd       }  |        4 d {   }|2 3 d {   }|dk(  rJ 7 7 6 d d d       d {  7   y # 1 d {  7  sw Y   y xY ww)Nc                   K   d y wNr    r       r*   agenz*test_as_safe_channel_exhaust.<locals>.agen  s     s   	r   r<   AsyncGenerator[int]r   r   	recv_chanxs      r*   test_as_safe_channel_exhaustr     sj       v    	 	!6M	y    s`   A3AA
757A
A
A7A
AAA
AAAAc                   K   t         dd       }  |        4 d {   }|j                          d {   dk(  sJ |j                          d {    t        j                  t
        j                        5  |j                          d {    d d d        d d d       d {    y 7 7 x7 ]7 ## 1 sw Y   "xY w7 # 1 d {  7  sw Y   y xY ww)Nc                    K   d d y w)Nr   r	   r   r   r   r*   r   z2test_as_safe_channel_broken_resource.<locals>.agen  s        r   r   )r   	__anext__r%   r   r   r!   r&   r   r   s     r*   $test_as_safe_channel_broken_resourcer     s       v ( (((**a//     ]]4334 	(%%'''	(( ( (* 	! (	( 	(( ( ( (s   CB*CC B,C B.'C 8B2B0B2C C$B>%C,C .C 0B22B;	7C >C CC	CCc                 
  K   t        j                         5 } t        dd       } |       4 d {    | j                          d d d       d {    d d d        y 7 -7 # 1 d {  7  sw Y   xY w# 1 sw Y   y xY ww)Nc                    K   t        d      w)Nz@cancel before consumption means generator should not be iteratedAssertionErrorr   r   r*   r   z,test_as_safe_channel_cancelled.<locals>.agen  s      R r   r<   AsyncGenerator[None])r!   CancelScoper   r   )csr   s     r*   test_as_safe_channel_cancelledr     s     				 
r		 
	 6 	 	IIK	 	
 
	 	 	 	 	
 
sa   BA7AA7A"A7A A7	BA7 A7"A4	(A+)A4	0A77B <Bc                 $  K   t         dd       } t        j                  t        d      5   |        4 d {   }|2 3 d {   }|dk(  rJ 7 7 6 d d d       d {  7   n# 1 d {  7  sw Y   nxY wd d d        y # 1 sw Y   y xY ww)Nc                *   K   d t        d      w)Nr   oae)r   r   r   r*   r   z*test_as_safe_channel_no_race.<locals>.agen  s        z^oae$r   r   r   )r   r   r   r   r   s      r*   test_as_safe_channel_no_racer     s          
z	2 6 	 	Y$  aAv	9	 	 	 	 	  s   )BBABA&AA
AA&A&BAA&BA" B&A8	,A/-A8	4B;	BB	Bc                T  K   t         dd       }t        j                  d      5   |       4 d {   }|2 3 d {   }|dk(  sJ t        j                          d {    -7 37 *7 	6 d d d       d {  7   n# 1 d {  7  sw Y   nxY wd d d        y # 1 sw Y   y xY ww)Nc                *   K   d t        d      w)Nr   z;buffer size 0 means we shouldn't be asked for another valuer   r   r   r*   r   z8test_as_safe_channel_buffer_size_too_small.<locals>.agen  s     I
 	
r   rO   r   r   )r   r!   r.   sleep_forever)r0   r   r   r   s       r*   *test_as_safe_channel_buffer_size_too_smallr     s      
 
 
		A	 +6 	+ 	+Y$ + +aAv((***	++* %	+ 	+ 	+ 	+ 	++ + +s   #B(BA%BA>A+A'
A+ A>A)
 A>%B'A+)A>+A>,B7A:8B>B	BB	B	B(B%!B(c                 &  K   t         dd       }  |        4 d {   }|j                          d {   dk(  sJ t        j                  j	                          d {    d d d       d {    y 7 X7 B7 7 # 1 d {  7  sw Y   y xY ww)Nc                    K   d t         wr   r   r   r   r*   r   z0test_as_safe_channel_no_interleave.<locals>.agen  s     r   r   r   )r   r   r!   lowlevel
checkpointr   s     r*   "test_as_safe_channel_no_interleaver     s       v ) )((**a//mm&&((() ) )*() ) ) )sf   BA4BA<A6*A<A8A<#B.A:/B6A<8A<:B<BBB
Bc            	       K   t         d
d       } g }t        t        t        t        d      t        t        d            d      5   | |      4 d {   }|2 3 d {   }|dk(  sJ t	        d      7 !7 6 d d d       d {  7   n# 1 d {  7  sw Y   nxY wd d d        n# 1 sw Y   nxY w|dd	gk(  sJ y w)Nc                  K   	 d 	 | j                  d       t        d      # t         $ r }| j                  t        |              d }~ww xY w# | j                  d       t        d      xY ww)Nr   finallyr   )BaseExceptionrK   r   r   )eventses     r*   r   z2test_as_safe_channel_genexit_finally.<locals>.agen  sg     	%G
 MM)$V$$  	MM$q'"	 MM)$V$$s0   A2& A2	AA

AA A//A2z^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   	list[str]r<   r   )r   r   r
   r   r   )r   r   r   r7   s       r*   $test_as_safe_channel_genexit_finallyr     s     % % F	Jh/I\2	
 Q
 
, < 	, 	,9$ , ,aAv
++	,,9	, 	, 	, 	, 	,
, 
, 
, '3333s   ACB+A6B+BA:A8
 A:#B6B+8A::B;B+B	B+B	BB	B+"	C+B40Cc            	     v  K   t         dd       } d} |        4 d {   }|2 3 d {   } |        4 d {   }d}|2 3 d {   }||f||fk(  sJ |dz  }7 =7 47 &7 6 d d d       d {  7   n# 1 d {  7  sw Y   nxY w|dz  }m6 d d d       d {  7   y # 1 d {  7  sw Y   y xY ww)Nc                6   K   t        d      D ]  } |  	 y w)Nr	   )r5   )r7   s    r*   r   z.test_as_safe_channel_nested_loop.<locals>.agen  s     q 	AG	s   r   r   r   r   )r   ii
recv_chan1r7   r   jjr8   s          r*    test_as_safe_channel_nested_loopr     s       
Bv  ! 	 	!v  (  !q6b"X--!GB	y    
 !GB "    s   B9AB9B$BABB$A
B$A6A#A!A#	A6B9BB$!A##A6$B$/A20B$6B<A?=BB$B9B B9$B6*B-+B62B9c                 (  K   t         dd       } t        j                  t              5   |        4 d {   }|2 3 d {   }
7 7 6 d d d       d {  7   t        d      # 1 d {  7  sw Y   t        d      xY w# 1 sw Y   y xY ww)Nc                   K   t        j                         5 } | j                          d  d d d        y # 1 sw Y   y xY wwrI   )r!   r   r   )cscopes    r*   r   z;test_as_safe_channel_doesnt_leak_cancellation.<locals>.agen*  s4      	6MMO	 	 	s   A6	A?Azshould be reachabler   )r   r   r   r   )r   r   _s      r*   -test_as_safe_channel_doesnt_leak_cancellationr   )  s      
 
~	& 46 	 	Y$  a	9	 	 	 233	 	 	 233	4 4sx   'BBABA'A
 A
A
A'BA

A'BAB'B	-A0.B	5BBBc                   K   t         dd       } t        t        t        d      d      5   |        4 d {   }t	        dt        d      g      7 # 1 d {  7  sw Y   nxY w	 d d d        y # 1 sw Y   y xY ww)Nc                    K   t        d      w)Nznot entered)NotImplementedErrorr   r   r*   r   zBtest_as_safe_channel_dont_unwrap_user_exceptiongroup.<locals>.agen8  s     !-00r   barr   foor   )r   r   r
   r   r   )r   r   s     r*   4test_as_safe_channel_dont_unwrap_user_exceptiongroupr   7  s       
WZu5U	C =6 	= 	=Q E):(;<<	= 	= 	= 	= 	== = =sI   *B A4AA4AA4A'	AA'	#A4+	B 4A=9B c                   K   t        j                         t        dfd       } 	 	 	 	 	 	 	 	 dd} |        4 d {   }t        j                         4 d {   }|j	                  ||d       d {    |j	                  ||d       d {    j                          d d d       d {    d d d       d {    y 7 7 m7 T7 ;7 # 1 d {  7  sw Y   -xY w7 $# 1 d {  7  sw Y   y xY ww)Nc                V   K    j                          d {    d d y 7 w)Nr   r   )wait)events   r*   r   z4test_as_safe_channel_multiple_receiver.<locals>.agenE  s%     jjl 	s   )')c                j   K   |j                          | j                          d {   |k(  sJ y 7 
wrI   )startedr#   )r   rD   task_statuss      r*   handle_valuez<test_as_safe_channel_multiple_receiver.<locals>.handle_valueK  s1     
 	&&((E111(s   $313r   r   r   )r   ztrio.abc.ReceiveChannel[int]rD   r   r   ztrio.TaskStatusr<   r=   )r!   Eventr   r>   startrQ   )r   r   r   rC   r   s       @r*   &test_as_safe_channel_multiple_receiverr   B  s     JJLE 
2/22 %2 
	2 v  $$& 	 	'--i;;;--i;;;IIK	 	  	;;	 	 	 	   s   ;C=CC=C(C	C(C6C7CCC&C(1C2C(6C=C&C=	C(CCC(C#	CC#	C(&C=(C:.C1/C:6C=c            	     X  K   t         dd       } g }t        j                         5 }t        j                  t        j
                        5   | |      4 d {   }|2 3 d {   }|j                          	 t        j                  j                          d {    A7 G7 >7 	# t        j
                  $ r |j                  d        w xY w6 d d d       d {  7   n# 1 d {  7  sw Y   nxY wd d d        n# 1 sw Y   nxY wd d d        n# 1 sw Y   nxY w|ddgk(  sJ y w)Nc               h  K   	 d  	 t         j                  j                          d {    y 7 # t         j                  $ r | j	                  d        w xY w# 	 t         j                  j                          d {  7   w # t         j                  $ r | j	                  d        w xY wxY ww)Nagen cancel)r!   r   r   	CancelledrK   )r   s    r*   r   z/test_as_safe_channel_multi_cancel.<locals>.agen[  s     		mm..000>> m,mm..000>> m,sZ   B2A !3 13 B23 &AB2B/!B?B BB/&B,,B//B2zbody cancelr   )r   r   r<   r   )
r   r!   r   r   r   r   r   r   r   rK   )r   r   r   r   r   s        r*   !test_as_safe_channel_multi_cancelr   Z  s    
 
 F				 	r]]4>>* 	F|  y(  !IIK"mm66888	 9>> m4	  )    	 	 		 	 	 m]3333s   $D*$D
C?B
C?C!C"B!#C&C!8!B%B#B%C!C?!C#B%%&CC!C?CC?!C3'C*(C3/C?6	D?D	D	D*DD*ry   )r0   ztrio.abc.Clockr<   r=   )r0   ztrio.testing.MockClockr<   r=   ).
__future__r   systypingr   r   r   r!   r   r   r   testingr
   r   r   r   version_infoexceptiongroupr   collections.abcr   r+   r2   rF   rS   rf   rk   rn   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r*   <module>r      s    " 
 '   C C V Vg-.(V%&*+.7t7t6)**	"/5d'(T&(&+*+	+")48"4=04r   