
    i                    t   % S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
Jr  S SKJrJrJr  S SKrS SKrSSKJrJrJrJrJrJrJrJr  SSKJr  SSKJr  SS	KJ r J!r!J"r"J#r#J$r$J%r%J&r&  SS
K'J(r(  \(       a  S SK)J*r*J+r+J,r,  S SK-J.r.  SSK/J0r0  \1\2\3\Rh                  \5\6   -  4      r7\" S5      r8S@S jr9S@S jr:S@S jr;S@S jr<S@S jr=SASBS jjr>S@S jr?S@S jr@S@S jrAS@S jrB      SCS jrC\R                  R                  S/ SQ5      \R                  R                  SSS/5      \R                  R                  SSS/5              SDS  j5       5       5       rFS@S! jrGS@S" jrH    SES# jrIS@S$ jrJS@S% jrK\R                  " S&5      rMS'\NS&'   S@S( jrOS@S) jrPS@S* jrQS@S+ jrRS@S, jrSS@S- jrTS@S. jrUS@S/ jrVS@S0 jrWS@S1 jrXS@S2 jrYS@S3 jrZS@S4 jr[S@S5 jr\S@S6 jr]S@S7 jr^          SFS8 jr_\R                  R                  S9SS/5      SGS: j5       r`S@S; jraS@S< jrb\S@S= j5       rcS@S> jrdS@S? jreg)H    )annotationsNpartial)TYPE_CHECKINGNoReturnTypeVar   )CancelScopeCapacityLimiterEvent_core
fail_aftermove_on_aftersleepsleep_forever)ki_self)slow)active_thread_countcurrent_default_thread_limiterfrom_thread_check_cancelledfrom_thread_runfrom_thread_run_syncto_thread_run_syncwait_all_threads_completed)wait_all_tasks_blocked)AsyncGenerator	AwaitableCallable)Outcome)TaskTc                   ^#    [         R                  " 5       m S
         SU4S jjjn [        R                  " 5       nSS jnU " [        USUS9I S h  vN   SS jnU " [        US[
        4US9I S h  vN   SS jnU " [        USUS9I S h  vN   SS	 jnU " [        US[        4US9I S h  vN   g  N_ NA N) N7f)Nc                0  >^ ^^^#    / mSU UUU4S jjn[         R                  " USS9nUR                  5         UR                  5       (       a5  [	        S5        [        S5      I S h  vN   UR                  5       (       a  M5  TSU4ST4U/:X  d   eg  N+7f)	Nc                   >  TR                  S[        R                  " 5       45        T" TTTS9n TR                  SU 45        g ! [         a1  n[	        U5        TR                  S[        U5      45         S nAg S nAff = f)Nstart
trio_tokengoterror)append	threadingcurrent_threadBaseExceptionprinttype)xexcdo_in_trio_threadfnrecordr'   s     EC:\des-py\RoboSAPF\venv\Lib\site-packages\trio/_tests/test_threads.pythreadfn<test_do_in_trio_thread.<locals>.check_case.<locals>.threadfnA   so    4w	(@(@(BCD%b&ZHuaj)  4c
wS	2334s   AA 
B 'A;;B T)targetdaemonyawn{Gz?r%   freturnNone)r+   Threadr%   is_aliver.   r   )r2   r3   expectedr'   r6   child_threadr4   trio_threads   `` `  @r5   
check_case*test_do_in_trio_thread.<locals>.check_case9   s       	4 	4 !''xE##%%&M+ ##%% 7L1C3ExPPPP s   A!B(B)BBc                    [         R                  " 5       (       a   eU R                  S[        R                  " 5       45        g)Nr<   r	   )r   currently_ki_protectedr*   r+   r,   r4   s    r5   f1"test_do_in_trio_thread.<locals>.f1S   s4    //1111sI44678    )r(   r	   r&   c                    [         R                  " 5       (       a   eU R                  S[        R                  " 5       45        [
        eNr<   )r   rH   r*   r+   r,   
ValueErrorrI   s    r5   f2"test_do_in_trio_thread.<locals>.f2Z   s7    //1111sI44678rL   r)   c                   #    [         R                  " 5       (       a   e[         R                  " 5       I S h  vN   U R                  S[        R
                  " 5       45        g N+7f)Nr<      )r   rH   
checkpointr*   r+   r,   rI   s    r5   f3"test_do_in_trio_thread.<locals>.f3a   sN     //1111   sI44678 	!s   5A%A#,A%)r(   rS   c                   #    [         R                  " 5       (       a   e[         R                  " 5       I S h  vN   U R                  S[        R
                  " 5       45        [        e N07frN   )r   rH   rT   r*   r+   r,   KeyErrorrI   s    r5   f4"test_do_in_trio_thread.<locals>.f4i   sP     //1111   sI44678 	!s   5A*A(1A*N)
r2   zCallable[..., threading.Thread]r3   zCallable[..., T | Awaitable[T]]rB   ztuple[str, T]r'   _core.TrioToken | Noner>   r?   )r4   
RecordTyper>   int)r4   r]   r>   r   )r+   r,   r   current_trio_tokenr   rO   r   rX   )rE   tokenrJ   rP   rU   rY   rD   s         @r5   test_do_in_trio_threadra   6   s     **,K .2	Q:Q+Q  Q +	Q
 
Q Q0 $$&E
 )2ze
LLL
 )2/DQV
WWW _b*
GGG _b7H*=%
PPP/ M X H QsH   AB?B7B?7B98B?B;B?1B=2B?9B?;B?=B?c                   #    [         R                  " [        5         [        S 5        S S S 5        SS jn [         R                  " [        5         [	        U 5        S S S 5        g ! , (       d  f       NB= f! , (       d  f       g = f7f)Nc                     g r[    rd   rL   r5   <lambda>9test_do_in_trio_thread_from_trio_thread.<locals>.<lambda>t       TrL   c                    #    g 7fr[   rd   rd   rL   r5   foo4test_do_in_trio_thread_from_trio_thread.<locals>.foov           r=   )pytestraisesRuntimeErrorr   r   )ri   s    r5   'test_do_in_trio_thread_from_trio_threadrp   r   sR     	|	$\* 
% 
|	$ 
%	$ 
%	$ 
%	$s3   BA&'BA7	B&
A40B7
BBc                 j   ^ [        5       mSU4S jjn [        R                  " U 5        TSS1:X  d   eg )Nc                   >^^^#    [         R                  " 5       mS	S jmS	U4S jjmS	UUUU4S jjn [        R                  " U S9nUR	                  5         [        S5        UR                  5       (       a*  [        S5      I S h  vN   UR                  5       (       a  M*  [        S5        UR                  5         [        S5        g  NB7f)
Nc                    [        S5        [        R                  " 5       (       a   e[        S5         [        5         SS Kn [        SU R
                  " 5       5        g ! SS Kn [        SU R
                  " 5       5        f = f)Nzin Trio threadr   r   finally)r.   r   rH   r   sysexc_info)ru   s    r5   trio_thread_fnTtest_run_in_trio_thread_ki.<locals>.check_run_in_trio_thread.<locals>.trio_thread_fn   s\    "#335555)1	i0 i0s   
A !A?c                    >#    T " 5         g 7fr[   rd   )rw   s   r5   trio_thread_afnUtest_run_in_trio_thread_ki.<locals>.check_run_in_trio_thread.<locals>.trio_thread_afn   s     s   	c                    >  [        S5        [        TTS9   [	        TTS9  g ! [         a    [        S5        T R                  S5         N4f = f! [         a    [        S5        T R                  S5         g f = f)Nrunningr&   ok1ok2)r.   r   KeyboardInterruptaddr   )r4   r`   rz   rw   s   r5   external_thread_fnXtest_run_in_trio_thread_ki.<locals>.check_run_in_trio_thread.<locals>.external_thread_fn   sp    "i $^F"EB	 % "e

5!"
 % "e

5!"s    $ 
A &AA&A98A9)r8   waitingr;   zwaited, joiningdoner=   )	r   r_   r+   r@   r%   r.   rA   r   join)r   threadr`   rz   rw   r4   s     @@@r5   check_run_in_trio_thread<test_run_in_trio_thread_ki.<locals>.check_run_in_trio_thread   s     ((*		1		" 	" !!);<ioo+ oo f s   B CC	C"(Cr~   r   r=   )setr   run)r   r4   s    @r5   test_run_in_trio_thread_kir   }   s3     UF%N 
II&'eU^###rL   c                    ^^^^ / m[        5       mSUU4S jjmSUU4S jjmSUUU4S jjn [        R                  " U 5      nUR                  5         TSS/:X  d   eg )	Nc                    >#    TR                  S5        T R                  5         [        R                  " S 5      I S h  vN   g  N7f)Nsleepingc                6    [         R                  R                  $ r[   )r   Abort	SUCCEEDED)_s    r5   re   Mtest_await_in_trio_thread_while_main_exits.<locals>.trio_fn.<locals>.<lambda>   s    EKK4I4IrL   )r*   r   r   wait_task_rescheduled)evr4   s   r5   trio_fn;test_await_in_trio_thread_while_main_exits.<locals>.trio_fn   s0     j!
))*IJJJs   <AA Ac                r   >  [        TU S9  g ! [        R                   a    TR                  S5         g f = f)Nr&   	cancelled)r   r   	Cancelledr*   )r`   r4   r   s    r5   	thread_fn=test_await_in_trio_thread_while_main_exits.<locals>.thread_fn   s1    	'G6 	'MM+&	's   
 %66c                    >#    [         R                  " 5       n [        R                  " TU 4S9nUR	                  5         TR                  5       I S h  vN   TS/:X  d   eU$  N7f)N)r8   argsr   )r   r_   r+   r@   r%   wait)r`   r   r   r4   r   s     r5   main8test_await_in_trio_thread_while_main_exits.<locals>.main   sX     ((*!!%Bggi*%%% 	s   AA$A"A$r   r   r=   )r`   _core.TrioTokenr>   r?   )r>   threading.Thread)r   r   r   r   )r   r   r   r4   r   r   s     @@@@r5   *test_await_in_trio_thread_while_main_exitsr      sZ    F	BK K
' '  YYt_F
KKMj+....rL   c                 h  ^^#    Sn SU -   4SS jjmSU4S jjm[        T5      I S h  vN   [        TS S9I S h  vN   [        T" SU -   5      5      I S h  vN   SU4S jjnU" S5      I S h  vN   U" S	5      I S h  vN   U" S
5      I S h  vN   U" S5      I S h  vN   g  N{ Nk NQ N; N- N N7f)Nz0 from trio._tests.test_threads.test_named_threadinnerc                v    [         R                  " 5       R                  U :X  d   e[         R                  " 5       $ r[   )r+   r,   name)r   s    r5   r    test_named_thread.<locals>.inner   s.    '')..$666''))rL   c                   > [        TU 5      $ r[   r   r   r   s    r5   r<   test_named_thread.<locals>.f       ud##rL   thread_namer?   c                   >#    [        T" U 5      U S9I S h  vN n[        R                  " SUR                  5      (       d   eg  N-7f)Nr   Trio thread [0-9]*)r   rematchr   )r   r   r<   s     r5   test_thread_name+test_named_thread.<locals>.test_thread_name   s;     )!D'tDDxx-v{{;;;; Es   AA.A fobiedooname_longer_than_15_characters   💙r   strr>   r   r   r   r>   zCallable[[], threading.Thread])r   r   r>   r?   r   )endingr   r<   r   s     @@r5   test_named_threadr      s     ?F!F* *$ U
###
U
555 Qv/
000< 2

:
&&&
;
<<<
6
""" $5 1 &<"sy   $B2B$B2B&B2B(B2.B*/B2>B,?B2B.B2B0B2&B2(B2*B2,B2.B20B2c                   SS K nSS KnUR                  R                  S5      nU(       d  Sn UR	                  U5      n[        USS 5      nU(       d   eUR                  UR                  UR                  /Ul        UR                  Ul        UR!                  SSS9nU c  ["        R$                  " 5       n U" XS5      S:X  d   e UR&                  R)                  5       $ ! [
         a    [        S[        R                   35         g f = f! [*         a1  n[,        R.                  " S	UR&                  < S
U 35         S nAg S nAff = f)Nr   pthreadzlibc.sozno pthread on pthread_getname_nprL      )sizezvalue: z, exception: )ctypesctypes.utilutilfind_libraryCDLL	Exceptionr.   ru   platformgetattrc_void_pc_char_pc_size_targtypesc_intrestypecreate_string_bufferr+   	get_identvaluedecodeUnicodeDecodeErrorrm   fail)identr   libpthread_path
libpthreadr   name_bufferes          r5   _get_thread_namer      s<   kk..y9O $[[1

 !-A4H  	#
 "(--c-;K}##%e"5:::E  ''))-  s||n-..  Egk//2-sCDDEs)   C  D  &D	D	
E'EEc                 :  ^^#    SS jmSU4S jjmSn [        T" U 5      5      I S h  vN   [        T" U 5      S S9I S h  vN   SSU4S jjjnU" S5      I S h  vN   U" S5      I S h  vN   U" S5      I S h  vN   U" S	S
S9I S h  vN   g  Nf NP N8 N* N N7f)Nc                    [        5       nUc<  [        R                  S:w  a(  [        R                  " S[        R                   35        O
XS S :X  d   e[
        R                  " 5       $ )Nlinuxzno pthread OS support on    )r   ru   r   rm   skipr+   r,   )r   os_thread_names     r5   r   #test_named_thread_os.<locals>.inner  sT    )+!cllg&=KK3CLL>BC!#2Y...''))rL   c                   > [        TU 5      $ r[   r   r   s    r5   r<   test_named_thread_os.<locals>.f  r   rL   z4None from trio._tests.test_threads.test_named_threadr   c                   >#    Uc  U n[        T" U5      U S9I S h  vN n[        UR                  5      nUc   S5       e[        R                  " SU5      (       d   eg  NB7f)Nr   z'should skip earlier if this is the caser   )r   r   r   r   r   )r   rB   r   r   r<   s       r5   r   .test_named_thread_os.<locals>.test_thread_name'  sb     H)!H+4HH)&,,7)T+TT)xx-~>>>>	 Is   A!AAA!r   r   r   r   ?)rB   r   r   r[   )r   r   rB   
str | Noner>   r?   r   )defaultr   r<   r   s     @@r5   test_named_thread_osr     s     *$ EG
QwZ
(((
QwZT
:::? ? 2

:
&&&
;
<<<
6C
000# ): &<0si   $BBB BBBB*B+B:B;B	B
BBBBBBc                     SSK Jn   U " 5       nUc>  [        R                  S:w  d   e[        R
                  " S[        R                   35        g g )Nr   )get_os_thread_name_funcr   zno pthread_setname_np on )trio._core._thread_cacher   ru   r   rm   r   )r   ks     r5   test_has_pthread_setname_npr   7  sA    @!Ay||w&&&/~>? rL   c                   #    [         R                  " 5       n SS jn[        US5      I S h  vN u  p#US:X  d   eX0:w  d   eSS jn[        R                  " [
        SS9 n[        U5      I S h  vN   S S S 5        [        WR                  R                  5        UR                  R                  S   U :w  d   eg  N NM! , (       d  f       NQ= f7f)	Nc                0    U [         R                  " 5       4$ r[   )r+   r,   )r0   s    r5   r<   $test_run_in_worker_thread.<locals>.fC  s    9++-..rL      c                 >    [        [        R                  " 5       5      er[   )rO   r+   r,   rd   rL   r5   g$test_run_in_worker_thread.<locals>.gJ  s    11344rL   z1^<Thread\(Trio thread \d+, started daemon \d+\)>$r   r   )r0   r!   r>   ztuple[T, threading.Thread])r>   r   )	r+   r,   r   rm   rn   rO   r.   r   r   )rD   r<   r0   rC   r   excinfos         r5   test_run_in_worker_threadr   @  s     **,K/ /q!44OA6M6&&&5 
B
 
 ###	

 
'--

==a K/// 5 	$	
 
s:   *CB;3C B?/B=0B?4AC=B??
C	Cc                   ^^^#    S /mSU4S jjmSUU4S jjn / m[         R                  " 5       n[        R                  " 5        IS h  vN nUR	                  XS5        [        5       I S h  vN   TS/:X  d   eUR                  R                  5         S S S 5      IS h  vN   TS   S:w  d   eUR                  S 5        TS   S:w  a!  [        R                  " S5        TS   S:w  a  M!  / mS TS'   [        R                  " 5        IS h  vN nUR	                  XS5        [        5       I S h  vN   UR                  R                  5         [        R                  " SS	9   [        S
5       H   n[        R                  " 5       I S h  vN   M"     S S S 5        TS/:X  d   eUR                  S 5        S S S 5      IS h  vN   [        R                  " 5        nUR                  5         U " US5      I S h  vN   S S S 5        WR                  (       d   eg  GN GN GN}! , IS h  vN  (       d  f       GN= f GN0 GN N! , (       d  f       N= f N! , IS h  vN  (       d  f       N= f Ny! , (       d  f       N}= f7f)Nc                :   > STS'   U R                  5         STS'   g )Nblockingr   finished)get)qregisters    r5   r<   1test_run_in_worker_thread_cancellation.<locals>.fY  s     	 rL   c                   >#    TR                  S5         [        TXS9I S h  vN TR                  S5        $  N! TR                  S5        f = f7fNr%   abandon_on_cancelexit)r*   r   )r  r	  r<   r4   s     r5   child5test_run_in_worker_thread_cancellation.<locals>.child_  sC     g	"+AqVVMM&! WMM&!s%   A; 9; A; AATr%   r   r  r;   Fshield
   )r  stdlib_queue.Queue[None]r>   r?   )r  r  r	  boolr>   r?   )stdlib_queueQueuer   open_nursery
start_soonr   cancel_scopecancelputtimer   r
   rangerT   cancelled_caught)r  r  nurseryr   scoper<   r4   r  s        @@@r5   &test_run_in_worker_thread_cancellationr  V  s     "&H!" " F"."4"4"6A!!##w5T* %&&&'"""##% $# A;*$$$EE$K
1+
#

4 1+
# FHQK!!##w5U+$&&&##%d+2Y&&(((  , '"""	d $# 
			Auo 
 !!!!I $
 	' $###& $& ) ,+	 $###  	 
	s	  AJ
HJ H!.H/'H!J!H"AJ, JH<J I0H?12I#'I
I
I"I5J IJI37I18I3<JH!J!H9'H*(H94	J?II
I	IJI.I I.*J1I33
J=Jc                  ^^^ UR                  [        R                  SS5        [        R                  " 5       m[        R                  " 5       mSUU4S jjmSU4S jjn[        R
                  " U5        TR                  S 5        TR                  5       nUR                  5       (       a-  [        R                  " S5        UR                  5       (       a  M-  U R                  5       u  pESU;  d   eSU;  d   eg )NIDLE_TIMEOUTr;   c                 n   > T R                  5         TR                  [        R                  " 5       5        g r[   )r  r  r+   r,   )q1q2s   r5   r   6test_run_in_worker_thread_abandoned.<locals>.thread_fn  s!    

y'')*rL   c                 4  >#    SU4S jjn [         R                  " 5        IS h  vN nUR                  U 5        [        5       I S h  vN   UR                  R                  5         S S S 5      IS h  vN   g  NR N1 N	! , IS h  vN  (       d  f       g = f7f)Nc                 6   >#    [        T SS9I S h  vN   g  N7f)NTr  r   )r   s   r5   r  @test_run_in_worker_thread_abandoned.<locals>.main.<locals>.child  s     $Y$GGGs   r=   )r   r  r  r   r  r  )r  r  r   s     r5   r   1test_run_in_worker_thread_abandoned.<locals>.main  sg     	H %%''7u%(***  '') (''* ('''sV   "BA8BA>A:	A>'B2A<3B:A><B>BBBBzException in threadr=   )setattrr   _thread_cacher  r  r   r  r  rA   r  r   
readouterr)	capfdmonkeypatchr   r   outerrr"  r#  r   s	         @@@r5   #test_run_in_worker_thread_abandonedr0    s     ++^TB#/#5#5#7B/;/A/A/CB+ +* 
IIdOFF4L VVXF
//



4 //

 !HC +++ +++rL   MAX)rS      r  r  FTuse_default_limiterc                  ^^
^^^^^#    SU -  n[         R                  " 5       m
[         R                  " 5       mU(       a  [        5       nUR                  nXl        S mO[        U 5      nU nUm  " S S5      mSTl        STl        STl        STl	        [        R                  " 5       mSU
UUU4S jjmSUUU4S jjn[        R                  " 5        IS h  vN n[        S5        / n[        U5       HB  n	UR                  [        5       5        UR!                  XhS   5        [#        5       I S h  vN   MD     T(       a8  [        S	5        US   R%                  5       I S h  vN   [#        5       I S h  vN   TR                  U :w  d  UR'                  5       R(                  U :w  aE  [+        S
5      I S h  vN   TR                  U :w  a  M%  UR'                  5       R(                  U :w  a  ME  T
R-                  5         S S S 5      IS h  vN   TR                  U :X  d   eT(       a5  UR.                  S:  a%  [+        S
5      I S h  vN   UR.                  S:  a  M%  TR                  U:X  d   eTR                  S:X  d   e XTl        g  GN GNX GN* GN N N! , IS h  vN  (       d  f       N= f Nl! XTl        f = f7f)Nr	   c                  >    \ rS rSr% S\S'   S\S'   S\S'   S\S'   Srg)	0test_run_in_worker_thread_limiter.<locals>.statei  r^   ran
high_waterr}   parkedrd   N)__name__
__module____qualname____firstlineno____annotations____static_attributes__rd   rL   r5   stater6    s    HOLKrL   r@  r   c                  > [        S5        [        U R                  TS9  T   T=R                  S-  sl        T=R                  S-  sl        [        TR                  TR                  5      Tl        T=R                  S-  sl        S S S 5        TR                  5         T   T=R                  S-  sl        T=R                  S-  sl        S S S 5        [        S5        g ! , (       d  f       N_= f! , (       d  f       N+= f)Nzthread_fn startr&   r   zthread_fn exiting)	r.   r   r  r7  r}   maxr8  r9  r   )r  gatelockr@  r`   s    r5   r   4test_run_in_worker_thread_limiter.<locals>.thread_fn  s    #$ !4!4G		Q	"#&u'7'7#G  !  IIK!"  %&  s   A%C!"+C2!
C/2
D c                   >#    [         R                  " 5        n[        TUTTS9I S h  vN   S S S 5        [        SWR                  5        U R                  5         g  N3! , (       d  f       N7= f7f)N)r	  limiterzrun_thread finished, cancelled:)r   r
   r   r.   r  r   )eventr  r  limiter_argr   s     r5   
run_thread5test_run_in_worker_thread_limiter.<locals>.run_thread  s`     ""$( &,'	   % 3\5R5RSIIK %$s+   A0AAA/A0A
A-)A0spawningz'waiting for first cancellation to clearr;   )r  r
   r>   r?   )rH  r   r>   r?   )r+   r   Lockr   total_tokensr   r7  r8  r}   r9  r   r_   r  r.   r  r*   r  r   r   
statisticstasks_waitingr   r   borrowed_tokens)r1  r  r3  COUNTcorig_total_tokensrJ  r  eventsr   rC  rI  rD  r@  r   r`   s    `        @@@@@@r5   !test_run_in_worker_thread_limiterrW    s>     GE??D>>D*,NNC [+	 	 	((*	' 	' 		 		 %%''7*F5\eg&"":bz:,... " ?@Qinn&&&,... #q||~'C'Cs'JDk!! #q||~'C'Cs'J HHJ5 ('8 3&&& ##a'Dk!! ##a' yyE!!!}}!!!*Q ( / '. "1 ('''F "
 +s   A%J>/A)J3 JJ3 AJ2J
30J#J$J5J6A J6J7JJ-J=J3 J	;J3 J1J3 $J3  J>J3 
JJJJJ3 J.J J.*J3 3J;;J>c                 t   ^#    / m " U4S jS5      n [        S U " 5       S9I S h  vN   TSS/:X  d   eg  N7f)Nc                  6   > \ rS rSrSU 4S jjrSU 4S jjrSrg)?test_run_in_worker_thread_custom_limiter.<locals>.CustomLimiteri4  c                <   >#    TR                  S5        Xl        g 7fNacquirer*   	_borrowerselfborrowerr4   s     r5   acquire_on_behalf_ofTtest_run_in_worker_thread_custom_limiter.<locals>.CustomLimiter.acquire_on_behalf_of5  s     MM)$%Ns   c                J   > TR                  S5        XR                  :X  d   eg )Nreleaser^  r`  s     r5   release_on_behalf_ofTtest_run_in_worker_thread_custom_limiter.<locals>.CustomLimiter.release_on_behalf_of9  s    MM)$~~---rL   )r_  Nrb  r    r>   r?   r:  r;  r<  r=  rc  rg  r?  rI   s   r5   CustomLimiterrZ  4  s    	&	. 	.rL   rk  c                     g r[   rd   rd   rL   r5   re   :test_run_in_worker_thread_custom_limiter.<locals>.<lambda>?  rg   rL   rG  r]  rf  r   )rk  r4   s    @r5   (test_run_in_worker_thread_custom_limiterro  /  sD      F. . \=?
CCCi++++ Ds   #868c                   ^^#    / m " U4S jS5      n U " 5       n[         R                  " [        SS9 n[        S US9I S h  vN   S S S 5        WR                  R
                  b   eTSS/:X  d   e/ m0 m[         R                  " [        SS9 n[        U4S	 jUS9I S h  vN   S S S 5        [        UR                  R
                  [        5      (       d   eTSS/:X  d   eg  N! , (       d  f       N= f NU! , (       d  f       NY= f7f)
Nc                  6   > \ rS rSrSU 4S jjrSU 4S jjrSrg)Ctest_run_in_worker_thread_limiter_error.<locals>.BadCapacityLimiteriF  c                0   >#    TR                  S5        g 7fr\  )r*   r`  s     r5   rc  Xtest_run_in_worker_thread_limiter_error.<locals>.BadCapacityLimiter.acquire_on_behalf_ofG  s     MM)$s   c                <   > TR                  S5        [        S5      e)Nrf  zrelease on behalf)r*   rO   r`  s     r5   rg  Xtest_run_in_worker_thread_limiter_error.<locals>.BadCapacityLimiter.release_on_behalf_ofJ  s    MM)$011rL   rd   Nri  )rb  r    r>   r   rj  rI   s   r5   BadCapacityLimiterrr  F  s    	%	2 	2rL   rw  z^release on behalf$r   c                     g r[   rd   rd   rL   r5   re   9test_run_in_worker_thread_limiter_error.<locals>.<lambda>Q      rL   rn  r]  rf  c                    > T S   $ )Nr0   rd   )ds   r5   re   ry  Z  s	    3rL   )rm   rn   rO   r   r   __context__
isinstancerX   )rw  bsr   r|  r4   s      @@r5   'test_run_in_worker_thread_limiter_errorr  C  s     F2 2 
	B	z)?	@G r::: 
A==$$,,,i++++F A	z)?	@G <<< 
Agmm//::::i++++ 	; 
A	@ 	= 
A	@sY   0DC'C%C'ADC:"C8#C:'>D%C''
C51D8C::
DDc                  #    SS jnU R                  [        R                  R                  SU5        [	        5       nUR
                  S:X  d   e[        R                  " [        5       n[        S 5      I S h  vN   S S S 5        S[        WR                  5      ;   d   eUR
                  S:X  d   eg  N:! , (       d  f       N>= f7f)Nc                    [        S5      e)Nz!the engines canna take it captain)ro   )ra  r   s     r5   	bad_start:test_run_in_worker_thread_fail_to_spawn.<locals>.bad_startc  s    >??rL   start_thread_soonr   c                     g r[   rd   rd   rL   r5   re   9test_run_in_worker_thread_fail_to_spawn.<locals>.<lambda>m  rz  rL   engines)ra  objectr   r  r>   r   )r)  r   r*  ThreadCacher   rR  rm   rn   ro   r   r   r   )r-  r  rG  r   s       r5   'test_run_in_worker_thread_fail_to_spawnr  _  s     @ ++779LiX,.G""a''' 
|	$ ... 
%GMM****""a''' 	/ 
%	$s0   A'C)B69B4:B6>6C4B66
C Cc                 x   #    SS jn [         R                  " 5       n[        U 5      I S h  vN nX!:X  d   eg  N7f)Nc                 8    [        [        R                  5      n U $ r[   r   r   r_   callee_tokens    r5   r   5test_trio_to_thread_run_sync_token.<locals>.thread_fnv      +E,D,DErL   r>   r   r   r_   r   r   caller_tokenr  s      r5   "test_trio_to_thread_run_sync_tokenr  s  8      ++-L+I66L''' 7   ):8:c                    #    SS jn [         R                  " [        SS9   [        U 5      I S h  vN   S S S 5        g  N! , (       d  f       g = f7f)Nc                    #    g 7fr[   rd   rd   rL   r5   async_fn=test_trio_to_thread_run_sync_expected_error.<locals>.async_fn  rk   rl   zexpected a sync functionr   r=   )rm   rn   	TypeErrorr   r  s    r5   +test_trio_to_thread_run_sync_expected_errorr    s>      
y(B	C *** 
D	C* 
D	Cs)   AA >A 	AA  
A
Atrio_test_contextvarzcontextvars.ContextVar[str]c                   #    [         R                  " 5       n [        R                  S5        SS jn[	        U5      I S h  vN u  p#US:X  d   eX0:w  d   eSS jn[	        U5      I S h  vN u  pVn[        R                  5       nUS:X  d   eUS:X  d   eUS:X  d   S5       e[        R                  " 5       S:X  d   eg  N} NV7f)	Nr   c                     [         R                  5       n [        R                  " [        R
                  5         [        R                  " 5         S S S 5        U [        R                  " 5       4$ ! , (       d  f       N%= fr[   )	r  r  rm   rn   sniffioAsyncLibraryNotFoundErrorcurrent_async_libraryr+   r,   )r   s    r5   r<   3test_trio_to_thread_run_sync_contextvars.<locals>.f  sP    $((*]]7<<=))+ >y//122 >=s   A..
A<c                 R   [         R                  5       n [         R                  S5        [         R                  5       n[        R                  " [
        R                  5         [
        R                  " 5         S S S 5        U U[        R                  " 5       4$ ! , (       d  f       N&= f)Nworker)
r  r  r   rm   rn   r  r  r  r+   r,   )parent_valueinner_values     r5   r   3test_trio_to_thread_run_sync_contextvars.<locals>.g  sv    +//1  **..0]]7<<=))+ > $$&
 	
 >=s   "B
B&r  zRThe contextvar value set on the worker would not propagate back to the main threadtrio)r>   ztuple[str, threading.Thread])r>   z!tuple[str, str, threading.Thread])r+   r,   r  r   r   r  r  r  )rD   r<   r   rC   r   r  r  current_values           r5   (test_trio_to_thread_run_sync_contextvarsr    s     **,KV$3 !31 55EF??&&&

 5Gq4I.I+L|(,,.M6!!!("""F" 	" ((*f4441 6  /Js$   >C B>(C)C *AC Cc                   ^#    SS jn [        U 5      I S h  vN n[        U[        5      (       d   eSS jmSU4S jjn[        R                  " [
        SS9   [        U5      I S h  vN   S S S 5        g  N^ N! , (       d  f       g = f7f)Nc                 8    [        [        R                  5      n U $ r[   )r   r   current_time)	trio_times    r5   thread_fn_13test_trio_from_thread_run_sync.<locals>.thread_fn_1  s    (););<	rL   c                    #    g 7fr[   rd   rd   rL   r5   r  0test_trio_from_thread_run_sync.<locals>.async_fn  rk   rl   c                    > [        T 5        g r[   )r   r  s   r5   thread_fn_23test_trio_from_thread_run_sync.<locals>.thread_fn_2  s    X&rL   zexpected a synchronous functionr   )r>   floatr=   )r   r~  r  rm   rn   r  )r  r  r  r  s      @r5   test_trio_from_thread_run_syncr    sr      )55Ii''''' 
y(I	J --- 
K	J 6 	. 
K	Js:   BA6ABA:(A8)A:-
B8A::
BBc                   ^^#    / mSU4S jjmSUU4S jjn [        U 5      I S h  vN   TSS/:X  d   eSS jn[        R                  " [        SS9   [        [        U5      I S h  vN   S S S 5        g  NN N! , (       d  f       g = f7f)	Nc                 Z   >#    [         R                  " 5         T R                  S5        g 7f)Nback in trio)r   r  r*   rI   s   r5   back_in_trio_fn2test_trio_from_thread_run.<locals>.back_in_trio_fn  s     n%s   (+c                 >   > TR                  S5        [        T 5        g )N	in thread)r*   r   )r  r4   s   r5   r   ,test_trio_from_thread_run.<locals>.thread_fn  s    k"(rL   r  r  c                     g r[   rd   rd   rL   r5   sync_fn*test_trio_from_thread_run.<locals>.sync_fn  s    rL   zappears to be synchronousr   r=   )r   rm   rn   r  r   )r   r  r  r4   s     @@r5   test_trio_from_thread_runr    s      F&) ) Y
'''k>2222 
y(C	D '::: 
E	D ( 	; 
E	Ds9   "B
A5,B
A9'A7(A9,
B
7A99
BB
c                 x   #    SS jn [         R                  " 5       n[        U 5      I S h  vN nX!:X  d   eg  N7f)Nc                 8    [        [        R                  5      n U $ r[   r  r  s    r5   r   .test_trio_from_thread_token.<locals>.thread_fn  r  rL   r  r  r  s      r5   test_trio_from_thread_tokenr    r  r  c                 x   #    SS jn [         R                  " 5       n[        X5      I S h  vN nX!:X  d   eg  N7f)Nc                6    [        [        R                  U S9nU$ )Nr&   r  )r`   r  s     r5   r   4test_trio_from_thread_token_kwarg.<locals>.thread_fn  s    +E,D,DQVWrL   )r`   r   r>   r   r  r  s      r5   !test_trio_from_thread_token_kwargr    s9      ++-L+IDDL''' Er  c                    #    [         R                  " [        5         [        [        R
                  5        S S S 5        g ! , (       d  f       g = f7fr[   rm   rn   ro   r   r   r  rd   rL   r5   test_from_thread_no_tokenr    s,      
|	$U//0 
%	$	$s   AA 	A 
A
Ac                 6  #    [         R                  S5        SS jn [        U 5      I S h  vN u  nnnnn[         R                  5       nXas=:X  a  S:X  d   e   eX$s=:X  a  Us=:X  a  S:X  d   e   e[        R
                  " 5       S:X  d   eUS:X  d   eg  Nk7f)Nr   c                 "   [         R                  5       n [         R                  S5        [         R                  5       n[        R                  " [
        R                  5         [
        R                  " 5         S S S 5        SS jn[        U5      u  p4[         R                  5       n[        R                  " [
        R                  5         [
        R                  " 5         S S S 5        U UUUU4$ ! , (       d  f       N}= f! , (       d  f       N&= f)Nr  c                     [         R                  5       n [         R                  S5        [         R                  5       n[        R                  " 5       S:X  d   eX4$ Nback_in_mainr  r  r  r   r  r  back_parent_valueback_current_values     r5   r  Stest_trio_from_thread_run_sync_contextvars.<locals>.thread_fn.<locals>.back_in_main	  sN     4 8 8 : $$^4!5!9!9!;002f<<<$88rL   r>   ztuple[str, str])	r  r  r   rm   rn   r  r  r  r   )thread_parent_valuethread_current_valuer  r  r  thread_after_values         r5   r   =test_trio_from_thread_run_sync_contextvars.<locals>.thread_fn  s    2668  *3779]]7<<=))+ >	9 1E\0R-1557]]7<<=))+ >   
 	
 >= >=   "C/
D /
C= 
Dr  r  r  r>   ztuple[str, str, str, str, str]r  r   r   r  r  r  r   r  r  r  r  r  r  s          r5   *test_trio_from_thread_run_sync_contextvarsr    s     V$
@ !++(,,.M9699999V8JVhVVVVV((*f444/// 	,   )BBA,Bc                 6  #    [         R                  S5        SS jn [        U 5      I S h  vN u  nnnnn[         R                  5       nXas=:X  a  S:X  d   e   eX$s=:X  a  Us=:X  a  S:X  d   e   eUS:X  d   e[        R
                  " 5       S:X  d   eg  Nk7f)Nr   c                 "   [         R                  5       n [         R                  S5        [         R                  5       n[        R                  " [
        R                  5         [
        R                  " 5         S S S 5        SS jn[        U5      u  p4[         R                  5       n[        R                  " [
        R                  5         [
        R                  " 5         S S S 5        U UUUU4$ ! , (       d  f       N}= f! , (       d  f       N&= f)Nr  c                    #    [         R                  5       n [         R                  S5        [         R                  5       n[        R                  " 5       S:X  d   eX4$ 7fr  r  r  s     r5   async_back_in_mainTtest_trio_from_thread_run_contextvars.<locals>.thread_fn.<locals>.async_back_in_main4  sQ      4 8 8 : $$^4!5!9!9!;002f<<<$88s   AAr  )	r  r  r   rm   rn   r  r  r  r   )r  r  r  r  r  r  s         r5   r   8test_trio_from_thread_run_contextvars.<locals>.thread_fn-  s    2668  *3779]]7<<=))+ >	9 1@@R0S-1557]]7<<=))+ >   
 	
 >= >=r  r  r  r  r  r  r  s          r5   %test_trio_from_thread_run_contextvarsr  *  s     V$
@ !++(,,.M9699999V8JVhVVVVV///((*f444 	,r  c                     [         R                  " [        5         [        [        R
                  SS9  S S S 5        g ! , (       d  f       g = f)NzNot TrioTokentyper&   r  rd   rL   r5   3test_run_fn_as_system_task_caught_badly_typed_tokenr  U  s.    	|	$*	
 
%	$	$s	   =
Ac                    #    SS jn [         R                  " 5       n[        R                  " [        5         [        XS9  S S S 5        g ! , (       d  f       g = f7f)Nc                     [        5       er[   )AssertionErrorrd   rL   r5   
not_called7test_from_thread_inside_trio_thread.<locals>.not_called^  s    rL   r&   r=   )r   r_   rm   rn   ro   r   )r  r'   s     r5   #test_from_thread_inside_trio_threadr  ]  s9      ))+J	|	$Z? 
%	$	$s   5A
A
	A

AAc                    ^^^ / m/ mSU4S jjmSUU4S jjn [         R                  " U S5        [         R                  " U S5        TSS/:X  d   eg )	Nc               l  >#     S 7v   [         R                  " SS9    [        [        [        [
        SU S95      I S h  vN   TR                  S5        S S S 5        g  N! [         R                   a    TR                  S5         N2f = f! , (       d  f       g = f! [         R                  " SS9    [        [        [        [
        SU S95      I S h  vN    TR                  S5        O+! [         R                   a    TR                  S5         Of = fS S S 5        f ! , (       d  f       f = f= f7f)NTr  r   r&   cleanr  )r   r
   r   r   r   r   r*   RunFinishedError)r`   r4   s    r5   agen2test_from_thread_run_during_shutdown.<locals>.agenj  s     	+""$/+,eL   MM'* 0/ -- .MM*-. 0/""$/+,eL   MM'* -- .MM*-. 0//s   D4B D4B A! AA!B	D4A!!%B	BB		B
BD4D12D 4 C,C
C,D ,%D	D D	D 	D1 
D.*D11D4c                   >#    TR                  T" U (       a  [        R                  " 5       OS 5      5        TS   R                  S 5      I S h  vN   g  N7f)NrM  )r*   r   r_   asend)use_system_taskr  saves    r5   r   2test_from_thread_run_during_shutdown.<locals>.mainx  s:     D113DQR2hnnT"""s   AAAATFr  r  )r`   r\   r>   zAsyncGenerator[None, None])r   r  r>   r?   )r   r   )r   r  r4   r  s    @@@r5   $test_from_thread_run_during_shutdownr  f  sM    DF+# # 
IIdD	IIdEj'****rL   c                    #    [         R                  " 5       n [        U [         R                  5      (       d   e[        R
                  " U 5      nX" 5       L d   eg 7fr[   )r   r_   r~  	TrioTokenweakrefref)r`   weak_references     r5   "test_trio_token_weak_referenceabler	    sI     $$&EeU__----[['NN$$$$s   AAc                    #     " S S5      n [         R                  " [        5         [        [        U " 5       S9I S h  vN   S S S 5        g  N! , (       d  f       g = f7f)Nc                      \ rS rSrSS jrSrg)4test_unsafe_abandon_on_cancel_kwarg.<locals>.BadBooli  c                    [         er[   )NotImplementedError)ra  s    r5   __bool__=test_unsafe_abandon_on_cancel_kwarg.<locals>.BadBool.__bool__  s    %%rL   rd   Nr>   r  )r:  r;  r<  r=  r  r?  rd   rL   r5   BadBoolr    s    	&rL   r  r  )rm   rn   r  r   r^   )r  s    r5   #test_unsafe_abandon_on_cancel_kwargr    sC     & & 
*	+ 	BBB 
,	+B 
,	+s,   %AAAA	AA
AAc                    #    [         R                  " 5       n SS jnU [        [        [         R                  5      I S h  vN L d   eU [        [        U5      I S h  vN L d   eg  N& N7f)Nc                 4   #    [         R                  " 5       $ 7fr[   )r   current_taskrd   rL   r5   async_current_task8test_from_thread_reuses_task.<locals>.async_current_task  s     !!##s   )r>   z
_core.Task)r   r  r   r   r   )taskr  s     r5   test_from_thread_reuses_taskr    s]     D$ +,@%BTBTUUUUU+O=OPPPPP VPs"   =A*A& A*A(
A*(A*c                 X   ^#    S mSU4S jjn T[        U 5      I S h  vN :w  d   eg  N
7f)Nc                 j   > [         R                  " 5       m [        [        [         R                  5      $ r[   )r+   r   r   r   )tids   r5   get_tid_then_reenter6test_recursive_to_thread.<locals>.get_tid_then_reenter  s%    !!#193F3FGGrL   )r>   r^   r   )r  r  s    @r5   test_recursive_to_threadr     s.     
CH
 *+?@@@@@@s   *(*c                 
  ^^^#    [         R                  " 5       mS	UU4S jjn [        R                  " 5        m[	        U 5      I S h  vN   S S S 5        TR
                  (       a   eTR                  5       (       a   e[        R                  " 5        m[	        U SS9I S h  vN   S S S 5        TR
                  (       d   e[	        [        TR                  SS95      I S h  vN (       a   eS
S jmS	UUU4S jjn[        R                  " 5        m[	        U5      I S h  vN   S S S 5        TR
                  (       a   eTR                  5       (       a   e[        R                  " 5        m[	        USS9I S h  vN   S S S 5        TR
                  (       d   e[	        [        TR                  SS95      I S h  vN (       a   eS	U4S jjn[        R                  " 5        m[	        [        U5      I S h  vN   S S S 5        TR
                  (       d   eg  GN! , (       d  f       GN= f GN! , (       d  f       GN= f GNa GN%! , (       d  f       GN*= f N! , (       d  f       N= f N Nw! , (       d  f       N{= f7f)Nc                    > [        T R                  5         [        [        5        TR                  S5        g ! [        R
                   a    TR                  S5         g f = fNFT)r   r  r  r  r   r   )r  queues   r5   
sync_check3test_from_thread_host_cancelled.<locals>.sync_check  sL    \001	 & IIe  	IIdO	s   9 %A! A!Tr  r   timeoutc                    #    g7fNTrd   rd   rL   r5   no_checkpoint6test_from_thread_host_cancelled.<locals>.no_checkpoint  s     rl   c                    > [        T R                  5         [        T5      (       d   e TR                  S5        g ! [        R
                   a    TR                  S5         g f = fr#  )r   r  r   r  r   r   )r  r+  r$  s   r5   async_check4test_from_thread_host_cancelled.<locals>.async_check  sU    \001	"=1111 IIe  	IIdO	s   = %A%$A%c                    >#    T R                  5         [        S5         [        5       I S h  vN   S S S 5        g  N! , (       d  f       g = f7f)Nr  )r  r   r   )r  s   r5   async_time_bomb8test_from_thread_host_cancelled.<locals>.async_time_bomb  s5     ^/!! ^! ^s%   A=;=	A=
AAr=   r  )
r  r  r   r
   r   r  
get_nowaitr   r  r   )r%  r.  r1  r  r+  r$  s      @@@r5   test_from_thread_host_cancelledr4    s    &2&8&8&:E  
			 ,,, 
 ,,,,!!!!				 tDDD 
 (((('		1(EFFFFF  
			 --- 
 ,,,,!!!!				 EEE 
 (((('		1(EFFFFF"
 
			 /BBB 
 ((((W 	- 
	 	E 
	 G 	. 
	 	F 
	 G 	C 
	s   4JHH	HAJH1"H.#H1';J"I#/JI	!I"I	&AJ-I;I<I ;J;I.<(J$I28I09I2=JH
H+&J.H11
I ;	JI		
IJI
I+'J0I22
J <Jc                J  #    U   UR                  S5         [        X0S9I S h  vN UR                  S5        sS S S 5        $  N! [        R                   a   nUR                  [	        U5      5        e S nAff = f! UR                  S5        f = f! , (       d  f       g = f7fr  )r*   r   r   r   r   )r	  r  r4   r<   r   s        r5   r  r    s~      
g	"+ASS
 MM&! 
 T 	MM#a&!	 MM&! 
sY   B#BAAAB
B#AA9A44A99A<<BB
B B#cancel_the_scopec                  ^^#    [         R                  " 5       mSUU4S jjn/ n[        R                  " 5       m[        R
                  " 5       n[        R                  " 5        IS h  vN nUR                  [        SX2U5        [        5       I S h  vN   US   S:X  d   eTR                  SS9S:X  d   eU (       a  UR                  5         TR                  5         S S S 5      IS h  vN   U (       d  US   S:X  d   eg UR                  (       d   e[        R                  " S	US   5      (       d
   US   5       eUS
   S:X  d   e[!        U5      S:X  d   eg  N N Nt! , IS h  vN  (       d  f       N= f7f)Nc                    >  [        5         TR                  S5        TR                  5         [        5       $ ! [        R                   a$  n TR                  [	        U 5      5         S n A NMS n A ff = fNNot Cancelled)r   r  r   r   r   r   r   r   r  s    r5   r<   6test_from_thread_check_cancelled_no_abandon.<locals>.f  sU    	#') EE/"
	*,,  	EE#a&MM	s   
8 A0A++A0Fr   r%   r   r'  r:  r
  zzcancelled due to explicit from task <Task 'trio._tests.test_threads.test_from_thread_check_cancelled_no_abandon' at 0x\w*>r	   rS   r=   )r  r  r+   r   r   r
   r  r  r  r   r  r  r   r  r   	fullmatchlen)r6  r<   r4   r  r  r   r  s        @@r5   +test_from_thread_check_cancelled_no_abandonr?    sR    1=1C1C1EA- - F		BE!!##w5%:$&&&ayG###uuQu?222LLN
 $# ayF"""
 %%%%||f1I
 
 	 !9		 

 ayF"""6{a/ $& $###s\   A$E:(E)E:,&E EAE E:)E*A1E:E E: E7&E)'E73E:c                 
  ^^#    [         R                  " 5       mS
UU4S jjn / n[        R                  " 5       m[        R
                  " 5       n[        R                  " 5        IS h  vN nUR                  [        SX!U 5        [        5       I S h  vN   US   S:X  d   eUR                  5         S S S 5      IS h  vN   TR                  5         UR                  (       d   e[        R                  " SUS   5      (       d
   US   5       eUS   S:X  d   eTR                  SS	9n[!        U["        5      (       a  Ue[        R                  " SU5      (       d   U5       eg  N N N! , IS h  vN  (       d  f       N= f7f)Nc                   > TR                  5          [        5         TR                  S5        g ! [        R                   a$  n TR                  [        U 5      5         S n A g S n A f[         a  n TR                  U 5         S n A g S n A ff = fr9  )r   r   r  r   r   r   r-   r;  s    r5   r<   =test_from_thread_check_cancelled_abandon_on_cancel.<locals>.f%  sd    
			#') EE/"  	EE#a&MM 	 EE!HH	s!   
/ B
A""B
/BB
Tr   r%   zcancelled due to explicit from task <Task 'trio._tests.test_threads.test_from_thread_check_cancelled_abandon_on_cancel' at 0x\w*>r   rM  r
  r'  r=   )r  r  r+   r   r   r
   r  r  r  r   r  r   r  r   r=  r  r~  r-   )r<   r4   r  r  resr   r  s        @@r5   2test_from_thread_check_cancelled_abandon_on_cancelrD     s]    1=1C1C1EA# # F		BE!!##w5$q9$&&&ayG###	 $# FFH!!!!<<	iq	   ay	 
 ":
%%%
C#}%%	||m
 
 	 		 
) $& $###s[   A$F(E#)F,&E)E%E)2F=E'>B&F%E)'F)F /E20F <Fc                   ^  [         R                  " [        5         [        5         S S S 5        [        R
                  " 5       m [        R                  " [        U 4S j5        [         R                  " [        5         T R                  SS9R                  5         S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nc                &   > TR                  U 5      $ r[   )r  )r   r  s    r5   re   Ltest_from_thread_check_cancelled_raises_in_foreign_threads.<locals>.<lambda>T  s    1558rL   r   r'  )
rm   rn   ro   r   r  r  r   r  r  unwrap)r  s   @r5   :test_from_thread_check_cancelled_raises_in_foreign_threadsrI  P  sw    	|	$#% 
%-9-?-?-AA	79KL	|	$	a! 
%	$	 
%	$ 
%	$s   B$=B5$
B25
Cc                 >  #    SS jn [        S5         [        R                  " 5        IS h  vN n[        S5       H  nUR	                  U 5        M     S S S 5      IS h  vN   S S S 5        g  N@ N! , IS h  vN  (       d  f       N$= f! , (       d  f       g = f7f)Nc                 L   #     [        [        [        SSS9I S h  vN   M   N7f)Nr   Fr  )r   r   r   rd   rL   r5   r  +test_reentry_doesnt_deadlock.<locals>.child_  s%     $_eQRWXXX Xs   $"$r	      r=   )r   r   r  r  r  )r  r  r   s      r5   test_reentry_doesnt_deadlockrN  Y  sg     Y 
q	%%''71X""5)  (' 
	'''' 
	sa   BBA.B$A2B A0!B%	B.B0B2B		8A;9B		B
BBc                 ^  ^#    Sm[        5       n [        5       n[        5       n[        5       nSS jnSU4S jjn[        R                  " 5        IS h  vN nUR                  X@U5        UR                  XAU5        [	        5       I S h  vN   UR                  U5        [	        5       I S h  vN   T(       a   e[        5       S:X  d   eU R                  5         UR                  5       I S h  vN   [	        5       I S h  vN   T(       a   e[        5       S:X  d   eUR                  5         UR                  5       I S h  vN   [	        5       I S h  vN   T(       d   e[        5       S:X  d   eS S S 5      IS h  vN   g  GN. N N N N NK N; N! , IS h  vN  (       d  f       g = f7f)	NFc                h   ^ #    SU 4S jjn[        U5      I S h  vN   UR                  5         g  N7f)Nc                 0   > [        T R                  5        g r[   )r   r   )r   s   r5   r   Ctest_wait_all_threads_completed.<locals>.wait_event.<locals>.threadr  s    AFF#rL   r=   )r   r   )r   e_exitr   s   `  r5   
wait_event3test_wait_all_threads_completed.<locals>.wait_eventq  s)     	$ !(((

 	)s   202c                 :   >#    [        5       I S h  vN   Sm g  N7fr*  )r   )no_threads_lefts   r5   wait_no_threads_left=test_wait_all_threads_completed.<locals>.wait_no_threads_leftx  s     (*** 	+s   r	   r   r   )r   r   rS  r   r>   r?   r=   )r   r   r  r  r   r   r   r   )e1e2	e1_exited	e2_exitedrT  rX  r  rW  s          @r5   test_wait_all_threads_completedr^  i  sS    O	B	BII
 !!##w:95:95$&&&/0$&&&""""$)))
nn$&&&""""$)))
nn$&&&"$)))' $## 	'&
 	&
 	&# $###s   AF-FF-2F
F"F-F.A F.F	/F FA FFFFF1F-<F=F-FF	FFFFF-F*FF*&F-c                 T   #    [        5       I S h  vN   [        5       S:X  d   eg  N7f)Nr   )r   r   rd   rL   r5   *test_wait_all_threads_completed_no_threadsr`    s'     
$
&&& A%%% 's   (&(r=   r[   )r   z
int | Noner>   r   )r,  zpytest.CaptureFixture[str]r-  pytest.MonkeyPatchr>   r?   )r1  r^   r  r  r3  r  r>   r?   )r-  ra  r>   r?   )
r	  r  r  r
   r4   z	list[str]r<   zCallable[[], None]r>   r?   )r6  r  r>   r?   )f
__future__r   contextvarsr$  r  r   ru   r+   r  r  	functoolsr   typingr   r   r   rm   r  r   r
   r   r   r   r   r   r   r   _core._tests.test_kir   _core._tests.tutilr   _threadsr   r   r   r   r   r   r   testingr   collections.abcr   r   r   outcomer   lowlevelr    listtupler   r@   r/   r-   r]   r!   ra   rp   r   r   r   r   r   r   r   r  r0  markparametrizerW  ro  r  r  r  r  
ContextVarr  r>  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r   r4  r  r?  rD  rI  rN  r^  r`  rd   rL   r5   <module>rr     s   "   	 
       	 	 	 + %   -CC%Y--]0CCCDE
CL9Qx-$`/8#:'E\ 1F@0,6"x#,%#,##, 
#,L 
+E4=1.>q+	q+q+ q+ 
	q+ ? 2 ,q+h,(,8(#(	((	(+ 5@4J4J5 1 
"5J.*;0	(	(1(0V(5V
@+6%CQA8)v""" " 	"
 
"" +eT];(  <( V-`" * *'*T&rL   