
    ee                        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                            d          reZnej                            d          reZn}ej        dk    reZnoej        dd         dk    reZnYej                            d          reZn<ej                            d          reZnej                            d           reZneZ e            Zed!k    re                                 e                                 e                                 g Z ee          D ]~Z e d         d"k    rpe d         d"k    rd  e!ee dd                               Z"e"rFe"dk    r#e#                    e dd         d#e"           ae#                    e dd                     e$d$d%%                    e          z              dS 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                 h   	 t          j        | t           j                  }|                                \  }}|j        }nA# t
          $ r4}t          j        t          |          t          |           Y d }~dS d }~ww xY wt          j        |          rt          j        |          |v rd|fS d|fS )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.11/site-packages/numexpr/cpuinfo.py	getoutputr   #   s    S999MMOO	   c!ffkjAAAAyyyyy 
|F v 6 6:K K KV|&=s   >A 
A?)A::A?c                     i }|D ]9}t          ||         | |dz             \  }}|r|                                ||<   :|S )Nr   r   r   )r   strip)r   r   kwinfokeyokr   s          r   command_infor'   0   s]    D ' 'r#w:K*4q.: : :
F 	'DIK    c              #      K   t          | ||dz             \  }}|sd S |                    d          }|                                D ]}|                                V  d S )Nr   r!   ascii)r   decode
splitlinesr"   )r   r   r   r&   r   lines         r   command_by_liner.   :   s      32C&01n6 6 6JB  ]]7##F!!##  jjll r(   c                     i }t          | ||dz             D ]F}d |                    |d          D             }t          |          dk    r|d         ||d         <   G|S )Nr   r!   c                 6    g | ]}|                                 S  r"   .0ss     r   
<listcomp>z*key_value_from_command.<locals>.<listcomp>L   s     3331QWWYY333r(      r   )r.   splitlen)r   sepr   r   dr-   ls          r   key_value_from_commandr=   G   sx    
A7H+5>; ; ;  33

3 2 2333q66Q;;dAadGHr(   c                   6    e Zd ZdZd Zd Zd Zd Zd Zd Z	dS )	CPUInfoBasezkHolds CPU information and provides methods for requiring
    the availability of various CPU features.
    c                 (    	  |            S #  Y d S xY wNr1   )selffuncs     r   	_try_callzCPUInfoBase._try_callW   s"    	466M	DDs   	 c                     |                     d          sIt          | d|z             r3t          | d|z             }t          j        |          r| j        |fdS nd S t          |          )Nr   c                      | |          S rA   r1   )rC   attrs     r   <lambda>z)CPUInfoBase.__getattr__.<locals>.<lambda>b   s    $$t** r(   c                      d S rA   r1   r1   r(   r   rH   z)CPUInfoBase.__getattr__.<locals>.<lambda>d   s    t r(   )
startswithhasattrgetattrinspectismethodrD   AttributeError)rB   namerG   s      r   __getattr__zCPUInfoBase.__getattr__]   s    s## 	$tS4Z(( $tS4Z00#D)) M'+~DLLLLM $|#T"""r(   c                     dS Nr   r1   rB   s    r   	_getNCPUszCPUInfoBase._getNCPUsg   s    qr(   c                     t          j                    d         }t          j        d                              |                              d          }|S )Nr   z(\d+)bitr   )platformarchitecturerecompilesearchgroup)rB   abitsnbitss      r   __get_nbitszCPUInfoBase.__get_nbitsj   sE    %''*
;''..u55;;A>>r(   c                 2    |                                  dk    S )N32_CPUInfoBase__get_nbitsrT   s    r   	_is_32bitzCPUInfoBase._is_32bito       !!T))r(   c                 2    |                                  dk    S )N64rb   rT   s    r   	_is_64bitzCPUInfoBase._is_64bitr   re   r(   N)
__name__
__module____qualname____doc__rD   rQ   rU   rc   rd   rh   r1   r(   r   r?   r?   R   sx           # # #    
* * ** * * * *r(   r?   c                   L   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 Z8dS )5LinuxCPUInfoNc                 6   | j         d S i g}t          ddg          \  }}|r|                                |d         d<   	 t          d          }|D ]g}d |                    dd          D             }t          |          d	k    r6|\  }}|r
||d
         v r|                    i            ||d
         |<   h|                                 n># t          $ r1}	t          j
        t          |	          t                     Y d }	~	nd }	~	ww xY w|| j        _         d S )Nunamez-mr   uname_mz/proc/cpuinfoc                 6    g | ]}|                                 S r1   r2   r3   s     r   r6   z)LinuxCPUInfo.__init__.<locals>.<listcomp>   s     DDDAaggiiDDDr(   :r   r7   )r$   r   r"   openr8   r9   appendcloser   r   r   r   r   	__class__)
rB   r$   r&   r   for-   
name_valuerP   valuer   s
             r   __init__zLinuxCPUInfo.__init__y   sG   9 Ft//
F 	0!'DGI	o&&B  ' 'DDC1C1CDDD
z??a''(e $ttBx//KKOOO!&RHHJJJJ   	/ 	/ 	/M#a&&+........	/ #s   C 
D
'DD
c                     d S rA   r1   rT   s    r   	_not_implzLinuxCPUInfo._not_impl       r(   c                 0    | j         d         d         dk    S )Nr   	vendor_idAuthenticAMDr$   rT   s    r   _is_AMDzLinuxCPUInfo._is_AMD       y|K(N::r(   c                 X    |                                  o| j        d         d         dk    S )Nr   model2r   r$   rT   s    r   _is_AthlonK6_2zLinuxCPUInfo._is_AthlonK6_2   %    ||~~>$)A,w"73">>r(   c                 X    |                                  o| j        d         d         dk    S )Nr   r   3r   rT   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rY   matchr$   rT   s    r   _is_AthlonK6zLinuxCPUInfo._is_AthlonK6   $    xdil<&@AAMMr(   c                 R    t          j        d| j        d         d                   d uS )Nz	.*?AMD-K7r   r   r   rT   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   rT   s    r   _is_AthlonMPzLinuxCPUInfo._is_AthlonMP   1    x/	!\24 4;?@ 	@r(   c                 X    |                                  o| j        d         d         dk    S )Nr   family15is_AMDr$   rT   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   rT   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   rT   s    r   _is_AthlonHXzLinuxCPUInfo._is_AthlonHX   s1    x)	!\24 4;?@ 	@r(   c                 R    t          j        d| j        d         d                   d uS )Nz.*?Opteron\br   r   r   rT   s    r   _is_OpteronzLinuxCPUInfo._is_Opteron   s0    x	!\24 4;?@ 	@r(   c                 R    t          j        d| j        d         d                   d uS )Nz.*?Hammer\br   r   r   rT   s    r   
_is_HammerzLinuxCPUInfo._is_Hammer   s0    x	!\24 4;?@ 	@r(   c                 0    | j         d         d         dk    S )Nr   r   Alphar   rT   s    r   	_is_AlphazLinuxCPUInfo._is_Alpha   s    y|E"g--r(   c                 X    |                                  o| j        d         d         dk    S )Nr   	cpu modelEV4is_Alphar$   rT   s    r   _is_EV4zLinuxCPUInfo._is_EV4   %    }}E49Q<#<#EEr(   c                 X    |                                  o| j        d         d         dk    S )Nr   r   EV5r   rT   s    r   _is_EV5zLinuxCPUInfo._is_EV5   r   r(   c                 X    |                                  o| j        d         d         dk    S )Nr   r   EV56r   rT   s    r   _is_EV56zLinuxCPUInfo._is_EV56   s%    }}F49Q<#<#FFr(   c                 X    |                                  o| j        d         d         dk    S )Nr   r   PCA56r   rT   s    r   	_is_PCA56zLinuxCPUInfo._is_PCA56   s%    }}G49Q<#<#GGr(   c                 0    | j         d         d         dk    S )Nr   r   GenuineIntelr   rT   s    r   	_is_IntelzLinuxCPUInfo._is_Intel   r   r(   c                 0    | j         d         d         dk    S )Nr   r   i486r   rT   s    r   _is_i486zLinuxCPUInfo._is_i486   s    y|E"f,,r(   c                 X    |                                  o| j        d         d         dk    S )Nr   
cpu family5is_Intelr$   rT   s    r   _is_i586zLinuxCPUInfo._is_i586   %    }}D49Q<#=#DDr(   c                 X    |                                  o| j        d         d         dk    S )Nr   r   6r   rT   s    r   _is_i686zLinuxCPUInfo._is_i686   r   r(   c                 R    t          j        d| j        d         d                   d uS )Nz
.*?Celeronr   r   r   rT   s    r   _is_CeleronzLinuxCPUInfo._is_Celeron   0    x	!\24 4;?@ 	@r(   c                 R    t          j        d| j        d         d                   d uS )Nz
.*?Pentiumr   r   r   rT   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   rT   s    r   _is_PentiumIIzLinuxCPUInfo._is_PentiumII   s1    x,	!\24 4;?@ 	@r(   c                 R    t          j        d| j        d         d                   d uS )Nz.*?PentiumPro\br   r   r   rT   s    r   _is_PentiumProzLinuxCPUInfo._is_PentiumPro   s1    x*	!\24 4;?@ 	@r(   c                 R    t          j        d| j        d         d                   d uS )Nz.*?Pentium.*?MMX\br   r   r   rT   s    r   _is_PentiumMMXzLinuxCPUInfo._is_PentiumMMX   1    x-	!\24 4;?@ 	@r(   c                 R    t          j        d| j        d         d                   d uS )Nz.*?Pentium.*?III\br   r   r   rT   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   rT   s    r   _is_PentiumIVzLinuxCPUInfo._is_PentiumIV   s1    x0	!\24 4;?@ 	@r(   c                 R    t          j        d| j        d         d                   d uS )Nz.*?Pentium.*?M\br   r   r   rT   s    r   _is_PentiumMzLinuxCPUInfo._is_PentiumM   s1    x+	!\24 4;?@ 	@r(   c                 R    |                                  o|                                 S rA   )is_PentiumIVhas_sse3rT   s    r   _is_PrescottzLinuxCPUInfo._is_Prescott   s!      ""6t}}6r(   c                     |                                  oe| j        d         d         dv oP|                                 o|                                  o't	          j        d| j        d         d                   d uS )Nr   r   )r   r   z	.*?\blm\bflags)r   r$   r   	has_ssse3rY   r   rT   s    r   
_is_NoconazLinuxCPUInfo._is_Nocona   sx     J	!\*k9J 9)9)9%9J ty|G'<==TI		Kr(   c                     |                                  o;|                                 o't          j        d| j        d         d                   d uS )Nz.*?Core\(TM\)2\br   r   )is_64bitr   rY   r   r$   rT   s    r   	_is_Core2zLinuxCPUInfo._is_Core2  sR     ADMMOO A,1l35 5<@A	Br(   c                 R    t          j        d| j        d         d                   d uS )Nz.*?Itanium\br   r   r   rT   s    r   _is_ItaniumzLinuxCPUInfo._is_Itanium  s.    x	!X.0 07;< 	<r(   c                 h    t          j        d| j        d         d         t           j                  d uS )Nz	.*?XEON\br   r   )rY   r   r$   
IGNORECASErT   s    r   _is_XEONzLinuxCPUInfo._is_XEON  s6    x	!\2BMC CJNO 	Or(   c                 R    t          j        d| j        d         d                   d uS )Nz	.*POWER.*r   r   r   rT   s    r   	_is_PowerzLinuxCPUInfo._is_Power  s.    xy|E*, ,378 	8r(   c                 R    t          j        d| j        d         d                   d uS )Nz
.*POWER7.*r   r   r   rT   s    r   
_is_Power7zLinuxCPUInfo._is_Power7  .    xy|E*, ,378 	8r(   c                 R    t          j        d| j        d         d                   d uS )Nz
.*POWER8.*r   r   r   rT   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   rT   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   rT   s    r   _has_AltiveczLinuxCPUInfo._has_Altivec'  s/    x1y|E*, ,378 	8r(   c                 2    t          | j                  dk    S rS   r9   r$   rT   s    r   _is_singleCPUzLinuxCPUInfo._is_singleCPU-      49~~""r(   c                 *    t          | j                  S rA   r   rT   s    r   rU   zLinuxCPUInfo._getNCPUs0      49~~r(   c                 0    | j         d         d         dk    S )Nr   fdiv_bugyesr   rT   s    r   _has_fdiv_bugzLinuxCPUInfo._has_fdiv_bug3      y|J'500r(   c                 0    | j         d         d         dk    S )Nr   f00f_bugr   r   rT   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   rT   s    r   _has_mmxzLinuxCPUInfo._has_mmx9  $    xty|G'<==TIIr(   c                 R    t          j        d| j        d         d                   d uS )Nz
.*?\bsse\br   r   r   rT   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   rT   s    r   	_has_sse2zLinuxCPUInfo._has_sse2?  s$    x	!W(=>>dJJr(   c                 R    t          j        d| j        d         d                   d uS )Nz
.*?\bpni\br   r   r   rT   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   rT   s    r   
_has_ssse3zLinuxCPUInfo._has_ssse3E  $    x1g)>??tKKr(   c                 R    t          j        d| j        d         d                   d uS )Nz.*?\b3dnow\br   r   r   rT   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   rT   s    r   _has_3dnowextzLinuxCPUInfo._has_3dnowextK  s%    x*DIaL,ABB$NNr(   )9ri   rj   rk   r$   r|   r~   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   rU   r  r  r  r
  r  r  r  r  r  r1   r(   r   rn   rn   v   s       D# # #.  
; ; ;? ? ?? ? ?N N NN N N@ @ @@ @ @@ @ @@ @ @@ @ @@ @ @. . .F F FF F FG G GH H H H; ; ;- - -E E EE E E@ @ @@ @ @@ @ @@ @ @@ @ @@ @ @@ @ @@ @ @7 7 7K K KB B B
< < <O O O H8 8 88 8 88 8 88 8 88 8 8# # #  1 1 11 1 1J J JJ J JK K KJ J JL L LL L LO O O O Or(   rn   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(dS )'IRIXCPUInfoNc                 T    | j         d S t          ddd          }|| j        _         d S )Nsysconf )r   r   )r:   r   )r$   r=   rx   rB   r$   s     r   r|   zIRIXCPUInfo.__init__R  s=    9 F%iS8>@ @ @"r(   c                     d S rA   r1   rT   s    r   r~   zIRIXCPUInfo._not_implY  r   r(   c                 >    | j                             d          dk    S )NNUM_PROCESSORS1r$   getrT   s    r   r   zIRIXCPUInfo._is_singleCPU\  s    y}}-..#55r(   c                 R    t          | j                            dd                    S )Nr   r   intr$   r#  rT   s    r   rU   zIRIXCPUInfo._getNCPUs_  s!    49==!1155666r(   c                     | j                             d                                          d                                         d|z  k    S )N
PROCESSORSr   zr%s)r$   r#  r8   lowerrB   ns     r   	__cputypezIRIXCPUInfo.__cputypeb  s<    y}}\**002215;;==!LLr(   c                 ,    |                      d          S )Ni  _IRIXCPUInfo__cputyperT   s    r   	_is_r2000zIRIXCPUInfo._is_r2000e      ~~d###r(   c                 ,    |                      d          S )Ni  r.  rT   s    r   	_is_r3000zIRIXCPUInfo._is_r3000h  r1  r(   c                 ,    |                      d          S )Ni<  r.  rT   s    r   	_is_r3900zIRIXCPUInfo._is_r3900k  r1  r(   c                 ,    |                      d          S )Ni  r.  rT   s    r   	_is_r4000zIRIXCPUInfo._is_r4000n  r1  r(   c                 ,    |                      d          S )Ni  r.  rT   s    r   	_is_r4100zIRIXCPUInfo._is_r4100q  r1  r(   c                 ,    |                      d          S )Ni  r.  rT   s    r   	_is_r4300zIRIXCPUInfo._is_r4300t  r1  r(   c                 ,    |                      d          S )Ni0  r.  rT   s    r   	_is_r4400zIRIXCPUInfo._is_r4400w  r1  r(   c                 ,    |                      d          S )Ni  r.  rT   s    r   	_is_r4600zIRIXCPUInfo._is_r4600z  r1  r(   c                 ,    |                      d          S )Ni*  r.  rT   s    r   	_is_r4650zIRIXCPUInfo._is_r4650}  r1  r(   c                 ,    |                      d          S )Ni  r.  rT   s    r   	_is_r5000zIRIXCPUInfo._is_r5000  r1  r(   c                 ,    |                      d          S )Nip  r.  rT   s    r   	_is_r6000zIRIXCPUInfo._is_r6000  r1  r(   c                 ,    |                      d          S )Ni@  r.  rT   s    r   	_is_r8000zIRIXCPUInfo._is_r8000  r1  r(   c                 ,    |                      d          S )Ni'  r.  rT   s    r   
_is_r10000zIRIXCPUInfo._is_r10000      ~~e$$$r(   c                 ,    |                      d          S )Ni.  r.  rT   s    r   
_is_r12000zIRIXCPUInfo._is_r12000  rJ  r(   c                 ,    |                      d          S )Norionr.  rT   s    r   
_is_rorionzIRIXCPUInfo._is_rorion  s    ~~g&&&r(   c                 H    	 | j                             d          S #  Y d S xY w)NMACHINEr"  rT   s    r   get_ipzIRIXCPUInfo.get_ip  s+    	9==+++	DDs    !c                 h    | j                             d                                          d|z  k    S )NrQ  zip%s)r$   r#  r)  r*  s     r   	__machinezIRIXCPUInfo.__machine  s+    y}}Y''--//6Q<??r(   c                 ,    |                      d          S )N   _IRIXCPUInfo__machinerT   s    r   _is_IP19zIRIXCPUInfo._is_IP19      ~~b!!!r(   c                 ,    |                      d          S )N   rW  rT   s    r   _is_IP20zIRIXCPUInfo._is_IP20  rZ  r(   c                 ,    |                      d          S )N   rW  rT   s    r   _is_IP21zIRIXCPUInfo._is_IP21  rZ  r(   c                 ,    |                      d          S N   rW  rT   s    r   _is_IP22zIRIXCPUInfo._is_IP22  rZ  r(   c                 T    |                      d          o|                                 S rb  )rX  r7  rT   s    r   _is_IP22_4kzIRIXCPUInfo._is_IP22_4k  #    ~~b!!6dnn&6&66r(   c                 T    |                      d          o|                                 S rb  rX  rC  rT   s    r   _is_IP22_5kzIRIXCPUInfo._is_IP22_5k  rg  r(   c                 ,    |                      d          S )N   rW  rT   s    r   _is_IP24zIRIXCPUInfo._is_IP24  rZ  r(   c                 ,    |                      d          S )N   rW  rT   s    r   _is_IP25zIRIXCPUInfo._is_IP25  rZ  r(   c                 ,    |                      d          S )N   rW  rT   s    r   _is_IP26zIRIXCPUInfo._is_IP26  rZ  r(   c                 ,    |                      d          S )N   rW  rT   s    r   _is_IP27zIRIXCPUInfo._is_IP27  rZ  r(   c                 ,    |                      d          S )N   rW  rT   s    r   _is_IP28zIRIXCPUInfo._is_IP28  rZ  r(   c                 ,    |                      d          S )N   rW  rT   s    r   _is_IP30zIRIXCPUInfo._is_IP30  rZ  r(   c                 ,    |                      d          S N    rW  rT   s    r   _is_IP32zIRIXCPUInfo._is_IP32  rZ  r(   c                 T    |                      d          o|                                 S r~  ri  rT   s    r   _is_IP32_5kzIRIXCPUInfo._is_IP32_5k  rg  r(   c                 T    |                      d          o|                                 S r~  )rX  rI  rT   s    r   _is_IP32_10kzIRIXCPUInfo._is_IP32_10k  s#    ~~b!!7doo&7&77r(   ))ri   rj   rk   r$   r|   r~   r   rU   r/  r0  r3  r5  r7  r9  r;  r=  r?  rA  rC  rE  rG  rI  rL  rO  rR  rX  rY  r]  r`  rd  rf  rj  rm  rp  rs  rv  ry  r|  r  r  r  r1   r(   r   r  r  O  sJ       D# # #  6 6 67 7 7M M M$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $$ $ $% % %% % %' ' '  @ @ @" " "" " "" " "" " "7 7 77 7 7" " "" " "" " "" " "" " "" " "" " "7 7 78 8 8 8 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dS )DarwinCPUInfoNc                 ~    | j         d S t          dd          }t          ddgd          |d<   || j        _         d S )	Narchmachine)r  r  sysctlhw=r:   	sysctl_hw)r$   r'   r=   rx   r  s     r   r|   zDarwinCPUInfo.__init__  sT    9 F$-/ / /2Hd3CMMM["r(   c                     d S rA   r1   rT   s    r   r~   zDarwinCPUInfo._not_impl        r(   c                 ^    t          | j        d                             dd                    S Nr  zhw.ncpur   r%  rT   s    r   rU   zDarwinCPUInfo._getNCPUs  s'    49[)--i;;<<<r(   c                 0    | j         d         d         dk    S )Nr  
hw.machinezPower Macintoshr   rT   s    r   _is_Power_Macintoshz!DarwinCPUInfo._is_Power_Macintosh  s    y%l37HHHr(   c                 $    | j         d         dk    S )Nr  i386r   rT   s    r   r  zDarwinCPUInfo._is_i386      y F**r(   c                 $    | j         d         dk    S )Nr  ppcr   rT   s    r   _is_ppczDarwinCPUInfo._is_ppc  s    y E))r(   c                 *    | j         d         d|z  k    S )Nr  zppc%sr   r*  s     r   rT  zDarwinCPUInfo.__machine  s    y#w{22r(   c                 ,    |                      d          S )NiY  _DarwinCPUInfo__machinerT   s    r   
_is_ppc601zDarwinCPUInfo._is_ppc601      !4!44r(   c                 ,    |                      d          S )NiZ  r  rT   s    r   
_is_ppc602zDarwinCPUInfo._is_ppc602  r  r(   c                 ,    |                      d          S )Ni[  r  rT   s    r   
_is_ppc603zDarwinCPUInfo._is_ppc603  r  r(   c                 ,    |                      d          S )N603er  rT   s    r   _is_ppc603ezDarwinCPUInfo._is_ppc603e      $.."8"88r(   c                 ,    |                      d          S )Ni\  r  rT   s    r   
_is_ppc604zDarwinCPUInfo._is_ppc604  r  r(   c                 ,    |                      d          S )N604er  rT   s    r   _is_ppc604ezDarwinCPUInfo._is_ppc604e  r  r(   c                 ,    |                      d          S )Nil  r  rT   s    r   
_is_ppc620zDarwinCPUInfo._is_ppc620  r  r(   c                 ,    |                      d          S )Niv  r  rT   s    r   
_is_ppc630zDarwinCPUInfo._is_ppc630  r  r(   c                 ,    |                      d          S )Ni  r  rT   s    r   
_is_ppc740zDarwinCPUInfo._is_ppc740  r  r(   c                 ,    |                      d          S )Ni  r  rT   s    r   _is_ppc7400zDarwinCPUInfo._is_ppc7400      $.."6"66r(   c                 ,    |                      d          S )Ni  r  rT   s    r   _is_ppc7450zDarwinCPUInfo._is_ppc7450  r  r(   c                 ,    |                      d          S )Ni  r  rT   s    r   
_is_ppc750zDarwinCPUInfo._is_ppc750  r  r(   c                 ,    |                      d          S )Ni  r  rT   s    r   
_is_ppc403zDarwinCPUInfo._is_ppc403  r  r(   c                 ,    |                      d          S )Ni  r  rT   s    r   
_is_ppc505zDarwinCPUInfo._is_ppc505  r  r(   c                 ,    |                      d          S )Ni!  r  rT   s    r   
_is_ppc801zDarwinCPUInfo._is_ppc801  r  r(   c                 ,    |                      d          S )Ni5  r  rT   s    r   
_is_ppc821zDarwinCPUInfo._is_ppc821  r  r(   c                 ,    |                      d          S )Ni7  r  rT   s    r   
_is_ppc823zDarwinCPUInfo._is_ppc823  r  r(   c                 ,    |                      d          S )Ni\  r  rT   s    r   
_is_ppc860zDarwinCPUInfo._is_ppc860  r  r(   )ri   rj   rk   r$   r|   r~   rU   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r1   r(   r   r  r    s!       D# # # = = =I I I+ + +* * *3 3 3 54444444488844488844444444466666644444444444444444444444r(   r  c                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )NetBSDCPUInfoNc                     | j         d S i }t          ddgd          |d<   |d                             dd          |d<   |d                             d	d          |d
<   || j        _         d S )Nr  r  r  r  r  zhw.machine_archr   r  r  r  )r$   r=   r#  rx   r  s     r   r|   zNetBSDCPUInfo.__init__  s}    	Y	6	$,h-=3GGG${k"&&'8!<<$v,%)),::$y/$.r(   c                     d S rA   r1   rT   s    r   r~   zNetBSDCPUInfo._not_impl  r  r(   c                 ^    t          | j        d                             dd                    S r  r%  rT   s    r   rU   zNetBSDCPUInfo._getNCPUs  s'    	TY{#''	155	6	66r(   c                 d    | j         d                             dd          dd         dk    rdS dS )	Nr  hw.modelr	   r      IntelTFr"  rT   s    r   r   zNetBSDCPUInfo._is_Intel  s7    	Y{
B//!4??
$	r(   c                 d    | j         d                             dd          dd         dk    rdS dS )	Nr  r  r	   r      AMDTFr"  rT   s    r   r   zNetBSDCPUInfo._is_AMD  s7    	Y{
B//!4==
$	r(   )	ri   rj   rk   r$   r|   r~   rU   r   r   r1   r(   r   r  r  	  s`           7 7 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dS )SunOSCPUInfoNc                    | j         d S t          ddddgddgddg          }t          dd	gd
          |d<   t          g d          D ]3}t	          j        d|          }|r|                    d          |d<    n4|| j        _         d S )Nr  machrp   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'   r=   r.   rY   r   r\   rx   )rB   r$   r-   ms       r   r|   zSunOSCPUInfo.__init__'  s    9 F!'%,dO'0$&7'0$&7	
 
 
 1'4cJJJY#$:$:$:;; 	 	DGNNA $%GGCLL[! #r(   c                     d S rA   r1   rT   s    r   r~   zSunOSCPUInfo._not_impl8  r   r(   c                 $    | j         d         dk    S )Nr  r  r   rT   s    r   r  zSunOSCPUInfo._is_i386;  s    y%//r(   c                 $    | j         d         dk    S )Nr  sparcr   rT   s    r   	_is_sparczSunOSCPUInfo._is_sparc>  s    y%00r(   c                 $    | j         d         dk    S )Nr  sparcv9r   rT   s    r   _is_sparcv9zSunOSCPUInfo._is_sparcv9A      y%22r(   c                 ^    t          | j        d                             dd                    S )Nr  NumCPUr   r%  rT   s    r   rU   zSunOSCPUInfo._getNCPUsD  s'    49Y'++Ha88999r(   c                 $    | j         d         dk    S )Nr  sun4r   rT   s    r   _is_sun4zSunOSCPUInfo._is_sun4G  r  r(   c                 F    t          j        d| j        d                   d uS )NSUNWr  r   rT   s    r   _is_SUNWzSunOSCPUInfo._is_SUNWJ  s     x9!566dBBr(   c                 F    t          j        d| j        d                   d uS )Nz.*SPARCstation-5r  r   rT   s    r   _is_sparcstation5zSunOSCPUInfo._is_sparcstation5M  s!    x+TYy-ABB$NNr(   c                 F    t          j        d| j        d                   d uS )Nz	.*Ultra-1r  r   rT   s    r   
_is_ultra1zSunOSCPUInfo._is_ultra1P       xdi	&:;;4GGr(   c                 F    t          j        d| j        d                   d uS )Nz.*Ultra-250r  r   rT   s    r   _is_ultra250zSunOSCPUInfo._is_ultra250S  s     x	)(<==TIIr(   c                 F    t          j        d| j        d                   d uS )Nz	.*Ultra-2r  r   rT   s    r   
_is_ultra2zSunOSCPUInfo._is_ultra2V  r  r(   c                 F    t          j        d| j        d                   d uS )Nz
.*Ultra-30r  r   rT   s    r   _is_ultra30zSunOSCPUInfo._is_ultra30Y       xty';<<DHHr(   c                 F    t          j        d| j        d                   d uS )Nz	.*Ultra-4r  r   rT   s    r   
_is_ultra4zSunOSCPUInfo._is_ultra4\  r  r(   c                 F    t          j        d| j        d                   d uS )Nz.*Ultra-5_10r  r   rT   s    r   _is_ultra5_10zSunOSCPUInfo._is_ultra5_10_  s     x9)=>>dJJr(   c                 F    t          j        d| j        d                   d uS )Nz	.*Ultra-5r  r   rT   s    r   
_is_ultra5zSunOSCPUInfo._is_ultra5b  r  r(   c                 F    t          j        d| j        d                   d uS )Nz
.*Ultra-60r  r   rT   s    r   _is_ultra60zSunOSCPUInfo._is_ultra60e  r  r(   c                 F    t          j        d| j        d                   d uS )Nz
.*Ultra-80r  r   rT   s    r   _is_ultra80zSunOSCPUInfo._is_ultra80h  r  r(   c                 F    t          j        d| j        d                   d uS )Nz.*Ultra-Enterpriser  r   rT   s    r   _is_ultraenterpricez SunOSCPUInfo._is_ultraenterpricek  s!    x-ty/CDDDPPr(   c                 F    t          j        d| j        d                   d uS )Nz.*Ultra-Enterprise-10000r  r   rT   s    r   _is_ultraenterprice10kz#SunOSCPUInfo._is_ultraenterprice10kn  s"    x3TYy5IJJRVVVr(   c                 F    t          j        d| j        d                   d uS )Nz
.*Sun-Firer  r   rT   s    r   _is_sunfirezSunOSCPUInfo._is_sunfireq  r  r(   c                 F    t          j        d| j        d                   d uS )Nz.*Ultrar  r   rT   s    r   	_is_ultrazSunOSCPUInfo._is_ultrat  s     x
DIi$899EEr(   c                 $    | j         d         dk    S )Nr  sparcv7r   rT   s    r   _is_cpusparcv7zSunOSCPUInfo._is_cpusparcv7w  r  r(   c                 $    | j         d         dk    S )Nr  sparcv8r   rT   s    r   _is_cpusparcv8zSunOSCPUInfo._is_cpusparcv8z  r  r(   c                 $    | j         d         dk    S )Nr  r  r   rT   s    r   _is_cpusparcv9zSunOSCPUInfo._is_cpusparcv9}  r  r(   )ri   rj   rk   r$   r|   r~   r  r  r  rU   r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r  r  r  r  r1   r(   r   r  r  $  s       D# # #"  0 0 01 1 13 3 3: : :+ + +C C CO O OH H HJ J JH H HI I IH H HK K KH H HI I II I IQ Q QW W WI I IF F F3 3 33 3 33 3 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#dS )"Win32CPUInfoNz,HARDWARE\DESCRIPTION\System\CentralProcessorc                    	 dd l }n# t          $ r dd l}Y nw xY w| j        d S g }	 t	          j        dt          j                  }|                    |j        | j	                  }d}	 	 |
                    ||          }|dz  }|                    d|i           |                    ||          }d}	 	 |                    ||          \  }	}
}|dz   }|
|d         |	<   |	dk    r|                    |
          }|rt          |                    d                    |d         d	<   t          |                    d
                    |d         d<   t          |                    d                    |d         d<   n# |j        $ r Y nw xY wn# |j        $ r Y nw xY w:n!#  t#          t$          j        d           Y nxY w|| j        _        d S )Nr   zFfamily\s+(?P<FML>\d+)\s+model\s+(?P<MDL>\d+)\s+stepping\s+(?P<STP>\d+)r   	ProcessorTrt   
IdentifierFMLFamilyMDLModelSTPSteppingz
(ignoring))_winregImportErrorwinregr$   rY   rZ   r   OpenKeyHKEY_LOCAL_MACHINEpkeyEnumKeyrv   	EnumValuer[   r&  r\   errorprintsys	exc_valuerx   )rB   r#  r$   prgxchndpnumprocphndpidxrP   r{   vtpesrchs                r   r|   zWin32CPUInfo.__init__  sH   	%NNNN 	% 	% 	%$$$$$$	% 9 F 	/ : <=?]L LD??7#=tyIIDDRR"??466D AIDKKd 3444"??466DDRR070A0A$0M0M-D% $(!8D-2DHTN#|33'+{{5'9'9#' !R9<TZZ=N=N9O9ODHX$68;DJJu<M<M8N8NDHW$5;>tzz%?P?P;Q;QDHZ$8  '} " " "!E"R " }   ER (	/#-....."sa    AF$ *F  5F$ 6E? B/F$ ?
F	F$ FF$ 
FF$ FF$ $Gc                     d S rA   r1   rT   s    r   r~   zWin32CPUInfo._not_impl  r   r(   c                 0    | j         d         d         dk    S )Nr   VendorIdentifierr   r   rT   s    r   r   zWin32CPUInfo._is_AMD      y|./>AAr(   c                 X    |                                  o| j        d         d         dk    S Nr   r     r   rT   s    r   	_is_Am486zWin32CPUInfo._is_Am486  %    {{}}<1h!71!<<r(   c                 X    |                                  o| j        d         d         dk    S r<  r   rT   s    r   
_is_Am5x86zWin32CPUInfo._is_Am5x86  r?  r(   c                     |                                  o+| j        d         d         dk    o| j        d         d         dv S )Nr   r  r  r   )r   r   r7   r  r   rT   s    r   	_is_AMDK5zWin32CPUInfo._is_AMDK5  sA     6$)A,x"8A"= 6	!W%5	7r(   c                     |                                  o+| j        d         d         dk    o| j        d         d         dv S )Nr   r  r  r   )      r   rT   s    r   	_is_AMDK6zWin32CPUInfo._is_AMDK6  sA     0$)A,x"8A"= 0	!W%/	1r(   c                     |                                  o-| j        d         d         dk    o| j        d         d         dk    S )Nr   r  r  r      r   rT   s    r   _is_AMDK6_2zWin32CPUInfo._is_AMDK6_2  A     +$)A,x"8A"= +	!W%*	,r(   c                     |                                  o-| j        d         d         dk    o| j        d         d         dk    S )Nr   r  r  r   	   r   rT   s    r   _is_AMDK6_3zWin32CPUInfo._is_AMDK6_3  rK  r(   c                 X    |                                  o| j        d         d         dk    S Nr   r  rE  r   rT   s    r   	_is_AMDK7zWin32CPUInfo._is_AMDK7  r?  r(   c                 X    |                                  o| j        d         d         dk    S Nr   r     r   rT   s    r   r   zWin32CPUInfo._is_AMD64  s%    {{}}=1h!72!==r(   c                 0    | j         d         d         dk    S )Nr   r9  r   r   rT   s    r   r   zWin32CPUInfo._is_Intel  r:  r(   c                 0    | j         d         d         dk    S )Nr   r  r  r   rT   s    r   r  zWin32CPUInfo._is_i386      y|H%**r(   c                 0    | j         d         d         dk    S r<  r   rT   s    r   r   zWin32CPUInfo._is_i486  rW  r(   c                 X    |                                  o| j        d         d         dk    S Nr   r  r  r   rT   s    r   r   zWin32CPUInfo._is_i586  %    }}>49Q<#9Q#>>r(   c                 X    |                                  o| j        d         d         dk    S rP  r   rT   s    r   r   zWin32CPUInfo._is_i686  r[  r(   c                 X    |                                  o| j        d         d         dk    S rZ  r   rT   s    r   r   zWin32CPUInfo._is_Pentium  r[  r(   c                     |                                  o-| j        d         d         dk    o| j        d         d         dk    S )Nr   r  r  r   r=  r   rT   s    r   r   zWin32CPUInfo._is_PentiumMMX  A     +DIaL$:a$? +	!W%*	,r(   c                     |                                  o-| j        d         d         dk    o| j        d         d         dk    S )Nr   r  rE  r   r   r   rT   s    r   r   zWin32CPUInfo._is_PentiumPro  r_  r(   c                     |                                  o+| j        d         d         dk    o| j        d         d         dv S )Nr   r  rE  r   )r  r  rE  r   rT   s    r   r   zWin32CPUInfo._is_PentiumII  sA     3DIaL$:a$? 3	!W%2	4r(   c                     |                                  o+| j        d         d         dk    o| j        d         d         dv S )Nr   r  rE  r   rF  rI  rM  
      r   rT   s    r   r   zWin32CPUInfo._is_PentiumIII  sB     ;DIaL$:a$? ;	!W%)::	<r(   c                 X    |                                  o| j        d         d         dk    S rS  r   rT   s    r   r   zWin32CPUInfo._is_PentiumIV   s%    }}?49Q<#9R#??r(   c                     |                                  o+| j        d         d         dk    o| j        d         d         dv S )Nr   r  rE  r   )rM        r   rT   s    r   r   zWin32CPUInfo._is_PentiumM  sA     5DIaL$:a$? 5	!W%4	6r(   c                     |                                  o+| j        d         d         dk    o| j        d         d         dv S )Nr   r  rE  r   )rT        r   rT   s    r   r   zWin32CPUInfo._is_Core2  sA     6DIaL$:a$? 6	!W%5	7r(   c                 2    t          | j                  dk    S rS   r   rT   s    r   r   zWin32CPUInfo._is_singleCPU  r   r(   c                 *    t          | j                  S rA   r   rT   s    r   rU   zWin32CPUInfo._getNCPUs  r   r(   c                    |                                  rC| j        d         d         dk    r| j        d         d         dk    p| j        d         d         dv S |                                 r| j        d         d         dv S dS )	Nr   r  r  r   r=  rE  rT  r  rE  rT  Fr   r$   r   rT   s    r   r  zWin32CPUInfo._has_mmx  s    ==?? 	Yq\(+q0 0Yq\'*a/8Yq\(+w69 [[]] 	9Q<)Z775r(   c                 b   |                                  rC| j        d         d         dk    r| j        d         d         dv p| j        d         d         dk    S |                                 rC| j        d         d         dk    r| j        d         d         dv p| j        d         d         dk    S dS )	Nr   r  rE  r   rc  rT  )rE  rF  rI  rd  Frr  rT   s    r   r
  zWin32CPUInfo._has_sse  s    ==?? 		Yq\(+q0 @Yq\'*.??1IaL*b02 [[]] 	Yq\(+q0 <Yq\'*m;1IaL*b02 5r(   c                     |                                  r<|                                 p'|                                 p|                                 S |                                 r|                                 S dS )NF)r   is_Pentium4is_PentiumMis_Core2r   is_AMD64rT   s    r   r  zWin32CPUInfo._has_sse2)  se    ==?? 	##%%N)9)9););Nt}}N[[]] 	==??"5r(   c                 T    |                                  o| j        d         d         dv S )Nr   r  rq  r   rT   s    r   r  zWin32CPUInfo._has_3dnow1  s%    {{}}E1h!7:!EEr(   c                 T    |                                  o| j        d         d         dv S )Nr   r  rp  r   rT   s    r   r  zWin32CPUInfo._has_3dnowext4  s%    {{}}B1h!77!BBr(   )$ri   rj   rk   r$   r(  r|   r~   r   r>  rA  rC  rG  rJ  rN  rQ  r   r   r  r   r   r   r   r   r   r   r   r   r   r   r   rU   r  r
  r  r  r  r1   r(   r   r  r    s       D:D
*# *# *#X  
B B B= = == = =7 7 71 1 1, , ,, , ,= = => > >
B B B+ + ++ + +? ? ?? ? ?? ? ?, , ,, , ,4 4 4< < <@ @ @6 6 67 7 7# # #    
 
 
  F F FC C C C Cr(   r  linuxirixdarwinrE  netbsdsunoswin32cygwin__main__r   r  zCPU information: r  )r   r   )&rl   __all__r-  rY   typesr   r
   r   rW   rM   is_cpu_amd_intelr   r'   r.   r=   objectr?   rn   r  r  r  r  r  rJ   cpuinfor   ri   is_blaar   r   r$   dirrP   rL   rrv   r,  joinr1   r(   r   <module>r     s    '             				        
 
 
 
   
 
 
 
 8<&'   !* !* !* !* !*& !* !* !*HVO VO VO VO VO; VO VO VOrw8 w8 w8 w8 w8+ w8 w8 w8t>5 >5 >5 >5 >5K >5 >5 >5@    K   6Z3 Z3 Z3 Z3 Z3; Z3 Z3 Z3ztC tC tC tC tC; tC tC tCn <7## GG\V$$ GG\XGG\!A#(""GG\W%% GG\W%% GG\X&& GG GgiizKKMMMLLNNNLLNNNDG * *7c>>d1gnn&T!""X&&((A *66KK4888QQ 78888KKQRR)))	E

.///// r(   