
    ,hY                       U d dl mZ d dlZd dlZd dlmZmZmZ d dlm	Z	m
Z
 d dl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)	AwaitableCallable	Generator)contextmanagersuppress)TYPE_CHECKINGGeneric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     ]/var/www/html/Resume-Scraper/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)r6   r5   )r1   ztype[BaseException] | Noner2   zBaseException | Noner3   zTracebackType | Noner6   r7   )__name__
__module____qualname__r,   r/   r4    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_raisesrE   7   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  \  d'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_alld   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_someh   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;   )expectedrP   s    r+   checked_receive_1z/check_one_way_stream.<locals>.checked_receive_1l   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_acloseo   s9     #% (oo'''( ('( (s    =1/1	=1:=   xc                 V   K     d       d {      d       d {    y 7 7 w)Nr-      yr;   rK   s   r+   send_empty_then_yz/check_one_way_stream.<locals>.send_empty_then_yx   s.      c"""d### ##   )%)'))r[      1   2r   g      ?TrB   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)scoperJ   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)rE   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;>ri   i   r-   c                 V   K    d       d {             d {    y 7 7 w)Nr[   r;   )rX   rK   rJ   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)rT   rX   rO   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%   )rE   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
   )rE   r   ClosedResourceErrorrM   rO   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   rd   re   )cancel_scoperecordrJ   s    r+   waiterz$check_one_way_stream.<locals>.waiterH  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   ro   r   rM   )rO   r   s   r+   receiverz&check_one_way_stream.<locals>.receiverO  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   rd   r   rj   rJ   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   ro   r   rz   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)rI   bytes | bytearray | memoryviewr6   r7   r%   )rN   z
int | Noner6   bytes | bytearray)rS   bytesr6   r7   )rW   r   r6   r7   r6   r7   )rf   r   r6   r7   )rs   z"Callable[ArgsT, Awaitable[object]]rt   z
ArgsT.argsru   zArgsT.kwargsr6   r7   )r   r   r6   r7   )rJ   r   r6   r7   )r#   r@   r   r   r   open_nursery
start_soon	bytearray
memoryviewrE   
ValueErrorrM   	TypeErrorBusyResourceErrorr   rj   ry   r   rd   r   r   r   re   rV   ro   rH   )stream_makerclogged_stream_makernurseryr]   rg   rk   rm   rp   rf   rv   r{   r   r   r   r   rT   rX   rP   rK   rO   r   rJ   s                  @@@@@@@r+   check_one_way_streamr   J   s:    , \^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:$$ 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{} }~ \^34 8 8A		 %%' 	8 	87/67	8 	8!8 8( \^34 ( (A"""E556 	.!*--- o  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
 	{} } } }~  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!)u6
uu6u!u6$v/u20v6v	<u?=v	vARvARv/#v&$v/+ARwARwAR,zxz4y%<x?=y%zy!z%y7	+y.,y7	3zARzARz'zz'#AR9z<:AR{
ARA@;+}0|
}0	7} }0}}0}$}}$ }0'	A@;0}9	5"A@;A@0~3
1A@58?-A@8;9A@?A@@A@@A@@A@@	A@;@A@&	@"A@;@)AR@4A@7@5AR@;AAAAAAAAA	ARAAA"A ARA-AA0A.ARA2AD6BADB*AB-
B+ADB/9AC:C(ADC3AC6C4ADC:ADD ADDADDADD	AD6DAD!	DAD6D$ARD/AD2D0ARD6AED<AD?D=AEEAREAEEARE(AE+E)ARE-(AG6FAFFAG6F#AGF=AG6GAGG	AG6GAG!	GAGGAG!	GAG6G$ARG/AG2G0ARG6AHG<AG?G=AHHARHAHHARH(AH+H)ARH-AJ+H?AII AJ+I
AJ IAI3I$AI'I%AI3I*	AJ I3AI<	I8AJ I?AJ+J AJJAJ+JAJJAJ+JARJ$AJ'J%ARJ+AJ=J1AJ4J2AJ=J9ARKAKKARK!AK$K"ARK&ANLALLANL,AM5L3AMMAM
M	AMM	AM5MAM MAM5M#ANM.AM1M/ANM5AN	M;AM>M<AN	NANN
ARNANNARNAN.N"AN%N#AN.N*ARO AOOAROAOOAROARO/AO2O0ARO4,AQ!P AQP4AP7
P5AQP:	AQ!QAQQAQ!QARQAQQARQ!AQ3	Q'AQ*Q(AQ3	Q/ARQ6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Nra   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rR   )randomRandomr   randintrH   )rJ   rI   seedrO   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rR   )r   r   r   r>   rM   r   )rJ   rI   r   rO   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ra   r   r   r   c                    K    j                  d       d {   dk(  sJ  j                          d {    y 7 "7 w)Nrx   r-   )rM   rV   )s2s   r+   expect_receive_some_emptyz7check_two_way_stream.<locals>.expect_receive_some_empty  s6     ,,33))+ -s   ?;?=??)r6   ztuple[Stream, Stream])rJ   r   rI   r   r   intr6   r7   )rJ   r   rI   r   r   r   r6   r7   r   )r   r#   r@   r   r   r   getrandbitsto_bytesr   r   r   rV   )r   r   r   r   s1DUPLEX_TEST_SIZErO   i	test_datar   r   r   r   r   r   s   ``           @@r+   check_two_way_streamr     s0      |-A
BBB,
 '	8 (,$
35Q
RRR\^34 -* -*R"f%%"f%% !MM!MM!../JJ/:	
	#
	#0
	# 
	# 	
	#	 %%' 	; 	;7vr9a8vr9TrT?A>xYtt_a@xY:		; 	;	 %%' 	* 	*789ryy)	* 	*W-* -* -*! C S3 -*B	; 	; 	; 	; 	;	* 	* 	* 	* 	*W-* -* -* -*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)NrY   )rH   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)Nrx   rY   r-   )r   ro   rM   rz   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[   Trb   rY   )rJ   r   r6   r7   )rO   r   r6   r7   )r   r#   r@   r   r   r   r   rE   ry   rH   r   r   r   ro   rd   )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)rA   ztype[BaseException]rB   boolr6   zGenerator[None, None, None])r   z&StreamMaker[SendStream, ReceiveStream]r   z-StreamMaker[SendStream, ReceiveStream] | Noner6   r7   )r   zStreamMaker[Stream, Stream]r   z"StreamMaker[Stream, Stream] | Noner6   r7   )r   z5StreamMaker[HalfCloseableStream, HalfCloseableStream]r   z<StreamMaker[HalfCloseableStream, HalfCloseableStream] | Noner6   r7   )/
__future__r   r   syscollections.abcr   r   r   
contextlibr   r   typingr	   r
   r    r   r   _abcr   r   r   r   r   _highlevel_genericr   _checkpointsr   typesr   typing_extensionsr   r   r   version_infoexceptiongroupr   r   r    tupler!   __annotations__r#   rE   r   r   r   r;   r-   r+   <module>r      sH   "  
 : : /  " X X 2 ,#6gEg1v]+v]+!"idDj0A&B"BCY C2gdDj) 2*  D%DD !D D$[<8[<G[< 
[<|
M*-M*<M* 
M*`A4GA4VA4 
A4r-   