
    ,i$U                       U d dl mZ d dlZd dlZd dlmZ d dlmZ d dlZd dl	m
Z
mZ ddlmZ ddlmZ dd	l dd
lmZ ddlmZmZ d0dZd0dZd0dZd0dZd0dZd0dZd0dZd0dZej<                  j?                  de e!gd       	 	 	 	 d1d       Z"d0dZ#ddl$m%Z% ddlm&Z&  G d de&      Z' G d de&      Z( G d d e&      Z)d! d" e e!d# d$ e(e)gZ*g d%Z+ej<                  j?                  d&e*e+      Z,e-e.z  e z  e!z  e'z  e(z  e)z  Z/d'e0d(<   eg e/f   Z1d'e0d)<   e,d2d*       Z2e,d2d+       Z3e,	 	 	 	 d2d,       Z4d0d-Z5d0d.Z6d0d/Z7y)3    )annotationsN)Callable)	TypeAlias)MatcherRaisesGroup   )_core)GLOBAL_PARKING_LOT_BREAKER)*)sleep_forever)assert_checkpointswait_all_tasks_blockedc                   K   t               j                         rJ j                         j                  dk(  sJ t	        j
                  t        d      5  j                          d d d        j                          j                         sJ t               5  j                          d {    d d d        t               g dfd} t        j                         4 d {   }|j                  |        |j                  |        t                d {    ddgk(  sJ j                         j                  dk(  sJ j                          t                d {    g dk(  sJ d d d       d {    y # 1 sw Y   xY w7 # 1 sw Y   xY w7 7 7 =7 &# 1 d {  7  sw Y   y xY ww)	Nr   ztrio\.Event\.__bool__ is deprecated since Trio 0\.31\.0; use trio\.Event\.is_set instead \(https://github.com/python-trio/trio/issues/3238\)matchc                    K   j                  d        j                          d {    j                  d       y 7 w)Nsleepingwoken)appendwait)erecords   d/var/www/system.tvplus.app.br/jogos/scrap/venv/lib/python3.12/site-packages/trio/_tests/test_sync.pychildztest_Event.<locals>.child'   s1     j!ffhg 	   %A?Ar   r   )r   r   r   r   returnNone)Eventis_set
statisticstasks_waitingpytestwarnsDeprecationWarning__bool__setr   r   r	   open_nursery
start_soonr   )r   nurseryr   r   s     @@r   
test_Eventr+      s    Axxz><<>''1,,,	 ^
  	


	 EEG88::		 ffh 	AF
 !!# D Dw5!5!$&&&*j1111||~++q000	$&&&CCCCD D D)  	 D 	' 	'D D D Ds   AGF	,4G F4F5F93G,F$-G00F, F&!A	F,*F(+F,8GF*G	FGFF!G&F,(F,*G,F>2F53F>:Gc                 
  K   t        d      j                  dk(  sJ t        j                  t              5  t        d       d d d        t        j                  t
        d      5  t        d       d d d        t        d      } t        |        | j                  dk(  sJ | j                  dk(  sJ | j                  dk(  sJ t        j                  t              5  | j                          d d d        | j                  dk(  sJ | j                          | j                  dk(  sJ | j                  dk(  sJ | j                         }|j                  dk(  sJ |j                  dk(  sJ |j                  t        j                         gk(  sJ |j                   dk(  sJ t        j                  t              5  | j                          d d d        | j                  dk(  sJ t        j                  t              5  | j#                          d {    d d d        | j                  dk(  sJ t%               5  | j'                  d       d {    d d d        | j                  dk(  sJ t        j                  t        j(                        5  | j+                  d	       d d d        t-        | j                         j                        t        j                         dhk(  sJ | j/                  t        j                                | j                         j                  dgk(  sJ | j/                  d       | j                  dk(  sJ t%               5  | 4 d {    | j                  dk(  sJ d d d       d {    d d d        t        j0                         4 d {   }| j'                  d
       d {    | j'                  d       d {    |j3                  | j&                  d       t5                d {    | j                  dk(  sJ | j                         j                   dk(  sJ | j/                  d       | j                  dk(  sJ t        j                  t        j(                        5  | j                          d d d        d d d       d {    | j/                  d       | j/                  d
       y # 1 sw Y   xY w# 1 sw Y   bxY w# 1 sw Y   xY w# 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 # 1 d {  7  sw Y   xY w# 1 sw Y   xY w7 7 7 7 Y# 1 sw Y   xY w7 # 1 d {  7  sw Y   xY ww)Nr         ?^total_tokens must be >= 0$r   r      someonezthird partyzvalue 1zvalue 2zvalue 3)CapacityLimitertotal_tokensr#   raises	TypeError
ValueErrorreprborrowed_tokensavailable_tokensRuntimeErrorreleaseacquire_nowaitr!   	borrowersr	   current_taskr"   acquirer   acquire_on_behalf_of
WouldBlockacquire_on_behalf_of_nowaitr'   release_on_behalf_ofr(   r)   r   )cstatsr*   s      r   test_CapacityLimiterrF   7   s    1**a///	y	! 	z)G	H AG>>Q!!!"""	|	$ 			!!!!!!"""LLNE  A%%%"""??u1134444!### 
|	$ 	!!!	|	$ iik!!! 
	 0$$Y///0 !!!	u''	( 5	%%m45 q||~''(U-?-?-A9,MMMM 5--/0<<>##	{2229%!!!		 * 	* 	*$$)))	* 	** !!#  w$$Y///$$Y///1119=$&&&  A%%%||~++q000	y)  A%%%]]5++, 		  9%9%C     	  	00 0
5 5	* 	* 	* 	* 	** *//&	 	   s  4U=S#U=%S1A*U=S,CU=7S+2U=:S;S8S;#U=6TTT<U=TB3U=UT%UT+.U9T(:U> U=UU="U(7U8U(U-U(>U?A9U(8U	U(U=U&'U=S	U=SU=S(#U=+S50U=8S;;T U=TTU=T"U=%U(U+T>	1T42T>	9UU	U=U(U(U(U#	U(&U=(U:.U1/U:6U=c                   K   ddl m}  t        |       }t        |       |j                  | k(  sJ |j
                  dk(  sJ |j                  | k(  sJ t        j                  t              5  |j                          d d d        |j
                  dk(  sJ |j                          |j
                  dk(  sJ |j                  | k(  sJ y # 1 sw Y   MxY ww)Nr   )infr0   )mathrH   r2   r7   r3   r8   r9   r#   r4   r:   r;   r<   )rH   rD   s     r   test_CapacityLimiter_infrJ   }   s     AG>>S   !!!$$$	|	$ 			!!!!!!$$$ s   A)C+C<ACCCc                   K   t        d      } t        j                  t              5  d| _        d d d        t        j                  t
        d      5  d| _        d d d        t        j                  t
        d      5  d| _        d d d        | j                  dk(  sJ t        j                         4 d {   }t        d      D ]0  }|j                  | j                  |       t                d {    2 t        | j                         j                        dd	hk(  sJ | j                         j                  d
k(  sJ | xj                  dz  c_        t        | j                         j                        h dk(  sJ | j                         j                  d	k(  sJ | xj                  d
z  c_        | j                   dk(  sJ | j                  d	k(  sJ | j#                  d       | j#                  d	       | j#                  d       t        | j                         j                        d
hk(  sJ | j                         j                  d	k(  sJ | j#                  d
       t        | j                         j                        dhk(  sJ | j                         j                  dk(  sJ d d d       d {    y # 1 sw Y   xY w# 1 sw Y   qxY w# 1 sw Y   SxY w7 -7 7 2# 1 d {  7  sw Y   y xY ww)Nr   r-   r.   r   r/   i   r   r0      >   r   r0   r   rM      )r2   r#   r4   r5   r3   r6   r	   r(   ranger)   r@   r   r'   r!   r=   r"   r8   rC   rD   r*   is      r   (test_CapacityLimiter_change_total_tokensrR      s    A	y	!  
z)G	H  
z)G	H  >>Q!!# 1 1wq 	+Aq55q9(***	+ 1<<>++,A666||~++q000	!1<<>++,<<<||~++q000	!  A%%%~~"""	q!	q!	q!1<<>++,333||~++q000	q!1<<>++,333||~++q000'1 1 1   
1 +1 1 1 1s   %L J<#L K	#L =K1L 6K#7L :8K+2K&3F8K++L 6K)7L <KL 	KL K 	L &K+)L +K=1K42K=9L c                   K   t        d      } | j                          d {    t        j                         4 d {   }|j	                  | j                         t                d {    |j                  j                          d d d       d {    t        | j                        dk(  sJ y 7 7 x7 M7 %# 1 d {  7  sw Y   5xY ww)Nr0   )r3   r   )
r2   r?   r	   r(   r)   r   cancel_scopecancellen_pending_borrowers)limiterns     r    test_CapacityLimiter_memleak_548rZ      s     1-G
//
!!#    q	W__%$&&&	    w))*a///  &       sh    CB6CB8 C)B>,B:-B>CB< C8C:B><C>CCCCc                 	  K   t        d      } | j                  dk(  sJ t        j                         4 d {   }d| _        t	        d      D ]0  }|j                  | j                  |       t                d {    2 t        | j                         j                        t               k(  sJ | j                         j                  dk(  sJ d| _        t        | j                         j                        h dk(  sJ |j                  | j                  d       t                d {    | j                         j                  dk(  sJ t	        d      D ]  }| j                  |        | j                         j                  dk(  sJ | j                  d       d| _        t        j                  t        j                        5  | j!                          d d d        |j                  | j                  d       t                d {    | j                         j                  dk(  sJ | j                         j                  g k(  sJ d| _        | j                         j                  dk(  sJ | j                         j                  dgk(  sJ | j                  d       | j                  d       d {    |j                  | j                  d       t                d {    d| _        | j                         j                  dgk(  sJ | j                  d       t                d {    | j                         j                  g k(  sJ | j                         j                  dk(  sJ d| _        t                d {    | j                         j                  dgk(  sJ | j                         j                  dk(  sJ | j                  d       d| _        |j"                  j%                          d d d       d {    | j                  dk(  sJ | j                         j                  g k(  sJ | j&                  i k(  sJ y 7 7 7 ,# 1 sw Y   xY w7 [7 7 7 >7 7 j# 1 d {  7  sw Y   zxY ww)NrL   r   >   r   r0   r   rM   rN   r0      )r2   r3   r	   r(   rO   r)   r@   r   r'   r!   r=   r"   rC   r#   r4   rA   r<   rT   rU   rW   rP   s      r   &test_CapacityLimiter_zero_limit_tokensr]      s    A>>Q!!# A& A&wq 	+Aq55q9(***	+ 1<<>++,555||~++q0001<<>++,???11115$&&&||~++q000q 	&A""1%	& ||~++q000	q! ]]5++, 		 	11115$&&&||~++q000||~''2---||~++q000||~''A3...	q!$$Q'''11115$&&&||~''A3...	q!$&&&||~''2---||~++q000$&&&||~''A3...||~++q000	q!##%CA& A&F >>Q<<>##r)))2%%%KA&
 + 	'	 	 	' 	( 	' 	'
 	'sA& A& A& A&s   5RQR?Q6:Q;B/Q6*Q+BQ6	Q1Q6Q&B-Q69Q):-Q6'Q,(A	Q61Q/2AQ6Q2	A5Q6>R	Q4
ARQ6Q6Q#		Q6)Q6,Q6/Q62Q64R6R<Q?=RRc                   K   t        j                  t              5  t        d       d d d        t        j                  t        d      5  t        d       d d d        t        d      } t        |        | j                  dk(  sJ | j                  J | j                          | j                  dk(  sJ | j                         j                  dk(  sJ | j                          | j                  dk(  sJ t               5  | j                          d {    d d d        | j                  dk(  sJ t        j                  t        j                        5  | j                          d d d        | j                          | j                  dk(  sJ t               5  | 4 d {    | j                  dk(  sJ d d d       d {    d d d        | j                  dk(  sJ | j                          g dfd}t        j                          4 d {   }|j#                  ||        t%                d {    d	gk(  sJ | j                  dk(  sJ | j                          | j                  dk(  sJ t        j                  t        j                        5  | j                          d d d        d d d       d {    d	d
gk(  sJ y # 1 sw Y   xY w# 1 sw Y   xY w7 # 1 sw Y   xY w# 1 sw Y   xY w7 _7 A# 1 d {  7  sw Y   RxY w# 1 sw Y   WxY w7 7 # 1 sw Y   xY w7 # 1 d {  7  sw Y   xY ww)Nr-   z^initial value must be >= 0$r   r/   r0   r   r   c                   K   j                  d       | j                          d {    j                  d       y 7 wNstartedfinished)r   r?   )sr   s    r   
do_acquirez"test_Semaphore.<locals>.do_acquire+  s3     i iikj! 	r   ra   rb   )rc   	Semaphorer   r   )r#   r4   r5   re   r6   r7   value	max_valuer;   r!   r"   r<   r   r?   r	   rA   r(   r)   r   )rc   rd   r*   r   s      @r   test_Semaphorerh     s    	y	! #	z)H	I "!AG77a<<;;IIK77a<<<<>''1,,,77a<<		 iik77a<<	u''	( 	 IIK77a<<		   	  	 77a<<	  	   77a<<F"
 !!# 	 	w:q)$&&&)$$$ww!||			ww!||]]5++, 			 	 i,,,,Y   	  	  	  	  	  	    	&	 		 	 	 	sD  MK#MKB(M K%K"K%<MK2&3ML K?!L$L6LLLA	ML(M L;3L+4A!L;L-&L;.M9L9:MKMKM"K%%K/*M2K<7M?LLL	LL	LL% 	M+L;-L6	2L;9M;MMM	Mc                 l   t        j                  t              5  t        dd       d d d        t        j                  t        d      5  t        dd       d d d        t        dd      } | j
                  dk(  sJ t        |        t        j                  t        d      5  | j                          d d d        | j                  dk(  sJ | j                          | j                  dk(  sJ | j                          | j                  dk(  sJ y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   uxY w)	Nr0   r-   )rg   z%^max_values must be >= initial_value$r   r   z#^semaphore released too many times$r   )
r#   r4   r5   re   r6   rg   r7   r;   rf   r<   )bss    r   test_Semaphore_boundedrk   =  s    	y	! $!s#$	z)Q	R "!q!"	1	"B<<1H	z)O	P 


88q==88q==JJL88q==$ $" "
 s#   DD%D*DD'*D3lockclsc                    | j                   S N)__name__)fns    r   <lambda>rq   N  s
    2;;     )idsc                  K    |        j                         rJ t        j                        } |       u sJ t               | j                  t              v sJ t               5  4 d {    j                         sJ t               d d d       d {    d d d        j                         rJ j                          j                         sJ j                          j                         rJ t               5  j                          d {    d d d        j                         sJ j                          j                         rJ j                          t        j                  t              5  j                          d d d        j                          t        j                  t              5  j                          d d d        d dfd}t        j                         4 d {   }j                         rJ |j                  |       t                d {    j                         sJ t        j                  t        j                         5  j                          d d d        t        j                  t              5  j                          d d d        j#                         }t%        |       |j                   sJ |j&                  u sJ |j(                  dk(  sJ |j                  |       t                d {    j#                         }t%        |       |j(                  dk(  sJ |j*                  j-                          d d d       d {    j#                         }|j                   rJ |j&                  J |j(                  dk(  sJ y 7 O7 %# 1 d {  7  sw Y   6xY w# 1 sw Y   ;xY w7 # 1 sw Y   xY w# 1 sw Y   axY w# 1 sw Y   ,xY w7 7 # 1 sw Y   xY w# 1 sw Y   qxY w7 7 # 1 d {  7  sw Y   xY ww)Nc                    K   t        j                          4 d {    t                d {    d d d       d {    y 7 '7 7 	# 1 d {  7  sw Y   y xY wwrn   )r	   r>   r   )holder_taskls   r   holderz,test_Lock_and_StrictFIFOLock.<locals>.holderv  sV     ((* 	" 	"/!!	" 	" 	"!	" 	" 	" 	"sS   A!AA!AAAA! A
A!A
A!AAAA!r   r0   r   )lockedweakrefrefr7   ro   r   r<   r;   r?   r#   r4   r:   r	   r(   r)   r   rA   r!   printownerr"   rT   rU   )rl   rrx   r*   r!   rv   rw   s        @@r   test_Lock_and_StrictFIFOLockr   N  s     		Axxz> 	AA3!8O8GtAw&&&		  	 	88::G	 	 xxz>88::IIKxxz>		 iik88::IIKxxz>	|	$ 	 IIK	|	$ 			 K" !!# & &w88:~6"$&&&xxzz]]5++, 		 ]]<( 	IIK	 \\^
j    ;...''1,,,6"$&&&\\^
j''1,,,##%1& &4 J    #####q(((y	 	 	 	 	  	   & 	'	 		 	 	''& & & &sU  A(Q,O3O4O7OO O!O%A(QO.!O+"O.&A%QO;1QP)QPQ1P:<P=9P:6P!P:(P(9A0P:)P5*A
P:4Q?P8 AQOOO	OO	OO(#Q+O..O83Q;P QP	QP:P%	 P:(P2	-	P:8Q:Q QQQc                 |  K   t        j                  t              5  t        t	        d             d d d        t        j                  t              5  t        t
               d d d        t               } t        |       | j                         rJ j                         rJ t               5  j                          d {    d d d        | j                         sJ j                         sJ t               j                         rJ j                          j                         sJ t        j                  t              5  j                          d d d        j                          t        j                  t              5  j                          d {    d d d        t        j                  t              5  j                          d d d        t        j                  t              5  j                          d d d        t!               dfd}t#        j$                         4 d {   }t'        d      D ]&  }|j)                  ||       t+                d {    ( 4 d {    j                          d d d       d {    j                         sJ t+                d {    dhk(  sJ 4 d {    j                          d d d       d {    t+                d {    h dk(  sJ d d d       d {    t!               t#        j$                         4 d {   }t'        d      D ]&  }|j)                  ||       t+                d {    ( 4 d {    j                  d       j-                         }t/        |       |j0                  dk(  sJ |j2                  j0                  dk(  sJ d d d       d {    j-                         j2                  j0                  dk(  sJ t+                d {    ddhk(  sJ 4 d {    j                          d d d       d {    d d d       d {    t#        j4                         5 }4 d {    |j7                          	 j                          d {    j                         sJ d d d       d {    d d d        y # 1 sw Y   xY w# 1 sw Y   xY w7 9# 1 sw Y   9xY w# 1 sw Y   xY w7 x# 1 sw Y   xxY w# 1 sw Y   SxY w# 1 sw Y   .xY w7 7 7 7 # 1 d {  7  sw Y   xY w7 7 7 z# 1 d {  7  sw Y   xY w7 7 k# 1 d {  7  sw Y   |xY w7 ]7 .7 $7 # 1 d {  7  sw Y   xY w7 7 7 o# 1 d {  7  sw Y   xY w7 x# 1 d {  7  sw Y   xY w7 q7 K# j                         sJ w xY w7 C# 1 d {  7  sw Y   TxY w# 1 sw Y   y xY ww)Nr0   c                   K   4 d {    j                          d {    d d d       d {    j                  |        y 7 >7 (7 # 1 d {  7  sw Y   *xY wwrn   )r   add)rQ   rD   finished_waiterss    r   waiterztest_Condition.<locals>.waiter  sX      	 	&&(NN	 	Q		 	 	 	sQ   A$A	A$AAAA$AA$AA$A!AA!A$rM   r   >   r   r0   r   r   )rQ   intr   r   )r#   r4   r5   	Conditionre   StrictFIFOLockLockry   r   r?   r<   r:   r;   r   notify
notify_allr'   r	   r(   rO   r)   r   r!   r|   r"   lock_statisticsCancelScoperU   )rw   r   r*   rQ   r!   scoperD   r   s         @@r   test_Conditionr     s6    	y	!  )A, 	y	! ".!"A!Axxz>xxz>		 iik88::88::Axxz>88::	|	$ 	IIK	|	$ ffh 
|	$ 	
 
|	$ 	 u 
 !!# - -wq 	+Avq)(***	+  	 	HHJ	 	xxzz$&&&A3&&& 	 	LLN	 	$&&&9,,,- - u!!#  wq 	+Avq)(***	+  	A 	AHHQKJ*++q000--;;q@@@	A 	A ||~--;;q@@@$&&&Aq6))) 	 	LLN	 	! * 
			 " 	" 	"LLN"ffhxxz!z	" 	"" "U   " " 	   	   - +	 	 	 	 	 	'	 	 	 	 	&- - - - +	A 	A 	A 	A 	A 	'	 	 	 	 	!   ,	" xxz!z	" 	" 	" 	"" "sH  X<S"!X<S/$AX</S?S<S?BX<T1X<T!T"T&!X<T)!X<9T6
1X<;U<X<?.V
-U.V
:U	;V
>UV
U#V
>U%?V
U(V
U.&V
1U+2V
VV
X<V&X<V X<.W$5V#6W$V&W$AV,W$*V)+:W$%W&W$9W:W$=WW$WW$X<)W!*X<X0	W:
X0XX 2W=3X 7X	X0XX0	X<"S,'X</S94X<<S??T	X<TX<TT&!X<)T3.X<6U ;	X<V
	V
V
U"	UU"		V
(V
+V
.V	4U75V	<	V
X<
VVV	X<#W$&W$)W$,V?	2V53V?	:	W$W$W$W	WW	W$!X<$W7*W-+W72X<:X0=X  XXX0X-	 X#!X-	(X00X95X<)open_memory_channel)AsyncContextManagerMixinc                  ,    e Zd ZddZddZddZddZy)ChannelLock1c                    t        d    |      \  | _        | _        t        |dz
        D ]  }| j                  j	                  d         y Nr0   )r   rc   r~   rO   send_nowait)selfcapacity_s      r   __init__zChannelLock1.__init__  sC    ,T28<x!|$ 	%AFFt$	%rr   c                :    | j                   j                  d        y rn   rc   r   r   s    r   r<   zChannelLock1.acquire_nowait      4 rr   c                V   K   | j                   j                  d        d {    y 7 wrn   )rc   sendr   s    r   r?   zChannelLock1.acquire   s     ffkk$s   )')c                8    | j                   j                          y rn   r~   receive_nowaitr   s    r   r;   zChannelLock1.release      rr   N)r   r   r   r   r   ro   
__module____qualname__r   r<   r?   r;    rr   r   r   r     s    %
!  rr   r   c                  ,    e Zd ZddZddZddZddZy)ChannelLock2c                p    t        d    d      \  | _        | _        | j                  j                  d        y N
   )r   rc   r~   r   r   s    r   r   zChannelLock2.__init__  s+    ,T2264 rr   c                8    | j                   j                          y rn   r   r   s    r   r<   zChannelLock2.acquire_nowait  r   rr   c                T   K   | j                   j                          d {    y 7 wrn   )r~   receiver   s    r   r?   zChannelLock2.acquire  s     ffnns   (&(c                :    | j                   j                  d        y rn   r   r   s    r   r;   zChannelLock2.release  r   rr   Nr   r   r   rr   r   r   r     s    ! !rr   r   c                  ,    e Zd ZddZddZddZddZy)ChannelLock3c                H    t        d    d      \  | _        | _        d| _        y )Nr   F)r   rc   r~   acquiredr   s    r   r   zChannelLock3.__init__  s"    ,T215 rr   c                .    | j                   rJ d| _         y NT)r   r   s    r   r<   zChannelLock3.acquire_nowait  s    ==  rr   c                   K   | j                   r$| j                  j                  d        d {    y d| _         t        j                          d {    y 7 )7 wr   )r   rc   r   r	   
checkpointr   s    r   r?   zChannelLock3.acquire"  sG     ==&&++d### DM""$$$ $ %s!   +AA#AAAAc                    	 | j                   j                          y # t        j                  $ r | j                  sJ d| _        Y y w xY w)NF)r~   r   r	   rA   r   r   s    r   r;   zChannelLock3.release)  s?    	"FF!!# 	"== =!DM	"s    (AANr   r   r   rr   r   r   r     s    %"rr   r   c                     t        d      S r   )r2   r   rr   r   rq   rq   2  s    OA rr   c                     t        d      S r   )re   r   rr   r   rq   rq   3  s
    IaL rr   c                     t        d      S r   r   r   rr   r   rq   rq   6  s    L rr   c                     t        d      S r   r   r   rr   r   rq   rq   7  s
    LO rr   )zCapacityLimiter(1)zSemaphore(1)r   r   zChannelLock1(10)zChannelLock1(1)r   r   lock_factoryr   LockLikeLockFactoryc                ,  K   dd}dddfd}t        j                         4 d {   } |        }t        |      D ]  }|j                  ||        d d d       d {    rJ |z  k(  sJ y 7 L7 # 1 d {  7  sw Y   %xY ww)Nr   rL   Fr   c                0  K   t              D ]f  }| 4 d {    dz  rJ dt        j                          d {    t        j                          d {    sJ dd d d       d {    h y 7 `7 ;7 !7 # 1 d {  7  sw Y   xY ww)Nr0   TF)rO   r	   r   )	lock_liker   LOOPSacquiresin_critical_sections     r   workerz+test_generic_lock_exclusion.<locals>.workera  s     u 	,A  , ,A...&*#&&(((&&(((***&+#, , ,	,, )(, , , ,sg   BA9B#BA; BA=
B&B1A?2B;B=B?BB	B
B	B)r   r   r   r   )r	   r(   rO   r)   )	r   WORKERSr   r*   r   r   r   r   r   s	         @@@r   test_generic_lock_exclusionr   Z  s     EGH
, !!# 2 2w N	w 	2Avy1	22 2 #""uw&&&2 2 2 2 2sD   )BA;B*A?B'A=(B=B?BBBBc                  K   g g ddfd} |        }t        j                         4 d {   }|j                  |d|       |j                  |d|       |j                  |d|       d d d       d {    t              D ]  }d|z  d|dz   z   k(  rJ  y 7 q7 *# 1 d {  7  sw Y   :xY ww)NrL   c                   K   j                  |        t              D ].  }|4 d {    j                  |        d d d       d {    0 y 7 (7 	# 1 d {  7  sw Y   HxY wwrn   )r   rO   )namer   r   r   initial_orderr   s      r   loopyz.test_generic_lock_fifo_fairness.<locals>.loopy}  sk     T"u 	$A  $ $d#$ $ $	$$ $ $ $ $sC   &A+AA+AA+
AA+A+A(	AA(	$A+r0   r   rM   )r   r   r   r   r   r   )r	   r(   r)   rO   )r   r   r   r*   rQ   r   r   r   s        @@@r   test_generic_lock_fifo_fairnessr   w  s     MFE$ I!!# 0 0w5!Y/5!Y/5!Y/0 0 5\ <a!ea1q5k*m;;;<0 0 0 0 0sJ   .B>B%B>:B)1B><B'=#B>!B>'B>)B;/B20B;7B>c                V  K    |        g dfd}t        j                         4 d {   }j                          |j                  |       t	                d {    dgk(  sJ j                          d d d       d {    y 7 `7 /7 	# 1 d {  7  sw Y   y xY ww)Nc                    K   j                  d        4 d {    	 d d d       d {    j                  d       y 7 '7 # 1 d {  7  sw Y   (xY wwr`   )r   )r   r   s   r   
lock_takerzCtest_generic_lock_acquire_nowait_blocks_acquire.<locals>.lock_taker  sT     i  	 		 	j!	 	 	 	 	sA   AAAAAAAAAAAAra   r   )r	   r(   r<   r)   r   r;   )r   r   r*   r   r   s      @@r   /test_generic_lock_acquire_nowait_blocks_acquirer     s      IF" !!#  w  ":&$&&&)$$$   	'   sV   )B)BB)/B B!B=B)B	B)BB)B&BB&"B)c                 0  K   t         rJ t        j                         } t        j                         4 d{   }|j	                  | j
                         ddd      d{    t        j                  t        | j                  j                  d               }t        j                  t        j                  d| d      5  | j                          d{    ddd       t         rJ y7 7 # 1 d{  7  sw Y   xY w7 .# 1 sw Y   -xY ww)zTest that trying to acquire a lock whose owner has exited raises an error.
    see https://github.com/python-trio/trio/issues/3035
    Nr   .^Owner of this lock exited without releasing: $r   )r
   trior   r(   r)   r?   reescapestr_lot	broken_byr#   r4   BrokenResourceError)lockr*   	owner_strs      r   test_lock_acquire_unowned_lockr     s      *))99;D  " ) )g4<<() )		#dii11!456I	  >ykK
  lln	
 *)))) ) ) ) ) 		 so   5DC/DC3D"C1#A"DD
DD
D1D3D9C<:DDD

DDc                   K   t         rJ t        j                         } t        t	        t        j
                  d            5  t        j                         4 d{   }|j                  | j                         |j                  | j                         ddd      d{    ddd       t         rJ y7 [7 # 1 d{  7  sw Y   'xY w# 1 sw Y   +xY ww)zTest for error if awaiting on a lock whose owner exits without releasing.
    see https://github.com/python-trio/trio/issues/3035r   r   N)	r
   r   r   r   r   r   r(   r)   r?   )r   r*   s     r   test_lock_multiple_acquirer     s      *))99;D	$$B	

 - $$& 	- 	-'t||,t||,	- 	-- *)))	- 	- 	- 	- 	-- -sf   ACCB8C 7B<C"B:#C'C8C:C<C	CC	
CCCc                   K   t         rJ d } t        j                         }|j                          t	        j
                         |j                  git         k(  sJ t        j                         4 d {   }|j                  |j                         t                d {    |j                          t        t               dk(  sJ t        t        t                     } t         |    |j                  gk(  sJ d d d       d {    |j                  j                  | gk(  sJ t         rJ y 7 7 7 -# 1 d {  7  sw Y   =xY wwr   )r
   r   r   r<   r	   r>   r   r(   r)   r?   r   r;   rV   nextiterr   )
child_taskr   r*   s      r   test_lock_handoverr     s:    )))"J99;D 	II
 
$	$ $ $   " 
E 
Eg4<<($&&& 	 -.!333$9:;
)*5$))DDD
E 
E 99:,...))))
E&
E 
E 
E 
Es[   A1E
3D/4E
7)D5 D1!AD5:E
D3*E
1D53E
5E;D><EE
r   )rl   ztype[Lock | StrictFIFOLock]r   r   )r   r   r   r   )8
__future__r   r   rz   collections.abcr   typingr   r#   trio.testingr   r    r	   _core._parking_lotr
   _sync	_timeoutsr   testingr   r   r+   rF   rJ   rR   rZ   r]   rh   rk   markparametrizer   r   r   r   _channelr   r   r   r   r   lock_factorieslock_factory_namesgeneric_lock_testr2   re   r   __annotations__r   r   r   r   r   r   r   r   rr   r   <module>r      s   " 	  $   -  ;  % @!DHC&L% !1J0J&Z--`" T>$:@VWJ)(J)	J) XJ)ZQ"h + , +   !+ !"+ "8 		  KK++ ,   
  	
   	)  ""h,/Y /
 ' '8 < <. 	 **"*"*rr   