
    iZ                       d dl mZ d dlZd dl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 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*d*d#Z+d*d$Z,d*d%Z-d*d&Z.d*d'Z/d*d(Z0d*d)Z1y)-    )annotationsN)TYPE_CHECKING)EndOfChannelas_safe_channelopen_memory_channel   )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        z  d z     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   ixY w# 1 sw Y   Gx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   
ValueErrorintstrreprsend_nowaitr	   sendtrio
WouldBlockreceivereceive_nowaitacloseClosedResourceErrorcloner   )srs     T/var/www/html/BatchJob/venv/lib/python3.12/site-packages/trio/_tests/test_channel.pytest_channelr)      s,    	y	! !C !	z)J	K  B  sSy4/03DAq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/N,N)N,	+Q4N9QO	,O-	O	7A Q7O,Q4O#5'QO)1O&2O)6+Q!O63+QP/Q
P2Q=PPPQ1P#2'QP(-P&.P(2+QP4.Q	Q 
QNQN&!Q)N,,N61Q9O>QO		OQO 	Q&O))O3.Q6P ;QP	QPP 	Q&P((P1-Q4P=9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_553r0   ?   sz     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+      )r4   trio.MemorySendChannel[int]r5   r   returnNone)	r   r   r   open_nurseryr3   
start_soonr%   sortlist)r7   r4   receive_channelnurseryr5   valuegots          r(   test_channel_multiple_producersrD   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)r@   r5   rB   receivedsuccessful_receiverss      r(   consumerz1test_channel_multiple_consumers.<locals>.consumer`   s8     * 	# 	#% $$Q'OOE"	#?s   6424$646r      r+   )r@   trio.MemoryReceiveChannel[int]r5   r   r:   r;   )
setr   r<   r   r   r3   r=   r
   r   len)rL   rA   r4   r@   r5   rJ   rK   s        @@r(   test_channel_multiple_consumersrQ   \   sM    5H#
   " + +g(,(@(@(Ea(H%o 	+ 	+1X A""8_a@A(***2Y +"''***+		+ 	++ +  3uQx=0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rG   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rG   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]rV   type[BaseException]r:   r;   )r'   rN   r:   r;   )r   r   r<   r=   r$   r
   r#   r   r   r   r   r   r"   r!   BrokenResourceErrorr   )rW   r&   r'   rA   r]   _s2r2s          r(   test_close_basicsre   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rG   rT   rU   s     r(   rW   z#test_close_sync.<locals>.send_block   rX   rY   r   c                   K   t        j                  t        j                        5  | j	                          d {    d d d        y 7 # 1 sw Y   y xY wwrG   r[   r\   s    r(   r]   z&test_close_sync.<locals>.receive_block   r^   r_   r`   )r'   ztrio.MemoryReceiveChannel[None]r:   r;   )r   r   r<   r=   r$   r
   closer   r   r   r   r   r"   r!   rb   )rW   r&   r'   rA   r]   s        r(   test_close_syncrj      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$   rb   )r&   r'   rd   r3s       r(   $test_receive_channel_clone_and_closerm      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     ru   r:   r;   )	r   r   r%   r   r<   r=   r
   r#   r!   )r'   rr   rw   rA   rq   rv   s       @@r(    test_close_multiple_send_handlesry     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rG   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rt   r!   )rd   s   r(   receive_will_succeedzAtest_close_multiple_receive_handles.<locals>.receive_will_succeed!  s!     ZZ\!T)))!s   $"$ru   rx   )	r   r   r%   r   r<   r=   r
   r#   r   )r&   r}   r   rA   r|   rd   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   floatr3   r   r?   )r   r!   r5   rC   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'   statsrv   rd   rA   s         r(   test_statisticsr   8  s4    t$Q'DAq<<>Q\\^+++LLNE$$)))  A%%%##q(((&&!+++##q(((&&!+++MM$<<>--222	
B<<>,,111
((*==?--222	
B==?00A555
))+==?00A555  " & &g
t||~11Q666277D)277D)$&&&||~00A555##%& & <<>,,111 ) 
 &
 	'& & & & ??    " & &g199%$&&&||~33q8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                 T  K   t        t        d z     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        d z     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   XxY w7 P# 1 d {  7  sw Y   ax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rG   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   rA   r   s       @r(   test_channel_fairnessr   j  s<     sTz*1-DAqMM!"""MM!"""
 F#   "  g:q)$&&&	a]]4??+ 			  Q;;
 sTz*1-DAqMM!	t	' 	d  " ( (g1661%$&&&!Q&&&]]4??+ 	MM!	iik!a'''( ( (&	 		    (&	 	!( ( ( (s  BJ(I	J( I,I	-8I%I6I>J(	I
AJ(!I23 J(I?J(*JJ<J>JJ+J,	J5J( JJ(	II	IJ(I/"I%#I/*J(2I<7	J(JJ	JJ(J%JJ%!J(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rG   )r	   r   )r&   vs     r(   do_sendz test_unbuffered.<locals>.do_send  s8     ! 	&&)OO	 		 	s    >202	>2;>)r&   r9   r   r   r:   r;   )r   r   r   r   r   r    r"   r   r<   r=   r	   r!   )r&   r'   r   rA   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        	r   r:   AsyncGenerator[int]r   r   	recv_chanxs      r(   test_as_safe_channel_exhaustr     sl       v    	 	!6M6	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v	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   rM   r   r   )r   r   r,   sleep_forever)r.   r   r   r   s       r(   *test_as_safe_channel_buffer_size_too_smallr     s      
 
 
		A	 +6 	+ 	+Y$ + +aAvv((***	++* %	+ 	+ 	+ 	+ 	++ + +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        j                  t        j                  t        d      t        j                  t
        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t        j                  dk\  rj                  j                  dgk(  sJ |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   )BaseExceptionrI   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$r   iteratorr   z}Encountered exception during cleanup of generator object, as well as exception in the contextmanager body - unable to unwrap.zGeneratorExit()r   )r   	list[str]r:   r   )
r   r   RaisesGroup	RaisesExcr   r   sysversion_inforB   	__notes__)r   r   gr   r5   s        r(   $test_as_safe_channel_genexit_finallyr     s    % % F			84,7
 , 
< 	, 	,9$ , ,aAvv
++	,,9	, 	, 	, 	, 	,	, , , 7"ww  O%
 
 	
 

 '3333s   ADB>'B	(B>+B .B2B
3B6B 	B>BB B>BB> B2	&B)'B2	.B>5	D>CA D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   )r3   )r5   s    r(   r   z.test_as_safe_channel_nested_loop.<locals>.agen  s     q 	AG	s   r   r   r   r   )r   ii
recv_chan1r5   r   jjr6   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   d  t        j                         5 } | j                          d  d d d        y # 1 sw Y   y xY wwrG   )r   r   r   )cscopes    r(   r   z;test_as_safe_channel_doesnt_leak_cancellation.<locals>.agen-  s7      	6MMO	 	 	s   A;	A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        j                  t        j                  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>.agen<  s     !-00r   barr   foor   )r   r   r   r   r   r   )r   r   s     r(   4test_as_safe_channel_dont_unwrap_user_exceptiongroupr   ;  s       
		F,,ZuEU	S =6 	= 	=Q E):(;<<	= 	= 	= 	= 	== = =sM   >B BA'BA)'B)A;	/A20A;	7B?	BB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>.agenI  s%     jjl 	s   )')c                j   K   |j                          | j                          d {   |k(  sJ y 7 
wrG   )startedr!   )r   rB   task_statuss      r(   handle_valuez<test_as_safe_channel_multiple_receiver.<locals>.handle_valueO  s1     
 	&&((E111(s   $313r   r   r   )r   ztrio.abc.ReceiveChannel[int]rB   r   r   ztrio.TaskStatusr:   r;   )r   Eventr   r<   startrO   )r   r   r   rA   r   s       @r(   &test_as_safe_channel_multiple_receiverr   F  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   	CancelledrI   )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   rI   )r   r   r   r   r   s        r(   !test_as_safe_channel_multi_cancelr   ^  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*c                    K   t         dd       }  |        4 d {   }|2 3 d {   } d d d       d {    y 7 !7 6 7 # 1 d {  7  sw Y   y xY ww)Nc                  K   	 t        j                         4 d {    d  d d d       d {    y 7 7 # 1 d {  7  sw Y   y xY w# t        $ r0} t        j                  t
              j                  |       sJ  d } ~ ww xY wwrG   )r   r<   r   r   r   GeneratorExitmatches)r   s    r(   r   z:test_as_safe_channel_genexit_exception_group.<locals>.agen{  sz     	((*         	%%m4<<Q???	so   BA 7A ;A 9A BA A AAA	A BA 	B	+BB		Br   r   )r   r   r   s      r(   ,test_as_safe_channel_genexit_exception_groupr   z  sk       v   	 	!  	q   s^   A=AAA?AAAAAAAAAAAAc            	       K   t         dd       } t        j                  t              5   |        4 d {   }t	        j
                         4 d {    |j                          d {    t        7 ?7 $7 # 1 d {  7  sw Y   nxY w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  y wrG   r   r   r   r(   r   zCtest_as_safe_channel_does_not_suppress_nested_genexit.<locals>.agen  s	     r   r   )r   r   r   r   r   r<   r!   )r   r   s     r(   5test_as_safe_channel_does_not_suppress_nested_genexitr     s       
		M	*  6 	  	 Q 1 1 3 	  	 ))+	  	 	  	  	  	  	  	  	  	      s   'CC A5C B"A7
B"A;*A9
+
A;5C 7B"9A;;BBB	B"C BC "B4	(B+)B4	0C 7	C C	Cc                 "  K   ddt         dfd       } t        j                  t              5   |        4 d {   }|2 3 d {   } d d d       d {    d d d        y 7 )7  6 7 # 1 d {  7  sw Y   #xY w# 1 sw Y   y xY ww)Nc                    K   	 t        j                          d {    y 7 # t         j                  $ r t        d w xY wwrG   )r   r   r   r   r   r   r(   wait_then_raisez<test_as_safe_channel_genexit_filter.<locals>.wait_then_raise  s7     	'$$&&&~~ 	'$&	's#   A# !# A# >Ac                   K   t        j                         4 d {   } | j                         d  d d d       d {    y 7 +7 # 1 d {  7  sw Y   y xY wwrG   )r   r<   r=   )rA   r  s    r(   r   z1test_as_safe_channel_genexit_filter.<locals>.agen  sU     $$& 	 	'/	 	 	 	 	 	 	sC   A!AA!AA!A
A!
A!AAAA!rx   r   )r   r   r   r   r   r   r   r  s      @r(   #test_as_safe_channel_genexit_filterr    s     '  
 
		J	' 6 	 	Q  a	 	 	1	 	 	 	 s   -BBA&B A.A*A(
A*A.BA,B	B&B(A**A.,B.B 	4A75B 	<BBBc                 .  K   ddt         dfd       } t        j                  t              5   | t              4 d {   }|2 3 d {   } d d d       d {    d d d        t        j                  t
        t              5   | t
              4 d {   }|2 3 d {   } d d d       d {    d d d        y 7 7 x6 w7 k# 1 d {  7  sw Y   {xY w# 1 sw Y   xY w7 R7 I6 H7 <# 1 d {  7  sw Y   LxY w# 1 sw Y   y xY ww)Nc                ~   K   	 t        j                          d {    y 7 # t         j                  $ r | d w xY wwrG   )r   r   r   )exs    r(   r  zItest_as_safe_channel_swallowing_extra_exceptions.<locals>.wait_then_raise  s7     	$$&&&~~ 	$	s    =# !# =# :=c                  K   t        j                         4 d {   }|j                  |        |j                  t               d  d d d       d {    y 7 B7 # 1 d {  7  sw Y   y xY wwrG   )r   r<   r=   r   )r  rA   r  s     r(   r   z>test_as_safe_channel_swallowing_extra_exceptions.<locals>.agen  sg     $$& 	 	'3>	 	 	 	 	 	 	sD   A8AA8.A#A8A!A8!A8#A5)A,*A51A8)r  ra   r:   r;   )r  ra   r:   r   )r   r   r   r   r   r   r  s      @r(   0test_as_safe_channel_swallowing_extra_exceptionsr	    s       
		N	+ & 	 	!  a	 	
 
		J	7 
# 	 	q  a	 	 		1	 	 	 	 	1	 	 	 	 s  -DC CC CCC
CCC C	C "&DD	C,D	C4 C0$C.
%C0(C4*D	5C26D	:	DC CC	C C	CC	C  C)%D,D	.C00C42D	4D	:C=;D	D		DDc                   K   t         dd       }  |        4 d {   t        j                         4 d {   }dfd}|j                  |       t	        j
                  t        j                        5  2 3 d {   }
7 h7 M7 	6 	 d d d        n# 1 sw Y   nxY wd d d       d {  7   n# 1 d {  7  sw Y   nxY wd d d       d {  7   y # 1 d {  7  sw Y   y xY ww)Nc                   K   	 d  wrG   r   r   r   r(   r   z:test_as_safe_channel_close_between_iteration.<locals>.agen  s      s   
c                    K   t         j                  j                          d {     j                          d {    y 7 7 wrG   )r   r   r   r#   chans   r(   close_channelzCtest_as_safe_channel_close_between_iteration.<locals>.close_channel  s5     --**,,,++- -s   "AAAAAAr   rx   )r   r   r<   r=   r   r   r$   )r   rA   r  r   r  s       @r(   ,test_as_safe_channel_close_between_iterationr    s       v 	 	t002 	 	g	  	=)]]4334 	  a	 	4	 	 		 	 	 	 	 	 	 	 	 	s   C0BC0CBC;B48B;B?B	 BBC0C	BB	B4BB4"C-B0.C4C	:B=;C	C	C0CC0C-!C$"C-)C0c                 p  K   t         dd       }  |        4 d {   }|j                          d {    t        j                  t        j
                        5  |j                          d {    d d d        d d d       d {    y 7 q7 [7 !# 1 sw Y    xY w7 # 1 d {  7  sw Y   y xY ww)Nc                    K   t        d      w)Nzshould be unreachabler   r   r   r(   r   z9test_as_safe_channel_close_before_iteration.<locals>.agen  s     455r   r   )r   r#   r   r   r   r$   r!   )r   r  s     r(   +test_as_safe_channel_close_before_iterationr    s       v ! !kkm]]4334 	!,,.  	!! ! ! 	! 	!! ! ! !s~   B6BB6B!B'B!B/B0B4B!<B6BB6B!BB	B!B6!B3'B*(B3/B6c                 |  K   t         dfd       }  |        4 d {   t        j                  t        j                        5  2 3 d {   }
7 47 6 	 d d d        n# 1 sw Y   nxY wt        j
                  j                          d {  7   d d d       d {  7   y # 1 d {  7  sw Y   y xY ww)Nc                X   K   d   j                          d {    	 d  7 wrG   )r#   r  s   r(   r   z9test_as_safe_channel_close_during_iteration.<locals>.agen  s)     kkm  	s   *(*r   )r   r   r   r   r$   testingr
   )r   r   r  s     @r(   +test_as_safe_channel_close_during_iterationr    s       v 4 4]]4334 	  a44	 	 	 ll113334 4 4 4 4s   B<AB<$B'A"	AA
AA"B<AA"	B'"A+	'(B'BB'B< B#!B<'B9-B0.B95B<rx   )r.   ztrio.abc.Clockr:   r;   )r.   ztrio.testing.MockClockr:   r;   )2
__future__r   r   typingr   r   r   r   r   r   r  r	   r
   r   exceptiongroupr   collections.abcr   r)   r0   rD   rQ   re   rj   rm   ry   r   r   r   r   r   r   r   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 @g-.(V%&*+.7t7t6)**	"/5d'(T&(&+*+	+")4>"4=048 &2$	!4r   