3
hX                 @   sN  d Z dg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dZ
d#dd	Zd%d
dZd'ddZG dd dZG dd deZG dd deZG dd deZG dd deZG dd deZejjdreZnfejjd reZnRejdkreZn@ejjdreZn,ejjdr,eZnejjdr@eZneZe ZdS )(aa  
cpuinfo

Copyright 2002 Pearu Peterson all rights reserved,
Pearu Peterson <pearu@cens.ioc.ee>
Permission to use, modify, and distribute this software is given under the
terms of the NumPy (BSD style) license.  See LICENSE.txt that came with
this distribution for specifics.

NO WARRANTY IS EXPRESSED OR IMPLIED.  USE AT YOUR OWN RISK.
Pearu Peterson

cpu    N)getstatusoutput   c             C   sn   yt | \}}W n4 tk
rD } ztjt|t|d dS d }~X nX tj|rftj||krfd|fS d|fS )N)
stacklevelF T)Fr   )	r   EnvironmentErrorwarningswarnstrUserWarningos	WIFEXITEDWEXITSTATUS)cmdsuccessful_statusr   statusoutpute r   8/tmp/pip-build-fibhr3ey/numpy/numpy/distutils/cpuinfo.py	getoutput   s    r   c             K   s@   i }x6|D ].}t || | |d d\}}|r
|j ||< q
W |S )Nr   )r   r   )r   strip)r   r   kwinfokeyokr   r   r   r   command_info%   s    

r   c             c   s>   t | ||d d\}}|sd S x|j D ]}|j V  q(W d S )Nr   )r   r   )r   
splitlinesr   )r   r   r   r   r   liner   r   r   command_by_line.   s    r   c             C   sV   i }xLt | ||d dD ]6}dd |j|dD }t|dkr|d ||d < qW |S )Nr   )r   r   c             S   s   g | ]}|j  qS r   )r   ).0sr   r   r   
<listcomp>;   s    z*key_value_from_command.<locals>.<listcomp>   r   )r   splitlen)r   sepr   r   dr   lr   r   r   key_value_from_command6   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S )CPUInfoBasezkHolds CPU information and provides methods for requiring
    the availability of various CPU features.
    c             C   s    y| S  t k
r   Y nX d S )N)	Exception)selffuncr   r   r   	_try_callE   s    zCPUInfoBase._try_callc             C   sX   |j dsLt| d| rDt| d| }t|tjrL| j|fddS ndd S t|d S )N_c             S   s   | |S )Nr   )r-   attrr   r   r   <lambda>P   s    z)CPUInfoBase.__getattr__.<locals>.<lambda>c               S   s   d S )Nr   r   r   r   r   r1   R   s    )
startswithhasattrgetattr
isinstancetypes
MethodTyper.   AttributeError)r,   namer0   r   r   r   __getattr__K   s    
zCPUInfoBase.__getattr__c             C   s   dS )Nr   r   )r,   r   r   r   	_getNCPUsU   s    zCPUInfoBase._getNCPUsc             C   s&   t j d }tjdj|jd}|S )Nr   z(\d+)bitr   )platformarchitecturerecompilesearchgroup)r,   Zabitsnbitsr   r   r   Z__get_nbitsX   s    zCPUInfoBase.__get_nbitsc             C   s   | j  dkS )NZ32)_CPUInfoBase__get_nbits)r,   r   r   r   	_is_32bit]   s    zCPUInfoBase._is_32bitc             C   s   | j  dkS )NZ64)rC   )r,   r   r   r   	_is_64bit`   s    zCPUInfoBase._is_64bitN)
__name__
__module____qualname____doc__r.   r:   r;   rC   rD   rE   r   r   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
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$d% ZeZd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Z d:d; Z!d<d= Z"d>d? Z#d@dA Z$dBdC Z%dDdE Z&dFdG Z'e'Z(dHdI Z)dJdK Z*dLdM Z+dNdO Z,dPdQ Z-dRdS Z.dTdU Z/dVdW Z0dXdY Z1dZd[ Z2d\d] Z3dS )^LinuxCPUInfoNc       
      C   s   | j d k	rd S i g}td\}}|r4|j |d d< ytd}W n6 tk
rv } ztjt|tdd W Y d d }~X nlX x`|D ]X}dd |j	d	d
D }t
|dkrq~|\}}	| s||d kr|ji  |	|d |< q~W |j  || j_ d S )Nzuname -mr   Zuname_mz/proc/cpuinfor#   )r   c             S   s   g | ]}|j  qS r   )r   )r    r!   r   r   r   r"   t   s    z)LinuxCPUInfo.__init__.<locals>.<listcomp>:r   rL   )r   r   r   openr   r   r	   r
   r   r$   r%   appendclose	__class__)
r,   r   r   r   for   r   
name_valuer9   valuer   r   r   __init__g   s(    
&

zLinuxCPUInfo.__init__c             C   s   d S )Nr   )r,   r   r   r   	_not_impl~   s    zLinuxCPUInfo._not_implc             C   s   | j d d dkS )Nr   	vendor_idAuthenticAMD)r   )r,   r   r   r   _is_AMD   s    zLinuxCPUInfo._is_AMDc             C   s   | j  o| jd d dkS )Nr   model2)rX   r   )r,   r   r   r   _is_AthlonK6_2   s    zLinuxCPUInfo._is_AthlonK6_2c             C   s   | j  o| jd d dkS )Nr   rY   3)rX   r   )r,   r   r   r   _is_AthlonK6_3   s    zLinuxCPUInfo._is_AthlonK6_3c             C   s   t jd| jd d d k	S )Nz	.*?AMD-K6r   z
model name)r>   matchr   )r,   r   r   r   _is_AthlonK6   s    zLinuxCPUInfo._is_AthlonK6c             C   s   t jd| jd d d k	S )Nz	.*?AMD-K7r   z
model name)r>   r^   r   )r,   r   r   r   _is_AthlonK7   s    zLinuxCPUInfo._is_AthlonK7c             C   s   t jd| jd d d k	S )Nz.*?Athlon\(tm\) MP\br   z
model name)r>   r^   r   )r,   r   r   r   _is_AthlonMP   s    zLinuxCPUInfo._is_AthlonMPc             C   s   | j  o| jd d dkS )Nr   family15)is_AMDr   )r,   r   r   r   	_is_AMD64   s    zLinuxCPUInfo._is_AMD64c             C   s   t jd| jd d d k	S )Nz.*?Athlon\(tm\) 64\br   z
model name)r>   r^   r   )r,   r   r   r   _is_Athlon64   s    zLinuxCPUInfo._is_Athlon64c             C   s   t jd| jd d d k	S )Nz.*?Athlon HX\br   z
model name)r>   r^   r   )r,   r   r   r   _is_AthlonHX   s    zLinuxCPUInfo._is_AthlonHXc             C   s   t jd| jd d d k	S )Nz.*?Opteron\br   z
model name)r>   r^   r   )r,   r   r   r   _is_Opteron   s    zLinuxCPUInfo._is_Opteronc             C   s   t jd| jd d d k	S )Nz.*?Hammer\br   z
model name)r>   r^   r   )r,   r   r   r   
_is_Hammer   s    zLinuxCPUInfo._is_Hammerc             C   s   | j d d dkS )Nr   r   Alpha)r   )r,   r   r   r   	_is_Alpha   s    zLinuxCPUInfo._is_Alphac             C   s   | j  o| jd d dkS )Nr   z	cpu modelZEV4)is_Alphar   )r,   r   r   r   _is_EV4   s    zLinuxCPUInfo._is_EV4c             C   s   | j  o| jd d dkS )Nr   z	cpu modelZEV5)rl   r   )r,   r   r   r   _is_EV5   s    zLinuxCPUInfo._is_EV5c             C   s   | j  o| jd d dkS )Nr   z	cpu modelZEV56)rl   r   )r,   r   r   r   _is_EV56   s    zLinuxCPUInfo._is_EV56c             C   s   | j  o| jd d dkS )Nr   z	cpu modelZPCA56)rl   r   )r,   r   r   r   	_is_PCA56   s    zLinuxCPUInfo._is_PCA56c             C   s   | j d d dkS )Nr   rV   GenuineIntel)r   )r,   r   r   r   	_is_Intel   s    zLinuxCPUInfo._is_Intelc             C   s   | j d d dkS )Nr   r   Zi486)r   )r,   r   r   r   _is_i486   s    zLinuxCPUInfo._is_i486c             C   s   | j  o| jd d dkS )Nr   z
cpu family5)is_Intelr   )r,   r   r   r   _is_i586   s    zLinuxCPUInfo._is_i586c             C   s   | j  o| jd d dkS )Nr   z
cpu family6)ru   r   )r,   r   r   r   _is_i686   s    zLinuxCPUInfo._is_i686c             C   s   t jd| jd d d k	S )Nz
.*?Celeronr   z
model name)r>   r^   r   )r,   r   r   r   _is_Celeron   s    zLinuxCPUInfo._is_Celeronc             C   s   t jd| jd d d k	S )Nz
.*?Pentiumr   z
model name)r>   r^   r   )r,   r   r   r   _is_Pentium   s    zLinuxCPUInfo._is_Pentiumc             C   s   t jd| jd d d k	S )Nz.*?Pentium.*?II\br   z
model name)r>   r^   r   )r,   r   r   r   _is_PentiumII   s    zLinuxCPUInfo._is_PentiumIIc             C   s   t jd| jd d d k	S )Nz.*?PentiumPro\br   z
model name)r>   r^   r   )r,   r   r   r   _is_PentiumPro   s    zLinuxCPUInfo._is_PentiumProc             C   s   t jd| jd d d k	S )Nz.*?Pentium.*?MMX\br   z
model name)r>   r^   r   )r,   r   r   r   _is_PentiumMMX   s    zLinuxCPUInfo._is_PentiumMMXc             C   s   t jd| jd d d k	S )Nz.*?Pentium.*?III\br   z
model name)r>   r^   r   )r,   r   r   r   _is_PentiumIII   s    zLinuxCPUInfo._is_PentiumIIIc             C   s   t jd| jd d d k	S )Nz.*?Pentium.*?(IV|4)\br   z
model name)r>   r^   r   )r,   r   r   r   _is_PentiumIV   s    zLinuxCPUInfo._is_PentiumIVc             C   s   t jd| jd d d k	S )Nz.*?Pentium.*?M\br   z
model name)r>   r^   r   )r,   r   r   r   _is_PentiumM   s    zLinuxCPUInfo._is_PentiumMc             C   s   | j  o| j S )N)Zis_PentiumIVhas_sse3)r,   r   r   r   _is_Prescott   s    zLinuxCPUInfo._is_Prescottc             C   sX   | j  oV| jd d dks,| jd d dkoV| j oV| j  oVtjd| jd d d k	S )Nr   z
cpu familyrw   rc   z	.*?\blm\bflags)ru   r   r   Z	has_ssse3r>   r^   )r,   r   r   r   
_is_Nocona   s
    zLinuxCPUInfo._is_Noconac             C   s*   | j  o(| j o(tjd| jd d d k	S )Nz.*?Core\(TM\)2\br   z
model name)Zis_64bitru   r>   r^   r   )r,   r   r   r   	_is_Core2   s    zLinuxCPUInfo._is_Core2c             C   s   t jd| jd d d k	S )Nz.*?Itanium\br   rb   )r>   r^   r   )r,   r   r   r   _is_Itanium   s    zLinuxCPUInfo._is_Itaniumc             C   s   t jd| jd d t jd k	S )Nz	.*?XEON\br   z
model name)r>   r^   r   
IGNORECASE)r,   r   r   r   _is_XEON   s    zLinuxCPUInfo._is_XEONc             C   s   t | jdkS )Nr   )r%   r   )r,   r   r   r   _is_singleCPU  s    zLinuxCPUInfo._is_singleCPUc             C   s
   t | jS )N)r%   r   )r,   r   r   r   r;     s    zLinuxCPUInfo._getNCPUsc             C   s   | j d d dkS )Nr   Zfdiv_bugyes)r   )r,   r   r   r   _has_fdiv_bug  s    zLinuxCPUInfo._has_fdiv_bugc             C   s   | j d d dkS )Nr   Zf00f_bugr   )r   )r,   r   r   r   _has_f00f_bug  s    zLinuxCPUInfo._has_f00f_bugc             C   s   t jd| jd d d k	S )Nz
.*?\bmmx\br   r   )r>   r^   r   )r,   r   r   r   _has_mmx  s    zLinuxCPUInfo._has_mmxc             C   s   t jd| jd d d k	S )Nz
.*?\bsse\br   r   )r>   r^   r   )r,   r   r   r   _has_sse  s    zLinuxCPUInfo._has_ssec             C   s   t jd| jd d d k	S )Nz.*?\bsse2\br   r   )r>   r^   r   )r,   r   r   r   	_has_sse2  s    zLinuxCPUInfo._has_sse2c             C   s   t jd| jd d d k	S )Nz
.*?\bpni\br   r   )r>   r^   r   )r,   r   r   r   	_has_sse3  s    zLinuxCPUInfo._has_sse3c             C   s   t jd| jd d d k	S )Nz.*?\bssse3\br   r   )r>   r^   r   )r,   r   r   r   
_has_ssse3  s    zLinuxCPUInfo._has_ssse3c             C   s   t jd| jd d d k	S )Nz.*?\b3dnow\br   r   )r>   r^   r   )r,   r   r   r   
_has_3dnow   s    zLinuxCPUInfo._has_3dnowc             C   s   t jd| jd d d k	S )Nz.*?\b3dnowext\br   r   )r>   r^   r   )r,   r   r   r   _has_3dnowext#  s    zLinuxCPUInfo._has_3dnowext)4rF   rG   rH   r   rT   rU   rX   r[   r]   r_   r`   ra   re   rf   rg   rh   ri   rk   rm   rn   ro   rp   _is_i386rr   rs   rv   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   r   Z_is_Xeonr   r;   r   r   r   r   r   r   r   r   r   r   r   r   r   rJ   c   sb   rJ   c               @   s8  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
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$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Z d<d= Z!d>d? Z"d@dA Z#dBdC Z$dDdE Z%dFdG Z&dHdI Z'dJdK Z(dS )LIRIXCPUInfoNc             C   s(   | j d k	rd S tdddd}|| j_ d S )Nsysconf r   r   )r&   r   )r   r   )r   r)   rP   )r,   r   r   r   r   rT   )  s
    
zIRIXCPUInfo.__init__c             C   s   d S )Nr   )r,   r   r   r   rU   0  s    zIRIXCPUInfo._not_implc             C   s   | j jddkS )NNUM_PROCESSORS1)r   get)r,   r   r   r   r   2  s    zIRIXCPUInfo._is_singleCPUc             C   s   t | jjddS )Nr   r   )intr   r   )r,   r   r   r   r;   5  s    zIRIXCPUInfo._getNCPUsc             C   s    | j jdj d j d| kS )NZ
PROCESSORSr   zr%s)r   r   r$   lower)r,   nr   r   r   Z	__cputype8  s    zIRIXCPUInfo.__cputypec             C   s
   | j dS )Ni  )_IRIXCPUInfo__cputype)r,   r   r   r   	_is_r2000:  s    zIRIXCPUInfo._is_r2000c             C   s
   | j dS )Ni  )r   )r,   r   r   r   	_is_r3000;  s    zIRIXCPUInfo._is_r3000c             C   s
   | j dS )Ni<  )r   )r,   r   r   r   	_is_r3900<  s    zIRIXCPUInfo._is_r3900c             C   s
   | j dS )Ni  )r   )r,   r   r   r   	_is_r4000=  s    zIRIXCPUInfo._is_r4000c             C   s
   | j dS )Ni  )r   )r,   r   r   r   	_is_r4100>  s    zIRIXCPUInfo._is_r4100c             C   s
   | j dS )Ni  )r   )r,   r   r   r   	_is_r4300?  s    zIRIXCPUInfo._is_r4300c             C   s
   | j dS )Ni0  )r   )r,   r   r   r   	_is_r4400@  s    zIRIXCPUInfo._is_r4400c             C   s
   | j dS )Ni  )r   )r,   r   r   r   	_is_r4600A  s    zIRIXCPUInfo._is_r4600c             C   s
   | j dS )Ni*  )r   )r,   r   r   r   	_is_r4650B  s    zIRIXCPUInfo._is_r4650c             C   s
   | j dS )Ni  )r   )r,   r   r   r   	_is_r5000C  s    zIRIXCPUInfo._is_r5000c             C   s
   | j dS )Nip  )r   )r,   r   r   r   	_is_r6000D  s    zIRIXCPUInfo._is_r6000c             C   s
   | j dS )Ni@  )r   )r,   r   r   r   	_is_r8000E  s    zIRIXCPUInfo._is_r8000c             C   s
   | j dS )Ni'  )r   )r,   r   r   r   
_is_r10000F  s    zIRIXCPUInfo._is_r10000c             C   s
   | j dS )Ni.  )r   )r,   r   r   r   
_is_r12000G  s    zIRIXCPUInfo._is_r12000c             C   s
   | j dS )NZorion)r   )r,   r   r   r   
_is_rorionH  s    zIRIXCPUInfo._is_rorionc             C   s&   y| j jdS  tk
r    Y nX d S )NMACHINE)r   r   r+   )r,   r   r   r   get_ipJ  s      zIRIXCPUInfo.get_ipc             C   s   | j jdj d| kS )Nr   zip%s)r   r   r   )r,   r   r   r   r   	__machineM  s    zIRIXCPUInfo.__machinec             C   s
   | j dS )N   )_IRIXCPUInfo__machine)r,   r   r   r   _is_IP19O  s    zIRIXCPUInfo._is_IP19c             C   s
   | j dS )N   )r   )r,   r   r   r   _is_IP20P  s    zIRIXCPUInfo._is_IP20c             C   s
   | j dS )N   )r   )r,   r   r   r   _is_IP21Q  s    zIRIXCPUInfo._is_IP21c             C   s
   | j dS )N   )r   )r,   r   r   r   _is_IP22R  s    zIRIXCPUInfo._is_IP22c             C   s   | j do| j S )Nr   )r   r   )r,   r   r   r   _is_IP22_4kS  s    zIRIXCPUInfo._is_IP22_4kc             C   s   | j do| j S )Nr   )r   r   )r,   r   r   r   _is_IP22_5kT  s    zIRIXCPUInfo._is_IP22_5kc             C   s
   | j dS )N   )r   )r,   r   r   r   _is_IP24U  s    zIRIXCPUInfo._is_IP24c             C   s
   | j dS )N   )r   )r,   r   r   r   _is_IP25V  s    zIRIXCPUInfo._is_IP25c             C   s
   | j dS )N   )r   )r,   r   r   r   _is_IP26W  s    zIRIXCPUInfo._is_IP26c             C   s
   | j dS )N   )r   )r,   r   r   r   _is_IP27X  s    zIRIXCPUInfo._is_IP27c             C   s
   | j dS )N   )r   )r,   r   r   r   _is_IP28Y  s    zIRIXCPUInfo._is_IP28c             C   s
   | j dS )N   )r   )r,   r   r   r   _is_IP30Z  s    zIRIXCPUInfo._is_IP30c             C   s
   | j dS )N    )r   )r,   r   r   r   _is_IP32[  s    zIRIXCPUInfo._is_IP32c             C   s   | j do| j S )Nr   )r   r   )r,   r   r   r   _is_IP32_5k\  s    zIRIXCPUInfo._is_IP32_5kc             C   s   | j do| j S )Nr   )r   r   )r,   r   r   r   _is_IP32_10k]  s    zIRIXCPUInfo._is_IP32_10k))rF   rG   rH   r   rT   rU   r   r;   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   &  sL   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
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$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 ZdS )4DarwinCPUInfoNc             C   s6   | j d k	rd S tddd}tddd|d< || j_ d S )Narchmachine)r   r   z	sysctl hw=)r&   	sysctl_hw)r   r   r)   rP   )r,   r   r   r   r   rT   c  s    
zDarwinCPUInfo.__init__c             C   s   d S )Nr   )r,   r   r   r   rU   k  s    zDarwinCPUInfo._not_implc             C   s   t | jd jddS )Nr   zhw.ncpur   )r   r   r   )r,   r   r   r   r;   m  s    zDarwinCPUInfo._getNCPUsc             C   s   | j d d dkS )Nr   z
hw.machinezPower Macintosh)r   )r,   r   r   r   _is_Power_Macintoshp  s    z!DarwinCPUInfo._is_Power_Macintoshc             C   s   | j d dkS )Nr   i386)r   )r,   r   r   r   r   s  s    zDarwinCPUInfo._is_i386c             C   s   | j d dkS )Nr   ppc)r   )r,   r   r   r   _is_ppcu  s    zDarwinCPUInfo._is_ppcc             C   s   | j d d| kS )Nr   zppc%s)r   )r,   r   r   r   r   r   x  s    zDarwinCPUInfo.__machinec             C   s
   | j dS )NiY  )_DarwinCPUInfo__machine)r,   r   r   r   
_is_ppc601z  s    zDarwinCPUInfo._is_ppc601c             C   s
   | j dS )NiZ  )r   )r,   r   r   r   
_is_ppc602{  s    zDarwinCPUInfo._is_ppc602c             C   s
   | j dS )Ni[  )r   )r,   r   r   r   
_is_ppc603|  s    zDarwinCPUInfo._is_ppc603c             C   s
   | j dS )NZ603e)r   )r,   r   r   r   _is_ppc603e}  s    zDarwinCPUInfo._is_ppc603ec             C   s
   | j dS )Ni\  )r   )r,   r   r   r   
_is_ppc604~  s    zDarwinCPUInfo._is_ppc604c             C   s
   | j dS )NZ604e)r   )r,   r   r   r   _is_ppc604e  s    zDarwinCPUInfo._is_ppc604ec             C   s
   | j dS )Nil  )r   )r,   r   r   r   
_is_ppc620  s    zDarwinCPUInfo._is_ppc620c             C   s
   | j dS )Niv  )r   )r,   r   r   r   
_is_ppc630  s    zDarwinCPUInfo._is_ppc630c             C   s
   | j dS )Ni  )r   )r,   r   r   r   
_is_ppc740  s    zDarwinCPUInfo._is_ppc740c             C   s
   | j dS )Ni  )r   )r,   r   r   r   _is_ppc7400  s    zDarwinCPUInfo._is_ppc7400c             C   s
   | j dS )Ni  )r   )r,   r   r   r   _is_ppc7450  s    zDarwinCPUInfo._is_ppc7450c             C   s
   | j dS )Ni  )r   )r,   r   r   r   
_is_ppc750  s    zDarwinCPUInfo._is_ppc750c             C   s
   | j dS )Ni  )r   )r,   r   r   r   
_is_ppc403  s    zDarwinCPUInfo._is_ppc403c             C   s
   | j dS )Ni  )r   )r,   r   r   r   
_is_ppc505  s    zDarwinCPUInfo._is_ppc505c             C   s
   | j dS )Ni!  )r   )r,   r   r   r   
_is_ppc801  s    zDarwinCPUInfo._is_ppc801c             C   s
   | j dS )Ni5  )r   )r,   r   r   r   
_is_ppc821  s    zDarwinCPUInfo._is_ppc821c             C   s
   | j dS )Ni7  )r   )r,   r   r   r   
_is_ppc823  s    zDarwinCPUInfo._is_ppc823c             C   s
   | j dS )Ni\  )r   )r,   r   r   r   
_is_ppc860  s    zDarwinCPUInfo._is_ppc860)rF   rG   rH   r   rT   rU   r;   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   `  s4   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
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$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 ZdS )4SunOSCPUInfoNc             C   sn   | j d k	rd S tdddddd}tddd	|d
< x0tdD ]$}tjd|}|r:|jd|d< P q:W || j_ d S )Nr   machuname_iz
isainfo -bz
isainfo -n)r   r   r   Z	isainfo_b	isainfo_nzuname -Xr   )r&   uname_Xzpsrinfo -v 0z+\s*The (?P<p>[\w\d]+) processor operates atp	processor)r   r   r)   r   r>   r^   rA   rP   )r,   r   r   mr   r   r   rT     s    
zSunOSCPUInfo.__init__c             C   s   d S )Nr   )r,   r   r   r   rU     s    zSunOSCPUInfo._not_implc             C   s   | j d dkS )Nr   r   )r   )r,   r   r   r   r     s    zSunOSCPUInfo._is_i386c             C   s   | j d dkS )Nr   Zsparc)r   )r,   r   r   r   	_is_sparc  s    zSunOSCPUInfo._is_sparcc             C   s   | j d dkS )Nr   sparcv9)r   )r,   r   r   r   _is_sparcv9  s    zSunOSCPUInfo._is_sparcv9c             C   s   t | jd jddS )Nr   ZNumCPUr   )r   r   r   )r,   r   r   r   r;     s    zSunOSCPUInfo._getNCPUsc             C   s   | j d dkS )Nr   Zsun4)r   )r,   r   r   r   _is_sun4  s    zSunOSCPUInfo._is_sun4c             C   s   t jd| jd d k	S )NZSUNWr   )r>   r^   r   )r,   r   r   r   _is_SUNW  s    zSunOSCPUInfo._is_SUNWc             C   s   t jd| jd d k	S )Nz.*SPARCstation-5r   )r>   r^   r   )r,   r   r   r   _is_sparcstation5  s    zSunOSCPUInfo._is_sparcstation5c             C   s   t jd| jd d k	S )Nz	.*Ultra-1r   )r>   r^   r   )r,   r   r   r   
_is_ultra1  s    zSunOSCPUInfo._is_ultra1c             C   s   t jd| jd d k	S )Nz.*Ultra-250r   )r>   r^   r   )r,   r   r   r   _is_ultra250  s    zSunOSCPUInfo._is_ultra250c             C   s   t jd| jd d k	S )Nz	.*Ultra-2r   )r>   r^   r   )r,   r   r   r   
_is_ultra2  s    zSunOSCPUInfo._is_ultra2c             C   s   t jd| jd d k	S )Nz
.*Ultra-30r   )r>   r^   r   )r,   r   r   r   _is_ultra30  s    zSunOSCPUInfo._is_ultra30c             C   s   t jd| jd d k	S )Nz	.*Ultra-4r   )r>   r^   r   )r,   r   r   r   
_is_ultra4  s    zSunOSCPUInfo._is_ultra4c             C   s   t jd| jd d k	S )Nz.*Ultra-5_10r   )r>   r^   r   )r,   r   r   r   _is_ultra5_10  s    zSunOSCPUInfo._is_ultra5_10c             C   s   t jd| jd d k	S )Nz	.*Ultra-5r   )r>   r^   r   )r,   r   r   r   
_is_ultra5  s    zSunOSCPUInfo._is_ultra5c             C   s   t jd| jd d k	S )Nz
.*Ultra-60r   )r>   r^   r   )r,   r   r   r   _is_ultra60  s    zSunOSCPUInfo._is_ultra60c             C   s   t jd| jd d k	S )Nz
.*Ultra-80r   )r>   r^   r   )r,   r   r   r   _is_ultra80  s    zSunOSCPUInfo._is_ultra80c             C   s   t jd| jd d k	S )Nz.*Ultra-Enterpriser   )r>   r^   r   )r,   r   r   r   _is_ultraenterprice  s    z SunOSCPUInfo._is_ultraenterpricec             C   s   t jd| jd d k	S )Nz.*Ultra-Enterprise-10000r   )r>   r^   r   )r,   r   r   r   _is_ultraenterprice10k  s    z#SunOSCPUInfo._is_ultraenterprice10kc             C   s   t jd| jd d k	S )Nz
.*Sun-Firer   )r>   r^   r   )r,   r   r   r   _is_sunfire  s    zSunOSCPUInfo._is_sunfirec             C   s   t jd| jd d k	S )Nz.*Ultrar   )r>   r^   r   )r,   r   r   r   	_is_ultra  s    zSunOSCPUInfo._is_ultrac             C   s   | j d dkS )Nr   Zsparcv7)r   )r,   r   r   r   _is_cpusparcv7  s    zSunOSCPUInfo._is_cpusparcv7c             C   s   | j d dkS )Nr   Zsparcv8)r   )r,   r   r   r   _is_cpusparcv8  s    zSunOSCPUInfo._is_cpusparcv8c             C   s   | j d dkS )Nr   r   )r   )r,   r   r   r   _is_cpusparcv9  s    zSunOSCPUInfo._is_cpusparcv9)rF   rG   rH   r   rT   rU   r   r   r   r;   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r   r   r   r   r     s4   r   c               @   s  e Zd 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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%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Z d;d< Z!d=d> Z"d?d@ Z#dS )AWin32CPUInfoNz,HARDWARE\DESCRIPTION\System\CentralProcessorc             C   sx  | j d k	rd S g }y(dd l}tjdtj}|j|j| j}d} xy|j||}W n |j	k
rl   P Y qDX |d7 }|j
d|i |j||}d}xy|j||\}	}
}W n |j	k
r   P Y qX |d }|
|d |	< |	dkr|j|
}|rt|jd|d d< t|jd|d d	< t|jd
|d d< qW qDW W n. tk
rj } zt|d W Y d d }~X nX || j_ d S )Nr   zFfamily\s+(?P<FML>\d+)\s+model\s+(?P<MDL>\d+)\s+stepping\s+(?P<STP>\d+)r   Z	ProcessorZ
IdentifierZFMLFamilyZMDLModelZSTPZSteppingz
(ignoring)rL   rL   rL   rL   )r   winregr>   r?   r   OpenKeyHKEY_LOCAL_MACHINEpkeyEnumKeyerrorrN   	EnumValuer@   r   rA   r+   printrP   )r,   r   r	  ZprgxZchndZpnumprocZphndZpidxr9   rS   ZvtpeZsrchr   r   r   r   rT     sD    

"zWin32CPUInfo.__init__c             C   s   d S )Nr   )r,   r   r   r   rU     s    zWin32CPUInfo._not_implc             C   s   | j d d dkS )Nr   VendorIdentifierrW   )r   )r,   r   r   r   rX     s    zWin32CPUInfo._is_AMDc             C   s   | j  o| jd d dkS )Nr   r     )rd   r   )r,   r   r   r   	_is_Am486  s    zWin32CPUInfo._is_Am486c             C   s   | j  o| jd d dkS )Nr   r  r  )rd   r   )r,   r   r   r   
_is_Am5x86  s    zWin32CPUInfo._is_Am5x86c             C   s,   | j  o*| jd d dko*| jd d dkS )	Nr   r     r  r   r#      )r   r   r#   r  )rd   r   )r,   r   r   r   	_is_AMDK5  s    zWin32CPUInfo._is_AMDK5c             C   s,   | j  o*| jd d dko*| jd d dkS )Nr   r  r  r        )r  r  )rd   r   )r,   r   r   r   	_is_AMDK6  s    zWin32CPUInfo._is_AMDK6c             C   s,   | j  o*| jd d dko*| jd d dkS )Nr   r  r  r     )rd   r   )r,   r   r   r   _is_AMDK6_2  s    zWin32CPUInfo._is_AMDK6_2c             C   s,   | j  o*| jd d dko*| jd d dkS )Nr   r  r  r  	   )rd   r   )r,   r   r   r   _is_AMDK6_3!  s    zWin32CPUInfo._is_AMDK6_3c             C   s   | j  o| jd d dkS )Nr   r  r  )rd   r   )r,   r   r   r   	_is_AMDK7%  s    zWin32CPUInfo._is_AMDK7c             C   s   | j  o| jd d dkS )Nr   r     )rd   r   )r,   r   r   r   re   ,  s    zWin32CPUInfo._is_AMD64c             C   s   | j d d dkS )Nr   r  rq   )r   )r,   r   r   r   rr   1  s    zWin32CPUInfo._is_Intelc             C   s   | j d d dkS )Nr   r  r  )r   )r,   r   r   r   r   4  s    zWin32CPUInfo._is_i386c             C   s   | j d d dkS )Nr   r  r  )r   )r,   r   r   r   rs   7  s    zWin32CPUInfo._is_i486c             C   s   | j  o| jd d dkS )Nr   r  r  )ru   r   )r,   r   r   r   rv   :  s    zWin32CPUInfo._is_i586c             C   s   | j  o| jd d dkS )Nr   r  r  )ru   r   )r,   r   r   r   rx   =  s    zWin32CPUInfo._is_i686c             C   s   | j  o| jd d dkS )Nr   r  r  )ru   r   )r,   r   r   r   rz   @  s    zWin32CPUInfo._is_Pentiumc             C   s,   | j  o*| jd d dko*| jd d dkS )Nr   r  r  r  r  )ru   r   )r,   r   r   r   r}   C  s    zWin32CPUInfo._is_PentiumMMXc             C   s,   | j  o*| jd d dko*| jd d dkS )Nr   r  r  r  r   )ru   r   )r,   r   r   r   r|   G  s    zWin32CPUInfo._is_PentiumProc             C   s,   | j  o*| jd d dko*| jd d dkS )Nr   r  r  r  r  r  )r  r  r  )ru   r   )r,   r   r   r   r{   K  s    zWin32CPUInfo._is_PentiumIIc             C   s,   | j  o*| jd d dko*| jd d d
kS )Nr   r  r  r  r  r  r  
      )r  r  r  r"  r#  )ru   r   )r,   r   r   r   r~   O  s    zWin32CPUInfo._is_PentiumIIIc             C   s   | j  o| jd d dkS )Nr   r  r!  )ru   r   )r,   r   r   r   r   S  s    zWin32CPUInfo._is_PentiumIVc             C   s,   | j  o*| jd d dko*| jd d dkS )	Nr   r  r  r  r        )r  r$  r%  )ru   r   )r,   r   r   r   r   V  s    zWin32CPUInfo._is_PentiumMc             C   s,   | j  o*| jd d dko*| jd d dkS )	Nr   r  r  r  r!        )r!  r&  r'  )ru   r   )r,   r   r   r   r   Z  s    zWin32CPUInfo._is_Core2c             C   s   t | jdkS )Nr   )r%   r   )r,   r   r   r   r   `  s    zWin32CPUInfo._is_singleCPUc             C   s
   t | jS )N)r%   r   )r,   r   r   r   r;   c  s    zWin32CPUInfo._getNCPUsc             C   s`   | j  r>| jd d dkr,| jd d dkp<| jd d d	kS | j rX| jd d d
kS dS d S )Nr   r  r  r  r  r  r!  F)r  r!  )r  r  r!  )ru   r   rd   )r,   r   r   r   r   f  s    $zWin32CPUInfo._has_mmxc             C   s   | j  r>| jd d dkr,| jd d dkp<| jd d d
kS | j r|| jd d dkrj| jd d dkpz| jd d d
kS dS d S )Nr   r  r  r  r  r  r  r"  r#  r!  F)r  r  r  r"  r#  )r  r  r  r"  )ru   r   rd   )r,   r   r   r   r   o  s    zWin32CPUInfo._has_ssec             C   s8   | j  r | j p| j p| j S | j r0| j S dS d S )NF)ru   Zis_Pentium4Zis_PentiumMZis_Core2rd   Zis_AMD64)r,   r   r   r   r   {  s    zWin32CPUInfo._has_sse2c             C   s   | j  o| jd d dkS )Nr   r  r  r  r!  )r  r  r!  )rd   r   )r,   r   r   r   r     s    zWin32CPUInfo._has_3dnowc             C   s   | j  o| jd d dkS )Nr   r  r  r!  )r  r!  )rd   r   )r,   r   r   r   r     s    zWin32CPUInfo._has_3dnowext)$rF   rG   rH   r   r  rT   rU   rX   r  r  r  r  r  r  r   re   rr   r   rs   rv   rx   rz   r}   r|   r{   r~   r   r   r   r   r;   r   r   r   r   r   r   r   r   r   r    sB   (		r  linuxirixdarwinsunoswin32cygwinr   )r.  r   r   )r/  r   r   )r0  r   r   )r1  r   )rI   __all__r   r<   r>   sysr6   r   
subprocessr   r   r   r   r)   r*   rJ   r   r   r   r  r2   Zcpuinfor   r   r   r   r   <module>   sF   


	
 
	# D:.J 3