o
    hƎ                     @   s  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lZddl	m
Z
 ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ zddlmZ  W n- e!y Z" z!e#e"$ %dre& d dk rdZ'e'd7 Z'e'd7 Z'e(e'e" dZ"["ww g dZ)dZ*d Z+d!ej,v Z-e.d"d#d$iZ/e/j0Z0e j1ej2e j3ej4e j5ej6e j7ej8e j9ej:e j;ej<e j=ej>e j?ej@e jAejBe jCejDe jEejFe jGe*e jHejIiZJG d%d& d&ej.ZKeL MeKjN G d'd( d(ej.ZOeL MeOjN ePdi d)dd*dd+d,d-d.d/d0d1d2d3dd4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQZQe
dRg dSZRe
dTg dUZSe
dVg dWZTe
dXeTjUdY ZVe
dZd[d\gZWe
d]d^d_XeWjU ZYe
d`g daZZej[dbdcddde Z\edfdg Z]dhdi Z^djdk Z_e j`Z`dldm Zadndo Zbdpdq Zcdrds Zddtdu Zedvdw Zfdxdy Zgdzd{ Zhd|aiej Zkd}d~ Zldd ZmdddZndd Zodd Zpdd Zqdd Zrdasdd Ztdd Zudd Zvdd ZwG dd dZxe jyZye jzZze j{Z{dd Z|dddZ}dd Z~dd ZG dd dZdS )z Windows platform implementation.    N)
namedtuple   )_common)ENCODING)AccessDenied)NoSuchProcess)TimeoutExpired)	conn_tmap)conn_to_ntuple)debug)isfile_strict)memoize)memoize_when_activated)parse_environ_block)usage_percent)ABOVE_NORMAL_PRIORITY_CLASS)BELOW_NORMAL_PRIORITY_CLASS)HIGH_PRIORITY_CLASS)IDLE_PRIORITY_CLASS)NORMAL_PRIORITY_CLASS)REALTIME_PRIORITY_CLASS)_psutil_windowszdll load failed   z3this Windows version is too old (< Windows Vista); z:psutil 3.4.2 is the latest version which supports Windows z2000, XP and 2003 server)win_service_iterwin_service_getr   r   r   r   r   r   IOPRIO_VERYLOW
IOPRIO_LOWIOPRIO_NORMALIOPRIO_HIGHCONN_DELETE_TCBAF_LINK
DELETE_TCBi+  __pypy__AddressFamilyr    c                   @   s$   e Zd ZeZeZeZeZeZeZdS )PriorityN)	__name__
__module____qualname__r   r   r   r   r   r    r)   r)   G/var/www/html/ai/venv/lib/python3.10/site-packages/psutil/_pswindows.pyr%   e   s    r%   c                   @   s   e Zd ZdZdZdZdZdS )
IOPriorityr   r         N)r&   r'   r(   r   r   r   r   r)   r)   r)   r*   r+   q   s
    r+   num_handlesctx_switches	user_timer,   kernel_timer-   create_time   num_threads   	io_rcount	io_wcount   	io_rbytes   	io_wbytes	   io_count_others
   io_bytes_others   num_page_faults   	peak_wset   wset   peak_paged_pool   
paged_pool   peak_non_paged_pool   non_paged_pool   pagefile   peak_pagefile   mem_private   	scputimes)usersystemidle	interruptdpcsvmem)total	availablepercentusedfreepmem)rssvmsrA   rC   rE   rG   rI   peak_nonpaged_poolnonpaged_poolrO   rQ   privatepfullmem)usspmmap_groupedpathrb   	pmmap_extzaddr perms  pio)
read_countwrite_count
read_byteswrite_bytesother_countother_bytesi   )maxsizec                 C   s   |  dr| S d| ddd }|dv r2d| ddd }dd| ddd  }n| dr?| dd }nt|}| t|d }tj||S )	zConvert paths using native DOS format like:
        "\Device\HarddiskVolume1\Windows\systemew\file.txt" or
        "\??\C:\Windows\systemew\file.txt"
    into:
        "C:\Windows\systemew\file.txt".
    z\\\Nr-   >   \??\UNC\Device\Mupr5   z\??\r,   )
startswithjoinsplitcextQueryDosDevicelenosrj   )srawdrivedriveletter	remainderr)   r)   r*   convert_dos_path   s   


r   c                   C      t  S N)r{   getpagesizer)   r)   r)   r*   r         r   c            
      C   sJ   t  } | \}}}}|}|}|}|| }t|| |dd}	t|||	||S )z&System virtual memory as a namedtuple.r   round_)r{   virtual_memr   r[   )
memtotphys	availphys_totsys	_availsysr\   availr`   r_   r^   r)   r)   r*   virtual_memory   s   r   c                  C   sp   t  } | d }| d }|| }|dkr!t  }td| | }nd}d}|| }t|d}t||||ddS )z=Swap system memory as a (total, used, free, sin, sout) tuple.r   r,   g{Gz?        r   )r{   r   swap_percentintroundr   sswap)r   
total_phystotal_systemr\   percentswapr_   r`   r^   r)   r)   r*   swap_memory   s   
r   c                 C   sL   t | tr| jtdd} t| \}}|| }t||dd}t||||S )z'Return disk usage associated with path.strict)errorsr   r   )	
isinstancebytesdecoder   r{   
disk_usager   r   
sdiskusage)rj   r\   r`   r_   r^   r)   r)   r*   r     s   
r   c                 C   s   t | }dd |D S )zReturn disk partitions.c                 S   s   g | ]}t j| qS r)   )r   	sdiskpart).0xr)   r)   r*   
<listcomp>  s    z#disk_partitions.<locals>.<listcomp>)r{   disk_partitions)allrawlistr)   r)   r*   r     s   
r   c                  C   s<   t  \} }}tdd tt   D  }t| |||j|jS )z)Return system CPU times as a named tuple.c                 S   s   g | ]}t |qS r)   )sum)r   nr)   r)   r*   r   #  s    zcpu_times.<locals>.<listcomp>)r{   	cpu_timesrU   zipper_cpu_timesrY   rZ   )rV   rW   rX   percpu_summedr)   r)   r*   r     s
   r   c                  C   s:   g } t  D ]\}}}}}t|||||}| | q| S )z6Return system per-CPU times as a list of named tuples.)r{   r   rU   append)retrV   rW   rX   rY   rZ   itemr)   r)   r*   r   )  s
   r   c                   C   r   )z0Return the number of logical CPUs in the system.)r{   cpu_count_logicalr)   r)   r)   r*   r   2  r   r   c                   C   r   )z-Return the number of CPU cores in the system.)r{   cpu_count_coresr)   r)   r)   r*   r   7  r   r   c                  C   s$   t  \} }}}d}t| |||S )zReturn CPU statistics.r   )r{   	cpu_statsr   	scpustats)r/   
interrupts_dpcssyscallssoft_interruptsr)   r)   r*   r   <  s
   r   c                  C   s(   t  \} }d}tt| |t|gS )zMReturn CPU frequency.
    On Windows per-cpu frequency is not supported.
    r   )r{   cpu_freqr   scpufreqfloat)currmax_min_r)   r)   r*   r   E  s   r   Fc                  C   s   t  } tdd | D S )Nc                 s   s    | ]}t |d V  qdS )r,   N)r   )r   loadr)   r)   r*   	<genexpr>U  s    z#_getloadavg_impl.<locals>.<genexpr>)r{   
getloadavgtuple)	raw_loadsr)   r)   r*   _getloadavg_implR  s   r   c                   C   sZ   t rt S t t st  da W d   t S W d   t S 1 s%w   Y  t S )zReturn the number of processes in the system run queue averaged
    over the last 1, 5, and 15 minutes respectively as a tuple.
    TN)_loadavg_initializedr   _lockr{   init_loadavg_counterr)   r)   r)   r*   r   X  s   

r   c                 C   sr   t |  \}}t|||}t }|D ]"}|\}}}	}
}}}t|||	|
||t|dkr+|ndd}|| qt|S )zReturn socket connections.  If pid == -1 return system-wide
    connections (as opposed to connections opened by one process only).
    r$   N)pid)r	   r{   net_connectionssetr
   TCP_STATUSESaddlist)kind_pidfamiliestypesr   r   r   fdfamtypeladdrraddrstatusr   ntr)   r)   r*   r   n  s"   
r   c                  C   sX   i } t  }| D ]\}}|\}}}}ttdrt|}t||||d| |< q
| S )z)Get NIC stats (isup, duplex, speed, mtu).	NicDuplex )r{   net_if_statsitemshasattrr   r   	snicstats)r   rawdictnamer   isupduplexspeedmtur)   r)   r*   r     s   

r   c                   C   r   )zsReturn network I/O statistics for every network interface
    installed on the system as a dict of raw tuples.
    )r{   net_io_countersr)   r)   r)   r*   r     s   r   c                   C   r   )z,Return the addresses associated to each NIC.)r{   net_if_addrsr)   r)   r)   r*   r     r   r   c                  C   sd   t  \} }}}| dk}t|d@ }t|d@ }|rdS |s |r$tj}n|dkr+tj}t|||S )zReturn battery information.r      r:   Nr$   )r{   sensors_batteryboolr   POWER_TIME_UNLIMITEDPOWER_TIME_UNKNOWNsbattery)acline_statusflagsr^   secsleftpower_plugged
no_batterychargingr)   r)   r*   r     s   r   c                  C   s,   t   t  } t| t dkrtS | a| S )zThe system boot time expressed in seconds since the epoch. This
    also includes the time spent during hybernate / suspend.
    r   )timer{   uptimeabs_last_btime)r   r)   r)   r*   	boot_time  s
   r   c                  C   s@   g } t  }|D ]}|\}}}t|d||d}| | q| S )z:Return currently connected users as a list of namedtuples.N)r{   usersr   suserr   )retlistr   r   rV   hostnametstampr   r)   r)   r*   r     s   
r   c                  c   s$    t  D ]
\} }t| |V  qdS )z*Yields a list of WindowsService instances.N)r{   winservice_enumerateWindowsService)r   display_namer)   r)   r*   r     s   r   c                 C   s   t | d}| d |_|S )zBOpen a Windows service and return it as a WindowsService instance.Nr   )r   _query_config_display_name)r   servicer)   r)   r*   r     s   
r   c                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
ejdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$S )%r   z(Represents an installed Windows service.c                 C   s   || _ || _d S r   )_namer  )selfr   r   r)   r)   r*   __init__  s   
zWindowsService.__init__c                 C   s&   d| j d| jd}| jj | S )Nz(name=z, display_name=))r  r  	__class__r&   )r  detailsr)   r)   r*   __str__  s   zWindowsService.__str__c                 C   s   d|    dt|  dS )N<z at >)r
  idr  r)   r)   r*   __repr__  s   zWindowsService.__repr__c                 C   s   t |tstS | j|jkS r   )r   r   NotImplementedr  r  otherr)   r)   r*   __eq__  s   
zWindowsService.__eq__c                 C   s
   | |k S r   r)   r  r)   r)   r*   __ne__   s   
zWindowsService.__ne__c                 C   sL   |    t| j\}}}}W d    n1 sw   Y  t||||dS )N)r   binpathusername
start_type)_wrap_exceptionsr{   winservice_query_configr  dict)r  r   r  r  r  r)   r)   r*   r    s   

zWindowsService._query_configc                 C   sP   |    t| j\}}W d    n1 sw   Y  |dkr"d }t||dS )Nr   )r   r   )r  r{   winservice_query_statusr  r  )r  r   r   r)   r)   r*   _query_status  s   
zWindowsService._query_statusc              
   c   s    zdV  W dS  t y@ } z-| j}t|r$d|d}td||d||jtjtjhv r;d|d}td||d| d}~ww )z{Ctx manager which translates bare OSError and WindowsError
        exceptions into NoSuchProcess and AccessDenied.
        Nzservice z( is not querable (not enough privileges)r   r   msgz does not exist)	OSErrorr  is_permission_errr   winerrorr{   ERROR_INVALID_NAMEERROR_SERVICE_DOES_NOT_EXISTr   )r  errr   r  r)   r)   r*   r    s$   
zWindowsService._wrap_exceptionsc                 C      | j S )zThe service name. This string is how a service is referenced
        and can be passed to win_service_get() to get a new
        WindowsService instance.
        )r  r  r)   r)   r*   r   0  s   zWindowsService.namec                 C   r%  )z_The service display name. The value is cached when this class
        is instantiated.
        )r  r  r)   r)   r*   r   7  s   zWindowsService.display_namec                 C      |   d S )zwThe fully qualified path to the service binary/exe file as
        a string, including command line arguments.
        r  r  r  r)   r)   r*   r  =     zWindowsService.binpathc                 C   r&  )z,The name of the user that owns this service.r  r'  r  r)   r)   r*   r  C     zWindowsService.usernamec                 C   r&  )zRA string which can either be "automatic", "manual" or
        "disabled".
        r  r'  r  r)   r)   r*   r  G  r(  zWindowsService.start_typec                 C   r&  )zzThe process PID, if any, else None. This can be passed
        to Process class to control the service's process.
        r   r  r  r)   r)   r*   r   O  r(  zWindowsService.pidc                 C   r&  )zService status as a string.r   r*  r  r)   r)   r*   r   U  r)  zWindowsService.statusc                 C   s   t |  S )zService long description.)r{   winservice_query_descrr   r  r)   r)   r*   descriptionY     zWindowsService.descriptionc                 C   s>   |   }||   |  |d< |  |d< |  |d< |S )zUUtility method retrieving all the information above as a
        dictionary.
        r   r   r,  )r  updater  r   r   r,  )r  dr)   r)   r*   as_dict_  s   zWindowsService.as_dictN)r&   r'   r(   __doc__r  r
  r  r  r  r  r  
contextlibcontextmanagerr  r   r   r  r  r  r   r   r,  r0  r)   r)   r)   r*   r     s(    
r   c                 C   s.   t | ts	J | t | tp| jtjtjhv S )z*Return True if this is a permission error.)r   r  PermissionErrorr!  r{   ERROR_ACCESS_DENIEDERROR_PRIVILEGE_NOT_HELD)excr)   r)   r*   r     s
   r   c                 C   s@   t | ts	J | t| rt||dS t | trt||dS | )z3Convert OSError into NoSuchProcess or AccessDenied.r   r   )r   r  r   r   ProcessLookupErrorr   )r7  r   r   r)   r)   r*   convert_oserror  s   
r:  c                       t   fdd}|S )zDDecorator which converts OSError into NoSuchProcess or AccessDenied.c              
      sF   z | g|R i |W S  t y" } z
t|| j| jd|d }~ww )Nr8  )r  r:  r   r  )r  argskwargsr$  funr)   r*   wrapper  s   z wrap_exceptions.<locals>.wrapper	functoolswrapsr?  r@  r)   r>  r*   wrap_exceptions  s   rE  c                    r;  )zWorkaround for https://github.com/giampaolo/psutil/issues/875.
    See: https://stackoverflow.com/questions/4457745#4457745.
    c                    s   d}d}t |D ]6}z | g|R i |W   S  ty> } z|}|jtkr9t| t|d d}W Y d }~q d }~ww   d| d| }t| j| j	|d)N-C6?!   r,   {Gz?z	 retried z: times, converted to AccessDenied as it's still returning r  )
ranger  r!  ERROR_PARTIAL_COPYr   sleepminr   r   r  )r  r<  r=  delaytimes_r$  r  r>  r)   r*   r@    s&   

z)retry_error_partial_copy.<locals>.wrapperrA  rD  r)   r>  r*   retry_error_partial_copy  s   rP  c                   @   s  e Zd ZdZg dZdd Zdd Zdd Zed	d
 Z	dd Z
eedd Zeedd Zeedd Zdd Zdd Zedd Zedd Zdd Zedd Zedd  ZedNd"d#Zed$d% ZedOd'd(Zed)d* Zed+d, Zed-d. Zed/d0 Zed1d2 Zeed3d4 Zed5d6 Z edPd8d9Z!ed:d; Z"ed<d= Z#ed>d? Z$ed@dA Z%edBdC Z&edDdE Z'edFdG Z(edHdI Z)edJdK Z*edLdM Z+d!S )QProcessz1Wrapper class around underlying C implementation.)_cacher  _ppidr   c                 C   s   || _ d | _d | _d S r   )r   r  rS  )r  r   r)   r)   r*   r    s   
zProcess.__init__c                 C      | j |  | j|  d S r   )
_proc_infocache_activateexer  r)   r)   r*   oneshot_enter     zProcess.oneshot_enterc                 C   rT  r   )rU  cache_deactivaterW  r  r)   r)   r*   oneshot_exit  rY  zProcess.oneshot_exitc                 C   s$   t | j}t|ttksJ |S )zOReturn multiple information about this process as a
        raw tuple.
        )r{   	proc_infor   r}   	pinfo_mapr  r   r)   r)   r*   rU    s   zProcess._proc_infoc                 C   s,   | j dkrdS | j dkrdS tj|  S )zbReturn process name, which on Windows is always the final
        part of the executable.
        r   zSystem Idle Processr3   System)r   r~   rj   basenamerW  r  r)   r)   r*   r     s
   

zProcess.namec              
   C   sz   t r,zt| j}W n' ty+ } z|jdkr&t|d t| j| j| d }~ww t| j}|	dr;t
|S |S )N   z translated into AccessDeniedru   )PYPYr{   proc_exer   r  errnor   r   r  rx   r   )r  rW  r$  r)   r)   r*   rW    s   

zProcess.exec              
   C   sn   t jt jkr/z	t j| jddW S  ty. } zt|r)t j| jddW  Y d }~S  d }~ww t j| jddS )NT)use_pebF)r{   WINVERWINDOWS_8_1proc_cmdliner   r  r   r  r$  r)   r)   r*   cmdline  s   zProcess.cmdlinec                 C   s   t | j}t|S r   )r{   proc_environr   r   )r  r   r)   r)   r*   environ$  s   zProcess.environc                 C   s.   zt  | j W S  ty   t| j| jd w r   )ppid_mapr   KeyErrorr   r  r  r)   r)   r*   ppid*  s
   zProcess.ppidc                 C   s   zt | jW S  tyZ } zGt|rUtd |  }|td  |td  |td  |td  |td  |td  |td  |td	  |td
  |td  f
W  Y d }~S  d }~ww )Nz*attempting memory_info() fallback (slower)rA   rC   rE   rG   rI   rK   rM   rO   rQ   rS   )r{   proc_memory_infor   r  r   r   rU  r]  )r  r$  infor)   r)   r*   _get_raw_meminfo0  s(   









zProcess._get_raw_meminfoc                 C   s(   |   }|d }|d }t||f|  S )Nr,   r8   )rr  ra   )r  trb   rc   r)   r)   r*   memory_infoG  s   zProcess.memory_infoc                 C   s,   |   }t| j}|t 9 }t||f  S r   )rt  r{   proc_memory_ussr   r   rg   )r  	basic_memrh   r)   r)   r*   memory_full_infoQ  s   
zProcess.memory_full_infoc              
   c   sr    zt | j}W n ty } z	t|| j| j|d }~ww |D ]\}}}}t|}t|}||||fV  q!d S r   )r{   proc_memory_mapsr   r  r:  r  r   hex)r  rawr$  addrpermrj   rb   r)   r)   r*   memory_mapsX  s   zProcess.memory_mapsc                 C   s   t | jS r   )r{   	proc_killr   r  r)   r)   r*   kille  r)  zProcess.killc                 C   sH   |t jkrt| j d S |t jt jhv rt| j| d S d}t	|)NzPonly SIGTERM, CTRL_C_EVENT and CTRL_BREAK_EVENT signals are supported on Windows)
signalSIGTERMr{   r~  r   CTRL_C_EVENTCTRL_BREAK_EVENTr~   r  
ValueError)r  sigr  r)   r)   r*   send_signali  s   
zProcess.send_signalNc              
   C   s   |d u rt j}nt|d }ttdtj}|d ur| | nd }z	t | j|}W n! t jy? } z	t|| j| j|d }~w t j	yJ   d }Y nw d}	 t
| jsU|S |re| |kret|| j| jdt| t|d d}qN)Ni  	monotonicrF  Tr8  r,   rH  )r{   INFINITEr   getattrr   	proc_waitr   r   r  TimeoutAbandoned
pid_existsrK  rL  )r  timeoutcext_timeouttimerstop_at	exit_coder$  rM  r)   r)   r*   waitv  s,   	

zProcess.waitc                 C   s,   | j dv rdS t| j \}}| d| S )N   r   r3   zNT AUTHORITY\SYSTEMru   )r   r{   proc_username)r  domainrV   r)   r)   r*   r    s   
zProcess.usernameFc              
   C   sf   zt | j\}}}|W S  ty2 } zt|r-|r td |  td  W  Y d }~S  d }~ww )Nz*attempting create_time() fallback (slower)r2   )r{   
proc_timesr   r  r   r   rU  r]  )r  	fast_only_user_systemcreatedr$  r)   r)   r*   r2     s   zProcess.create_timec                 C   s   |   td  S )Nr4   )rU  r]  r  r)   r)   r*   r4     s   zProcess.num_threadsc                 C   s<   t | j}g }|D ]\}}}t|||}|| q
|S r   )r{   proc_threadsr   r   pthreadr   )r  r   r   	thread_idutimestimentupler)   r)   r*   threads  s   zProcess.threadsc              
   C   s~   zt | j\}}}W n+ ty6 } zt|s td |  }|td  }|td  }W Y d }~nd }~ww t	||ddS )Nz(attempting cpu_times() fallback (slower)r0   r1   r   )
r{   r  r   r  r   r   rU  r]  r   	pcputimes)r  rV   rW   _createdr$  rq  r)   r)   r*   r     s   zProcess.cpu_timesc                 C      t | jd d S )NTr{   proc_suspend_or_resumer   r  r)   r)   r*   suspend     zProcess.suspendc                 C   r  )NFr  r  r)   r)   r*   resume  r  zProcess.resumec                 C   s0   | j dv rt| j | jt| j }tj|S )Nr  )r   r   r  r{   proc_cwdr~   rj   normpath)r  rj   r)   r)   r*   cwd  s   
zProcess.cwdc                 C   sX   | j dv rg S t }t| j }|D ]}t|}t|r't|d}|| qt	|S )Nr  r$   )
r   r   r{   proc_open_filesr   r   r   	popenfiler   r   )r  r   raw_file_namesfiler  r)   r)   r*   
open_files  s   

zProcess.open_filesinetc                 C   s   t || jdS )N)r   )r   r   )r  r   r)   r)   r*   r     r-  zProcess.net_connectionsc                 C      t | j}t|}|S r   )r{   proc_priority_getr   r%   r  valuer)   r)   r*   nice_get     zProcess.nice_getc                 C   s   t | j|S r   )r{   proc_priority_setr   r  r)   r)   r*   nice_set  r-  zProcess.nice_setc                 C   r  r   )r{   proc_io_priority_getr   r+   r^  r)   r)   r*   
ionice_get  r  zProcess.ionice_getc                 C   sL   |rd}t ||tjtjtjtjhvr| d}t|t| j	| d S )Nz&value argument not accepted on Windowsz is not a valid priority)
	TypeErrorr+   r   r   r   r   r  r{   proc_io_priority_setr   )r  ioclassr  r  r)   r)   r*   
ionice_set	  s   
zProcess.ionice_setc                 C   s   zt | j}W t| S  tyM } z6t|s td |  }|td  |td  |td  |td  |td  |td  f}W Y d }~t| S d }~ww )Nz*attempting io_counters() fallback (slower)r6   r7   r9   r;   r=   r?   )	r{   proc_io_countersr   r  r   r   rU  r]  rm   )r  r   r$  rq  r)   r)   r*   io_counters  s$   





zProcess.io_countersc                 C   s   t | j}|rtjS tjS r   )r{   proc_is_suspendedr   r   STATUS_STOPPEDSTATUS_RUNNING)r  	suspendedr)   r)   r*   r   +  s   zProcess.statusc                 C   s   dd }t | j}||S )Nc                    s    fddt dD S )Nc                    s   g | ]
}d |>  @ r|qS )r   r)   )r   ir   r)   r*   r   6  s    zBProcess.cpu_affinity_get.<locals>.from_bitmask.<locals>.<listcomp>@   )rI  r  r)   r  r*   from_bitmask5  s   z.Process.cpu_affinity_get.<locals>.from_bitmask)r{   proc_cpu_affinity_getr   )r  r  bitmaskr)   r)   r*   cpu_affinity_get3  s   zProcess.cpu_affinity_getc                 C   sv   dd }t ttt }|D ]}||vr-t|ts$d|d}t|d|}t|q||}t	| j
| d S )Nc                 S   s4   | sd| }t |d}| D ]}|d| O }q|S )Nzinvalid argument r   r,   )r  )lsr  outbr)   r)   r*   
to_bitmask=  s   
z,Process.cpu_affinity_set.<locals>.to_bitmaskzinvalid CPU z; an integer is required)r   rI  r}   r   r   r   r  r  r{   proc_cpu_affinity_setr   )r  r  r  allcpuscpur  r  r)   r)   r*   cpu_affinity_set;  s   

zProcess.cpu_affinity_setc              
   C   sV   zt | jW S  ty* } zt|r%td |  td  W  Y d }~S  d }~ww )Nz*attempting num_handles() fallback (slower)r.   )r{   proc_num_handlesr   r  r   r   rU  r]  ri  r)   r)   r*   r.   U  s   zProcess.num_handlesc                 C   s   |   td  }t|dS )Nr/   r   )rU  r]  r   pctxsw)r  r/   r)   r)   r*   num_ctx_switches_  s   zProcess.num_ctx_switchesr   )F)r  ),r&   r'   r(   r1  	__slots__r  rX  r[  r   rU  r   rE  rW  rP  rj  rl  ro  rr  rt  rw  r}  r  r  r  r  r2   r4   r  r   r  r  r  r  r   r  r  r  r  r  r   r  r  r.   r  r)   r)   r)   r*   rQ    s    

	


*















	rQ  r)   )r$   )NN)r1  r2  enumrB  r~   r  sys	threadingr   collectionsr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r{   ImportErrorr$  strlowerrx   getwindowsversionr  RuntimeError__extra__all__r   rJ  builtin_module_namesrb  IntEnumr#   r    MIB_TCP_STATE_ESTABCONN_ESTABLISHEDMIB_TCP_STATE_SYN_SENTCONN_SYN_SENTMIB_TCP_STATE_SYN_RCVDCONN_SYN_RECVMIB_TCP_STATE_FIN_WAIT1CONN_FIN_WAIT1MIB_TCP_STATE_FIN_WAIT2CONN_FIN_WAIT2MIB_TCP_STATE_TIME_WAITCONN_TIME_WAITMIB_TCP_STATE_CLOSED
CONN_CLOSEMIB_TCP_STATE_CLOSE_WAITCONN_CLOSE_WAITMIB_TCP_STATE_LAST_ACKCONN_LAST_ACKMIB_TCP_STATE_LISTENCONN_LISTENMIB_TCP_STATE_CLOSINGCONN_CLOSINGMIB_TCP_STATE_DELETE_TCBPSUTIL_CONN_NONE	CONN_NONEr   r%   globalsr.  __members__r+   r  r]  rU   r[   ra   _fieldsrg   ri   ry   rk   rm   	lru_cacher   r   r   r   disk_io_countersr   r   r   r   r   r   r   r   r   Lockr   r   r   r   r   r   r   r   r   r   r   r   r   r   pidsr  rm  r   r:  rE  rP  rQ  r)   r)   r)   r*   <module>   sF  

		
!


				

 -
	
