a M_8 @sdZddlZddlZddlZddlZddlZddlZgdZejddkZ e Z e rze Z eZeZeZeZddZddZn e Z eZeZeZd dZd dZe reZneZe e d fd d Ze reZeZeZeZeZeZnddlZefddZee ddZee ddZee ddZee ddZee ddZee ddZe!dkrze"ej#dWn.ey|Yne"ye$dYn0zddlm%Z%Wne&yBzdd l'm(Z(Wn e&ydd l)m(Z(Yn0e*d!gd"Z+Gd#d$d$e,Z-e fe.e ee/e0dfe1e2e0e3fd%d&Z4d2d)d*Z%Yn0zdd+l5m6Z6Wn*e&y~ej7ej8Bdfd,d-Z6Yn0zdd.l5m9Z9Wne&yd3d0d1Z9Yn0dS)4zModule 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)PY3longrangesuperunicode basestringub lru_cachewhichget_terminal_sizeFileNotFoundErrorPermissionErrorProcessLookupErrorInterruptedErrorChildProcessErrorFileExistsErrorcCs|SNsrr4/usr/lib64/python3.9/site-packages/psutil/_compat.pyr+srcCs |dS)Nzlatin-1)encoderrrrr .sr cCs t|dS)NZunicode_escape)rrrrrr6scCs|Srrrrrrr 9sc CsX|turt tfyz |j j }Wnt ytdYn0Yn0|D]}|j D]}zNt|tjst|tr|j}qz |j}Wqt y|||}Yq0qWnt tfyYqYn0|j|jurq,qqq.wrapped..TemporaryClasscsht|dkrNt|drN|d}t|D] }|ds*t||t||q*nt|j|i|dS)Nrr__)lenr)dir startswithsetattrgetattrr__init__)selfargskwargsZ unwrap_meattr)TemporaryClassr&rrr<s   zN_instance_checking_exception..wrapped..TemporaryClass.__init__cs eZdZfddZddZdS)zS_instance_checking_exception..wrapped..TemporaryClass.__metaclass__cs|Srr)clsinstinstance_checkerrr__instancecheck__sze_instance_checking_exception..wrapped..TemporaryClass.__metaclass__.__instancecheck__cSstd}t||SNr)rexc_infor))rBZ classinfovaluerrr__subclasscheck__s ze_instance_checking_exception..wrapped..TemporaryClass.__metaclass__.__subclasscheck__N)__name__ __module__ __qualname__rFrJrrDrr __metaclass__s rN)rKrLrMr<typerN __classcell__rrArE)r&rrAs rA)rK__doc__rDbase_exceptionrQrwrappedsz-_instance_checking_exception..wrappedr)rTrUrrSr_instance_checking_exceptions rVcCst|dttjkSNerrno)r;rrXENOENTrCrrrr sr cCst|dttjkSrW)r;rrXZESRCHrZrrrrsrcCst|dttjtjfvSrW)r;rrXZEACCESEPERMrZrrrrs rcCst|dttjkSrW)r;rrXZEINTRrZrrrrsrcCst|dttjkSrW)r;rrXZECHILDrZrrrrsrcCst|dttjkSrW)r;rrXEEXISTrZrrrrsrZCPythonZpermzbbroken or incompatible Python implementation, see: https://github.com/giampaolo/psutil/issues/1659)r )RLock CacheInfo)hitsmissesmaxsizecurrsizec@s$eZdZdZefddZddZdS) _HashedSeq hashvaluecCs||dd<|||_dSrrd)r=tuphashrrrr<s z_HashedSeq.__init__cCs|jSrre)r=rrr__hash__sz_HashedSeq.__hash__N)rKrLrM __slots__rgr<rhrrrrrcs rcc s|} |r.||} | |7} | D] } | | 7} q |rl| |fdd|D7} |r| |fdd| D7} n$|| dkr| d|vr| dSt| S)Nc3s|]}|VqdSrr).0vrOrr z_make_key..c3s|]\}}|VqdSrr)rjkrkrlrrrmrnrr)itemsrc) r>kwdstypedkwd_mark fasttypessortedtuplerOr7keyZ sorted_itemsitemrrlr _make_keys  rydFcsfdd}|S)z~Least-recently-used cache decorator, see: http://docs.python.org/3/library/functools.html#functools.lru_cache cstddg d\t jtt g ddg dd< g d\dkrn fdd}nPdur f dd}n*  fdd}  fdd } fd d }|_||_||_t |S) Nr)rr)rrrcs"|i|}d7<|SrGr)r>rqresult)MISSESstats user_functionrrwrapper sz7lru_cache..decorating_function..wrappercs\||}|}|ur2d7<|S|i|}||<d7<|SrGr)r>rqrwr|) HITSr}cache cache_getmake_keyrootr~rrrrrrs  c s|sr ||}n|} z|}|dur \}|\}}}}||<||<|}||<|<||<||< d7<|W SW n 0|i|} z \}|vrn kr4|} || <|| <| } d<|} d|<|<| =| |<n,|}||||g}||<|<|< d7<W n 0|S)Nrr)acquirerelease) r>rqrwlinkrZ link_prevZ link_nextr|ZlastZoldrootZoldkey)rKEYr}NEXTPREVRESULT_lenrrlockrra nonlocal_rootr~rrrrrrsR   cs<z$ttWS0dS)zReport cache statisticsN)r _CacheInfor7rr)rr}rrrar~rr cache_infoFsz:lru_cache..decorating_function..cache_infocsXz@d}||ddg|dd<ddgdd<Wn 0dS)z$Clear the cache and cache statisticsrN)rclearr)r)rrrr~rr cache_clearOsz;lru_cache..decorating_function..cache_clear) dictrygetr7r] __wrapped__rr functoolsupdate_wrapper)rrrrrarr)rrr}rrrrrrrrrrr~rrdecorating_functions,  *-  z&lru_cache..decorating_functionr)rarrrrrrr scr )r c s"dd}tjr&||r"SdS|dur>tjdtj}|sFdS|tj}tj dkrtj |vrt| dtj tjddtj}t fd d |Drg}q‡fd d |D}ng}t }|D]P}tj|}||vr|||D](} tj|| } || |r| SqqdS) 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)ospathexistsaccessisdir)fnmoderrr _access_checkos zwhich.._access_checkNPATHwin32rPATHEXTc3s |]}|VqdSr)lowerendswithrjextcmdrrrmrnzwhich..csg|] }|qSrrrrrr rnzwhich..)rrdirnameenvironrdefpathsplitpathseprplatformcurdirinsertanysetnormcaseaddjoin) rrrrpathextfilesseenr8normdirthefilenamerrrr fs8         r )r PcCszzddl}ddl}ddl}Wnty2|YS0z*|d|d|jd}|d|dfWStyt|YS0dS)NrZhhrZ1234)fcntltermiosstruct ImportErrorunpackZioctlZ TIOCGWINSZ Exception)fallbackrrrresrrrr s    r )rzF)r):rR collectionsrXrrrr*__all__ version_inforobjectrintrrZxrangestrrrrr rr1r rrrrrrrrVEnvironmentErrorZpython_implementationOSErrorr\r#r r threadingr]Zdummy_threading namedtuplerlistrcr frozensetrOrurvr7ryshutilr F_OKX_OKr rrrrs  8          k1