B
    "Oc:                 @   sV  d Z ddlZddlZddlZddlZddlZddlZddlZddddddd	d
ddddddddddgZej	d dkZ
e Ze
reZeZeZeZeZdd	 Zdd
 Zn eZeZeZeZdd	 Zdd
 Ze
reZneZeedfddZe
reZeZeZeZeZeZnddlZefddZ e e!dd Ze e!dd Ze e!d d Ze e!d!d Ze e!d"d Ze e!d#d Ze" d$krye#ej$d%W n2 ek
r   Y n e#k
r   e%d&Y nX ydd'lm&Z& W n e'k
rt   ydd(l(m)Z) W n" e'k
r   dd(l*m)Z) Y nX e+d)d*d+d,d-gZ,G d.d/ d/e-Z.efe/eee0e1dfe2e3e1e4fd0d1Z5d?d4dZ&Y nX ydd5l6m7Z7 W n, e'k
r   ej8ej9B dfd6dZ7Y nX ydd7l6m:Z: W n  e'k
r   d@d9dZ:Y nX ydd:l;m<Z= W n$ e'k
r   G d;d< d<Z=Y nX ydd=lm>Z> W n$ e'k
rP   ej?d>d Z>Y nX dS )AzModule 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redirect_stderrFileNotFoundErrorPermissionErrorProcessLookupErrorInterruptedErrorChildProcessErrorFileExistsError   c             C   s   | S )N )sr   r   -lib/python3.7/site-packages/psutil/_compat.pyr   /   s    c             C   s
   |  dS )Nzlatin-1)encode)r   r   r   r   r	   2   s    c             C   s
   t | dS )NZunicode_escape)r   )r   r   r   r   r   :   s    c             C   s   | S )Nr   )r   r   r   r   r	   =   s       c             C   sh  | t krLt|}y|j|jjd  }W n  ttfk
rJ   tdY nX y
|j	}W nB t
tfk
r   y|jj	}W n t
k
r   tdY nX Y nX x|D ]} x| j D ]}yXxRt|tjst|tr|j}qy
|j}W q t
k
r   ||| }Y qX qW W n t
tfk
r(   wY nX |j|jkrP qW qP qW td|t k	r`t| |S t| S )zuLike Python 3 builtin super(). If called without any arguments
        it attempts to infer them at runtime.
        r   z'super() used in a function with no argsz$super() used in a non-newstyle classzsuper() called outside a method)	_SENTINELsys	_getframef_localsf_codeco_varnames
IndexErrorKeyErrorRuntimeError__mro__AttributeError	__class____dict__values
isinstancetypesFunctionTypepropertyfget__func____get__	TypeErrorZ	func_code_builtin_super)Ztype_Ztype_or_objZ
framedepthfmromethr   r   r   r   L   sB    







c                s    fdd}|S )Nc                s*   G  fddd j  _ j _ S )Nc                   s2   e Zd Z fddZG fdddeZ  ZS )zE_instance_checking_exception.<locals>.wrapped.<locals>.TemporaryClassc                sh   t |dkrRt|d  rR|d }x@t|D ] }|ds,t| |t|| q,W nt | j|| d S )Nr   r   __)lenr(   dir
startswithsetattrgetattrr   __init__)selfargskwargsZ	unwrap_meattr)TemporaryClassr%   r   r   r:      s    
zN_instance_checking_exception.<locals>.wrapped.<locals>.TemporaryClass.__init__c                   s    e Zd Z fddZdd ZdS )zS_instance_checking_exception.<locals>.wrapped.<locals>.TemporaryClass.__metaclass__c                s    |S )Nr   )clsinst)instance_checkerr   r   __instancecheck__   s    ze_instance_checking_exception.<locals>.wrapped.<locals>.TemporaryClass.__metaclass__.__instancecheck__c             S   s   t  d }t|| S )Nr   )r   exc_infor(   )r@   Z	classinfovaluer   r   r   __subclasscheck__   s    ze_instance_checking_exception.<locals>.wrapped.<locals>.TemporaryClass.__metaclass__.__subclasscheck__N)__name__
__module____qualname__rC   rF   r   )rB   r   r   __metaclass__   s   rJ   )rG   rH   rI   r:   typerJ   __classcell__r   )r?   rB   )r%   r   r?      s   	r?   )rG   __doc__)rB   )base_exception)r?   rB   r   wrapped   s    z-_instance_checking_exception.<locals>.wrappedr   )rN   rO   r   )rN   r   _instance_checking_exception   s    rP   c             C   s   t | dttjkS )Nerrno)r9   r   rQ   ZENOENT)rA   r   r   r   r      s    c             C   s   t | dttjkS )NrQ   )r9   r   rQ   ZESRCH)rA   r   r   r   r      s    c             C   s   t | dttjtjfkS )NrQ   )r9   r   rQ   ZEACCESZEPERM)rA   r   r   r   r      s    
c             C   s   t | dttjkS )NrQ   )r9   r   rQ   ZEINTR)rA   r   r   r   r      s    c             C   s   t | dttjkS )NrQ   )r9   r   rQ   ZECHILD)rA   r   r   r   r      s    c             C   s   t | dttjkS )NrQ   )r9   r   rQ   EEXIST)rA   r   r   r   r      s    ZCPythonZpermzbbroken or incompatible Python implementation, see: https://github.com/giampaolo/psutil/issues/1659)r
   )RLock	CacheInfohitsmissesmaxsizecurrsizec               @   s$   e Zd ZdZefddZdd ZdS )
_HashedSeq	hashvaluec             C   s   || d d < ||| _ d S )N)rZ   )r;   tuphashr   r   r   r:      s    z_HashedSeq.__init__c             C   s   | j S )N)rZ   )r;   r   r   r   __hash__   s    z_HashedSeq.__hash__N)rG   rH   rI   	__slots__r\   r:   r]   r   r   r   r   rY      s   rY   c	                s   | }	|r2||  }
|	|7 }	x|
D ]}|	|7 }	q"W |rp|	| fdd| D 7 }	|r|	| fdd|
D 7 }	n$||	dkr |	d |kr|	d S t|	S )Nc             3   s   | ]} |V  qd S )Nr   ).0v)rK   r   r   	<genexpr>   s    z_make_key.<locals>.<genexpr>c             3   s   | ]\}} |V  qd S )Nr   )r_   kr`   )rK   r   r   ra      s    r   r   )itemsrY   )r<   kwdstypedkwd_mark	fasttypessortedtuplerK   r5   keyZsorted_itemsitemr   )rK   r   	_make_key   s    
rl   d   Fc                s    fdd}|S )z~Least-recently-used cache decorator, see:
        http://docs.python.org/3/library/functools.html#functools.lru_cache
        c                s  t  ddgd\ t
jtt 	g d d gd d < gd\dkrnfdd}nPd kr 
f	dd}n* 	
fdd} 	fdd	}	fd
d}|_||_||_t	|S )Nr   )r   r   )r   r      r   c                 s   | |}   d7  < |S )Nr   r   )r<   rd   result)MISSESstatsuser_functionr   r   wrapper  s    
z7lru_cache.<locals>.decorating_function.<locals>.wrapperc                 sX   | |}|}|k	r2   d7  < |S | |}||<   d7  < |S )Nr   r   )r<   rd   rj   ro   )	HITSrp   cache	cache_getmake_keyrootrq   re   rr   r   r   rs     s    

c                 sl  |sr
| |}n| }	   zr|}|d k	r\}|\}}}}||< ||< | }| |< |< ||< ||<    d7  < |S W d 	  X | |}	   z\}|krnkr|}	||	< ||	< |	  }d< | }
d  |< |< |
= |	|< n,| }||||g}| |<  |< |<   d7  < W d 	  X |S )Nr   r   )acquirerelease)r<   rd   rj   linkrx   Z	link_prevZ	link_nextro   ZlastZoldrootZoldkey)rt   KEYrp   NEXTPREVRESULT_lenru   rv   lockrw   rW   nonlocal_rootrq   re   rr   r   r   rs     sN    



c                  s2      zt   tS   X dS )zReport cache statisticsN)ry   
_CacheInfor5   rz   r   )rt   rp   ru   r   rW   rq   r   r   
cache_infoJ  s
    
z:lru_cache.<locals>.decorating_function.<locals>.cache_infoc                 sP      z8   d } | | ddg| dd< ddgdd< W d  X dS )z$Clear the cache and cache statisticsr   N)ry   clearrz   )rx   )ru   r   r   rq   r   r   cache_clearS  s    z;lru_cache.<locals>.decorating_function.<locals>.cache_clear)
dictrl   getr5   rS   __wrapped__r   r   	functoolsupdate_wrapper)rr   rs   r   r   )rW   re   )rt   r|   rp   r}   r~   r   r   ru   rv   r   rw   r   rx   rq   rr   r   decorating_function   s,    *-	z&lru_cache.<locals>.decorating_functionr   )rW   re   r   r   )rW   re   r   r
      s    c)r   c                s"  dd }t j r&| |r" S dS |dkr>t jdt j}|sFdS |t j}tj	dkrt j
|krt|dt j
 t jddt j}t fd	d
|D r g}q fdd|D }n g}t }xT|D ]L}t j|}||kr|| x(|D ] }	t j||	}
||
|r|
S qW qW dS )aJ  Given 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.
        c             S   s&   t j| o$t | |o$t j|  S )N)ospathexistsaccessisdir)fnmoder   r   r   _access_checks  s    zwhich.<locals>._access_checkNPATHZwin32r   ZPATHEXT c             3   s    | ]}   |  V  qd S )N)lowerendswith)r_   ext)cmdr   r   ra     s    zwhich.<locals>.<genexpr>c                s   g | ]} | qS r   r   )r_   r   )r   r   r   
<listcomp>  s    zwhich.<locals>.<listcomp>)r   r   dirnameenvironr   defpathsplitpathsepr   platformcurdirinsertanysetnormcaseaddjoin)r   r   r   r   Zpathextfilesseenr6   ZnormdirZthefilenamer   )r   r   r   j  s8    	






)r   P      c             C   st   ydd l }dd l}dd l}W n tk
r0   | S X y(|d|d|jd}|d |d fS  tk
rn   | S X d S )Nr   Zhhr   Z1234)fcntlstructtermiosImportErrorZunpackZioctlZ
TIOCGWINSZ	Exception)Zfallbackr   r   r   Zresr   r   r   r     s    )TimeoutExpiredc               @   s   e Zd ZdS )SubprocessTimeoutExpiredN)rG   rH   rI   r   r   r   r   r     s   r   )r   c             c   s$   t j}z| t _| V  W d |t _X d S )N)r   stderr)
new_targetZoriginalr   r   r   r     s
    
)rm   F)r   )@rM   collections
contextlibrQ   r   r   r   r)   __all__version_infor   objectr   intr   r   Zxrangestrr   r   r   r	   r   r0   r   r   r   r   r   r   r   r   rP   EnvironmentErrorZpython_implementationOSErrorrR   r"   r
   r   Z	threadingrS   Zdummy_threading
namedtupler   listrY   r   	frozensetrK   rh   ri   r5   rl   Zshutilr   F_OKX_OKr   
subprocessr   r   r   contextmanagerr   r   r   r   <module>   s   



8
k1