
    #)fX                       U 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	m
Z
mZmZmZmZ ddlmZmZ ddlmZmZmZmZmZ ddlmZ d	d
lmZ erd dlmZ d dlmZm Z   ed      Z!ejD                  dk  rd dl#m$Z$  ede      Z% ede      Z&e
g e	ee%e&f      f   Z'de(d<    G d dee%e&f         Z)e	 d	 	 	 	 	 dd       Z*	 	 	 	 	 	 ddZ+	 	 	 	 	 	 ddZ,	 	 	 	 	 	 ddZ-y)     )annotationsN)contextmanagersuppress)TYPE_CHECKING	AwaitableCallable	GeneratorGenericTupleTypeVar   )CancelScope_core)AsyncResourceHalfCloseableStreamReceiveStream
SendStreamStream)aclose_forcefully   )assert_checkpoints)TracebackType)	ParamSpec	TypeAliasArgsT)      )BaseExceptionGroupRes1)boundRes2r   StreamMakerc                  4    e Zd ZddZddZ	 	 	 	 	 	 	 	 ddZy)_ForceCloseBothc                "    |\  | _         | _        y N_first_second)selfboths     X/var/www/html/flask-app/venv/lib/python3.12/site-packages/trio/testing/_check_streams.py__init__z_ForceCloseBoth.__init__&   s    $(!T\    c                :   K   | j                   | j                  fS wr&   r'   )r*   s    r,   
__aenter__z_ForceCloseBoth.__aenter__)   s     {{DLL((s   c                   K   	 t        | j                         d {    t        | j                         d {    y 7 "7 # t        | j                         d {  7   w xY wwr&   )r   r(   r)   )r*   exc_type	exc_value	tracebacks       r,   	__aexit__z_ForceCloseBoth.__aexit__,   sK     	2#DKK000#DLL111 11#DLL111sE   A&A ?A A&AA&A A&A#AA##A&N)r+   tuple[Res1, Res2]returnNone)r7   r6   )r2   ztype[BaseException] | Noner3   zBaseException | Noner4   zTracebackType | Noner7   r8   )__name__
__module____qualname__r-   r0   r5    r.   r,   r$   r$   %   s7    ))	2,	2 (	2 (		2
 
	2r.   r$   c              #     K   d}	 d  t        d|        # t        $ rH}|sJ d       t        |j                        dk(  sJ t	        |j                  d   |       sJ Y d }~y d }~w| $ r |rJ d       Y y w xY ww)NTzexpected exception: z:caught exceptiongroup, but expected an unwrapped exceptionr   r   z0caught exception, but expected an exceptiongroup)AssertionErrorr   len
exceptions
isinstance)expected_excwrapped__tracebackhide__excs       r,   _assert_raisesrF   :   s      
D 3L>BCC  ;TTT3>>"a''#..+\::: ONNN7Os6   A; A;	A8>A$A;$A85A;7A88A;c           	     >)  K   t         |         d{         4 d{   \  t        t              sJ t        t              sJ d"fdd#d$fdd%fdd&dt	        j
                         4 d{   }|j                  d       |j                  d       ddd      d{    d'fd}t	        j
                         4 d{   }|j                  |       |j                  d       ddd      d{    t	        j
                         4 d{   }|j                  t        d	             |j                  d	       ddd      d{    t	        j
                         4 d{   }|j                  t        d
             |j                  d
       ddd      d{    t        t              5  j                  d       d{    ddd       t        t              5  j                  d       d{    ddd       t        t              5  j                  d       d{    ddd       t	        j
                         4 d{   }|j                  d                d{   dk(  sJ ddd      d{    t	        j
                         4 d{   }|j                  d        d       d{   dk(  sJ ddd      d{    t        t        j                  d      5  t	        j
                         4 d{   }|j                  d       |j                  d       ddd      d{    ddd       	 	 	 	 d(fd}t	        j
                         4 d{   }|j                  ||j                         |j                  d       ddd      d{    d'fd}t	        j
                         4 d{   }|j                  |       |j                         ddd      d{    t        t        j                        5   d       d{    ddd       t        t        j                         5   d       d{    ddd               d{            d{            d{    t        t        j                         5   d       d{    ddd       t        t        j                         5   d       d{    ddd       t        t        j                         5  t#               5  j%                          d{    ddd       ddd               d{            d{    ddd      d{    t         |         d{         4 d{   \  d'fd}d'fd}t	        j
                         4 d{   }|j                  |       |j                  |       ddd      d{    ddd      d{    t         |         d{         4 d{   \  t'               d{    t        t        j                        5  	  d       d{    7 7 v7 7 # 1 d{  7  sw Y   xY w7 7 # 1 d{  7  sw Y   xY w7 7 u# 1 d{  7  sw Y   xY w7 q7 7# 1 d{  7  sw Y   HxY w7 '# 1 sw Y   'xY w7 # 1 sw Y   xY w7 # 1 sw Y   xY w7 7 7 # 1 d{  7  sw Y   xY w7 7 }7 k# 1 d{  7  sw Y   |xY w7 K7 # 1 d{  7  sw Y   +xY w# 1 sw Y   0xY w7 7 # 1 d{  7  sw Y   xY w7 7 # 1 d{  7  sw Y   xY w7 # 1 sw Y   xY w7 i# 1 sw Y   ixY w7 a7 T7 G7  # 1 sw Y    xY w7 # 1 sw Y   xY w7 # 1 sw Y   xY w# 1 sw Y   xY w7 7 7 # 1 d{  7  sw Y   xY w7 7 7 z7 K# 1 d{  7  sw Y   \xY w7 T# 1 d{  7  sw Y   exY w7 Y7 O7 <7 # 1 sw Y   nxY wt        t        j                         5   d       d{  7   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t         |         d{  7        4 d{  7  \  t'               d{  7   t        t        j                         5   d       d{  7   ddd       n# 1 sw Y   nxY wt)        t        j                        5   d       d{  7   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t         |         d{  7        4 d{  7  \  t	        j*                         5 }|j-                          j/                          d{  7   ddd       n# 1 sw Y   nxY wt	        j*                         5 }|j-                          j/                          d{  7   ddd       n# 1 sw Y   nxY wt        t        j                         5   d       d{  7   ddd       n# 1 sw Y   nxY wt        t        j                         5   d       d{  7   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t         |         d{  7        4 d{  7  \  	 	 	 	 	 	 	 	 d)d}	t	        j*                         5 }|j-                          t	        j
                         4 d{  7  }|j                  |	d       |j                  |	d       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
                         4 d{  7  }|j                         |j                         ddd      d{  7   n# 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t         |         d{  7        4 d{  7  \  fd}
t	        j
                         4 d{  7  }|j                  |
       t	        j0                          d{  7   t'               d{  7   ddd      d{  7   n# 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|t         |        d{  7        4 d{  7  \  g d*fd}d'fd}t	        j
                         4 d{  7  }|j                  ||j                         t	        j0                          d{  7   |j                  |       ddd      d{  7   n# 1 d{  7  sw Y   nxY wg dk(  sJ ddd      d{  7   n# 1 d{  7  sw Y   nxY wt         |        d{  7        4 d{  7  \  t        t        j                  d      5  t	        j
                         4 d{  7  }|j                  j$                         |j                  j$                         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        t        j                  d      5  t	        j
                         4 d{  7  }|j                  j$                         |j                  j2                  d       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      d{  7   n# 1 d{  7  sw Y   nxY wt         |        d{  7        4 d{  7  \  t        t        j                  d      5  t	        j
                         4 d{  7  }|j                  j2                  d       |j                  j2                  d       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      d{  7   n# 1 d{  7  sw Y   nxY wt         |        d{  7        4 d{  7  \  d'fd}d'fd}t	        j
                         4 d{  7  }|j                  |       |j                  |       ddd      d{  7   n# 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t         |        d{  7        4 d{  7  \  t'               d{  7   	 t#               5  j%                          d{  7   ddd       n# 1 sw Y   nxY wn# t        j                  $ r Y nw xY wddd      d{  7   n# 1 d{  7  sw Y   nxY wd+d }t         |        d{  7        4 d{  7  \  t	        j
                         4 d{  7  }|j                  |       t        t        j                         5  j3                  d!       d{  7   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   n# 1 d{  7  sw Y   nxY wt         |        d{  7        4 d{  7  \  t	        j
                         4 d{  7  }|j                  |       t        t        j                         5  j%                          d{  7   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yw),a  Perform a number of generic tests on a custom one-way stream
    implementation.

    Args:
      stream_maker: An async (!) function which returns a connected
          (:class:`~trio.abc.SendStream`, :class:`~trio.abc.ReceiveStream`)
          pair.
      clogged_stream_maker: Either None, or an async function similar to
          stream_maker, but with the extra property that the returned stream
          is in a state where ``send_all`` and
          ``wait_send_all_might_not_block`` will block until ``receive_some``
          has been called. This allows for more thorough testing of some edge
          cases, especially around ``wait_send_all_might_not_block``.

    Raises:
      AssertionError: if a test fails.

    Nc                   K   t               5  j                  |        d {   J 	 d d d        y 7 # 1 sw Y   y xY wwr&   )r   send_all)datass    r,   do_send_allz)check_one_way_stream.<locals>.do_send_allf   sB     #% 6ZZ--5556 6-6 6s#   A646	A6?Ac                   K   t               5  j                  |        d {   cd d d        S 7 # 1 sw Y   y xY wwr&   )r   receive_some)	max_bytesrs    r,   do_receive_somez-check_one_way_stream.<locals>.do_receive_somej   s9     #% 7^^I667 767 7s    ?313
?3<?c                <   K    d       d {   | k(  sJ y 7 
wNr   r<   )expectedrQ   s    r,   checked_receive_1z/check_one_way_stream.<locals>.checked_receive_1n   s      (++x777+s   c                ~   K   t               5  | j                          d {    d d d        y 7 # 1 sw Y   y xY wwr&   )r   aclose)resources    r,   	do_aclosez'check_one_way_stream.<locals>.do_acloseq   s9     #% (oo'''( ('( (s    =1/1	=1:=   xc                 V   K     d       d {      d       d {    y 7 7 w)Nr.      yr<   rL   s   r,   send_empty_then_yz/check_one_way_stream.<locals>.send_empty_then_yz   s.      c"""d### ##   )%)'))r\      1   2r   g      ?TrC   r   c                   K   t               5  j                          d {    d d d        | j                          y 7 # 1 sw Y   xY wwr&   )r   wait_send_all_might_not_blockcancel)scoperK   s    r,   *simple_check_wait_send_all_might_not_blockzHcheck_one_way_stream.<locals>.simple_check_wait_send_all_might_not_block   sD      $% 8557778LLN 88 8s+   AAA AA AAAc                    K   t        t        j                        5  	   d       d {    7 # 1 sw Y   y xY ww)Nd   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)rF   r   BrokenResourceErrorr]   s   r,   expect_broken_stream_on_sendz:check_one_way_stream.<locals>.expect_broken_stream_on_send   s>      9 9: 2%j111 12 2s   >202;>rj   i   r.   c                 V   K    d       d {             d {    y 7 7 w)Nr\   r<   )rY   rL   rK   s   r,   send_then_closez-check_one_way_stream.<locals>.send_then_close   s+     d###A, $r_   c                    K   t        j                          d {      d       d {      d       d {            d {    y 7 57 '7 7 w)Nr\   r.   )r   wait_all_tasks_blocked)rU   rY   rP   s   r,   receive_send_then_closez5check_one_way_stream.<locals>.receive_send_then_close   sU     
 ..000#D)))#C(((A, 1)(sA   AAAAAAAAAAAAs   123c                   K   t        t        j                        5   | |i | d {    d d d        y 7 # 1 sw Y   y xY wwr&   )rF   r   	Cancelled)afnargskwargss      r,   expect_cancelledz.check_one_way_stream.<locals>.expect_cancelled%  sD     
  0 +4*6***+ +*+ +s$   A868	A8AAc                    K   t        t        j                        5   j                  d       d {    d d d        y 7 # 1 sw Y   y xY ww)N
   )rF   r   ClosedResourceErrorrN   rP   s   r,   receive_expecting_closedz6check_one_way_stream.<locals>.receive_expecting_closed;  sD      9 9: )nnR((() )() )s+   AAA A	A AAAc                   K   j                  d       t               5  j                          d {    d d d        j                  d       | j                          y 7 .# 1 sw Y   -xY ww)Nwaiter sleepingwaiter wokeup)appendr   re   rf   )cancel_scoperecordrK   s    r,   waiterz$check_one_way_stream.<locals>.waiterI  s^     /0') <99;;;<o.##% << <s+   A0A$A"A$*A0"A$$A-)A0c                    K   t        j                          d {    j                  d       	  j                  d       d {    7 07 w)Nreceiver startingiA  )r   rp   r   rN   )rP   r   s   r,   receiverz&check_one_way_stream.<locals>.receiverP  sK     2244412..///  5 0s!   AA*AAAA)r~   r   r   c                    K   	 t               5   j                          d {    d d d        y 7 # 1 sw Y   y xY w# t        j                  $ r Y y w xY wwr&   )r   re   r   rk   rK   s   r,   senderz$check_one_way_stream.<locals>.sender~  s]     +- @==???@ @?@ @00 sJ   A
? 313? A3<? A? AAAAc                 t   K   t        j                          d {    t                d {    y 7 7 wr&   r   rp   r   r{   s   r,   r   z&check_one_way_stream.<locals>.receiver  s0     22444'*** 5*s   848688c                r   K   t        j                          d {    t        |        d {    y 7 7 wr&   r   r   s    r,   
close_soonz(check_one_way_stream.<locals>.close_soon  s/     ..000#A&&& 1&s   737577s   xyzzy)rJ   bytes | bytearray | memoryviewr7   r8   r&   )rO   z
int | Noner7   bytes | bytearray)rT   bytesr7   r8   )rX   r   r7   r8   r7   r8   )rg   r   r7   r8   )rt   z"Callable[ArgsT, Awaitable[object]]ru   z
ArgsT.argsrv   zArgsT.kwargsr7   r8   )r   r   r7   r8   )rK   r   r7   r8   )r$   rA   r   r   r   open_nursery
start_soon	bytearray
memoryviewrF   
ValueErrorrN   	TypeErrorBusyResourceErrorr   rk   rz   r   re   r   r   r   rf   rW   rp   rI   )stream_makerclogged_stream_makernurseryr^   rh   rl   rn   rq   rg   rw   r|   r   r   r   r   rU   rY   rQ   rL   rP   r   rK   s                  @@@@@@@r,   check_one_way_streamr   L   s9    , \^34 | |A!Z((!]++	6	7	8	(
 %%' 	8 	87{D10$7	8 	8	$ %%' 	8 	87010$7	8 	8 %%' 	8 	87{IdO<0$7	8 	8 %%' 	8 	87{Jt,<=0$7	8 	8
 J' 	%..$$$	%J' 	$..###	$I& 	&..%%%	& %%' 	3 	37{D1(**d22	3 	3 %%' 	7 	77{D1(..$66	7 	7 E33TB 	7))+ 7 7w""?A6""?A67 7	7			 %%' 	3 	37:G<P<P 2		3 	3	2
 %%' 	- 	-7;<y!,	- 	-
 E556 	*j)))	* E556 	(!$'''	( ll l E556 	*j)))	* E556 	#c"""	# E556 	8#% 8557778	8
 lly| || \^34 8 8A		 %%' 	8 	87/67	8 	8!8 8( \^34 ( (A"""E556 	.!*--- m  4 |(	8 	8 	8 	8 	8	8 	8 	8 	8 	8	8 	8 	8 	8 	8	8 	8 	8 	8 	8 %	% 	% $	$ 	$ &	& 	&	3*	3 	3 	3 	3	7.	7 	7 	7 	7
7 7 7 7 7	7 	7"	3 	3 	3 	3 	3	- 	- 	- 	- 	- *	* 	*
 (	( 	( 	 	 *	* 	*
 #	# 	# 88 8	8 	8
 	y| | | ||  4 8 	8 	8 	8 	8 	8!8 8 8 8(  4 (" .	. 	. E556 	(!$'''	( 	( 	(( ( ( ( ( \^334 
) 
)A"""E556 	&f%%%	& 	& 	& e//0 	)#C(((	) 	) 	)
) 
) 
) 
) 
) \^334 ( (A  	ELLN((*	 	 	   	ELLN((*	 	 	 E556 	&f%%%	& 	& 	& E556 	(!$'''	( 	( 	(( ( ( ( (0 \^334 - -A	+3	+	+ #	+ 		+   	IELLN))+ I Iw""#3[$G""#3_aHI I I I I	I 	I 	I %%' 	- 	-7y!,y!,	- 	- 	- 	- 	-!- - - - -, \^334 	' 	'A	) %%' 	' 	'778..000#A&&&	' 	' 	' 	' 	'	' 	' 	' 	' 	' '")=)?#?#?@ 	 	FQ "F&0 ))+ - -w""67+?+?@22444""8,- - - - -
    -	 	 	 	 	8 #)=)?#?#?@ 	; 	;FQ 7 7F H --/ H H7&&q'F'FG&&q'F'FGH H H H HH H H   7 7F ; --/ ; ;7&&q'F'FG&&qzz6:; ; ; ; ;; ; ;	; 	; 	; 	; 	;  #)=)?#?#?@ 	; 	;FQ   7 7F ; --/ ; ;7&&qzz6:&&qzz6:; ; ; ; ;; ; ;	; 	; 	; 	; 	; #)=)?#?#?@ 	- 	-FQ+ ))+ - -w""6*""8,- - - - -	- 	- 	- 	- 	-$ #)=)?#?#?@ 	 	FQ#A&&&') <99;;;< < <,, 	 	 	 	 		' #)=)?#?#?@ 	/ 	/FQ))+ / /w"":q1#E$=$=> /**X.../ / // / / / /	/ 	/ 	/ 	/ 	/ #)=)?#?#?@ 	< 	<FQ))+ < <w"":q1#E$=$=> <99;;;< < << < < < <	< 	< 	< 	< 	<{ (s  ARZARZARAaZa%Z%*a5Z"6"aZ;a$[ aZ>a([)a,.[a%[&a[3a.[94a?[6 a\(\)\-a\"\\"a5\2
\/\2 a/\?0a3]]	]a%]&a]a]'$]!%	]'.a9]$:a^2]=
3^6%^^&^ '^+*a^&a/^,a^)"a6_7a:$_a)_*a_!__!!a9_1_._1
a_>a-`.a=`>a`
'`(`
,!a```!a?`7
`*`'
`*#`7+a>a?aaaARa
AR2a#3AR?a& AR,b/a)0b3#a/b!a,"b&AR1b2ARbARb!ARd(b$)db*b'b*ARARa"a%Z8	+Z.,Z8	3	a>a[	[
[		aa[0	#[&$[0	+	a6a9\	?\ \	a\\	a\""\,	'a/\22\<	7	a]a]	]]		a!]'$a']:	-]0.]:	5a=^ ^^	^
^^^#		a)a,^?	2^53^?	:	aa_	__	a_!!_+	&a._11_;	6	aaa`

`	a``$	a'`**`4/`77a	<	aa
ARa aa 	AR&AR)b,b/b	5a86b	=bARbbb	AR!AR$d'b**b3	/ dc*cc*!	d*c3	/d6ARdARdddAR,d/-AR:d=;AR?g)eg)0f<e?=f	g)f	 g)0g<f?=g	g)g	g)AR"g%#AR)g;/g20g;7ARhARhAR m8$i+ii+"	m+i4	0m$j>/j20j>5	m>k	 m#k>/k20k>5	m>l	 m#l>/l20l>5	m>m	m
ARmARm."m%#m.*AR nARnAR$s7)p< o#
!p<%'pp<pp<p0$p'%p0,p<3	s<q	s q#!s%%r
srsr.	"r%#r.	*s1AR<r?=ARs	s
sAR's*(AR5s86AR:!vtv )u5	u
u5u u5#v.u1/v5v	;u><v	v
ARvARv."v%#v.*ARwARwAR,zxz4y$;x><y$zy z$y6	*y-+y6	2zARzARz&zz&"AR8z;9AR{	ARA@:*}/|
}/7}?}/
}}/}#}}#}/&	A@:/}8	4"A@:A@/~2
0A@48>,A@7:8A@>A@@A@@A@@A@@	A@:@A@%	@!A@:@(AR@3A@6@4AR@:AAA AAAAAAARAAA!AARA,AA/A-ARA1AD5BADB)AB,
B*ADB.9AC9C'ADC2AC5C3ADC9ADC?ADD ADDADD	AD5DAD 	DAD5D#ARD.AD1D/ARD5AED;AD>D<AEEAREAEEARE'AE*E(ARE,(AG5FAFFAG5F#AGF<AG5GAG
GAG5GAG 	GAGGAG 	GAG5G#ARG.AG1G/ARG5AHG;AG>G<AHHARHAHHARH'AH*H(ARH,AJ*H>AIH?AJ*I
AI?IAI2I#AI&I$AI2I)	AI?I2AI;	I7AI?I>AJ*I?AJJAJ*JAJJAJ*JARJ#AJ&J$ARJ*AJ<J0AJ3J1AJ<J8ARKAKKARK AK#K!ARK%ANLALLANL,AM4L2AMMAM

MAMM	AM4MAMMAM4M"ANM-AM0M.ANM4AN	M:AM=M;AN	NANN	ARNANNARNAN-N!AN$N"AN-N)ARN?AOO AROAOOAROARO.AO1O/ARO3,AQ PAQP3AP6
P4AQP9	AQ QAQQAQ QARQAQQARQ AQ2	Q&AQ)Q'AQ2	Q.ARQ5ARR ARRARRARRARRARRARc           
     V   K   t                d{    d fd}dfd}nd}t        ||       d{    t                  d{         4 d{   \  }t        |t              sJ t        t              sJ d}dt	        j
                  d      }|j                  d|z        }|j                  |d      }	 	 	 	 	 	 	 	 dfd	}	dfd
}
t        j                         4 d{   }|j                  |	||d       |j                  |	|ddd   d       |j                  |
||ddd   d       |j                  |
|d       ddd      d{    dfd}t        j                         4 d{   }|j                  |       |j                  |j                         ddd      d{    ddd      d{    y7 7 7 7 7 7 # 1 d{  7  sw Y   xY w7 v7 <# 1 d{  7  sw Y   LxY w7 C# 1 d{  7  sw Y   yxY ww)u  Perform a number of generic tests on a custom two-way stream
    implementation.

    This is similar to :func:`check_one_way_stream`, except that the maker
    functions are expected to return objects implementing the
    :class:`~trio.abc.Stream` interface.

    This function tests a *superset* of what :func:`check_one_way_stream`
    checks – if you call this, then you don't need to also call
    :func:`check_one_way_stream`.

    Nc                 :   K             d {   d d d   S 7 
wNrb   r<   )r   s   r,   flipped_stream_makerz2check_two_way_stream.<locals>.flipped_stream_maker  s     "n$dd++$   c                 :   K             d {   d d d   S 7 
wr   r<   )r   s   r,   flipped_clogged_stream_makerz:check_two_way_stream.<locals>.flipped_clogged_stream_maker  s     .00$B$770r   i   i @  r      littlec                   K   t        j                  |      }t        |      }|r7|j                  d      }| j	                  |d |        d {    ||d  }|r6y y 7 wrS   )randomRandomr   randintrI   )rK   rJ   seedrP   m
chunk_sizeCHUNK_SIZE_MAXs         r,   r   z$check_two_way_stream.<locals>.sender  s_      d#A4 AYYq.9
jj;J000jkN 0s   AA AA A c                   K   t        j                  |      }t               }t        |      t        |      k  rJ| j	                  |j                  d             d {   }|sJ ||z  }t        |      t        |      k  rJ||k(  sJ y 7 -wrS   )r   r   r   r?   rN   r   )rK   rJ   r   rP   gotchunkr   s         r,   r   z&check_two_way_stream.<locals>.receiver  s|     d#A+Cc(SY&nnQYYq.-IJJu c(SY& $;; Ks   ABB$B	Brb   r   r   r   c                    K    j                  d       d {   dk(  sJ  j                          d {    y 7 "7 w)Nry   r.   )rN   rW   )s2s   r,   expect_receive_some_emptyz7check_two_way_stream.<locals>.expect_receive_some_empty  s6     ,,33))+ -s   ?;?=??)r7   ztuple[Stream, Stream])rK   r   rJ   r   r   intr7   r8   )rK   r   rJ   r   r   r   r7   r8   r   )r   r$   rA   r   r   r   getrandbitsto_bytesr   r   r   rW   )r   r   r   r   s1DUPLEX_TEST_SIZErP   i	test_datar   r   r   r   r   r   s   ``           @@r,   check_two_way_streamr     s+      |-A
BBB,
 '	8 (,$
35Q
RRR\^34 +* +*R"f%%"f%% !MM!MM!../JJ/:		#	#;	#CF	#	#	 %%' 	; 	;7vr9a8vr9TrT?A>xYtt_a@xY:		; 	;	 %%' 	* 	*789ryy)	* 	*S+* +* +*! C S3 +*>	; 	; 	; 	; 	;	* 	* 	* 	* 	*S+* +* +* +*s  H)G$H)GH)GH)GH) BH3G 4H7AG$HG" "HG9H-G=3H>G;?HH)HH)H)H)H) H"H$G6	*G-+G6	2H;H=H	HH	HH)H&HH&"H)c           	       K   t        | |       d{    t         |         d{         4 d{   \  }}t        |t              sJ t        |t              sJ dd}d	d}t	        j
                         4 d{   }|j                  ||       |j                  ||       ddd      d{    t        t        j                        5  |j                  d       d{    ddd       t               5  |j                          d{    ddd       t	        j
                         4 d{   }|j                  ||       |j                  ||       ddd      d{    ddd      d{    |t         |        d{         4 d{   \  }}t        t        j                  d      5  t	        j
                         4 d{   }|j                  |j                  d       t	        j                          d{    |j                  |j                         ddd      d{    ddd       ddd      d{    t         |        d{         4 d{   \  }}t        t        j                  d      5  t	        j
                         4 d{   }|j                  |j                         t	        j                          d{    |j                  |j                         ddd      d{    ddd       ddd      d{    yy7 !7 7 7 7 # 1 d{  7  sw Y   xY w7 r# 1 sw Y   rxY w7 W# 1 sw Y   WxY w7 B7 # 1 d{  7  sw Y   "xY w7 # 1 d{  7  sw Y   +xY w7 7 7 7 7 |# 1 d{  7  sw Y   xY w# 1 sw Y   xY w7 # 1 d{  7  sw Y   xY w7 7 7 L7 7 # 1 d{  7  sw Y   xY w# 1 sw Y   xY w7 # 1 d{  7  sw Y   yxY ww)
u  Perform a number of generic tests on a custom half-closeable stream
    implementation.

    This is similar to :func:`check_two_way_stream`, except that the maker
    functions are expected to return objects that implement the
    :class:`~trio.abc.HalfCloseableStream` interface.

    This function tests a *superset* of what :func:`check_two_way_stream`
    checks – if you call this, then you don't need to also call
    :func:`check_two_way_stream`.

    Nc                   K   | j                  d       d {    t               5  | j                          d {    d d d        y 7 07 # 1 sw Y   y xY ww)NrZ   )rI   r   send_eofr   s    r,   send_x_then_eofz4check_half_closeable_stream.<locals>.send_x_then_eof  sP     **T"""#% #jjl""# # #"# #s5   AAAAA
A
A
AAAc                   K   t        j                          d {    | j                  d       d {   dk(  sJ | j                  d       d {   dk(  sJ y 7 A7 *7 w)Nry   rZ   r.   )r   rp   rN   r{   s    r,   expect_x_then_eofz6check_half_closeable_stream.<locals>.expect_x_then_eof  sV     ..000++t33++s222 1++s1   A"AA"AA"A A"A" A"r\   Trc   rZ   )rK   r   r7   r8   )rP   r   r7   r8   )r   r$   rA   r   r   r   r   rF   rz   rI   r   r   r   rp   re   )r   r   r   r   r   r   r   s          r,   check_half_closeable_streamr     s      |-A
BBB\^34 6 6R"122"122	#
	3
 %%' 	6 	6730"5	6 	6
 E556 	$++d###	$  ! 	 ++-	  %%' 	6 	6730"5	6 	676 6> '")=)?#?@ 	4 	4HR 7 7F 4 --/ 4 47&&r{{D966888&&r{{34 44	4 	4 #)=)?#?@ 	4 	4HR   7 7F 4 --/ 4 47&&r'G'GH66888&&r{{34 44	4 	4 	4 (C C3 6	6 	6 	6 	6 	6 $	$ 	$
  	  	 	6 	6 	6 	6 	676 6 6 6@ $@ 	4484 4 4 44 4	4 	4 	4 	4 $@ 	4484 4 4 44 4	4 	4 	4 	4s  P?L3P?L6P?L9P?AN?L< N%M(N3L?4NM&M'M+N=M+M(M+ N6M87N:%M>N*M;+N/P?:N;P?N-P?N0P?"O"ON3
O4N<N6
N<2O=N9>OO"
P?OP?)O8*P?6O;7P?:P*P2O>
3P63P)P
*P	PPPP*!P?,P(-P?6P?9P?<N?NM	M	M	NMM%	 N(M++M5	0	N;N>N	NN	NP?N*N N*%	P?0P?3O6N<9O<OOO
OO	O"P?"O5(O+)O50	P?;P?>PPPPPPPP%	 P*(P?*P<0P31P<8P?)F)rB   ztype[BaseException]rC   boolr7   zGenerator[None, None, None])r   z&StreamMaker[SendStream, ReceiveStream]r   z-StreamMaker[SendStream, ReceiveStream] | Noner7   r8   )r   zStreamMaker[Stream, Stream]r   z"StreamMaker[Stream, Stream] | Noner7   r8   )r   z5StreamMaker[HalfCloseableStream, HalfCloseableStream]r   z<StreamMaker[HalfCloseableStream, HalfCloseableStream] | Noner7   r8   ).
__future__r   r   sys
contextlibr   r   typingr   r   r   r	   r
   r   r    r   r   _abcr   r   r   r   r   _highlevel_genericr   _checkpointsr   typesr   typing_extensionsr   r   r   version_infoexceptiongroupr   r   r!   r"   __annotations__r$   rF   r   r   r   r<   r.   r,   <module>r      sC   "  
 /   " X X 2 ,#6gEg1v]+v]+!"idDj0A&B"BCY C2gdDj) 2* 7<D%D04D D D"Z<8Z<GZ< 
Z<z
K*-K*<K* 
K*\A4GA4VA4 
A4r.   