1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
U
Z±dÌ)ã@sæddlZddlZddlZddlmZddlmZddlmZddl    m
Z
ddl m Z m Z mZd    d
„Zd d „Zejje d ddd„ƒZejje d ddd„ƒZeƒdd„ƒZdd„Zejje d ddd„ƒZejje d ddd„ƒZdS)éN)Úinf)Úpartial)Úaclosingé)Ú_coreé)Úgc_collect_harderÚbuggy_pypy_asyncgensÚrestore_unraisablehookcsZg‰‡fdd„‰g‰‡‡‡fdd„}t |¡ˆ ¡dks>t‚ˆD]}|jdksBt‚qBdS)Nc sz2z
dVWntk
r YnXt ¡IdHWn‚tjk
r´d|ksPt‚t ¡j}||ksn|dksnt‚t ¡t ks€t‚t     
tj¡t ¡IdHW5QRXˆ  |¡YnHXdt ¡jksÈt‚d|ksÔt‚t ¡tksät‚t ¡IdHˆ  |¡dS)Né*Z    exhaustedz<init>Ú
async_main) Ú GeneratorExitrÚ
checkpointÚ    CancelledÚAssertionErrorZ current_taskÚnameZcurrent_effective_deadlinerÚpytestÚraisesÚappend)ÚcauseZ    task_name)Ú    collected©úUd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\trio/_core/tests/test_asyncgen.pyÚexamples&
 
 z%test_asyncgen_basics.<locals>.examplec
“sÖtjtdd(dˆdƒ d¡IdHks,t‚tƒW5QRXt ¡IdHˆ ¡dksZt‚t    ˆdƒƒ4IdHš}d| d¡IdHksˆt‚W5QIdHRXˆ ¡dks¨t‚ˆdƒ2z3dHW}|dks°t‚q°6ˆ ¡dksÜt‚tƒt    ˆdƒƒ4IdHš*}ˆ 
|¡d| d¡IdHkst‚W5QIdHRXˆ ¡dks>t‚ˆ 
ˆdƒ¡ˆd    2z3dHW}|dksTt‚qT6ˆ ¡dks†t‚t r˜ˆ 
d
¡n:ˆ 
ˆd
ƒ¡dˆd     d¡IdHksÄt‚ˆgksÒt‚dS) Nz,Async generator.*collected before.*exhausted©Úmatchr Z    abandonedz exhausted 1z exhausted 2z exhausted 3z exhausted 4éÿÿÿÿú outlived run) rZwarnsÚResourceWarningÚasendrrrÚwait_all_tasks_blockedÚpoprrr    )ÚaiterÚval©rrÚsavedrrr &s8ÿ(
* z(test_asyncgen_basics.<locals>.async_mainr)rÚrunr!rÚag_frame)r Úagenrr$rÚtest_asyncgen_basics s *
r)c    ƒsœg‰‡fdd„}tƒ|ƒ d¡IdHtƒW5QRXt ¡IdHˆdgksVt‚|jdj\}}}|tkstt‚t    |ƒdks„t‚d|jdj
ks˜t‚dS)Nc    s2z
dVW5t ¡IdHˆ d¡tdƒ‚XdS)NÚcrashingÚoopsr)rÚcancel_shielded_checkpointrÚ
ValueErrorr©Úrecordrrr(Ys
 
 
z6test_asyncgen_throws_during_finalization.<locals>.agenr*rr+z&during finalization of async generator) r
rrrr rÚrecordsÚexc_infor-ÚstrÚmessage)Zcaplogr(Úexc_typeÚ    exc_valueÚ exc_tracebackrr.rÚ(test_asyncgen_throws_during_finalizationVs  r7zpypy 7.2.0 is buggy)ÚreasoncsBg‰g‰‡‡fdd„‰‡‡fdd„}t |¡ˆddgks>t‚dS)Nc    sZz
dVWn tk
r*ˆ d¡‚YnXz
dVW5ˆ d¡ˆƒ d¡IdHXdS)Nrú    cleanup 1ú    cleanup 2é)r rrr)Ú
funky_agenr/rrr<qs
 
 
 
z0test_firstiter_after_closing.<locals>.funky_agenc“sDˆƒ}ˆ |¡d| d¡IdHks(t‚d| d¡IdHks@t‚dS)Nrr;)rrr)r")r<r%rrr }s
z0test_firstiter_after_closing.<locals>.async_mainr:r9)rr&r©r r)r<r/r%rÚtest_firstiter_after_closingls  
r>csZg‰g‰‡fdd„‰‡fdd„‰‡‡‡‡fdd„}t |¡ˆdgttdƒƒksVt‚dS)    Nc    s*z
dVW5t ¡IdHˆ d¡XdS)NÚ    innermostr)rr,rrr.rrr?Œs
z=test_interdependent_asyncgen_cleanup_order.<locals>.innermostcsNz| d¡IdHVW5t t¡| d¡IdHW5QRXˆ |¡XdS)N)rrÚStopAsyncIterationrr)ÚlabelÚinnerr.rrr(“s
 z8test_interdependent_asyncgen_cleanup_order.<locals>.agenc“sPˆƒ}tdƒD]}ˆ||ƒ}qˆ |¡d| d¡IdHks@t‚ˆgksLt‚dS)Nédr)Úrangerrr)Zag_chainÚidx©r(r?r/r%rrr Ÿs   
z>test_interdependent_asyncgen_cleanup_order.<locals>.async_mainr?rC)rr&ÚlistrDrr=rrFrÚ*test_interdependent_asyncgen_cleanup_order‡s  
rHcs®g‰g‰d‰‡fdd„‰‡‡‡‡fdd„‰‡‡‡fdd„}tdƒD]T}d    ‰ˆdd…=ˆdd…=t |¡ˆr€ts–ˆd
gks–t‚qBˆd d d
gks’t‚qªqBt d |›d¡dS)NTc    sz
dVW5ˆ d¡XdS)Nú
cleaned upr)rrr.rrr(´s
z+test_last_minute_gc_edge_case.<locals>.agencsvtjjj}|jjrFt|jjt    j
ƒrFˆ  ¡ˆ  d¡t ƒˆ  d¡n,z| ˆ|¡Wntjk
rpd‰YnXdS)Núfinal collectionÚdoneT)rZ_runZGLOBAL_RUN_CONTEXTÚrunnerZsystem_nurseryÚ_closedÚ
isinstanceZ    asyncgensÚaliveÚweakrefÚWeakSetÚclearrrÚ run_sync_soonZRunFinishedError)ÚtokenrL)Úcollect_at_opportune_momentÚ needs_retryr/r%rrrUºs
 
ÿ
 zBtest_last_minute_gc_edge_case.<locals>.collect_at_opportune_momentc“s8t ¡}| ˆ|¡ˆ ˆƒ¡ˆd d¡IdHdS)Nr)rZcurrent_trio_tokenrSrr)rT)r(rUr%rrr Ês  z1test_last_minute_gc_edge_case.<locals>.async_mainé2FrIrJrKzJDidn't manage to hit the trailing_finalizer_asyncgens case despite trying z times)rDrr&r    rrZfail)r Úattemptr)r(rUrVr/r%rÚtest_last_minute_gc_edge_case®s&  
 
 
 
ÿrYc
ƒs`‡fdd„‰|ˆ_t ¡4IdHš.}| tjˆ¡t ¡IdHt ¡|j_W5QIdHRXdS)Nc    s8tjtddˆj d¡ d¡W5QRXˆ`tjjS)NZ42r)    rrÚ StopIterationr"rÚsendrZAbortZ    SUCCEEDED)Ú_©Úabort_fnrrr^ósz,step_outside_async_context.<locals>.abort_fn)    r"rZ open_nurseryZ
start_soonZwait_task_rescheduledr Ú current_timeZ cancel_scopeÚdeadline)r"Znurseryrr]rÚstep_outside_async_contextès rac    Ãs¦dd„}dd„}dd„}tƒ~t|ƒƒIdHtƒ| ¡jdksHt‚t|ƒƒIdHtƒd| ¡jkspt‚t|ƒƒIdHtƒd    | ¡jks˜t‚W5QRXdS)
NcSs
dVdS©Nr rrrrrÚ well_behavedsz:test_fallback_when_no_hook_claims_it.<locals>.well_behavedc    Ss&t t¡ dVW5QRXdVdS)Nr rC)rrr rrrrÚyields_after_yields z@test_fallback_when_no_hook_claims_it.<locals>.yields_after_yieldc    Ss.t t¡ dVW5QRXt ¡IdHdSrb)rrr rr,rrrrÚawaits_after_yield s z@test_fallback_when_no_hook_claims_it.<locals>.awaits_after_yieldÚzignored GeneratorExitz%awaited something during finalization)r
rarZ
readouterrÚerrr)ZcapsysrcrdrerrrÚ$test_fallback_when_no_hook_claims_itsrhc
sg‰‡fdd„}‡fdd„}‡fdd„‰‡‡fdd„}tƒJt ¡}t ||¡zt |¡W5t ¡||fksvt‚tj|ŽXW5QRXdS)    Ncsˆ d|jjd¡dS)Nz
firstiter Úarg©rr'Úf_locals©r(r.rrÚ my_firstiter"sz7test_delegation_to_existing_hooks.<locals>.my_firstitercsˆ d|jjd¡dS)Nz
finalizer rirjrlr.rrÚ my_finalizer%sz7test_delegation_to_existing_hooks.<locals>.my_finalizercsFz
dVW5t tj¡t ¡IdHW5QRXˆ d|¡XdS)Nztrio collected r )rrrrrr)rir.rrr(s
 
z2test_delegation_to_existing_hooks.<locals>.examplec“sptˆdƒƒIdHdˆdƒ d¡IdHks.t‚tƒˆddgksDt‚gˆdd…<t ¡IdHˆdgkslt‚dS)NZtheirsr Zourszfirstiter theirszfinalizer theirsztrio collected ours)rarrrrr r©rr/rrr 0s z5test_delegation_to_existing_hooks.<locals>.async_main)r
ÚsysÚget_asyncgen_hooksÚset_asyncgen_hooksrrr&)rmrnr Z    old_hooksrrorÚ!test_delegation_to_existing_hookss        rs)rprPrÚmathrÚ    functoolsrÚasync_generatorrrfrZtutilrr    r
r)r7ÚmarkZskipifr>rHrYrarhrsrrrrÚ<module>s(    K
 
&
9