B
    ;9\¾e  ã               @   s>  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Zddl	Z	d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G dd„ deƒZej d¡ rúeZn€ej d¡reZnlejdkr eZnZejdd … d!kr:eZn@ej d"¡rNeZn,ej d#¡rbeZnej d$¡rveZneZeƒ Zed%kr:e ¡  e ¡  e ¡  g Zx€eeƒD ]tZ e d d&kr°e d d&kr°e!ee dd… ƒƒ Z"e"r°e"dkre #d'e dd… e"f ¡ ne #e dd… ¡ q°W e$d(d) %e¡ ƒ dS ).a`  
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é    NF©r   é   c          
   C   s†   y&t j| t jd}| ¡ \}}|j}W n6 tk
r\ } ztjt|ƒt	|d dS d }~X Y nX t
 |¡r~t
 |¡|kr~d|fS d|fS )N)Ústdout)Ú
stacklevel)FÚ TF)Ú
subprocessÚPopenÚPIPEZcommunicateÚ
returncodeÚEnvironmentErrorÚwarningsÚwarnÚstrÚUserWarningÚosÚ	WIFEXITEDÚWEXITSTATUS)ÚcmdÚsuccessful_statusr   ÚpÚoutputÚ_ZstatusÚe© r   ú.lib/python3.7/site-packages/numexpr/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_info2   s    

r"   c             c   sH   t | ||d d\}}|sd S | d¡}x| ¡ D ]}| ¡ V  q2W d S )Nr   )r   r   Úascii)r   ÚdecodeÚ
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>N   s    z*key_value_from_command.<locals>.<listcomp>é   r   )r'   ÚsplitÚlen)r   Úsepr   r   Údr&   Úlr   r   r   Úkey_value_from_commandI   s    r1   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    Y nX d S )Nr   )ÚselfÚfuncr   r   r   Ú	_try_callY   s    zCPUInfoBase._try_callc             C   sV   |  d¡sJt| d| ƒrBt| d| ƒ}t |¡rJ| j|fdd„S ndd„ S t|ƒ‚d S )Nr   c             S   s   | |ƒS )Nr   )r4   Úattrr   r   r   Ú<lambda>d   s    z)CPUInfoBase.__getattr__.<locals>.<lambda>c               S   s   d S )Nr   r   r   r   r   r7   f   s    )Ú
startswithÚhasattrÚgetattrÚinspectZismethodr5   ÚAttributeError)r3   Únamer6   r   r   r   Ú__getattr___   s    

zCPUInfoBase.__getattr__c             C   s   dS )Nr   r   )r3   r   r   r   Ú	_getNCPUsi   s    zCPUInfoBase._getNCPUsc             C   s&   t  ¡ d }t d¡ |¡ d¡}|S )Nr   z(\d+)bitr   )ÚplatformZarchitectureÚreÚcompileÚsearchÚgroup)r3   ZabitsZnbitsr   r   r   Z__get_nbitsl   s    zCPUInfoBase.__get_nbitsc             C   s   |   ¡ dkS )NZ32)Ú_CPUInfoBase__get_nbits)r3   r   r   r   Ú	_is_32bitq   s    zCPUInfoBase._is_32bitc             C   s   |   ¡ dkS )NZ64)rE   )r3   r   r   r   Ú	_is_64bitt   s    zCPUInfoBase._is_64bitN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r5   r>   r?   rE   rF   rG   r   r   r   r   r2   T   s   
r2   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^d_„ Z4d`da„ Z5dbdc„ Z6ddde„ Z7dfdg„ Z8dS )hÚLinuxCPUInfoNc       
   
   C   sì   | j d k	rd S i g}tddgƒ\}}|r8| ¡ |d d< ytdƒ}W n2 tk
rv } zt t|ƒt¡ 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 )NÚunamez-mr   Zuname_mz/proc/cpuinfoc             S   s   g | ]}|  ¡ ‘qS r   )r   )r(   r)   r   r   r   r*   ˆ   s    z)LinuxCPUInfo.__init__.<locals>.<listcomp>ú:r   r+   éÿÿÿÿ)r   r   r   Úopenr   r   r   r   r   r,   r-   ÚappendÚcloseÚ	__class__)
r3   r   r!   r   Zfor   r&   Z
name_valuer=   Úvaluer   r   r   Ú__init__{   s(    
"

zLinuxCPUInfo.__init__c             C   s   d S )Nr   )r3   r   r   r   Ú	_not_impl’   s    zLinuxCPUInfo._not_implc             C   s   | j d d dkS )Nr   Ú	vendor_idÚAuthenticAMD)r   )r3   r   r   r   Ú_is_AMD—   s    zLinuxCPUInfo._is_AMDc             C   s   |   ¡ o| jd d dkS )Nr   ÚmodelÚ2)rY   r   )r3   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   )r3   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)rA   Úmatchr   )r3   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)rA   r_   r   )r3   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)rA   r_   r   )r3   r   r   r   Ú_is_AthlonMP¦   s    zLinuxCPUInfo._is_AthlonMPc             C   s   |   ¡ o| jd d dkS )Nr   ÚfamilyÚ15)Úis_AMDr   )r3   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)rA   r_   r   )r3   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)rA   r_   r   )r3   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)rA   r_   r   )r3   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)rA   r_   r   )r3   r   r   r   Ú
_is_Hammer¹   s    zLinuxCPUInfo._is_Hammerc             C   s   | j d d dkS )Nr   r   ZAlpha)r   )r3   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   )r3   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   )r3   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   )r3   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   )r3   r   r   r   Ú	_is_PCA56Ë   s    zLinuxCPUInfo._is_PCA56c             C   s   | j d d dkS )Nr   rW   ÚGenuineIntel)r   )r3   r   r   r   Ú	_is_IntelÓ   s    zLinuxCPUInfo._is_Intelc             C   s   | j d d dkS )Nr   r   Zi486)r   )r3   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   )r3   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   )r3   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)rA   r_   r   )r3   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)rA   r_   r   )r3   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)rA   r_   r   )r3   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)rA   r_   r   )r3   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)rA   r_   r   )r3   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)rA   r_   r   )r3   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)rA   r_   r   )r3   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)rA   r_   r   )r3   r   r   r   Ú_is_PentiumMû   s    zLinuxCPUInfo._is_PentiumMc             C   s   |   ¡ o|  ¡ S )N)Zis_PentiumIVÚhas_sse3)r3   r   r   r   Ú_is_Prescottÿ   s    zLinuxCPUInfo._is_Prescottc             C   sF   |   ¡ oD| jd d dkoD|  ¡ oD|  ¡  oDt d| jd d ¡d k	S )Nr   z
cpu family)rw   rd   z	.*?\blm\bÚflags)ru   r   r   Z	has_ssse3rA   r_   )r3   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   rA   r_   r   )r3   r   r   r   Ú	_is_Core2	  s    zLinuxCPUInfo._is_Core2c             C   s   t  d| jd d ¡d k	S )Nz.*?Itanium\br   rc   )rA   r_   r   )r3   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)rA   r_   r   Ú
IGNORECASE)r3   r   r   r   Ú_is_XEON  s    zLinuxCPUInfo._is_XEONc             C   s   t  d| jd d ¡d k	S )Nz	.*POWER.*r   r   )rA   r_   r   )r3   r   r   r   Ú	_is_Power  s    zLinuxCPUInfo._is_Powerc             C   s   t  d| jd d ¡d k	S )Nz
.*POWER7.*r   r   )rA   r_   r   )r3   r   r   r   Ú
_is_Power7  s    zLinuxCPUInfo._is_Power7c             C   s   t  d| jd d ¡d k	S )Nz
.*POWER8.*r   r   )rA   r_   r   )r3   r   r   r   Ú
_is_Power8!  s    zLinuxCPUInfo._is_Power8c             C   s   t  d| jd d ¡d k	S )Nz
.*POWER9.*r   r   )rA   r_   r   )r3   r   r   r   Ú
_is_Power9%  s    zLinuxCPUInfo._is_Power9c             C   s   t  d| jd d ¡d k	S )Nz.*altivec\ supported.*r   r   )rA   r_   r   )r3   r   r   r   Ú_has_Altivec)  s    zLinuxCPUInfo._has_Altivecc             C   s   t | jƒdkS )Nr   )r-   r   )r3   r   r   r   Ú_is_singleCPU/  s    zLinuxCPUInfo._is_singleCPUc             C   s
   t | jƒS )N)r-   r   )r3   r   r   r   r?   2  s    zLinuxCPUInfo._getNCPUsc             C   s   | j d d dkS )Nr   Zfdiv_bugÚyes)r   )r3   r   r   r   Ú_has_fdiv_bug5  s    zLinuxCPUInfo._has_fdiv_bugc             C   s   | j d d dkS )Nr   Zf00f_bugr   )r   )r3   r   r   r   Ú_has_f00f_bug8  s    zLinuxCPUInfo._has_f00f_bugc             C   s   t  d| jd d ¡d k	S )Nz
.*?\bmmx\br   rƒ   )rA   r_   r   )r3   r   r   r   Ú_has_mmx;  s    zLinuxCPUInfo._has_mmxc             C   s   t  d| jd d ¡d k	S )Nz
.*?\bsse\br   rƒ   )rA   r_   r   )r3   r   r   r   Ú_has_sse>  s    zLinuxCPUInfo._has_ssec             C   s   t  d| jd d ¡d k	S )Nz.*?\bsse2\br   rƒ   )rA   r_   r   )r3   r   r   r   Ú	_has_sse2A  s    zLinuxCPUInfo._has_sse2c             C   s   t  d| jd d ¡d k	S )Nz
.*?\bpni\br   rƒ   )rA   r_   r   )r3   r   r   r   Ú	_has_sse3D  s    zLinuxCPUInfo._has_sse3c             C   s   t  d| jd d ¡d k	S )Nz.*?\bssse3\br   rƒ   )rA   r_   r   )r3   r   r   r   Ú
_has_ssse3G  s    zLinuxCPUInfo._has_ssse3c             C   s   t  d| jd d ¡d k	S )Nz.*?\b3dnow\br   rƒ   )rA   r_   r   )r3   r   r   r   Ú
_has_3dnowJ  s    zLinuxCPUInfo._has_3dnowc             C   s   t  d| jd d ¡d k	S )Nz.*?\b3dnowext\br   rƒ   )rA   r_   r   )r3   r   r   r   Ú_has_3dnowextM  s    zLinuxCPUInfo._has_3dnowext)9rH   rI   rJ   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—   r˜   r   r   r   r   rL   x   sl   rL   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   r1   rS   )r3   r   r   r   r   rU   T  s
    
zIRIXCPUInfo.__init__c             C   s   d S )Nr   )r3   r   r   r   rV   [  s    zIRIXCPUInfo._not_implc             C   s   | j  d¡dkS )NÚNUM_PROCESSORSÚ1)r   Úget)r3   r   r   r   rŽ   ^  s    zIRIXCPUInfo._is_singleCPUc             C   s   t | j dd¡ƒS )Nr   r   )Úintr   rŸ   )r3   r   r   r   r?   a  s    zIRIXCPUInfo._getNCPUsc             C   s    | j  d¡ ¡ d  ¡ d| kS )NZ
PROCESSORSr   zr%s)r   rŸ   r,   Úlower)r3   Únr   r   r   Z	__cputyped  s    zIRIXCPUInfo.__cputypec             C   s
   |   d¡S )NiÐ  )Ú_IRIXCPUInfo__cputype)r3   r   r   r   Ú	_is_r2000g  s    zIRIXCPUInfo._is_r2000c             C   s
   |   d¡S )Ni¸  )r£   )r3   r   r   r   Ú	_is_r3000j  s    zIRIXCPUInfo._is_r3000c             C   s
   |   d¡S )Ni<  )r£   )r3   r   r   r   Ú	_is_r3900m  s    zIRIXCPUInfo._is_r3900c             C   s
   |   d¡S )Ni   )r£   )r3   r   r   r   Ú	_is_r4000p  s    zIRIXCPUInfo._is_r4000c             C   s
   |   d¡S )Ni  )r£   )r3   r   r   r   Ú	_is_r4100s  s    zIRIXCPUInfo._is_r4100c             C   s
   |   d¡S )NiÌ  )r£   )r3   r   r   r   Ú	_is_r4300v  s    zIRIXCPUInfo._is_r4300c             C   s
   |   d¡S )Ni0  )r£   )r3   r   r   r   Ú	_is_r4400y  s    zIRIXCPUInfo._is_r4400c             C   s
   |   d¡S )Niø  )r£   )r3   r   r   r   Ú	_is_r4600|  s    zIRIXCPUInfo._is_r4600c             C   s
   |   d¡S )Ni*  )r£   )r3   r   r   r   Ú	_is_r4650  s    zIRIXCPUInfo._is_r4650c             C   s
   |   d¡S )Niˆ  )r£   )r3   r   r   r   Ú	_is_r5000‚  s    zIRIXCPUInfo._is_r5000c             C   s
   |   d¡S )Nip  )r£   )r3   r   r   r   Ú	_is_r6000…  s    zIRIXCPUInfo._is_r6000c             C   s
   |   d¡S )Ni@  )r£   )r3   r   r   r   Ú	_is_r8000ˆ  s    zIRIXCPUInfo._is_r8000c             C   s
   |   d¡S )Ni'  )r£   )r3   r   r   r   Ú
_is_r10000‹  s    zIRIXCPUInfo._is_r10000c             C   s
   |   d¡S )Nià.  )r£   )r3   r   r   r   Ú
_is_r12000Ž  s    zIRIXCPUInfo._is_r12000c             C   s
   |   d¡S )NZorion)r£   )r3   r   r   r   Ú
_is_rorion‘  s    zIRIXCPUInfo._is_rorionc             C   s   y| j  d¡S    Y nX d S )NÚMACHINE)r   rŸ   )r3   r   r   r   Úget_ip”  s    zIRIXCPUInfo.get_ipc             C   s   | j  d¡ ¡ d| kS )Nr³   zip%s)r   rŸ   r¡   )r3   r¢   r   r   r   Ú	__machineš  s    zIRIXCPUInfo.__machinec             C   s
   |   d¡S )Né   )Ú_IRIXCPUInfo__machine)r3   r   r   r   Ú_is_IP19  s    zIRIXCPUInfo._is_IP19c             C   s
   |   d¡S )Né   )r·   )r3   r   r   r   Ú_is_IP20   s    zIRIXCPUInfo._is_IP20c             C   s
   |   d¡S )Né   )r·   )r3   r   r   r   Ú_is_IP21£  s    zIRIXCPUInfo._is_IP21c             C   s
   |   d¡S )Né   )r·   )r3   r   r   r   Ú_is_IP22¦  s    zIRIXCPUInfo._is_IP22c             C   s   |   d¡o|  ¡ S )Nr½   )r·   r§   )r3   r   r   r   Ú_is_IP22_4k©  s    zIRIXCPUInfo._is_IP22_4kc             C   s   |   d¡o|  ¡ S )Nr½   )r·   r­   )r3   r   r   r   Ú_is_IP22_5k¬  s    zIRIXCPUInfo._is_IP22_5kc             C   s
   |   d¡S )Né   )r·   )r3   r   r   r   Ú_is_IP24¯  s    zIRIXCPUInfo._is_IP24c             C   s
   |   d¡S )Né   )r·   )r3   r   r   r   Ú_is_IP25²  s    zIRIXCPUInfo._is_IP25c             C   s
   |   d¡S )Né   )r·   )r3   r   r   r   Ú_is_IP26µ  s    zIRIXCPUInfo._is_IP26c             C   s
   |   d¡S )Né   )r·   )r3   r   r   r   Ú_is_IP27¸  s    zIRIXCPUInfo._is_IP27c             C   s
   |   d¡S )Né   )r·   )r3   r   r   r   Ú_is_IP28»  s    zIRIXCPUInfo._is_IP28c             C   s
   |   d¡S )Né   )r·   )r3   r   r   r   Ú_is_IP30¾  s    zIRIXCPUInfo._is_IP30c             C   s
   |   d¡S )Né    )r·   )r3   r   r   r   Ú_is_IP32Á  s    zIRIXCPUInfo._is_IP32c             C   s   |   d¡o|  ¡ S )NrÍ   )r·   r­   )r3   r   r   r   Ú_is_IP32_5kÄ  s    zIRIXCPUInfo._is_IP32_5kc             C   s   |   d¡o|  ¡ S )NrÍ   )r·   r°   )r3   r   r   r   Ú_is_IP32_10kÇ  s    zIRIXCPUInfo._is_IP32_10k))rH   rI   rJ   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š   Q  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   s:   | j d k	rd S tddd}tddgdd|d< || j_ d S )	NÚarchÚmachine)rÒ   rÓ   ÚsysctlÚhwú=)r.   Ú	sysctl_hw)r   r"   r1   rS   )r3   r   r   r   r   rU   Î  s    
zDarwinCPUInfo.__init__c             C   s   d S )Nr   )r3   r   r   r   rV   Ö  s    zDarwinCPUInfo._not_implc             C   s   t | jd  dd¡ƒS )Nr×   zhw.ncpur   )r    r   rŸ   )r3   r   r   r   r?   Ø  s    zDarwinCPUInfo._getNCPUsc             C   s   | j d d dkS )Nr×   z
hw.machinezPower Macintosh)r   )r3   r   r   r   Ú_is_Power_MacintoshÛ  s    z!DarwinCPUInfo._is_Power_Macintoshc             C   s   | j d dkS )NrÒ   Úi386)r   )r3   r   r   r   r™   Þ  s    zDarwinCPUInfo._is_i386c             C   s   | j d dkS )NrÒ   Zppc)r   )r3   r   r   r   Ú_is_ppcá  s    zDarwinCPUInfo._is_ppcc             C   s   | j d d| kS )NrÓ   zppc%s)r   )r3   r¢   r   r   r   rµ   ä  s    zDarwinCPUInfo.__machinec             C   s
   |   d¡S )NiY  )Ú_DarwinCPUInfo__machine)r3   r   r   r   Ú
_is_ppc601ç  s    zDarwinCPUInfo._is_ppc601c             C   s
   |   d¡S )NiZ  )rÛ   )r3   r   r   r   Ú
_is_ppc602é  s    zDarwinCPUInfo._is_ppc602c             C   s
   |   d¡S )Ni[  )rÛ   )r3   r   r   r   Ú
_is_ppc603ë  s    zDarwinCPUInfo._is_ppc603c             C   s
   |   d¡S )NZ603e)rÛ   )r3   r   r   r   Ú_is_ppc603eí  s    zDarwinCPUInfo._is_ppc603ec             C   s
   |   d¡S )Ni\  )rÛ   )r3   r   r   r   Ú
_is_ppc604ï  s    zDarwinCPUInfo._is_ppc604c             C   s
   |   d¡S )NZ604e)rÛ   )r3   r   r   r   Ú_is_ppc604eñ  s    zDarwinCPUInfo._is_ppc604ec             C   s
   |   d¡S )Nil  )rÛ   )r3   r   r   r   Ú
_is_ppc620ó  s    zDarwinCPUInfo._is_ppc620c             C   s
   |   d¡S )Niv  )rÛ   )r3   r   r   r   Ú
_is_ppc630õ  s    zDarwinCPUInfo._is_ppc630c             C   s
   |   d¡S )Niä  )rÛ   )r3   r   r   r   Ú
_is_ppc740÷  s    zDarwinCPUInfo._is_ppc740c             C   s
   |   d¡S )Niè  )rÛ   )r3   r   r   r   Ú_is_ppc7400ù  s    zDarwinCPUInfo._is_ppc7400c             C   s
   |   d¡S )Ni  )rÛ   )r3   r   r   r   Ú_is_ppc7450û  s    zDarwinCPUInfo._is_ppc7450c             C   s
   |   d¡S )Niî  )rÛ   )r3   r   r   r   Ú
_is_ppc750ý  s    zDarwinCPUInfo._is_ppc750c             C   s
   |   d¡S )Ni“  )rÛ   )r3   r   r   r   Ú
_is_ppc403ÿ  s    zDarwinCPUInfo._is_ppc403c             C   s
   |   d¡S )Niù  )rÛ   )r3   r   r   r   Ú
_is_ppc505  s    zDarwinCPUInfo._is_ppc505c             C   s
   |   d¡S )Ni!  )rÛ   )r3   r   r   r   Ú
_is_ppc801  s    zDarwinCPUInfo._is_ppc801c             C   s
   |   d¡S )Ni5  )rÛ   )r3   r   r   r   Ú
_is_ppc821  s    zDarwinCPUInfo._is_ppc821c             C   s
   |   d¡S )Ni7  )rÛ   )r3   r   r   r   Ú
_is_ppc823  s    zDarwinCPUInfo._is_ppc823c             C   s
   |   d¡S )Ni\  )rÛ   )r3   r   r   r   Ú
_is_ppc860	  s    zDarwinCPUInfo._is_ppc860)rH   rI   rJ   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               @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚNetBSDCPUInfoNc             C   sZ   | j d k	rd S i }tddgdd|d< |d  dd¡|d< |d  d	d¡|d
< || j_ d S )NrÔ   rÕ   rÖ   )r.   r×   zhw.machine_archr   rÒ   z
hw.machinerÓ   )r   r1   rŸ   rS   )r3   r   r   r   r   rU     s    
zNetBSDCPUInfo.__init__c             C   s   d S )Nr   )r3   r   r   r   rV     s    zNetBSDCPUInfo._not_implc             C   s   t | jd  dd¡ƒS )Nr×   zhw.ncpur   )r    r   rŸ   )r3   r   r   r   r?     s    zNetBSDCPUInfo._getNCPUsc             C   s&   | j d  dd¡dd… dkr"dS dS )	Nr×   zhw.modelr   r   é   ZIntelTF)r   rŸ   )r3   r   r   r   rr     s    zNetBSDCPUInfo._is_Intelc             C   s&   | j d  dd¡dd… dkr"dS dS )	Nr×   zhw.modelr   r   é   ZAMDTF)r   rŸ   )r3   r   r   r   rY   !  s    zNetBSDCPUInfo._is_AMD)	rH   rI   rJ   r   rU   rV   r?   rr   rY   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d&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ ZdS )4ÚSunOSCPUInfoNc             C   s„   | j d k	rd S tddddgddgddgd}tdd	gd
d|d< x6tdddgƒD ]$}t d|¡}|rP| d¡|d< P qPW || j_ d S )NrÒ   ÚmachrM   z-iZisainfoz-bz-n)rÒ   rò   Úuname_iZ	isainfo_bÚ	isainfo_nz-XrÖ   )r.   Úuname_XZpsrinfoz-vÚ0z+\s*The (?P<p>[\w\d]+) processor operates atr   Ú	processor)r   r"   r1   r'   rA   r_   rD   rS   )r3   r   r&   Úmr   r   r   rU   )  s    
zSunOSCPUInfo.__init__c             C   s   d S )Nr   )r3   r   r   r   rV   :  s    zSunOSCPUInfo._not_implc             C   s   | j d dkS )Nrô   rÙ   )r   )r3   r   r   r   r™   =  s    zSunOSCPUInfo._is_i386c             C   s   | j d dkS )Nrô   Zsparc)r   )r3   r   r   r   Ú	_is_sparc@  s    zSunOSCPUInfo._is_sparcc             C   s   | j d dkS )Nrô   Úsparcv9)r   )r3   r   r   r   Ú_is_sparcv9C  s    zSunOSCPUInfo._is_sparcv9c             C   s   t | jd  dd¡ƒS )Nrõ   ZNumCPUr   )r    r   rŸ   )r3   r   r   r   r?   F  s    zSunOSCPUInfo._getNCPUsc             C   s   | j d dkS )NrÒ   Zsun4)r   )r3   r   r   r   Ú_is_sun4I  s    zSunOSCPUInfo._is_sun4c             C   s   t  d| jd ¡d k	S )NZSUNWró   )rA   r_   r   )r3   r   r   r   Ú_is_SUNWL  s    zSunOSCPUInfo._is_SUNWc             C   s   t  d| jd ¡d k	S )Nz.*SPARCstation-5ró   )rA   r_   r   )r3   r   r   r   Ú_is_sparcstation5O  s    zSunOSCPUInfo._is_sparcstation5c             C   s   t  d| jd ¡d k	S )Nz	.*Ultra-1ró   )rA   r_   r   )r3   r   r   r   Ú
_is_ultra1R  s    zSunOSCPUInfo._is_ultra1c             C   s   t  d| jd ¡d k	S )Nz.*Ultra-250ró   )rA   r_   r   )r3   r   r   r   Ú_is_ultra250U  s    zSunOSCPUInfo._is_ultra250c             C   s   t  d| jd ¡d k	S )Nz	.*Ultra-2ró   )rA   r_   r   )r3   r   r   r   Ú
_is_ultra2X  s    zSunOSCPUInfo._is_ultra2c             C   s   t  d| jd ¡d k	S )Nz
.*Ultra-30ró   )rA   r_   r   )r3   r   r   r   Ú_is_ultra30[  s    zSunOSCPUInfo._is_ultra30c             C   s   t  d| jd ¡d k	S )Nz	.*Ultra-4ró   )rA   r_   r   )r3   r   r   r   Ú
_is_ultra4^  s    zSunOSCPUInfo._is_ultra4c             C   s   t  d| jd ¡d k	S )Nz.*Ultra-5_10ró   )rA   r_   r   )r3   r   r   r   Ú_is_ultra5_10a  s    zSunOSCPUInfo._is_ultra5_10c             C   s   t  d| jd ¡d k	S )Nz	.*Ultra-5ró   )rA   r_   r   )r3   r   r   r   Ú
_is_ultra5d  s    zSunOSCPUInfo._is_ultra5c             C   s   t  d| jd ¡d k	S )Nz
.*Ultra-60ró   )rA   r_   r   )r3   r   r   r   Ú_is_ultra60g  s    zSunOSCPUInfo._is_ultra60c             C   s   t  d| jd ¡d k	S )Nz
.*Ultra-80ró   )rA   r_   r   )r3   r   r   r   Ú_is_ultra80j  s    zSunOSCPUInfo._is_ultra80c             C   s   t  d| jd ¡d k	S )Nz.*Ultra-Enterpriseró   )rA   r_   r   )r3   r   r   r   Ú_is_ultraenterpricem  s    z SunOSCPUInfo._is_ultraenterpricec             C   s   t  d| jd ¡d k	S )Nz.*Ultra-Enterprise-10000ró   )rA   r_   r   )r3   r   r   r   Ú_is_ultraenterprice10kp  s    z#SunOSCPUInfo._is_ultraenterprice10kc             C   s   t  d| jd ¡d k	S )Nz
.*Sun-Fireró   )rA   r_   r   )r3   r   r   r   Ú_is_sunfires  s    zSunOSCPUInfo._is_sunfirec             C   s   t  d| jd ¡d k	S )Nz.*Ultraró   )rA   r_   r   )r3   r   r   r   Ú	_is_ultrav  s    zSunOSCPUInfo._is_ultrac             C   s   | j d dkS )Nr÷   Zsparcv7)r   )r3   r   r   r   Ú_is_cpusparcv7y  s    zSunOSCPUInfo._is_cpusparcv7c             C   s   | j d dkS )Nr÷   Zsparcv8)r   )r3   r   r   r   Ú_is_cpusparcv8|  s    zSunOSCPUInfo._is_cpusparcv8c             C   s   | j d dkS )Nr÷   rú   )r   )r3   r   r   r   Ú_is_cpusparcv9  s    zSunOSCPUInfo._is_cpusparcv9)rH   rI   rJ   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Š  ydd l }W n tk
r(   dd l }Y nX | jd k	r8d S g }yt dtj¡}| |j| j¡}d}xöy| 	||¡}W n |j
k
rŒ   P Y qdX |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 qdW W n    tt ¡ d dfƒ 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	ProcessorrO   Z
IdentifierZFMLÚFamilyZMDLÚModelZSTPZSteppingz
(ignoring))ÚwinregÚImportErrorr   rA   rB   r‡   ÚOpenKeyÚHKEY_LOCAL_MACHINEÚpkeyZEnumKeyÚerrorrQ   Z	EnumValuerC   r    rD   ÚprintÚsysÚexc_inforS   )r3   r  Ú_winregr   ZprgxZchndZpnumÚprocZphndZpidxr=   rT   ZvtpeZsrchr   r   r   rU   Š  sJ    

"zWin32CPUInfo.__init__c             C   s   d S )Nr   )r3   r   r   r   rV   ¶  s    zWin32CPUInfo._not_implc             C   s   | j d d dkS )Nr   ÚVendorIdentifierrX   )r   )r3   r   r   r   rY   »  s    zWin32CPUInfo._is_AMDc             C   s   |   ¡ o| jd d dkS )Nr   r  é   )re   r   )r3   r   r   r   Ú	_is_Am486¾  s    zWin32CPUInfo._is_Am486c             C   s   |   ¡ o| jd d dkS )Nr   r  r  )re   r   )r3   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+   rð   )re   r   )r3   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   )r3   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   )r3   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   )r3   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   )r3   r   r   r   Ú	_is_AMDK7Ô  s    zWin32CPUInfo._is_AMDK7c             C   s   |   ¡ o| jd d dkS )Nr   r  é   )re   r   )r3   r   r   r   rf   Û  s    zWin32CPUInfo._is_AMD64c             C   s   | j d d dkS )Nr   r  rq   )r   )r3   r   r   r   rr   à  s    zWin32CPUInfo._is_Intelc             C   s   | j d d dkS )Nr   r  rð   )r   )r3   r   r   r   r™   ã  s    zWin32CPUInfo._is_i386c             C   s   | j d d dkS )Nr   r  r  )r   )r3   r   r   r   rs   æ  s    zWin32CPUInfo._is_i486c             C   s   |   ¡ o| jd d dkS )Nr   r  rï   )ru   r   )r3   r   r   r   rv   é  s    zWin32CPUInfo._is_i586c             C   s   |   ¡ o| jd d dkS )Nr   r  r"  )ru   r   )r3   r   r   r   rx   ì  s    zWin32CPUInfo._is_i686c             C   s   |   ¡ o| jd d dkS )Nr   r  rï   )ru   r   )r3   r   r   r   rz   ï  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   )r3   r   r   r   r}   ò  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   )r3   r   r   r   r|   ö  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   )r3   r   r   r   r{   ú  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   )r3   r   r   r   r~   þ  s    zWin32CPUInfo._is_PentiumIIIc             C   s   |   ¡ o| jd d dkS )Nr   r  r*  )ru   r   )r3   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   )r3   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   )r3   r   r   r   r…   	  s    zWin32CPUInfo._is_Core2c             C   s   t | jƒdkS )Nr   )r-   r   )r3   r   r   r   rŽ     s    zWin32CPUInfo._is_singleCPUc             C   s
   t | jƒS )N)r-   r   )r3   r   r   r   r?     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   )r3   r   r   r   r’     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   )r3   r   r   r   r“     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)r3   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   )r3   r   r   r   r—   3  s    zWin32CPUInfo._has_3dnowc             C   s   |   ¡ o| jd d dkS )Nr   r  )r"  r*  )re   r   )r3   r   r   r   r˜   6  s    zWin32CPUInfo._has_3dnowext)$rH   rI   rJ   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Údarwinr"  ZnetbsdZsunosZwin32ÚcygwinÚ__main__r   z%s=%szCPU information: rœ   )r   r   )r   r   )r   r   )r   r   )&rK   Ú__all__r  rA   Útypesr   r   r   r@   r;   Zis_cpu_amd_intelr   r"   r'   r1   Úobjectr2   rL   rš   rÑ   rî   rñ   r  r8   Zcpuinfor   rH   Zis_blaaru   rl   r   Údirr=   r:   ÚrrQ   r  Újoinr   r   r   r   Ú<module>   sf   



 

$ Zz@] 8

