
     !ge                        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Zd%dZd%dZ	 	 d%d	Z G d
 de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Zej                  j/                  d      reZnej                  j/                  d      reZnej                  dk(  reZnqej                  dd dk(  reZn\ej                  j/                  d      reZn>ej                  j/                  d      reZn ej                  j/                  d      reZneZ e       Zed k(  rej7                          ej9                          ej;                          g Z ee      D ][  Z e d   d!k(  se d   d!k7  s  e!ee dd              Z"e"s)e"dk7  rejG                  e dd d"e"       HejG                  e dd        ]  e$d#d$jK                  e      z          yy)&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   c                 j   	 t        j                  | t         j                        }|j                         \  }}|j                  }t        j                  |      rt        j                  |      |v rd|fS d|fS # t
        $ r/}t        j                  t        |      t        |       Y d }~yd }~ww xY w)N)stdout)
stacklevel)F TF)
subprocessPopenPIPEcommunicate
returncodeEnvironmentErrorwarningswarnstrUserWarningos	WIFEXITEDWEXITSTATUS)cmdsuccessful_statusr   poutput_statuses           /lib/python3.12/site-packages/numexpr/cpuinfo.py	getoutputr   #   s    S9MMO	 
||Fv 6:K KV|&=  c!fkjAs   AA: :	B2%B--B2c                 r    i }|D ]/  }t        ||   | |dz         \  }}|s|j                         ||<   1 |S )Nr   r   r   )r   strip)r   r   kwinfokeyokr   s          r   command_infor&   0   sH    Dr#w:K*4q.:
FDI	 
 K    c              #      K   t        | ||dz         \  }}|sy |j                  d      }|j                         D ]  }|j                           y w)Nr   r    ascii)r   decode
splitlinesr!   )r   r   r   r%   r   lines         r   command_by_liner-   :   sU     32C&01n6JB ]]7#F!!#jjl $s   AAc                     i }t        | ||dz         D ]I  }|j                  |d      D cg c]  }|j                          }}t        |      dk(  s?|d   ||d   <   K |S c c}w )Nr   r       r   )r-   splitr!   len)r   sepr   r   dr,   sls           r   key_value_from_commandr6   G   sq    
A7H+5>; $

3 23 21QWWY 23q6Q;dAadG	;
 H 4s   A"c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	CPUInfoBasezkHolds CPU information and provides methods for requiring
    the availability of various CPU features.
    c                      	  |       S #  Y y xY wN )selffuncs     r   	_try_callzCPUInfoBase._try_callW   s    	6M	s   	 c                     |j                  d      sFt        | d|z         r4t        | d|z         }t        j                  |      r| j
                  |fdS d S t        |      )Nr   c                      | |      S r:   r;   )r=   attrs     r   <lambda>z)CPUInfoBase.__getattr__.<locals>.<lambda>b   s    $t*r'   c                       y r:   r;   r;   r'   r   rB   z)CPUInfoBase.__getattr__.<locals>.<lambda>d   s    tr'   )
startswithhasattrgetattrinspectismethodr>   AttributeError)r<   namerA   s      r   __getattr__zCPUInfoBase.__getattr__]   sZ    s#tS4Z(tS4Z0##D)'+~~DLL##T""r'   c                      yNr   r;   r<   s    r   	_getNCPUszCPUInfoBase._getNCPUsg   s    r'   c                     t        j                         d   }t        j                  d      j	                  |      j                  d      }|S )Nr   z(\d+)bitr   )platformarchitecturerecompilesearchgroup)r<   abitsnbitss      r   __get_nbitszCPUInfoBase.__get_nbitsj   s>    %%'*

;'..u5;;A>r'   c                 (    | j                         dk(  S )N32_CPUInfoBase__get_nbitsrN   s    r   	_is_32bitzCPUInfoBase._is_32bito       !T))r'   c                 (    | j                         dk(  S )N64r\   rN   s    r   	_is_64bitzCPUInfoBase._is_64bitr   r_   r'   N)
__name__
__module____qualname____doc__r>   rK   rO   r]   r^   rb   r;   r'   r   r8   r8   R   s%    #
**r'   r8   c                   J   e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd ZeZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d  Z#d! Z$d" Z%d# Z&d$ Z'e'Z(d% Z)d& Z*d' Z+d( Z,d) Z-d* Z.d+ Z/d, Z0d- Z1d. Z2d/ Z3d0 Z4d1 Z5d2 Z6d3 Z7d4 Z8y)5LinuxCPUInfoNc                    | j                   y i g}t        ddg      \  }}|r|j                         |d   d<   	 t        d      }|D ]e  }|j	                  dd      D cg c]  }|j                          }}t        |      dk7  r?|\  }}	|r||d	   v r|j                  i        |	|d	   |<   g |j                          || j                  _         y c c}w # t        $ r-}
t        j                  t        |
      t               Y d }
~
Hd }
~
ww xY w)
Nunamez-mr   uname_mz/proc/cpuinfo:r   r/   )r#   r   r!   openr0   r1   appendcloser   r   r   r   r   	__class__)r<   r#   r%   r   for,   r4   
name_valuerJ   valuer   s              r   __init__zLinuxCPUInfo.__init__y   s   99 t/
F!'DGI	o&B 15C1CD1CAaggi1C
Dz?a'(ettBx/KKO!&R  HHJ" E	   	/MM#a&+..	/s   C C	D#DDc                      y r:   r;   rN   s    r   	_not_implzLinuxCPUInfo._not_impl       r'   c                 ,    | j                   d   d   dk(  S )Nr   	vendor_idAuthenticAMDr#   rN   s    r   _is_AMDzLinuxCPUInfo._is_AMD       yy|K(N::r'   c                 P    | j                         xr | j                  d   d   dk(  S )Nr   model2r}   r#   rN   s    r   _is_AthlonK6_2zLinuxCPUInfo._is_AthlonK6_2   %    ||~>$))A,w"73">>r'   c                 P    | j                         xr | j                  d   d   dk(  S )Nr   r   3r   rN   s    r   _is_AthlonK6_3zLinuxCPUInfo._is_AthlonK6_3   r   r'   c                 R    t        j                  d| j                  d   d         d uS )Nz	.*?AMD-K6r   
model namerS   matchr#   rN   s    r   _is_AthlonK6zLinuxCPUInfo._is_AthlonK6   %    xxdiil<&@AMMr'   c                 R    t        j                  d| j                  d   d         d uS )Nz	.*?AMD-K7r   r   r   rN   s    r   _is_AthlonK7zLinuxCPUInfo._is_AthlonK7   r   r'   c                 R    t        j                  d| j                  d   d         d uS )Nz.*?Athlon\(tm\) MP\br   r   r   rN   s    r   _is_AthlonMPzLinuxCPUInfo._is_AthlonMP   0    xx/		!\24;?@ 	@r'   c                 P    | j                         xr | j                  d   d   dk(  S )Nr   family15is_AMDr#   rN   s    r   	_is_AMD64zLinuxCPUInfo._is_AMD64   s%    {{}?1h!74!??r'   c                 R    t        j                  d| j                  d   d         d uS )Nz.*?Athlon\(tm\) 64\br   r   r   rN   s    r   _is_Athlon64zLinuxCPUInfo._is_Athlon64   r   r'   c                 R    t        j                  d| j                  d   d         d uS )Nz.*?Athlon HX\br   r   r   rN   s    r   _is_AthlonHXzLinuxCPUInfo._is_AthlonHX   s0    xx)		!\24;?@ 	@r'   c                 R    t        j                  d| j                  d   d         d uS )Nz.*?Opteron\br   r   r   rN   s    r   _is_OpteronzLinuxCPUInfo._is_Opteron   s/    xx		!\24;?@ 	@r'   c                 R    t        j                  d| j                  d   d         d uS )Nz.*?Hammer\br   r   r   rN   s    r   
_is_HammerzLinuxCPUInfo._is_Hammer   s/    xx		!\24;?@ 	@r'   c                 ,    | j                   d   d   dk(  S )Nr   r   Alphar|   rN   s    r   	_is_AlphazLinuxCPUInfo._is_Alpha   s    yy|E"g--r'   c                 P    | j                         xr | j                  d   d   dk(  S )Nr   	cpu modelEV4is_Alphar#   rN   s    r   _is_EV4zLinuxCPUInfo._is_EV4   %    }}E499Q<#<#EEr'   c                 P    | j                         xr | j                  d   d   dk(  S )Nr   r   EV5r   rN   s    r   _is_EV5zLinuxCPUInfo._is_EV5   r   r'   c                 P    | j                         xr | j                  d   d   dk(  S )Nr   r   EV56r   rN   s    r   _is_EV56zLinuxCPUInfo._is_EV56   s%    }}F499Q<#<#FFr'   c                 P    | j                         xr | j                  d   d   dk(  S )Nr   r   PCA56r   rN   s    r   	_is_PCA56zLinuxCPUInfo._is_PCA56   s%    }}G499Q<#<#GGr'   c                 ,    | j                   d   d   dk(  S )Nr   rz   GenuineIntelr|   rN   s    r   	_is_IntelzLinuxCPUInfo._is_Intel   r~   r'   c                 ,    | j                   d   d   dk(  S )Nr   r   i486r|   rN   s    r   _is_i486zLinuxCPUInfo._is_i486   s    yy|E"f,,r'   c                 P    | j                         xr | j                  d   d   dk(  S )Nr   
cpu family5is_Intelr#   rN   s    r   _is_i586zLinuxCPUInfo._is_i586   %    }}D499Q<#=#DDr'   c                 P    | j                         xr | j                  d   d   dk(  S )Nr   r   6r   rN   s    r   _is_i686zLinuxCPUInfo._is_i686   r   r'   c                 R    t        j                  d| j                  d   d         d uS )Nz
.*?Celeronr   r   r   rN   s    r   _is_CeleronzLinuxCPUInfo._is_Celeron   /    xx		!\24;?@ 	@r'   c                 R    t        j                  d| j                  d   d         d uS )Nz
.*?Pentiumr   r   r   rN   s    r   _is_PentiumzLinuxCPUInfo._is_Pentium   r   r'   c                 R    t        j                  d| j                  d   d         d uS )Nz.*?Pentium.*?II\br   r   r   rN   s    r   _is_PentiumIIzLinuxCPUInfo._is_PentiumII   s0    xx,		!\24;?@ 	@r'   c                 R    t        j                  d| j                  d   d         d uS )Nz.*?PentiumPro\br   r   r   rN   s    r   _is_PentiumProzLinuxCPUInfo._is_PentiumPro   s0    xx*		!\24;?@ 	@r'   c                 R    t        j                  d| j                  d   d         d uS )Nz.*?Pentium.*?MMX\br   r   r   rN   s    r   _is_PentiumMMXzLinuxCPUInfo._is_PentiumMMX   0    xx-		!\24;?@ 	@r'   c                 R    t        j                  d| j                  d   d         d uS )Nz.*?Pentium.*?III\br   r   r   rN   s    r   _is_PentiumIIIzLinuxCPUInfo._is_PentiumIII   r   r'   c                 R    t        j                  d| j                  d   d         d uS )Nz.*?Pentium.*?(IV|4)\br   r   r   rN   s    r   _is_PentiumIVzLinuxCPUInfo._is_PentiumIV   s0    xx0		!\24;?@ 	@r'   c                 R    t        j                  d| j                  d   d         d uS )Nz.*?Pentium.*?M\br   r   r   rN   s    r   _is_PentiumMzLinuxCPUInfo._is_PentiumM   s0    xx+		!\24;?@ 	@r'   c                 F    | j                         xr | j                         S r:   )is_PentiumIVhas_sse3rN   s    r   _is_PrescottzLinuxCPUInfo._is_Prescott   s      "6t}}6r'   c                     | j                         xrc | j                  d   d   dv xrM | j                         xr | j                          xr( t	        j
                  d| j                  d   d         d uS )Nr   r   )r   r   z	.*?\blm\bflags)r   r#   r   	has_ssse3rS   r   rN   s    r   
_is_NoconazLinuxCPUInfo._is_Nocona   st     J		!\*k9J 9)9%9J tyy|G'<=TI		Kr'   c                     | j                         xr: | j                         xr( t        j                  d| j                  d   d         d uS )Nz.*?Core\(TM\)2\br   r   )is_64bitr   rS   r   r#   rN   s    r   	_is_Core2zLinuxCPUInfo._is_Core2  sM     ADMMO A,1l35<@A	Br'   c                 R    t        j                  d| j                  d   d         d uS )Nz.*?Itanium\br   r   r   rN   s    r   _is_ItaniumzLinuxCPUInfo._is_Itanium  s-    xx		!X.07;< 	<r'   c                 p    t        j                  d| j                  d   d   t         j                        d uS )Nz	.*?XEON\br   r   )rS   r   r#   
IGNORECASErN   s    r   _is_XEONzLinuxCPUInfo._is_XEON  s6    xx		!\2BMMCJNO 	Or'   c                 R    t        j                  d| j                  d   d         d uS )Nz	.*POWER.*r   r   r   rN   s    r   	_is_PowerzLinuxCPUInfo._is_Power  s-    xxyy|E*,378 	8r'   c                 R    t        j                  d| j                  d   d         d uS )Nz
.*POWER7.*r   r   r   rN   s    r   
_is_Power7zLinuxCPUInfo._is_Power7  -    xxyy|E*,378 	8r'   c                 R    t        j                  d| j                  d   d         d uS )Nz
.*POWER8.*r   r   r   rN   s    r   
_is_Power8zLinuxCPUInfo._is_Power8  r   r'   c                 R    t        j                  d| j                  d   d         d uS )Nz
.*POWER9.*r   r   r   rN   s    r   
_is_Power9zLinuxCPUInfo._is_Power9#  r   r'   c                 R    t        j                  d| j                  d   d         d uS )Nz.*altivec\ supported.*r   r   r   rN   s    r   _has_AltiveczLinuxCPUInfo._has_Altivec'  s.    xx1yy|E*,378 	8r'   c                 2    t        | j                        dk(  S rM   r1   r#   rN   s    r   _is_singleCPUzLinuxCPUInfo._is_singleCPU-      499~""r'   c                 ,    t        | j                        S r:   r   rN   s    r   rO   zLinuxCPUInfo._getNCPUs0      499~r'   c                 ,    | j                   d   d   dk(  S )Nr   fdiv_bugyesr|   rN   s    r   _has_fdiv_bugzLinuxCPUInfo._has_fdiv_bug3      yy|J'500r'   c                 ,    | j                   d   d   dk(  S )Nr   f00f_bugr   r|   rN   s    r   _has_f00f_bugzLinuxCPUInfo._has_f00f_bug6  r   r'   c                 R    t        j                  d| j                  d   d         d uS )Nz
.*?\bmmx\br   r   r   rN   s    r   _has_mmxzLinuxCPUInfo._has_mmx9  %    xxtyy|G'<=TIIr'   c                 R    t        j                  d| j                  d   d         d uS )Nz
.*?\bsse\br   r   r   rN   s    r   _has_ssezLinuxCPUInfo._has_sse<  r  r'   c                 R    t        j                  d| j                  d   d         d uS )Nz.*?\bsse2\br   r   r   rN   s    r   	_has_sse2zLinuxCPUInfo._has_sse2?  s%    xx		!W(=>dJJr'   c                 R    t        j                  d| j                  d   d         d uS )Nz
.*?\bpni\br   r   r   rN   s    r   	_has_sse3zLinuxCPUInfo._has_sse3B  r  r'   c                 R    t        j                  d| j                  d   d         d uS )Nz.*?\bssse3\br   r   r   rN   s    r   
_has_ssse3zLinuxCPUInfo._has_ssse3E  %    xx1g)>?tKKr'   c                 R    t        j                  d| j                  d   d         d uS )Nz.*?\b3dnow\br   r   r   rN   s    r   
_has_3dnowzLinuxCPUInfo._has_3dnowH  r
  r'   c                 R    t        j                  d| j                  d   d         d uS )Nz.*?\b3dnowext\br   r   r   rN   s    r   _has_3dnowextzLinuxCPUInfo._has_3dnowextK  s&    xx*DIIaL,AB$NNr'   )9rc   rd   re   r#   ru   rw   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   _is_i386r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   _is_Xeonr   r   r   r   r   r   rO   r   r   r   r  r  r  r	  r  r  r;   r'   r   rh   rh   v   s4   D#.
;??NN@@@@@@.FFGH H;-EE@@@@@@@@7KB
<O H88888#11JJKJLLOr'   rh   c                       e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(y)'IRIXCPUInfoNc                 \    | j                   y t        ddd      }|| j                  _         y )Nsysconf )r   r   )r2   r   )r#   r6   rq   r<   r#   s     r   ru   zIRIXCPUInfo.__init__R  s-    99 %iS8>@"r'   c                      y r:   r;   rN   s    r   rw   zIRIXCPUInfo._not_implY  rx   r'   c                 >    | j                   j                  d      dk(  S )NNUM_PROCESSORS1r#   getrN   s    r   r   zIRIXCPUInfo._is_singleCPU\  s    yy}}-.#55r'   c                 L    t        | j                  j                  dd            S )Nr  r   intr#   r  rN   s    r   rO   zIRIXCPUInfo._getNCPUs_  s    499==!11566r'   c                     | j                   j                  d      j                         d   j                         d|z  k(  S )N
PROCESSORSr   zr%s)r#   r  r0   lowerr<   ns     r   	__cputypezIRIXCPUInfo.__cputypeb  s5    yy}}\*00215;;=!LLr'   c                 $    | j                  d      S )Ni  _IRIXCPUInfo__cputyperN   s    r   	_is_r2000zIRIXCPUInfo._is_r2000e      ~~d##r'   c                 $    | j                  d      S )Ni  r'  rN   s    r   	_is_r3000zIRIXCPUInfo._is_r3000h  r*  r'   c                 $    | j                  d      S )Ni<  r'  rN   s    r   	_is_r3900zIRIXCPUInfo._is_r3900k  r*  r'   c                 $    | j                  d      S )Ni  r'  rN   s    r   	_is_r4000zIRIXCPUInfo._is_r4000n  r*  r'   c                 $    | j                  d      S )Ni  r'  rN   s    r   	_is_r4100zIRIXCPUInfo._is_r4100q  r*  r'   c                 $    | j                  d      S )Ni  r'  rN   s    r   	_is_r4300zIRIXCPUInfo._is_r4300t  r*  r'   c                 $    | j                  d      S )Ni0  r'  rN   s    r   	_is_r4400zIRIXCPUInfo._is_r4400w  r*  r'   c                 $    | j                  d      S )Ni  r'  rN   s    r   	_is_r4600zIRIXCPUInfo._is_r4600z  r*  r'   c                 $    | j                  d      S )Ni*  r'  rN   s    r   	_is_r4650zIRIXCPUInfo._is_r4650}  r*  r'   c                 $    | j                  d      S )Ni  r'  rN   s    r   	_is_r5000zIRIXCPUInfo._is_r5000  r*  r'   c                 $    | j                  d      S )Nip  r'  rN   s    r   	_is_r6000zIRIXCPUInfo._is_r6000  r*  r'   c                 $    | j                  d      S )Ni@  r'  rN   s    r   	_is_r8000zIRIXCPUInfo._is_r8000  r*  r'   c                 $    | j                  d      S )Ni'  r'  rN   s    r   
_is_r10000zIRIXCPUInfo._is_r10000      ~~e$$r'   c                 $    | j                  d      S )Ni.  r'  rN   s    r   
_is_r12000zIRIXCPUInfo._is_r12000  rC  r'   c                 $    | j                  d      S )Norionr'  rN   s    r   
_is_rorionzIRIXCPUInfo._is_rorion  s    ~~g&&r'   c                 H    	 | j                   j                  d      S #  Y y xY w)NMACHINEr  rN   s    r   get_ipzIRIXCPUInfo.get_ip  s$    	99==++	s    !c                 `    | j                   j                  d      j                         d|z  k(  S )NrJ  zip%s)r#   r  r"  r#  s     r   	__machinezIRIXCPUInfo.__machine  s'    yy}}Y'--/6Q<??r'   c                 $    | j                  d      S )N   _IRIXCPUInfo__machinerN   s    r   _is_IP19zIRIXCPUInfo._is_IP19      ~~b!!r'   c                 $    | j                  d      S )N   rP  rN   s    r   _is_IP20zIRIXCPUInfo._is_IP20  rS  r'   c                 $    | j                  d      S )N   rP  rN   s    r   _is_IP21zIRIXCPUInfo._is_IP21  rS  r'   c                 $    | j                  d      S N   rP  rN   s    r   _is_IP22zIRIXCPUInfo._is_IP22  rS  r'   c                 H    | j                  d      xr | j                         S r[  )rQ  r0  rN   s    r   _is_IP22_4kzIRIXCPUInfo._is_IP22_4k      ~~b!6dnn&66r'   c                 H    | j                  d      xr | j                         S r[  rQ  r<  rN   s    r   _is_IP22_5kzIRIXCPUInfo._is_IP22_5k  r`  r'   c                 $    | j                  d      S )N   rP  rN   s    r   _is_IP24zIRIXCPUInfo._is_IP24  rS  r'   c                 $    | j                  d      S )N   rP  rN   s    r   _is_IP25zIRIXCPUInfo._is_IP25  rS  r'   c                 $    | j                  d      S )N   rP  rN   s    r   _is_IP26zIRIXCPUInfo._is_IP26  rS  r'   c                 $    | j                  d      S )N   rP  rN   s    r   _is_IP27zIRIXCPUInfo._is_IP27  rS  r'   c                 $    | j                  d      S )N   rP  rN   s    r   _is_IP28zIRIXCPUInfo._is_IP28  rS  r'   c                 $    | j                  d      S )N   rP  rN   s    r   _is_IP30zIRIXCPUInfo._is_IP30  rS  r'   c                 $    | j                  d      S N    rP  rN   s    r   _is_IP32zIRIXCPUInfo._is_IP32  rS  r'   c                 H    | j                  d      xr | j                         S rw  rb  rN   s    r   _is_IP32_5kzIRIXCPUInfo._is_IP32_5k  r`  r'   c                 H    | j                  d      xr | j                         S rw  )rQ  rB  rN   s    r   _is_IP32_10kzIRIXCPUInfo._is_IP32_10k  s    ~~b!7doo&77r'   ))rc   rd   re   r#   ru   rw   r   rO   r(  r)  r,  r.  r0  r2  r4  r6  r8  r:  r<  r>  r@  rB  rE  rH  rK  rQ  rR  rV  rY  r]  r_  rc  rf  ri  rl  ro  rr  ru  ry  r{  r}  r;   r'   r   r  r  O  s    D#67M$$$$$$$$$$$$%%'@""""77"""""""78r'   r  c                       e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)DarwinCPUInfoNc                 ~    | j                   y t        dd      }t        ddgd      |d<   || j                  _         y )	Narchmachine)r  r  sysctlhw=r2   	sysctl_hw)r#   r&   r6   rq   r  s     r   ru   zDarwinCPUInfo.__init__  s@    99 $-/2Hd3CM["r'   c                      y r:   r;   rN   s    r   rw   zDarwinCPUInfo._not_impl  s    r'   c                 R    t        | j                  d   j                  dd            S Nr  zhw.ncpur   r  rN   s    r   rO   zDarwinCPUInfo._getNCPUs  s#    499[)--i;<<r'   c                 ,    | j                   d   d   dk(  S )Nr  
hw.machinezPower Macintoshr|   rN   s    r   _is_Power_Macintoshz!DarwinCPUInfo._is_Power_Macintosh  s    yy%l37HHHr'   c                 &    | j                   d   dk(  S )Nr  i386r|   rN   s    r   r  zDarwinCPUInfo._is_i386      yy F**r'   c                 &    | j                   d   dk(  S )Nr  ppcr|   rN   s    r   _is_ppczDarwinCPUInfo._is_ppc  s    yy E))r'   c                 ,    | j                   d   d|z  k(  S )Nr  zppc%sr|   r#  s     r   rM  zDarwinCPUInfo.__machine  s    yy#w{22r'   c                 $    | j                  d      S )NiY  _DarwinCPUInfo__machinerN   s    r   
_is_ppc601zDarwinCPUInfo._is_ppc601      !44r'   c                 $    | j                  d      S )NiZ  r  rN   s    r   
_is_ppc602zDarwinCPUInfo._is_ppc602  r  r'   c                 $    | j                  d      S )Ni[  r  rN   s    r   
_is_ppc603zDarwinCPUInfo._is_ppc603  r  r'   c                 $    | j                  d      S )N603er  rN   s    r   _is_ppc603ezDarwinCPUInfo._is_ppc603e      $.."88r'   c                 $    | j                  d      S )Ni\  r  rN   s    r   
_is_ppc604zDarwinCPUInfo._is_ppc604  r  r'   c                 $    | j                  d      S )N604er  rN   s    r   _is_ppc604ezDarwinCPUInfo._is_ppc604e  r  r'   c                 $    | j                  d      S )Nil  r  rN   s    r   
_is_ppc620zDarwinCPUInfo._is_ppc620  r  r'   c                 $    | j                  d      S )Niv  r  rN   s    r   
_is_ppc630zDarwinCPUInfo._is_ppc630  r  r'   c                 $    | j                  d      S )Ni  r  rN   s    r   
_is_ppc740zDarwinCPUInfo._is_ppc740  r  r'   c                 $    | j                  d      S )Ni  r  rN   s    r   _is_ppc7400zDarwinCPUInfo._is_ppc7400      $.."66r'   c                 $    | j                  d      S )Ni  r  rN   s    r   _is_ppc7450zDarwinCPUInfo._is_ppc7450  r  r'   c                 $    | j                  d      S )Ni  r  rN   s    r   
_is_ppc750zDarwinCPUInfo._is_ppc750  r  r'   c                 $    | j                  d      S )Ni  r  rN   s    r   
_is_ppc403zDarwinCPUInfo._is_ppc403  r  r'   c                 $    | j                  d      S )Ni  r  rN   s    r   
_is_ppc505zDarwinCPUInfo._is_ppc505  r  r'   c                 $    | j                  d      S )Ni!  r  rN   s    r   
_is_ppc801zDarwinCPUInfo._is_ppc801  r  r'   c                 $    | j                  d      S )Ni5  r  rN   s    r   
_is_ppc821zDarwinCPUInfo._is_ppc821  r  r'   c                 $    | j                  d      S )Ni7  r  rN   s    r   
_is_ppc823zDarwinCPUInfo._is_ppc823  r  r'   c                 $    | j                  d      S )Ni\  r  rN   s    r   
_is_ppc860zDarwinCPUInfo._is_ppc860  r  r'   )rc   rd   re   r#   ru   rw   rO   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    sc    D# =I+*3 544848444664444444r'   r  c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)NetBSDCPUInfoNc                     | j                   y i }t        ddgd      |d<   |d   j                  dd      |d<   |d   j                  d	d      |d
<   || j                  _         y )Nr  r  r  r  r  zhw.machine_archr   r  r  r  )r#   r6   r  rq   r  s     r   ru   zNetBSDCPUInfo.__init__  sm    	YY		$,h-=3G${k"&&'8!<$v,%)),:$y/$..r'   c                      y r:   r;   rN   s    r   rw   zNetBSDCPUInfo._not_impl  s    dr'   c                 R    t        | j                  d   j                  dd            S r  r  rN   s    r   rO   zNetBSDCPUInfo._getNCPUs  s#    	TYY{#''	15	66r'   c                 P    | j                   d   j                  dd      dd dk(  ryy)	Nr  hw.modelr   r      IntelTFr  rN   s    r   r   zNetBSDCPUInfo._is_Intel  s-    	YY{
B/!4?
	r'   c                 P    | j                   d   j                  dd      dd dk(  ryy)	Nr  r  r   r      AMDTFr  rN   s    r   r}   zNetBSDCPUInfo._is_AMD  s-    	YY{
B/!4=
	r'   )	rc   rd   re   r#   ru   rw   rO   r   r}   r;   r'   r   r  r  	  s      7
r'   r  c                       e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)SunOSCPUInfoNc                    | j                   y t        ddddgddgddg      }t        dd	gd
      |d<   t        g d      D ]0  }t	        j
                  d|      }|s|j                  d      |d<    n || j                  _         y )Nr  machrj   z-iisainfoz-bz-n)r  r  uname_i	isainfo_b	isainfo_nz-Xr  r  uname_X)psrinfoz-v0z+\s*The (?P<p>[\w\d]+) processor operates atr   	processor)r#   r&   r6   r-   rS   r   rV   rq   )r<   r#   r,   ms       r   ru   zSunOSCPUInfo.__init__'  s    99 !'%,dO'0$&7'0$&7	
 1'4cJY#$:;DGNA$%GGCL[!	 <
 #r'   c                      y r:   r;   rN   s    r   rw   zSunOSCPUInfo._not_impl8  rx   r'   c                 &    | j                   d   dk(  S )Nr  r  r|   rN   s    r   r  zSunOSCPUInfo._is_i386;  s    yy%//r'   c                 &    | j                   d   dk(  S )Nr  sparcr|   rN   s    r   	_is_sparczSunOSCPUInfo._is_sparc>  s    yy%00r'   c                 &    | j                   d   dk(  S )Nr  sparcv9r|   rN   s    r   _is_sparcv9zSunOSCPUInfo._is_sparcv9A      yy%22r'   c                 R    t        | j                  d   j                  dd            S )Nr  NumCPUr   r  rN   s    r   rO   zSunOSCPUInfo._getNCPUsD  s#    499Y'++Ha899r'   c                 &    | j                   d   dk(  S )Nr  sun4r|   rN   s    r   _is_sun4zSunOSCPUInfo._is_sun4G  r  r'   c                 L    t        j                  d| j                  d         d uS )NSUNWr  r   rN   s    r   _is_SUNWzSunOSCPUInfo._is_SUNWJ  s!    xx9!56dBBr'   c                 L    t        j                  d| j                  d         d uS )Nz.*SPARCstation-5r  r   rN   s    r   _is_sparcstation5zSunOSCPUInfo._is_sparcstation5M  s"    xx+TYYy-AB$NNr'   c                 L    t        j                  d| j                  d         d uS )Nz	.*Ultra-1r  r   rN   s    r   
_is_ultra1zSunOSCPUInfo._is_ultra1P  !    xxdii	&:;4GGr'   c                 L    t        j                  d| j                  d         d uS )Nz.*Ultra-250r  r   rN   s    r   _is_ultra250zSunOSCPUInfo._is_ultra250S  s!    xx		)(<=TIIr'   c                 L    t        j                  d| j                  d         d uS )Nz	.*Ultra-2r  r   rN   s    r   
_is_ultra2zSunOSCPUInfo._is_ultra2V  r  r'   c                 L    t        j                  d| j                  d         d uS )Nz
.*Ultra-30r  r   rN   s    r   _is_ultra30zSunOSCPUInfo._is_ultra30Y  !    xxtyy';<DHHr'   c                 L    t        j                  d| j                  d         d uS )Nz	.*Ultra-4r  r   rN   s    r   
_is_ultra4zSunOSCPUInfo._is_ultra4\  r  r'   c                 L    t        j                  d| j                  d         d uS )Nz.*Ultra-5_10r  r   rN   s    r   _is_ultra5_10zSunOSCPUInfo._is_ultra5_10_  s!    xx9)=>dJJr'   c                 L    t        j                  d| j                  d         d uS )Nz	.*Ultra-5r  r   rN   s    r   
_is_ultra5zSunOSCPUInfo._is_ultra5b  r  r'   c                 L    t        j                  d| j                  d         d uS )Nz
.*Ultra-60r  r   rN   s    r   _is_ultra60zSunOSCPUInfo._is_ultra60e  r  r'   c                 L    t        j                  d| j                  d         d uS )Nz
.*Ultra-80r  r   rN   s    r   _is_ultra80zSunOSCPUInfo._is_ultra80h  r  r'   c                 L    t        j                  d| j                  d         d uS )Nz.*Ultra-Enterpriser  r   rN   s    r   _is_ultraenterpricez SunOSCPUInfo._is_ultraenterpricek  s"    xx-tyy/CDDPPr'   c                 L    t        j                  d| j                  d         d uS )Nz.*Ultra-Enterprise-10000r  r   rN   s    r   _is_ultraenterprice10kz#SunOSCPUInfo._is_ultraenterprice10kn  s#    xx3TYYy5IJRVVVr'   c                 L    t        j                  d| j                  d         d uS )Nz
.*Sun-Firer  r   rN   s    r   _is_sunfirezSunOSCPUInfo._is_sunfireq  r  r'   c                 L    t        j                  d| j                  d         d uS )Nz.*Ultrar  r   rN   s    r   	_is_ultrazSunOSCPUInfo._is_ultrat  s!    xx
DIIi$89EEr'   c                 &    | j                   d   dk(  S )Nr  sparcv7r|   rN   s    r   _is_cpusparcv7zSunOSCPUInfo._is_cpusparcv7w  r  r'   c                 &    | j                   d   dk(  S )Nr  sparcv8r|   rN   s    r   _is_cpusparcv8zSunOSCPUInfo._is_cpusparcv8z  r  r'   c                 &    | j                   d   dk(  S )Nr  r  r|   rN   s    r   _is_cpusparcv9zSunOSCPUInfo._is_cpusparcv9}  r  r'   )rc   rd   re   r#   ru   rw   r  r  r  rO   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r;   r'   r   r  r  $  s    D#"013:+COHJHIHKHIIQWIF333r'   r  c                       e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#y)"Win32CPUInfoNz,HARDWARE\DESCRIPTION\System\CentralProcessorc                 j   	 dd l }| j                  y g }	 t	        j
                  dt        j                        }|j                  |j                  | j                        }d}	 	 |j                  ||      }|dz  }|j                  d|i       |j                  ||      }d}	 	 |j                  ||      \  }	}
}|dz   }|
|d   |	<   |	dk(  rt|j                  |
      }|rat        |j                  d            |d   d<   t        |j                  d	            |d   d
<   t        |j                  d            |d   d<   	 # t        $ r dd l}Y Kw xY w# |j                   $ r Y nw xY w# |j                   $ r Y nw xY wn!#  t#        t$        j&                  d       Y nxY w|| j(                  _        y )Nr   zFfamily\s+(?P<FML>\d+)\s+model\s+(?P<MDL>\d+)\s+stepping\s+(?P<STP>\d+)r   	Processorrm   
IdentifierFMLFamilyMDLModelSTPSteppingz
(ignoring))_winregImportErrorwinregr#   rS   rT   r   OpenKeyHKEY_LOCAL_MACHINEpkeyEnumKeyro   	EnumValuerU   r  rV   errorprintsys	exc_valuerq   )r<   r  r#   prgxchndpnumprocphndpidxrJ   rt   vtpesrchs                r   ru   zWin32CPUInfo.__init__  s   	% 99  	/ :: <=?]]LD??7#=#=tyyIDDR"??46D AIDKKd 34"??46DDR070A0A$0M-D% $(!8D-2DHTN#|3'+{{5'9#'9<TZZ=N9ODHX$68;DJJu<M8NDHW$5;>tzz%?P;QDHZ$8 /  	%$	%4  '}} "!" }}   (	/#--."sf   E AF $E* 6-F $E :BF EEE'$F &E''F *E<9F ;E<<F F c                      y r:   r;   rN   s    r   rw   zWin32CPUInfo._not_impl  rx   r'   c                 ,    | j                   d   d   dk(  S )Nr   VendorIdentifierr{   r|   rN   s    r   r}   zWin32CPUInfo._is_AMD      yy|./>AAr'   c                 P    | j                         xr | j                  d   d   dk(  S Nr   r     r   rN   s    r   	_is_Am486zWin32CPUInfo._is_Am486  %    {{}<1h!71!<<r'   c                 P    | j                         xr | j                  d   d   dk(  S r4  r   rN   s    r   
_is_Am5x86zWin32CPUInfo._is_Am5x86  r7  r'   c                 |    | j                         xr+ | j                  d   d   dk(  xr | j                  d   d   dv S )Nr   r  r  r  )r   r   r/   r  r   rN   s    r   	_is_AMDK5zWin32CPUInfo._is_AMDK5  sC     6$))A,x"8A"= 6		!W%5	7r'   c                 |    | j                         xr+ | j                  d   d   dk(  xr | j                  d   d   dv S )Nr   r  r  r  )      r   rN   s    r   	_is_AMDK6zWin32CPUInfo._is_AMDK6  sC     0$))A,x"8A"= 0		!W%/	1r'   c                 ~    | j                         xr, | j                  d   d   dk(  xr | j                  d   d   dk(  S )Nr   r  r  r     r   rN   s    r   _is_AMDK6_2zWin32CPUInfo._is_AMDK6_2  C     +$))A,x"8A"= +		!W%*	,r'   c                 ~    | j                         xr, | j                  d   d   dk(  xr | j                  d   d   dk(  S )Nr   r  r  r  	   r   rN   s    r   _is_AMDK6_3zWin32CPUInfo._is_AMDK6_3  rC  r'   c                 P    | j                         xr | j                  d   d   dk(  S Nr   r  r=  r   rN   s    r   	_is_AMDK7zWin32CPUInfo._is_AMDK7  r7  r'   c                 P    | j                         xr | j                  d   d   dk(  S Nr   r     r   rN   s    r   r   zWin32CPUInfo._is_AMD64  s%    {{}=1h!72!==r'   c                 ,    | j                   d   d   dk(  S )Nr   r1  r   r|   rN   s    r   r   zWin32CPUInfo._is_Intel  r2  r'   c                 ,    | j                   d   d   dk(  S )Nr   r  r  r|   rN   s    r   r  zWin32CPUInfo._is_i386      yy|H%**r'   c                 ,    | j                   d   d   dk(  S r4  r|   rN   s    r   r   zWin32CPUInfo._is_i486  rO  r'   c                 P    | j                         xr | j                  d   d   dk(  S Nr   r  r  r   rN   s    r   r   zWin32CPUInfo._is_i586  %    }}>499Q<#9Q#>>r'   c                 P    | j                         xr | j                  d   d   dk(  S rH  r   rN   s    r   r   zWin32CPUInfo._is_i686  rS  r'   c                 P    | j                         xr | j                  d   d   dk(  S rR  r   rN   s    r   r   zWin32CPUInfo._is_Pentium  rS  r'   c                 ~    | j                         xr, | j                  d   d   dk(  xr | j                  d   d   dk(  S )Nr   r  r  r  r5  r   rN   s    r   r   zWin32CPUInfo._is_PentiumMMX  C     +DIIaL$:a$? +		!W%*	,r'   c                 ~    | j                         xr, | j                  d   d   dk(  xr | j                  d   d   dk(  S )Nr   r  r=  r  r   r   rN   s    r   r   zWin32CPUInfo._is_PentiumPro  rW  r'   c                 |    | j                         xr+ | j                  d   d   dk(  xr | j                  d   d   dv S )Nr   r  r=  r  )r  r  r=  r   rN   s    r   r   zWin32CPUInfo._is_PentiumII  sC     3DIIaL$:a$? 3		!W%2	4r'   c                 |    | j                         xr+ | j                  d   d   dk(  xr | j                  d   d   dv S )Nr   r  r=  r  r>  rA  rE  
      r   rN   s    r   r   zWin32CPUInfo._is_PentiumIII  sD     ;DIIaL$:a$? ;		!W%)::	<r'   c                 P    | j                         xr | j                  d   d   dk(  S rK  r   rN   s    r   r   zWin32CPUInfo._is_PentiumIV   s%    }}?499Q<#9R#??r'   c                 |    | j                         xr+ | j                  d   d   dk(  xr | j                  d   d   dv S )Nr   r  r=  r  )rE        r   rN   s    r   r   zWin32CPUInfo._is_PentiumM  sC     5DIIaL$:a$? 5		!W%4	6r'   c                 |    | j                         xr+ | j                  d   d   dk(  xr | j                  d   d   dv S )Nr   r  r=  r  )rL        r   rN   s    r   r   zWin32CPUInfo._is_Core2  sC     6DIIaL$:a$? 6		!W%5	7r'   c                 2    t        | j                        dk(  S rM   r   rN   s    r   r   zWin32CPUInfo._is_singleCPU  r   r'   c                 ,    t        | j                        S r:   r   rN   s    r   rO   zWin32CPUInfo._getNCPUs  r   r'   c                     | j                         rB| j                  d   d   dk(  xr | j                  d   d   dk(  xs | j                  d   d   dv S | j                         r| j                  d   d   dv S y)	Nr   r  r  r  r5  r=  rL  r  r=  rL  Fr   r#   r   rN   s    r   r   zWin32CPUInfo._has_mmx  s    ==?YYq\(+q0 0YYq\'*a/8YYq\(+w69 [[]99Q<)Z77r'   c                 L   | j                         rB| j                  d   d   dk(  xr | j                  d   d   dv xs | j                  d   d   dk(  S | j                         rB| j                  d   d   dk(  xr | j                  d   d   dv xs | j                  d   d   dk(  S y)	Nr   r  r=  r  r[  rL  )r=  r>  rA  r\  Frj  rN   s    r   r  zWin32CPUInfo._has_sse  s    ==?YYq\(+q0 @YYq\'*.??1IIaL*b02 [[]YYq\(+q0 <YYq\'*m;1IIaL*b02 r'   c                     | j                         r4| j                         xs" | j                         xs | j                         S | j	                         r| j                         S y)NF)r   is_Pentium4is_PentiumMis_Core2r   is_AMD64rN   s    r   r  zWin32CPUInfo._has_sse2)  sK    ==?##%N)9)9);Nt}}N[[]==?"r'   c                 N    | j                         xr | j                  d   d   dv S )Nr   r  ri  r   rN   s    r   r  zWin32CPUInfo._has_3dnow1  s%    {{}E1h!7:!EEr'   c                 N    | j                         xr | j                  d   d   dv S )Nr   r  rh  r   rN   s    r   r  zWin32CPUInfo._has_3dnowext4  s%    {{}B1h!77!BBr'   )$rc   rd   re   r#   r   ru   rw   r}   r6  r9  r;  r?  rB  rF  rI  r   r   r  r   r   r   r   r   r   r   r   r   r   r   r   rO   r   r  r  r  r  r;   r'   r   r  r    s    D:D
*#X
B==71,,=>
B++???,,4<@67#
FCr'   r  linuxirixdarwinr=  netbsdsunoswin32cygwin__main__r   r  zCPU information: r  ))r   r   )&rf   __all__r%  rS   typesr   r	   r   rQ   rG   is_cpu_amd_intelr   r&   r-   r6   objectr8   rh   r  r  r  r  r  rD   cpuinfor   rc   is_blaar   r   r#   dirrJ   rF   rro   r$  joinr;   r'   r   <module>r     s   '   	     

 8<&'!*& !*HVO; VOrw8+ w8t>5K >5@K 6Z3; Z3ztC; tCn <<7#G\\V$G\\XG\\!A("G\\W%G\\W%G\\X&G GizKKMLLNLLNDG7c>d1gn&T!"X&(A6KK48Q 78KKQR)  


./ r'   