B
    òVbX  ã               @   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 d¡rÞeZnfej d¡ ròeZnRejdkreZn@ej d¡reZn,ej d¡r,eZne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©r   é   c          
   C   sp   yt | ƒ\}}W n6 tk
rF } ztjt|ƒt|d dS d }~X Y nX t |¡rht |¡|krhd|fS d|fS )N)Ú
stacklevel)FÚ TF)	r   ÚEnvironmentErrorÚwarningsÚwarnÚstrÚUserWarningÚosÚ	WIFEXITEDÚWEXITSTATUS)ÚcmdÚsuccessful_statusr   ZstatusÚoutputÚe© r   ú6lib/python3.7/site-packages/numpy/distutils/cpuinfo.pyÚ	getoutput   s    r   c             K   s@   i }x6|D ].}t || | |d d\}}|r
| ¡ ||< 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| ¡ D ]}| ¡ 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„ | |d¡D ƒ}t|ƒdkr|d ||d < qW |S )Nr   )r   r   c             S   s   g | ]}|  ¡ ‘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   |  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   ó    z)CPUInfoBase.__getattr__.<locals>.<lambda>c               S   s   d S )Nr   r   r   r   r   r1   R   r2   )Ú
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  ¡ d }t d¡ |¡ d¡}|S )Nr   z(\d+)bitr   )ÚplatformZarchitectureÚreÚcompileÚsearchÚgroup)r,   ZabitsZnbitsr   r   r   Z__get_nbitsX   s    zCPUInfoBase.__get_nbitsc             C   s   |   ¡ dkS )NZ32)Ú_CPUInfoBase__get_nbits)r,   r   r   r   Ú	_is_32bit]   s    zCPUInfoBase._is_32bitc             C   s   |   ¡ dkS )NZ64)rB   )r,   r   r   r   Ú	_is_64bit`   s    zCPUInfoBase._is_64bitN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r.   r;   r<   rB   rC   rD   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| ¡ |d d< ytdƒ}W n6 tk
rv } ztjt|ƒtdd W d d }~X Y njX x^|D ]V}dd„ | 	d	d
¡D ƒ}t
|ƒdkr¦q~|\}}	|r¾||d krÈ| i ¡ |	|d |< q~W | ¡  || j_ d S )Nzuname -mr   Zuname_mz/proc/cpuinfor#   )r   c             S   s   g | ]}|  ¡ ‘qS r   )r   )r    r!   r   r   r   r"   t   s    z)LinuxCPUInfo.__init__.<locals>.<listcomp>ú:r   éÿÿÿÿ)r   r   r   Úopenr   r	   r
   r   r   r$   r%   ÚappendÚcloseÚ	__class__)
r,   r   r   r   Zfor   r   Z
name_valuer:   Úvaluer   r   r   Ú__init__g   s(    
&

zLinuxCPUInfo.__init__c             C   s   d S )Nr   )r,   r   r   r   Ú	_not_impl~   r2   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   |   ¡ o| jd d dkS )Nr   ÚmodelÚ2)rU   r   )r,   r   r   r   Ú_is_AthlonK6_2…   s    zLinuxCPUInfo._is_AthlonK6_2c             C   s   |   ¡ o| jd d dkS )Nr   rV   Ú3)rU   r   )r,   r   r   r   Ú_is_AthlonK6_3ˆ   s    zLinuxCPUInfo._is_AthlonK6_3c             C   s   t  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  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  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   |   ¡ 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  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  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  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  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   ZAlpha)r   )r,   r   r   r   Ú	_is_Alphaª   s    zLinuxCPUInfo._is_Alphac             C   s   |   ¡ 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   |   ¡ o| jd d dkS )Nr   z	cpu modelZEV5)rh   r   )r,   r   r   r   Ú_is_EV5°   s    zLinuxCPUInfo._is_EV5c             C   s   |   ¡ o| jd d dkS )Nr   z	cpu modelZEV56)rh   r   )r,   r   r   r   Ú_is_EV56³   s    zLinuxCPUInfo._is_EV56c             C   s   |   ¡ o| jd d dkS )Nr   z	cpu modelZPCA56)rh   r   )r,   r   r   r   Ú	_is_PCA56¶   s    zLinuxCPUInfo._is_PCA56c             C   s   | j d d dkS )Nr   rS   Ú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   |   ¡ 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   |   ¡ o| jd d dkS )Nr   z
cpu familyÚ6)rq   r   )r,   r   r   r   Ú_is_i686Ç   s    zLinuxCPUInfo._is_i686c             C   s   t  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  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  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  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  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  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  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  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   |   ¡ o|  ¡ S )N)Zis_PentiumIVÚhas_sse3)r,   r   r   r   Ú_is_Prescottê   s    zLinuxCPUInfo._is_Prescottc             C   sX   |   ¡ oV| jd d dks,| jd d dkoV|  ¡ oV|  ¡  oVt d| jd d ¡d k	S )Nr   z
cpu familyrs   r`   z	.*?\blm\bÚflags)rq   r   r}   Z	has_ssse3r>   r[   )r,   r   r   r   Ú
_is_Noconaí   s
    zLinuxCPUInfo._is_Noconac             C   s*   |   ¡ o(|  ¡ o(t d| jd d ¡d k	S )Nz.*?Core\(TM\)2\br   z
model name)Zis_64bitrq   r>   r[   r   )r,   r   r   r   Ú	_is_Core2ô   s    zLinuxCPUInfo._is_Core2c             C   s   t  d| jd d ¡d k	S )Nz.*?Itanium\br   r_   )r>   r[   r   )r,   r   r   r   Ú_is_Itaniumù   s    zLinuxCPUInfo._is_Itaniumc             C   s   t  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  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  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  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  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  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  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  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)4rE   rF   rG   r   rQ   rR   rU   rX   rZ   r\   r]   r^   rb   rc   rd   re   rf   rg   ri   rj   rk   rl   Ú_is_i386rn   ro   rr   rt   ru   rv   rw   rx   ry   rz   r{   r|   r~   r€   r   r‚   r„   Z_is_Xeonr…   r<   r‡   rˆ   r‰   rŠ   r‹   rŒ   r   rŽ   r   r   r   r   r   rI   c   sb   rI   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)   rO   )r,   r   r   r   r   rQ   )  s
    
zIRIXCPUInfo.__init__c             C   s   d S )Nr   )r,   r   r   r   rR   0  r2   zIRIXCPUInfo._not_implc             C   s   | 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 dd¡ƒS )Nr”   r   )Úintr   r–   )r,   r   r   r   r<   5  s    zIRIXCPUInfo._getNCPUsc             C   s    | j  d¡ ¡ d  ¡ d| kS )NZ
PROCESSORSr   zr%s)r   r–   r$   Úlower)r,   Únr   r   r   Z	__cputype8  s    zIRIXCPUInfo.__cputypec             C   s
   |   d¡S )NiÐ  )Ú_IRIXCPUInfo__cputype)r,   r   r   r   Ú	_is_r2000:  r2   zIRIXCPUInfo._is_r2000c             C   s
   |   d¡S )Ni¸  )rš   )r,   r   r   r   Ú	_is_r3000;  r2   zIRIXCPUInfo._is_r3000c             C   s
   |   d¡S )Ni<  )rš   )r,   r   r   r   Ú	_is_r3900<  r2   zIRIXCPUInfo._is_r3900c             C   s
   |   d¡S )Ni   )rš   )r,   r   r   r   Ú	_is_r4000=  r2   zIRIXCPUInfo._is_r4000c             C   s
   |   d¡S )Ni  )rš   )r,   r   r   r   Ú	_is_r4100>  r2   zIRIXCPUInfo._is_r4100c             C   s
   |   d¡S )NiÌ  )rš   )r,   r   r   r   Ú	_is_r4300?  r2   zIRIXCPUInfo._is_r4300c             C   s
   |   d¡S )Ni0  )rš   )r,   r   r   r   Ú	_is_r4400@  r2   zIRIXCPUInfo._is_r4400c             C   s
   |   d¡S )Niø  )rš   )r,   r   r   r   Ú	_is_r4600A  r2   zIRIXCPUInfo._is_r4600c             C   s
   |   d¡S )Ni*  )rš   )r,   r   r   r   Ú	_is_r4650B  r2   zIRIXCPUInfo._is_r4650c             C   s
   |   d¡S )Niˆ  )rš   )r,   r   r   r   Ú	_is_r5000C  r2   zIRIXCPUInfo._is_r5000c             C   s
   |   d¡S )Nip  )rš   )r,   r   r   r   Ú	_is_r6000D  r2   zIRIXCPUInfo._is_r6000c             C   s
   |   d¡S )Ni@  )rš   )r,   r   r   r   Ú	_is_r8000E  r2   zIRIXCPUInfo._is_r8000c             C   s
   |   d¡S )Ni'  )rš   )r,   r   r   r   Ú
_is_r10000F  r2   zIRIXCPUInfo._is_r10000c             C   s
   |   d¡S )Nià.  )rš   )r,   r   r   r   Ú
_is_r12000G  r2   zIRIXCPUInfo._is_r12000c             C   s
   |   d¡S )NZorion)rš   )r,   r   r   r   Ú
_is_rorionH  r2   zIRIXCPUInfo._is_rorionc             C   s&   y| 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  d¡ ¡ d| kS )Nrª   zip%s)r   r–   r˜   )r,   r™   r   r   r   Ú	__machineM  s    zIRIXCPUInfo.__machinec             C   s
   |   d¡S )Né   )Ú_IRIXCPUInfo__machine)r,   r   r   r   Ú_is_IP19O  r2   zIRIXCPUInfo._is_IP19c             C   s
   |   d¡S )Né   )r®   )r,   r   r   r   Ú_is_IP20P  r2   zIRIXCPUInfo._is_IP20c             C   s
   |   d¡S )Né   )r®   )r,   r   r   r   Ú_is_IP21Q  r2   zIRIXCPUInfo._is_IP21c             C   s
   |   d¡S )Né   )r®   )r,   r   r   r   Ú_is_IP22R  r2   zIRIXCPUInfo._is_IP22c             C   s   |   d¡o|  ¡ S )Nr´   )r®   rž   )r,   r   r   r   Ú_is_IP22_4kS  r2   zIRIXCPUInfo._is_IP22_4kc             C   s   |   d¡o|  ¡ S )Nr´   )r®   r¤   )r,   r   r   r   Ú_is_IP22_5kT  r2   zIRIXCPUInfo._is_IP22_5kc             C   s
   |   d¡S )Né   )r®   )r,   r   r   r   Ú_is_IP24U  r2   zIRIXCPUInfo._is_IP24c             C   s
   |   d¡S )Né   )r®   )r,   r   r   r   Ú_is_IP25V  r2   zIRIXCPUInfo._is_IP25c             C   s
   |   d¡S )Né   )r®   )r,   r   r   r   Ú_is_IP26W  r2   zIRIXCPUInfo._is_IP26c             C   s
   |   d¡S )Né   )r®   )r,   r   r   r   Ú_is_IP27X  r2   zIRIXCPUInfo._is_IP27c             C   s
   |   d¡S )Né   )r®   )r,   r   r   r   Ú_is_IP28Y  r2   zIRIXCPUInfo._is_IP28c             C   s
   |   d¡S )Né   )r®   )r,   r   r   r   Ú_is_IP30Z  r2   zIRIXCPUInfo._is_IP30c             C   s
   |   d¡S )Né    )r®   )r,   r   r   r   Ú_is_IP32[  r2   zIRIXCPUInfo._is_IP32c             C   s   |   d¡o|  ¡ S )NrÄ   )r®   r¤   )r,   r   r   r   Ú_is_IP32_5k\  r2   zIRIXCPUInfo._is_IP32_5kc             C   s   |   d¡o|  ¡ S )NrÄ   )r®   r§   )r,   r   r   r   Ú_is_IP32_10k]  r2   zIRIXCPUInfo._is_IP32_10k))rE   rF   rG   r   rQ   rR   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)   rO   )r,   r   r   r   r   rQ   c  s    
zDarwinCPUInfo.__init__c             C   s   d S )Nr   )r,   r   r   r   rR   k  r2   zDarwinCPUInfo._not_implc             C   s   t | jd  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É   Z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
   |   d¡S )NiY  )Ú_DarwinCPUInfo__machine)r,   r   r   r   Ú
_is_ppc601z  r2   zDarwinCPUInfo._is_ppc601c             C   s
   |   d¡S )NiZ  )rÐ   )r,   r   r   r   Ú
_is_ppc602{  r2   zDarwinCPUInfo._is_ppc602c             C   s
   |   d¡S )Ni[  )rÐ   )r,   r   r   r   Ú
_is_ppc603|  r2   zDarwinCPUInfo._is_ppc603c             C   s
   |   d¡S )NZ603e)rÐ   )r,   r   r   r   Ú_is_ppc603e}  r2   zDarwinCPUInfo._is_ppc603ec             C   s
   |   d¡S )Ni\  )rÐ   )r,   r   r   r   Ú
_is_ppc604~  r2   zDarwinCPUInfo._is_ppc604c             C   s
   |   d¡S )NZ604e)rÐ   )r,   r   r   r   Ú_is_ppc604e  r2   zDarwinCPUInfo._is_ppc604ec             C   s
   |   d¡S )Nil  )rÐ   )r,   r   r   r   Ú
_is_ppc620€  r2   zDarwinCPUInfo._is_ppc620c             C   s
   |   d¡S )Niv  )rÐ   )r,   r   r   r   Ú
_is_ppc630  r2   zDarwinCPUInfo._is_ppc630c             C   s
   |   d¡S )Niä  )rÐ   )r,   r   r   r   Ú
_is_ppc740‚  r2   zDarwinCPUInfo._is_ppc740c             C   s
   |   d¡S )Niè  )rÐ   )r,   r   r   r   Ú_is_ppc7400ƒ  r2   zDarwinCPUInfo._is_ppc7400c             C   s
   |   d¡S )Ni  )rÐ   )r,   r   r   r   Ú_is_ppc7450„  r2   zDarwinCPUInfo._is_ppc7450c             C   s
   |   d¡S )Niî  )rÐ   )r,   r   r   r   Ú
_is_ppc750…  r2   zDarwinCPUInfo._is_ppc750c             C   s
   |   d¡S )Ni“  )rÐ   )r,   r   r   r   Ú
_is_ppc403†  r2   zDarwinCPUInfo._is_ppc403c             C   s
   |   d¡S )Niù  )rÐ   )r,   r   r   r   Ú
_is_ppc505‡  r2   zDarwinCPUInfo._is_ppc505c             C   s
   |   d¡S )Ni!  )rÐ   )r,   r   r   r   Ú
_is_ppc801ˆ  r2   zDarwinCPUInfo._is_ppc801c             C   s
   |   d¡S )Ni5  )rÐ   )r,   r   r   r   Ú
_is_ppc821‰  r2   zDarwinCPUInfo._is_ppc821c             C   s
   |   d¡S )Ni7  )rÐ   )r,   r   r   r   Ú
_is_ppc823Š  r2   zDarwinCPUInfo._is_ppc823c             C   s
   |   d¡S )Ni\  )rÐ   )r,   r   r   r   Ú
_is_ppc860‹  r2   zDarwinCPUInfo._is_ppc860)rE   rF   rG   r   rQ   rR   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 d|¡}|r:| 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   rO   )r,   r   r   Úmr   r   r   rQ   ’  s    
zSunOSCPUInfo.__init__c             C   s   d S )Nr   )r,   r   r   r   rR   £  r2   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  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  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  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  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  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  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  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  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  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  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  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  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  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  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  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  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)rE   rF   rG   r   rQ   rR   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   sv  | j d k	rd S g }y&dd l}t dtj¡}| |j| j¡}d}xöy| ||¡}W n |j	k
rj   P Y qBX |d7 }| 
d|i¡ | ||¡}d}x y| ||¡\}	}
}W n |j	k
rÂ   P Y q”X |d }|
|d |	< |	dkr”| |
¡}|r”t| d¡ƒ|d d< t| d	¡ƒ|d d
< t| d¡ƒ|d d< q”W qBW W n. tk
rh } zt|dƒ W d d }~X Y 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	ProcessorrK   Z
IdentifierZFMLÚFamilyZMDLÚModelZSTPZSteppingz
(ignoring))r   Úwinregr>   r?   rƒ   ÚOpenKeyÚHKEY_LOCAL_MACHINEÚpkeyZEnumKeyÚerrorrM   Z	EnumValuer@   r—   rA   r+   ÚprintrO   )r,   r   r  ZprgxZchndZpnumÚprocZphndZpidxr:   rP   ZvtpeZsrchr   r   r   r   rQ   à  sD    

"zWin32CPUInfo.__init__c             C   s   d S )Nr   )r,   r   r   r   rR     r2   zWin32CPUInfo._not_implc             C   s   | j d d dkS )Nr   ÚVendorIdentifierrT   )r   )r,   r   r   r   rU     s    zWin32CPUInfo._is_AMDc             C   s   |   ¡ o| jd d dkS )Nr   r  é   )ra   r   )r,   r   r   r   Ú	_is_Am486  s    zWin32CPUInfo._is_Am486c             C   s   |   ¡ o| jd d dkS )Nr   r  r  )ra   r   )r,   r   r   r   Ú
_is_Am5x86  s    zWin32CPUInfo._is_Am5x86c             C   s,   |   ¡ o*| jd d dko*| jd d dkS )Nr   r  é   r  )r   r   r#   é   )ra   r   )r,   r   r   r   Ú	_is_AMDK5  s    zWin32CPUInfo._is_AMDK5c             C   s,   |   ¡ o*| jd d dko*| jd d dkS )Nr   r  r  r  )é   é   )ra   r   )r,   r   r   r   Ú	_is_AMDK6  s    zWin32CPUInfo._is_AMDK6c             C   s,   |   ¡ o*| jd d dko*| jd d dkS )Nr   r  r  r  é   )ra   r   )r,   r   r   r   Ú_is_AMDK6_2  s    zWin32CPUInfo._is_AMDK6_2c             C   s,   |   ¡ o*| jd d dko*| jd d dkS )Nr   r  r  r  é	   )ra   r   )r,   r   r   r   Ú_is_AMDK6_3!  s    zWin32CPUInfo._is_AMDK6_3c             C   s   |   ¡ o| jd d dkS )Nr   r  r  )ra   r   )r,   r   r   r   Ú	_is_AMDK7%  s    zWin32CPUInfo._is_AMDK7c             C   s   |   ¡ o| jd d dkS )Nr   r  é   )ra   r   )r,   r   r   r   rb   ,  s    zWin32CPUInfo._is_AMD64c             C   s   | j d d dkS )Nr   r  rm   )r   )r,   r   r   r   rn   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   ro   7  s    zWin32CPUInfo._is_i486c             C   s   |   ¡ o| jd d dkS )Nr   r  r  )rq   r   )r,   r   r   r   rr   :  s    zWin32CPUInfo._is_i586c             C   s   |   ¡ o| jd d dkS )Nr   r  r  )rq   r   )r,   r   r   r   rt   =  s    zWin32CPUInfo._is_i686c             C   s   |   ¡ o| jd d dkS )Nr   r  r  )rq   r   )r,   r   r   r   rv   @  s    zWin32CPUInfo._is_Pentiumc             C   s,   |   ¡ o*| jd d dko*| jd d dkS )Nr   r  r  r  r  )rq   r   )r,   r   r   r   ry   C  s    zWin32CPUInfo._is_PentiumMMXc             C   s,   |   ¡ o*| jd d dko*| jd d dkS )Nr   r  r  r  r   )rq   r   )r,   r   r   r   rx   G  s    zWin32CPUInfo._is_PentiumProc             C   s,   |   ¡ o*| jd d dko*| jd d dkS )Nr   r  r  r  )r  r  r  )rq   r   )r,   r   r   r   rw   K  s    zWin32CPUInfo._is_PentiumIIc             C   s,   |   ¡ o*| jd d dko*| jd d dkS )Nr   r  r  r  )r  r  r  é
   é   )rq   r   )r,   r   r   r   rz   O  s    zWin32CPUInfo._is_PentiumIIIc             C   s   |   ¡ o| jd d dkS )Nr   r  r  )rq   r   )r,   r   r   r   r{   S  s    zWin32CPUInfo._is_PentiumIVc             C   s,   |   ¡ o*| jd d dko*| jd d dkS )Nr   r  r  r  )r  é   é   )rq   r   )r,   r   r   r   r|   V  s    zWin32CPUInfo._is_PentiumMc             C   s,   |   ¡ o*| jd d dko*| jd d dkS )Nr   r  r  r  )r  é   é   )rq   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`   |   ¡ r>| jd d dkr,| jd d dkp<| jd d dkS |  ¡ rX| jd d dkS dS d S )	Nr   r  r  r  r  )r  r  )r  r  r  F)rq   r   ra   )r,   r   r   r   r‰   f  s    $zWin32CPUInfo._has_mmxc             C   s„   |   ¡ r>| jd d dkr,| jd d dkp<| jd d dkS |  ¡ 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  )r  r  r  r  F)rq   r   ra   )r,   r   r   r   rŠ   o  s    zWin32CPUInfo._has_ssec             C   s8   |   ¡ r |  ¡ p|  ¡ p|  ¡ S |  ¡ r0|  ¡ S dS d S )NF)rq   Zis_Pentium4Zis_PentiumMZis_Core2ra   Zis_AMD64)r,   r   r   r   r‹   {  s    zWin32CPUInfo._has_sse2c             C   s   |   ¡ o| jd d dkS )Nr   r  )r  r  r  )ra   r   )r,   r   r   r   rŽ   „  s    zWin32CPUInfo._has_3dnowc             C   s   |   ¡ o| jd d dkS )Nr   r  )r  r  )ra   r   )r,   r   r   r   r   ‡  s    zWin32CPUInfo._has_3dnowext)$rE   rF   rG   r   r  rQ   rR   rU   r  r  r  r  r  r  r  rb   rn   r   ro   rr   rt   rv   ry   rx   rw   rz   r{   r|   r   r…   r<   r‰   rŠ   r‹   rŽ   r   r   r   r   r   r  Ø  sB   (		r  ZlinuxZirixÚdarwinZsunosZwin32Úcygwin)r   r   )r   r   )r   r   )r   r   )rH   Ú__all__r   r=   r>   Úsysr7   r	   Ú
subprocessr   r   r   r   r)   r*   rI   r‘   rÈ   rã   r  r3   Zcpuinfor   r   r   r   r   Ú<module>   sF   


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