
    vKgK                       % S SK Jr  S SKrS SKrS SKJrJrJr  S SKrS SK	J
r
Jr  SSKJr  SSKJr  SSK7  SS	KJr  SS
KJrJr  \(       a  S SKJr  S/S jrS/S jrS/S jrS/S jrS/S jrS/S jrS/S jr\R>                  RA                  S\!\"/S S9    S0S j5       r#S/S jr$SSK%J&r&  SSKJ'r'   " S S\'5      r( " S S\'5      r) " S S\'5      r*S  S! \!\"S" S# \)\*/r+/ S$Qr,\R>                  RA                  S%\+\,S9r-\\.\/\!\"\(\)\*4   r0S&\1S''   \/ \04   r2S&\1S('   \-S1S) j5       r3\-S1S* j5       r4\-    S1S+ j5       r5S/S, jr6S/S- jr7S/S. jr8g)2    )annotationsN)TYPE_CHECKINGCallableUnion)MatcherRaisesGroup   )_core)GLOBAL_PARKING_LOT_BREAKER)*)sleep_forever)assert_checkpointswait_all_tasks_blocked)	TypeAliasc                 :  ^^#    [        5       mTR                  5       (       a   eTR                  5       R                  S:X  d   eTR	                  5         TR                  5       (       d   e[        5          TR                  5       I S h  vN   S S S 5        [        5       m/ mSUU4S jjn [        R                  " 5        IS h  vN nUR                  U 5        UR                  U 5        [        5       I S h  vN   TSS/:X  d   eTR                  5       R                  S:X  d   eTR	                  5         [        5       I S h  vN   T/ SQ:X  d   eS S S 5      IS h  vN   g  N! , (       d  f       N= f N N N6 N! , IS h  vN  (       d  f       g = f7f)Nr   c                    >#    TR                  S5        T R                  5       I S h  vN   TR                  S5        g  N7f)Nsleepingwoken)appendwait)erecords   U/var/www/highfloat_scraper/venv/lib/python3.13/site-packages/trio/_tests/test_sync.pychildtest_Event.<locals>.child#   s0     j!ffhg 	   %A?Ar   r	   )r   r   r   r   returnNone)Eventis_set
statisticstasks_waitingsetr   r   r
   open_nursery
start_soonr   )r   nurseryr   r   s     @@r   
test_Eventr(      sB    Axxzz><<>''1,,,EEG88:::		ffh 
 	AF 
 !!##w5!5!$&&&*j1111||~++q000	$&&&CCCC $## 	 
	 $ 	' 	' $###s   A3F7E(E&E(6FE9F
0F:E;;AFE=FF E?!F&E((
E62F;F=F?FFF
FFc                 t  #    [         R                  " [        5         [        S5        S S S 5        [         R                  " [        SS9   [        S5        S S S 5        [        S5      n [        U 5        U R                  S:X  d   eU R                  S:X  d   eU R                  S:X  d   e[         R                  " [        5         U R                  5         S S S 5        U R                  S:X  d   eU R                  5         U R                  S:X  d   eU R                  S:X  d   eU R                  5       nUR                  S:X  d   eUR                  S:X  d   eUR                  [        R                  " 5       /:X  d   eUR                   S:X  d   e[         R                  " [        5         U R                  5         S S S 5        U R                  S:X  d   e[         R                  " [        5         U R#                  5       I S h  vN   S S S 5        U R                  S:X  d   e[%        5          U R'                  S5      I S h  vN   S S S 5        U R                  S:X  d   e[         R                  " [        R(                  5         U R+                  S	5        S S S 5        [-        U R                  5       R                  5      [        R                  " 5       S1:X  d   eU R/                  [        R                  " 5       5        U R                  5       R                  S/:X  d   eU R/                  S5        U R                  S:X  d   e[%        5          U  IS h  vN   U R                  S:X  d   eS S S 5      IS h  vN   S S S 5        [        R0                  " 5        IS h  vN nU R'                  S
5      I S h  vN   U R'                  S5      I S h  vN   UR3                  U R&                  S5        [5        5       I S h  vN   U R                  S:X  d   eU R                  5       R                   S:X  d   eU R/                  S5        U R                  S:X  d   e[         R                  " [        R(                  5         U R                  5         S S S 5        S S S 5      IS h  vN   U R/                  S5        U R/                  S
5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNI= f GN! , (       d  f       GN= f GN! , (       d  f       GN= f! , (       d  f       GN= f GN GN! , IS h  vN  (       d  f       GN= f! , (       d  f       GN= f GN GN GN GN! , (       d  f       GN= f N! , IS h  vN  (       d  f       GN= f7f)N      ?^total_tokens must be >= 1$matchr	   r      someonezthird partyzvalue 1zvalue 2zvalue 3)pytestraises	TypeErrorCapacityLimiter
ValueErrorreprtotal_tokens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   3   s9    	y	! 
"	z)F	G 
HAG>>Q!!!"""	|	$			 
%!!!!!!"""LLNE  A%%%"""??u1134444!### 
|	$	 
%!!!	|	$iik 
%!!! 
	$$Y/// 
 !!!	u''	(	%%m4 
) q||~''(U-?-?-A9,MMMM 5--/0<<>##	{2229%!!!		1$$))) 1 
 !!##w$$Y///$$Y///1119=$&&&  A%%%||~++q000	y)  A%%%]]5++, - $# 9%9%C 
"	!	G	G 
%	$ 
%	$ 	 
%	$ 	0 
	
 
)	( 111 
	 $//& -, $###s  V8S!V8
SA.V8S*CV8)S<:4V8.TTT$V8+T& T#T&>V8T8B8V8U+U
U+U+U+6U7U+;!V8U=V8 V5V 6VV-V<V=A=V:V	VV8V'V8
SV8
S'"V8*
S94V8<
TV8T
T V8#T&&
T50V88
UV8
U+U+U(	UU(	#U++
U:5	V8 VVV	
V	VV8V5#V&$V50V8c                   #    SSK Jn   [        U 5      n[        U5        UR                  U :X  d   eUR
                  S:X  d   eUR                  U :X  d   e[        R                  " [        5         UR                  5         S S S 5        UR
                  S:X  d   eUR                  5         UR
                  S:X  d   eUR                  U :X  d   eg ! , (       d  f       NU= f7f)Nr   )infr/   )mathrH   r4   r6   r7   r8   r9   r1   r2   r:   r;   r<   )rH   rD   s     r   test_CapacityLimiter_infrJ   x   s     AG>>S   !!!$$$	|	$			 
%!!!!!!$$$ 
%	$s   A-C /C AC 
CC c                 B  #    [        S5      n [        R                  " [        5         SU l        S S S 5        [        R                  " [
        SS9   SU l        S S S 5        [        R                  " [
        SS9   SU l        S S S 5        U R                  S:X  d   e[        R                  " 5        IS h  vN n[        S5       H1  nUR                  U R                  U5        [        5       I S h  vN   M3     [        U R                  5       R                  5      SS1:X  d   eU R                  5       R                  S	:X  d   eU =R                  S-  sl        [        U R                  5       R                  5      1 S
k:X  d   eU R                  5       R                  S:X  d   eU =R                  S	-  sl        U R                   S:X  d   eU R                  S:X  d   eU R#                  S5        U R#                  S5        U R#                  S5        [        U R                  5       R                  5      S	1:X  d   eU R                  5       R                  S:X  d   eU R#                  S	5        [        U R                  5       R                  5      S1:X  d   eU R                  5       R                  S:X  d   eS S S 5      IS h  vN   g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNp= f GNH GN NA! , IS h  vN  (       d  f       g = f7f)Nr	   r*   r+   r,   r   i   r/      >   r   r/   r	   rM      )r4   r1   r2   r3   r7   r5   r
   r%   ranger&   r@   r   r$   r"   r=   r#   r8   rC   )rD   r'   is      r   (test_CapacityLimiter_change_total_tokensrQ      s`    A	y	! 
" 
z)F	G 
H 
z)F	G 
H >>Q!!##w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' $## 
"	! 
H	G 
H	G
 $ + $###s   &LK!LK!L:K+3L5K=6L98L1L 2GL6LLL
KL
K(#L+
K:5	L LLLLLLc                   #    [        SS9n U R                  5       I S h  vN   [        R                  " 5        IS h  vN nUR	                  U R                  5        [        5       I S h  vN   UR                  R                  5         S S S 5      IS h  vN   [        U R                  5      S:X  d   eg  N Ny NN N&! , IS h  vN  (       d  f       N;= f7f)Nr/   )r7   r   )
r4   r?   r
   r%   r&   r   cancel_scopecancellen_pending_borrowers)limiterns     r    test_CapacityLimiter_memleak_548rY      s     1-G
//
!!##q	W__%$&&&	 $# w))*a/// #& $###sg   CB5CB7C)B=*B9+B=	CB;!C7C9B=;C=CCCCc                   ^#    [         R                  " [        5         [        S5        S S S 5        [         R                  " [        SS9   [        S5        S S S 5        [        S5      n [        U 5        U R                  S:X  d   eU R                  b   eU R                  5         U R                  S:X  d   eU R                  5       R                  S:X  d   eU R                  5         U R                  S:X  d   e[        5          U R                  5       I S h  vN   S S S 5        U R                  S:X  d   e[         R                  " [        R                  5         U R                  5         S S S 5        U R                  5         U R                  S:X  d   e[        5          U  IS h  vN   U R                  S:X  d   eS S S 5      IS h  vN   S S S 5        U R                  S:X  d   eU R                  5         / mSU4S jjn[        R                   " 5        IS h  vN nUR#                  X5        [%        5       I S h  vN   TS	/:X  d   eU R                  S:X  d   eU R                  5         U R                  S:X  d   e[         R                  " [        R                  5         U R                  5         S S S 5        S S S 5      IS h  vN   TS	S
/:X  d   eg ! , (       d  f       GN= f! , (       d  f       GN= f GN! , (       d  f       GN= f! , (       d  f       GN= f GN| GN]! , IS h  vN  (       d  f       GNs= f! , (       d  f       GN}= f GN; GN! , (       d  f       N= f N! , IS h  vN  (       d  f       N= f7f)Nr*   z^initial value must be >= 0$r,   r.   r/   r	   r   c                   >#    TR                  S5        U R                  5       I S h  vN   TR                  S5        g  N7fNstartedfinished)r   r?   )sr   s    r   
do_acquire"test_Semaphore.<locals>.do_acquire   s2     i iikj! 	r   r]   r^   )r_   	Semaphorer   r   )r1   r2   r3   rb   r5   r6   value	max_valuer;   r"   r#   r<   r   r?   r
   rA   r%   r&   r   )r_   r`   r'   r   s      @r   test_Semaphorere      sr    	y	!# 
"	z)G	H" 
I!AG77a<<;;IIK77a<<<<>''1,,,77a<<		iik 
77a<<	u''	(	 
) IIK77a<<		177a<< 1 
 77a<<F"
 !!##w:)$&&&)$$$ww!||			ww!||]]5++, - $# i,,,,Y 
"	!	H	H 	 
	 
)	( 111 
	 $& -, $###sD  N	K!N	K*B-N	K?K<K?>N	L,4N	 M'L#(M+L)>M	L&
MAN	MN	M/>M?A%M/$M5M/=N	M-	N	
K'"N	*
K94N	<K??
L	N	
L N	#M&M)M	/L20M	<M
M	N	M/
M*	&M/-N	/N5M86NN	c                   #    [         R                  " [        5         [        SSS9  S S S 5        [         R                  " [        SS9   [        SSS9  S S S 5        [        SSS9n U R
                  S:X  d   e[        U 5        [         R                  " [        SS9   U R                  5         S S S 5        U R                  S:X  d   eU R                  5         U R                  S:X  d   eU R                  5         U R                  S:X  d   eg ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f7f)	Nr/   r*   )rd   z%^max_values must be >= initial_value$r,   r	   z#^semaphore released too many times$r   )
r1   r2   r3   rb   r5   rd   r6   r;   rc   r<   )bss    r   test_Semaphore_boundedrh      s     	y	!!s# 
"	z)P	Q!q! 
R	1	"B<<1H	z)N	O


 
P88q==88q==JJL88q== 
"	!	Q	Q
 
P	OsM   D?D!D?	DAD?D.-AD?
DD?
D+'D?.
D<8D?lockclsc                    U R                   $ N)__name__)fns    r   <lambda>rn      s    2;;    )idsc                	  ^^#    U " 5       mTR                  5       (       a   e[        R                  " T5      nU" 5       TL d   e[        T5        U R                  [        T5      ;   d   e[        5          T IS h  vN   TR                  5       (       d   e[        T5        S S S 5      IS h  vN   S S S 5        TR                  5       (       a   eTR                  5         TR                  5       (       d   eTR                  5         TR                  5       (       a   e[        5          TR                  5       I S h  vN   S S S 5        TR                  5       (       d   eTR                  5         TR                  5       (       a   eTR                  5         [        R                  " [        5         TR                  5         S S S 5        TR                  5         [        R                  " [        5         TR                  5         S S S 5        S mSUU4S jjn[        R                  " 5        IS h  vN nTR                  5       (       a   eUR                  U5        [        5       I S h  vN   TR                  5       (       d   e[        R                  " [        R                   5         TR                  5         S S S 5        [        R                  " [        5         TR                  5         S S S 5        TR#                  5       n[%        U5        UR                   (       d   eUR&                  TL d   eUR(                  S:X  d   eUR                  U5        [        5       I S h  vN   TR#                  5       n[%        U5        UR(                  S:X  d   eUR*                  R-                  5         S S S 5      IS h  vN   TR#                  5       nUR                   (       a   eUR&                  b   eUR(                  S:X  d   eg  GN GN^! , IS h  vN  (       d  f       GNt= f! , (       d  f       GN~= f GN! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNc= f GNB GN! , (       d  f       GN= f! , (       d  f       GN= f GN7 N! , IS h  vN  (       d  f       N= f7f)Nc                    >#    [         R                  " 5       m T IS h  vN   [        5       I S h  vN   S S S 5      IS h  vN   g  N' N N	! , IS h  vN  (       d  f       g = f7frk   )r
   r>   r   )holder_taskls   r   holder,test_Lock_and_StrictFIFOLock.<locals>.holder$  s;     ((*1/!! 11! 111sS   A'AA'AA	AA'AA'	AA'A$AA$ A'r   r/   r   )lockedweakrefrefr6   rl   r   r<   r;   r?   r1   r2   r:   r
   r%   r&   r   rA   r"   printownerr#   rS   rT   )ri   rru   r'   r"   rs   rt   s        @@r   test_Lock_and_StrictFIFOLockr}      sK     		Axxzz> 	AA3!8O8GtAw&&&		188:::G 1 
 xxzz>88:::IIKxxzz>		iik 
88:::IIKxxzz>	|	$	 
% IIK	|	$			 
% K" " !!##w88::~6"$&&&xxzzz]]5++, - ]]<(IIK ) \\^
j    ;...''1,,,6"$&&&\\^
j''1,,,##%1 $#4 J    #####q(((y 111 
	 	 
	 
%	$ 
%	$ $ 	' -, )( 	'' $###sU  A1R>5P*<P	=P* #P#P*.P/P*3A7R>*P?>P<?P?A0R>3Q2R>6Q#,R>3Q54R>76R$-Q8.?R$-Q;>"R$ R1A7R$(R)AR$4R>?R" A	R>	P*P*P'	PP'	"P**
P94R><P??
Q	R>
Q R>#
Q2-	R>8R$;
R
	R$
R		R$"R>$R;*R-+R;7R>c                   ^^#    [         R                  " [        5         [        [	        S5      5        S S S 5        [         R                  " [        5         [        [
        5        S S S 5        [        5       n [        U 5      mU R                  5       (       a   eTR                  5       (       a   e[        5          TR                  5       I S h  vN   S S S 5        U R                  5       (       d   eTR                  5       (       d   e[        5       mTR                  5       (       a   eTR                  5         TR                  5       (       d   e[         R                  " [        5         TR                  5         S S S 5        TR                  5         [         R                  " [        5         TR                  5       I S h  vN   S S S 5        [         R                  " [        5         TR                  5         S S S 5        [         R                  " [        5         TR                  5         S S S 5        [!        5       mSUU4S jjn["        R$                  " 5        IS h  vN n['        S5       H&  nUR)                  X5        [+        5       I S h  vN   M(     T IS h  vN   TR                  5         S S S 5      IS h  vN   TR                  5       (       d   e[+        5       I S h  vN   TS1:X  d   eT IS h  vN   TR                  5         S S S 5      IS h  vN   [+        5       I S h  vN   T1 Sk:X  d   eS S S 5      IS h  vN   [!        5       m["        R$                  " 5        IS h  vN n['        S5       H&  nUR)                  X5        [+        5       I S h  vN   M(     T IS h  vN   TR                  S5        TR-                  5       n[/        U5        UR0                  S:X  d   eUR2                  R0                  S:X  d   eS S S 5      IS h  vN   TR-                  5       R2                  R0                  S:X  d   e[+        5       I S h  vN   TSS1:X  d   eT IS h  vN   TR                  5         S S S 5      IS h  vN   S S S 5      IS h  vN   ["        R4                  " 5        nT IS h  vN   UR7                  5          TR                  5       I S h  vN   TR                  5       (       d   e S S S 5      IS h  vN   S S S 5        g ! , (       d  f       GN= f! , (       d  f       GN= f GNs! , (       d  f       GNx= f! , (       d  f       GN= f GN! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNi= f GN@ GN GN GN! , IS h  vN  (       d  f       GN= f GN GN GN! , IS h  vN  (       d  f       GN= f GN GN! , IS h  vN  (       d  f       GN= f GN GNm GNa GN! , IS h  vN  (       d  f       GN= f GN GN GN! , IS h  vN  (       d  f       GN= f GN! , IS h  vN  (       d  f       GN= f GN GN! TR                  5       (       d   ef = f GN! , IS h  vN  (       d  f       GN= f! , (       d  f       g = f7f)Nr/   c                   >#    T IS h  vN   TR                  5       I S h  vN   S S S 5      IS h  vN   TR                  U 5        g  N> N( N! , IS h  vN  (       d  f       N/= f7frk   )r   add)rP   rD   finished_waiterss    r   waitertest_Condition.<locals>.waiterl  s@     1&&(NN 1Q  111sQ   A)A	A)AAAA)AA)AA)A&AA&"A)rM   r   >   r   r/   r	   r	   )rP   intr   r   )r1   r2   r3   	Conditionrb   StrictFIFOLockLockrw   r   r?   r<   r:   r;   r   notify
notify_allr$   r
   r%   rO   r&   r   r"   rz   r#   lock_statisticsCancelScoperT   )rt   r   r'   rP   r"   scoperD   r   s         @@r   test_Conditionr   J  sH    	y	!)A, 
"	y	!.! 
"A!Axxzz>xxzz>		iik 
88:::88:::Axxzz>88:::	|	$	 
%IIK	|	$ffh 
% 
|	$	
 
% 
|	$	 
% u   
 !!##wqAv)(***  1HHJ 1xxzzz$&&&A3&&&1LLN 1$&&&9,,, $# u!!##wqAv)(***  1HHQKJ*++q000--;;q@@@ 1 ||~--;;q@@@$&&&Aq6)))1LLN 1! $#* 
			1LLN"ffhxxzz!z 1 
	U 
"	!	!	! 	 
	 
%	$ 	 
%	$ 
%	$ 
%	$ $ +111 	'111& $### $ +111 	' 111! $###,  xxzz!z 111 
	sH  [T"[T0&A[;UUUB[,U=2[/U,U)U,"[*U>;"[V.4["V"#[&-W3V%W3"V(#W3&V.7W3V+(W3+W	,W3?W W3WW3W W31W-2W3 [W0'[3X4[7-Y$X%Y3X4Y7AXYX;YX5Y.X8/Y2X>YX;Y[Y[8Z7?Y7 Z7ZY=(Y:)Y=-ZZ7ZZ7	[
T-([0
T?:[U
U[
U&![)U,,
U;6[>
V[
V	[%W3(W3+W3.W	4V75W		W3W3W3W*	WW*	%	W30[3X9W<:X	[YYYX2	 X#!X2	-	Y8Y;Y>Y	YY	Y[Y4"Y%#Y4/[7Z7:Y==ZZZ7Z4	"Z%#Z4	/Z77
[[)open_memory_channel)AsyncContextManagerMixinc                  <    \ rS rSrSS jrS	S jrS	S jrS	S jrSrg)
ChannelLock1i  c                    [         S    " U5      u  U l        U l        [        US-
  5       H  nU R                  R	                  S 5        M      g Nr/   )r   r_   r|   rO   send_nowait)selfcapacity_s      r   __init__ChannelLock1.__init__  s>    ,T28<x!|$AFFt$ %ro   c                :    U R                   R                  S 5        g rk   r_   r   r   s    r   r<   ChannelLock1.acquire_nowait      4 ro   c                V   #    U R                   R                  S 5      I S h  vN   g  N7frk   )r_   sendr   s    r   r?   ChannelLock1.acquire  s     ffkk$s   )')c                8    U R                   R                  5         g rk   r|   receive_nowaitr   s    r   r;   ChannelLock1.release      ro   r|   r_   N)r   r   r   r   r   	rl   
__module____qualname____firstlineno__r   r<   r?   r;   __static_attributes__ ro   r   r   r     s    %
!  ro   r   c                  <    \ rS rSrSS jrSS jrSS jrSS jrSrg)	ChannelLock2i  c                r    [         S    " S5      u  U l        U l        U R                  R                  S 5        g N
   )r   r_   r|   r   r   s    r   r   ChannelLock2.__init__  s+    ,T2264 ro   c                8    U R                   R                  5         g rk   r   r   s    r   r<   ChannelLock2.acquire_nowait  r   ro   c                T   #    U R                   R                  5       I S h  vN   g  N7frk   )r|   receiver   s    r   r?   ChannelLock2.acquire  s     ffnns   (&(c                :    U R                   R                  S 5        g rk   r   r   s    r   r;   ChannelLock2.release  r   ro   r   Nr   r   r   ro   r   r   r     s    ! !ro   r   c                  <    \ rS rSrSS jrSS jrSS jrSS jrSrg)	ChannelLock3i  c                J    [         S    " S5      u  U l        U l        SU l        g )Nr   F)r   r_   r|   acquiredr   s    r   r   ChannelLock3.__init__  s"    ,T215 ro   c                8    U R                   (       a   eSU l         g NT)r   r   s    r   r<   ChannelLock3.acquire_nowait  s    ==  ro   c                   #    U R                   (       a$  U R                  R                  S 5      I S h  vN   g SU l         [        R                  " 5       I S h  vN   g  N* N7fr   )r   r_   r   r
   
checkpointr   s    r   r?   ChannelLock3.acquire  sE     ==&&++d### DM""$$$ $ %s!   0A!A$A!AA!A!c                     U R                   R                  5         g ! [        R                   a    U R                  (       d   eSU l         g f = f)NF)r|   r   r
   rA   r   r   s    r   r;   ChannelLock3.release  s?    	"FF!!# 	"== =!DM	"s    .AA)r   r|   r_   Nr   r   r   ro   r   r   r     s    %"ro   r   c                     [        S5      $ r   )r4   r   ro   r   rn   rn     s	    OAro   c                     [        S5      $ r   )rb   r   ro   r   rn   rn     s    IaLro   c                     [        S5      $ r   r   r   ro   r   rn   rn     s	    Lro   c                     [        S5      $ r   r   r   ro   r   rn   rn     s    LOro   )zCapacityLimiter(1)zSemaphore(1)r   r   zChannelLock1(10)zChannelLock1(1)r   r   lock_factoryr   LockLikeLockFactoryc                J  ^^^#    SmSnSmSmSUUU4S jjn[         R                  " 5        IS h  vN nU " 5       n[        U5       H  nUR                  X$5        M     S S S 5      IS h  vN   T(       a   eTTU-  :X  d   eg  NS N! , IS h  vN  (       d  f       N0= f7f)Nr   rL   Fr   c                X  >#    [        T5       Hs  nU  IS h  vN   TS-  mT(       a   eSm[        R                  " 5       I S h  vN   [        R                  " 5       I S h  vN   T(       d   eSmS S S 5      IS h  vN   Mu     g  Nn NC N( N! , IS h  vN  (       d  f       M  = f7f)Nr/   TF)rO   r
   r   )	lock_liker   LOOPSacquiresin_critical_sections     r   worker+test_generic_lock_exclusion.<locals>.worker  s     uA yA...&*#&&(((&&(((***&+# !yy   )( !yyysh   B*BB*)BB	B"B#B2B*=B>
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     s     EGH
, 
, !!##w N	wAv1   $# #""uw&&& $###sD   ,B#BB#+B	 B#+B,B#B#	B BB B#c                  ^^^#    / m/ mSmSUUU4S jjnU " 5       n[         R                  " 5        IS h  vN nUR                  USU5        UR                  USU5        UR                  USU5        S S S 5      IS h  vN   [        T5       H  nTSU-  SUS-   -   T:X  a  M   e   g  Nt N-! , IS h  vN  (       d  f       NB= f7f)NrL   c                   >#    TR                  U 5        [        T5       H/  nU IS h  vN   TR                  U 5        S S S 5      IS h  vN   M1     g  N* N! , IS h  vN  (       d  f       MP  = f7frk   )r   rO   )namer   r   r   initial_orderr   s      r   loopy.test_generic_lock_fifo_fairness.<locals>.loopy+  sE     T"uA yd# !yy  yyysC   &A3AA3AA3
A
A3A3A0	A!A0	+A3r/   r	   rM   )r   r   r   r   r   r   )r
   r%   r&   rO   )r   r   r   r'   rP   r   r   r   s        @@@r   test_generic_lock_fifo_fairnessr   %  s     MFE$ $ I!!##w5!Y/5!Y/5!Y/ $# 5\a!ea1q5k*m;;;  $###sJ   1C	B+C	:B/4C	?B- "C	&C	-C	/C5B86CC	c                h  ^^#    U " 5       m/ mSUU4S jjn[         R                  " 5        IS h  vN nTR                  5         UR                  U5        [	        5       I S h  vN   TS/:X  d   eTR                  5         S S S 5      IS h  vN   g  Na N0 N	! , IS h  vN  (       d  f       g = f7f)Nc                    >#    TR                  S5        T  IS h  vN    S S S 5      IS h  vN   TR                  S5        g  N' N! , IS h  vN  (       d  f       N-= f7fr\   )r   )r   r   s   r   
lock_takerCtest_generic_lock_acquire_nowait_blocks_acquire.<locals>.lock_takerE  s8     i 9 9j! 999sA   A!AA!AA!AA!A!AAAA!r]   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   ,B2BB2/B#B$BB2BB2BB2B/B!B/+B2c                 V  #    [         (       a   e[        R                  5       n [        R                  5        ISh  vN nUR	                  U R
                  5        SSS5      ISh  vN   [        R                  " [        U R                  R                  S   5      5      n[        R                  " [        R                  SU S3S9   U R                  5       I Sh  vN   SSS5        [         (       a   eg N N! , ISh  vN  (       d  f       N= f N8! , (       d  f       N<= f7f)zTest 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_byr1   r2   BrokenResourceError)lockr'   	owner_strs      r   test_lock_acquire_unowned_lockr   S  s      *)))99;D  ""g4<<( #"		#dii11!456I	  >ykK
 lln	

 *)))) #""" 		
 
sp   :D)C8D) C<D)'C:(A!D)	DDD"D):D)<DDDD)D
D&"D)c                   #    [         (       a   e[        R                  5       n [        [	        [        R
                  SS95         [        R                  5        ISh  vN nUR                  U R                  5        UR                  U R                  5        SSS5      ISh  vN   SSS5        [         (       a   eg N` N! , ISh  vN  (       d  f       N1= f! , (       d  f       N:= f7f)z}Test 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   d  s      *)))99;D	$$B	

 $$&&'t||,t||, '&
 *)))) '&&&
 
sf   AC.CB?C"7CC$C%C)C.?CCC		C
C	C
C+'C.c                   #    [         (       a   eS n [        R                  5       nUR                  5         [         [        R
                  " 5       UR                  /0:X  d   e[        R                  5        IS h  vN nUR                  UR                  5        [        5       I S h  vN   UR                  5         [        [         5      S:X  d   e[        [        [         5      5      n [         U    UR                  /:X  d   eS S S 5      IS h  vN   UR                  R                  U /:X  d   e[         (       a   eg  N N N3! , IS h  vN  (       d  f       NH= f7fr   )r   r   r   r<   r
   r>   r   r%   r&   r?   r   r;   rU   nextiterr   )
child_taskr   r'   s      r   test_lock_handoverr   u  s"    ))))"J99;D 	%II
*      ""g4<<($&&& 	 -.!333$9:;
)*5$))DDD #" 99:,...))))) #& #"""s[   A8E:D>;E>)E'E (AEEE0E EEE
EEEr   )ri   ztype[Lock | StrictFIFOLock]r   r   )r   r   r   r   )9
__future__r   r   rx   typingr   r   r   r1   trio.testingr   r    r
   _core._parking_lotr   _sync	_timeoutsr   testingr   r   typing_extensionsr   r(   rF   rJ   rQ   rY   re   rh   markparametrizer   r   r}   r   _channelr   r   r   r   r   lock_factorieslock_factory_namesgeneric_lock_testr4   rb   r   __annotations__r   r   r   r   r   r   r   r   ro   r   <module>r
     s   " 	  1 1  -  ;  % @+D<B&J% !1J0--`" T>$:@VWJ)(J)	J) XJ)ZQ"h + , +   !+ !"+ "8 		  KK++ ,   )  ""h,/Y /
 ' '8 < <. 	 **"*"*ro   