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
78
79
80
U
Z±dŠGã@sNddlZddlZddlZddlZddlZddlZddlmZddlm    Z    ddl
Z
ddl Z ddl Z ddl Z ddlZddlZddlZddlmZmZmZddlmZdd    „Zd
d „Zd d „Zdd„Zdd„Zdd„Zdd„Zeƒdd„ƒZddœdd„Zdd„Z dd„Z!d d!„Z"d"d#„Z#ej$j%ed$d%ej$j&ej'j(d&kd'd%eƒd(d)„ƒƒƒZ)dS)*éN)Úpartial©Úinfé)Úgc_collect_harderÚbuggy_pypy_asyncgensÚrestore_unraisablehooké)Ú signal_raisec s¢t ¡‰t ¡‰‡‡fdd„}‡‡fdd„}‡fdd„}tjj||f|||dœ|—Žz>ˆ ¡\}}|dkrt|ƒqX|d    krˆ| ¡W¢Sd
sXt    ‚qXW5Š~~XdS) Ncs8ˆt ¡kr&ttjdƒ}ˆ d|f¡ˆ d|f¡dS)Nz0run_sync_soon_threadsafe called from host threadÚrun©Ú    threadingÚcurrent_threadrÚpytestZfailÚput©ÚfnZcrash©Z host_threadÚtodo©úWd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\trio/_core/tests/test_guest_mode.pyÚrun_sync_soon_threadsafes ÿz3trivial_guest_run.<locals>.run_sync_soon_threadsafecs8ˆt ¡k    r&ttjdƒ}ˆ d|f¡ˆ d|f¡dS)Nz6run_sync_soon_not_threadsafe called from worker threadr r rrrrÚrun_sync_soon_not_threadsafe's ÿz7trivial_guest_run.<locals>.run_sync_soon_not_threadsafecsˆ d|f¡dS)NÚunwrap)r)Zoutcome)rrrÚ done_callback/sz(trivial_guest_run.<locals>.done_callback)rrrr rF)
ÚqueueÚQueuer rÚtrioÚlowlevelÚstart_guest_runÚgetrÚAssertionError)Útrio_fnÚstart_guest_run_kwargsrrrÚopÚobjrrrÚtrivial_guest_runs. þûú      r&c    CsFdd„}t|ƒdkst‚dd„}tjtddt|ƒW5QRXdS)NcÓst d¡IdHdS)NrÚok©rÚsleep©Úin_hostrrrÚ trio_returnLsz'test_guest_trivial.<locals>.trio_returnr'cÓs tdƒ‚dS)NÚ whoopsiedaisy)ÚKeyErrorr*rrrÚ    trio_failRsz%test_guest_trivial.<locals>.trio_failr-©Úmatch)r&r!rÚraisesr.)r,r/rrrÚtest_guest_trivialKs
r3cCsdd„}t|ƒdS)Nc “sžg‰tj ¡\‰}ˆp|`t ¡4IdHš>}‡‡fdd„}| |¡tj ¡IdH| d¡IdHW5QIdHRXW5QRXW5QRXˆdgksšt‚dS)Nc“sˆ ˆ d¡IdH¡dS)Nr)ÚappendÚrecvr©ÚaÚrecordrrÚ
do_receive`sz;test_guest_can_do_io.<locals>.trio_main.<locals>.do_receiveóx)    rÚsocketÚ
socketpairÚ open_nurseryÚ
start_soonÚtestingÚwait_all_tasks_blockedÚsendr!)r+ÚbÚnurseryr9rr6rÚ    trio_mainZs 
4z'test_guest_can_do_io.<locals>.trio_main)r&©rDrrrÚtest_guest_can_do_ioYsrFcCsdd„}t|ƒdkst‚dS)NcÓs$t ¡}||jƒ| ¡IdHdS©Nr')rÚEventÚsetÚwait)r+ZevrrrrDns
z8test_host_can_directly_wake_trio_task.<locals>.trio_mainr'©r&r!rErrrÚ%test_host_can_directly_wake_trio_taskmsrLcs(dd„‰‡fdd„}t|ƒdks$t‚dS)NcSs
||_dS©N)Údeadline©ÚcscopeZ new_deadlinerrrÚ set_deadlinexsz@test_host_altering_deadlines_wakes_trio_up.<locals>.set_deadlinec    “s”t ¡&‰|‡‡fdd„ƒt ¡IdHW5QRXˆjs>t‚t ¡:‰|‡‡fdd„ƒ|‡‡fdd„ƒt d¡IdHW5QRXˆjst‚dS)Ncs ˆˆt ƒSrMrr©rPrQrrÚ<lambda>}ózOtest_host_altering_deadlines_wakes_trio_up.<locals>.trio_main.<locals>.<lambda>cs
ˆˆdƒS)Ng€„.ArrrRrrrS„rTcs ˆˆt ƒSrMrrrRrrrS…rTiçr')rÚ CancelScopeÚ sleep_foreverÚcancelled_caughtr!r)r*©rQ©rPrrD{s
 
 
 
z=test_host_altering_deadlines_wakes_trio_up.<locals>.trio_mainr'rKrErrXrÚ*test_host_altering_deadlines_wakes_trio_upws rZc sÚt d¡dkst‚dd„}t ¡\‰}ˆ¤|’ˆ d¡t ˆ ¡¡z.tjt    ddt
|ƒdkspt‚W5QRXW5t d¡ˆ ¡ks”t‚Xt ˆ ¡¡z2tjt    ddt
|dddksÊt‚W5QRXW5t d¡ˆ ¡ksît‚Xt   ¡"t   d    ¡t
|ƒdkst‚W5QRXt   ¡&t   d    ¡t
|d
ddksJt‚W5QRXt ˆ ¡¡zD‡fd d „}t   ¡&t   d    ¡t
|d
ddksšt‚W5QRXW5t d¡ˆ ¡ksÀt‚XW5QRXW5QRXdS) NéÿÿÿÿcÓsdSrGrr*rrrrD‘sz4test_warn_set_wakeup_fd_overwrite.<locals>.trio_mainFzsignal handling code.*collidedr0r'©Úhost_uses_signal_set_wakeup_fdÚerrorTc“s(t d¡}|ˆ ¡kst‚t |¡dS)Nr[r')ÚsignalÚ set_wakeup_fdÚfilenor!)r+Úfd©r7rrÚtrio_check_wakeup_fd_unaltered»s
 
zItest_warn_set_wakeup_fd_overwrite.<locals>.trio_check_wakeup_fd_unaltered)r_r`r!r;r<Ú setblockingrarÚwarnsÚRuntimeWarningr&ÚwarningsÚcatch_warningsÚ simplefilter)rDrBrdrrcrÚ!test_warn_set_wakeup_fd_overwriteŽsP 
 
ÿÿ
 
 
 
 
ÿÿ 
 
þüÿrkcs(dd„‰‡fdd„}t|ƒdks$t‚dS)NcSstd|›ƒ||_dS)Nzsetting deadline )ÚprintrNrOrrrrQÕszLtest_host_wakeup_doesnt_trigger_wait_all_tasks_blocked.<locals>.set_deadlinec
“sldd„}‡‡fdd„}t ¡4IdHš6}t ¡}| ||¡tj ¡IdH| ||¡W5QIdHRXdS)Nc    Ós:|"tjjddIdHds"t‚W5QRX|js6t‚dS)Né')ZcushionF)rr?r@r!rW)Ú watb_cscoperrrÚsit_in_wait_all_tasks_blockedÚszptest_host_wakeup_doesnt_trigger_wait_all_tasks_blocked.<locals>.trio_main.<locals>.sit_in_wait_all_tasks_blockedc    “sdt ¡@‰tdƒG‡‡‡fdd„dƒ}tj |ƒ¡t ¡IdHW5QRXˆjsXt‚| ¡dS)Nzscheduling stuff to happencs2eZdZdd„Z‡‡‡fdd„Z‡‡fdd„ZdS)z‡test_host_wakeup_doesnt_trigger_wait_all_tasks_blocked.<locals>.trio_main.<locals>.get_woken_by_host_deadline.<locals>.InstrumentHelpercSs
d|_dS)NF)Úprimed)ÚselfrrrÚ__init__õsztest_host_wakeup_doesnt_trigger_wait_all_tasks_blocked.<locals>.trio_main.<locals>.get_woken_by_host_deadline.<locals>.InstrumentHelper.__init__cs>td|›dƒ|dkr:|jr"t‚ˆ‡‡fdd„ƒd|_dS)Nzbefore_io_wait(ú)rmcs
ˆˆdƒS)NgeÍÍArrrRrrrSürTz¨test_host_wakeup_doesnt_trigger_wait_all_tasks_blocked.<locals>.trio_main.<locals>.get_woken_by_host_deadline.<locals>.InstrumentHelper.before_io_wait.<locals>.<lambda>T)rlrpr!©rqÚtimeout©rPr+rQrrÚbefore_io_waitøs
 
z–test_host_wakeup_doesnt_trigger_wait_all_tasks_blocked.<locals>.trio_main.<locals>.get_woken_by_host_deadline.<locals>.InstrumentHelper.before_io_waitcs.|jr*tdƒˆ‡fdd„ƒtj |¡dS)Nzinstrument triggeredcsˆ ¡SrM)ÚcancelrrYrrrSrTz§test_host_wakeup_doesnt_trigger_wait_all_tasks_blocked.<locals>.trio_main.<locals>.get_woken_by_host_deadline.<locals>.InstrumentHelper.after_io_wait.<locals>.<lambda>)rprlrrZremove_instrumentrt)rPr+rrÚ after_io_waitÿsz•test_host_wakeup_doesnt_trigger_wait_all_tasks_blocked.<locals>.trio_main.<locals>.get_woken_by_host_deadline.<locals>.InstrumentHelper.after_io_waitN)Ú__name__Ú
__module__Ú __qualname__rrrwryrrvrrÚInstrumentHelperôsr})    rrUrlrZadd_instrumentrVrWr!rx)rnr})r+rQrYrÚget_woken_by_host_deadlineãs
 
zmtest_host_wakeup_doesnt_trigger_wait_all_tasks_blocked.<locals>.trio_main.<locals>.get_woken_by_host_deadliner')rr=rUr>r?r@)r+ror~rCrnrXr*rrDÙs    ' zItest_host_wakeup_doesnt_trigger_wait_all_tasks_blocked.<locals>.trio_mainr'rKrErrXrÚ6test_host_wakeup_doesnt_trigger_wait_all_tasks_blockedÎs 9rc
CsPdd„}tjtdd0|ƒtƒt t¡t ¡W5QRXW5QRXdS)Nc    Ss*dd„}t t¡t|ƒW5QRXdS)NcÓs"|dd„ƒt d¡IdHq dS)NcSsddS)NrrrrrrrrSrTzgtest_guest_warns_if_abandoned.<locals>.do_abandoned_guest_run.<locals>.abandoned_main.<locals>.<lambda>rr(r*rrrÚabandoned_mains zUtest_guest_warns_if_abandoned.<locals>.do_abandoned_guest_run.<locals>.abandoned_main)rr2ÚZeroDivisionErrorr&)r€rrrÚdo_abandoned_guest_runs z=test_guest_warns_if_abandoned.<locals>.do_abandoned_guest_runzTrio guest run got abandonedr0)rrfrgrr2Ú RuntimeErrorrÚ current_time)r‚rrrÚtest_guest_warns_if_abandoneds      r…T)Úpass_not_threadsafec s:t ¡‰‡‡‡‡fdd„}zˆ |ƒ¡W¢Sˆ ¡XdS)Nc“sLˆ ¡‰‡fdd„}ˆr"ˆjˆd<tjjˆfˆj|dœˆ—ŽˆIdH ¡S)Ncstd|›ƒˆ |¡dS)Nztrio_fn finished: )rlZ
set_result)Z main_outcome©Z trio_done_futrrÚtrio_done_callbackEsz9aiotrio_run.<locals>.aio_main.<locals>.trio_done_callbackr)rr)Z create_futureZ    call_soonrrrZcall_soon_threadsafer)rˆ©Zloopr†r#r"r‡rÚaio_mainBs 
ÿýüzaiotrio_run.<locals>.aio_main)ÚasyncioZnew_event_loopÚcloseZrun_until_complete)r"r†r#rŠrr‰rÚ aiotrio_run?s
rcsB‡fdd„}dd„‰t|dddks(t‚t|ddd    dks>t‚dS)
Nc“s–tdƒt tdƒ¡\}}t ¡}t ˆ||ƒ¡}t d¡IdH| d¡|2z>3dHW}td|›ƒ| |d¡|dkrP|     ¡dSqP6dS)Nz
trio_main!rrz
trio got: ré
útrio-main-done)
rlrZopen_memory_channelÚfloatr‹rÚ ensure_futurer)Ú
put_nowaitrx)Úto_trioZfrom_aioÚ    from_trioZaio_taskÚn©Ú aio_pingpongrrrD\s
z-test_guest_mode_on_asyncio.<locals>.trio_maincÓsjtdƒz0| ¡IdH}td|›ƒ| |d¡q
Wn,tjk
rP‚Ynt ¡‚YnXdS)Nz aio_pingpong!z    aio got: r)rlr Z send_nowaitr‹ZCancelledErrorÚ    tracebackÚ    print_exc)r”r“r•rrrr—qsz0test_guest_mode_on_asyncio.<locals>.aio_pingpongTr\rF)r†r])rr!rErr–rÚtest_guest_mode_on_asyncio[s" ûùÿ ûùÿršc
sÊ| ¡2‰‡fdd„}t tj¡t|ƒW5QRXW5QRX| ¡2‰‡fdd„}t tj¡t|ƒW5QRXW5QRX| ¡2‰‡fdd„}t tj¡t|ƒW5QRXW5QRXtƒdS)Nc“s ˆ dd¡t d¡IdHdS)Nz.trio._core._run.GLOBAL_RUN_CONTEXT.runner.runqZHIr©Úsetattrrr)r*©ÚmrrÚcrash_in_run_loop™s z:test_guest_mode_internal_errors.<locals>.crash_in_run_loopc“s ˆ dd¡t d¡IdHdS)Nú'trio._core._run.TheIOManager.get_eventsrr›r*rrrÚ crash_in_io¢s z4test_guest_mode_internal_errors.<locals>.crash_in_ioc“sBt ¡‰tjjjj‰‡‡fdd„}ˆ d|¡t d¡IdHdS)Ncs"t ¡ˆk    rtdƒ‚nˆ|ŽSdS)Nzoh no!)r rÚ
ValueError)Úargs©Zold_get_eventsÚtrrÚbad_get_events¯s 
zZtest_guest_mode_internal_errors.<locals>.crash_in_worker_thread_io.<locals>.bad_get_eventsr r)    r rrZ_coreZ_runZ TheIOManagerZ
get_eventsrœr))r+r¦rr¤rÚcrash_in_worker_thread_io«s
  zBtest_guest_mode_internal_errors.<locals>.crash_in_worker_thread_io)Úcontextrr2rZTrioInternalErrorr&r)Z monkeypatchZrecwarnrŸr¡r§rrrÚtest_guest_mode_internal_errors–s
 
 
 r©c    s¾t tj¡tjkst‚dd„}t t¡}t|ƒW5QRX|j    j
dksLt‚t tj¡tjksbt‚t dƒ‰‡fdd„}t t¡}t|ƒW5QRX|j    j
ˆks¤t‚t tj¡tjksºt‚dS)Nc    ÓsDt t¡ttjƒW5QRX|tttjƒƒt d¡IdHdS)NrŽ)    rr2ÚKeyboardInterruptr
r_ÚSIGINTrrr)r*rrrrDÃs z%test_guest_mode_ki.<locals>.trio_mainZwhoac“s|tttjƒƒˆ‚dSrM)rr
r_r«r*©Z    final_excrrÚtrio_main_raisingÔsz-test_guest_mode_ki.<locals>.trio_main_raising) r_Ú    getsignalr«Údefault_int_handlerr!rr2rªr&ÚvalueÚ __context__r.)rDÚexcinfor­rr¬rÚtest_guest_mode_ki¿s   r³csPtj ¡‰d‰‡‡fdd„}t ¡}t|ˆdt ¡}||ˆdksLt‚dS)Néxc“sDt ¡dkst‚|‡fdd„ƒt ˆ¡IdHt ¡ˆks@t‚dS)Nrcs tˆddƒS)NZautojump_thresholdr)rœr©ÚclockrrrSêrTzVtest_guest_mode_autojump_clock_threshold_changing.<locals>.trio_main.<locals>.<lambda>)rr„r!r)r*©ZDURATIONr¶rrrDèszDtest_guest_mode_autojump_clock_threshold_changing.<locals>.trio_mainrµé)rr?Z    MockClockÚtimeÚ    monotonicr&r!)rDÚstartÚendrr·rÚ1test_guest_mode_autojump_clock_threshold_changingßs
 r½zPyPy 7.2 is buggy)ÚreasonÚpypyz)async generator issue under investigationcsdddl‰tƒ‰‡‡fdd„‰‡‡fdd„‰‡‡fdd„}t ¡}|jt|dd    ˆd
d hks`t‚dS) Nrcsjˆ ¡|kst‚z
dVW5ˆ ¡}ztj| d¡IdHWntjk
rTYnXˆ ||f¡XdS)Nrr)Zcurrent_async_libraryr!ÚsysÚmodulesr)rZ    CancelledÚadd)ÚlabelZlibrary)r8ÚsniffiorrÚagens
z'test_guest_mode_asyncgens.<locals>.agenc“s$ˆj d¡ˆdƒ d¡IdHdS)Nr‹)Zcurrent_async_library_cvarrIÚasendr)rÅrÄrrÚiterate_in_aio s z1test_guest_mode_asyncgens.<locals>.iterate_in_aioc    “sht ˆƒ¡}t ¡‰| ‡fdd„¡t d¡ˆ ¡IdHW5QRXˆdƒ d¡IdHtƒdS)Ncsˆ ¡SrM)rI)Ú_©Zdone_evtrrrSrTz>test_guest_mode_asyncgens.<locals>.trio_main.<locals>.<lambda>rr)    r‹r‘rrHZadd_done_callbackZ
fail_afterrJrÆr)Ztask)rÅrÇrÉrrDs  z,test_guest_mode_asyncgens.<locals>.trio_mainTr\)r‹r‹)rr)rÄrIÚ contextvarsZ copy_contextr rr!)rDr¨r)rÅrÇr8rÄrÚtest_guest_mode_asyncgensös  rË)*rr‹rÊrÀr˜rÚ    functoolsrÚmathrr_r;r r¹rhrZ trio.testingZtutilrrrZ_utilr
r&r3rFrLrZrkrr…rršr©r³r½ÚmarkZskipifZxfailÚimplementationÚnamerËrrrrÚ<module>sJ   1
@G
);) 
þ