
    ,hK                    ~   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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 erd dlmZ d/dZd/dZd/dZd/dZd/dZd/dZd/dZej>                  jA                  de!e"gd       	 	 	 	 d0d       Z#d/d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>                  jA                  d%e+e,      Z-ee.e/e!e"e(e)e*f   Z0d&e1d'<   eg e0f   Z2d&e1d(<   e-d1d)       Z3e-d1d*       Z4e-	 	 	 	 d1d+       Z5d/d,Z6d/d-Z7d/d.Z8y)2    )annotationsN)TYPE_CHECKINGCallableUnion)MatcherRaisesGroup   )_core)GLOBAL_PARKING_LOT_BREAKER)*)sleep_forever)assert_checkpointswait_all_tasks_blocked)	TypeAliasc                   K   t               j                         rJ j                         j                  dk(  sJ 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 7 # 1 sw Y   xY w7 7 x7 07 # 1 d {  7  sw Y   y xY ww)Nr   c                    K   j                  d        j                          d {    j                  d       y 7 w)Nsleepingwoken)appendwait)erecords   W/var/www/html/Resume-Scraper/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setr   r   r
   open_nursery
start_soonr   )r   nurseryr   r   s     @@r   
test_Eventr'      sQ    Axxz<<>''1,,EEG88:		 ffh 	AF
 !!# D Dw5!5!$&&&*j111||~++q00	$&&&CCCD D D 	 D 	' 	'D D D Ds   A(F ,E EE3F 8E#9F <0E+,E%-A	E+6E'7E+F E)F EE F %E+'E+)F +E=1E42E=9F 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                  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)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_CapacityLimiterrE   3   so    	y	! 	z)G	H AG>>Q!!""	|	$ 			!!!!""LLNE  A%%""??u113444!## 
|	$ 	!!	|	$ iik!! 
	 0$$Y///0 !!	u''	( 5	%%m45 q||~''(U-?-?-A9,MMM 5--/0<<>##	{229%!!		 * 	* 	*$$))	* 	** !!#  w$$Y///$$Y///1119=$&&&  A%%||~++q00	y)  A%%]]5++, 		  9%9%C     	  	00 0
5 5	* 	* 	* 	* 	** *//&	 	   s  U#R*#U#R7A*U#SCU#S.2U# S!4S5S!9#U#S11S.2S16<U#2S>B3U#7T'>T?T'TT'T T'$ U#T4U#UT7U6T:7-U$T=%A9UU /U7U#U'U#*R4/U#7S<U#S	U#SU#S!!S+&U#.S11S;6U#>TU#T'T'T$	TT$	T''T1,	U#7U:U=U U		UU#U UU 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   )infr.   )mathrG   r3   r5   r6   r7   r8   r0   r1   r9   r:   r;   )rG   rC   s     r   test_CapacityLimiter_infrI   x   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.      >   r   r.   r	   rL      )r3   r0   r1   r2   r6   r4   r
   r$   ranger%   r?   r   r#   r!   r<   r"   r7   rB   )rC   r&   is      r   (test_CapacityLimiter_change_total_tokensrP      sj    A	y	!  
z)G	H  
z)G	H  >>Q!!# 1 1wq 	+Aq55q9(***	+ 1<<>++,A66||~++q00	!1<<>++,<<||~++q00	!  A%%~~""	q!	q!	q!1<<>++,33||~++q00	q!1<<>++,33||~++q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)Nr.   )r6   r   )
r3   r>   r
   r$   r%   r   cancel_scopecancellen_pending_borrowers)limiterns     r    test_CapacityLimiter_memleak_548rX      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        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-   r.   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   r\   r]   )r^   	Semaphorer   r   )r0   r1   r2   r`   r4   r5   value	max_valuer:   r!   r"   r;   r   r>   r
   r@   r$   r%   r   )r^   r_   r&   r   s      @r   test_Semaphorerc      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)	Nr.   r)   )rb   z%^max_values must be >= initial_value$r+   r	   z#^semaphore released too many times$r   )
r0   r1   r2   r`   r4   rb   r5   r:   ra   r;   )bss    r   test_Semaphore_boundedrf      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>rl      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ri   )r
   r=   r   )holder_taskls   r   holderz,test_Lock_and_StrictFIFOLock.<locals>.holder$  sV     ((* 	" 	"/!!	" 	" 	"!	" 	" 	" 	"sS   A!AA!AAAA! A
A!A
A!AAAA!r   r.   r   )lockedweakrefrefr5   rj   r   r;   r:   r>   r0   r1   r9   r
   r$   r%   r   r@   r!   printownerr"   rR   rS   )rg   rrs   r&   r!   rq   rr   s        @@r   test_Lock_and_StrictFIFOLockrz      se     		Axxz 	AA3!8OGtAw&&		  	 	88:G	 	 xxz88:IIKxxz		 iik88:IIKxxz	|	$ 	 IIK	|	$ 			 K" !!# & &w88:6"$&&&xxz]]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)Nr.   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ri   )r   add)rO   rC   finished_waiterss    r   waiterztest_Condition.<locals>.waiterl  sX      	 	&&(NN	 	Q		 	 	 	sQ   A$A	A$AAAA$AA$AA$A!AA!A$rL   r   >   r   r.   r	   r	   )rO   intr   r   )r0   r1   r2   	Conditionr`   StrictFIFOLockLockrt   r   r>   r;   r9   r:   r   notify
notify_allr#   r
   r$   rN   r%   r   r!   rw   r"   lock_statisticsCancelScoperS   )rr   r   r&   rO   r!   scoperC   r~   s         @@r   test_Conditionr   J  s    	y	!  )A, 	y	! ".!"A!Axxzxxz		 iik88:88:Axxz88:	|	$ 	IIK	|	$ ffh 
|	$ 	
 
|	$ 	 u 
 !!# - -wq 	+Avq)(***	+  	 	HHJ	 	xxz$&&&A3&& 	 	LLN	 	$&&&9,,- - u!!#  wq 	+Avq)(***	+  	A 	AHHQKJ*++q00--;;q@@	A 	A ||~--;;q@@$&&&Aq6)) 	 	LLN	 	! * 
			 " 	" 	"LLN"ffhxxz!	" 	"" "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 Nr.   )r   r^   ry   rN   send_nowait)selfcapacity_s      r   __init__zChannelLock1.__init__  sC    ,T28<x!|$ 	%AFFt$	%rm   c                :    | j                   j                  d        y ri   r^   r   r   s    r   r;   zChannelLock1.acquire_nowait      4 rm   c                V   K   | j                   j                  d        d {    y 7 wri   )r^   sendr   s    r   r>   zChannelLock1.acquire  s     ffkk$s   )')c                8    | j                   j                          y ri   ry   receive_nowaitr   s    r   r:   zChannelLock1.release      rm   N)r   r   r   r   r   rj   
__module____qualname__r   r;   r>   r:    rm   r   r   r     s    %
!  rm   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   r^   ry   r   r   s    r   r   zChannelLock2.__init__  s+    ,T2264 rm   c                8    | j                   j                          y ri   r   r   s    r   r;   zChannelLock2.acquire_nowait  r   rm   c                T   K   | j                   j                          d {    y 7 wri   )ry   receiver   s    r   r>   zChannelLock2.acquire  s     ffnns   (&(c                :    | j                   j                  d        y ri   r   r   s    r   r:   zChannelLock2.release  r   rm   Nr   r   r   rm   r   r   r     s    ! !rm   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   r^   ry   acquiredr   s    r   r   zChannelLock3.__init__  s"    ,T215 rm   c                .    | j                   rJ d| _         y NT)r   r   s    r   r;   zChannelLock3.acquire_nowait  s    == rm   c                   K   | j                   r$| j                  j                  d        d {    y d| _         t        j                          d {    y 7 )7 wr   )r   r^   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)ry   r   r
   r@   r   r   s    r   r:   zChannelLock3.release  s=    	"FF!!# 	"== !DM	"s    (AANr   r   r   rm   r   r   r     s    %"rm   r   c                     t        d      S r   )r3   r   rm   r   rl   rl     s    OA rm   c                     t        d      S r   )r`   r   rm   r   rl   rl     s
    IaL rm   c                     t        d      S r   r   r   rm   r   rl   rl     s    L rm   c                     t        d      S r   r   r   rm   r   rl   rl     s
    LO rm   )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   rK   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)Nr.   TF)rN   r
   r   )	lock_liker   LOOPSacquiresin_critical_sections     r   workerz+test_generic_lock_exclusion.<locals>.worker  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$   rN   r%   )	r   WORKERSr   r&   r   r   r   r   r   s	         @@@r   test_generic_lock_exclusionr     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)NrK   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ri   )r   rN   )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+r.   r	   rL   )r   r   r   r   r   r   )r
   r$   r%   rN   )r   r   r   r&   rO   r   r   r   s        @@@r   test_generic_lock_fifo_fairnessr   %  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_takerE  sT     i  	 		 	j!	 	 	 	 	sA   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   )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_byr0   r1   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	
 *))) ) ) ) ) 		 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   d  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:   rT   nextiterr   )
child_taskr   r&   s      r   test_lock_handoverr   u  s&    ))"J99;D 	II
 
$	$ $   " 
E 
Eg4<<($&&& 	 -.!33$9:;
)*5$))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   )rg   ztype[Lock | StrictFIFOLock]r   r   )r   r   r   r   )9
__future__r   r   ru   typingr   r   r   r0   trio.testingr   r    r
   _core._parking_lotr   _sync	_timeoutsr   testingr   r   typing_extensionsr   r'   rE   rI   rP   rX   rc   rf   markparametrizer   r   rz   r   _channelr   r   r   r   r   lock_factorieslock_factory_namesgeneric_lock_testr3   r`   r   __annotations__r   r   r   r   r   r   r   r   rm   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 < <. 	 **"*"*rm   