grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026a MÝ_Š8ã @s´dZddlZddlZddlZddlZddlZddlZgd¢ZejddkZ e ƒZ e rze Z eZeZeZeZdd„Zdd„Zn e Z eZeZeZd d„Zd d„Ze r¤eZneZe e d fd d „Ze rÖeZeZeZeZeZeZnÂddlZefdd„Zee ƒdd„ƒZee ƒdd„ƒZee ƒdd„ƒZee ƒdd„ƒZee ƒdd„ƒZee ƒdd„ƒZe !¡dk�r˜ze"ej#dƒ‚Wn.e�y|Yne"�y–e$dƒ‚Yn0zddlm%Z%Wnše&�yBzdd l'm(Z(Wn e&�yèdd l)m(Z(Yn0e *d!gd"¢¡Z+Gd#d$„d$e,ƒZ-e ƒfe.e ee/e0dƒfƒe1e2e0e3fd%d&„Z4d2d)d*„Z%Yn0zdd+l5m6Z6Wn*e&�y~ej7ej8Bdfd,d-„Z6Yn0zdd.l5m9Z9Wne&�y®d3d0d1„Z9Yn0dS)4z¦Module which provides compatibility with older Python versions. This is more future-compatible rather than the opposite (prefer latest Python 3 way of doing things). éN)ÚPY3ÚlongÚrangeÚsuperÚunicodeÚ basestringÚuÚbÚ lru_cacheÚwhichÚget_terminal_sizeÚFileNotFoundErrorÚPermissionErrorÚProcessLookupErrorÚInterruptedErrorÚChildProcessErrorÚFileExistsErrorécCs|S©N©©Úsrrú4/usr/lib64/python3.9/site-packages/psutil/_compat.pyr+srcCs | d¡S)Nzlatin-1)Úencoderrrrr .sr cCs t|dƒS)NZunicode_escape)rrrrrr6scCs|Srrrrrrr 9séc CsX|tu�rt tfy’z |j j }Wnt yŒtdƒ‚Yn0Yn0|D]š}|j   ¡D]‚}zNt|tjƒsöt|tƒrÊ|j}q¬z |j}Wq¬t yò| ||¡}Yq¬0q¬Wnt tf�yYq¦Yn0|j|jur¦�q,q¦q˜�q.wrapped..TemporaryClasscsht|ƒdkrNt|dˆƒrN|d}t|ƒD] }| d¡s*t||t||ƒƒq*ntˆ|ƒj|i|¤ŽdS)NrrÚ__)Úlenr)ÚdirÚ startswithÚsetattrÚgetattrrÚ__init__)ÚselfÚargsÚkwargsZ unwrap_meÚattr)ÚTemporaryClassr&rrr<�s   zN_instance_checking_exception..wrapped..TemporaryClass.__init__cs eZdZ‡fdd„Zdd„ZdS)zS_instance_checking_exception..wrapped..TemporaryClass.__metaclass__csˆ|ƒSrr)ÚclsÚinst©Úinstance_checkerrrÚ__instancecheck__šsze_instance_checking_exception..wrapped..TemporaryClass.__metaclass__.__instancecheck__cSst ¡d}t||ƒS©Nr)rÚexc_infor))rBZ classinfoÚvaluerrrÚ__subclasscheck__�s ze_instance_checking_exception..wrapped..TemporaryClass.__metaclass__.__subclasscheck__N)Ú__name__Ú __module__Ú __qualname__rFrJrrDrrÚ __metaclass__™s rN)rKrLrMr<ÚtyperNÚ __classcell__r©rArE)r&rrAŽs rA)rKÚ__doc__rD©Úbase_exceptionrQrÚwrapped�sz-_instance_checking_exception..wrappedr)rTrUrrSrÚ_instance_checking_exceptionŒs rVcCst|dtƒtjkS©NÚerrno)r;rrXÚENOENT©rCrrrr §sr cCst|dtƒtjkSrW)r;rrXZESRCHrZrrrr«srcCst|dtƒtjtjfvSrW)r;rrXZEACCESÚEPERMrZrrrr¯s ÿrcCst|dtƒtjkSrW)r;rrXZEINTRrZrrrr´srcCst|dtƒtjkSrW)r;rrXZECHILDrZrrrr¸srcCst|dtƒtjkSrW)r;rrXÚEEXISTrZrrrr¼srZCPythonZpermzbbroken or incompatible Python implementation, see: https://github.com/giampaolo/psutil/issues/1659)r )ÚRLockÚ CacheInfo)ÚhitsÚmissesÚmaxsizeÚcurrsizec@s$eZdZdZefdd„Zdd„ZdS)Ú _HashedSeqÚ hashvaluecCs||dd…<||ƒ|_dSr©rd)r=ÚtupÚhashrrrr<ßs z_HashedSeq.__init__cCs|jSrre)r=rrrÚ__hash__ãsz_HashedSeq.__hash__N)rKrLrMÚ __slots__rgr<rhrrrrrcÜs rcc s˜|} |r.|| ¡ƒ} | |7} | D] } | | 7} q |rl| |‡fdd„|Dƒƒ7} |r�| |‡fdd„| Dƒƒ7} n$|| ƒdkr�ˆ| dƒ|vr�| dSt| ƒS)Nc3s|]}ˆ|ƒVqdSrr)Ú.0Úv©rOrrÚ ñóz_make_key..c3s|]\}}ˆ|ƒVqdSrr)rjÚkrkrlrrrmórnrr)Úitemsrc) r>ÚkwdsÚtypedÚkwd_markÚ fasttypesÚsortedÚtuplerOr7ÚkeyZ sorted_itemsÚitemrrlrÚ _make_keyæs  ryédFcs‡‡fdd„}|S)z~Least-recently-used cache decorator, see: http://docs.python.org/3/library/functools.html#functools.lru_cache cstƒ‰ddg‰ d\‰‰t‰ ˆj‰t‰tƒ‰ g‰ ˆ ˆ ddgˆ dd…<ˆ g‰ d\‰‰‰‰ˆdkrn‡‡ ‡fdd„}nPˆdur”‡‡‡‡‡ ‡ ‡ ‡‡f dd„}n*‡‡‡‡‡‡‡‡‡‡ ‡ ‡‡ ‡ ‡‡fdd„}‡‡‡‡ ‡‡ fdd „}‡‡ ‡ ‡ fd d „}ˆ|_||_||_t  |ˆ¡S) Nr)rr)rrércs"ˆ|i|¤Ž}ˆˆd7<|SrGr)r>rqÚresult)ÚMISSESÚstatsÚ user_functionrrÚwrapper sz7lru_cache..decorating_function..wrappercs\ˆ||ˆƒ}ˆ|ˆƒ}|ˆur2ˆˆd7<|Sˆ|i|¤Ž}|ˆ|<ˆˆd7<|SrGr)r>rqrwr|) ÚHITSr}ÚcacheÚ cache_getÚmake_keyÚrootr~rrrrrr€s  c sŠ|sˆrˆ ||ˆƒ}n|}ˆ  ¡z„ˆ|ƒ}|durœˆ \}|\}}}}||ˆ<||ˆ<|ˆ}||ˆ<|ˆ<||ˆ<||ˆ<ˆ ˆd7<|Wˆ  ¡SWˆ  ¡n ˆ  ¡0ˆ|i|¤Ž}ˆ  ¡z²ˆ \}|ˆvrÚn†ˆˆƒˆ k�r4|} || ˆ<|| ˆ<| ˆ}ˆ d<|ˆ} d|ˆ<|ˆ<ˆ| =| ˆ|<n,|ˆ}||||g}||ˆ<|ˆ<ˆ|<ˆ ˆd7<Wˆ  ¡n ˆ  ¡0|S)Nrr)ÚacquireÚrelease) r>rqrwÚlinkr…Z link_prevZ link_nextr|ZlastZoldrootZoldkey)r�ÚKEYr}ÚNEXTÚPREVÚRESULTÚ_lenr‚rƒÚlockr„raÚ nonlocal_rootr~rrrrrr€sR þ  cs<ˆ ¡z$tˆˆˆˆˆtˆƒƒWˆ ¡Sˆ ¡0dS)zReport cache statisticsN)r†Ú _CacheInfor7r‡r)r�r}r‚rŽrar~rrÚ cache_infoFsÿýz:lru_cache..decorating_function..cache_infocsXˆ ¡z@ˆ ¡ˆd}||ddg|dd…<ddgˆdd…<Wˆ ¡n ˆ ¡0dS)z$Clear the cache and cache statisticsrN)r†Úclearr‡)r…)r‚rŽr�r~rrÚ cache_clearOsz;lru_cache..decorating_function..cache_clear) ÚdictryÚgetr7r]Ú __wrapped__r‘r“Ú functoolsÚupdate_wrapper)rr€r‘r“©rarr)r�r‰r}rŠr‹rŒr�r‚rƒrŽr„r�r…r~rrÚdecorating_functionüs,  *-  z&lru_cache..decorating_functionr)rarrršrr™rr øscr )r c s"dd„}tj ˆ¡r&|ˆ|ƒr"ˆSdS|dur>tj dtj¡}|sFdS| tj¡}tj dkr¼tj |vrt|  dtj ¡tj dd¡ tj¡}t ‡fd d „|Dƒƒr¨ˆg}q‡fd d „|Dƒ}nˆg}t ƒ}|D]P}tj |¡}||vrÌ| |¡|D](} tj || ¡} || |ƒrò| SqòqÌdS) aJGiven a command, mode, and a PATH string, return the path which conforms to the given mode on the PATH, or None if there is no such file. `mode` defaults to os.F_OK | os.X_OK. `path` defaults to the result of os.environ.get("PATH"), or can be overridden with a custom search path. cSs&tj |¡o$t ||¡o$tj |¡ Sr)ÚosÚpathÚexistsÚaccessÚisdir)ÚfnÚmoderrrÚ _access_checkos ÿzwhich.._access_checkNÚPATHÚwin32rÚPATHEXTÚc3s |]}ˆ ¡ | ¡¡VqdSr)ÚlowerÚendswith©rjÚext©Úcmdrrrmƒrnzwhich..csg|] }ˆ|‘qSrrr©r«rrÚ †rnzwhich..)r›rœÚdirnameÚenvironr•ÚdefpathÚsplitÚpathseprÚplatformÚcurdirÚinsertÚanyÚsetÚnormcaseÚaddÚjoin) r¬r¡rœr¢ÚpathextÚfilesÚseenr8ÚnormdirÚthefileÚnamerr«rr fs8         r )r ©éPécCszzddl}ddl}ddl}Wnty2|YS0z*| d| d|jd¡¡}|d|dfWStyt|YS0dS)NrZhhrZ1234)ÚfcntlÚtermiosÚstructÚ ImportErrorÚunpackZioctlZ TIOCGWINSZÚ Exception)ÚfallbackrÄrÅrÆÚresrrrr šs   ÿ r )rzF)rÁ):rRÚ collectionsrXr—r›rr*Ú__all__Ú version_inforÚobjectrÚintrrZxrangeÚstrrrrr rr1r rrrrrr³rÉrVÚEnvironmentErrorZpython_implementationÚOSErrorr\r#r rÇÚ threadingr]Zdummy_threadingÚ namedtupler�Úlistrcr·Ú frozensetrOrurvr7ryÚshutilr ÚF_OKÚX_OKr rrrrÚs¢  8       ÿ ÿ ý k1