o 6aX@sHdZdgZddlZddlZddlZddlZddlZddlZddlm Z d!ddZ d!d d Z d!d d Z  d!d dZ GdddZGdddeZGdddeZGdddeZGdddeZGdddeZejdrqeZn.ejdrzeZn%ejdkreZnejdreZnejdreZn ejd reZneZeZdS)"aa cpuinfo Copyright 2002 Pearu Peterson all rights reserved, Pearu Peterson 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 cpuN)getstatusoutputrc Cstzt|\}}Wnty%}ztjt|t|dWYd}~dSd}~wwt|r6t||vr6d|fSd|fS)N stacklevel)FTF) rEnvironmentErrorwarningswarnstr UserWarningos WIFEXITED WEXITSTATUS)cmdsuccessful_statusrstatusoutputer9/usr/lib/python3/dist-packages/numpy/distutils/cpuinfo.py getoutputsrcKs<i}|D]}t||||dd\}}|r|||<q|SNrrr)rstrip)rrkwinfokeyokrrrr command_info%s   r ccs<t|||dd\}}|sdS|D]}|VqdSr)r splitlinesr)rrrrrlinerrrcommand_by_line.s   r#cCsRi}t|||ddD]}dd||dD}t|dkr&|d||d<q |S)NrrcSg|]}|qSrr.0srrr ;z*key_value_from_command..r)r#splitlen)rseprrdr"lrrrkey_value_from_command6s  r1c@s@eZdZdZddZddZddZdd Zd d Zd d Z dS) CPUInfoBasezkHolds CPU information and provides methods for requiring the availability of various CPU features. cCsz|WStyYdSwN) Exception)selffuncrrr _try_callEs  zCPUInfoBase._try_callcCsZ|ds)t|d|r%t|d|}t|tjr!|j|fddSt|ddSt|)N_cSs||Sr3r)r6attrrrrPsz)CPUInfoBase.__getattr__..cSdSr3rrrrrr:R) startswithhasattrgetattr isinstancetypes MethodTyper7AttributeError)r5namer9rrr __getattr__Ks  zCPUInfoBase.__getattr__cCsdSNrrr5rrr _getNCPUsUszCPUInfoBase._getNCPUscCs&td}td|d}|S)Nrz(\d+)bitr)platform architecturerecompilesearchgroup)r5abitsnbitsrrr __get_nbitsXs zCPUInfoBase.__get_nbitscC |dkS)N32_CPUInfoBase__get_nbitsrGrrr _is_32bit] zCPUInfoBase._is_32bitcCrR)N64rTrGrrr _is_64bit`rWzCPUInfoBase._is_64bitN) __name__ __module__ __qualname____doc__r7rErHrUrVrYrrrrr2@s  r2c@seZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ ddZddZddZddZddZd d!Zd"d#Zd$d%ZeZd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5Zd6d7Zd8d9Z d:d;Z!dd?Z#d@dAZ$dBdCZ%dDdEZ&dFdGZ'e'Z(dHdIZ)dJdKZ*dLdMZ+dNdOZ,dPdQZ-dRdSZ.dTdUZ/dVdWZ0dXdYZ1dZd[Z2d\d]Z3dS)^ LinuxCPUInfoNc Cs|jdurdSig}td\}}|r||dd<ztd}Wnty<}ztjt|tddWYd}~n7d}~ww|D]+}dd| d d D}t |dkrSq?|\}} |r_||d vrd| i| |d |<q?| ||j _dS) Nzuname -mruname_mz /proc/cpuinfor+rcSr$rr%r&rrrr)tr*z)LinuxCPUInfo.__init__..:r)rrropenr r r r r r,r-appendclose __class__) r5rrrforr" name_valuerDvaluerrr__init__gs,       zLinuxCPUInfo.__init__cCr;r3rrGrrr _not_impl~r<zLinuxCPUInfo._not_implcC|jdddkS)Nr vendor_id AuthenticAMDrrGrrr_is_AMDzLinuxCPUInfo._is_AMDcC|o |jdddkS)Nrmodel2rorrGrrr_is_AthlonK6_2zLinuxCPUInfo._is_AthlonK6_2cCrq)Nrrr3rtrGrrr_is_AthlonK6_3rvzLinuxCPUInfo._is_AthlonK6_3cCtd|jddduS)Nz .*?AMD-K6r model namerKmatchrrGrrr _is_AthlonK6rvzLinuxCPUInfo._is_AthlonK6cCry)Nz .*?AMD-K7rrzr{rGrrr _is_AthlonK7rvzLinuxCPUInfo._is_AthlonK7cCry)Nz.*?Athlon\(tm\) MP\brrzr{rGrrr _is_AthlonMP  zLinuxCPUInfo._is_AthlonMPcCrq)Nrfamily15is_AMDrrGrrr _is_AMD64rvzLinuxCPUInfo._is_AMD64cCry)Nz.*?Athlon\(tm\) 64\brrzr{rGrrr _is_Athlon64rzLinuxCPUInfo._is_Athlon64cCry)Nz.*?Athlon HX\brrzr{rGrrr _is_AthlonHXrzLinuxCPUInfo._is_AthlonHXcCry)Nz .*?Opteron\brrzr{rGrrr _is_OpteronrzLinuxCPUInfo._is_OpteroncCry)Nz .*?Hammer\brrzr{rGrrr _is_HammerrzLinuxCPUInfo._is_HammercCrk)NrrAlpharnrGrrr _is_AlpharpzLinuxCPUInfo._is_AlphacCrq)Nr cpu modelEV4is_AlpharrGrrr_is_EV4rvzLinuxCPUInfo._is_EV4cCrq)NrrEV5rrGrrr_is_EV5rvzLinuxCPUInfo._is_EV5cCrq)NrrEV56rrGrrr_is_EV56rvzLinuxCPUInfo._is_EV56cCrq)NrrPCA56rrGrrr _is_PCA56rvzLinuxCPUInfo._is_PCA56cCrk)Nrrl GenuineIntelrnrGrrr _is_IntelrpzLinuxCPUInfo._is_IntelcCrk)Nrri486rnrGrrr_is_i486rpzLinuxCPUInfo._is_i486cCrq)Nr cpu family5is_IntelrrGrrr_is_i586rvzLinuxCPUInfo._is_i586cCrq)Nrr6rrGrrr_is_i686rvzLinuxCPUInfo._is_i686cCry)Nz .*?Celeronrrzr{rGrrr _is_CeleronrzLinuxCPUInfo._is_CeleroncCry)Nz .*?Pentiumrrzr{rGrrr _is_PentiumrzLinuxCPUInfo._is_PentiumcCry)Nz.*?Pentium.*?II\brrzr{rGrrr _is_PentiumIIrzLinuxCPUInfo._is_PentiumIIcCry)Nz.*?PentiumPro\brrzr{rGrrr_is_PentiumProrzLinuxCPUInfo._is_PentiumProcCry)Nz.*?Pentium.*?MMX\brrzr{rGrrr_is_PentiumMMXrzLinuxCPUInfo._is_PentiumMMXcCry)Nz.*?Pentium.*?III\brrzr{rGrrr_is_PentiumIIIrzLinuxCPUInfo._is_PentiumIIIcCry)Nz.*?Pentium.*?(IV|4)\brrzr{rGrrr _is_PentiumIVrzLinuxCPUInfo._is_PentiumIVcCry)Nz.*?Pentium.*?M\brrzr{rGrrr _is_PentiumMrzLinuxCPUInfo._is_PentiumMcCs|o|Sr3) is_PentiumIVhas_sse3rGrrr _is_PrescottzLinuxCPUInfo._is_PrescottcCsX|o+|jdddkp|jdddko+|o| o+td|jddduS)Nrrrrz .*?\blm\bflags)rrr has_ssse3rKr|rGrrr _is_NoconaszLinuxCPUInfo._is_NoconacCs*|o|otd|jddduS)Nz.*?Core\(TM\)2\brrz)is_64bitrrKr|rrGrrr _is_Core2s zLinuxCPUInfo._is_Core2cCry)Nz .*?Itanium\brrr{rGrrr _is_ItaniumrzLinuxCPUInfo._is_ItaniumcCstd|jddtjduS)Nz .*?XEON\brrz)rKr|r IGNORECASErGrrr_is_XEONs zLinuxCPUInfo._is_XEONcCt|jdkSrFr-rrGrrr _is_singleCPUzLinuxCPUInfo._is_singleCPUcC t|jSr3rrGrrrrH zLinuxCPUInfo._getNCPUscCrk)Nrfdiv_bugyesrnrGrrr _has_fdiv_bug rpzLinuxCPUInfo._has_fdiv_bugcCrk)Nrf00f_bugrrnrGrrr _has_f00f_bugrpzLinuxCPUInfo._has_f00f_bugcCry)Nz .*?\bmmx\brrr{rGrrr_has_mmxrvzLinuxCPUInfo._has_mmxcCry)Nz .*?\bsse\brrr{rGrrr_has_sservzLinuxCPUInfo._has_ssecCry)Nz .*?\bsse2\brrr{rGrrr _has_sse2rvzLinuxCPUInfo._has_sse2cCry)Nz .*?\bpni\brrr{rGrrr _has_sse3rvzLinuxCPUInfo._has_sse3cCry)Nz .*?\bssse3\brrr{rGrrr _has_ssse3rvzLinuxCPUInfo._has_ssse3cCry)Nz .*?\b3dnow\brrr{rGrrr _has_3dnow rvzLinuxCPUInfo._has_3dnowcCry)Nz.*?\b3dnowext\brrr{rGrrr _has_3dnowext#rvzLinuxCPUInfo._has_3dnowext)4rZr[r\rrirjrorurxr}r~rrrrrrrrrrr_is_i386rrrrrrrrrrrrrrrrr_is_XeonrrHrrrrrrrrrrrrrr^csd r^c@s8eZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ ddZddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5Zd6d7Zd8d9Zd:d;Z dd?Z"d@dAZ#dBdCZ$dDdEZ%dFdGZ&dHdIZ'dJdKZ(dS)L IRIXCPUInfoNcCs(|jdurdStdddd}||j_dS)Nsysconf )rr)r.r)rr1rer5rrrrri)s  zIRIXCPUInfo.__init__cCr;r3rrGrrrrj0r<zIRIXCPUInfo._not_implcCs|jddkS)NNUM_PROCESSORS1)rgetrGrrrr2rzIRIXCPUInfo._is_singleCPUcCst|jddS)NrrintrrrGrrrrH5rpzIRIXCPUInfo._getNCPUscCs |jddd|kS)N PROCESSORSrzr%s)rrr,lowerr5nrrr __cputype8s zIRIXCPUInfo.__cputypecC |dS)Ni_IRIXCPUInfo__cputyperGrrr _is_r2000: zIRIXCPUInfo._is_r2000cCr)Ni rrGrrr _is_r3000;rzIRIXCPUInfo._is_r3000cCr)Ni<rrGrrr _is_r3900<rzIRIXCPUInfo._is_r3900cCr)NirrGrrr _is_r4000=rzIRIXCPUInfo._is_r4000cCr)NirrGrrr _is_r4100>rzIRIXCPUInfo._is_r4100cCr)NirrGrrr _is_r4300?rzIRIXCPUInfo._is_r4300cCr)Ni0rrGrrr _is_r4400@rzIRIXCPUInfo._is_r4400cCr)NirrGrrr _is_r4600ArzIRIXCPUInfo._is_r4600cCr)Ni*rrGrrr _is_r4650BrzIRIXCPUInfo._is_r4650cCr)NirrGrrr _is_r5000CrzIRIXCPUInfo._is_r5000cCr)NiprrGrrr _is_r6000DrzIRIXCPUInfo._is_r6000cCr)Ni@rrGrrr _is_r8000ErzIRIXCPUInfo._is_r8000cCr)Ni'rrGrrr _is_r10000FrzIRIXCPUInfo._is_r10000cCr)Ni.rrGrrr _is_r12000GrzIRIXCPUInfo._is_r12000cCr)NorionrrGrrr _is_rorionHrzIRIXCPUInfo._is_rorioncCs$z|jdWStyYdSw)NMACHINE)rrr4rGrrrget_ipJszIRIXCPUInfo.get_ipcCs|jdd|kS)Nrzip%s)rrrrrrr __machineMszIRIXCPUInfo.__machinecCr)N_IRIXCPUInfo__machinerGrrr_is_IP19OrzIRIXCPUInfo._is_IP19cCr)NrrGrrr_is_IP20PrzIRIXCPUInfo._is_IP20cCr)NrrGrrr_is_IP21QrzIRIXCPUInfo._is_IP21cCrNrrGrrr_is_IP22RrzIRIXCPUInfo._is_IP22cC|do|Sr)rrrGrrr _is_IP22_4kSzIRIXCPUInfo._is_IP22_4kcCrrrrrGrrr _is_IP22_5kTrzIRIXCPUInfo._is_IP22_5kcCr)NrrGrrr_is_IP24UrzIRIXCPUInfo._is_IP24cCr)NrrGrrr_is_IP25VrzIRIXCPUInfo._is_IP25cCr)NrrGrrr_is_IP26WrzIRIXCPUInfo._is_IP26cCr)NrrGrrr_is_IP27XrzIRIXCPUInfo._is_IP27cCr)NrrGrrr_is_IP28YrzIRIXCPUInfo._is_IP28cCr)NrrGrrr_is_IP30ZrzIRIXCPUInfo._is_IP30cCrN rrGrrr_is_IP32[rzIRIXCPUInfo._is_IP32cCrr rrGrrr _is_IP32_5k\rzIRIXCPUInfo._is_IP32_5kcCrr )rrrGrrr _is_IP32_10k]rzIRIXCPUInfo._is_IP32_10k))rZr[r\rrirjrrHrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr r rrrrrrr&sN rc@eZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ ddZddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3ZdS)4 DarwinCPUInfoNcCs6|jdurdStddd}tddd|d<||j_dS)Narchmachine)rrz sysctl hw=r. sysctl_hw)rr r1rerrrrrics  zDarwinCPUInfo.__init__cCr;r3rrGrrrrjkr<zDarwinCPUInfo._not_implcCt|jdddS)Nrzhw.ncpurrrGrrrrHmzDarwinCPUInfo._getNCPUscCrk)Nrz hw.machinezPower MacintoshrnrGrrr_is_Power_Macintoshprpz!DarwinCPUInfo._is_Power_MacintoshcC|jddkS)Nri386rnrGrrrrsrzDarwinCPUInfo._is_i386cCr)NrppcrnrGrrr_is_ppcurzDarwinCPUInfo._is_ppccCs|jdd|kS)Nrzppc%srnrrrrrxrpzDarwinCPUInfo.__machinecCr)NiY_DarwinCPUInfo__machinerGrrr _is_ppc601zrzDarwinCPUInfo._is_ppc601cCr)NiZrrGrrr _is_ppc602{rzDarwinCPUInfo._is_ppc602cCr)Ni[rrGrrr _is_ppc603|rzDarwinCPUInfo._is_ppc603cCr)N603errGrrr _is_ppc603e}rzDarwinCPUInfo._is_ppc603ecCr)Ni\rrGrrr _is_ppc604~rzDarwinCPUInfo._is_ppc604cCr)N604errGrrr _is_ppc604erzDarwinCPUInfo._is_ppc604ecCr)NilrrGrrr _is_ppc620rzDarwinCPUInfo._is_ppc620cCr)NivrrGrrr _is_ppc630rzDarwinCPUInfo._is_ppc630cCr)NirrGrrr _is_ppc740rzDarwinCPUInfo._is_ppc740cCr)NirrGrrr _is_ppc7400rzDarwinCPUInfo._is_ppc7400cCr)NirrGrrr _is_ppc7450rzDarwinCPUInfo._is_ppc7450cCr)NirrGrrr _is_ppc750rzDarwinCPUInfo._is_ppc750cCr)NirrGrrr _is_ppc403rzDarwinCPUInfo._is_ppc403cCr)NirrGrrr _is_ppc505rzDarwinCPUInfo._is_ppc505cCr)Ni!rrGrrr _is_ppc801rzDarwinCPUInfo._is_ppc801cCr)Ni5rrGrrr _is_ppc821rzDarwinCPUInfo._is_ppc821cCr)Ni7rrGrrr _is_ppc823rzDarwinCPUInfo._is_ppc823cCr)Ni\rrGrrr _is_ppc860rzDarwinCPUInfo._is_ppc860)rZr[r\rrirjrHrrrrr r!r"r$r%r'r(r)r*r+r,r-r.r/r0r1r2r3rrrrr`s6 rc@r)4 SunOSCPUInfoNcCsl|jdurdStdddddd}tddd |d <td D]}td |}|r/|d |d<nq||j_dS)Nrmachuname_iz isainfo -bz isainfo -n)rr5r6 isainfo_b isainfo_nzuname -Xrruname_Xz psrinfo -v 0z+\s*The (?P

[\w\d]+) processor operates atp processor)rr r1r#rKr|rNre)r5rr"mrrrris    zSunOSCPUInfo.__init__cCr;r3rrGrrrrjr<zSunOSCPUInfo._not_implcCr)Nr8rrnrGrrrrrzSunOSCPUInfo._is_i386cCr)Nr8sparcrnrGrrr _is_sparcrzSunOSCPUInfo._is_sparccCr)Nr8sparcv9rnrGrrr _is_sparcv9rzSunOSCPUInfo._is_sparcv9cCr)Nr9NumCPUrrrGrrrrHrzSunOSCPUInfo._getNCPUscCr)Nrsun4rnrGrrr_is_sun4rzSunOSCPUInfo._is_sun4cCtd|jdduS)NSUNWr6r{rGrrr_is_SUNWrzSunOSCPUInfo._is_SUNWcCrD)Nz.*SPARCstation-5r6r{rGrrr_is_sparcstation5rzSunOSCPUInfo._is_sparcstation5cCrD)Nz .*Ultra-1r6r{rGrrr _is_ultra1rzSunOSCPUInfo._is_ultra1cCrD)Nz .*Ultra-250r6r{rGrrr _is_ultra250rzSunOSCPUInfo._is_ultra250cCrD)Nz .*Ultra-2r6r{rGrrr _is_ultra2rzSunOSCPUInfo._is_ultra2cCrD)Nz .*Ultra-30r6r{rGrrr _is_ultra30rzSunOSCPUInfo._is_ultra30cCrD)Nz .*Ultra-4r6r{rGrrr _is_ultra4rzSunOSCPUInfo._is_ultra4cCrD)Nz .*Ultra-5_10r6r{rGrrr _is_ultra5_10rzSunOSCPUInfo._is_ultra5_10cCrD)Nz .*Ultra-5r6r{rGrrr _is_ultra5rzSunOSCPUInfo._is_ultra5cCrD)Nz .*Ultra-60r6r{rGrrr _is_ultra60rzSunOSCPUInfo._is_ultra60cCrD)Nz .*Ultra-80r6r{rGrrr _is_ultra80rzSunOSCPUInfo._is_ultra80cCrD)Nz.*Ultra-Enterpriser6r{rGrrr_is_ultraenterpricerz SunOSCPUInfo._is_ultraenterpricecCrD)Nz.*Ultra-Enterprise-10000r6r{rGrrr_is_ultraenterprice10krz#SunOSCPUInfo._is_ultraenterprice10kcCrD)Nz .*Sun-Firer6r{rGrrr _is_sunfirerzSunOSCPUInfo._is_sunfirecCrD)Nz.*Ultrar6r{rGrrr _is_ultrarzSunOSCPUInfo._is_ultracCr)Nr;sparcv7rnrGrrr_is_cpusparcv7rzSunOSCPUInfo._is_cpusparcv7cCr)Nr;sparcv8rnrGrrr_is_cpusparcv8rzSunOSCPUInfo._is_cpusparcv8cCr)Nr;r?rnrGrrr_is_cpusparcv9rzSunOSCPUInfo._is_cpusparcv9)rZr[r\rrirjrr>r@rHrCrFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrVrXrYrrrrr4s6 r4c@s eZdZdZdZddZddZddZd d Zd d Z d dZ ddZ ddZ ddZ ddZddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5d6Zd7d8Zd9d:Z d;d<Z!d=d>Z"d?d@Z#dS)A Win32CPUInfoNz,HARDWARE\DESCRIPTION\System\CentralProcessorc Csh|jdurdSg}zddl}tdtj}||j|j}d} z|||}Wn |j y2Yncw|d7}| d|i|||}d} z | ||\} } } Wn |j y\Yn8w|d}| |d| <| dkr| | } | rt | d|dd <t | d |dd <t | d |dd <qGq Wnty} z t| dWYd} ~ nd} ~ ww||j_dS)NrzFfamily\s+(?P\d+)\s+model\s+(?P\d+)\s+stepping\s+(?P\d+)Tr Processorra IdentifierFMLFamilyMDLModelSTPSteppingz (ignoring))rwinregrKrLrOpenKeyHKEY_LOCAL_MACHINEpkeyEnumKeyerrorrc EnumValuerMrrNr4printre)r5rrcprgxchndpnumprocphndpidxrDrhvtpesrchrrrrrisT     zWin32CPUInfo.__init__cCr;r3rrGrrrrjr<zWin32CPUInfo._not_implcCrk)NrVendorIdentifierrmrnrGrrrro rpzWin32CPUInfo._is_AMDcCrqNrr^rrGrrr _is_Am486rvzWin32CPUInfo._is_Am486cCrqrtrrGrrr _is_Am5x86rvzWin32CPUInfo._is_Am5x86cC,|o|jdddko|jdddvS)Nrr^r`)rrr+rrGrrr _is_AMDK5zWin32CPUInfo._is_AMDK5cCrx)Nrr^ryr`)rrGrrr _is_AMDK6r|zWin32CPUInfo._is_AMDK6cC,|o|jdddko|jdddkS)Nrr^ryr`rrGrrr _is_AMDK6_2r|zWin32CPUInfo._is_AMDK6_2cCr)Nrr^ryr` rrGrrr _is_AMDK6_3!r|zWin32CPUInfo._is_AMDK6_3cCrqNrr^r}rrGrrr _is_AMDK7%rvzWin32CPUInfo._is_AMDK7cCrqNrr^rrGrrrr,rvzWin32CPUInfo._is_AMD64cCrk)NrrsrrnrGrrrr1rpzWin32CPUInfo._is_IntelcCrk)Nrr^rzrnrGrrrr4rpzWin32CPUInfo._is_i386cCrkrtrnrGrrrr7rpzWin32CPUInfo._is_i486cCrqNrr^ryrrGrrrr:rvzWin32CPUInfo._is_i586cCrqrrrGrrrr=rvzWin32CPUInfo._is_i686cCrqrrrGrrrr@rvzWin32CPUInfo._is_PentiumcCr)Nrr^ryr`rurrGrrrrCr|zWin32CPUInfo._is_PentiumMMXcCr)Nrr^r}r`rrrGrrrrGr|zWin32CPUInfo._is_PentiumProcCrx)Nrr^r}r`)rzryr}rrGrrrrKr|zWin32CPUInfo._is_PentiumIIcCrx)Nrr^r}r`r~rr rrGrrrrOr|zWin32CPUInfo._is_PentiumIIIcCrqrrrGrrrrSrvzWin32CPUInfo._is_PentiumIVcCrx)Nrr^r}r`)r rrGrrrrVr|zWin32CPUInfo._is_PentiumMcCrx)Nrr^r}r`)rrrGrrrrZr|zWin32CPUInfo._is_Core2cCrrFrrGrrrr`rzWin32CPUInfo._is_singleCPUcCrr3rrGrrrrHcrzWin32CPUInfo._getNCPUscCs\|r|jdddkr|jdddkp|jdddvS|r,|jdddvSdS) Nrr^ryr`rur}rryr}rFrrrrGrrrrfs$zWin32CPUInfo._has_mmxcCs|r|jdddkr|jdddvp|jdddkS|r>|jdddkr5|jdddvp=|jdddkSdS) Nrr^r}r`rr)r}r~rrFrrGrrrroszWin32CPUInfo._has_ssecCs4|r|p|p|S|r|SdS)NF)r is_Pentium4 is_PentiumMis_Core2ris_AMD64rGrrrr{szWin32CPUInfo._has_sse2cC|o |jdddvS)Nrr^rrrGrrrrrvzWin32CPUInfo._has_3dnowcCr)Nrr^rrrGrrrrrvzWin32CPUInfo._has_3dnowext)$rZr[r\rrfrirjrorvrwr{rrrrrrrrrrrrrrrrrrrrHrrrrrrrrrrZsD(   rZlinuxirixdarwinsunoswin32cygwin)rr)r]__all__rrIrKsysrAr subprocessrrr r#r1r2r^rrr4rZr=cpuinforrrrrsJ      #D:.J 3