
    /hh                        S SK r S SKrS SKrS SKJrJr  S SKrS SKrS SKrS SK	J
r
  S SKJr  \R                  " \
R                  S5      rS r " S S\5      r " S	 S
\R&                  5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      rg)    N)start_new_threadTIMEOUT_MAX)support)threading_helperz9platform doesn't support fork (no _at_fork_reinit method)c                 6    [         R                  " SU -  5        g )N{Gz?)timesleep)nthreads    8/opt/python-3.13.8/usr/lib/python3.13/test/lock_tests.pywait_threads_blockedr      s     	JJuw    c                   6    \ rS rSrS	S jrS rS rS rS rSr	g)
Bunch   c                 l    Xl         X l        / U l        / U l        / U l        U(       + U l        S U l        g N)funcr   startedfinished
exceptions	_can_exit_wait_thread)selfr   r   wait_before_exits       r   __init__Bunch.__init__    s5     	-- r   c                 X   [         R                  " 5       nU R                  R                  U5         U R	                  5         U R                  R                  U5        [        R                  " [        R                  5       H  nU R                  (       d  M    g    g ! [
         a%  nU R                  R                  U5         S nANS nAff = f! U R                  R                  U5        [        R                  " [        R                  5       H  nU R                  (       d  M    f    f = fr   )	threading	get_identr   appendr   BaseExceptionr   r   r   sleeping_retrySHORT_TIMEOUTr   )r   tidexc_s       r   task
Bunch.task.   s    !!#C 	IIK MM  %++G,A,AB>>> C	  	(OO""3''	( MM  %++G,A,AB>>> Cs0   B 
C&CC CC AD)$D)c                    [         R                  " [        R                  5      U l        U R                  R                  5          [        U R                  5       H  n[        U R                  S5        M     [        R                  " [        R                  5       H)  n[        U R                  5      U R                  :  d  M(    U $    U $ !   SU l
        e = f)N T)r   wait_threads_exitr   r$   r   	__enter__ranger   r   r(   r   r#   lenr   )r   r'   s     r   r-   Bunch.__enter__;   s    ,>>w?T?TU##%	4<<( B/ ) ''(=(=>A4<< DLL0	 ? 	!DNs   2C
 

Cc                 D   [         R                  " [         R                  5       H(  n[        U R                  5      U R
                  :  d  M(    O   U R                  R                  S S S 5        U R                  nS U l        U(       a  [        U R                   S3U5      eg )Nz threads raised exceptions)r   r#   r$   r/   r   r   r   __exit__r   ExceptionGroupr   )r   exc_type	exc_value	tracebackr'   r   s         r   r2   Bunch.__exit__L   s    ''(=(=>A4==!T\\1 ?
 	""4t4 __
 DII;.H!I!+- - r   c                     SU l         g NT)r   r   s    r   	do_finishBunch.do_finish[   s	    r   )r   r   r   r   r   r   r   N)F)
__name__
__module____qualname____firstlineno__r   r(   r-   r2   r;   __static_attributes__r+   r   r   r   r      s    !"-r   r   c                   &    \ rS rSrS rS rS rSrg)BaseTestCase_   c                 8    [         R                  " 5       U l        g r   )r   threading_setup_threadsr:   s    r   setUpBaseTestCase.setUp`   s    (88:r   c                 h    [         R                  " U R                  6   [        R                  " 5         g r   )r   threading_cleanuprG   r   reap_childrenr:   s    r   tearDownBaseTestCase.tearDownc   s     **DMM:r   c                 T    U R                  XS-  5        U R                  XS-  5        g )Ng333333?g      $@)assertGreaterEqual
assertLess)r   actualexpecteds      r   assertTimeoutBaseTestCase.assertTimeoutg   s&     	3740r   )rG   N)r=   r>   r?   r@   rH   rM   rT   rA   r+   r   r   rC   rC   _   s    ; 1r   rC   c                   h    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rSrg)BaseLockTestsp   c                     [         R                  " [         R                  5       H  n[        U5      U:  d  M    O   U R	                  [        U5      U5        g r   )r   r#   r$   r/   assertEqual)r   phaserS   r'   s       r   
wait_phaseBaseLockTests.wait_phaseu   sB    ''(=(=>A5zX% ? 	UX.r   c                 &    U R                  5       nAg r   )locktyper   locks     r   test_constructorBaseLockTests.test_constructor{   s    }}r   c                 \    U R                  5       nU R                  [        U5      S5        Ag )Nz<unlocked .* object (.*)?at .*>)r_   assertRegexreprr`   s     r   	test_reprBaseLockTests.test_repr   s%    }}d%FGr   c                 |    U R                  5       nUR                  5         U R                  [        U5      S5        Ag )Nz<locked .* object (.*)?at .*>)r_   acquirere   rf   r`   s     r   test_locked_reprBaseLockTests.test_locked_repr   s.    }}d%DEr   c                 F    U R                  5       nUR                  5         Ag r   )r_   rj   r`   s     r   test_acquire_destroy"BaseLockTests.test_acquire_destroy   s    }}r   c                 f    U R                  5       nUR                  5         UR                  5         Ag r   r_   rj   releaser`   s     r   test_acquire_release"BaseLockTests.test_acquire_release   s"    }}r   c                     U R                  5       nU R                  UR                  S5      5        UR                  5         g NF)r_   
assertTruerj   rr   r`   s     r   test_try_acquireBaseLockTests.test_try_acquire   s+    }}U+,r   c                    ^^ U R                  5       mTR                  5         / mUU4S jn[        US5          S S S 5        U R                  TS   5        TR	                  5         g ! , (       d  f       N3= f)Nc                  F   > TR                  T R                  S5      5        g rv   r!   rj   ra   results   r   f3BaseLockTests.test_try_acquire_contended.<locals>.f   s    MM$,,u-.r      r   )r_   rj   r   assertFalserr   r   r   ra   r~   s     @@r   test_try_acquire_contended(BaseLockTests.test_try_acquire_contended   sU    }}	/1a[ # [s   A''
A5c                 j  ^ U R                  5       mTR                  5         U4S jnSn[        X5       n[        U5        U R	                  [        UR                  5      S5        TR                  5         S S S 5        U R	                  [        WR                  5      U5        g ! , (       d  f       N4= f)Nc                  F   > T R                  5         T R                  5         g r   rj   rr   ra   s   r   r   /BaseLockTests.test_acquire_contended.<locals>.f       LLNLLNr      r   )r_   rj   r   r   rZ   r/   r   rr   )r   r   Nbunchra   s       @r   test_acquire_contended$BaseLockTests.test_acquire_contended   s    }}	 1[E #S0!4 LLN  	U^^,a0 [s   AB$$
B2c                   ^ U R                  5       mU4S jnSU4S jjnT    S S S 5        [        US5          S S S 5        U R                  [        5         T   [        e! , (       d  f       NC= f! , (       d  f       N>= f! , (       d  f       O= f S S S 5        O! , (       d  f       O= f[        US5          S S S 5        g ! , (       d  f       g = f)Nc                  F   > T R                  5         T R                  5         g r   r   r   s   r   r   "BaseLockTests.test_with.<locals>.f   r   r   c                 J   > T   U b  U e S S S 5        g ! , (       d  f       g = fr   r+   )errra   s    r   	with_lock*BaseLockTests.test_with.<locals>.with_lock   s    ?I # s   
"r   r   )r_   r   assertRaises	TypeError)r   r   r   ra   s      @r   	test_withBaseLockTests.test_with   s    }}		   1a[  y) T [
  *)) 1a[ [[s@   A!A2BB!
A/2
B 
B	B
B,;C
Cc                    ^ U R                  5       mU4S jn[        US5          S S S 5        g ! , (       d  f       g = f)Nc                  F   > T R                  5         T R                  5         g r   r   r   s   r   r   )BaseLockTests.test_thread_leak.<locals>.f   r   r      )r_   r   r   r   ra   s     @r   test_thread_leakBaseLockTests.test_thread_leak   s-     }}	 1b\ \\s   /
=c                   ^^ U R                  5       mU R                  [        TR                  SS5        U R                  [        TR                  SS9  U R                  [        TR                  SS9  U R                  [        TR                  [
        S-   S9  TR                  [
        S9  TR                  5         [        R                  " 5       nU R                  TR                  SS95        [        R                  " 5       nU R                  X!-
  S5        / mUU4S jn[        US5          S S S 5        U R                  TS   5        U R                  TS   S	5        g ! , (       d  f       N8= f)
NFr   itimeoutg}Ô%ITr   c                     > [         R                  " 5       n TR                  TR                  SS95        [         R                  " 5       nTR                  X-
  5        g )N      ?r   )r	   	monotonicr!   rj   )t1t2ra   resultss     r   r   %BaseLockTests.test_timeout.<locals>.f   s@    !BNN4<<<45!BNN27#r   r   r   )r_   r   
ValueErrorrj   OverflowErrorr   rr   r	   r   rw   rQ   r   r   rT   )r   r   r   r   ra   r   s       @@r   test_timeoutBaseLockTests.test_timeout   s   }}*dllE1=*dllDA-uE-{QO[)^^Q/0^^#	$
 1a[ $71:s+ [s   -E!!
E/c                 |    U R                  5       n[        R                  " U5      nU R                  U" 5       5        g r   )r_   weakrefrefassertIsNotNoner   ra   r   s      r   test_weakref_exists!BaseLockTests.test_weakref_exists   s+    }}kk$SU#r   c                     U R                  5       n[        R                  " U5      nA[        R                  " 5         U R                  U" 5       5        g r   )r_   r   r   gccollectassertIsNoner   s      r   test_weakref_deleted"BaseLockTests.test_weakref_deleted  s7    }}kk$


#% r   r+   N)r=   r>   r?   r@   r\   rb   rg   rk   rn   rs   rx   r   r   r   r   r   r   r   rA   r+   r   r   rW   rW   p   sH    
/


	1$:,6$
!r   rW   c                   6    \ rS rSrS rS rS r\S 5       rSr	g)	LockTestsi	  c                   ^^ U R                  5       m/ mUU4S jn[        R                  " 5          [        US5        U R	                  TS5        TR                  5         U R	                  TS5        S S S 5        g ! , (       d  f       g = f)Nc                     > T R                  5         TR                  S 5        T R                  5         TR                  S 5        g r   rj   r!   )ra   r[   s   r   r   #LockTests.test_reacquire.<locals>.f  s-    LLNLLLLNLLr   r+   r      )r_   r   r,   r   r\   rr   r   r   ra   r[   s     @@r   test_reacquireLockTests.test_reacquire  sc    }}	 //1Q#OOE1% LLNOOE1% 211s   AA;;
B	c                    ^ U R                  5       mTR                  5         U4S jn[        US5          S S S 5        TR                  5         TR                  5         g ! , (       d  f       N/= f)Nc                  &   > T R                  5         g r   )rr   r   s   r   r   *LockTests.test_different_thread.<locals>.f&      LLNr   r   )r_   rj   r   rr   r   s     @r   test_different_threadLockTests.test_different_thread"  sG    }}	1a[  [s   A
A-c                    U R                  5       nUR                  5         U R                  UR                  SS95        UR                  5         U R                  UR	                  5       5        U R                  UR                  SS95        g )Nr   r   F)blocking)r_   rj   r   rr   lockedrw   r`   s     r   test_state_after_timeout"LockTests.test_state_after_timeout-  se     }}d34'e45r   c                     S nU R                  5       nUR                  5         U" U5        U R                  5       nUR                  5         UR                  5         U" U5        g )Nc                 D    U R                  5         U R                  5         g r   r   r   s    r   use_lock/LockTests.test_at_fork_reinit.<locals>.use_lock9  s     LLNLLNr   )r_   _at_fork_reinitrj   )r   r   ra   lock2s       r   test_at_fork_reinitLockTests.test_at_fork_reinit7  sP    	 }} r   r+   N)
r=   r>   r?   r@   r   r   r   requires_forkr   rA   r+   r   r   r   r   	  s%    
&(	6  r   r   c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)

RLockTestsiK  c                     U R                  5       nUR                  5         UR                  5         UR                  5         UR                  5         UR                  5         UR                  5         g r   rq   r`   s     r   r   RLockTests.test_reacquireO  sC    }}r   c                 d   U R                  5       nU R                  [        UR                  5        UR	                  5         UR	                  5         UR                  5         UR	                  5         UR                  5         UR                  5         U R                  [        UR                  5        g r   )r_   r   RuntimeErrorrr   rj   r`   s     r   test_release_unacquired"RLockTests.test_release_unacquiredX  sk    }},5,5r   c                 d   U R                  5       nU R                  [        UR                  5        UR	                  5         UR	                  5         UR                  5         UR	                  5         UR                  5         UR                  5         U R                  [        UR                  5        g r   )r_   r   r   _release_saverj   rr   r`   s     r   test_release_save_unacquired'RLockTests.test_release_save_unacquiredd  so    }},(:(:;,(:(:;r   c                   ^ ^^ T R                  5       mT R                  STR                  5       5        TR                  5         T R                  STR                  5       5        TR                  5         TR                  5         T R                  STR                  5       5        TR	                  5         T R                  STR                  5       5        TR	                  5         TR	                  5         T R                  STR                  5       5        / mUUU 4S jn[
        R                  " 5          [        US5        T R                  TS5        T R                  STR                  5       5        TR                  S 5        T R                  TS5        T R                  STR                  5       5        S S S 5        g ! , (       d  f       g = f)Nr   r      r   c                     > T R                  5         TR                  S 5        TR                  TS5        T R                  5         TR                  S 5        g )Nr   )rj   r!   r\   rr   )ra   r[   r   s   r   r   *RLockTests.test_recursion_count.<locals>.f  s;    LLNLLOOE1%LLNLLr   r+   )
r_   rZ   _recursion_countrj   rr   r   r,   r   r\   r!   r   s   ` @@r   test_recursion_countRLockTests.test_recursion_countp  sK   }}D1134D1134D1134D1134D1134	 //1Q#OOE1%Q 5 5 78 LLOOE1%Q 5 5 78 211s   3BF>>
Gc                   ^ U R                  5       mU4S jn[        USS5       n U R                  [        TR                  5        UR                  5          S S S 5        g ! UR                  5         f = f! , (       d  f       g = f)Nc                  &   > T R                  5         g r   )rj   r   s   r   r   +RLockTests.test_different_thread.<locals>.f  r   r   r   T)r_   r   r   r   rr   r;   )r   r   r   ra   s      @r   r    RLockTests.test_different_thread  se    }}	 1a%"!!,=!	  !	 s"   A6 A!A6!A33A66
Bc                 f  ^^ U R                  5       mU R                  TR                  5       5        TR                  5         U R	                  TR                  5       5        TR                  5         U R	                  TR                  5       5        / mUU4S jn[        US5          S S S 5        U R                  TS   5        TR                  5         U R	                  TR                  5       5        TR                  5         U R                  TR                  5       5        g ! , (       d  f       N= f)Nc                  D   > TR                  T R                  5       5        g r   )r!   	_is_ownedr}   s   r   r   $RLockTests.test__is_owned.<locals>.f  s    MM$..*+r   r   r   )r_   r   r   rj   rw   r   rr   r   s     @@r   test__is_ownedRLockTests.test__is_owned  s    }})*()()	,1a[ #())* [s   %D""
D0r+   N)r=   r>   r?   r@   r   r   r   r   r   r   rA   r+   r   r   r   r   K  s!    
6
<!9F
"+r   r   c                   H    \ rS rSrS rS rS rS rS r\	S 5       r
S rS	rg
)
EventTestsi  c                    U R                  5       nU R                  UR                  5       5        UR                  5         U R	                  UR                  5       5        UR                  5         U R	                  UR                  5       5        UR                  5         U R                  UR                  5       5        UR                  5         U R                  UR                  5       5        g r   )	eventtyper   is_setsetrw   clearr   evts     r   test_is_setEventTests.test_is_set  s    nn&	

%	

%		&		&r   c                 4  ^^^ Sn/ m/ mUUU4S jn[        X25         [        U5        U R                  [        T5      S5        TR	                  5         S S S 5        U R                  TS/U-  5        U R                  TS/U-  5        g ! , (       d  f       N;= f)Nr   c                     > TR                  T R                  5       5        TR                  T R                  5       5        g r   )r!   wait)r  results1results2s   r   r   #EventTests._check_notify.<locals>.f  s'    OOCHHJ'OOCHHJ'r   r   T)r   r   rZ   r/   r   )r   r  r   r   r  r  s    `  @@r   _check_notifyEventTests._check_notify  s    	( 1[ #S]A. GGI  	D6A:.D6A:. [s   7B		
Bc                     U R                  5       nU R                  U5        UR                  5         UR                  5         U R                  U5        g r   )r   r
  r   r   r   s     r   test_notifyEventTests.test_notify  s<    nn3			3r   c                   ^^^ U R                  5       m/ m/ mSnUUU4S jn[        X!5          S S S 5        U R                  TS/U-  5        T H(  u  p4U R                  U5        U R	                  US5        M*     / m/ mTR                  5         [        X!5          S S S 5        U R                  TS/U-  5        T H  u  p4U R                  U5        M     g ! , (       d  f       N= f! , (       d  f       NR= f)Nr   c                     > TR                  TR                  S5      5        [        R                  " 5       n TR                  S5      n[        R                  " 5       nTR                  XU -
  45        g )Ng        r   )r!   r  r	   r   )r   rr   r  r  r  s      r   r   "EventTests.test_timeout.<locals>.f  sN    OOCHHSM*!BA!BOOQRL)r   Fr   T)r   r   rZ   r   rT   r   rw   )r   r   r   r  dtr  r  r  s        @@@r   r   EventTests.test_timeout  s    nn	* 1[  	E7Q;/EAQr3' 
 	1[  	D6A:.EAOOA ! [ [s   CC(
C%(
C6c                 
  ^^ U R                  5       m/ mUU4S jnSn[        X5         [        U5        TR                  5         TR	                  5         S S S 5        U R                  TS/U-  5        g ! , (       d  f       N%= f)Nc                  b   > TR                  T R                  [        R                  5      5        g r   )r!   r  r   LONG_TIMEOUT)eventr   s   r   r   (EventTests.test_set_and_clear.<locals>.f  s    NN5::g&:&:;<r   r   T)r   r   r   r   r   rZ   )r   r   r   r  r   s      @@r   test_set_and_clearEventTests.test_set_and_clear  sj      	= 1[ # IIKKKM  	4&1*- [s   ,A44
Bc                    U R                  5       nUR                     U R                  UR                  R                  S5      5        S S S 5        UR	                  5         UR                     U R                  UR                  R                  S5      5        S S S 5        g ! , (       d  f       N^= f! , (       d  f       g = frv   )r   _condr   rj   r   r   s     r   r   EventTests.test_at_fork_reinit  s     nnYYSYY..u56 YYSYY..u56 Y Y Ys   +B ,+B1 
B.1
B?c                     U R                  5       nU R                  [        U5      S5        UR                  5         U R                  [        U5      S5        g )Nz<\w+\.Event at .*: unset>z<\w+\.Event at .*: set>)r   re   rf   r   r   s     r   rg   EventTests.test_repr  sA    nnc$@A	c$>?r   r+   N)r=   r>   r?   r@   r  r
  r  r   r  r   r   rg   rA   r+   r   r   r   r     s5    

'/( >.& 7 7@r   r   c                   D    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
rg)ConditionTestsi"  c                    U R                  5       nUR                  5         UR                  5         UR                  5         UR                  5         [        R                  " 5       nU R                  U5      nUR                  5         U R                  UR                  S5      5        UR                  5         U R                  UR                  S5      5        U R                  UR                  S5      5        UR                  5         U   U R                  UR                  S5      5        S S S 5        g ! , (       d  f       g = frv   )condtyperj   rr   r   Lockr   rw   )r   condra   s      r   test_acquireConditionTests.test_acquire'  s    }} 	~~}}T"e,-U+,e,-T\\%01 TTs   	!D33
Ec                 d    U R                  5       nU R                  [        UR                  5        g r   )r$  r   r   r  r   r&  s     r   test_unacquired_wait#ConditionTests.test_unacquired_wait:  s!    }},		2r   c                 d    U R                  5       nU R                  [        UR                  5        g r   )r$  r   r   notifyr*  s     r   test_unacquired_notify%ConditionTests.test_unacquired_notify>  s!    }},4r   c                 X  ^^^^	^
 / m/ m	/ m
SmUUUU	U
4S jnSn[        X#5         [        R                  " [        R                  5       H  n[	        T5      U:  d  M    O   TR                  5         U R                  T	/ 5        SnTR                  5         TR                  U5        [        U5        SmTR                  5         [        R                  " [        R                  5       H  n[	        T	5      U:  d  M    O   U R                  T	S/U-  5        U R                  T
/ 5        [        R                  " [        R                  5       H  n[	        T5      U:  d  M    O   TR                  5         TR                  S5        [        U5        SmTR                  5         [        R                  " [        R                  5       H"  n[	        T	5      [	        T
5      -   X5-   :  d  M"    O   X5-
  nU R                  T	S/U-  S/U-  -   5        U R                  T
S/U-  5        [        R                  " [        R                  5       H  n[	        T5      U:  d  M    O   TR                  5         TR                  5         [        U5        SmTR                  5         [        R                  " [        R                  5       H  n[	        T
5      U:  d  M    O   U R                  T	S/U-  S/U-  -   5        U R                  T
S/U-  S	/U-  -   5        S S S 5        g ! , (       d  f       g = f)
Nr   c                  V  > TR                  5         TR                  T5        TR                  5       n TR                  5         TR                  U T45        TR                  5         TR                  T5        TR                  5       n TR                  5         TR                  U T45        g r   )rj   r!   r  rr   )r~   r&  	phase_numreadyr  r  s    r   r   'ConditionTests._check_notify.<locals>.fR  sw    LLNLL#YY[FLLNOOVY/0LLNLL#YY[FLLNOOVY/0r   r   r   r   )Tr   r   )Tr   )Tr   )r   r   r#   r$   r/   r   rZ   rj   r.  r   rr   
notify_all)r   r&  r   r   r'   count1count2r3  r4  r  r  s    `     @@@@r   r
  ConditionTests._check_notifyB  s    		1 	1 1[ ++G,A,ABu:? C KKMXr* FLLNKK ( ILLN++G,A,ABx=F* C X	{V';<Xr* ++G,A,ABu:' C
 LLNKKN # ILLN++G,A,ABx=3x=0QZ@ C ZFX	{V';ykF>R'RSX	{V';< ++G,A,ABu:? C
 LLNOO # ILLN++G,A,ABx=A% C X	{V';ykF>R'RSX	{V';ykF>R'RSA [[s4   5LBL<A L BL(A/LA5L>L
L)c                 h    U R                  5       nU R                  U5        U R                  U5        g r   )r$  r
  r*  s     r   r  ConditionTests.test_notify  s)    }}4 4 r   c                 $  ^^^ U R                  5       mSm/ mUUU4S jnSn[        X5          S S S 5        U R                  [        T5      U5        T H(  u  p4U R	                  UT5        U R                  U5        M*     g ! , (       d  f       NX= f)Nr   c                     > TR                  5         [        R                  " 5       n TR                  T5      n[        R                  " 5       nTR	                  5         TR                  X -
  U45        g r   )rj   r	   r   r  rr   r!   )r   r~   r   r&  r   r   s      r   r   &ConditionTests.test_timeout.<locals>.f  sN    LLN!BYYw'F!BLLNNNBGV,-r   r   )r$  r   rZ   r/   rT   r   )r   r   r   r  r~   r&  r   r   s        @@@r   r   ConditionTests.test_timeout  s{    }}	. 1[ Wq)!JBr7+ V$ "	 [s   B
Bc                 >  ^ ^^ T R                  5       mSmUU U4S jn[        US5         [        S5       H9  n[        R                  " S5        T   TS-  mTR                  5         S S S 5        M;     S S S 5        g ! , (       d  f       MU  = f! , (       d  f       g = f)Nr   c                     > T   TR                  U4S j5      n TR                  U 5        TR                  TS5        S S S 5        g ! , (       d  f       g = f)Nc                     > T S:H  $ N   r+   states   r   <lambda>8ConditionTests.test_waitfor.<locals>.f.<locals>.<lambda>  s	    uzr   rD  )wait_forrw   rZ   )r~   r&  r   rF  s    r   r   &ConditionTests.test_waitfor.<locals>.f  s;    '9:'  * s   9A
Ar   rD  r   )r$  r   r.   r	   r
   r.  )r   r   ir&  rF  s   `  @@r   test_waitforConditionTests.test_waitfor  sp    }}	+ 1a[1X

5!QJEKKM T  [ T [s#   'BA<'B<
BB
Bc                 |  ^ ^^^ T R                  5       mSm/ mUU UU4S jn[        US5         [        S5       H9  n[        R                  " S5        T   TS-  mTR                  5         S S S 5        M;     S S S 5        T R                  [        T5      S5        g ! , (       d  f       Mp  = f! , (       d  f       N<= f)Nr   c                  (  > T   [         R                  " 5       n TR                  U4S jSS9n[         R                  " 5       U -
  n TR                  U5        TR	                  U S5        TR                  S 5        S S S 5        g ! , (       d  f       g = f)Nc                     > T S:H  $ rC  r+   rE  s   r   rG  @ConditionTests.test_waitfor_timeout.<locals>.f.<locals>.<lambda>  s	    qr   皙?r   )r	   r   rI  r   rT   r!   )r  r~   r&  r   rF  successs     r   r   .ConditionTests.test_waitfor_timeout.<locals>.f  sj    ^^%'8#F^^%*  (""2s+t$ s   A6B
Br   r   r   )r$  r   r.   r	   r
   r.  rZ   r/   )r   r   rK  r&  rF  rS  s   `  @@@r   test_waitfor_timeout#ConditionTests.test_waitfor_timeout  s    }}	% 	% 1a[1X

5!QJEKKM T   	Wq)	 T	 [s#   'B-B+B-
B*%B--
B;r+   N)r=   r>   r?   r@   r'  r+  r/  r
  r  r   rL  rU  rA   r+   r   r   r"  r"  "  s-    
2&35`TD!%4" *r   r"  c                   P    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rSrg)BaseSemaphoreTestsi  c                     U R                  [        U R                  SS9  U R                  [        U R                  [        R                  * S9  g )N)value)r   r   semtypesysmaxsizer:   s    r   rb   #BaseSemaphoreTests.test_constructor  s:    *dllB?*dllS[[LIr   c                    U R                  S5      nUR                  5         UR                  5         U R                  S5      nUR                  5         UR                  5         UR                  5         UR                  5         g )Nr   r   )r\  rj   rr   r   sems     r   r'  BaseSemaphoreTests.test_acquire  sR    ll1oll1or   c                 F    U R                  5       nUR                  5         Ag r   )r\  rj   ra  s     r   rn   'BaseSemaphoreTests.test_acquire_destroy  s    llnr   c                 @  ^
^^^^ SnU R                  U5      mTR                  5         / m/ m/ mSm
U
UUUU4S jnUU4S jnSn[        X$5         US-
  nU" U5        U R                  TT-   S/U-  5        Sm
[	        U5       H  nTR                  5         M     UnU" XW-   5        U R                  [        TT-   5      S/U-  S/U-  -   5        Sm
US-
  n[	        U5       H  nTR                  5         M     U" XW-   U-   5        U R                  [        TT-   5      S/U-  S/U-  -   S/U-  -   5        U R                  TR                  S5      5        Sn	TR                  5         S S S 5        U R                  TS	/WW-   W-   W	-   -  5        g ! , (       d  f       N.= f)
N   r   c                     > TR                  TR                  5       5        TR                  T 5        TR                  TR                  5       5        TR                  T 5        g r   r|   )r3  r  r  rb  sem_resultss   r   r   7BaseSemaphoreTests.test_acquire_contended.<locals>.func  sC    s{{}-OOI&s{{}-OOI&r   c                    > [         R                  " [         R                  5       H   n[        T5      [        T5      -   U :  d  M     g    g r   r   r#   r$   r/   countr'   r  r  s     r   
wait_count=BaseSemaphoreTests.test_acquire_contended.<locals>.wait_count  7    ++G,A,ABx=3x=0E9 Cr   
   r   r   FT)r\  rj   r   rZ   r.   rr   sortedr   )r   	sem_valuer   ro  r   r7  rK  r8  count3count4r3  r  r  rb  ri  s             @@@@@r   r   )BaseSemaphoreTests.test_acquire_contended  s   	ll9%		' 	'	
 4^]FvX01#,? I9% &Fv'VHx$78S6\QC&L8: I!mF6] #v/0VHx$78S6\QC&L8A3<GI S[[/0 FKKM9 < 	6F?V#;f#DE	G= ^s   DF
Fc                   ^^^	^
 SnU R                  U5      m
T
R                  5         / m/ m	SmUUU	U
4S jnUU	4S jn[        US5         US-
  nU" U5        U R                  TT	-   S/U-  5        SmUnT
R	                  U5        U" XE-   5        U R                  [        TT	-   5      S/U-  S/U-  -   5        SmUS-
  nT
R	                  U5        U" XE-   U-   5        U R                  [        TT	-   5      S/U-  S/U-  -   S/U-  -   5        U R                  T
R                  S5      5        T
R	                  5         S S S 5        g ! , (       d  f       g = f)	Nrg  r   c                     > TR                  5         TR                  T 5        TR                  5         TR                  T 5        g r   r   )r3  r  r  rb  s   r   r   2BaseSemaphoreTests.test_multirelease.<locals>.funcD  s-    KKMOOI&KKMOOI&r   c                    > [         R                  " [         R                  5       H   n[        T5      [        T5      -   U :  d  M     g    g r   rl  rm  s     r   ro  8BaseSemaphoreTests.test_multirelease.<locals>.wait_countK  rq  r   rr  r   r   F)r\  rj   r   rZ   rr   rs  r   )r   rt  r   ro  r7  r8  ru  r3  r  r  rb  s          @@@@r   test_multirelease$BaseSemaphoreTests.test_multirelease<  sW   	ll9%		' 	'	
 4_]FvX01#,? IFKKv'VHx$78S6\QC&L8: I]FKKv/0VHx$78S6\QC&L8A3<GI S[[/0 KKM3 __s   
C4E
Ec                 F   U R                  S5      nU R                  UR                  S5      5        U R                  UR                  S5      5        U R                  UR                  S5      5        UR	                  5         U R                  UR                  S5      5        g )Nr   F)r\  rw   rj   r   rr   ra  s     r   rx   #BaseSemaphoreTests.test_try_acquirek  sn    ll1oE*+E*+U+,E*+r   c                    ^^ U R                  S5      mTR                  5         / mUU4S jn[        US5          S S S 5        U R                  [	        T5      S/S-  S/S-  -   5        g ! , (       d  f       N5= f)NrD  c                     > T R                  TR                  S5      5        T R                  TR                  S5      5        g rv   r|   )r   rb  s   r   r   8BaseSemaphoreTests.test_try_acquire_contended.<locals>.fw  s-    NN3;;u-.NN3;;u-.r   r   Frg  Tr   )r\  rj   r   rZ   rs  )r   r   r   rb  s     @@r   r   -BaseSemaphoreTests.test_try_acquire_contendeds  se    ll1o	/ 1a[ 
 	5'A+!*CE [s   A**
A8c                 0   U R                  S5      nU R                  [        UR                  SSS9  U R	                  UR                  SS95        U R	                  UR                  SS95        U R                  UR                  SS95        UR                  5         U R	                  UR                  SS95        [        R                  " 5       nU R                  UR                  SS95        [        R                  " 5       U-
  nU R                  US5        g )Nr   Fg      ?r   g{Gzt?r   )
r\  r   r   rj   rw   r   rr   r	   r   rT   )r   rb  tr  s       r   test_acquire_timeout'BaseSemaphoreTests.test_acquire_timeout  s    ll1o*ckk5#FE23E23U34E23NNS12^^!2s#r   c                 
  ^ U R                  5       mTR                  5         U4S jn[        US5       n[        S5        U R	                  UR
                  5        TR                  5         S S S 5        g ! , (       d  f       g = f)Nc                  F   > T R                  5         T R                  5         g r   r   )rb  s   r   r   0BaseSemaphoreTests.test_default_value.<locals>.f  s    KKMKKMr   r   )r\  rj   r   r   r   r   rr   )r   r   r   rb  s      @r   test_default_value%BaseSemaphoreTests.test_default_value  sX    lln	 1a[E #U^^, KKM [[s   7A44
Bc                 @  ^ ^ T R                  S5      mSU U4S jjnU" 5         T R                  TR                  S5      5        TR                  5         T R	                  [
        U[
        5        T R                  TR                  S5      5        TR                  5         g )Nr   c                 *  > T   TR                  TR                  S5      5        TR                  5         T   TR                  TR                  S5      5        U (       a  U e S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = frv   )rw   rj   rr   r   )r   r   rb  s    r   _with+BaseSemaphoreTests.test_with.<locals>._with  sg    E 23$$S[[%78!	    S s"   3B*A3"B3
B	=B
BFr   )r\  rw   rj   rr   r   r   )r   r  rb  s   ` @r   r   BaseSemaphoreTests.test_with  so    ll1o	" 	" 	E*+)UI6E*+r   r+   N)r=   r>   r?   r@   rb   r'  rn   r   r}  rx   r   r  r  r   rA   r+   r   r   rX  rX    s9    
J
6Gp-^,F$ r   rX  c                        \ rS rSrS rS rSrg)SemaphoreTestsi  c                     U R                  S5      nUR                  5         UR                  5         UR                  5         UR                  5         g Nr   )r\  rr   rj   ra  s     r   r   &SemaphoreTests.test_release_unacquired  s3    ll1or   c                 (   U R                  S5      nU R                  [        U5      S5        UR                  5         U R                  [        U5      S5        UR	                  5         UR	                  5         U R                  [        U5      S5        g )Nr   z<\w+\.Semaphore at .*: value=3>z<\w+\.Semaphore at .*: value=2>z<\w+\.Semaphore at .*: value=4>)r\  re   rf   rj   rr   ra  s     r   rg   SemaphoreTests.test_repr  si    ll1oc$FGc$FGc$FGr   r+   Nr=   r>   r?   r@   r   rg   rA   r+   r   r   r  r    s    
Hr   r  c                        \ rS rSrS rS rSrg)BoundedSemaphoreTestsi  c                     U R                  5       nU R                  [        UR                  5        UR	                  5         UR                  5         U R                  [        UR                  5        g r   )r\  r   r   rr   rj   ra  s     r   r   -BoundedSemaphoreTests.test_release_unacquired  sG    lln*ckk2*ckk2r   c                     U R                  S5      nU R                  [        U5      S5        UR                  5         U R                  [        U5      S5        g )Nr   z(<\w+\.BoundedSemaphore at .*: value=3/3>z(<\w+\.BoundedSemaphore at .*: value=2/3>)r\  re   rf   rj   ra  s     r   rg   BoundedSemaphoreTests.test_repr  sB    ll1oc$OPc$OPr   r+   Nr  r+   r   r   r  r    s    
3Qr   r  c                       \ rS rSrSrSrS rS rS rS r	S r
SS	 jrS
 rS rS rS rS rS rS rS rS rS rSrg)BarrierTestsi  r   g       @c                 V    U R                  U R                  U R                  S9U l        g )Nr   )barriertyper   defaultTimeoutbarrierr:   s    r   rH   BarrierTests.setUp  s#    ''8K8K'Lr   c                 8    U R                   R                  5         g r   )r  abortr:   s    r   rM   BarrierTests.tearDown  s    r   c                 d    [        XR                  5          S S S 5        g ! , (       d  f       g = fr   )r   r   r   r   s     r   run_threadsBarrierTests.run_threads  s    1ff s   !
/c                 `   U R                   R                  nU R                  X0R                  5        [	        U5       H  nUS   R                  S5        U R                  [        US   5      XC-  5        U R                   R                  5         US   R                  S5        U R                  [        US   5      US-   U-  5        U R                   R                  5         M     U R                  U R                   R                  S5        U R                  U R                   R                  5        g )Nr   Tr   )r  partiesrZ   r   r.   r!   r/   r  	n_waitingr   broken)r   r   nmrK  s        r   	multipassBarrierTests.multipass  s    LL  FF#qAAJd#S_ae4LLAJd#S_q1uk:LL  	//3,,-r   c                     U R                  [        U R                  SS9  U R                  [        U R                  SS9  g )Nr   )r  rZ  )r   r   r  r:   s    r   rb   BarrierTests.test_constructor  s8    *d&6&6B*d&6&6Cr   c                 D   ^ ^^ / / /mUUU 4S jnT R                  U5        g )Nc                  *   > TR                  TT 5        g r   )r  )passesr   r   s   r   r   $BarrierTests.test_barrier.<locals>.f  s    NN7F+r   r  )r   r  r   r   s   `` @r   test_barrierBarrierTests.test_barrier  s!     b'	,r   c                 $    U R                  S5      $ )Nrr  )r  r:   s    r   test_barrier_10BarrierTests.test_barrier_10  s       $$r   c                    ^ ^ / mUU 4S jnT R                  U5        T R                  [        T5      [        [        T R                  5      5      5        g )Nc                  \   > TR                   R                  5       n TR                  U 5        g r   )r  r  r!   )r  r   r   s    r   r   (BarrierTests.test_wait_return.<locals>.f  s!    !!#ANN1r   )r  rZ   sumr.   r   )r   r   r   s   ` @r   test_wait_returnBarrierTests.test_wait_return  s@     	 	Ws5='9:r   c                    ^ ^^ / mU4S jnT R                  T R                  U5      mUUU 4S jnT R                  U5        g )Nc                  (   > T R                  S5        g r9   )r!   )r   s   r   action(BarrierTests.test_action.<locals>.action  s    NN4 r   c                  \   > T R                  5         TR                  [        T5      S5        g r  )r  rZ   r/   )r  r   r   s   r   r   #BarrierTests.test_action.<locals>.f  s     LLNS\1-r   )r  r   r  )r   r  r   r  r   s   `  @@r   test_actionBarrierTests.test_action  s:     	!""46662	. 	r   c                   ^ ^^ / m/ mUUU 4S jnT R                  U5        T R                  [        T5      S5        T R                  [        T5      T R                  S-
  5        T R	                  T R
                  R                  5        g )Nc                  d  >  TR                   R                  5       n U TR                  S-  :X  a  [        eTR                   R                  5         TR	                  S5        g ! [
        R                   a    TR	                  S5         g [         a    TR                   R                  5          g f = fNr   T)r  r  r   r   r!   r   BrokenBarrierErrorr  )rK  r  r  r   s    r   r   "BarrierTests.test_abort.<locals>.f+  s    
LL%%'	>&&!!#%// &% ""$s   AA" "%B/	#B/.B/r   r   )r  rZ   r/   r   rw   r  r  )r   r   r  r  s   ` @@r   
test_abortBarrierTests.test_abort%  sj     	 	X*Xq1++,r   c                   ^ ^^^ / m/ m/ mUUUU 4S jnT R                  U5        T R                  [        T5      S5        T R                  [        T5      T R                  S-
  5        T R                  [        T5      T R                  5        g )Nc                  B  > TR                   R                  5       n U TR                  S-  :X  ao  [        R                  " [        R
                  5       H,  nTR                   R                  TR                  S-
  :  d  M,    O   TR                   R                  5         O, TR                   R                  5         TR                  S5        TR                   R                  5         TR                  S5        g ! [        R                   a    TR                  S5         NSf = f)Nr   r   T)r  r  r   r   r#   r$   r  resetr!   r   r  )rK  r'   r  r  results3r   s     r   r   "BarrierTests.test_reset.<locals>.fD  s    !!#ADFFAI~ //0E0EFA||--$&&1*= G ""$*LL%%'OOD) LLOOD!	 !33 *OOD)*s   +C6 6%DDr   r   )r  rZ   r/   r   )r   r   r  r  r  s   ` @@@r   
test_resetBarrierTests.test_reset=  sv     	" 	"$ 	X*Xq1X/r   c                 V  ^ ^^^^ / m/ m/ mT R                  T R                  5      mUUUUU 4S jnT R                  U5        T R                  [	        T5      S5        T R                  [	        T5      T R                  S-
  5        T R                  [	        T5      T R                  5        g )Nc                  P  >  TR                   R                  5       n U TR                  S-  :X  a  [        eTR                   R                  5         TR	                  S5        TR                  5       TR                  S-  :X  a  TR                   R                  5         TR                  5         TR                   R                  5         TR	                  S5        g ! [
        R                   a    TR	                  S5         N[         a    TR                   R                  5          Nf = fr  )	r  r  r   r   r!   r   r  r  r  )rK  barrier2r  r  r  r   s    r   r   ,BarrierTests.test_abort_and_reset.<locals>.fd  s    
LL%%'	>&&!!#% }}$&&!)+""$MMOLLOOD! // &% ""$s   AC %D%?#D%$D%r   r   )r  r   r  rZ   r/   )r   r   r  r  r  r  s   ` @@@@r   test_abort_and_reset!BarrierTests.test_abort_and_reset\  s     ##DFF+	" 	"* 	X*Xq1X/r   c                 4   ^  U 4S jnT R                  U5        g )Nc                  *  > TR                   R                  5       n U TR                  S-  :X  a#  [        R                  " TR
                  S-  5        TR                  [        R                  TR                   R                  TR
                  S-  5        g )Nr   rD  )	r  r  r   r	   r
   r  r   r   r  )rK  r   s    r   r   $BarrierTests.test_timeout.<locals>.f  sm    !!#ADFFaK

4..23i::"ll//1D1Dq1HJr   r  r  s   ` r   r   BarrierTests.test_timeout~  s    	J 	r   c                   ^ ^ SnT R                  SUS9mUU 4S jn[        R                  " 5       n[        US5          S S S 5        [        R                  " 5       U-
  nT R	                  XA5        g ! , (       d  f       N8= f)NrR  r   r   c                  Z   > TR                  [        R                  T R                  5        g r   )r   r   r  r  )r  r   s   r   r   ,BarrierTests.test_default_timeout.<locals>.f  s     i::%ll,r   r   )r  r	   r   r   rP   )r   r   r   
start_timer  r  s   `    @r   test_default_timeout!BarrierTests.test_default_timeout  sj     ""1g"6	, ^^%
1a[ ^^
*, [s   A11
A?c                 f    U R                  S5      nUR                  5         UR                  5         g r  )r  r  )r   bs     r   test_single_threadBarrierTests.test_single_thread  s$    Q		r   c                 :  ^^ U R                  S5      m[        R                  mU R                  [	        T5      S5        UU4S jnSn[        X5         [        R                  " [        R                  5       H  nTR                  U:  d  M    O   U R                  [	        T5      S5        TR                  T5        S S S 5        U R                  [	        T5      S5        TR                  5         U R                  [	        T5      S5        g ! , (       d  f       NU= f)Nr   z!<\w+\.Barrier at .*: waiters=0/3>c                  (   > T R                  T5        g r   )r  )r  r   s   r   r   !BarrierTests.test_repr.<locals>.f  s    LL!r   r   z!<\w+\.Barrier at .*: waiters=2/3>z<\w+\.Barrier at .*: broken>)r  r   r  re   rf   r   r#   r$   r  r  r  )r   r   r   r'   r  r   s       @@r   rg   BarrierTests.test_repr  s    ""1%&&g(LM	" 1[++G,A,AB$$) C T']AC LL!  	g=	? 	g8	:! [s   6D0D
D)r  N)r   )r=   r>   r?   r@   r   r  rH   rM   r  r  rb   r  r  r  r  r  r  r  r   r  r  rg   rA   r+   r   r   r  r    sa     	
ANM.D%
;-00> 0D- 
:r   r  )r   r]  r	   _threadr   r   r   unittestr   testr   test.supportr   
skipUnlesshas_fork_supportr   r   objectr   TestCaserC   rW   r   r   r   r"  rX  r  r  r  r+   r   r   <module>r     s   
 
 
  1     ) ##G$<$<%CD
 @F @F18$$ 1"V!L V!r? ?Dd+ d+Nm@ m@`G*\ G*TA AFH' H.Q. Q(`:< `:r   