hyb
2025-12-23 10f3a1daddfbc7fa3dd2069197d83e8b6ef19176
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
Ë
Iñúh;ýãó¬—dZddlZddlZddlZddlZddlZddlZddlZddlZddl    Z    ddl
Z
ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZddlmZddlmZ    ddl Z ddl"Z"ddl"m#Z#ddl"m$Z$ddl"m%Z%dd    l"m&Z&dd
l"m'Z'dd l"m(Z(dd l"m)Z)dd l"m*Z*ddl+m,Z,ddl+m-Z-ddl+m.Z.ddl+m/Z/ddl+m0Z0e(rddl1m2Z2gd¢Z3dejhvZ5de
jlvxsde
jlvZ7e7Z8de
jlvZ9de
jlvZ:ejvdkDZ<e jz«j}«dvZ?e jz«dk(Z@e.d„«ZAe%reA«dkDZBeA«dk\ZCnd ZBd ZCd!ZDd"ZEd#ZFd$ZGe8reDd%zZDeGd%zZGeEd&zZEeFd%zZFe
jd'k(rd(e
j’«›d)ZJnd*e
j’«›d)ZJd+ZKd,j™d-d.«ZMejœ«j}«d/vZOe
j j£e
j j¥e
j j§eT«d0d0««ZUe
jlj­d1e
j j¥eUd2««ZWe
j j£e
j j§eT««ZXeYe"j´d3«Z[eYe"j´d4«Z\eYe"d5«Z]eYe"j´d6«Z^eYe"j´d7«Z_e(xre) Z`eYe"d8«ZaeYe"j´d9«ZbeYe"j´d:«ZceYe"j´d;«ZdeYe"d<«ZeeYe"d=«ZfeYe"d>«ZgeYe"j´d?«Zhe%xse#xre
jÒ«dk7Zj    eexreke"jØ««Zm    eYe"d@«xreke"jæ««ZtdA„Zueu«\ZvZwexe
jòdB«ZzejÞezjö«e|e"«Dcgc]}|jûdC«sŒe~e"|«‘Œc}Ze~edDe€««Ze‚«Zƒe‚«Z„GdE„dF«Z…e†e…j_ne €#e…Z e…ejdG<e…j«GdH„dIej«Z‹dJ„ZŒeŒddK„«ZeŒdL„«ZŽdM„ZeŒdN„«ZeŒdO„«Z‘ej$eGfdP„Z“d‚dQ„Z”dR„Z•dS„Z–GdT„dU«Z—e—e"j0deGdV¬W«dX„«Z™e—eše†fdeGdV¬W«dƒdY„«Z›e—e†e jjÜfdeGdV¬W«dZ„«Zœd[„Zd\„Zžej>d]„«Z d^„Z¡dd_„Z¢d„d`„Z£Gda„dbejH«Z¥e jLjOe5dc¬d«Gde„dfe¥««Z¨dg„Z©dh„ZªGdi„dj«Z«Gdk„dl«Z¬eDfdm„Z­ddn„Z®ddo„Z¯d…dp„Z°eedfdq„Z±ej>fdr„Z²d†ds„Z³dt„Z´ej>du„«Zµdv„Z¶dw„Z·dx„Z¸dy„Z¹dz„Zºd{„Z»d|„Z¼e(rej>d‡d}„«Z½nej>d‡d~„«Z½ejÞd„«Z¾e(r ej"ej$d€„«yy#e!$rdZ YŒCwxYw#en$r8ejÞejàeqejä«««d ZmYŒ*wxYw#en$r8ejÞejàeqejä«««d ZtYŒGwxYwcc}w)ˆzTest utilities.éN)ÚAF_INET)ÚAF_INET6)Ú SOCK_STREAM)ÚAIX)ÚLINUX)ÚMACOS)ÚNETBSD)ÚOPENBSD)ÚPOSIX)ÚSUNOS)ÚWINDOWS)Ú bytes2human)Údebug)Úmemoize)Ú print_color)Ú supports_ipv6)Úwait_pid)JÚDEVNULLÚGLOBAL_TIMEOUTÚTOLERANCE_SYS_MEMÚ
NO_RETRIESÚPYPYÚ
PYTHON_EXEÚPYTHON_EXE_ENVÚROOT_DIRÚ SCRIPTS_DIRÚ TESTFN_PREFIXÚUNICODE_SUFFIXÚINVALID_UNICODE_SUFFIXÚ
CI_TESTINGÚVALID_PROC_STATUSESÚTOLERANCE_DISK_USAGEÚIS_64BITÚHAS_CPU_AFFINITYÚ HAS_CPU_FREQÚ HAS_ENVIRONÚHAS_PROC_IO_COUNTERSÚ
HAS_IONICEÚHAS_MEMORY_MAPSÚHAS_PROC_CPU_NUMÚ
HAS_RLIMITÚHAS_SENSORS_BATTERYÚ HAS_BATTERYÚHAS_SENSORS_FANSÚHAS_SENSORS_TEMPERATURESÚHAS_NET_CONNECTIONS_UNIXÚ MACOS_11PLUSÚ MACOS_12PLUSÚCOVERAGEÚAARCH64ÚPYTEST_PARALLELÚpyrunÚ    terminateÚ reap_childrenÚ spawn_subprocÚ spawn_zombieÚspawn_children_pairÚ
ThreadTaskÚunittestÚskip_on_access_deniedÚskip_on_not_implementedÚretry_on_failureÚTestMemoryLeakÚPsutilTestCaseÚprocess_namespaceÚsystem_namespaceÚis_win_secure_system_procÚ fake_pytestÚchdirÚ safe_rmpathÚ create_py_exeÚ create_c_exeÚ
get_testfnÚ
get_winverÚkernel_versionÚ
call_untilÚ wait_for_pidÚ wait_for_fileÚcheck_net_addressÚfilter_proc_net_connectionsÚ get_free_portÚ bind_socketÚbind_unix_socketÚtcp_socketpairÚunix_socketpairÚcreate_socketsÚ reload_moduleÚimport_module_by_pathÚwarnÚcopyload_shared_libÚ is_namedtupleÚ__pypy__ÚGITHUB_ACTIONSÚ CIBUILDWHEELÚ COVERAGE_RUNÚPYTEST_XDIST_WORKERl>Úarm64Úaarch64Úriscv64cóB—tj«d}ttt|j d«dd««}|dk(rWt jtjdddgdd    id
¬ «}ttt|j d«dd««}|S) Nrú.é)é
éz-sSú-cz-import platform; print(platform.mac_ver()[0])ÚSYSTEM_VERSION_COMPATÚ0T)ÚenvÚuniversal_newlines)
ÚplatformÚmac_verÚtupleÚmapÚintÚsplitÚ
subprocessÚ check_outputÚsysÚ
executable)Ú version_strÚversions  úHH:\Change_password\venv_build\Lib\site-packages\psutil/tests/__init__.pyÚ macos_versionr}zsž€ä×"Ñ"Ó$ QÑ'€KÜ”Cœ˜[×.Ñ.¨sÓ3°B°QÐ7Ó8Ó9€Gؐ(Òô!×-Ñ-ä—‘ØØØ?ð     ð )¨#Ð.Ø#ô    
ˆ ôœœC ×!2Ñ!2°3Ó!7¸¸Ð!;Ó<Ó=ˆØ €Nó)rié)é rFriiPi éééÚjavaz$psutil-ú-z@psutil-u-ƒőősfÀ€Úutf8Úsurrogateescape>úus-asciiÚasciiz..ÚPSUTIL_SCRIPTS_DIRÚscriptsÚ cpu_affinityÚenvironÚ
getloadavgÚioniceÚ memory_mapsÚnet_io_countersÚcpu_numÚ io_countersÚrlimitÚsensors_batteryÚ sensors_fansÚsensors_temperaturesÚthreadsÚcpu_freqc    ó6—d„}tjj«}ttdd«}t
r,tj dk\r|tj|d<||fStrtj|fStrÁ|tj«xs˜|tjjtj««xsc|tjdjtj ddŽ««xs(|tj «j#««}|s t%d«‚||fStjjtj«}tjj'|«sJ|«‚||fS)Nc󦗠   tj|dgtjtj¬«|S#tj$rYywxYw)Nz-V)ÚstdoutÚstderr)rvÚ
check_callÚPIPEÚCalledProcessError)Úexes r|Úattemptz_get_py_exe.<locals>.attemptàsI€ð    Ü × !Ñ !ؐd ¤J§O¡O¼J¿O¹Oõ ð ˆJøô×,Ñ,ò    Ùð    ús‚6:ºAÁAÚ_base_executable)r‚éÚ__PYVENV_LAUNCHER__z python{}.{}rhz"can't find python exe real abspath)ÚosrÚcopyÚgetattrrxr Ú version_inforyr_rÚpathÚrealpathÚshutilÚwhichÚformatÚpsutilÚProcessr¡Ú
ValueErrorÚexists)r¢rnÚbaser¡s    r|Ú _get_py_exer´ßsI€òô *‰*/‰/Ó
€Cô ”3Ð*¨DÓ 1€DÝ”3×#Ñ# vÒ-°$Ð2Bô&)§^¡^ˆÐ !Ñ"ؐSˆyÐÝ    Ü~‰~˜sÐ"Ð"Ý    á ”C—N‘NÓ #ò /Ù”r—w‘w×'Ñ'¬¯©Ó7Ó8ò /áÜ— ‘ Ð1˜]×1Ñ1´3×3CÑ3CÀBÀQÐ3GÐHÓIóò /ñ
”v—~‘~Ó'×+Ñ+Ó-Ó.ð      ñÜÐAÓBÐ BؐCˆxˆäg‰g×ÑœsŸ~™~Ó.ˆÜw‰w~‰~˜cÔ"Ð' CÓ'Ð"ؐCˆxˆr~zr+ÚSTATUS_ÚAF_UNIXcóŒ—eZdZdZed„«Zed„«Zed d„«Zed d„«Zed d„«Z    ed d„«Z
Gd    „d
«Z y) rFzéA class that mimics some basic pytest APIs. This is meant for
    when unit tests are run in production, where pytest may not be
    installed. Still, the user can test psutil installation via:
 
        $ python3 -m psutil.tests
    có4—d„}tj|«y)Ncó<—tjdtd¬«y)Nz<Fake pytest module was used. Test results may be inaccurate.é©Ú
stacklevel©Úwarningsr[Ú UserWarning©r~r|Ú _warn_on_exitz0fake_pytest._warn_on_exit.<locals>._warn_on_exit's€Ü M‰MØNÜØö r~)ÚatexitÚregister)rÁs r|rÁzfake_pytest._warn_on_exit%s€ò    ô    ‰˜ Õ&r~cóž—tj«jt«}tjd¬«j |«|S)z‚Mimics pytest.main(). It has the same effect as running
        `python3 -m unittest -v` from the project root directory.
        rh)Ú    verbosity)r=Ú
TestLoaderÚdiscoverÚHEREÚTextTestRunnerÚrun)ÚargsÚkwÚsuites   r|Úmainzfake_pytest.main0s;€ô
×#Ñ#Ó%×.Ñ.¬tÓ4ˆÜ×Ѩ!Ô,×0Ñ0°Ô7؈ r~Ncó^‡—Gd„d«Štjdˆfd„    «}|||¬«S)zMimics `pytest.raises`.có —eZdZdZed„«Zy)ú)fake_pytest.raises.<locals>.ExceptionInfoNcó—|jS©N)Ú_exc©Úselfs r|Úvaluez/fake_pytest.raises.<locals>.ExceptionInfo.value@s €à—y‘yРr~)Ú__name__Ú
__module__Ú __qualname__rÔÚpropertyr×rÀr~r|Ú ExceptionInforÑ=s„؈Dà ñ !óñ !r~rÜc3óܕK—‰«}    |–—t|›d«‚#|$rF}|r3tj|t|««sd|›d|›d}t|«‚||_Yd}~yd}~wwxYw­w)Nz  not raisedú"z" does not match ")ÚAssertionErrorÚreÚsearchÚstrrÔ)ÚexcÚmatchÚeinfoÚerrÚmsgrÜs     €r|Úcontextz#fake_pytest.raises.<locals>.contextDszøèø€á!“OˆEð <Ø’ ô%¨ w¨kÐ%:Ó;Ð;øð ò !Ù¤§¡¨5´#°c³(Ô!;ؘe˜WÐ$6°s°e¸1Ð=CÜ(¨Ó-Ð-Ø —
‘
ûð     !üs*ƒA,ŒA,žA)£<A$ÁA,Á$A)Á)A,)rärÓ)Ú
contextlibÚcontextmanager)rãrärèrÜs   @r|Úraiseszfake_pytest.raises9s6ø€÷    !ñ    !ô
×    "Ñ    "ô
    <ó
#ð
    <ñs %Ô(Ð(r~có”—|r$tj«j||«Stj«j|«S)zMimics `pytest.warns`.)r=ÚTestCaseÚassertWarnsRegexÚ assertWarns)Úwarningräs  r|Úwarnszfake_pytest.warnsSs=€ñ Ü×$Ñ$Ó&×7Ñ7¸ÀÓGÐ GÜ× Ñ Ó"×.Ñ.¨wÓ7Ð7r~có,—tj|«‚)zMimics `unittest.SkipTest`.)r=ÚSkipTest©Úreasons r|Úskipzfake_pytest.skipZs€ô×Ñ Ó'Ð'r~cóH—tj«j|«S)zMimics `pytest.fail`.)r=ríÚfailrôs r|røzfake_pytest.fail_s€ô× Ñ Ó"×'Ñ'¨Ó/Ð/r~có2—eZdZedd„«ZGd„d«Zy)úfake_pytest.markcó.—tj||«S)z'Mimics `@pytest.mark.skipif` decorator.)r=ÚskipIf)Ú    conditionrõs  r|Úskipifzfake_pytest.mark.skipiffs€ô—?‘? 9¨fÓ5Ð 5r~có—eZdZdZdd„Zd„Zy)úfake_pytest.mark.xdist_groupz4Mimics `@pytest.mark.xdist_group` decorator (no-op).Ncó—yrÓrÀ©rÖÚnames  r|Ú__init__z%fake_pytest.mark.xdist_group.__init__ns€Ør~có—|SrÓrÀ)rÖÚ cls_or_meths  r|Ú__call__z%fake_pytest.mark.xdist_group.__call__qs€Ø"Ð"r~rÓ)rØrÙrÚÚ__doc__rrrÀr~r|Ú xdist_grouprks„Ù Fó ó #r~r    N©Ú)rØrÙrÚÚ staticmethodrþr    rÀr~r|Úmarkrúds„à    ò    6ó
ð    6÷    #ò    #r~r rÓr
) rØrÙrÚrr rÁrÎrërñrörør rÀr~r|rFrFs‰„ñðñ'óð'ðñóððò)óð)ð2ò8óð8ð ò(óð(ðò0óð0÷#ò#r~rFÚpytestcóF‡—eZdZdZˆfd„Zd„Zd„Zd„Zd„Zd„Z    d„Z
ˆxZ S)    r<z6A thread task which does nothing expect staying alive.cóp•—t‰|«d|_d|_t    j
«|_y)NFçü©ñÒMbP?)ÚsuperrÚ_runningÚ    _intervalÚ    threadingÚEventÚ_flag)rÖÚ    __class__s €r|rzThreadTask.__init__ˆs*ø€Ü ‰ÑÔØˆŒ ؈ŒÜ—_‘_Ó&ˆ
r~cón—|jj}d|›d|j›dt|«d›dS)Nú<z     running=z at z#xú>)rrØrÚidrs  r|Ú__repr__zThreadTask.__repr__Žs6€Ø~‰~×&Ñ&ˆØ4&˜     $§-¡- °´R¸³X¸b°MÀÐCÐCr~có&—|j«|SrÓ)ÚstartrÕs r|Ú    __enter__zThreadTask.__enter__’s€Ø 
‰
Œ ؈ r~có$—|j«yrÓ)Ústop)rÖrËÚkwargss   r|Ú__exit__zThreadTask.__exit__–s €Ø     ‰     r~có¤—|jr td«‚tjj    |«|j
j «y)zStart thread and keep it running until an explicit
        stop() request. Polls for shutdown every 'timeout' seconds.
        zalready startedN)rr±rÚThreadrrÚwaitrÕs r|rzThreadTask.start™s9€ð =Š=ÜÐ.Ó/Ð /Ü×Ñ×јtÔ$Ø 
‰
‰Õr~có¸—d|_|jj«|jr-tj|j
«|jrŒ,yy)NT)rrÚsetÚtimeÚsleeprrÕs r|rÊzThreadTask.run¢s7€ØˆŒ Ø 
‰
‰Ô؏mŠmÜ J‰Jt—~‘~Ô &ðmmr~có`—|js td«‚d|_|j«y)z8Stop thread execution and and waits until it is stopped.zalready stoppedFN)rr±ÚjoinrÕs r|r"zThreadTask.stop¨s%€à}Š}ÜÐ.Ó/Ð /؈Œ Ø     ‰     r~) rØrÙrÚrrrr r$rrÊr"Ú __classcell__)rs@r|r<r<…s*ø„Ù@ô'ò Dòòòò'ö r~r<cóB‡—tj‰«ˆfd„«}|S)NcóF•—    ‰|i|¤ŽS#t$r t«‚wxYwrÓ)Ú    Exceptionr8)rËr#Úfuns  €r|Úwrapperz&_reap_children_on_err.<locals>.wrapper¶s/ø€ð    Ù˜Ð' Ñ'Ð 'øÜò    Ü ŒOØ ð    úsƒ ‹ ©Ú    functoolsÚwraps)r2r3s` r|Ú_reap_children_on_errr7µs%ø€Ü‡__SÓóóðð €Nr~c ó¨—|jdt«|jdt«|jdtj««|jdt«t
rd}|jd|«|€t tj«¬«}    t|«d|›d    }td
|g}tj|fi|¤Ž}tj|«t|d d ¬ «t|«|Stj|fi|¤Ž}tj|«t|j«|S#t|«wxYw) aCreate a python subprocess which does nothing for some secs and
    return it as a subprocess.Popen instance.
    If "cmd" is specified that is used instead of python.
    By default stdin and stdout are redirected to /dev/null.
    It also attempts to make sure the process is in a reasonably
    initialized state.
    The process is registered for cleanup on reap_children().
    ÚstdinrœÚcwdrnéÚ creationflags©Údirzimport time;open(r'z6', 'w').close();[time.sleep(0.1) for x in range(100)];rkT©ÚdeleteÚempty)Ú
setdefaultrr¦Úgetcwdrr rKrHrrvÚPopenÚ_subprocesses_startedÚaddrPrOÚpid)ÚcmdÚkwdsÚCREATE_NO_WINDOWÚtestfnÚpylineÚsprocs      r|r9r9Ás%€ð    ‡OOGœWÔ%؇OOHœgÔ&؇OOEœ2Ÿ9™9›;Ô'؇OOEœ>Ô*Ýð%ÐØ ‰˜Ð)9Ô:Ø
€{ܤ§    ¡    £ Ô,ˆð      Ü ˜Ô ðØ ˜ð"9ð9ð ô
˜t VÐ,ˆCÜ×$Ñ$ SÑ1¨DÑ1ˆEÜ !× %Ñ % eÔ ,Ü ˜&¨°TÕ :ä ˜Ô ð
€Lô× Ñ  Ñ-¨Ñ-ˆÜ×!Ñ! %Ô(ܐU—Y‘YÔØ €Løô ˜Õ ús Â"AEÅ Ecó>—d}ttj«¬«}    tjdtj
j |«›dt›d«}trt|d¬«\}}nt|«\}}tj|j«}tt|dd    ¬
««}tj!|«tj|«}||ft#|«| t#|«SS#t#|«| t#|«wwxYw) aCreate a subprocess which creates another one as in:
    A (us) -> B (child) -> C (grandchild).
    Return a (child, grandchild) tuple.
    The 2 processes are fully initialized and will live for 60 secs
    and are registered for cleanup on reap_children().
    Nr=zl            import subprocess, os, sys, time
            s = "import os, time;"
            s += "f = open('z¸', 'w');"
            s += "f.write(str(os.getpid()));"
            s += "f.close();"
            s += "[time.sleep(0.1) for x in range(100 * 6)];"
            p = subprocess.Popen([r'z.', '-c', s])
            p.wait()
            r)r<TFr?)rKr¦rCÚtextwrapÚdedentrªÚbasenamerr r6r¯r°rGrtrPÚ _pids_startedrFrH)ÚtfilerKÚsÚsubpÚchildÚgrandchild_pidÚ
grandchilds       r|r;r;ës€ð €EÜ œBŸI™I›KÔ (€FðÜ O‰Oð!ô ŸW™W×-Ñ-¨fÓ5Ð6ð7%ô&0 Lð1 ð    ó     ˆõ Ü °Ô3‰KˆD‘%ä ›(‰KˆD%Ü—‘˜tŸx™xÓ(ˆÜœ]¨6¸$ÀeÔLÓMˆÜ×ј.Ô)Ü—^‘^ NÓ3ˆ
ؐzÐ"äFÔØ Ð Ü ˜Õ ð øô    FÔØ Ð Ü ˜Õ ð ús ¢CDÄDcóò‡—tjsJ‚t«}tjd|›d«}d}t |«}    |j t«t|«\}}|j«\}}    tj|j«gggt«t|jd««}tj|«tj |«Št#ˆfd„«|‰f|j%«|j%«t'|«| t'|«SS#|j%«wxYw#|j%«t'|«| t'|«wwxYw)z±Create a zombie process and return a (parent, zombie) process tuple.
    In order to kill the zombie parent must be terminate()d first, then
    zombie must be wait()ed on.
    a         import os, sys, time, socket, contextlib
        child_pid = os.fork()
        if child_pid > 0:
            time.sleep(3000)
        else:
            # this is the zombie process
            with socket.socket(socket.AF_UNIX) as s:
                s.connect('za')
                pid = bytes(str(os.getpid()), 'ascii')
                s.sendall(pid)
        NécóF•—‰j«tjk(SrÓ)Ústatusr¯Ú STATUS_ZOMBIE)Úzombies€r|ú<lambda>zspawn_zombie.<locals>.<lambda>0sø€˜vŸ}™}›´&×2FÑ2FÑF€r~)r¯r rKrOrPrUÚ
settimeoutrr6ÚacceptÚselectÚfilenortÚrecvrRrFr°rNÚcloserH)    Ú    unix_fileÚsrcrSÚsockÚparentÚconnÚ_Úzpidr^s            @r|r:r:s7ø€ô
<Š<Ј<Ü“ €IÜ
/‰/ðð&˜;ð'    ð  ó €Cð €EÜ ˜IÓ &€DðØ ‰œÔ'ܘc›
‰ ˆØ—+‘+“-‰ˆˆað    Ü M‰M˜4Ÿ;™;›=˜/¨2¨r´>Ô Bܐt—y‘y “Ó'ˆDÜ × Ñ ˜dÔ #Ü—^‘^ DÓ)ˆFÜ ÓFÔ GؘFÐ#à J‰JŒLà 
‰
Œ ܐIÔØ Ð Ü ˜Õ ð øð     J‰JLûà 
‰
Œ ܐIÔØ Ð Ü ˜Õ ð ús%Á6E Á<BD6Ã<E Ä6EÅE Å +E6c ó`—|jdd«|jdd«t«}    t|d«5}|j|«ddd«t    t
j gfi|¤Ž}t|j«||fS#1swYŒ>xYw#t$r t|«‚wxYw)zRun python 'src' code string in a separate interpreter.
    Returns a subprocess.Popen instance and the test file where the source
    code was written.
    rœNrÚw) rBrKÚopenÚwriter9rrrOrGr1rH)rgrIÚsrcfileÚfrUs     r|r6r6;s¡€ð     ‡OOH˜dÔ#؇OOH˜dÔ#Ü‹l€GðÜ '˜3Ó ð     1Ø G‰GCŒL÷    äœj¨!¯&©&Ð1Ñ:°TÑ:ˆÜT—X‘XÔØgˆÐ÷        ð    ûô
òܐGÔØ ðús"° B¼B Á<B BÂBÂB-c ó4—trdnd}|jdtj«|jdtj«|jdd«|jd|«t    |t
«rt j|«}tj|fi|¤Ž}tj|«|jt¬«\}}|jdk7rt||z«‚|r t|«|j!d    «r|d
d }|S) zURun cmd in a subprocess and return its output.
    raises RuntimeError on error.
    r;rrœrroTr<©Útimeoutú
Néÿÿÿÿ)r rBrvrŸÚ
isinstancerâÚshlexrurDrErFÚ communicaterÚ
returncodeÚ RuntimeErrorr[Úendswith)rHrIÚflagsÚprœrs      r|Úshr€Osހõ !‰I a€E؇OOHœjŸo™oÔ.؇OOHœjŸo™oÔ.؇OOÐ(¨$Ô/؇OOO UÔ+ܐ#”sÔ܏k‰k˜#ÓˆÜ×јÑ% Ñ%€AÜ×јaÔ Ø—]‘]¬>]Ó:N€FˆF؇||qÒܘ6 F™?Ó+Ð+Ù Ü ˆVŒ Ø ‡tÔØ˜˜ˆØ €Mr~c󬇇‡    ‡
—d„Š
d„Šˆˆˆ
fd„}ˆˆˆ
fd„Š    ˆ    fd„}d„}|}    t|t«ru|||«t|tjtjf«r||«t|t«r|n |j
}t    j |«rJ|«‚St|tjtjf«ru‰    ||«t|tjtjf«r||«t|t«r|n |j
}t    j |«rJ|«‚St|tj«ru|||«t|tjtjf«r||«t|t«r|n |j
}t    j |«rJ|«‚Std|›«‚#t|tjtjf«r||«t|t«r|n |j
}t    j |«rJ|«‚wxYw)a˜Terminate a process and wait() for it.
    Process can be a PID or an instance of psutil.Process(),
    subprocess.Popen() or psutil.Popen().
    If it's a subprocess.Popen() or psutil.Popen() instance also closes
    its stdin / stdout / stderr fds.
    PID is wait()ed even if the process is already gone (kills zombies).
    Does nothing if the process does not exist.
    Return process exit status.
    cóø—|j|«trJt|tj«r/    t j |j«j|«Syy#t
j$rYywxYwrÓ)    r'r rxrvrDr¯r°rGÚ NoSuchProcess)Úprocrus  r|r'zterminate.<locals>.waitssd€Ø     ‰    'ÔÝ ”z $¬
×(8Ñ(8Ô9ð Ü—~‘~ d§h¡hÓ/×4Ñ4°WÓ=Ð=ð:ˆ7øô×'Ñ'ò Ùð ús³-A#Á#A9Á8A9cóΗtrtrtj}tr2|tjk7r|j tj «|j |«yrÓ)rr_ÚsignalÚSIGKILLr Ú send_signalÚSIGCONT)r„Úsigs  r|Úsendsigzterminate.<locals>.sendsig|s@€å •^Ü—.‘.ˆCõ SœFŸN™NÒ*Ø × Ñ œVŸ^™^Ô ,Ø ×јÕr~cóŽ•—    ‰|‰«‰||«S#t$rYŒt$r}tr|jdk(r    ‚d}~wwxYw)Né)ÚProcessLookupErrorÚOSErrorr Úwinerror)r„rurær‹rŠr's   €€€r|Úterm_subprocess_procz'terminate.<locals>.term_subprocess_proc†sRø€ð    Ù D˜#Ô ñD˜'Ó"Ð"øô "ò    Ù Üò    Ý˜3Ÿ<™<¨1Ò,ØØ ûð    úsƒ    •    A A¨?¿Acó\•—    ‰|‰«‰||«S#tj$rYŒwxYwrÓ)r¯rƒ)r„rur‹rŠr's  €€€r|Úterm_psutil_procz#terminate.<locals>.term_psutil_proc‘s;ø€ð    Ù D˜#Ô ñD˜'Ó"Ð"øô×#Ñ#ò    Ù ð    ús ƒ    •+ª+c󜕗    tj|«}‰||«S#tj$rtrt    ||«cYSYywxYwrÓ)r¯r°rƒr r)rGrur„r“s   €r|Úterm_pidzterminate.<locals>.term_pid˜sQø€ð    3Ü—>‘> #Ó&ˆDñ $ D¨'Ó2Ð 2øô ×#Ñ#ò    .åÜ  WÓ-Ò-ñð    .úsƒ!¡%A Á
A cóê—|jr|jj«|jr|jj«|jr|jj«yyrÓ)rœrerr9)r„s r|Ú flush_popenzterminate.<locals>.flush_popen¢sL€Ø ;Š;Ø K‰K× Ñ Ô Ø ;Š;Ø K‰K× Ñ Ô à :Š:Ø J‰J× Ñ Õ ð r~z wrong type )    rxrtrvrDr¯rGÚ
pid_existsr°Ú    TypeError) Ú proc_or_pidrŠÚ wait_timeoutr‘r•r—rrGr‹r“r's  `      @@@r|r7r7hsÜû€òòö    #ö#ô3òð    €Að /Ü aœÔ Ù˜A˜|Ó,ô aœ*×*Ñ*¬F¯L©LÐ9Ô :Ù ˜ŒNܘa¤Ô%‰a¨1¯5©5ˆÜ×$Ñ$ SÔ)Ð.¨3Ó.Ð)Ð)ô˜œFŸN™N¬F¯L©LÐ9Ô :Ù# A |Ó4ô aœ*×*Ñ*¬F¯L©LÐ9Ô :Ù ˜ŒNܘa¤Ô%‰a¨1¯5©5ˆÜ×$Ñ$ SÔ)Ð.¨3Ó.Ð)Ð)ô˜œ:×+Ñ+Ô ,Ù'¨¨<Ó8ô aœ*×*Ñ*¬F¯L©LÐ9Ô :Ù ˜ŒNܘa¤Ô%‰a¨1¯5©5ˆÜ×$Ñ$ SÔ)Ð.¨3Ó.Ð)Ð)ô ˜k¨!¨Ð/Ó0Ð 0øä aœ*×*Ñ*¬F¯L©LÐ9Ô :Ù ˜ŒNܘa¤Ô%‰a¨1¯5©5ˆÜ×$Ñ$ SÔ)Ð.¨3Ó.Ð)Ð)ús¤G%Â)2G%Å"G%ÇG%Ç%A.IcóÈ—tj«j|¬«}tr&tj    «}t |«trŒ&t r&t j    «}t |«t rŒ&|rd|D]}t |d¬«Œtj|t¬«\}}|D],}td|›d«t |tj¬«Œ.yy)aTerminate and wait() any subprocess started by this test suite
    and any children currently running, ensuring that no processes stick
    around to hog resources.
    If recursive is True it also tries to terminate and wait()
    all grandchildren started by this process.
    ©Ú    recursiveN)r›rtzcouldn't terminate process z; attempting kill())rŠ) r¯r°ÚchildrenrEÚpopr7rRÚ
wait_procsrr[r†r‡)ržrŸrUrGrrkÚalives       r|r8r8¼sŀô~‰~Ó×(Ñ(°9Ð(Ó=€Hõ  Ü$×(Ñ(Ó*ˆÜ$Œö  õ
Ü×ÑÓ!ˆÜ#Œö ñ
Øò    ,ˆAÜ a dÖ +ð    ,ä×$Ñ$ X´~ÔF‰ˆˆ5Øò    -ˆAÜ Ð.¨q¨eÐ3FÐGÔ HÜ aœVŸ^™^Ö ,ñ    -ð    r~có|—ts td«‚d}tj«d}|D]}|j    «s|dk(r||z }Œn|st d|›«‚d}d}|j d«}t|d«}t|«dk\rt|d«}t|«dk\rt|d«}|||fS)    z"Return a tuple such as (2, 6, 36).z    not POSIXr rhrgz can't parse rrºr‚)    r ÚNotImplementedErrorr¦ÚunameÚisdigitr±rurtÚlen)rTr¥ÚcÚminorÚmicroÚnumsÚmajors       r|rMrMásƀå Ü! +Ó.Ð.Ø
€AÜ H‰H‹Jq‰M€EØ òˆØ 9‰9Œ;˜!˜sš(Ø ‰F‰Aá ð    ñ
ܘ<¨ yÐ1Ó2Ð2Ø €EØ €EØ 7‰73‹<€DÜ Q‘‹L€EÜ
ˆ4ƒyA‚~ܐD˜‘G“ ˆÜ
ˆ4ƒyA‚~ܐD˜‘G“ ˆØ 5˜%Ð  Ð r~có‚—ts td«‚tj«}|jxsd}|d|d|fS)Nz not WINDOWSrrº)r r¤rxÚgetwindowsversionÚservice_pack_major)ÚwvÚsps  r|rLrLùsC€Ý Ü! -Ó0Ð0Ü     ×    Ñ    Ó     €BØ     ×    Ñ    Ò    # !€BØ ˆq‰E2a‘5˜"Ð Ðr~có4—eZdZdZeddddfd„Zd„Zd„Zd„Zy)ÚretryzA retry decorator.Nrcóh—|r |r td«‚||_||_||_||_||_y)Nz/timeout and retries args are mutually exclusive)r±Ú    exceptionruÚretriesÚintervalÚlogfun)rÖrµrur¶r·r¸s      r|rzretry.__init__    s8€ñ ‘wÜÐNÓOÐ OØ"ˆŒØˆŒ ؈Œ Ø ˆŒ ؈ r~c#ó0K—|jrVtj«|jz}tj«|krd–—tj«|krŒyy|jrt|j«D]}d–—Œy    d–—Œ­wrÓ)rur*r¶Úrange)rÖÚstop_atrks   r|Ú__iter__zretry.__iter__sqèø€Ø <Š<Ü—i‘i“k D§L¡LÑ0ˆGÜ—)‘)“+ Ò'Ûô—)‘)“+ Õ'à \Š\ܘ4Ÿ<™<Ó(ò Üñ ðÛðùs ‚A BÁ#3Bcó\—|j tj|j«yyrÓ)r·r*r+rÕs r|r+z retry.sleep%s!€Ø =‰=Ð $Ü J‰Jt—}‘}Õ %ð %r~cóT‡‡—tj‰«ˆˆfd„«}‰|_|S)Ncóĕ—d}‰D] }    ‰|i|¤ŽcS|‚#‰j$r9}|}‰j‰j|«‰j«Yd}~ŒTd}~wwxYwrÓ)rµr¸r+)rËr#rãrkr2rÖs    €€r|r3zretry.__call__.<locals>.wrapper*spø€àˆCØò ðÙ Ð/¨Ñ/Ò/ð ðˆIøð—~‘~òؐCØ—{‘{Ð.ØŸ ™  CÔ(Ø—J‘J”LÜûð úsŠ—A¦/AÁA)r5r6Ú    decorator)rÖr2r3s`` r|rzretry.__call__)s-ù€Ü    ‰˜Ó    ô     ó
ð     ð !ˆÔ؈r~)    rØrÙrÚrr1rr¼r+rrÀr~r|r³r³s*„ÙðØØØØó ò 
ò&ór~r³r)rµr¸rur·có„—|tj«vrtj|«‚tj|«y)z„Wait for pid to show up in the process list then return.
    Used in the test suite to give time the sub process to initialize.
    N)r¯Úpidsrƒr°)rGs r|rOrO?s/€ð ”&—+‘+“-ÑÜ×"Ñ" 3Ó'Ð'Ü
‡NN3Õr~cóŽ—t|d«5}|j«}ddd«|ssJ‚|r t|«S#1swYŒxYw)z8Wait for a file to be written on disk with some content.ÚrbN)roÚreadrH)Úfnamer@rArrÚdatas     r|rPrPNsJ€ô
ˆeTÓ    ð˜a؏v‰v‹xˆ÷á Ùˆ ˆt٠ܐEÔØ €K÷ ðús    ;»Acó—|«}|sJ‚|S)z1Keep calling function until it evaluates to True.rÀ)r2Úrets  r|rNrN_s€ñ ‹%€CÙ €Jˆ3Ø €Jr~cóP—d„}    tj|«}tj|j«r%t    j
t j|«}n$t    j
tj|«}tr|«y||«y#t$rYywxYw)z?Convenience function for removing temporary test files or dirs.có6—tj«tz}tj«|kr    |«S‚#t$rYn%t$r}|}t    d|›«Yd}~nd}~wwxYwtj
d«tj«|krŒgŒ`)Nz    ignoring g{®Gáz„?)r*rÚFileNotFoundErrorrr[r+)r2r»rkræs    r|Ú    retry_funzsafe_rmpath.<locals>.retry_funtsˆ€ô
—)‘)“+¤Ñ.ˆÜi‰i‹k˜GÒ#ð (Ù“u ðˆ    øô %ò ÙÜò (ؐܐy  Ð&×'Ñ'ûð (úô J‰JtÔ ôi‰i‹k˜GÓ#øs´=½    A*ÁA*ÁA%Á%A*N) r¦ÚstatÚS_ISDIRÚst_moder5Úpartialr¬ÚrmtreeÚremover rÌ)rªrÍÚstr2s    r|rHrHqsv€òð"  Ü W‰WT‹]ˆÜ <‰<˜Ÿ
™
Ô #Ü×#Ñ#¤F§M¡M°4Ó8‰Cä×#Ñ#¤B§I¡I¨tÓ4ˆCÝ Ù Eá cNøÜ ò Ù ð ús…B
BÂB    B%Â$B%cóN—    tj|«y#t$rYywxYw)z.Convenience function for creating a directory.N)r¦ÚmkdirÚFileExistsErrorr=s r|Ú
safe_mkdirrØ“s$€ð Ü
‰ øÜ ò Ù ð ús ‚˜    $£$c#óÆK—tj«}    tj|«d–—tj|«y#tj|«wxYw­w)z@Context manager which temporarily changes the current directory.N)r¦rCrG)ÚdirnameÚcurdirs  r|rGrG›s?èø€ôY‰Y‹[€FðÜ
‰ÔÛ ä
‰ÕøŒ‰Õüs‚A!˜A±A!ÁAÁA!cóR—tjj|«rJ|«‚tjt
|«t jt|«trFtj|«}tj||jtjz«|S)z6Create a Python executable file in the given location.)r¦rªr²rÂrÃrHr¬Úcopyfilerr rÎÚchmodrÐÚS_IEXEC)rªrÔs  r|rIrI¦si€äw‰w~‰~˜dÔ#Ð) TÓ)Ð #Ü
‡OO”K Ô&Ü
‡OO”J Ô%Ý Ü W‰WT‹]ˆÜ
‰r—z‘z¤D§L¡LÑ0Ô1Ø €Kr~cóV—tjj|«rJ|«‚tjd«st j d«S|€tjd«}nt|t«sJ|«‚tjt|«ttd¬«d«5}|j!|«ddd«    t#j$dj&d|g«t|j&«|S#1swYŒDxYw#tj&«wxYw)    z5Create a compiled C executable in the given location.Úgcczgcc is not installedNz‡
            #include <unistd.h>
            int main() {
                pause();
                return 1;
            }
            z.c©Úsuffixrnz-o)r¦rªr²r¬r­rrörOrPrxrârÂrÃrHrorKrprvržr)rªÚc_coderrs   r|rJrJ±sç€äw‰w~‰~˜dÔ#Ð) TÓ)Ð #Ü <‰<˜Ô ܏{‰{Ð1Ó2Ð2Ø €~Ü—‘ð"ó‰ô˜&¤#Ô&Ð.¨Ó.Ð&ä
‡OO”K Ô&Ü     Œj Ô% sÓ    +ð¨qØ    ‰Œ÷ðÜ×јu a§f¡f¨d°DÐ9Ô:äA—F‘FÔØ €K÷ ðûô
    A—F‘FÕúsÂ0Dà #DÄDÄD(cóò—    tjt||¬«}tjj |«s;tjj |«}tjt|«|SŒw)zîReturn an absolute pathname of a file or dir that did not
    exist at the time this call is made. Also schedule it for safe
    deletion at interpreter exit. It's technically racy but probably
    not really due to the time variant.
    )Úprefixrãr>)
ÚtempfileÚmktemprr¦rªr²r«rÂrÃrH)rãr>rrªs    r|rKrKËsU€ð ܏‰¤m¸FÈÔLˆÜw‰w~‰~˜dÔ#Ü—7‘7×#Ñ# DÓ)ˆDÜ O‰OœK¨Ô .؈Kð r~cóT—eZdZdZd„Zdd„Zd„Zd„Zd„Zd„Z    d    „Z
d
„Z d „Z d „Z d „Zy)rBzžTest class providing auto-cleanup wrappers on top of process
    test utilities. All test classes should derive from this one, even
    if we use pytest.
    có¼—|jj}|jd«sd|z}dj||jj|j
«S)Nzpsutil.z psutil.tests.z{}.{}.{})rrÙÚ
startswithr®rØÚ_testMethodName)rÖÚfqmods  r|Ú__str__zPsutilTestCase.__str__çsU€Ø—‘×)Ñ)ˆØ×Ñ     Ô*Ø# eÑ+ˆEØ× Ñ Ø Ø N‰N× #Ñ #Ø ×  Ñ  ó
ð    
r~NcóL—t||¬«}|jt|«|S)N)rãr>)rKÚ
addCleanuprH)rÖrãr>rÆs    r|rKzPsutilTestCase.get_testfnñs!€Ü &¨cÔ2ˆØ ‰œ  UÔ+؈ r~cóH—t|i|¤Ž}|jt|«|SrÓ)r9rðr7)rÖrËrIrMs    r|r9zPsutilTestCase.spawn_subprocös$€Ü˜tÐ, tÑ,ˆØ ‰œ     5Ô)؈ r~có̗|j|i|¤Ž}    tj|j«S#tj$r|j |j«‚wxYwrÓ)r9r¯r°rGrƒÚassert_pid_gone)rÖrËr#rMs    r|Ú spawn_psproczPsutilTestCase.spawn_psprocûs[€Ø"×"Ñ" DÐ3¨FÑ3ˆð    Ü—>‘> %§)¡)Ó,Ð ,øÜ×#Ñ#ò    Ø ×  Ñ   §¡Ô +Ø ð    ús    ”3³0A#có|—t«\}}|jt|«|jt|«||fSrÓ)r;rðr7)rÖÚchild1Úchild2s   r|r;z"PsutilTestCase.spawn_children_pairs5€Ü,Ó.‰ˆØ ‰œ     6Ô*Ø ‰œ     6Ô*ؘÐÐr~có|—t«\}}|jt|«|jt|«||fSrÓ)r:rðr7)rÖrir^s   r|r:zPsutilTestCase.spawn_zombie    s4€Ü%›‰ˆØ ‰œ     6Ô*Ø ‰œ     6Ô*ؘÐÐr~cóz—t|i|¤Ž\}}|jt|«|jt|«|SrÓ)r6rðrHr7)rÖrËrIrMrqs     r|r6zPsutilTestCase.pyruns6€Ü Ð-¨Ñ-‰ˆˆwØ ‰œ  WÔ-Ø ‰œ     5Ô)؈ r~có¬—t|tj«sJ‚|j|jk(sJ‚|j|j
k(sJ‚|jr|jsJ‚t|tj «r8|j|jk(sJ‚|j|jdk\sJ‚t|«t|«y©Nr) rxr¯ÚErrorrGrÚ_nameÚ ZombieProcessÚppidÚ_ppidrâÚrepr)rÖr„rãs   r|Ú_check_proc_exczPsutilTestCase._check_proc_excs¢€Ü˜#œvŸ|™|Ô,Ð,Ð,؏w‰w˜$Ÿ(™(Ò"Ð"Ð"؏x‰x˜4Ÿ:™:Ò%Ð%Ð%Ø 8Š8Ø—8’8ˆO8Ü cœ6×/Ñ/Ô 0Ø—8‘8˜tŸz™zÒ)Ð )Ð)؏x‰xÐ#Ø—x‘x 1’}Ð$}Ü ˆCŒÜ ˆS    r~cóH—tjtj«5}    tj|«    ddd«jj|k(sJ‚|jjJ‚tj|«rJ|«‚|tj«vsJ‚|tj«Dcgc]}|j‘Œc}vsJ‚y#tj
$r!tj d«cYcddd«SwxYw#1swYŒØxYwcc}w)Nz&wasn't supposed to raise ZombieProcess) rrër¯rƒr°rþrør×rGrr˜rÂÚ process_iter)rÖrGÚcmÚxs    r|rózPsutilTestCase.assert_pid_gone"sú€Ü ]‰]œ6×/Ñ/Ó 0ð    M°Bð MÜ—‘˜sÕ#÷    Mð
x‰x|‰|˜sÒ"Ð"Ð"؏x‰x}‰}Ð$Ð$Ð$Ü×$Ñ$ SÔ)Ð.¨3Ó.Ð)Øœ&Ÿ+™+›-Ñ'Ð'Ð'ج&×*=Ñ*=Ó*?Ö@ Q˜1Ÿ5›5Ò@Ñ@Ð@Ñ@øô ×'Ñ'ò MÜ—{‘{Ð#KÓLÑL÷        Mñ    Mð Mú÷    Mð    MüòAs.¤D¦CÃDÃ(DÄDÄDÄDÄDcóâ—|j|j«t|«}|j|jd¬«D]<\}}|j t |«|¬«5    |«}d|›d|›}t|«‚|jd¬«y#tj$r‚tj$r}|j||«Yd}~nd}~wwxYw    ddd«Œ¡#1swYŒªxYw)NT©Ú clear_cache©r„rzProcess.z!() didn't raise NSP and returned rrt) rórGrCÚiterÚallÚsubTestrârßr¯rþrƒrr')rÖr„Únsr2rrÉrçrãs        r|Úassert_proc_gonezPsutilTestCase.assert_proc_gone.sð€Ø ×јTŸX™XÔ&Ü ˜tÓ $ˆØŸ™ §¡°T˜Ó:ò     .‰IˆCØ—‘¤3 t£9°4Ó8ñ .ð .Ù›%Cð# 4 &ð)ؘ7ð$ðô)¨Ó-Ð-ð     .ð         ‰    ˜!ˆ    Õøô×+Ñ+òØÜ×+Ñ+ò4Ø×(Ñ(¨¨s×3Ñ3ûð4úØ3÷ .÷ .ñ .ús6Á&C%Á(BÁ/C%Â&CÂ<CÃC%ÃCÃC%Ã%C.    cóÊ—tj|j«}||k(sJ‚ts%tst
st |«t |«k(sJ‚|j«tjk(sJ‚|j«sJ‚tj|j«sJ‚|j«|jtj«vsJ‚|jtj«Dcgc]}|j‘Œc}vsJ‚it_|jtj«Dcgc]}|j‘Œc}vsJ‚t|«}|j!|j"d¬«D]2\}}|j%t'|«|¬«5    |«ddd«Œ4t.rt1j2tj(«5}|j5«ddd«|j-|j6«t1j2tj(«5}|j9«ddd«|j-||j6«t1j2tj(«5}|j;«ddd«|j-||j6«|j=«|j?«|jA«|jC«|j«sJ‚tj|j«sJ‚|jtj«vsJ‚|jtj«Dcgc]}|j‘Œc}vsJ‚it_|jtj«Dcgc]}|j‘Œc}vsJ‚ycc}wcc}w#tj(tj*f$r}|j-||«Yd}~Œsd}~wwxYw#1swYŒ°xYw#1swYŒExYw#1swYŒúxYw#1swYŒ¯xYwcc}wcc}w)NTrr
)"r¯r°rGr
r    r Úhashr\r]Ú
is_runningr˜Úas_dictrÂrÚ_pmaprCr r r rârþÚ AccessDeniedrrrrëÚcmdliner×r¡rÚsuspendÚresumer7Úkill)    rÖr„Úclonerrr2rrãrs             r|Úassert_proc_zombiez!PsutilTestCase.assert_proc_zombieAsE€ä—‘˜tŸx™xÓ(ˆð
uŠ}Ј}ݝ6¥Uܘ“:¤ e£Ò,Ð ,Ð,à{‰{‹}¤× 4Ñ 4Ò4Ð4Ð4à‰Ô Ð Ð Ü× Ñ  §¡Ô*Ð*Ð*à  ‰ Œàx‰xœ6Ÿ;™;›=Ñ(Ð(Ð(؏x‰x¬6×+>Ñ+>Ó+@ÖA a˜AŸE›EÒAÑAÐAÐAØŒŒ ؏x‰x¬6×+>Ñ+>Ó+@ÖA a˜AŸE›EÒAÑAÐAÐAä ˜tÓ $ˆØŸ™ §¡°T˜Ó:ò    4‰IˆCØ—‘¤3 t£9°4Ó8ñ 4ð4Ù”E÷ 4ð 4ð    4ö ä—‘œv×3Ñ3Ó4ð ¸Ø— ‘ ”÷ à ×  Ñ    r§x¡xÔ 0Ü—‘œv×3Ñ3Ó4ð ¸Ø—‘”
÷ à ×  Ñ    r§x¡xÔ 0Ü—‘œv×3Ñ3Ó4ð #¸Ø× Ñ Ô"÷ #à ×  Ñ    r§x¡xÔ 0à  ‰ ŒØ  ‰ Œ Ø ‰ÔØ     ‰    Œ ؏‰Ô Ð Ð Ü× Ñ  §¡Ô*Ð*Ð*؏x‰xœ6Ÿ;™;›=Ñ(Ð(Ð(؏x‰x¬6×+>Ñ+>Ó+@ÖA a˜AŸE›EÒAÑAÐAÐAØŒŒ ؏x‰x¬6×+>Ñ+>Ó+@ÖA a˜AŸE›EÒAÑAÐAÑAùòABùâAøô×,Ñ,¬f×.AÑ.AÐBò4Ø×(Ñ(¨¨s×3Ò3ûð4ú÷ 4ñ 4ú÷ ñ ú÷ ñ ú÷ #ñ #üòBùâAslÃ;OÅOÆ#P'Æ%O$Ç P4È8QÊQÍ;QÏQ Ï$#P$ÐPÐP'ÐP$Ð$P'Ð'P1    Ð4P>ÑQ ÑQ©r N)rØrÙrÚrrîrKr9rôr;r:r6rrórrrÀr~r|rBrBÞs@„ñò
óò
ò
ò ò  ò ò ò
Aòó&3Br~rBzunreliable on PYPYrôcóؗeZdZdZdZdZdZerdndZdZ    e
j«Z e ejd««Zed„«Zed    „«Zd
„Zd „Zd „Zd „Zd„Zd„Zd„Z    dd„Zd„Zy)rAaçTest framework class for detecting function memory leaks,
    typically functions implemented in C which forgot to free() memory
    from the heap. It does so by checking whether the process memory
    usage increased before and after calling the function many times.
 
    Note that this is hard (probably impossible) to do reliably, due
    to how the OS handles memory, the GC and so on (memory can even
    decrease!). In order to avoid false positives, in case of failure
    (mem > 0) we retry the test for up to 5 times, increasing call
    repetitions each time. If the memory keeps increasing then it's a
    failure.
 
    If available (Linux, OSX, Windows), USS memory is used for comparison,
    since it's supposed to be more precise, see:
    https://gmpy.dev/blog/2016/real-process-memory-and-environ-in-python
    If not, RSS memory is used. mallinfo() on Linux and _heapwalk() on
    Windows may give even more precision, but at the moment are not
    implemented.
 
    PyPy appears to be completely unstable for this framework, probably
    because of its JIT, so tests on PYPY are skipped.
 
    Usage:
 
        class TestLeaks(psutil.tests.TestMemoryLeak):
 
            def test_fun(self):
                self.execute(some_function)
    éÈrirrTÚ PSUTIL_DEBUGcó.—tjd«y)NF)r¯Ú
_set_debug©Úclss r|Ú
setUpClasszTestMemoryLeak.setUpClass®s€ä×ј%Õ r~cóB—tj|j«yrÓ)r¯r!Ú_psutil_debug_origr"s r|Ú tearDownClasszTestMemoryLeak.tearDownClass²s€ä×ј#×0Ñ0Õ1r~cód—|jj«}t|d|j«S)NÚuss)Ú    _thisprocÚmemory_full_infor¨Úrss)rÖÚmems  r|Ú_get_memzTestMemoryLeak._get_mem¶s)€ðn‰n×-Ñ-Ó/ˆÜs˜E 3§7¡7Ó+Ð+r~cóv—tr|jj«S|jj«SrÓ)r r*Únum_fdsÚ num_handlesrÕs r|Ú _get_num_fdszTestMemoryLeak._get_num_fds¼s+€Ý Ø—>‘>×)Ñ)Ó+Ð +à—>‘>×-Ñ-Ó/Ð /r~cóV—|jrt|dtj¬«yy)NÚyellow)ÚcolorÚfile)Úverboserrxr)rÖrçs  r|Ú_logzTestMemoryLeak._logÂs€Ø <Š<Ü ˜ 8´#·*±*Ö =ð r~có —|j«}|j|«|j«}||z
}|dkrd|›d}tj|«S|dkDr3trdnd}|dkDr|dz }|›d|›d    |›}tj|«Sy
) z»Makes sure num_fds() (POSIX) or num_handles() (Windows) does
        not increase after calling a function.  Used to discover forgotten
        close(2) and CloseHandle syscalls.
        rznegative diff z8 (gc probably collected a resource from a previous test)ÚfdÚhandlerºrTz
 unclosed z after calling N)r2Úcallrrør )rÖr2ÚbeforeÚafterÚdiffrçÚtype_s       r|Ú
_check_fdszTestMemoryLeak._check_fdsÆs¬€ð
×"Ñ"Ó$ˆØ     ‰    #ŒØ×!Ñ!Ó#ˆØv‰~ˆØ !Š8à   ð)2ð2ð ô—;‘;˜sÓ#Ð #Ø !Š8Ý!‘D xˆEؐaŠxؘ‘ ØF˜* U G¨?¸3¸'ÐBˆCÜ—;‘;˜sÓ#Ð #ð r~có—tjd¬«|j«}t|«D]}|j    |«}~~Œtjd¬«|j«}tj
gk(sJ‚||z
}|S)z€Get 2 distinct memory samples, before and after having
        called fun repeatedly, and return the memory difference.
        rº)Ú
generation)ÚgcÚcollectr.rºr<Úgarbage)rÖr2ÚtimesÚmem1rrÉÚmem2r?s        r|Ú _call_ntimeszTestMemoryLeak._call_ntimesÜsy€ô     
‰
˜aՠ؏}‰}‹ˆÜu“ò    ˆAØ—)‘)˜C“.ˆCØ‘3ð    ô     
‰
˜aՠ؏}‰}‹ˆÜz‰z˜RÒÐÐØd‰{ˆØˆ r~c    ó°—g}d}|}td|dz«D]›}|j||«}    dj|t|    «t|    |z «|«}
|j    |
«|    |kxs|    |k} | r|dkDr|j |
«y|dk(r
t «|j |
«||z }|    }Œtjdj|««S)Nrrºz,Run #{}: extra-mem={}, per-call={}, calls={}z. )
rºrJr®rÚappendr8Úprintrrør-) rÖr2rGr¶Ú    toleranceÚmessagesÚprev_memÚincreaseÚidxr-rçÚsuccesss             r|Ú
_check_memzTestMemoryLeak._check_memësà€ØˆØˆØˆÜ˜˜G a™KÓ(ò    ˆCØ×#Ñ# C¨Ó/ˆCØ@×GÑGØÜ˜CӠܘC %™KÓ(Øó    ˆCð O‰O˜CÔ  Ø˜YÑ&Ò9¨#°©/ˆGÙØ˜’7Ø—I‘I˜c”NÙà˜!’8Ü”GØ—    ‘    ˜#”ؘÑ!Ø‘ð'    ô({‰{˜4Ÿ9™9 XÓ.Ó/Ð/r~có—|«SrÓrÀ)rÖr2s  r|r<zTestMemoryLeak.calls    €Ù‹uˆ r~Ncó¢—||n |j}||n |j}||n |j}||n |j}    |dk\sJd«‚|dk\sJd«‚|dk\sJd«‚|dk\sJd«‚    |j||«|j|«|j||||¬«y#t$r}t t |««‚d}~wwxYw)    zTest a callable.Nrºztimes must be >= 1rzwarmup_times must be >= 0zretries must be >= 0ztolerance must be >= 0)rGr¶rN)
rGÚ warmup_timesr¶rNrßr±rârJrArT)rÖr2rGrWr¶rNræs       r|ÚexecutezTestMemoryLeak.execute
sí€ðÐ*‘°·
±
ˆà(Ð4‰L¸$×:KÑ:Kð    ð%Ð0‘'°d·l±lˆØ!*Ð!6‘I¸D¿N¹Nˆ    ð    'ؘA’:Ð 3Ð3Ó 3:Ø 1Ò$Ð AÐ&AÓ AÐ$ؘa’<Ð 7Ð!7Ó 7<Ø ’>Ð ;Ð#;Ó ;‘>ð     ×ј#˜|Ô,Ø ‰˜ÔØ ‰˜ 5°'ÀYˆÕOøô ò    'ÜœS ›XÓ&Ð &ûð    'úsÁ0B,Â,    CÂ5C    à   Cc ó:‡‡—ˆˆfd„}|j|fi|¤Žy)znConvenience method to test a callable while making sure it
        raises an exception on every call.
        có^•—    ‰«tj‰›d‰›«S#‰$rYywxYw)Nz did not raise )rrø)rãr2s€€r|r<z*TestMemoryLeak.execute_w_exc.<locals>.call%s>ø€ð AÙ”ô—{‘{ c U¨/¸#¸Ð#?Ó@Ð@øðò Ùð ús ƒ$¤,«,N)rX)rÖrãr2r#r<s ``  r|Ú execute_w_exczTestMemoryLeak.execute_w_exc sù€õ
    Að    ˆ ‰ TÑ$˜VÓ$r~)NNNN)rØrÙrÚrrGrWrNr r¶r7r¯r°r*Úboolr¦Úgetenvr&Ú classmethodr$r'r.r2r8rArJrTr<rXr[rÀr~r|rArA…s¥„ñð> €EØ€LØ€IÙ‰b A€GØ€Gؐ—‘Ó €IÙ˜i˜bŸi™i¨Ó7Ó8Ðàñ!óð!ðñ2óð2ò,ò 0ò >ò$ò, ò0ò8ðKOóPó, %r~rAcóT—td„«}    |«|dk(S#t$rYywxYw)Ncóæ—i}td«}|j«ddD]H}|jd«Dcgc]}|jdd«‘Œ}}|dt    |d«}}|||<ŒJ|Scc}w)Nztasklist.exe /NH /FO csvrºú,rÞr r)r€Ú
splitlinesruÚreplacert)rÉÚoutÚlinerÚbitsrrGs       r|Ú    get_procsz,is_win_secure_system_proc.<locals>.get_procs2s€€àˆÜÐ+Ó,ˆØ—N‘NÓ$ Q RÐ(ò    ˆDØ04·
±
¸3³Ö@¨1A—I‘I˜c 2Õ&Ð@ˆDÐ@ؘQ™¤ T¨!¡W£#ˆD؈CŠHð    ðˆ
ùòAs·A.z Secure SystemF)rÚKeyError)rGrgs  r|rErE0s=€ä ñó ððÙ‹{˜3Ñ ?Ñ2Ð2øÜ òÙðús Ž ›    '¦'có—tj«}t|d«r|j«St|d«r#t    j
|j ««Sy)Nr’rŒr)r¯r°Úhasattrr’ÚrandomÚchoicerŒ)rs r|Ú_get_eligible_cpurmBsG€Ü‰Ó€A܈q)ÔØy‰y‹{ÐÜ    NÔ    #܏}‰}˜QŸ^™^Ó-Ó.Ð.Ø r~cóì—eZdZdZddifddifgZddifddddifd    difd
difd difd difd difddifddifg    Zddifddifddifddifddifddifddifddifddddifddifddifddifddifd difd!difd"difd#difgZer$ed$difgz Zed%difgz Zed&difgz Zed'difgz Zer    ed(difgz Ze    r    ed)difgz Ze
red*e jfifgz Ze r    ed+difgz Zer    ed,difgz Zer    ed-difgz Zer    ed.difgz Zer ed/dd0d1ifgz ZgZer
eddifgz Znede j&fifgz Ze
red*e jd2fifgz Ze    r,ered)e j*d3fifgz Zned)e j,fifgz Ze red+e«gfifgz Zd4ej2fifd5difd6difd7difd8difgZer(ed4ej6fifgz Zed4ej8fifgz ZeezezezZd9„Zd?d:„Zd;„Z e!d<„«Z"e!d=„«Z#y>)@rCaA container that lists all Process class method names + some
    reasonable parameters to be called with. Utility methods (parent(),
    children(), ...) are excluded.
 
    >>> ns = process_namespace(psutil.Process())
    >>> for fun, name in ns.iter(ns.getters):
    ...    fun()
    Ú cpu_percentrÀÚmemory_percentrrŸržTÚ connectionsrÚoneshotriÚparentsrGr')rrÚ    cpu_timesÚ create_timer:r¡r+Ú memory_inforÚnet_connectionsÚkindr ÚniceÚnum_ctx_switchesÚ num_threadsÚ
open_filesrÿr\r˜ÚusernameÚuidsÚgidsÚterminalr0r“rr”rŒr’rr1rÚgroupedF)rZirrˆrrr7rcó—||_yrÓ)Ú_proc)rÖr„s  r|rzprocess_namespace.__init__¨s    €Øˆ
r~c#óðK—t|«}tj|«|D]M\}}}|r|j«t    |j
|«}t j|g|¢­i|¤Ž}||f–—ŒOy­w©z_Given a list of tuples yields a set of (fun, fun_name) tuples
        in random order.
        N)ÚlistrkÚshuffler    r¨rƒr5rÑ)rÖÚlsr    Úfun_namerËrIr2s       r|r zprocess_namespace.iter«svèø€ô"‹XˆÜ‰rÔØ$&ò    "Ñ  ˆHd˜DÙØ× Ñ Ô"ܘ$Ÿ*™* hÓ/ˆCÜ×#Ñ# CÐ7¨$Ò7°$Ñ7ˆCؘ/Ó !ñ     "ùs‚A4A6cóf—|jj|jjd¬«y)z&Clear the cache of a Process instance.T)Ú _ignore_nspN)rƒÚ_initrGrÕs r|r    zprocess_namespace.clear_cache¸s!€à 
‰
×јŸ™Ÿ™°TÐÕ:r~cóŠ—|D]>\}}}d|z}t||«rŒ|jj›d|›d}t|«‚y)z}Given a TestCase instance and a list of tuples checks that
        the class defines the required test method names.
        Útest_z class should define a z methodN)rjrrØÚAttributeError)r#Ú
test_classrˆr‰rkÚ    meth_namerçs       r|Útest_class_coveragez%process_namespace.test_class_coverage¼sb€ð
!ò    *‰NˆHa˜Ø (Ñ*ˆIܘ: yÕ1à!×+Ñ+×4Ñ4Ð7ð8Ø!} Gð-ðô% SÓ)Ð)ñ    *r~có —|jDchc]}|d’Œ    }}|jDchc]}|d’Œ    }}ttj«Dchc] }|ddk7sŒ |’Œ}}||z|z }|rt d|›«‚ycc}wcc}wcc}w)Nrrkzuncovered Process class names: )r Úignoredr>r¯r°r±)r#rÚthisr”ÚklassÚleftouts      r|Útestzprocess_namespace.testÊs’€à!Ÿg™gÖ&˜!“Ð&ˆÐ&Ø!$§¡Ö-˜A1Q“4Ð-ˆÐ-ܤ§¡Ó/Ö?q°1°Q±4¸3³;’Ð?ˆÐ?ؘ'‘> UÑ*ˆÙ ÜÐ>¸w¸kÐJÓKÐ Kð ùò    'ùÚ-ùÚ?s B« BÁ B Á"B N)T)$rØrÙrÚrÚutilsr”Úgettersr r'r(r+r¯Ú RLIMIT_NOFILEr$r*r&r r)ÚsettersÚNORMAL_PRIORITY_CLASSrÚIOPRIO_CLASS_NONEÚ IOPRIO_NORMALrmr†ÚSIGTERMÚkillersÚ CTRL_C_EVENTÚCTRL_BREAK_EVENTr rr r    r^r’r˜rÀr~r|rCrCKsä„ñð˜R Ð $Ð'7¸¸RÐ&@Ð A€Eð
B˜ÐØ    R˜+ tÐ,Ð-Ø    ˜˜BÐØ    r˜2ÐØ    B˜ÐØ    2rÐØ    B˜ÐØ    BˆØ    rÐð
€Gð
B˜ÐØ    b˜"ÐØ    ˜˜BÐØ    BˆØ    BˆØ    ˜R Ð$Ø    ˜˜BÐØ    RÐØ    ˜B ¨ Ð0Ø    RÐØ    ˜R Ð$Ø    ˜˜BÐØ    r˜2ÐØ    RÐØ    2rÐØ    B˜ÐØ    R˜Ðð#€Gñ& ؐV˜R Ð$Ð%Ñ%ˆØV˜R Ð$Ð%Ñ%ˆØZ  RÐ(Ð)Ñ)ˆØY  BÐ'Ð(Ñ(ˆÙؐ] B¨Ð+Ð,Ñ,ˆÙؐX˜r 2Ð&Ð'Ñ'ˆÙؐX × 4Ñ 4Ð6¸Ð;Ð<Ñ<ˆÙؐ^ R¨Ð,Ð-Ñ-ˆÙؐY  BÐ'Ð(Ñ(ˆÙؐY  BÐ'Ð(Ñ(ˆÙؐ] B¨Ð+Ð,Ñ,ˆÙؐ] B¨°EÐ(:Ð;Ð<Ñ<ˆà€G٠ؐV˜T 2Ð&Ð'Ñ'‰àV˜f×:Ñ:Ð<¸bÐAÐBÑBˆÙؐX × 4Ñ 4°lÐCÀRÐHÐIÑIˆÙÙ Ø ˜ F×$<Ñ$<¸aÐ#@À"ÐEÐFÑ F‰Gà ˜ F×$8Ñ$8Ð#:¸BÐ?Ð@Ñ @ˆGÙØ^Ñ'8Ó':Ð&;Ð%=¸rÐBÐCÑCˆð
˜Ÿ™Ð)¨2Ð.Ø    B˜ÐØ    2rÐØ    b˜"ÐØ    RÐð €Gñؐ] V×%8Ñ%8Ð$:¸BÐ?Ð@Ñ@ˆØ] V×%<Ñ%<Ð$>ÀÐCÐDÑDˆà
'‰/˜GÑ
# gÑ
-€Còó "ò;ðñ *óð *ðñLóñLr~rCcó—eZdZdZddifddddifddddifddifd    dd
difd    dd
difd dd difd dddifdej
«fifddddifddifddifddddifdej «fifddifddifddifddifgZere    re
rn eddd
difgz Ze r    eddifgz Ze r    eddifgz Ze r    eddifgz Zer    eddifgz Zered difgz Zed!d"ifgz Zd#difd$ej"«gfifd%difd&difgZeZed'„«Zej.Zy())rDzÝA container that lists all the module-level, system-related APIs.
    Utilities such as cpu_percent() are excluded. Usage:
 
    >>> ns = system_namespace
    >>> for fun, name in ns.iter(ns.getters):
    ...    fun()
    Ú    boot_timerÀÚ    cpu_countÚlogicalFTÚ    cpu_statsrtÚpercpuÚdisk_io_countersÚperdiskÚdisk_partitionsr Ú
disk_usagerwrxÚ net_if_addrsÚ net_if_statsr‘Úpernicr˜rÂÚ swap_memoryÚusersÚvirtual_memoryr™rŽr—r–r•Úwin_service_iterÚwin_service_get)Úalgrr¡roÚcpu_times_percentc#óÀK—t|«}tj|«|D]5\}}}tt|«}t j |g|¢­i|¤Ž}||f–—Œ7y­wr…)r†rkr‡r¨r¯r5rÑ)rˆr‰rËrIr2s     r|r zsystem_namespace.iter scèø€ô
"‹XˆÜ‰rÔØ$&ò    "Ñ  ˆHd˜DÜœ& (Ó+ˆCÜ×#Ñ# CÐ7¨$Ò7°$Ñ7ˆCؘ/Ó !ñ    "ùs‚AAN)rØrÙrÚrr¦rCÚgetpidršr%rr4ÚHAS_GETLOADAVGr/r.r,r r¯r°r”r r r rCr’rÀr~r|rDrDÔs„ñð
b˜"ÐØ    b˜9 eÐ,Ð-Ø    b˜9 dÐ+Ð,Ø    b˜"ÐØ    b˜8 UÐ+Ð,Ø    b˜8 TÐ*Ð+Ø    ˜R )¨TÐ!2Ð3Ø    ˜B ¨  Ð.Ø    ˜    ˜Ÿ    ™    › ~ rÐ*Ø    ˜B ¨ Ð0Ø    ˜˜RРؠ   ˜˜RРؠ   ˜B ¨4Р0Ð1Ø    ˜    ˜Ÿ    ™    › ~ rÐ*Ø    RÐØ    ˜˜BÐØ    "bÐØ    ˜2˜rÐ"ð%€Gñ(Ù ‘WØ à ˜ R¨(°DÐ)9Ð:Ð;Ñ ;ˆGÙØ\ 2 rÐ*Ð+Ñ+ˆÙØÐ+¨R°Ð4Ð5Ñ5ˆÙؐ^ R¨Ð,Ð-Ñ-ˆÙØÐ&¨¨BÐ/Ð0Ñ0ˆÙØÐ'¨¨RÐ0Ð1Ñ1ˆØÐ&¨°"Ð5Ð6Ñ6ˆð
˜˜RРؠ   ˜˜Ÿ™Ó)Ð*Ð,¨bÐ1Ø    ˜˜BÐØ    ˜b "Ð%ð    €Gð €Càñ    "óð    "ð,×?Ñ?Ñr~rDcób—d„}tttjjfd||¬«S)zZDecorator which runs a test function and retries N times before
    actually failing.
    có@—t|›dtj¬«y)Nz
, retrying)r6)rMrxr)rãs r|r¸z retry_on_failure.<locals>.logfuns€Ü zÐ"¬¯©Ö4r~N)rµrur¶r¸)r³rßrrør1)r¶r¸s  r|r@r@s1€ò
5ô Ü!¤6§;¡;×#8Ñ#8Ð9ØØØô     ðr~có‡—ˆfd„}|S)z,Decorator to Ignore AccessDenied exceptions.cóF•‡—tj‰«ˆˆfd„«}|S)Ncó|•—    ‰|i|¤ŽS#tj$r‰‰s‚tjd«cYSwxYw)Nzraises AccessDenied)r¯rrrö)rËr#r2Úonly_ifs  €€r|r3z9skip_on_access_denied.<locals>.decorator.<locals>.wrapper.sIø€ð :Ù˜DÐ+ FÑ+Ð+øÜ×&Ñ&ò :ØÐ&Ù"ØÜ—{‘{Ð#8Ó9Ò9ð     :ús ƒ ‹-;º;r4©r2r3rÀs` €r|rÀz(skip_on_access_denied.<locals>.decorator-s%ù€Ü    ‰˜Ó    ô    :ó
ð    :ðˆr~rÀ©rÀrÀs` r|r>r>*sø€ô ð Ðr~có‡—ˆfd„}|S)z3Decorator to Ignore NotImplementedError exceptions.cóF•‡—tj‰«ˆˆfd„«}|S)Nc󆕗    ‰|i|¤ŽS#t$r,‰‰s‚‰j›d}tj|«cYSwxYw)Nz2 was skipped because it raised NotImplementedError)r¤rØrrö)rËr#rçr2rÀs   €€r|r3z;skip_on_not_implemented.<locals>.decorator.<locals>.wrapperAs]ø€ð
(Ù˜DÐ+ FÑ+Ð+øÜ&ò (ØÐ&Ù"Øà—|‘|Ð&ð'+ð+ðô—{‘{ 3Ó'Ò'ð (úsƒ ‹2A¿Ar4rÁs` €r|rÀz*skip_on_not_implemented.<locals>.decorator@s%ù€Ü    ‰˜Ó    ô     (ó
ð     (ðˆr~rÀrÂs` r|r?r?=sø€ôð" Ðr~có¢—tj«5}|j|df«|j«dcddd«S#1swYyxYw)z6Return an unused TCP port. Subject to race conditions.rrºN)ÚsocketÚbindÚ getsockname)Úhostrhs  r|rSrSZsC€ä    ‰‹ð%˜DØ     ‰    4˜)ÔØ×ÑÓ! !Ñ$÷%÷%ò%ús •&AÁAcó€—|€|tthvrd}tj||«}    tjdvr/|j tj tjd«|j|«|tjk(r|jd«|S#t$r|j«‚wxYw)zBinds a generic socket.©r r>ÚntÚcygwinrºr) rrrÇr¦rÚ
setsockoptÚ
SOL_SOCKETÚ SO_REUSEADDRrÈrÚlistenr1re)ÚfamilyÚtypeÚaddrrhs    r|rTrTasš€à €|˜¤7¬HÐ"5Ñ5ØˆÜ =‰=˜ Ó &€Dð    Ü 7‰7Ð*Ñ *Ø O‰OœF×-Ñ-¬v×/BÑ/BÀAÔ FØ     ‰    $ŒØ ”6×%Ñ%Ò %Ø K‰K˜ŒN؈ øÜ òØ 
‰
Œ Ø ðús ªA7B"Â"B=cóf—tjsJ‚tjj    |«rJ|«‚t j
t
j |«}    |j|«|t
jk(r|jd«|S#t$r|j«‚wxYw)zBind a UNIX socket.r) r¯r r¦rªr²rÇr¶rÈrrÒr1re)rrÔrhs   r|rUrUrsŠ€ä <Š<Ј<܏w‰w~‰~˜dÔ#Ð) TÓ)Ð #Ü =‰=œŸ™¨Ó .€DðØ     ‰    $ŒØ ”6×%Ñ%Ò %Ø K‰K˜ŒNð €Køô òØ 
‰
Œ Ø ðús Á5BÂB0cóÖ—tj|t«5}|j|«|jd«|j    «}tj|t«}    |j |«|j    «}    |j «\}}||k(r ||fcddd«S|j«Œ6#t$r|j«‚wxYw#1swYyxYw)z^Build a pair of TCP sockets connected to each other.
    Return a (server, client) tuple.
    rN)    rÇrrÈrÒrÉÚconnectrarer)rÓrÕÚllr¨ÚcaddrÚas      r|rVrVsȀô
‰vœ{Ó    +ð¨rØ
‰Œ Ø
    ‰    !Œ ؏~‰~ÓˆÜ M‰M˜&¤+Ó .ˆð     Ø I‰IdŒOØ—M‘M“OˆEØØŸ)™)›+‘4à˜5’=ؘq˜6÷ñð—‘”    ð øô ò    Ø G‰GŒIØ ð    ú÷ðús$›A CÁ)=CÂ0CÃCÃCÃC(cóœ—tjsJ‚dx}}    t|tj¬«}|j d«tjtj tj«}|j d«|j|«||fS#t$r&||j«||j«‚wxYw)zƒBuild a pair of UNIX sockets connected to each other through
    the same UNIX file name.
    Return a (server, client) tuple.
    N©rÔr)
r¯r rUrÇrÚ setblockingr¶rØr1re)rÚserverÚclients   r|rWrW˜s²€ô
<Š<Ј<ØÐ€FˆVð Ü! $¬V×-?Ñ-?Ô@ˆØ×ј1ÔÜ—‘œvŸ~™~¬v×/AÑ/AÓBˆØ×ј1ÔØ‰tÔð FÐ Ðøô òØ Ð Ø L‰LŒNØ Ð Ø L‰LŒNØ ð ús ˜BBÂ/C c#ó<K—g}dx}}    |jttjtj«ttjtj
«f«t «r_|jttjtj«ttjtj
«f«tr^trXt«}t«}t|«\}}t|tj
¬«}|||fD]}|j|«Œ|–—|D]}|j«Œ||fD]}|€Œt|«Œy#|D]}|j«Œ||fD]}|€Œt|«ŒwxYw­w)z1Open as many socket families / types as possible.NrÝ)ÚextendrTrÇrrÚ
SOCK_DGRAMrrr r0rKrWrUrLrerH)ÚsocksÚfname1Úfname2Ús1Ús2Ús3rTrÆs        r|rXrX¯sgèø€ð €EØÐ€FˆVð#Ø  ‰ Ü œŸ™¬×(:Ñ(:Ó ;Ü œŸ™¬×(9Ñ(9Ó :ð
ô     ô Œ?Ø L‰LÜœFŸO™O¬V×-?Ñ-?Ó@ÜœFŸO™O¬V×->Ñ->Ó?ðô õ Õ-Ü“\ˆFÜ“\ˆFÜ$ VÓ,‰FˆBÜ! &¬v×/@Ñ/@ÔAˆBؘ"˜b\ò  Ø— ‘ ˜Q•ð  àŠ àò    ˆAØ G‰GIð    à˜fÐ%ò    #ˆEØÑ Ü˜EÕ"ñ    #øðò    ˆAØ G‰GIð    à˜fÐ%ò    #ˆEØÑ Ü˜EÕ"ñ    #üs)‚FŠD0E)Ä: FÅFÅ)!FÆ FÆFcóX—t|tj«sJ|«‚|tjk(rs|j d«Dcgc] }t |«‘Œ}}t|«dk(sJ|«‚|D]}d|cxkr dkrŒJ|«‚J|«‚tj|«y|tjk(r-t|t«sJ|«‚tj|«y|tjk(rtj d|«€J|«‚yt#d|›«‚cc}w)z[Check a net address validity. Supported families are IPv4,
    IPv6 and MAC addresses.
    rgrƒréÿz([a-fA-F0-9]{2}[:|\-]?){6}Nzunknown family )rxÚenumÚIntEnumrÇrrurtr§Ú    ipaddressÚ IPv4AddressrrâÚ IPv6Addressr¯ÚAF_LINKràrär±)rÕrÓrÚoctsÚnums     r|rQrQÎs€ô fœdŸl™lÔ +Ð3¨VÓ3Ð +Ø ”—‘ÒØ $§
¡
¨3£Ö0˜1”A•Ð0ˆÐ0ܐ4‹y˜AŠ~Ð#˜tÓ#ˆ~Øò    )ˆCؘ”?˜s“?Ð ( DÓ (‘?Ð ( DÓ (?ð    )ä×јdÕ#Ø    ”6—?‘?Ò    "ܘ$¤Ô$Ð* dÓ*Ð$Ü×јdÕ#Ø    ”6—>‘>Ò    !܏x‰xÐ5°tÓ<ÐHÐNÈ$ÓNÑHä˜?¨6¨*Ð5Ó6Ð6ùò1sÁD'cór—d„}d„}d„}d„}d„}||«||«||«||«||«y)z*Check validity of a connection namedtuple.cóJ—t|«dk(}t|«dvsJt|««‚|d|jk(sJ|j«‚|d|jk(sJ|j«‚|d|jk(sJ|j«‚|d|jk(sJ|j«‚|d|j
k(sJ|j
«‚|d|j k(sJ|j «‚|r$|d    |jk(sJ|j«‚yy)
Nr¤>rr¤rrºrhr‚rƒrr)r§r:rÓrÔÚladdrÚraddrr\rG)rjÚhas_pids  r|Ú check_ntuplez-check_connection_ntuple.<locals>.check_ntupleås €Üd“)˜q‘.ˆÜ4‹y˜FÑ"Ð-¤C¨£IÓ-Ð"ؐA‰w˜$Ÿ'™'Ò!Ð* 4§7¡7Ó*Ð!ؐA‰w˜$Ÿ+™+Ò%Ð2 t§{¡{Ó2Ð%ؐA‰w˜$Ÿ)™)Ò#Ð. T§Y¡YÓ.Ð#ؐA‰w˜$Ÿ*™*Ò$Ð0 d§j¡jÓ0Ð$ؐA‰w˜$Ÿ*™*Ò$Ð0 d§j¡jÓ0Ð$ؐA‰w˜$Ÿ+™+Ò%Ð2 t§{¡{Ó2Ð%٠ؘ‘7˜dŸh™hÒ&Ð 0¨¯©Ó 0Ñ&ð r~cóŠ—|jttthvsJ|j«‚t    |jt
j «sJ|«‚|jtk(rUtj|j|j«5}    |j|jddf«ddd«y|jtk(r/|jtj k(sJ|j«‚yy#t$r(}|jtjk7r‚Yd}~Œxd}~wwxYw#1swYyxYwrû)rÓrrr¶rxrìrírÇrÔrÈrörÚerrnoÚ EADDRNOTAVAILr\r¯Ú    CONN_NONE)rjrTræs   r|Ú check_familyz-check_connection_ntuple.<locals>.check_familyñsÿ€Ø{‰{œw¬´'Ð:Ñ:ÐG¸D¿K¹KÓGÐ:ܘ$Ÿ+™+¤t§|¡|Ô4Ð:°dÓ:Ð4Ø ;‰;œ'Ò !ô
—‘˜tŸ{™{¨D¯I©IÓ6ð ¸!ðØ—F‘F˜DŸJ™J q™M¨1Ð-Ô.÷ ð ð [‰[œGÒ #Ø—;‘;¤&×"2Ñ"2Ò2Ð ?°D·K±KÓ ?Ñ2ð$øôòØ—y‘y¤E×$7Ñ$7Ò7Øô8ûðú÷ ð ús0ÂD9 DÄ    D6ÄD1Ä,D9Ä1D6Ä6D9Ä9Ecó —ttdt««}|jtjtj
|hvsJ|j«‚t |jtj«sJ|«‚|jtj
k(r/|jtjk(sJ|j«‚yy)NÚSOCK_SEQPACKET) r¨rÇÚobjectrÔrrãrxrìrír\r¯rý)rjrs  r|Ú
check_typez+check_connection_ntuple.<locals>.check_types¨€ä ¤Ð)9¼6»8ÓDˆØy‰yÜ × Ñ Ü × Ñ Ø ð
ñ
ð    ð 9‰9ó        ð
ô
˜$Ÿ)™)¤T§\¡\Ô2Ð8°DÓ8Ð2Ø 9‰9œ×)Ñ)Ò )Ø—;‘;¤&×"2Ñ"2Ò2Ð ?°D·K±KÓ ?Ñ2ð *r~có—|j|jfD]î}|jtthvr t |t «sJt|««‚|sŒ>t |jt«sJt|j««‚d|jcxkrdksnJ|j«‚t|j|j«Œ»|jtk(sŒÏt |t«rŒàJt|««‚y)Nriÿÿ)rör÷rÓrrrxrrrÔÚportrtrQÚipr¶râ)rjrÕs  r|Ú check_addrsz,check_connection_ntuple.<locals>.check_addrssƀà—Z‘Z §¡Ð,ò        9ˆD؏{‰{œw¬Ð1Ñ1Ü! $¬Ô.Ð:´°T³
Ó:Ð.ÙØÜ! $§)¡)¬SÔ1ÐB´4¸¿    ¹    ³?ÓBÐ1ؘDŸI™IÔ.¨Ô.Ð9°·    ±    Ó9Ð.Ü! $§'¡'¨4¯;©;Õ7Ø—‘¤Ó'Ü! $¬Õ,Ð8¬d°4«jÓ8Ð,ñ        9r~có*—t|jt«sJ|j«‚tt«Dcgc]$}|j d«sŒt t|«‘Œ&}}|j|vsJ|j«‚|jtthvrB|jtk(r/|jtjk7sJ|j«‚y|jtjk(sJ|j«‚ycc}w)NÚCONN_) rxr\râr>r¯rër¨rÓrrrÔrrý)rjrÚvalidss   r|Ú check_statusz-check_connection_ntuple.<locals>.check_statussπܘ$Ÿ+™+¤sÔ+Ð8¨T¯[©[Ó8Ð+ä(+¬F« ö
Ø#$°q·|±|ÀGÕ7LŒG”F˜AÕ ð
ˆð
ð{‰{˜fÑ$Ð1 d§k¡kÓ1Ð$Ø ;‰;œ7¤HÐ-Ñ -°$·)±)¼{Ò2JØ—;‘;¤&×"2Ñ"2Ò2Ð ?°D·K±KÓ ?Ñ2à—;‘;¤&×"2Ñ"2Ò2Ð ?°D·K±KÓ ?Ñ2ùò
s ½DÁDNrÀ)rjrùrþrrr
s      r|Úcheck_connection_ntupler âsH€ò
1ò@ò"
@ò 9ò    @ñÔِÔÙˆtÔِÔِÕr~cóƗg}|D]Y}tr@|jtjk(r#trd|j
vrt d|›«ŒI|j|«Œ[|S)ztOur process may start with some open UNIX sockets which are not
    initialized by us, invalidating unit tests.
    z/syslogz    skipping )r rÓrÇr¶rr÷rrL)ÚconsÚnewrjs   r|rRrR-s]€ð €CØòˆÝ T—[‘[¤F§N¡NÒ2ݘ d§j¡jÑ0ܘ     $ Ð(Ô)ØØ 
‰
4Õð ð €Jr~có,—tj|«SrÓ)Ú    importlibÚreload)Úmodules r|rYrY@s€Ü × Ñ ˜FÓ #Ð#r~có8—tjjtjj|««d}tj
j ||«}tj
j|«}|jj|«|Srû)
r¦rªÚsplitextrQrÚutilÚspec_from_file_locationÚmodule_from_specÚloaderÚ exec_module)rªrÚspecÚmods    r|rZrZDsk€Ü 7‰7× Ñ œBŸG™G×,Ñ,¨TÓ2Ó 3°AÑ 6€DÜ >‰>× 1Ñ 1°$¸Ó =€DÜ
.‰.×
)¨$Ó
/€C؇KK×јCÔ Ø €Jr~có<—tj|td¬«y)zRaise a warning msg.rhr»Nr½)rçs r|r[r[Qs€ä ‡MM#”{¨qÖ1r~cóėt|«}|j}t|«dk7s |dturyt    |dd«}t |t«syt d„|D««S)z-Check if object is an instance of namedtuple.rºrFÚ_fieldsNc3ó<K—|]}t|t«–—Œy­wrÓ)rxrâ)Ú.0Úns  r|ú    <genexpr>z is_namedtuple.<locals>.<genexpr>_sèø€Ò- aŒz˜!œS×!Ñ-ùs‚)rÔÚ    __bases__r§rrr¨rxr )rÚtÚbrrs    r|r]r]VsY€ä ˆQ‹€AØ     ‰ €AÜ
ˆ1ƒv‚{a˜‘d¤%Ñ'ØÜ9˜dÓ#€AÜ aœÔ ØÜ Ñ-¨1Ô-Ó -Ð-r~c#óK—trdnd}d}t||z¬«}tj«j    «Dcgc]Y}t
j j|j «d|k(r(||j j«vr |j ‘Œ[}}tj|«}tj||«    tj|«|–—t|«ycc}w#t|«wxYw­w)zÂCtx manager which picks up a random shared CO lib used
        by this process, copies it in another location and loads it
        in memory via ctypes. Return the new absolutized path.
        ÚpypyÚpythonz.sorârºN)rrKr¯r°rr¦rªrÚlowerrkrlr¬rÝÚctypesÚCDLLrH)rãr¡ÚextÚdstrÚlibsrgs       r|r\r\dsÔèø€õ ‰f (ˆØˆÜ ¨¡ Ô-ˆô—^‘^Ó%×1Ñ1Ó3ö
à܏w‰w×Ñ §¡Ó'¨Ñ*¨cÒ1°c¸Q¿V¹V¿\¹\»^Ñ6Kð F‹Fð
ˆð
ô
m‰m˜DÓ!ˆÜ‰˜˜SÔ!ð    Ü K‰K˜Ô ØŠIä ˜Õ ùò
øô ˜Õ üs+‚ADÁAC3 -DÃC8Ã'DÃ8 DÄDc#óØK—ddlm}ddlm}d}t||z¬«}t    j
«j «Dcgc]Œ}|jj«j|«radtjj|j«j«vr(d|jj«vr |j‘ŒŽ}}trt|srt    j
«j «Dcgc]G}dtjj|j«j«vr |j‘ŒI}}tj|«}tj ||«d    }    tj"|«}|–—|Ttj$j&j(}    |j*g|    _|    |j.«}
|
dk(r|«‚t1|«y    cc}wcc}w#|Ttj$j&j(}    |j*g|    _|    |j.«}
|
dk(r|«‚t1|«wxYw­w)
zÖCtx manager which picks up a random shared DLL lib used
        by this process, copies it in another location and loads it
        in memory via ctypes.
        Return the new absolutized, normcased path.
        r)ÚWinError)Úwintypesz.dllrâr(Úwow64r'N)r*r0r1rKr¯r°rrªr)r}r¦rQrrkrlr¬rÝÚWinDLLÚwindllÚkernel32Ú FreeLibraryÚHMODULEÚargtypesÚ_handlerH) rãr0r1r,r-rr.rgÚcfiler6rÉs            r|r\r\|sìèø€õ    $Ý#àˆÜ ¨¡ Ô-ˆô—^‘^Ó%×1Ñ1Ó3ö
àØv‰v|‰|‹~×&Ñ& sÔ+ØœBŸG™G×,Ñ,¨Q¯V©VÓ4×:Ñ:Ó<Ñ<ؘqŸv™vŸ|™|›~Ñ-ð     F‹Fð
ˆð
õ ™ô Ÿ™Ó)×5Ñ5Ó7öàØœRŸW™W×-Ñ-¨a¯f©fÓ5×;Ñ;Ó=Ñ=ð—“ðˆDðô
m‰m˜DÓ!ˆÜ‰˜˜SÔ!؈𠠠 Ü—M‘M #Ó&ˆEØŠIðРÜ$Ÿm™m×4Ñ4×@Ñ@ Ø(0×(8Ñ(8Ð'9 Ô$Ù! %§-¡-Ó0Ø˜!’8Ù"›*Ð$Ü ˜Õ ùò?
ùòøð"РÜ$Ÿm™m×4Ñ4×@Ñ@ Ø(0×(8Ñ(8Ð'9 Ô$Ù! %§-¡-Ó0Ø˜!’8Ù"›*Ð$Ü ˜Õ üs:‚AI*ÁBG:Ã.I*ÄA G?Å/I*Å?HÆA,I*ÈA#I'É'I*có—td¬«y)NTr)r8rÀr~r|Úcleanup_test_procsr<°s
€ä˜DÖ!r~có,—tj|«SrÓ)rxÚexit)rŠrks  r|r_r_ºs€´·±¸#³€r~rÓ)F)TFr)z    127.0.0.1)rÌr
)¿rrÂrér*rìrûr5rDrrîr¦rprkràrbryr¬r†rÇrÎrvrxrçrOrr*Ú    tracebackr=r¾rrrrÚ ImportErrorr¯rrrr    r
r r r Úpsutil._commonrrrrrÚpsutil._psposixrÚ__all__Úbuiltin_module_namesrrr_r r3r5Úmaxsizer#Úmachiner)r4ÚRISCV64r}r1r2rrr"rrr¹rrÚdecoderÚgetfilesystemencodingÚASCII_FSrªr«r-rÚÚ__file__rÚgetrrÈrjr°r$r&rºr(r)r0ÚHAS_NET_IO_COUNTERSr*r'r+r,r.r/Ú HAS_THREADSÚgetuidÚ SKIP_SYSCONSr\r•r-r1rÃrÑrMÚ
format_excr™r%r´rrroÚdevnullrrer>rër¨r!rr¶r)rErRrFrßrøÚmodulesrÁr&r<r7r9r;r:r6r€r r7r8rMrLr³rƒrOrÌrPrNrHrØrêrGrIrJrKrírBr rþrArErmrCrDr@r>r?rSrTrUrVrWrXrQr rRrYrZr[r]r\r<)rs0r|ú<module>rTsðñ
ã ÛÛ Û Û ÛÛ    ÛÛÛ    ÛÛ Û    Û Û Û Û Û Û ÛÛ
ÛÛÛÛ ÛÛÛÝÝÝðÛóÝÝÝÝÝÝÝÝÝ&Ý Ý"Ý&Ý(áÝ(ò# €ðZS×-Ñ-Ð-€à! R§Z¡ZÐ/ÒO°>ÀRÇZÁZÐ3O€Ø €
Ø ˜RŸZ™ZÐ '€Ø'¨2¯:©:Ð5€à ;‰;˜Ñ €à
ˆ(×
$Ð(<Ð
<ۯ
ˆ(×
     Ñ
)€ð    ñó    ðñ(    Ù “? XÑ-€LÙ “? gÑ-Là€LØ€Lð €
à#ÐØ'Ðà€á ؐ!O€JؐaÑ€NؘÑÐØ˜AÑÐð
‡77ˆfÒà˜y˜rŸy™y›{˜m¨1Ð-Mà˜y˜rŸy™y›{˜m¨1Ð-€MØ€à%×,Ñ,¨VÐ5FÓGÐØ $ˆ3× $Ñ $Ó &× ,Ñ ,Ó .Ð2GÐ G€ð 7‰7× Ñ Ø‡GG‡LL—‘—‘ Ó*¨D°$Ó7ó €ðj‰jn‰nؘ"Ÿ'™'Ÿ,™, x°Ó;ó€ ð
‡ww×јŸ™Ÿ™¨Ó1Ó2€ñ˜6Ÿ>™>¨>Ó:Ðِf—n‘n iÓ0€ Ù˜ Ó.€Ù V—^‘^ XÓ .€
Ù˜&Ÿ.™.¨-Ó8€Ø Ò.¨ YÐÙ˜fÐ&7Ó8ÐÙ˜6Ÿ>™>¨9Ó5ÐÙ˜vŸ~™~¨}Ó=ÐÙ V—^‘^ XÓ .€
Ù˜fÐ&7Ó8ÐÙ˜6 >Ó2ÐÙ" 6Ð+AÓBÐِf—n‘n iÓ0€ Ø’ ˜Ò2 ) "§)¡)£+°Ñ"2€ ðØ%ÒH©$Ð/E¨v×/EÑ/EÓ/GÓ*H€KðÙ˜6 :Ó.ÒJ±4¸¸¿¹Ó8IÓ3J€Lò)ñX)›]Ñ€
ˆNÙ
ˆrz‰z˜4Ó
 €Ø€‡— ‘ Ôñ!$ F£ öبq¯|©|¸IÕ/FGˆFAÕòÐñ &˜)¡V£XÓ
.€á›ÐÙ“€ ÷U#ñU#ðr,€ ×ÒÔð
€>Ø €Fà'€C‡K‚KÑØ×ÒÔô(×!Ò!ô(ò`    ðò&óð&ðRñ#óð#òL&ðRñóðð&ñóðð0 &Ÿ~š~¸NóQ/óh-òJ!ò0÷6ñ6ñrØ×"Ò"Ø Ø Ø ô    ñ ó ð ñØ  .Ð1Ø Ø Ø ô    ò ó ð ñؘvŸ{š{×4Ñ4Ð5Ø Ø Ø ô    ñ ó ð ò òD ð ×Òñóðòóó4 ô&VBX×&Ò&ôVBðN‡‚×ҐDÐ!5ÐÓ6ôg%^óg%ó7ðg%òTò$ ÷FLñFL÷RC@ñC@ðL(ó ó ó&ó:%ð [°tóð"!'× 2Ñ 2ó óò.ð. ×Òñ#óð#ò<7ò(HòV ò&$òò2ò
    .ñ    à×Òòóñð.×Òò*óð*ðf‡ñ"óð"ñ    Ø€F‡MM&—.’.Ñ">Õ?ð    øða<òØ ƒFðûðRòØ€F‡OOÐ%I×%Ñ% eÐ-A¨Y×-AÑ-AÓ-CÓDÔE؃Kðûð
òØ€F‡OOÐ%I×%Ñ% eÐ-A¨Y×-AÑ-AÓ-CÓDÔE؃LðüòpsBÂ[Ï[Ï$"\Ñ ]Ñ# ]Û[Û [Û9\Ü \Ü9]Ý ]