B
    ôàn\çY  ã               @   sŽ  d Z ddlmZmZmZ dgZddlZddlZddlZddl	Z	ej
d dkrZddlmZ nddlm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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G dd„ deƒZej d¡reZnfej d¡r2eZnRejd krDeZn@ej d!¡rXeZn,ej d"¡rle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

é    )ÚdivisionÚabsolute_importÚprint_functionÚcpuNé   )Úgetstatusoutput)Úget_exception©r   é   c             C   sh   yt | ƒ\}}W n. tk
r>   tƒ }tjt|ƒt|d dS X t |¡r`t 	|¡|kr`d|fS d|fS )N)Ú
stacklevel)FÚ TF)
r   ÚEnvironmentErrorr   Ú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_line4   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>A   s    z*key_value_from_command.<locals>.<listcomp>é   r   )r$   ÚsplitÚlen)r   Úsepr   r   Údr#   Úlr   r   r   Úkey_value_from_command<   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_callK   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   )r2   Úattrr   r   r   Ú<lambda>V   s    z)CPUInfoBase.__getattr__.<locals>.<lambda>c               S   s   d S )Nr   r   r   r   r   r6   X   s    )Ú
startswithÚhasattrÚgetattrÚ
isinstanceÚtypesÚ
MethodTyper3   ÚAttributeError)r1   Únamer5   r   r   r   Ú__getattr__Q   s    
zCPUInfoBase.__getattr__c             C   s   dS )Nr
   r   )r1   r   r   r   Ú	_getNCPUs[   s    zCPUInfoBase._getNCPUsc             C   s&   t  ¡ d }t d¡ |¡ d¡}|S )Nr   z(\d+)bitr
   )ÚplatformZarchitectureÚreÚcompileÚsearchÚgroup)r1   ZabitsZnbitsr   r   r   Z__get_nbits^   s    zCPUInfoBase.__get_nbitsc             C   s   |   ¡ dkS )NZ32)Ú_CPUInfoBase__get_nbits)r1   r   r   r   Ú	_is_32bitc   s    zCPUInfoBase._is_32bitc             C   s   |   ¡ dkS )NZ64)rF   )r1   r   r   r   Ú	_is_64bitf   s    zCPUInfoBase._is_64bitN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r3   r?   r@   rF   rG   rH   r   r   r   r   r/   F   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 n. tk
rn   tƒ }tjt|ƒt	dd Y njX x^|D ]V}dd„ | 
d	d
¡D ƒ}t|ƒdkržqv|\}}	|r¶||d krÀ| i ¡ |	|d |< qvW | ¡  || 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'   {   s    z)LinuxCPUInfo.__init__.<locals>.<listcomp>ú:r
   éÿÿÿÿ)r   r   r   Úopenr   r   r   r   r   r   r)   r*   ÚappendÚcloseÚ	__class__)
r1   r   r    r   Zfor   r#   Z
name_valuer>   Úvaluer   r   r   Ú__init__m   s*    


zLinuxCPUInfo.__init__c             C   s   d S )Nr   )r1   r   r   r   Ú	_not_impl…   s    zLinuxCPUInfo._not_implc             C   s   | j d d dkS )Nr   Ú	vendor_idÚAuthenticAMD)r   )r1   r   r   r   Ú_is_AMD‰   s    zLinuxCPUInfo._is_AMDc             C   s   |   ¡ o| jd d dkS )Nr   ÚmodelÚ2)rY   r   )r1   r   r   r   Ú_is_AthlonK6_2Œ   s    zLinuxCPUInfo._is_AthlonK6_2c             C   s   |   ¡ o| jd d dkS )Nr   rZ   Ú3)rY   r   )r1   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)rB   Úmatchr   )r1   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)rB   r_   r   )r1   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)rB   r_   r   )r1   r   r   r   Ú_is_AthlonMP˜   s    zLinuxCPUInfo._is_AthlonMPc             C   s   |   ¡ o| jd d dkS )Nr   ÚfamilyÚ15)Úis_AMDr   )r1   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)rB   r_   r   )r1   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)rB   r_   r   )r1   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)rB   r_   r   )r1   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)rB   r_   r   )r1   r   r   r   Ú
_is_Hammer«   s    zLinuxCPUInfo._is_Hammerc             C   s   | j d d dkS )Nr   r   ZAlpha)r   )r1   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   )r1   r   r   r   Ú_is_EV4´   s    zLinuxCPUInfo._is_EV4c             C   s   |   ¡ o| jd d dkS )Nr   z	cpu modelZEV5)rl   r   )r1   r   r   r   Ú_is_EV5·   s    zLinuxCPUInfo._is_EV5c             C   s   |   ¡ o| jd d dkS )Nr   z	cpu modelZEV56)rl   r   )r1   r   r   r   Ú_is_EV56º   s    zLinuxCPUInfo._is_EV56c             C   s   |   ¡ o| jd d dkS )Nr   z	cpu modelZPCA56)rl   r   )r1   r   r   r   Ú	_is_PCA56½   s    zLinuxCPUInfo._is_PCA56c             C   s   | j d d dkS )Nr   rW   ÚGenuineIntel)r   )r1   r   r   r   Ú	_is_IntelÅ   s    zLinuxCPUInfo._is_Intelc             C   s   | j d d dkS )Nr   r   Zi486)r   )r1   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   )r1   r   r   r   Ú_is_i586Ë   s    zLinuxCPUInfo._is_i586c             C   s   |   ¡ o| jd d dkS )Nr   z
cpu familyÚ6)ru   r   )r1   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)rB   r_   r   )r1   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)rB   r_   r   )r1   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)rB   r_   r   )r1   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)rB   r_   r   )r1   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)rB   r_   r   )r1   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)rB   r_   r   )r1   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)rB   r_   r   )r1   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)rB   r_   r   )r1   r   r   r   Ú_is_PentiumMí   s    zLinuxCPUInfo._is_PentiumMc             C   s   |   ¡ o|  ¡ S )N)Zis_PentiumIVÚhas_sse3)r1   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 familyrw   rd   z	.*?\blm\bÚflags)ru   r   r   Z	has_ssse3rB   r_   )r1   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_64bitru   rB   r_   r   )r1   r   r   r   Ú	_is_Core2û   s    zLinuxCPUInfo._is_Core2c             C   s   t  d| jd d ¡d k	S )Nz.*?Itanium\br   rc   )rB   r_   r   )r1   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)rB   r_   r   Ú
IGNORECASE)r1   r   r   r   Ú_is_XEON  s    zLinuxCPUInfo._is_XEONc             C   s   t | jƒdkS )Nr
   )r*   r   )r1   r   r   r   Ú_is_singleCPU  s    zLinuxCPUInfo._is_singleCPUc             C   s
   t | jƒS )N)r*   r   )r1   r   r   r   r@     s    zLinuxCPUInfo._getNCPUsc             C   s   | j d d dkS )Nr   Zfdiv_bugÚyes)r   )r1   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   )r1   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ƒ   )rB   r_   r   )r1   r   r   r   Ú_has_mmx  s    zLinuxCPUInfo._has_mmxc             C   s   t  d| jd d ¡d k	S )Nz
.*?\bsse\br   rƒ   )rB   r_   r   )r1   r   r   r   Ú_has_sse  s    zLinuxCPUInfo._has_ssec             C   s   t  d| jd d ¡d k	S )Nz.*?\bsse2\br   rƒ   )rB   r_   r   )r1   r   r   r   Ú	_has_sse2  s    zLinuxCPUInfo._has_sse2c             C   s   t  d| jd d ¡d k	S )Nz
.*?\bpni\br   rƒ   )rB   r_   r   )r1   r   r   r   Ú	_has_sse3!  s    zLinuxCPUInfo._has_sse3c             C   s   t  d| jd d ¡d k	S )Nz.*?\bssse3\br   rƒ   )rB   r_   r   )r1   r   r   r   Ú
_has_ssse3$  s    zLinuxCPUInfo._has_ssse3c             C   s   t  d| jd d ¡d k	S )Nz.*?\b3dnow\br   rƒ   )rB   r_   r   )r1   r   r   r   Ú
_has_3dnow'  s    zLinuxCPUInfo._has_3dnowc             C   s   t  d| jd d ¡d k	S )Nz.*?\b3dnowext\br   rƒ   )rB   r_   r   )r1   r   r   r   Ú_has_3dnowext*  s    zLinuxCPUInfo._has_3dnowext)4rI   rJ   rK   r   rU   rV   rY   r\   r^   r`   ra   rb   rf   rg   rh   ri   rj   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   rM   i   sb   rM   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.   rS   )r1   r   r   r   r   rU   0  s
    
zIRIXCPUInfo.__init__c             C   s   d S )Nr   )r1   r   r   r   rV   7  s    zIRIXCPUInfo._not_implc             C   s   | j  d¡dkS )NÚNUM_PROCESSORSÚ1)r   Úget)r1   r   r   r   r‰   9  s    zIRIXCPUInfo._is_singleCPUc             C   s   t | j dd¡ƒS )Nr˜   r
   )Úintr   rš   )r1   r   r   r   r@   <  s    zIRIXCPUInfo._getNCPUsc             C   s    | j  d¡ ¡ d  ¡ d| kS )NZ
PROCESSORSr   zr%s)r   rš   r)   Úlower)r1   Únr   r   r   Z	__cputype?  s    zIRIXCPUInfo.__cputypec             C   s
   |   d¡S )NiÐ  )Ú_IRIXCPUInfo__cputype)r1   r   r   r   Ú	_is_r2000A  s    zIRIXCPUInfo._is_r2000c             C   s
   |   d¡S )Ni¸  )rž   )r1   r   r   r   Ú	_is_r3000B  s    zIRIXCPUInfo._is_r3000c             C   s
   |   d¡S )Ni<  )rž   )r1   r   r   r   Ú	_is_r3900C  s    zIRIXCPUInfo._is_r3900c             C   s
   |   d¡S )Ni   )rž   )r1   r   r   r   Ú	_is_r4000D  s    zIRIXCPUInfo._is_r4000c             C   s
   |   d¡S )Ni  )rž   )r1   r   r   r   Ú	_is_r4100E  s    zIRIXCPUInfo._is_r4100c             C   s
   |   d¡S )NiÌ  )rž   )r1   r   r   r   Ú	_is_r4300F  s    zIRIXCPUInfo._is_r4300c             C   s
   |   d¡S )Ni0  )rž   )r1   r   r   r   Ú	_is_r4400G  s    zIRIXCPUInfo._is_r4400c             C   s
   |   d¡S )Niø  )rž   )r1   r   r   r   Ú	_is_r4600H  s    zIRIXCPUInfo._is_r4600c             C   s
   |   d¡S )Ni*  )rž   )r1   r   r   r   Ú	_is_r4650I  s    zIRIXCPUInfo._is_r4650c             C   s
   |   d¡S )Niˆ  )rž   )r1   r   r   r   Ú	_is_r5000J  s    zIRIXCPUInfo._is_r5000c             C   s
   |   d¡S )Nip  )rž   )r1   r   r   r   Ú	_is_r6000K  s    zIRIXCPUInfo._is_r6000c             C   s
   |   d¡S )Ni@  )rž   )r1   r   r   r   Ú	_is_r8000L  s    zIRIXCPUInfo._is_r8000c             C   s
   |   d¡S )Ni'  )rž   )r1   r   r   r   Ú
_is_r10000M  s    zIRIXCPUInfo._is_r10000c             C   s
   |   d¡S )Nià.  )rž   )r1   r   r   r   Ú
_is_r12000N  s    zIRIXCPUInfo._is_r12000c             C   s
   |   d¡S )NZorion)rž   )r1   r   r   r   Ú
_is_rorionO  s    zIRIXCPUInfo._is_rorionc             C   s&   y| j  d¡S  tk
r    Y nX d S )NÚMACHINE)r   rš   r0   )r1   r   r   r   Úget_ipQ  s      zIRIXCPUInfo.get_ipc             C   s   | j  d¡ ¡ d| kS )Nr®   zip%s)r   rš   rœ   )r1   r   r   r   r   Ú	__machineT  s    zIRIXCPUInfo.__machinec             C   s
   |   d¡S )Né   )Ú_IRIXCPUInfo__machine)r1   r   r   r   Ú_is_IP19V  s    zIRIXCPUInfo._is_IP19c             C   s
   |   d¡S )Né   )r²   )r1   r   r   r   Ú_is_IP20W  s    zIRIXCPUInfo._is_IP20c             C   s
   |   d¡S )Né   )r²   )r1   r   r   r   Ú_is_IP21X  s    zIRIXCPUInfo._is_IP21c             C   s
   |   d¡S )Né   )r²   )r1   r   r   r   Ú_is_IP22Y  s    zIRIXCPUInfo._is_IP22c             C   s   |   d¡o|  ¡ S )Nr¸   )r²   r¢   )r1   r   r   r   Ú_is_IP22_4kZ  s    zIRIXCPUInfo._is_IP22_4kc             C   s   |   d¡o|  ¡ S )Nr¸   )r²   r¨   )r1   r   r   r   Ú_is_IP22_5k[  s    zIRIXCPUInfo._is_IP22_5kc             C   s
   |   d¡S )Né   )r²   )r1   r   r   r   Ú_is_IP24\  s    zIRIXCPUInfo._is_IP24c             C   s
   |   d¡S )Né   )r²   )r1   r   r   r   Ú_is_IP25]  s    zIRIXCPUInfo._is_IP25c             C   s
   |   d¡S )Né   )r²   )r1   r   r   r   Ú_is_IP26^  s    zIRIXCPUInfo._is_IP26c             C   s
   |   d¡S )Né   )r²   )r1   r   r   r   Ú_is_IP27_  s    zIRIXCPUInfo._is_IP27c             C   s
   |   d¡S )Né   )r²   )r1   r   r   r   Ú_is_IP28`  s    zIRIXCPUInfo._is_IP28c             C   s
   |   d¡S )Né   )r²   )r1   r   r   r   Ú_is_IP30a  s    zIRIXCPUInfo._is_IP30c             C   s
   |   d¡S )Né    )r²   )r1   r   r   r   Ú_is_IP32b  s    zIRIXCPUInfo._is_IP32c             C   s   |   d¡o|  ¡ S )NrÈ   )r²   r¨   )r1   r   r   r   Ú_is_IP32_5kc  s    zIRIXCPUInfo._is_IP32_5kc             C   s   |   d¡o|  ¡ S )NrÈ   )r²   r«   )r1   r   r   r   Ú_is_IP32_10kd  s    zIRIXCPUInfo._is_IP32_10k))rI   rJ   rK   r   rU   rV   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.   rS   )r1   r   r   r   r   rU   j  s    
zDarwinCPUInfo.__init__c             C   s   d S )Nr   )r1   r   r   r   rV   r  s    zDarwinCPUInfo._not_implc             C   s   t | jd  dd¡ƒS )NrÐ   zhw.ncpur
   )r›   r   rš   )r1   r   r   r   r@   t  s    zDarwinCPUInfo._getNCPUsc             C   s   | j d d dkS )NrÐ   z
hw.machinezPower Macintosh)r   )r1   r   r   r   Ú_is_Power_Macintoshw  s    z!DarwinCPUInfo._is_Power_Macintoshc             C   s   | j d dkS )NrÍ   Úi386)r   )r1   r   r   r   r”   z  s    zDarwinCPUInfo._is_i386c             C   s   | j d dkS )NrÍ   Zppc)r   )r1   r   r   r   Ú_is_ppc|  s    zDarwinCPUInfo._is_ppcc             C   s   | j d d| kS )NrÎ   zppc%s)r   )r1   r   r   r   r   r°     s    zDarwinCPUInfo.__machinec             C   s
   |   d¡S )NiY  )Ú_DarwinCPUInfo__machine)r1   r   r   r   Ú
_is_ppc601  s    zDarwinCPUInfo._is_ppc601c             C   s
   |   d¡S )NiZ  )rÔ   )r1   r   r   r   Ú
_is_ppc602‚  s    zDarwinCPUInfo._is_ppc602c             C   s
   |   d¡S )Ni[  )rÔ   )r1   r   r   r   Ú
_is_ppc603ƒ  s    zDarwinCPUInfo._is_ppc603c             C   s
   |   d¡S )NZ603e)rÔ   )r1   r   r   r   Ú_is_ppc603e„  s    zDarwinCPUInfo._is_ppc603ec             C   s
   |   d¡S )Ni\  )rÔ   )r1   r   r   r   Ú
_is_ppc604…  s    zDarwinCPUInfo._is_ppc604c             C   s
   |   d¡S )NZ604e)rÔ   )r1   r   r   r   Ú_is_ppc604e†  s    zDarwinCPUInfo._is_ppc604ec             C   s
   |   d¡S )Nil  )rÔ   )r1   r   r   r   Ú
_is_ppc620‡  s    zDarwinCPUInfo._is_ppc620c             C   s
   |   d¡S )Niv  )rÔ   )r1   r   r   r   Ú
_is_ppc630ˆ  s    zDarwinCPUInfo._is_ppc630c             C   s
   |   d¡S )Niä  )rÔ   )r1   r   r   r   Ú
_is_ppc740‰  s    zDarwinCPUInfo._is_ppc740c             C   s
   |   d¡S )Niè  )rÔ   )r1   r   r   r   Ú_is_ppc7400Š  s    zDarwinCPUInfo._is_ppc7400c             C   s
   |   d¡S )Ni  )rÔ   )r1   r   r   r   Ú_is_ppc7450‹  s    zDarwinCPUInfo._is_ppc7450c             C   s
   |   d¡S )Niî  )rÔ   )r1   r   r   r   Ú
_is_ppc750Œ  s    zDarwinCPUInfo._is_ppc750c             C   s
   |   d¡S )Ni“  )rÔ   )r1   r   r   r   Ú
_is_ppc403  s    zDarwinCPUInfo._is_ppc403c             C   s
   |   d¡S )Niù  )rÔ   )r1   r   r   r   Ú
_is_ppc505Ž  s    zDarwinCPUInfo._is_ppc505c             C   s
   |   d¡S )Ni!  )rÔ   )r1   r   r   r   Ú
_is_ppc801  s    zDarwinCPUInfo._is_ppc801c             C   s
   |   d¡S )Ni5  )rÔ   )r1   r   r   r   Ú
_is_ppc821  s    zDarwinCPUInfo._is_ppc821c             C   s
   |   d¡S )Ni7  )rÔ   )r1   r   r   r   Ú
_is_ppc823‘  s    zDarwinCPUInfo._is_ppc823c             C   s
   |   d¡S )Ni\  )rÔ   )r1   r   r   r   Ú
_is_ppc860’  s    zDarwinCPUInfo._is_ppc860)rI   rJ   rK   r   rU   rV   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Ì   g  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$   rB   r_   rE   rS   )r1   r   r#   Úmr   r   r   rU   ™  s    
zSunOSCPUInfo.__init__c             C   s   d S )Nr   )r1   r   r   r   rV   ª  s    zSunOSCPUInfo._not_implc             C   s   | j d dkS )Nrê   rÒ   )r   )r1   r   r   r   r”   ¬  s    zSunOSCPUInfo._is_i386c             C   s   | j d dkS )Nrê   Zsparc)r   )r1   r   r   r   Ú	_is_sparc®  s    zSunOSCPUInfo._is_sparcc             C   s   | j d dkS )Nrê   Úsparcv9)r   )r1   r   r   r   Ú_is_sparcv9°  s    zSunOSCPUInfo._is_sparcv9c             C   s   t | jd  dd¡ƒS )Nrë   ZNumCPUr
   )r›   r   rš   )r1   r   r   r   r@   ³  s    zSunOSCPUInfo._getNCPUsc             C   s   | j d dkS )NrÍ   Zsun4)r   )r1   r   r   r   Ú_is_sun4¶  s    zSunOSCPUInfo._is_sun4c             C   s   t  d| jd ¡d k	S )NZSUNWré   )rB   r_   r   )r1   r   r   r   Ú_is_SUNW¹  s    zSunOSCPUInfo._is_SUNWc             C   s   t  d| jd ¡d k	S )Nz.*SPARCstation-5ré   )rB   r_   r   )r1   r   r   r   Ú_is_sparcstation5»  s    zSunOSCPUInfo._is_sparcstation5c             C   s   t  d| jd ¡d k	S )Nz	.*Ultra-1ré   )rB   r_   r   )r1   r   r   r   Ú
_is_ultra1½  s    zSunOSCPUInfo._is_ultra1c             C   s   t  d| jd ¡d k	S )Nz.*Ultra-250ré   )rB   r_   r   )r1   r   r   r   Ú_is_ultra250¿  s    zSunOSCPUInfo._is_ultra250c             C   s   t  d| jd ¡d k	S )Nz	.*Ultra-2ré   )rB   r_   r   )r1   r   r   r   Ú
_is_ultra2Á  s    zSunOSCPUInfo._is_ultra2c             C   s   t  d| jd ¡d k	S )Nz
.*Ultra-30ré   )rB   r_   r   )r1   r   r   r   Ú_is_ultra30Ã  s    zSunOSCPUInfo._is_ultra30c             C   s   t  d| jd ¡d k	S )Nz	.*Ultra-4ré   )rB   r_   r   )r1   r   r   r   Ú
_is_ultra4Å  s    zSunOSCPUInfo._is_ultra4c             C   s   t  d| jd ¡d k	S )Nz.*Ultra-5_10ré   )rB   r_   r   )r1   r   r   r   Ú_is_ultra5_10Ç  s    zSunOSCPUInfo._is_ultra5_10c             C   s   t  d| jd ¡d k	S )Nz	.*Ultra-5ré   )rB   r_   r   )r1   r   r   r   Ú
_is_ultra5É  s    zSunOSCPUInfo._is_ultra5c             C   s   t  d| jd ¡d k	S )Nz
.*Ultra-60ré   )rB   r_   r   )r1   r   r   r   Ú_is_ultra60Ë  s    zSunOSCPUInfo._is_ultra60c             C   s   t  d| jd ¡d k	S )Nz
.*Ultra-80ré   )rB   r_   r   )r1   r   r   r   Ú_is_ultra80Í  s    zSunOSCPUInfo._is_ultra80c             C   s   t  d| jd ¡d k	S )Nz.*Ultra-Enterpriseré   )rB   r_   r   )r1   r   r   r   Ú_is_ultraenterpriceÏ  s    z SunOSCPUInfo._is_ultraenterpricec             C   s   t  d| jd ¡d k	S )Nz.*Ultra-Enterprise-10000ré   )rB   r_   r   )r1   r   r   r   Ú_is_ultraenterprice10kÑ  s    z#SunOSCPUInfo._is_ultraenterprice10kc             C   s   t  d| jd ¡d k	S )Nz
.*Sun-Fireré   )rB   r_   r   )r1   r   r   r   Ú_is_sunfireÓ  s    zSunOSCPUInfo._is_sunfirec             C   s   t  d| jd ¡d k	S )Nz.*Ultraré   )rB   r_   r   )r1   r   r   r   Ú	_is_ultraÕ  s    zSunOSCPUInfo._is_ultrac             C   s   | j d dkS )Nrí   Zsparcv7)r   )r1   r   r   r   Ú_is_cpusparcv7Ø  s    zSunOSCPUInfo._is_cpusparcv7c             C   s   | j d dkS )Nrí   Zsparcv8)r   )r1   r   r   r   Ú_is_cpusparcv8Ú  s    zSunOSCPUInfo._is_cpusparcv8c             C   s   | j d dkS )Nrí   rð   )r   )r1   r   r   r   Ú_is_cpusparcv9Ü  s    zSunOSCPUInfo._is_cpusparcv9)rI   rJ   rK   r   rU   rV   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   sˆ  | j d k	rd S g }y>tjd dkr.dd l}ndd l}t dtj¡}| |j	| j
¡}d}xöy| ||¡}W n |jk
r‚   P Y qZX |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 qZW W n( tk
rz   tt ¡ d dƒ Y nX || j_ d S )Nr   r   zFfamily\s+(?P<FML>\d+)\s+model\s+(?P<MDL>\d+)\s+stepping\s+(?P<STP>\d+)r
   Z	ProcessorrO   Z
IdentifierZFMLÚFamilyZMDLÚModelZSTPZSteppingz
(ignoring))r   ÚsysÚversion_infoÚwinregÚ_winregrB   rC   r‡   ÚOpenKeyÚHKEY_LOCAL_MACHINEÚpkeyZEnumKeyÚerrorrQ   Z	EnumValuerD   r›   rE   r0   ÚprintÚexc_inforS   )r1   r   r
  ZprgxZchndZpnumÚprocZphndZpidxr>   rT   ZvtpeZsrchr   r   r   rU   ç  sH    


"zWin32CPUInfo.__init__c             C   s   d S )Nr   )r1   r   r   r   rV     s    zWin32CPUInfo._not_implc             C   s   | j d d dkS )Nr   ÚVendorIdentifierrX   )r   )r1   r   r   r   rY     s    zWin32CPUInfo._is_AMDc             C   s   |   ¡ o| jd d dkS )Nr   r  é   )re   r   )r1   r   r   r   Ú	_is_Am486  s    zWin32CPUInfo._is_Am486c             C   s   |   ¡ o| jd d dkS )Nr   r  r  )re   r   )r1   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(   r   )re   r   )r1   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  )é   é   )re   r   )r1   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  é   )re   r   )r1   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  é	   )re   r   )r1   r   r   r   Ú_is_AMDK6_3+  s    zWin32CPUInfo._is_AMDK6_3c             C   s   |   ¡ o| jd d dkS )Nr   r  r  )re   r   )r1   r   r   r   Ú	_is_AMDK7/  s    zWin32CPUInfo._is_AMDK7c             C   s   |   ¡ o| jd d dkS )Nr   r  é   )re   r   )r1   r   r   r   rf   6  s    zWin32CPUInfo._is_AMD64c             C   s   | j d d dkS )Nr   r  rq   )r   )r1   r   r   r   rr   ;  s    zWin32CPUInfo._is_Intelc             C   s   | j d d dkS )Nr   r  r   )r   )r1   r   r   r   r”   >  s    zWin32CPUInfo._is_i386c             C   s   | j d d dkS )Nr   r  r  )r   )r1   r   r   r   rs   A  s    zWin32CPUInfo._is_i486c             C   s   |   ¡ o| jd d dkS )Nr   r  r  )ru   r   )r1   r   r   r   rv   D  s    zWin32CPUInfo._is_i586c             C   s   |   ¡ o| jd d dkS )Nr   r  r  )ru   r   )r1   r   r   r   rx   G  s    zWin32CPUInfo._is_i686c             C   s   |   ¡ o| jd d dkS )Nr   r  r  )ru   r   )r1   r   r   r   rz   J  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  )ru   r   )r1   r   r   r   r}   M  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
   )ru   r   )r1   r   r   r   r|   Q  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  )ru   r   )r1   r   r   r   r{   U  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  é
   é   )ru   r   )r1   r   r   r   r~   Y  s    zWin32CPUInfo._is_PentiumIIIc             C   s   |   ¡ o| jd d dkS )Nr   r  r!  )ru   r   )r1   r   r   r   r   ]  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  é   é   )ru   r   )r1   r   r   r   r€   `  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!  é   é   )ru   r   )r1   r   r   r   r…   d  s    zWin32CPUInfo._is_Core2c             C   s   t | jƒdkS )Nr
   )r*   r   )r1   r   r   r   r‰   j  s    zWin32CPUInfo._is_singleCPUc             C   s
   t | jƒS )N)r*   r   )r1   r   r   r   r@   m  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)ru   r   re   )r1   r   r   r   r   p  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)ru   r   re   )r1   r   r   r   rŽ   y  s    zWin32CPUInfo._has_ssec             C   s8   |   ¡ r |  ¡ p|  ¡ p|  ¡ S |  ¡ r0|  ¡ S dS d S )NF)ru   Zis_Pentium4Zis_PentiumMZis_Core2re   Zis_AMD64)r1   r   r   r   r   …  s    zWin32CPUInfo._has_sse2c             C   s   |   ¡ o| jd d dkS )Nr   r  )r  r  r!  )re   r   )r1   r   r   r   r’   Ž  s    zWin32CPUInfo._has_3dnowc             C   s   |   ¡ o| jd d dkS )Nr   r  )r  r!  )re   r   )r1   r   r   r   r“   ‘  s    zWin32CPUInfo._has_3dnowext)$rI   rJ   rK   r   r  rU   rV   rY   r  r  r  r  r  r  r   rf   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  ZlinuxZirixÚdarwinZsunosZwin32Úcygwin)r	   r
   )r	   r
   )r	   r
   )r	   r
   ) rL   Z
__future__r   r   r   Ú__all__r  rB   r;   r   r	  Ú
subprocessr   Zcommandsr   rA   Znumpy.distutils.compatr   r   r!   r$   r.   Úobjectr/   rM   r•   rÌ   rç   r  r7   Zcpuinfor   r   r   r   r   Ú<module>   sJ   

	
 
	# E:.J 6