
    g                       U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
mZ d dlmZmZmZmZ d dlZd dlZddlmZmZmZmZmZmZmZmZ ddlmZ ddlmZ dd	l m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' dd
l(m)Z) erd dl*m+Z+m,Z,m-Z- d dl.m/Z/ ddl0m1Z1 e2e3e4eej5        e6e7         f         f                  Z8 ed          Z9dHdZ:dHdZ;dHdZ<dHdZ=dHdZ>dIdJdZ?dHdZ@dHdZAdHdZBdHdZCdKd"ZDejE        F                    d#g d$          ejE        F                    d%d&d'g          ejE        F                    d(d&d'g          dLd+                                    ZGdHd,ZHdHd-ZIdMd.ZJdHd/ZKdHd0ZL ejM        d1          ZNd2eOd1<   dHd3ZPdHd4ZQdHd5ZRdHd6ZSdHd7ZTdHd8ZUdHd9ZVdHd:ZWdHd;ZXdHd<ZYdHd=ZZdHd>Z[dHd?Z\dHd@Z]dHdAZ^dHdBZ_dHdCZ`dHdDZaedHdE            ZbdHdFZcdHdGZddS )N    )annotationsNpartial)TYPE_CHECKINGNoReturnTypeVarUnion   )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TreturnNonec                 t  K   t          j                    	 ddfd} t          j                    }dd} | t          |d|           d {V  dd} | t          |dt
          f|           d {V  dd} | t          |d|           d {V  dd} | t          |dt          f|           d {V  d S )Ndo_in_trio_threadCallable[..., threading.Thread]fnCallable[..., T | Awaitable[T]]expectedtuple[str, T]
trio_token_core.TrioToken | Noner#   r$   c                4   K   g d
 fd}t          j        |d          }|                                 |                                r8t	          d           t          d           d {V  |                                8d|fd	f|gk    sJ d S )Nr#   r$   c                 :   	                      dt          j                    f                      }                      d| f           d S # t          $ r>}t	          |                                dt          |          f           Y d }~d S d }~ww xY w)Nstartr,   goterror)append	threadingcurrent_threadBaseExceptionprinttype)xexcr&   r(   recordr,   s     d/var/www/html/nodeJS/PythonScripts/venv3.11/lib/python3.11/site-packages/trio/_tests/test_threads.pythreadfnz<test_do_in_trio_thread.<locals>.check_case.<locals>.threadfnB   s    4w	(@(B(BCDDD%%b&ZHHHuaj)))))  4 4 4c


wS		23333333334s   AA 
B3BBT)targetdaemonyawn{Gz?r0   fr#   r$   )r5   Threadr0   is_aliver8   r   )r&   r(   r*   r,   r>   child_threadr<   trio_threads   `` `  @r=   
check_casez*test_do_in_trio_thread.<locals>.check_case:   s        	4 	4 	4 	4 	4 	4 	4 	4 	4 !'xEEE##%% 	&MMM++ ##%% 	 7L1C3ExPPPPPPP    r<   
RecordTypeintc                    t          j                    rJ |                     dt          j                    f           dS )NrC   r
   )r   currently_ki_protectedr4   r5   r6   r<   s    r=   f1z"test_do_in_trio_thread.<locals>.f1T   s<    /11111sI4667888qrJ   )r2   r
   r1   r   c                    t          j                    rJ |                     dt          j                    f           t
          NrC   )r   rN   r4   r5   r6   
ValueErrorrO   s    r=   f2z"test_do_in_trio_thread.<locals>.f2[   s=    /11111sI4667888rJ   r3   c                   K   t          j                    rJ t          j                     d {V  |                     dt	          j                    f           dS )NrC      )r   rN   
checkpointr4   r5   r6   rO   s    r=   f3z"test_do_in_trio_thread.<locals>.f3b   sa      /11111         sI4667888qrJ   )r2   rV   c                   K   t          j                    rJ t          j                     d {V  |                     dt	          j                    f           t          rR   )r   rN   rW   r4   r5   r6   KeyErrorrO   s    r=   f4z"test_do_in_trio_thread.<locals>.f4j   sa      /11111         sI4667888rJ   N)
r&   r'   r(   r)   r*   r+   r,   r-   r#   r$   )r<   rK   r#   rL   )r<   rK   r#   r   )r5   r6   r   current_trio_tokenr   rS   r   rZ   )rI   tokenrP   rT   rX   r[   rH   s         @r=   test_do_in_trio_threadr_   7   sk     *,,K .2	Q Q Q Q Q Q Q0 $&&E   
 *)2ze
L
L
LLLLLLLL   
 *)2/DQV
W
W
WWWWWWWW    *_b*
G
G
GGGGGGGG    *_b7H*=%
P
P
PPPPPPPPPPrJ   c                   K   t          j        t                    5  t          d            d d d            n# 1 swxY w Y   dd} t          j        t                    5  t	          |            d d d            d S # 1 swxY w Y   d S )Nc                     d S r\    rb   rJ   r=   <lambda>z9test_do_in_trio_thread_from_trio_thread.<locals>.<lambda>u       T rJ   r#   r$   c                 
   K   d S r\   rb   rb   rJ   r=   fooz4test_do_in_trio_thread_from_trio_thread.<locals>.foow         rJ   rD   )pytestraisesRuntimeErrorr   r   )rf   s    r=   'test_do_in_trio_thread_from_trio_threadrk   s   s     	|	$	$ + +\\***+ + + + + + + + + + + + + + +    
|	$	$                   s   9= =!A>>BBc                 l    t                      dfd} t          j        |            ddhk    sJ d S )Nr#   r$   c                   K   t          j                    dddfddfd} t          j        |           }|                                 t          d           |                                r)t          d           d {V  |                                )t          d	           |                                 t          d
           d S )Nr#   r$   c                    t          d           t          j                    rJ t          d           	 t                       dd l} t          d | j                               d S # dd l} t          d | j                               w xY w)Nzin Trio threadr   r   finally)r8   r   rN   r   sysexc_info)rp   s    r=   trio_thread_fnzTtest_run_in_trio_thread_ki.<locals>.check_run_in_trio_thread.<locals>.trio_thread_fn   s    "###355555)1			


i00000 


i0000s   A& &#B	c                     K                  d S r\   rb   )rr   s   r=   trio_thread_afnzUtest_run_in_trio_thread_ki.<locals>.check_run_in_trio_thread.<locals>.trio_thread_afn   s      NrJ   c                 B   	 t          d           t                     n4# t          $ r' t          d                                d           Y nw xY w	 t	                     d S # t          $ r( t          d                                d           Y d S w xY w)Nrunningr1   ok1ok2)r8   r   KeyboardInterruptaddr   )r<   r^   rt   rr   s   r=   external_thread_fnzXtest_run_in_trio_thread_ki.<locals>.check_run_in_trio_thread.<locals>.external_thread_fn   s    "i   $^FFFFF$ " " "e

5!!!!!""EBBBBBB$ " " "e

5!!!!!!"s!    $ .AAA, ,.BB)r?   waitingrB   zwaited, joiningdonerD   )	r   r]   r5   rE   r0   r8   rF   r   join)r{   threadr^   rt   rr   r<   s     @@@r=   check_run_in_trio_threadz<test_run_in_trio_thread_ki.<locals>.check_run_in_trio_thread   s     (**		1 		1 		1 		1	 	 	 	 	 		" 	" 	" 	" 	" 	" 	" 	" 	" !);<<<ioo 	++ oo 	   frJ   rw   rx   rD   )setr   run)r   r<   s    @r=   test_run_in_trio_thread_kir   ~   s[     UUF% % % % % %N 
I&'''eU^######rJ   c                     g t                      dfddfddfd} t          j        |           }|                                 d	d
gk    sJ d S )Nr#   r$   c                    K                        d                                             t          j        d            d {V  d S )Nsleepingc                $    t           j        j        S r\   )r   Abort	SUCCEEDED)_s    r=   rc   zMtest_await_in_trio_thread_while_main_exits.<locals>.trio_fn.<locals>.<lambda>   s    EK4I rJ   )r4   r   r   wait_task_rescheduled)evr<   s   r=   trio_fnz;test_await_in_trio_thread_while_main_exits.<locals>.trio_fn   sS      j!!!
)*I*IJJJJJJJJJJJrJ   r^   _core.TrioTokenc                    	 t          |            d S # t          j        $ r                     d           Y d S w xY w)Nr1   	cancelled)r   r   	Cancelledr4   )r^   r<   r   s    r=   	thread_fnz=test_await_in_trio_thread_while_main_exits.<locals>.thread_fn   sY    	'G666666 	' 	' 	'MM+&&&&&&	's    $>>threading.Threadc                    K   t          j                    } t          j        | f          }|                                                                  d {V  dgk    sJ |S )N)r?   argsr   )r   r]   r5   rE   r0   wait)r^   r   r   r<   r   s     r=   mainz8test_await_in_trio_thread_while_main_exits.<locals>.main   sj      (**!%BBBggii*%%%%rJ   r   r   rD   )r^   r   r#   r$   )r#   r   )r   r   r   r~   )r   r   r   r<   r   r   s     @@@@r=   *test_await_in_trio_thread_while_main_exitsr      s    F	BK K K K K K K
' ' ' ' ' ' '        Yt__F
KKMMMj+.......rJ   c                 ^  K   d} d| z   fdddfd	t                     d {V  t          d 
           d {V  t           d| z                        d {V  dfd} |d           d {V   |d           d {V   |d           d {V   |d           d {V  d S )Nz0 from trio._tests.test_threads.test_named_threadinnernamestrr#   r   c                d    t          j                    j        | k    sJ t          j                    S r\   )r5   r6   r   )r   s    r=   r   z test_named_thread.<locals>.inner   s.    ')).$6666')))rJ   Callable[[], threading.Thread]c                $    t          |           S r\   r   r   r   s    r=   rC   ztest_named_thread.<locals>.f       ud###rJ   thread_namer$   c                   K   t           |           |            d {V }t          j        d|j                  sJ d S )Nr   Trio thread [0-9]*)r   rematchr   )r   r   rC   s     r=   test_thread_namez+test_named_thread.<locals>.test_thread_name   sT      )!!D''tDDDDDDDDDx-v{;;;;;;;rJ    fobiedooname_longer_than_15_characters   💙r   r   r#   r   r   r   r#   r   )r   r   r#   r$   r   )endingr   rC   r   s     @@r=   test_named_threadr      sv     ?F!F* * * * * *$ $ $ $ $ $ U
#
########
U
5
5
55555555 QQv//
0
00000000< < < < < < 
2



:
&
&&&&&&&&

;
<
<<<<<<<<

6
"
""""""""""rJ   ident
int | None
str | Nonec                j   dd l }dd l}|j                            d          }|sd}	 |                    |          }n-# t
          $ r  t          dt          j                    Y d S w xY wt          |dd           }|sJ |j
        |j        |j        g|_        |j        |_        |                    dd          }| t#          j                    }  || |d          dk    sJ 	 |j                                        S # t*          $ r*}t-          j        d	|j        d
|            Y d }~d S d }~ww xY w)Nr   pthreadzlibc.sozno pthread on pthread_getname_nprJ      )sizezvalue: z, exception: )ctypesctypes.utilutilfind_libraryCDLL	Exceptionr8   rp   platformgetattrc_void_pc_char_pc_size_targtypesc_intrestypecreate_string_bufferr5   	get_identvaluedecodeUnicodeDecodeErrorrh   fail)r   r   libpthread_path
libpthreadr   name_bufferes          r=   _get_thread_namer      s   MMMk..y99O $ $[[11

   -s|--...tt !-A4HH  	#
 "(--c-;;K}#%%e["55::::E ''))) E E ECk/CCCCDDDDDDDDDEs'   > &A('A(%C> >
D2D--D2c                 <  K   dddfdd} t           |                      d {V  t           |           d 	           d {V  ddfd} |d           d {V   |d           d {V   |d           d {V   |dd           d {V  d S )Nr   r   r#   r   c                    t                      }|2t          j        dk    r"t          j        dt          j                    n|| d d         k    sJ t          j                    S )Nlinuxzno pthread OS support on    )r   rp   r   rh   skipr5   r6   )r   os_thread_names     r=   r   z#test_named_thread_os.<locals>.inner  se    )++!clg&=&=KBCLBBCCCC!T#2#Y....')))rJ   r   c                $    t          |           S r\   r   r   s    r=   rC   ztest_named_thread_os.<locals>.f  r   rJ   z4None from trio._tests.test_threads.test_named_threadr   r*   r   r$   c                   K   || }t           |          |            d {V }t          |j                  }|
J d            t          j        d|          sJ d S )Nr   z'should skip earlier if this is the caser   )r   r   r   r   r   )r   r*   r   r   rC   s       r=   r   z.test_named_thread_os.<locals>.test_thread_name(  s      H)!!H++4HHHHHHHHH)&,77))+T)))x-~>>>>>>>rJ   r   r   r   r   ?)r*   r   r   r\   )r   r   r*   r   r#   r$   r   )defaultr   rC   r   s     @@r=   test_named_thread_osr     sT     * * * *$ $ $ $ $ $ EG
QQwZZ
(
((((((((
QQwZZT
:
:
::::::::? ? ? ? ? ? ? 
2



:
&
&&&&&&&&

;
<
<<<<<<<<

6C
0
0
0000000000rJ   c                     ddl m}   |             }|5t          j        dk    sJ t	          j        dt          j                    d S d S )Nr   )get_os_thread_name_funcr   zno pthread_setname_np on )trio._core._thread_cacher   rp   r   rh   r   )r   ks     r=   test_has_pthread_setname_npr   8  sb    @@@@@@!!Ay|w&&&&>>>????? yrJ   c                   K   t          j                    } dd}t          |d           d {V \  }}|dk    sJ || k    sJ dd}t          j        t
          d	
          5 }t          |           d {V  d d d            n# 1 swxY w Y   t          |j        j                   |j        j        d         | k    sJ d S )Nr:   r"   r#   tuple[T, threading.Thread]c                ,    | t          j                    fS r\   )r5   r6   )r:   s    r=   rC   z$test_run_in_worker_thread.<locals>.fD  s    9+--..rJ      r   c                 B    t          t          j                              r\   )rS   r5   r6   rb   rJ   r=   gz$test_run_in_worker_thread.<locals>.gK  s    133444rJ   z1^<Thread\(Trio thread \d+, started daemon \d+\)>$r   r   )r:   r"   r#   r   )r#   r   )	r5   r6   r   rh   ri   rS   r8   r   r   )rH   rC   r:   rG   r   excinfos         r=   test_run_in_worker_threadr   A  sK     *,,K/ / / / /q!44444444OA|6666;&&&&5 5 5 5 
B
 
 
 $ 
 #########	$ $ $ $ $ $ $ $ $ $ $ $ $ $ $
 
'-
=a K//////s   "BBBc                   K   d gdfddfd} g t          j                    }t          j                    4 d {V }|                    | |d	           t                       d {V  d
gk    sJ |j                                         d d d           d {V  n# 1 d {V swxY w Y   d         dk    sJ |                    d            d         dk    r t          j
        d           d         dk     g d d<   t          j                    4 d {V }|                    | |d           t                       d {V  |j                                         t          j        d	          5  t          d          D ]}t          j                     d {V  	 d d d            n# 1 swxY w Y   d
gk    sJ |                    d            d d d           d {V  n# 1 d {V swxY w Y   t          j                    5 }|                                  | |d           d {V  d d d            n# 1 swxY w Y   |j        sJ d S )Nqstdlib_queue.Queue[None]r#   r$   c                D    dd<   |                                   dd<   d S )Nblockingr   finished)get)r   registers    r=   rC   z1test_run_in_worker_thread_cancellation.<locals>.fZ  s&     	 rJ   abandon_on_cancelboolc                   K                        d           	 t          | |           d {V 	                      d           S #                      d           w xY w)Nr0   r   exit)r4   r   )r   r   rC   r<   s     r=   childz5test_run_in_worker_thread_cancellation.<locals>.child`  ss      g	"+AqDUVVVVVVVVVVMM&!!!!FMM&!!!!s   A ATr0   r   r   rB   Fshield
   )r   r   r#   r$   )r   r   r   r   r#   r$   )stdlib_queueQueuer   open_nursery
start_soonr   cancel_scopecancelputtimer   r   rangerW   cancelled_caught)r   r   nurseryr   scoperC   r<   r   s        @@@r=   &test_run_in_worker_thread_cancellationr	  W  sa     "&H! ! ! ! ! !" " " " " " " F"."4"6"6A!## & & & & & & &w5!T*** %&&&&&&&&&'""""##%%%& & & & & & & & & & & & & & & & & & & & & & & & & & & A;*$$$$EE$KKK
1+
#
#
4 1+
#
# FHQK!## 	 	 	 	 	 	 	w5!U+++$&&&&&&&&&##%%%d+++ 	) 	)2YY ) )&(((((((((()	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) '""""	d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 
			 eAuoo               !!!!!!s\   AB$$
B.1B.$AG2>,F7+G27F;	;G2>F;	?!G22
G<?G<'I		IIcapfdpytest.CaptureFixture[str]monkeypatchpytest.MonkeyPatchc                   |                     t          j        dd           t          j                    t          j                    dfddfd}t          j        |                               d                                            }|                                r(t          j
        d           |                                (|                                 \  }}d|vsJ d|vsJ d S )	NIDLE_TIMEOUTrB   r#   r$   c                 |                                                           t          j                               d S r\   )r   r  r5   r6   )q1q2s   r=   r   z6test_run_in_worker_thread_abandoned.<locals>.thread_fn  s1    

y'))*****rJ   c                   K   dfd} t          j                    4 d {V }|                    |            t                       d {V  |j                                         d d d           d {V  d S # 1 d {V swxY w Y   d S )Nr#   r$   c                 :   K   t           d           d {V  d S )NTr   r   )r   s   r=   r   z@test_run_in_worker_thread_abandoned.<locals>.main.<locals>.child  s2      $Y$GGGGGGGGGGGGrJ   rD   )r   r   r   r   r  r  )r   r  r   s     r=   r   z1test_run_in_worker_thread_abandoned.<locals>.main  s>     	H 	H 	H 	H 	H 	H %'' 	* 	* 	* 	* 	* 	* 	*7u%%%(********* '')))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   AA99
BBzException in threadrD   )setattrr   _thread_cacher   r   r   r  r   rF   r  r   
readouterr)	r
  r  r   r   outerrr  r  r   s	         @@@r=   #test_run_in_worker_thread_abandonedr    s!    +^TBBB#/#5#7#7B/;/A/C/CB+ + + + + + +* * * * * * 
IdOOOFF4LLL VVXXF
//

 
4 //

  !!HC ++++ ++++++rJ   MAX)rV      r   r  FTuse_default_limiterrL   r   c                   
K   d| z  }t          j                    
t          j                    |rt                      }|j        }| |_        d nt          |           }| }|	  G d d          d_        d_        d_        d_	        t          j                    d
fd	dfd}t          j                    4 d {V }t          d           g }t          |          D ]S}	|                    t                                 |                    ||d                    t#                       d {V  TrCt          d           |d                                          d {V  t#                       d {V  j	        | k    s|                                j        | k    r=t+          d           d {V  j	        | k     |                                j        | k    =
                                 d d d           d {V  n# 1 d {V swxY w Y   j        | k    sJ r+|j        dk    r t+          d           d {V  |j        dk     j        |k    sJ j        dk    sJ 	 ||_        d S # ||_        w xY w)Nr
   c                  8    e Zd ZU ded<   ded<   ded<   ded<   dS )0test_run_in_worker_thread_limiter.<locals>.staterL   ran
high_waterrv   parkedN)__name__
__module____qualname____annotations__rb   rJ   r=   stater     s4         HHHOOOLLLKKKKKrJ   r(  r   r  r   r#   r$   c                   t          d           t          | j                   5  xj        dz  c_        xj        dz  c_        t          j        j                  _        xj        dz  c_        d d d            n# 1 swxY w Y                                    5  xj        dz  c_        xj        dz  c_        d d d            n# 1 swxY w Y   t          d           d S )Nzthread_fn startr1   r   zthread_fn exiting)	r8   r   r  r!  rv   maxr"  r#  r   )r  gatelockr(  r^   s    r=   r   z4test_run_in_worker_thread_limiter.<locals>.thread_fn  sl   #$$$ !4GGGG " "		Q		"#&u'7#G#G  !" " " " " " " " " " " " " " " IIKKK # #!"# # # # # # # # # # # # # # # %&&&&&s$   ABB	B	&!CCCeventr   c                   K   t          j                    5 }t          |           d {V  d d d            n# 1 swxY w Y   t          d|j                   |                                  d S )N)r   limiterzrun_thread finished, cancelled:)r   r   r   r8   r  r   )r-  r  r  limiter_argr   s     r=   
run_threadz5test_run_in_worker_thread_limiter.<locals>.run_thread  s      "$$ ( &,'	                        3\5RSSSIIKKKKKs   =AAspawningz'waiting for first cancellation to clearrB   )r  r   r#   r$   )r-  r   r#   r$   )r5   r   Lockr   total_tokensr   r!  r"  rv   r#  r   r]   r   r8   r  r4   r   r   r   
statisticstasks_waitingr   r   borrowed_tokens)r  r  r  COUNTcorig_total_tokensr1  r  eventsr   r+  r0  r,  r(  r   r^   s    `        @@@@@@r=   !test_run_in_worker_thread_limiterr=    s      GE?D>D *,,NC  [+	 	 	 	 	 	 	 	 	(**	' 	' 	' 	' 	' 	' 	' 	' 	' 		 		 		 		 		 		 		 		 %'' 	 	 	 	 	 	 	7*F5\\ / /egg&&&"":vbz:::,..........  /?@@@Qinn&&&&&&&&&,......... ##q||~~'Cs'J'JDkk!!!!!!! ##q||~~'Cs'J'J HHJJJ5	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	8 3&&&& 	" #a''Dkk!!!!!!! #a'' yE!!!!}!!!!!******s3   *A&J D3HJ 
HJ "H#AJ 	Jc                    K   g  G fdd          } t          d  |                        d {V  ddgk    sJ d S )Nc                  (    e Zd Zd fdZd fdZdS )	?test_run_in_worker_thread_custom_limiter.<locals>.CustomLimiterborrowerr!   r#   r$   c                D   K                        d           || _        d S Nacquirer4   	_borrowerselfrA  r<   s     r=   acquire_on_behalf_ofzTtest_run_in_worker_thread_custom_limiter.<locals>.CustomLimiter.acquire_on_behalf_of6  s$      MM)$$$%DNNNrJ   c                L                         d           || j        k    sJ d S )NreleaserE  rG  s     r=   release_on_behalf_ofzTtest_run_in_worker_thread_custom_limiter.<locals>.CustomLimiter.release_on_behalf_of:  s.    MM)$$$t~------rJ   NrA  r!   r#   r$   r$  r%  r&  rI  rL  rO   s   r=   CustomLimiterr@  5  sQ        	& 	& 	& 	& 	& 	&	. 	. 	. 	. 	. 	. 	. 	.rJ   rO  c                     d S r\   rb   rb   rJ   r=   rc   z:test_run_in_worker_thread_custom_limiter.<locals>.<lambda>@  rd   rJ   r/  rD  rK  r   )rO  r<   s    @r=   (test_run_in_worker_thread_custom_limiterrR  0  s       F. . . . . . . . . . \\==??
C
C
CCCCCCCCi+++++++rJ   c                   K   g  G fdd          }  |             }t          j        t          d          5 }t          d |           d {V  d d d            n# 1 swxY w Y   |j        j        J ddgk    sJ g i t          j        t          d          5 }t          fd	|           d {V  d d d            n# 1 swxY w Y   t          |j        j        t                    sJ ddgk    sJ d S )
Nc                  (    e Zd Zd	 fdZd
 fdZdS )Ctest_run_in_worker_thread_limiter_error.<locals>.BadCapacityLimiterrA  r!   r#   r$   c                6   K                        d           d S rC  )r4   rG  s     r=   rI  zXtest_run_in_worker_thread_limiter_error.<locals>.BadCapacityLimiter.acquire_on_behalf_ofH  s      MM)$$$$$rJ   r   c                L                         d           t          d          )NrK  zrelease on behalf)r4   rS   rG  s     r=   rL  zXtest_run_in_worker_thread_limiter_error.<locals>.BadCapacityLimiter.release_on_behalf_ofK  s$    MM)$$$0111rJ   NrM  )rA  r!   r#   r   rN  rO   s   r=   BadCapacityLimiterrU  G  sQ        	% 	% 	% 	% 	% 	%	2 	2 	2 	2 	2 	2 	2 	2rJ   rX  z^release on behalf$r   c                     d S r\   rb   rb   rJ   r=   rc   z9test_run_in_worker_thread_limiter_error.<locals>.<lambda>R       rJ   rQ  rD  rK  c                      d         S )Nr:   rb   )ds   r=   rc   z9test_run_in_worker_thread_limiter_error.<locals>.<lambda>[  s    3 rJ   )rh   ri   rS   r   r   __context__
isinstancerZ   )rX  bsr   r\  r<   s      @@r=   'test_run_in_worker_thread_limiter_errorr`  D  s     F2 2 2 2 2 2 2 2 2 2 
			B	z)?	@	@	@ ;G r::::::::::; ; ; ; ; ; ; ; ; ; ; ; ; ; ;=$,,,i+++++F A	z)?	@	@	@ =G <<<<<<<<<<= = = = = = = = = = = = = = =gm/:::::i+++++++s#   A  A$'A$"C		CCc                l  K   dd}|                      t          j        j        d|           t	                      }|j        dk    sJ t          j        t                    5 }t          d	            d {V  d d d            n# 1 swxY w Y   d
t          |j                  v sJ |j        dk    sJ d S )NrH  objectr   r#   r   c                     t          d          )Nz!the engines canna take it captain)rj   )rH  r   s     r=   	bad_startz:test_run_in_worker_thread_fail_to_spawn.<locals>.bad_startd  s    >???rJ   start_thread_soonr   c                     d S r\   rb   rb   rJ   r=   rc   z9test_run_in_worker_thread_fail_to_spawn.<locals>.<lambda>n  rZ  rJ   engines)rH  rb  r   rb  r#   r   )r  r   r  ThreadCacher   r8  rh   ri   rj   r   r   r   )r  rd  r/  r   s       r=   'test_run_in_worker_thread_fail_to_spawnri  `  s     @ @ @ @ +79LiXXX,..G"a'''' 
|	$	$ / ........./ / / / / / / / / / / / / / /GM******"a''''''s   !BBBc                 r   K   dd} t          j                    }t          |            d {V }||k    sJ d S )Nr#   r   c                 8    t          t          j                  } | S r\   r   r   r]   callee_tokens    r=   r   z5test_trio_to_thread_run_sync_token.<locals>.thread_fnw      +E,DEErJ   r#   r   r   r]   r   r   caller_tokenrn  s      r=   "test_trio_to_thread_run_sync_tokenrt  t  `          +--L+I66666666L<''''''rJ   c                    K   dd} t          j        t          d          5  t          |            d {V  d d d            d S # 1 swxY w Y   d S )Nr#   r$   c                 
   K   d S r\   rb   rb   rJ   r=   async_fnz=test_trio_to_thread_run_sync_expected_error.<locals>.async_fn  rg   rJ   zexpected a sync functionr   rD   )rh   ri   	TypeErrorr   rx  s    r=   +test_trio_to_thread_run_sync_expected_errorr{    s          
y(B	C	C	C + + *********+ + + + + + + + + + + + + + + + + +s   AA	A	trio_test_contextvarzcontextvars.ContextVar[str]c                   K   t          j                    } t                              d           d
d}t	          |           d {V \  }}|dk    sJ || k    sJ dd}t	          |           d {V \  }}}t                                          }|dk    sJ |dk    sJ |dk    s
J d            t          j                    d	k    sJ d S )Nr   r#   tuple[str, threading.Thread]c                     t                                           } t          j        t          j                  5  t	          j                     d d d            n# 1 swxY w Y   | t          j                    fS r\   )	r|  r   rh   ri   sniffioAsyncLibraryNotFoundErrorcurrent_async_libraryr5   r6   )r   s    r=   rC   z3test_trio_to_thread_run_sync_contextvars.<locals>.f  s    $((**]7<== 	, 	,)+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,y/1122s   AAA!tuple[str, str, threading.Thread]c                 X   t                                           } t                               d           t                                           }t          j        t
          j                  5  t          j                     d d d            n# 1 swxY w Y   | |t          j	                    fS )Nworker)
r|  r   r   rh   ri   r  r  r  r5   r6   )parent_valueinner_values     r=   r   z3test_trio_to_thread_run_sync_contextvars.<locals>.g  s    +//11  ****..00]7<== 	, 	,)+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, $&&
 	
s   +BBBr  zRThe contextvar value set on the worker would not propagate back to the main threadtrio)r#   r~  )r#   r  )r5   r6   r|  r   r   r   r  r  )rH   rC   r   rG   r   r  r  current_values           r=   (test_trio_to_thread_run_sync_contextvarsr    s0     *,,KV$$$3 3 3 3 !31 5 5555555E<F????;&&&&

 

 

 

 5Gq4I4I.I.I.I.I.I.I+L+|(,,..M6!!!!(""""F"""	 #"" (**f444444rJ   c                   K   d	d} t          |            d {V }t          |t                    sJ d
dd
fd}t          j        t
          d          5  t          |           d {V  d d d            d S # 1 swxY w Y   d S )Nr#   floatc                 8    t          t          j                  } | S r\   )r   r   current_time)	trio_times    r=   thread_fn_1z3test_trio_from_thread_run_sync.<locals>.thread_fn_1  s    ();<<	rJ   r$   c                 
   K   d S r\   rb   rb   rJ   r=   rx  z0test_trio_from_thread_run_sync.<locals>.async_fn  rg   rJ   c                 &    t                      d S r\   )r   rz  s   r=   thread_fn_2z3test_trio_from_thread_run_sync.<locals>.thread_fn_2  s    X&&&&&rJ   zexpected a synchronous functionr   )r#   r  rD   )r   r^  r  rh   ri   ry  )r  r  r  rx  s      @r=   test_trio_from_thread_run_syncr    s          )55555555Ii'''''   ' ' ' ' ' ' 
y(I	J	J	J . . ---------. . . . . . . . . . . . . . . . . .s   A<<B B c                   K   g d
fdd
fd} t          |            d {V  ddgk    sJ d
d}t          j        t          d	          5  t          t          |           d {V  d d d            d S # 1 swxY w Y   d S )Nr#   r$   c                 \   K   t          j                                          d           d S )Nback in trio)r   r  r4   rO   s   r=   back_in_trio_fnz2test_trio_from_thread_run.<locals>.back_in_trio_fn  s.      n%%%%%rJ   c                 P                         d           t                      d S )N	in thread)r4   r   )r  r<   s   r=   r   z,test_trio_from_thread_run.<locals>.thread_fn  s)    k"""(((((rJ   r  r  c                     d S r\   rb   rb   rJ   r=   sync_fnz*test_trio_from_thread_run.<locals>.sync_fn  s    rJ   zappears to be synchronousr   rD   )r   rh   ri   ry  r   )r   r  r  r<   s     @@r=   test_trio_from_thread_runr    s:      F& & & & & &) ) ) ) ) ) ) Y
'
''''''''k>22222    
y(C	D	D	D ; ; ':::::::::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;s   A;;A?A?c                 r   K   dd} t          j                    }t          |            d {V }||k    sJ d S )Nr#   r   c                 8    t          t          j                  } | S r\   rl  rm  s    r=   r   z.test_trio_from_thread_token.<locals>.thread_fn  ro  rJ   rp  rq  rr  s      r=   test_trio_from_thread_tokenr    ru  rJ   c                 t   K   dd} t          j                    }t          | |           d {V }||k    sJ d S )Nr^   r   r#   c                <    t          t          j        |           }|S )Nr1   rl  )r^   rn  s     r=   r   z4test_trio_from_thread_token_kwarg.<locals>.thread_fn  s    +E,DQVWWWrJ   )r^   r   r#   r   rq  rr  s      r=   !test_trio_from_thread_token_kwargr    sb          +--L+I|DDDDDDDDL<''''''rJ   c                    K   t          j        t                    5  t          t          j                   d d d            d S # 1 swxY w Y   d S r\   rh   ri   rj   r   r   r  rb   rJ   r=   test_from_thread_no_tokenr    s       
|	$	$ 1 1U/0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1s   AA
Ac                 B  K   t                               d           dd} t          |            d {V \  }}}}}t                                           }||cxk    rdk    sn J ||cxk    r|cxk    rdk    sn J t	          j                    dk    sJ |dk    sJ d S )	Nr   r#   tuple[str, str, str, str, str]c                 *   t                                           } t                               d           t                                           }t          j        t
          j                  5  t          j                     d d d            n# 1 swxY w Y   dd}t          |          \  }}t                                           }t          j        t
          j                  5  t          j                     d d d            n# 1 swxY w Y   | ||||fS )Nr  r#   tuple[str, str]c                     t                                           } t                               d           t                                           }t          j                    dk    sJ | |fS Nback_in_mainr  r|  r   r   r  r  back_parent_valueback_current_values     r=   r  zStest_trio_from_thread_run_sync_contextvars.<locals>.thread_fn.<locals>.back_in_main
  s`     4 8 8 : : $$^444!5!9!9!;!;022f<<<<$&888rJ   r#   r  )	r|  r   r   rh   ri   r  r  r  r   )thread_parent_valuethread_current_valuer  r  r  thread_after_values         r=   r   z=test_trio_from_thread_run_sync_contextvars.<locals>.thread_fn  s   26688  ***37799]7<== 	, 	,)+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,	9 	9 	9 	9 1E\0R0R--15577]7<== 	, 	,)+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,   
 	
$   +BBB#DD
Dr  r  r  r#   r  r|  r   r   r   r  r  r   r  r  r  r  r  r  s          r=   *test_trio_from_thread_run_sync_contextvarsr     s      V$$$
 
 
 
@ !++++++++(,,..M/99996999999#4VVVV8JVVVVhVVVVVV(**f4444//////rJ   c                 B  K   t                               d           dd} t          |            d {V \  }}}}}t                                           }||cxk    rdk    sn J ||cxk    r|cxk    rdk    sn J |dk    sJ t	          j                    dk    sJ d S )	Nr   r#   r  c                 *   t                                           } t                               d           t                                           }t          j        t
          j                  5  t          j                     d d d            n# 1 swxY w Y   dd}t          |          \  }}t                                           }t          j        t
          j                  5  t          j                     d d d            n# 1 swxY w Y   | ||||fS )Nr  r#   r  c                    K   t                                           } t                               d           t                                           }t          j                    dk    sJ | |fS r  r  r  s     r=   async_back_in_mainzTtest_trio_from_thread_run_contextvars.<locals>.thread_fn.<locals>.async_back_in_main5  sd       4 8 8 : : $$^444!5!9!9!;!;022f<<<<$&888rJ   r  )	r|  r   r   rh   ri   r  r  r  r   )r  r  r  r  r  r  s         r=   r   z8test_trio_from_thread_run_contextvars.<locals>.thread_fn.  s   26688  ***37799]7<== 	, 	,)+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,	9 	9 	9 	9 1@@R0S0S--15577]7<== 	, 	,)+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,   
 	
r  r  r  r  r  r  r  s          r=   %test_trio_from_thread_run_contextvarsr  +  s      V$$$
 
 
 
@ !++++++++(,,..M/99996999999#4VVVV8JVVVVhVVVVVV////(**f444444rJ   c                     t          j        t                    5  t          t          j        d           d d d            d S # 1 swxY w Y   d S )NzNot TrioTokentyper1   r  rb   rJ   r=   3test_run_fn_as_system_task_caught_badly_typed_tokenr  V  s    	|	$	$ 
 
*	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   AA
Ac                    K   dd} t          j                    }t          j        t                    5  t          | |           d d d            d S # 1 swxY w Y   d S )Nr#   r$   c                     t                      r\   )AssertionErrorrb   rJ   r=   
not_calledz7test_from_thread_inside_trio_thread.<locals>.not_called_  s    rJ   r1   rD   )r   r]   rh   ri   rj   r   )r  r,   s     r=   #test_from_thread_inside_trio_threadr  ^  s          )++J	|	$	$ @ @ZJ????@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @s   AAAc                     g g dfddfd	} t          j        | d
           t          j        | d           ddgk    sJ d S )Nr^   r-   r#   AsyncGenerator[None, None]c                 K   	 d W V  t          j        d          5  	 t          t          t          t
          d|                      d {V                      d           n*# t           j        $ r                     d           Y nw xY wd d d            d S # 1 swxY w Y   d S # t          j        d          5  	 t          t          t          t
          d|                      d {V                      d           n*# t           j        $ r                     d           Y nw xY wd d d            w # 1 swxY w Y   w xY w)NTr   r   r1   cleanr   )r   r   r   r   r   r   r4   RunFinishedError)r^   r<   s    r=   agenz2test_from_thread_run_during_shutdown.<locals>.agenk  s0     	+EEEE"$/// + ++,eLLL         MM'**** - . . .MM*-----.+ + + + + + + + + + + + + + + + + +"$/// + ++,eLLL         MM'**** - . . .MM*-----.+ + + + + + + + + + + + + + + +s   B+ B0A'B'$BBBBB"%B"+ED?0D	3D?	$D0	-D?/D0	0D?3E?EEEEuse_system_taskr   r$   c                   K                         | rt          j                    nd                      d                             d            d {V  d S )Nr3  )r4   r   r]   asend)r  r  saves    r=   r   z2test_from_thread_run_during_shutdown.<locals>.mainy  sd      DDP1333DQQRRR2hnnT"""""""""""rJ   TFr   r  )r^   r-   r#   r  )r  r   r#   r$   )r   r   )r   r  r<   r  s    @@@r=   $test_from_thread_run_during_shutdownr  g  s    DF+ + + + + +# # # # # # # 
IdD	IdEj'*******rJ   c                    K   t          j                    } t          | t           j                  sJ t	          j        |           }|  |            u sJ d S r\   )r   r]   r^  	TrioTokenweakrefref)r^   weak_references     r=   "test_trio_token_weak_referenceabler    sZ      $&&EeU_-----[''NNN$$$$$$$$rJ   c                    K    G d d          } t          j        t                    5  t          t           |                        d {V  d d d            d S # 1 swxY w Y   d S )Nc                      e Zd ZddZdS )4test_unsafe_abandon_on_cancel_kwarg.<locals>.BadBoolr#   r   c                    t           r\   )NotImplementedError)rH  s    r=   __bool__z=test_unsafe_abandon_on_cancel_kwarg.<locals>.BadBool.__bool__  s    %%rJ   Nr#   r   )r$  r%  r&  r  rb   rJ   r=   BadBoolr    s(        	& 	& 	& 	& 	& 	&rJ   r  r   )rh   ri   r  r   rL   )r  s    r=   #test_unsafe_abandon_on_cancel_kwargr    s      & & & & & & & & 
*	+	+ C C 		BBBBBBBBBBC C C C C C C C C C C C C C C C C Cs   %AA"Ac                    K   t          j                    } dd}| t          t          t           j                   d {V u sJ | t          t          |           d {V u sJ d S )Nr#   
_core.Taskc                 ,   K   t          j                    S r\   )r   current_taskrb   rJ   r=   async_current_taskz8test_from_thread_reuses_task.<locals>.async_current_task  s      !###rJ   )r#   r  )r   r  r   r   r   )taskr  s     r=   test_from_thread_reuses_taskr    s      D$ $ $ $ +,@%BTUUUUUUUUUUUU+O=OPPPPPPPPPPPPPPrJ   c                 R   K   d dfd} t          |            d {V k    sJ d S )Nr#   rL   c                 h    t          j                     t          t          t           j                  S r\   )r5   r   r   r   )tids   r=   get_tid_then_reenterz6test_recursive_to_thread.<locals>.get_tid_then_reenter  s%    !##193FGGGrJ   )r#   rL   r   )r  r  s    @r=   test_recursive_to_threadr    se      
CH H H H H H
 *+?@@@@@@@@@@@@@@rJ   c                 Z  K   t          j                    dfd} t          j                    5 t	          |            d {V  d d d            n# 1 swxY w Y   j        rJ                                 rJ t          j                    5 t	          | d           d {V  d d d            n# 1 swxY w Y   j        sJ t	          t          j        d                     d {V rJ dd	dfd
}t          j                    5 t	          |           d {V  d d d            n# 1 swxY w Y   j        rJ                                 rJ t          j                    5 t	          |d           d {V  d d d            n# 1 swxY w Y   j        sJ t	          t          j        d                     d {V rJ dfd}t          j                    5 t	          t          |           d {V  d d d            n# 1 swxY w Y   j        sJ d S )Nr#   r$   c                     t           j                   	 t          t                                         d           d S # t          j        $ r                     d           Y d S w xY wNFT)r   r  r   r  r   r   )r  queues   r=   
sync_checkz3test_from_thread_host_cancelled.<locals>.sync_check  su    \0111	 &&& IIe  	 	 	IIdOOOOOO	s   A $A*)A*Tr   r   timeoutr   c                 
   K   dS NTrb   rb   rJ   r=   no_checkpointz6test_from_thread_host_cancelled.<locals>.no_checkpoint  s      trJ   c                     t           j                   	 t                    sJ 	                     d           d S # t          j        $ r                     d           Y d S w xY wr  )r   r  r   r  r   r   )r  r  r  s   r=   async_checkz4test_from_thread_host_cancelled.<locals>.async_check  s~    \0111	"=111111 IIe  	 	 	IIdOOOOOO	s   A   $A('A(c                    K                                      t          d          5  t                       d {V  d d d            d S # 1 swxY w Y   d S )Nr   )r  r   r   )r  s   r=   async_time_bombz8test_from_thread_host_cancelled.<locals>.async_time_bomb  s      ^^ 	" 	"//!!!!!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s   A		AArD   r  )
r   r   r   r   r   r  
get_nowaitr   r   r   )r  r  r  r  r  r  s      @@@r=   test_from_thread_host_cancelledr    sP     &2&8&:&:E       
			 - ,,,,,,,,,- - - - - - - - - - - - - - - ,,,,!!!!!				 E tDDDDDDDDDDE E E E E E E E E E E E E E E (((('	1(E(E(EFFFFFFFFFFF           
			 . ---------. . . . . . . . . . . . . . . ,,,,!!!!!				 F EEEEEEEEEEF F F F F F F F F F F F F F F (((('	1(E(E(EFFFFFFFFFFF" " " " " "
 
			 C /BBBBBBBBBC C C C C C C C C C C C C C C ((((((sY   AAAB66B:=B:D66D:=D:3FFF/HHHc                   K   t          j                    dfd} dfdg t          j                    t	          j                    4 d {V }|                    | d	t	          j                               t                       d {V  d
         dk    sJ 	                    d          dk    sJ 
                                 d d d           d {V  n# 1 d {V swxY w Y   d         dk    sJ g t          j                    t	          j                    }t	          j                    4 d {V }|                    | d	|           t                       d {V  d
         dk    sJ 	                    d          dk    sJ |                                 
                                 d d d           d {V  n# 1 d {V swxY w Y   |j        sJ dv sJ d         dk    sJ dfdg t          j                    t	          j                    }t	          j                    4 d {V }|                    | d|           t                       d {V  d
         dk    sJ |                                 
                                 d d d           d {V  n# 1 d {V swxY w Y   |j        sJ dv sJ d         dk    sJ 	                    d          dk    sJ d S )Nr   r   r  r   r#   r$   c                L  K   |5                       d           	 t          |            d {V 	                      d           cd d d            S # t          j        $ r                      d            w xY w#                      d           w xY w# 1 swxY w Y   d S )Nr0   r   r   r  )r4   r   r   r   )r   r  rC   r<   s     r=   r   z/test_from_thread_check_cancelled.<locals>.child  s      	& 	&MM'"""&/EVWWWWWWWWWW
 f%%%	& 	& 	& 	& 	& 	& 	& 	& ?   h''' f%%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s3   BAB&A<<A??BBB Bc                     	 t                                           d           n*# t          j        $ r                     d           Y nw xY w                                  t                      S NNot Cancelledr   )r   r  r   r   r   r   r   s   r=   rC   z+test_from_thread_check_cancelled.<locals>.f  s}    	#'))) EE/""""  	 	 	EE+	 				*,,,s   ' $AAFr   r0   r   r  r  r   r  r3  c                                                        	 t                                           d           d S # t          j        $ r                     d           Y d S w xY wr   )r   r   r  r   r   r  s   r=   rC   z+test_from_thread_check_cancelled.<locals>.f  su    
				#'))) EE/"""""  	 	 	EE+	s   < $A$#A$Tr   )r   r   r  r   r#   r$   rD   )r   r   r5   r   r   r   r   r   r   r   r   r  r  )r   r  r  r   rC   r   r<   s      @@@@r=    test_from_thread_check_cancelledr    s     !-!3!5!5A	& 	& 	& 	& 	& 	& 	&- - - - - - - F			B!##       w5%):)<)<===$&&&&&&&&&ayG####uuQu?2222
                           !9 F			BE!##       w5%///$&&&&&&&&&ayG####uuQu?2222
                           !!!!v":# # # # # # # F			BE!##       w5$...$&&&&&&&&&ayG####
                           !!!!v":555{******s9   A;C##
C-0C-A>G
G G	A"J==
K
Kc                     t          j        t                    5  t                       d d d            n# 1 swxY w Y   t	          j                     t          j        t           fd           t          j        t                    5                       d          	                                 d d d            d S # 1 swxY w Y   d S )Nc                .                         |           S r\   )r  )r   r   s    r=   rc   zLtest_from_thread_check_cancelled_raises_in_foreign_threads.<locals>.<lambda>6  s    15588 rJ   r   r  )
rh   ri   rj   r   r   r   r   re  r   unwrap)r   s   @r=   :test_from_thread_check_cancelled_raises_in_foreign_threadsr  2  s4   	|	$	$ & &#%%%& & & & & & & & & & & & & & &-9-?-A-AA	79K9K9K9KLLL	|	$	$ " "	a!!!" " " " " " " " " " " " " " " " " "s   6::
)C  CCc                 ,  K   dd} t          d          5  t          j                    4 d {V }t          d          D ]}|                    |            	 d d d           d {V  n# 1 d {V swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr#   r$   c                 P   K   	 t          t          t          dd           d {V  $)NTr   Fr   )r   r   r   rb   rJ   r=   r   z+test_reentry_doesnt_deadlock.<locals>.childA  s<      	Y$_eQRWXXXXXXXXXX	YrJ   r
      rD   )r   r   r   r  r   )r   r  r   s      r=   test_reentry_doesnt_deadlockr  ;  s~     Y Y Y Y 
q		 * *%'' 	* 	* 	* 	* 	* 	* 	*71XX * *""5))))*	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	** * * * * * * * * * * * * * * * * *s4   B	(A+B	+
A5	5B	8A5	9B		BBc                   K   dt                      } t                      }t                      }t                      }dd}dfd}t          j                    4 d {V }|                    || |           |                    |||           t	                       d {V  |                    |           t	                       d {V  rJ t                      d	k    sJ |                                  |                                 d {V  t	                       d {V  rJ t                      d
k    sJ |                                 |                                 d {V  t	                       d {V  sJ t                      dk    sJ 	 d d d           d {V  d S # 1 d {V swxY w Y   d S )NFr   r   e_exitr#   r$   c                j    K   d fd}t          |           d {V  |                                 d S )Nr#   r$   c                 0    t           j                   d S r\   )r   r   )r   s   r=   r   zCtest_wait_all_threads_completed.<locals>.wait_event.<locals>.threadT  s    AF#####rJ   rD   )r   r   )r   r  r   s   `  r=   
wait_eventz3test_wait_all_threads_completed.<locals>.wait_eventS  sX      	$ 	$ 	$ 	$ 	$ 	$ !(((((((((

rJ   c                 8   K   t                       d {V  d d S r  )r   )no_threads_lefts   r=   wait_no_threads_leftz=test_wait_all_threads_completed.<locals>.wait_no_threads_leftZ  s.      (*********rJ   r
   r   r   )r   r   r  r   r#   r$   rD   )r   r   r   r   r   r   r   r   )e1e2	e1_exited	e2_exitedr  r  r  r  s          @r=   test_wait_all_threads_completedr  K  s     O	B	BII        
 !## * * * * * * *w:r9555:r9555$&&&&&&&&&/000$&&&&&&&&&"""""$$))))
nn$&&&&&&&&&"""""$$))))
nn$&&&&&&&&&"$$)))))'* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *s   !D8F--
F7:F7c                 Z   K   t                       d {V  t                      dk    sJ d S )Nr   )r   r   rb   rJ   r=   *test_wait_all_threads_completed_no_threadsr  u  sA      
$
&
&&&&&&&&  A%%%%%%rJ   rD   r\   )r   r   r#   r   )r
  r  r  r  r#   r$   )r  rL   r  r   r  r   r#   r$   )r  r  r#   r$   )e
__future__r   contextvarsr  r   r   rp   r5   r  r  	functoolsr   typingr   r   r   r	   rh   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   rE   r9   r7   rK   r"   r_   rk   r   r   r   r   r   r   r   r	  r  markparametrizer=  rR  r`  ri  rt  r{  
ContextVarr|  r'  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rb   rJ   r=   <module>r,     s   " " " " " " "         				 



                         	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 + * * * * * % % % % % %                  - , , , , ,  CCCCCCCCCC%U9#3T-5H#HIIJK
GCLL9Q 9Q 9Q 9Qx   -$ -$ -$ -$`/ / / /8# # # #:'E 'E 'E 'E 'E\ 1  1  1  1F@ @ @ @0 0 0 0,6" 6" 6" 6"x#, #, #, #,L 


++E4=11.>>q+ q+ q+ ?> 21 ,+q+h, , , ,(, , , ,8( ( ( ((	( 	( 	( 	(+ + + + 5KK4J5 5     
"5 "5 "5 "5J. . . .*; ; ; ;0	( 	( 	( 	(	( 	( 	( 	(1 1 1 1(0 (0 (0 (0V(5 (5 (5 (5V
 
 
 
@ @ @ @+ + + +6% % % %C C C CQ Q Q QA A A A8) 8) 8) 8)vK+ K+ K+ K+\" " " " * * * *'* '* '* '*T& & & & & &rJ   