
    #)f2                        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     U/var/www/html/flask-app/venv/lib/python3.12/site-packages/trio/_tests/test_channel.pytest_channelr"      s(    	y	! !C !	z)I	J  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   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 {    g }|2 3 d {   }|j                  |       7 o7 f7 '# 1 d {  7  sw Y   7xY w7 16 |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   appendsortlist)r1   r.   receive_channelnurseryr/   gotvalues          r!   test_channel_multiple_producersr?   @   s    + %8$<Q$?!L/  " & &g   	F 	F2Y F""8\-?-?-A1EF	F 	F * 	 	%JJu&	F 	F 	F 	F 	F
	? 	
d59o%%& & & & &s   2DB$DC=B& C=2B*5C= B(C=	CB?CC=$D&C=(C=*B<	0B31B<	8C=?C*C=+D6C97D=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)addr8   )r;   r/   r>   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]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   W   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rB   r   r   r   r   expects     r!   
send_blockz%test_close_basics.<locals>.send_blocko   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rB   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^   n   s    '1D	 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 !%a(FB  "  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rB   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rB   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      sm    '1D	 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   )r\   s   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   ro   r<   rj   r\   s       @@r!    test_close_multiple_send_handlesrq      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rB   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   rp   )	r   r   r   r   r6   r7   r	   r   r   )r   ru   rx   r<   rt   r]   s       @@r!   #test_close_multiple_receive_handlesry     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                 0  K   t        t           t        d            \  } }| 5  t        d      D ]  }| j	                  |        	 d d d        g }|2 3 d {   }|j                  |       # 1 sw Y   (xY w7 "6 |t        t        d            k(  sJ y w)Ninfr$   )r   r   floatr-   r   r8   r:   )r   r    r/   r=   s       r!   test_inf_capacityr}   %  s     s#E%L1DAq 
 r 	AMM!	 C  a

1 
1$uRy/!!!s@   !B"A-BA;A9A;B-A62B9A;;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    statsr\   r]   r<   s         r!   test_statisticsr   3  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rB   rw   )r    results    r!   
do_receivez)test_channel_fairness.<locals>.do_receives  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   e  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rB   )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rp   )r'   ztrio.abc.Clockr4   r5   )
__future__r   typingr   r   r   r   r   testingr   r	   r"   r)   r?   rK   r^   rc   rf   rq   ry   r}   r   r   r        r!   <module>r      s]    "    2 @(V%&.+.6r6r6)**"/5d'(Tr   