
     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dS )    )annotations)UnionN)EndOfChannelopen_memory_channel   )assert_checkpointswait_all_tasks_blockedreturnNonec                 	  K   t          j        t                    5  t          d           d d d            n# 1 swxY w Y   t          j        t          d          5  t          d           d d d            n# 1 swxY w Y   t          t
          t          t          d f                  d          \  } }t          |            t          |           | 	                    d           t                      5  |                     d           d {V  d d d            n# 1 swxY w Y   t          j        t          j                  5  | 	                    d            d d d            n# 1 swxY w Y   t                      5  |                                 d {V dk    sJ 	 d d d            n# 1 swxY w Y   |                                dk    sJ t          j        t          j                  5  |                                 d d d            n# 1 swxY w Y   | 	                    d           |                                  d {V  t          j        t          j                  5  |                     d           d {V  d d d            n# 1 swxY w Y   t          j        t          j                  5  | 	                    d           d d d            n# 1 swxY w Y   t          j        t          j                  5  |                                  d d d            n# 1 swxY w Y   |                                  d {V  |                                dk    sJ t          j        t&                    5  |                                 d {V  d d d            n# 1 swxY w Y   |                                 d {V  t          j        t          j                  5  |                                 d {V  d d d            n# 1 swxY w Y   t          j        t          j                  5  |                                 d d d            n# 1 swxY w Y   |                                 d {V  d S )	Ng      ?z^max_buffer_size must be >= 0$)matchr      lastztoo late)pytestraises	TypeErrorr   
ValueErrorr   intstrreprsend_nowaitr   sendtrio
WouldBlockreceivereceive_nowaitacloseClosedResourceErrorcloner   )srs     [/var/www/api.educacionweb.es/myenv/lib/python3.11/site-packages/trio/_tests/test_channel.pytest_channelr$      s     	y	!	! ! !C   ! ! ! ! ! ! ! ! ! ! ! ! ! ! !	z)I	J	J	J    B                              uS#t^45a88DAqGGGGGGMM!			  ffQii              	t	'	'  	d               
		 & &YY[[      A%%%%%& & & & & & & & & & & & & & &""""	t	'	'  	               MM&
((**	t/	0	0 ! !ffZ         ! ! ! ! ! ! ! ! ! ! ! ! ! ! !	t/	0	0 " "	j!!!" " " " " " " " " " " " " " "	t/	0	0  				              
((**''''	|	$	$  iikk              
((**	t/	0	0  iikk              	t/	0	0  	              
((**s   8<<A::A>A>6DD"%D"E))E-0E-!F00F47F43HHH,JJJ=KK#&K#L))L-0L-N((N,/N,+PPP;QQ #Q autojump_clocktrio.abc.Clockc                  K   t          t                   d          \  }}t          j        d          5 }|                                 d {V  d d d            n# 1 swxY w Y   |j        sJ |                    d           d {V  d S )Nr   
   zTest for PR #553)r   r   r   move_on_afterr   cancelled_caughtr   )r%   r!   r"   timeout_scopes       r#   test_553r,   8   s      s#A&&DAq		B		 =iikk              ))))
&&#
$
$$$$$$$$$$s   AA"Ac                 *  K   dd} t          t                   d          \  }}t          j                    4 d {V }|4 d {V  t	          d	          D ]+}|                    | |                                |           ,	 d d d           d {V  n# 1 d {V swxY w Y   d
 |2              d {V }|                                 |t          t	          d                    k    sJ 	 d d d           d {V  d S # 1 d {V swxY w Y   d S )Nsend_channeltrio.MemorySendChannel[int]ir   r
   r   c                   K   | 4 d {V  t          d|z  d|dz   z            D ]}|                     |           d {V  	 d d d           d {V  d S # 1 d {V swxY w Y   d S )N   r   )ranger   )r.   r0   js      r#   producerz1test_channel_multiple_producers.<locals>.producerA   s      	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+1q5!q1u+.. + +"''**********+	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   8A
A!$A!r   r(   c                "   K   g | 3 d {V }|
6 S N ).0values     r#   
<listcomp>z3test_channel_multiple_producers.<locals>.<listcomp>O   s.      88888888uu8888      )r.   r/   r0   r   r
   r   )	r   r   r   open_nurseryr3   
start_soonr    sortlist)r5   r.   receive_channelnurseryr0   gots         r#   test_channel_multiple_producersrE   @   so     + + + + %8$<Q$?$?!L/ "" 
& 
& 
& 
& 
& 
& 
&g   	F 	F 	F 	F 	F 	F 	F 	F2YY F F""8\-?-?-A-A1EEEEF	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 98888888888


d599oo%%%%%
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
&s6   	D<BD
B	D"B	#AD
DDc                   K   t                      g dfd} t          j                    4 d {V }t          j        t                   d          \  }}|4 d {V  t          d	          D ]}|                    | ||           t                       d {V  t          d
          D ]}|                    |           d {V  	 d d d           d {V  n# 1 d {V swxY w Y   d d d           d {V  n# 1 d {V swxY w Y   t          t          d	                    k    sJ t                    d
k    sJ t                    t          t          d
                    k    sJ d S )NrB   trio.MemoryReceiveChannel[int]r0   r   r
   r   c                v   K   | 2 3 d {V }                     |                               |           26 d S r7   )addappend)rB   r0   r:   receivedsuccessful_receiverss      r#   consumerz1test_channel_multiple_consumers.<locals>.consumerY   sa      * 	# 	# 	# 	# 	# 	# 	#% $$Q'''OOE"""" +??s   8r      r(   )rB   rG   r0   r   r
   r   )
setr   r>   r   r   r3   r?   r	   r   len)rM   rC   r.   rB   r0   rK   rL   s        @@r#   test_channel_multiple_consumersrQ   U   s     55H# # # # # # #
  "" + + + + + + +g(,(@(Ea(H(H%o 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+1XX A A""8_a@@@@(*********2YY + +"''**********+		+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	++ + + + + + + + + + + + + + + + + + + + + + + + + + +  3uQxx==0000x==Bx==Cb		NN******s6   +D A+CD
C(	(D+C(	,D
DDc                   K   dd} t          d          d          \  }}t          j                    4 d {V }|                    | |t          j                   t                       d {V  |                                 d {V  d d d           d {V  n# 1 d {V swxY w Y   t          j        t          j                  5  |	                    d            d d d            n# 1 swxY w Y   t          j        t          j                  5  |
                    d            d {V  d d d            n# 1 swxY w Y   t          j        t                    5  |                                 d d d            n# 1 swxY w Y   t          j        t                    5  |                                 d {V  d d d            n# 1 swxY w Y   t          d          d          \  }}t          j                    4 d {V }|                    | |t          j                   t                       d {V  |                                 d {V  d d d           d {V  n# 1 d {V swxY w Y   t          j        t          j                  5  |	                    d            d d d            n# 1 swxY w Y   t          j        t          j                  5  |
                    d            d {V  d d d            n# 1 swxY w Y   dd}t          t                   d          \  }}t          j                    4 d {V }|                    ||           t                       d {V  |                                 d {V  d d d           d {V  n# 1 d {V swxY w Y   t          j        t          j                  5  |                                 d d d            n# 1 swxY w Y   t          j        t          j                  5  |                                 d {V  d d d            d S # 1 swxY w Y   d S )Nr!   trio.MemorySendChannel[None]expecttype[BaseException]r
   r   c                   K   t          j        |          5  |                     d            d {V  d d d            d S # 1 swxY w Y   d S r7   r   r   r   r!   rT   s     r#   
send_blockz%test_close_basics.<locals>.send_blockm          ]6"" 	 	&&,,	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   A  AAr   r"   rG   c                   K   t          j        t          j                  5  |                                  d {V  d d d            d S # 1 swxY w Y   d S r7   r   r   r   r   r   r"   s    r#   receive_blockz(test_close_basics.<locals>.receive_block         ]4344 	 	))++	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   A		AAr!   rS   rT   rU   r
   r   )r"   rG   r
   r   )r   r   r>   r?   r   r	   r   r   r   r   r   r   r   r   BrokenResourceErrorr   )rY   r!   r"   rC   r_   s2r2s          r#   test_close_basicsrf   l   s         t$Q''DAq ""       g:q$*BCCC$&&&&&&&&&hhjj                           
t/	0	0  	d              	t/	0	0  ffTll               
|	$	$  	              	|	$	$  iikk               t$Q''DAq ""       g:q$*BCCC$&&&&&&&&&hhjj                           
t/	0	0  	d              	t/	0	0  ffTll                  !%a((FB ""       g="---$&&&&&&&&&iikk                           
t/	0	0  
              	t/	0	0  jjll                 s   AB
B$'B$	C++C/2C/D<<E E  FFF%GGGAI**
I47I4J;;J?J?$LLLAN((
N25N2O88O<?O<!Q		QQc                 ~  K   dd} t          d          d          \  }}t          j                    4 d {V }|                    | |t          j                   t                       d {V  |                                 d d d           d {V  n# 1 d {V swxY w Y   t          j        t          j                  5  |	                    d            d d d            n# 1 swxY w Y   t          j        t          j                  5  |
                    d            d {V  d d d            n# 1 swxY w Y   t          j        t                    5  |                                 d d d            n# 1 swxY w Y   t          j        t                    5  |                                 d {V  d d d            n# 1 swxY w Y   t          d          d          \  }}t          j                    4 d {V }|                    | |t          j                   t                       d {V  |                                 d d d           d {V  n# 1 d {V swxY w Y   t          j        t          j                  5  |	                    d            d d d            n# 1 swxY w Y   t          j        t          j                  5  |
                    d            d {V  d d d            n# 1 swxY w Y   dd}t          d          d          \  }}t          j                    4 d {V }|                    ||           t                       d {V  |                                 d d d           d {V  n# 1 d {V swxY w Y   t          j        t          j                  5  |                                 d d d            n# 1 swxY w Y   t          j        t          j                  5  |                                 d {V  d d d            d S # 1 swxY w Y   d S )Nr!   rS   rT   rU   r
   r   c                   K   t          j        |          5  |                     d            d {V  d d d            d S # 1 swxY w Y   d S r7   rW   rX   s     r#   rY   z#test_close_sync.<locals>.send_block   rZ   r[   r   r"   trio.MemoryReceiveChannel[None]c                   K   t          j        t          j                  5  |                                  d {V  d d d            d S # 1 swxY w Y   d S r7   r]   r^   s    r#   r_   z&test_close_sync.<locals>.receive_block   r`   ra   rb   )r"   ri   r
   r   )r   r   r>   r?   r   r	   closer   r   r   r   r   r   r   rc   )rY   r!   r"   rC   r_   s        r#   test_close_syncrl      s         t$Q''DAq ""       g:q$*BCCC$&&&&&&&&&				                           
t/	0	0  	d              	t/	0	0  ffTll               
|	$	$  	              	|	$	$  iikk               t$Q''DAq ""       g:q$*BCCC$&&&&&&&&&				                           
t/	0	0  	d              	t/	0	0  ffTll                  t$Q''DAq ""       g=!,,,$&&&&&&&&&				                           
t/	0	0  	              	t/	0	0  iikk                 s   A
B
B!BC%%C),C)D66D:=D:E;;E?E?GG
G
A
I
I(+I(J//J36J3L  LL ?N
NN O!!O%(O%
P22P69P6c                 <  K   t          d          d          \  } }|                                }|                                }|                     d            |                                 d {V  |5  	 d d d            n# 1 swxY w Y   t	          j        t          j                  5  |                                 d d d            n# 1 swxY w Y   t	          j        t          j                  5  |                                 d d d            n# 1 swxY w Y   |                     d            |                                 d {V  t	          j        t          j                  5  |                     d            d d d            d S # 1 swxY w Y   d S )Nr(   )	r   r    r   r   r   r   r   r   rc   )r!   r"   re   r3s       r#   $test_receive_channel_clone_and_closero      ss     t$R((DAq	
B	
BMM$
((**	                 
t/	0	0  				               
t/	0	0  



               MM$
))++ 
t/	0	0  	d                 sH   4BB	B+CCC5DDD.FFFc                   K   t          t                   d          \  }                                 dfd}dfd}t          j                    4 d {V }|                    |           |                    |           t                       d {V                                   d {V  |                                  d {V dk    sJ 	 d d d           d {V  d S # 1 d {V swxY w Y   d S )Nr   r
   r   c                    K   t          j        t          j                  5                       d           d {V  d d d            d S # 1 swxY w Y   d S )Nnope)r   r   r   r   r   )s1s   r#   send_will_closez9test_close_multiple_send_handles.<locals>.send_will_close   s      ]4344 	" 	"''&//!!!!!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s   AAAc                 B   K                         d           d {V  d S Nok)r   )rd   s   r#   send_will_succeedz;test_close_multiple_send_handles.<locals>.send_will_succeed  s/      ggdmm    rw   r
   r   )	r   r   r    r   r>   r?   r	   r   r   )r"   rt   rx   rC   rs   rd   s       @@r#    test_close_multiple_send_handlesr{      s       $Q''EB	B" " " " " "       "" ) ) ) ) ) ) )g?+++,---$&&&&&&&&&iikkYY[[      D((((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )s   A9C((
C25C2c                   K   t          t                   d          \  }                                 dfd}dfd}t          j                    4 d {V }|                    |           |                    |           t                       d {V                                   d {V  |                     d           d {V  d d d           d {V  d S # 1 d {V swxY w Y   d S )Nr   r
   r   c                    K   t          j        t          j                  5                                    d {V  d d d            d S # 1 swxY w Y   d S r7   r]   )r1s   r#   receive_will_closez?test_close_multiple_receive_handles.<locals>.receive_will_close  s      ]4344 	 	**,,	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A

AAc                 L   K                                      d {V dk    sJ d S rv   r   )re   s   r#   receive_will_succeedzAtest_close_multiple_receive_handles.<locals>.receive_will_succeed  s8      ZZ\\!!!!!!T))))))ry   rw   rz   )	r   r   r    r   r>   r?   r	   r   r   )r!   r   r   rC   r~   re   s       @@r#   #test_close_multiple_receive_handlesr     s       $Q''EAr	B     * * * * * *  ""       g-.../000$&&&&&&&&&iikkffTll                             s   A4C""
C,/C,c                 J  K   t          t                   t          d                    \  } }| 5  t          d          D ]}|                     |           	 d d d            n# 1 swxY w Y   d |2              d {V }|t          t          d                    k    sJ d S )Ninfr(   c                "   K   g | 3 d {V }|
6 S r7   r8   )r9   r0   s     r#   r;   z%test_inf_capacity.<locals>.<listcomp>+  s.      
$
$
$
$
$
$
$
$q1
$
$
$
$r<   )r   r   floatr3   r   rA   )r   r   r0   rD   s       r#   test_inf_capacityr   #  s      ',U5\\::MD' 
    r 	  	 AQ	                               %
$G
$
$
$
$
$
$
$
$
$C$uRyy//!!!!!!s   (A$$A(+A(c                 n  K   t          d          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k    sJ |                     d            |                                 j        dk    sJ | 	                                }|                                 j        dk    sJ | 
                                 d {V  |                                j        dk    sJ |	                                }|                                j        dk    sJ |
                                 d {V  |                                j        dk    sJ t          j                    4 d {V }|                    d            |                                 j        dk    sJ |                    |j        d            |                    |j        d            t                       d {V  |                                 j        dk    sJ |j                                         d d d           d {V  n# 1 d {V swxY w Y   |                                 j        dk    sJ 	 	 |                                 # t          j        $ r Y nw xY wt          j                    4 d {V }|                    |j                   t                       d {V  |                                 j        dk    sJ |j                                         d d d           d {V  n# 1 d {V swxY w Y   |                                 j        dk    sJ d S )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"   statsrd   re   rC   s         r#   test_statisticsr   /  s     t$Q''DAq<<>>Q\\^^++++LLNNE$)))) A%%%%#q((((&!++++#q((((&!++++MM$<<>>-2222	
B<<>>,1111
((**==??-2222	
B==??0A5555
))++==??0A5555 "" & & & & & & &g
t||~~1Q666627D)))27D)))$&&&&&&&&&||~~0A5555##%%%& & & & & & & & & & & & & & & & & & & & & & & & & & & <<>>,1111		?     "" & & & & & & &g19%%%$&&&&&&&&&||~~3q8888##%%%	& & & & & & & & & & & & & & & & & & & & & & & & & & &
 <<>>/1444444s8   B7J
J!$J!K K0/K0A'N
NNc                   K   t          t          t          d f                  d          \  } }|                     d           |                                dk    sJ |                     d           |                                dk    sJ d d	fd}t          j                    4 d {V }|                    ||           t                       d {V  |                     d           t          j
        t
          j                  5  |                                 d d d            n# 1 swxY w Y   d d d           d {V  n# 1 d {V swxY w Y   dk    sJ t          t          t          d f                  d          \  } }|                     d           t          j
        t
          j                  5  |                     d            d d d            n# 1 swxY w Y   t          j                    4 d {V }|                    | j        d           t                       d {V  |                                dk    sJ t          j
        t
          j                  5  |                     d           d d d            n# 1 swxY w Y   |                                 d {V dk    sJ 	 d d d           d {V  d S # 1 d {V swxY w Y   d S )
Nr   r   r"   %trio.MemoryReceiveChannel[int | None]r
   r   c                @   K   |                                   d {V d S r7   r   )r"   results    r#   
do_receivez)test_channel_fairness.<locals>.do_receiveo  s*      yy{{""""""ry   r2   )r"   r   r
   r   )r   r   r   r   r   r   r>   r?   r	   r   r   r   r   r   )r!   r"   r   rC   r   s       @r#   test_channel_fairnessr   a  s      uS$Y/033DAqMM!""""MM!""""
 F# # # # # #  ""       g:q)))$&&&&&&&&&	a]4?++ 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 		                           Q;;;;
 uS$Y/033DAqMM!	t	'	'  	d               "" ( ( ( ( ( ( (g161%%%$&&&&&&&&&!!Q&&&&]4?++ 	 	MM!	 	 	 	 	 	 	 	 	 	 	 	 	 	 	iikk!!!!!!a'''''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   -AE	D, E	,D0	0E	3D0	4E		
EE?G!!G%(G%A(K-JKJ	KJ	#K
KKc                 B  K   t          t                   d          \  } }t          j        t          j                  5  |                                 d d d            n# 1 swxY w Y   t          j        t          j                  5  |                     d           d d d            n# 1 swxY w Y   d
d	}t	          j                    4 d {V }|	                    || d           t                      5  |                                 d {V dk    sJ 	 d d d            n# 1 swxY w Y   d d d           d {V  n# 1 d {V swxY w Y   t          j        t          j                  5  |                                 d d d            d S # 1 swxY w Y   d S )Nr   r   r!   r/   vr   r
   r   c                   K   t                      5  |                     |           d {V  d d d            d S # 1 swxY w Y   d S r7   )r   r   )r!   r   s     r#   do_sendz test_unbuffered.<locals>.do_send  s      !! 	 	&&))OOOOOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   :>>)r!   r/   r   r   r
   r   )r   r   r   r   r   r   r   r   r>   r?   r   r   )r!   r"   r   rC   s       r#   test_unbufferedr     s     s#A&&DAq	t	'	'  	              	t	'	'  	a                   "" * * * * * * *g7Aq)))!! 	* 	*$$$$$$)))))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	** * * * * * * * * * * * * * * * * * * * * * * * * * * 
t	'	'  	                 sk   AA#&A#B**B.1B.&E8!D&E&D*	*E-D*	.E
EE2FFFrz   )r%   r&   r
   r   )
__future__r   typingr   r   r   r   r   testingr   r	   r$   r,   rE   rQ   rf   rl   ro   r{   r   r   r   r   r   r8   ry   r#   <module>r      s~   " " " " " "         2 2 2 2 2 2 2 2 @ @ @ @ @ @ @ @( ( ( (V% % % %& & & &*+ + + +.6 6 6 6r6 6 6 6r   6) ) ) )*   *	" 	" 	" 	"/5 /5 /5 /5d'( '( '( '(T     ry   