
    gK                       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T dd	lmZ dd
lmZmZ erd dlmZ d2dZd2dZd2dZd2dZd2dZd2dZd2dZej                             de!e"gd           d3d            Z#d2d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                             d(e+e,          Z-ee.e/e!e"e(e)e*f         Z0d)e1d*<   eg e0f         Z2d)e1d+<   e-d4d,            Z3e-d4d-            Z4e-d4d.            Z5d2d/Z6d2d0Z7d2d1Z8dS )5    )annotationsN)TYPE_CHECKINGCallableUnion)MatcherRaisesGroup   )_core)GLOBAL_PARKING_LOT_BREAKER)*)sleep_forever)assert_checkpointswait_all_tasks_blocked)	TypeAliasreturnNonec                 F  K   t                                                      rJ                                 j        dk    sJ                                                                  sJ t                      5                                   d {V  d d d            n# 1 swxY w Y   t                      g dfd} t          j                    4 d {V }|	                    |            |	                    |            t                       d {V  ddgk    sJ                                 j        dk    sJ                                  t                       d {V  g dk    sJ 	 d d d           d {V  d S # 1 d {V swxY w Y   d S )	Nr   r   r   c                    K                        d                                             d {V                       d           d S )Nsleepingwoken)appendwait)erecords   a/var/www/html/nodeJS/PythonScripts/venv3.11/lib/python3.11/site-packages/trio/_tests/test_sync.pychildztest_Event.<locals>.child#   sJ      j!!!ffhhg    r   r	   )r   r   r   r   r   r   )Eventis_set
statisticstasks_waitingsetr   r   r
   open_nursery
start_soonr   )r   nurseryr   r   s     @@r   
test_Eventr'      s     Axxzz<<>>'1,,,,EEGGG88::			  ffhh               	AF      
 !## D D D D D D Dw5!!!5!!!$&&&&&&&&&*j11111||~~+q0000	$&&&&&&&&&CCCCCCCCD D D D D D D D D D D D D D D D D D D D D D D D D D D D D Ds%    B''B+.B+"BF
FFc                 
  K   t          j        t                    5  t          d           d d d            n# 1 swxY w Y   t          j        t          d          5  t          d           d d d            n# 1 swxY w Y   t          d          } t          |            | j        dk    sJ | j        dk    sJ | j        dk    sJ t          j        t                    5  | 
                                 d d d            n# 1 swxY w Y   | j        dk    sJ |                                  | j        dk    sJ | j        dk    s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  |                                  d d d            n# 1 swxY w Y   | j        dk    sJ t          j        t                    5  |                                  d {V  d d d            n# 1 swxY w Y   | j        dk    sJ t%                      5  |                     d           d {V  d d d            n# 1 swxY w Y   | j        dk    sJ t          j        t          j                  5  |                     d	           d d d            n# 1 swxY w Y   t-          |                                 j                  t          j                    dhk    sJ |                     t          j                               |                                 j        dgk    sJ |                     d           | j        dk    sJ t%                      5  | 4 d {V  | j        dk    sJ 	 d d d           d {V  n# 1 d {V swxY w Y   d d d            n# 1 swxY w Y   t          j                    4 d {V }|                     d
           d {V  |                     d           d {V  |                    | j        d           t5                       d {V  | j        dk    sJ |                                 j        dk    sJ |                     d           | j        dk    sJ t          j        t          j                  5  |                                  d d d            n# 1 swxY w Y   d d d           d {V  n# 1 d {V swxY w Y   |                     d           |                     d
           d S )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   s     	y	!	!                	z)G	H	H	H                AGGG>Q!!!!""""	|	$	$  			              !!!!!!!!""""LLNNE A%%%%""""?u13344444!#### 
|	$	$  	              !!!!	|	$	$  iikk              !!!! 
		 0 0$$Y/////////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 !!!!	u'	(	( 5 5	%%m4445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 q||~~'((U-?-A-A9,MMMMM 5-//000<<>>#	{22229%%%!!!!			 * * 	* 	* 	* 	* 	* 	* 	* 	*$)))))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	** * * * * * * * * * * * * * * !##       w$$Y/////////$$Y/////////119===$&&&&&&&&& A%%%%||~~+q0000	y))) A%%%%]5+,, 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	                           9%%%9%%%%%s   8<<A::A>A>#DDD=GG"%G"H66H:=H:JJJ:KK #K 	O#%O4O#
O	O#O	O##O'*O'CTS:.T:S>	>TS>	T
T!$T!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  |
                                 d d d            n# 1 swxY w Y   |j        dk    sJ |                                 |j        dk    sJ |j        | k    sJ d S )Nr   )infr.   )mathrG   r3   r5   r6   r7   r8   r0   r1   r9   r:   r;   )rG   rC   s     r   test_CapacityLimiter_infrI   x   s1     AGGG>S    !!!!$$$$	|	$	$  			              !!!!!!!!$$$$$$s   'BBBc                   K   t          d          } t          j        t                    5  d| _        d d d            n# 1 swxY w Y   t          j        t
          d          5  d| _        d d d            n# 1 swxY w Y   t          j        t
          d          5  d| _        d d d            n# 1 swxY w Y   | j        dk    sJ t          j                    4 d {V }t          d          D ]1}|	                    | j
        |           t                       d {V  2t          |                                 j                  ddhk    sJ |                                 j        d	k    sJ | xj        dz  c_        t          |                                 j                  h d
k    sJ |                                 j        dk    sJ | xj        d	z  c_        | j        dk    sJ | j        dk    sJ |                     d           |                     d           |                     d           t          |                                 j                  d	hk    sJ |                                 j        dk    sJ |                     d	           t          |                                 j                  dhk    sJ |                                 j        dk    sJ 	 d d d           d {V  d S # 1 d {V swxY w Y   d S )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      s;     A	y	!	!                 
z)G	H	H	H                 
z)G	H	H	H                 >Q!## 1 1 1 1 1 1 1wq 	+ 	+Aq5q999(**********1<<>>+,,A6666||~~+q0000	!1<<>>+,,<<<<||~~+q0000	! A%%%%~""""	q!!!	q!!!	q!!!1<<>>+,,3333||~~+q0000	q!!!1<<>>+,,3333||~~+q00000'1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1sF   ?AA%A99A= A=B33B7:B7$HK::
LLc                   K   t          d          } |                                  d {V  t          j                    4 d {V }|                    | j                   t                       d {V  |j                                         d d d           d {V  n# 1 d {V swxY w Y   t          | j	                  dk    sJ d S )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//////s   AB  
B*-B*c                   K   t          j        t                    5  t          d           d d d            n# 1 swxY w Y   t          j        t          d          5  t          d           d d d            n# 1 swxY w Y   t          d          } t          |            | j        dk    sJ | j        J |                                  | j        dk    sJ | 	                                j
        dk    sJ |                                  | j        dk    sJ t                      5  |                                  d {V  d d d            n# 1 swxY w Y   | j        dk    sJ t          j        t          j                  5  |                                  d d d            n# 1 swxY w Y   |                                  | j        dk    sJ t                      5  | 4 d {V  | j        dk    sJ 	 d d d           d {V  n# 1 d {V swxY w Y   d d d            n# 1 swxY w Y   | j        dk    sJ |                                  g dfd}t          j                    4 d {V }|                    ||            t%                       d {V  dgk    sJ | j        dk    sJ |                                  | j        dk    sJ t          j        t          j                  5  |                                  d d d            n# 1 swxY w Y   d d d           d {V  n# 1 d {V swxY w Y   ddgk    sJ d S )Nr)   z^initial value must be >= 0$r+   r-   r.   r	   r   s	Semaphorer   r   c                   K                        d           |                                  d {V                       d           d S Nstartedfinished)r   r>   )rZ   r   s    r   
do_acquirez"test_Semaphore.<locals>.do_acquire   sQ      i   iikkj!!!!!r   r^   r_   )rZ   r[   r   r   )r0   r1   r2   r[   r4   r5   value	max_valuer:   r!   r"   r;   r   r>   r
   r@   r$   r%   r   )rZ   r`   r&   r   s      @r   test_Semaphorerc      s     	y	!	!  #              	z)H	I	I	I  "              !AGGG7a<<<<;IIKKK7a<<<<<<>>'1,,,,7a<<<<			  iikk              7a<<<<	u'	(	(  	               IIKKK7a<<<<			     	  	  	  	  	  	  	  	 7a<<<<<	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	                               7a<<<<F" " " " " "
 !## 	 	 	 	 	 	 	w:q)))$&&&&&&&&&)$$$$w!||||			w!||||]5+,, 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 i,,,,,,,s   9= =A;;A?A?)EEEF''F+.F+!	H(*H9H(
H	H(H	H((H,/H,5B L35L
L3L	L3L	L33
L= L=c                    t          j        t                    5  t          dd           d d d            n# 1 swxY w Y   t          j        t          d          5  t          dd           d d d            n# 1 swxY w Y   t          dd          } | j        dk    sJ t          |            t          j        t          d          5  |                                  d d d            n# 1 swxY w Y   | j        dk    sJ | 	                                 | j        dk    sJ |                                  | j        dk    sJ d S )	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	R	R " "!q!!!!" " " " " " " " " " " " " " "	1	"	"	"B<1HHH	z)O	P	P	P  


              8q====8q====JJLLL8q======s0   8<<A<<B B C00C47C4lockclsc                    | j         S N)__name__)fns    r   <lambda>rl      s    2; r   )idstype[Lock | StrictFIFOLock]c                ,	  K    |                                              rJ t          j                  } |            u sJ t                     | j        t                    v sJ t                      5  4 d {V                                   sJ t                     d d d           d {V  n# 1 d {V swxY w Y   d d d            n# 1 swxY w Y                                    rJ                                                                   sJ                                                                   rJ t                      5                                   d {V  d d d            n# 1 swxY w Y                                    sJ                                                                   rJ                                  t          j
        t                    5                                   d d d            n# 1 swxY w Y                                    t          j
        t                    5                                   d d d            n# 1 swxY w Y   d dfd}t          j                    4 d {V }                                 rJ |                    |           t                       d {V                                   sJ t          j
        t          j                  5                                   d d d            n# 1 swxY w Y   t          j
        t                    5                                   d d d            n# 1 swxY w Y                                   }t%          |           |j         sJ |j        u sJ |j        dk    sJ |                    |           t                       d {V                                  }t%          |           |j        dk    sJ |j                                         d d d           d {V  n# 1 d {V swxY w Y                                   }|j         rJ |j        J |j        dk    sJ d S )Nr   r   c                    K   t          j                     4 d {V  t                       d {V  d d d           d {V  d S # 1 d {V swxY w Y   d S ri   )r
   r=   r   )holder_taskls   r   holderz,test_Lock_and_StrictFIFOLock.<locals>.holder$  s      (** 	" 	" 	" 	" 	" 	" 	" 	"//!!!!!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s   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      s      			Axxzz 	AA133!8888GGGtAww&&&&			   	 	 	 	 	 	 	 	88::GGG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	               xxzz88::IIKKKxxzz			  iikk              88::IIKKKxxzz	|	$	$  	               IIKKK	|	$	$  			               K" " " " " " " !## & & & & & & &w88::6"""$&&&&&&&&&xxzz]5+,, 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ]<(( 	 	IIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 \\^^
j    ;....'1,,,,6"""$&&&&&&&&&\\^^
j'1,,,,##%%%1& & & & & & & & & & & & & & & & & & & & & & & & & & &4 J    ####q((((((s   <	C&B=+C=
C	C
C	CC!CFFF<HH!$H!I66I:=I:#A4QL8,Q8L<	<Q?L<	 QM=1Q=N	QN	B9Q
QQc                   K   t          j        t                    5  t          t	          d                     d d d            n# 1 swxY w Y   t          j        t                    5  t          t
                     d d d            n# 1 swxY w Y   t                      } t          |           |                                 rJ                                 rJ t                      5  	                                 d {V  d d d            n# 1 swxY w Y   |                                 sJ                                 sJ t                                                      rJ 
                                                                 sJ t          j        t                    5  
                                 d d d            n# 1 swxY w Y                                    t          j        t                    5                                   d {V  d d d            n# 1 swxY w Y   t          j        t                    5                                   d d d            n# 1 swxY w Y   t          j        t                    5                                   d d d            n# 1 swxY w Y   t!                      dfd}t#          j                    4 d {V }t'          d          D ],}|                    ||           t+                       d {V  -4 d {V                                   d d d           d {V  n# 1 d {V swxY w Y                                   sJ t+                       d {V  dhk    sJ 4 d {V                                   d d d           d {V  n# 1 d {V swxY w Y   t+                       d {V  h d	k    sJ 	 d d d           d {V  n# 1 d {V swxY w Y   t!                      t#          j                    4 d {V }t'          d          D ],}|                    ||           t+                       d {V  -4 d {V                      d
                                           }t/          |           |j        dk    sJ |j        j        d
k    sJ 	 d d d           d {V  n# 1 d {V swxY w Y                                   j        j        dk    sJ t+                       d {V  ddhk    sJ 4 d {V                                   d d d           d {V  n# 1 d {V swxY w Y   d d d           d {V  n# 1 d {V swxY w Y   t#          j                    5 }4 d {V  |                                 	                                  d {V                                  sJ n#                                 sJ w xY w	 d d d           d {V  n# 1 d {V swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr.   rO   intr   r   c                   K   4 d {V                                    d {V  d d d           d {V  n# 1 d {V swxY w Y                       |            d S ri   )r   add)rO   rC   finished_waiterss    r   waiterztest_Condition.<locals>.waiterl  s       	 	 	 	 	 	 	 	&&((NNNNNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	Qs   9
AArL   r   >   r   r.   r	   r	   )rO   r|   r   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xxzzxxzz			  iikk              88::88::Axxzz88::	|	$	$  	              IIKKK	|	$	$  ffhh               
|	$	$  	


               
|	$	$  	               uu             
 !## - - - - - - -wq 	+ 	+Avq)))(********** 	 	 	 	 	 	 	 	HHJJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	xxzz$&&&&&&&&&A3&&&& 	 	 	 	 	 	 	 	LLNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	$&&&&&&&&&999,,,,,- - - - - - - - - - - - - - - - - - - - - - - - - - - uu!##       wq 	+ 	+Avq)))(********** 	A 	A 	A 	A 	A 	A 	A 	AHHQKKKJ*+q0000-;q@@@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A ||~~-;q@@@@$&&&&&&&&&Aq6)))) 	 	 	 	 	 	 	 	LLNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	!                          * 
			 " 	" 	" 	" 	" 	" 	" 	" 	"LLNNN"ffhhxxzz!!!!qxxzz!!!!!!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"" " " " " " " " " " " " " " " " " "s  AAA+BBB.DDD3GGGH33H7:H7I88I<?I<J==KK6AP;M"P"
M,	,P/M,	0>P.OP
O	P"O	#!P
P!$P!AV$AS?-V$?
T			V$T		AV$V/V$
V	V$V	V$$
V.1V.	Y$Y'XYX00Y4Y$
Y	Y$Y	Y$$Y(+Y()open_memory_channel)AsyncContextManagerMixinc                  .    e Zd Zd
dZddZddZddZd	S )ChannelLock1capacityr|   r   r   c                    t          d          |          \  | _        | _        t          |dz
            D ]}| j                            d            d S Nr.   )r   rZ   ry   rN   send_nowait)selfr   _s      r   __init__zChannelLock1.__init__  sZ    ,T28<<x!|$$ 	% 	%AFt$$$$	% 	%r   c                :    | j                             d            d S ri   rZ   r   r   s    r   r;   zChannelLock1.acquire_nowait      4     r   c                J   K   | j                             d            d {V  d S ri   )rZ   sendr   s    r   r>   zChannelLock1.acquire  s2      fkk$r   c                8    | j                                          d S ri   ry   receive_nowaitr   s    r   r:   zChannelLock1.release      r   N)r   r|   r   r   r   rj   
__module____qualname__r   r;   r>   r:    r   r   r   r     sd        % % % %
! ! ! !                  r   r   c                  .    e Zd ZddZddZddZddZdS )	ChannelLock2r   r   c                ~    t          d          d          \  | _        | _        | j                            d            d S N
   )r   rZ   ry   r   r   s    r   r   zChannelLock2.__init__  s8    ,T22664     r   c                8    | j                                          d S ri   r   r   s    r   r;   zChannelLock2.acquire_nowait  r   r   c                H   K   | j                                          d {V  d S ri   )ry   receiver   s    r   r>   zChannelLock2.acquire  s0      fnnr   c                :    | j                             d            d S ri   r   r   s    r   r:   zChannelLock2.release  r   r   Nr   r   r   r   r   r   r     sd        ! ! ! !          ! ! ! ! ! !r   r   c                  .    e Zd ZddZddZddZddZdS )	ChannelLock3r   r   c                X    t          d          d          \  | _        | _        d| _        d S )Nr   F)r   rZ   ry   acquiredr   s    r   r   zChannelLock3.__init__  s)    ,T2155 r   c                &    | j         rJ d| _         d S NT)r   r   s    r   r;   zChannelLock3.acquire_nowait  s    =   r   c                   K   | j         r"| j                            d            d {V  d S d| _         t          j                     d {V  d S r   )r   rZ   r   r
   
checkpointr   s    r   r>   zChannelLock3.acquire  sj      = 	%&++d########### DM"$$$$$$$$$$$r   c                    	 | j                                          d S # t          j        $ r | j        sJ d| _        Y d S w xY w)NF)ry   r   r
   r@   r   r   s    r   r:   zChannelLock3.release  sZ    	"F!!##### 	" 	" 	"=   !DMMMM	"s    A A Nr   r   r   r   r   r   r     sd              % % % %" " " " " "r   r   c                      t          d          S r   )r3   r   r   r   rl   rl     s    OA r   c                      t          d          S r   )r[   r   r   r   rl   rl     s    IaLL r   c                      t          d          S r   r   r   r   r   rl   rl     s    L r   c                      t          d          S r   r   r   r   r   rl   rl     s    LOO r   )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 {V } |             }t          |          D ]}|                    ||           	 d d d           d {V  n# 1 d {V swxY w Y   rJ |z  k    sJ d S )Nr   rK   Fr   	lock_liker   r   r   c                  K   t                    D ]q}| 4 d {V  dz  rJ dt          j                     d {V  t          j                     d {V  sJ dd d d           d {V  n# 1 d {V swxY w Y   rd S )Nr.   TF)rN   r
   r   )r   r   LOOPSacquiresin_critical_sections     r   workerz+test_generic_lock_exclusion.<locals>.worker  sK     u 	, 	,A  , , , , , , , ,A....&*#&(((((((((&(((((((((****&+#, , , , , , , , , , , , , , , , , , , , , , , , , , ,	, 	,s   AA33
A=	 A=	)r   r   r   r   )r
   r$   rN   r%   )	r   WORKERSr   r&   r   r   r   r   r   s	         @@@r   test_generic_lock_exclusionr     sj     EGH
, 
, 
, 
, 
, 
, 
, 
, !## 2 2 2 2 2 2 2w LNN	w 	2 	2Avy1111	22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 #"""uw&&&&&&s   3A55
A?A?c                  K   g g ddfd} |             }t          j                    4 d {V }|                    |d	|           |                    |d
|           |                    |d|           d d d           d {V  n# 1 d {V swxY w Y   t                    D ]}d|z  d|d	z   z           k    sJ d S )NrK   namer|   r   r   r   r   c                   K                        |            t                    D ]C}|4 d {V                       |            d d d           d {V  n# 1 d {V swxY w Y   Dd S ri   )r   rN   )r   r   r   r   initial_orderr   s      r   loopyz.test_generic_lock_fifo_fairness.<locals>.loopy+  s     T"""u 	$ 	$A  $ $ $ $ $ $ $ $d###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $	$ 	$s   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 0 0 0 0 0 0w5!Y///5!Y///5!Y///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5\\ < <a!ea1q5k)*m;;;;;< <s   AB
BBc                d  K    |             g dfd}t          j                    4 d {V }                                 |                    |           t	                       d {V  dgk    sJ                                  d d d           d {V  d S # 1 d {V swxY w Y   d S )Nr   r   c                    K                        d            4 d {V  	 d d d           d {V  n# 1 d {V swxY w Y                        d           d S r]   )r   )r   r   s   r   
lock_takerzCtest_generic_lock_acquire_nowait_blocks_acquire.<locals>.lock_takerE  s      i    	 	 	 	 	 	 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	j!!!!!s   5
??r^   r   )r
   r$   r;   r%   r   r:   )r   r   r&   r   r   s      @@r   /test_generic_lock_acquire_nowait_blocks_acquirer   =  sr      IF" " " " " " " !##       w  """:&&&$&&&&&&&&&)$$$$                             s   AB
B),B)c                 (  K   t           rJ t                                          } t                                          4 d{V }|                    | j                   ddd          d{V  n# 1 d{V swxY w Y   t          j        t          | j	        j
        d                             }t          j        t          j        d| d          5  |                                  d{V  ddd           n# 1 swxY w Y   t           rJ dS )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<((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )	#di1!45566I	 KyKKK
 
 
   llnn	              
 *)))))s$   A11
A;>A;C>>DDc                   K   t           rJ t                                          } t          t	          t          j        d                    5  t                                          4 d{V }|                    | j                   |                    | j                   ddd          d{V  n# 1 d{V swxY w Y   ddd           n# 1 swxY w Y   t           rJ dS )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|,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-- - - - - - - - - - - - - - - *)))))s6    C-5B4"C4
B>	>CB>	CCCc                   K   t           rJ d } t                                          }|                                 t	          j                    |j        git           k    sJ t                                          4 d {V }|                    |j	                   t                       d {V  |                                 t          t                     dk    sJ t          t          t                               } t           |          |j        gk    sJ 	 d d d           d {V  n# 1 d {V swxY w Y   |j        j        | gk    sJ t           rJ d S 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 	I
 
$	$ $ $ $   "" 
E 
E 
E 
E 
E 
E 
Eg4<((($&&&&&&&&& 	 -..!3333$9::;;
)*5$)DDDDD
E 
E 
E 
E 
E 
E 
E 
E 
E 
E 
E 
E 
E 
E 
E 
E 
E 
E 
E 
E 
E 
E 
E 
E 
E 
E 
E 9:,....))))))s    BD**
D47D4r   )rg   rn   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   r   r   <module>r      s   " " " " " " " 				  1 1 1 1 1 1 1 1 1 1  - - - - - - - -       ; ; ; ; ; ;     % % % % % % @ @ @ @ @ @ @ @ ,++++++D D D D<B& B& B& B&J% % % % !1 !1 !1 !1J0 0 0 0-- -- -- --`   " T>$:@V@VWWJ) J) J) XWJ)ZQ" Q" Q" Q"h + * * * * * , , , , , ,         +       ! ! ! ! !+ ! ! !" " " " "+ " " "8 		 	 	  K++ ,         ""h,/ / / / /
 ' ' ' '8 < < < <.    ** * * *"* * * *"* * * * * *r   