
    g2                        d dl mZ d dlmZ d dlZd dlZd dlmZmZ ddlm	Z	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y)    )annotations)UnionN)EndOfChannelopen_memory_channel   )assert_checkpointswait_all_tasks_blockedc                   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     K/var/www/html/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_553r)   8   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)N   r   )ranger   )send_channelijs      r!   producerz1test_channel_multiple_producers.<locals>.producerA   sr      	+ 	+1q5!q1u+. +"''***+	+ 	+ 	+*	+ 	+ 	+ 	+sT   A-AA--AAAA-AA-AA-A*A!A*&A-r   r$      )r.   trio.MemorySendChannel[int]r/   r   returnNone)	r   r   r   open_nurseryr-   
start_soonr   sortlist)r1   r.   receive_channelnurseryr/   valuegots          r!   test_channel_multiple_producersr>   @   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:   r/   r<   receivedsuccessful_receiverss      r!   consumerz1test_channel_multiple_consumers.<locals>.consumerY   s8     * 	# 	#% $$Q'OOE"	#?s   6424$646r      r$   )r:   trio.MemoryReceiveChannel[int]r/   r   r4   r5   )
setr   r6   r   r   r-   r7   r	   r   len)rF   r;   r.   r:   r/   rD   rE   s        @@r!   test_channel_multiple_consumersrK   U   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rA   r   r   r   r   expects     r!   
send_blockz%test_close_basics.<locals>.send_blockm   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rA   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]rP   ztype[BaseException]r4   r5   )r    rH   r4   r5   )r   r   r6   r7   r   r	   r   r   r   r   r   r   r   r   BrokenResourceErrorr   )rQ   r   r    r;   rW   _s2r2s          r!   test_close_basicsr^   l   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rA   rN   rO   s     r!   rQ   z#test_close_sync.<locals>.send_block   rR   rS   r   c                   K   t        j                  t        j                        5  | j	                          d {    d d d        y 7 # 1 sw Y   y xY wwrA   rU   rV   s    r!   rW   z&test_close_sync.<locals>.receive_block   rX   rY   rZ   )r    ztrio.MemoryReceiveChannel[None]r4   r5   )r   r   r6   r7   r   r	   closer   r   r   r   r   r   r   r[   )rQ   r   r    r;   rW   s        r!   test_close_syncrc      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   r[   )r   r    r]   r3s       r!   $test_receive_channel_clone_and_closerf      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     rn   r4   r5   )	r   r   r   r   r6   r7   r	   r   r   )r    rk   rp   r;   rj   ro   s       @@r!    test_close_multiple_send_handlesrr      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rA   rU   )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rm   r   )r]   s   r!   receive_will_succeedzAtest_close_multiple_receive_handles.<locals>.receive_will_succeed  s!     ZZ\!T)))!s   $"$rn   rq   )	r   r   r   r   r6   r7   r	   r   r   )r   rv   ry   r;   ru   r]   s       @@r!   #test_close_multiple_receive_handlesrz     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   floatr-   r   r9   )r   r   r/   r=   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   r6   r7   r   r	   cancel_scopecancelr   r   r   )r   r    statsro   r]   r;   s         r!   test_statisticsr   1  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                 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rA   rx   )r    results    r!   
do_receivez)test_channel_fairness.<locals>.do_receiveq  s     yy{""s   r,   )r    z%trio.MemoryReceiveChannel[int | None]r4   r5   )r   r   r   r   r   r   r6   r7   r	   r   r   r   r   r   )r   r    r   r;   r   s       @r!   test_channel_fairnessr   c  sF     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rA   )r   r   )r   vs     r!   do_sendz test_unbuffered.<locals>.do_send  s8     ! 	&&)OO	 		 	s    >202	>2;>)r   r3   r   r   r4   r5   )r   r   r   r   r   r   r   r   r6   r7   r   r   )r   r    r   r;   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rq   )r'   ztrio.abc.Clockr4   r5   )
__future__r   typingr   r   r   r   r   testingr   r	   r"   r)   r>   rK   r^   rc   rf   rr   rz   r~   r   r   r        r!   <module>r      s]    "    2 @(V%&*+.7t7t6)**	"/5d'(Tr   