
    tniI                    F   d Z d                    d e D                       ZddlZddlZddlZddlZddlZdZda	 G d de
          Z G d d	e
          Zd
 Zd<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"i fd Z# G d! d"e
          Z$ G d# d$e
          Z%d% Z&d& Z'd' Z(d( Z)d) Z*d* Z+d+ Z,d, Z-d- Z.d. Z/d/ Z0d0 Z1d1 Z2d2 Z3d3 Z4d4 Z5d5 Z6d6 Z7d7 Z8d8 Z9d9 Z:e;d:k    r e:             dS  ed;d;          a	 e             dS )=)	       r   .c                 ,    g | ]}t          |          S  )str.0ns     L/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/cpuinfo/cpuinfo.py
<listcomp>r      s    "C"C"Ca3q66"C"C"C    r   NTc                   D    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )Tracec                 J   || _         | j         sd S ddlm} ddlm} |r |            | _        nO|                                                    d          }t          d                    |          d          | _         |            | _	         |            | _
        d | _        d S )Nr   )datetimeStringIOz%Y-%m-%d_%H-%M-%S-%fzcpuinfo_trace_{0}.tracew)
_is_activer   ior   _outputnowstrftimeopenformat_stdout_stderr_err)self	is_activeis_stored_in_stringr   r   dates         r   __init__zTrace.__init__+   s    $/	 
	6 D(**4<<
,,..
!
!"8
9
94077==sCC4<$,$,$)))r   c                     | j         sd S ddlm}  |            d         }|d         }|d         }| j                            d                    |||                     | j                                         d S )Nr   stack      z{0} ({1} {2})
r   inspectr&   r   writer   flushr   msgr&   framefilelines         r   headerzTrace.header=   s    	 &&
%''!*%	q$	q$,&--c4>>???,r   c                     | j         sd S ddlm}  |            d         }|d         }|d         }| j                            d                    ||                     | j                                         d S )Nr   r%   r'   r(   zSuccess ... ({0} {1})

r)   )r   r&   r/   r0   r1   s        r   successzTrace.successG   s    	 &&
%''!*%	q$	q$,077dCCDDD,r   c                 4   | j         sd S ddlm}  |            d         }|d         }|d         }t          |t                    rd                    d |                    d          D                       dz   }| j                            |           | j                            d	                    ||                     | j        
                                 d S t          |t                    rdd	lm}  |            }| j                            d
	                    ||                     | j                            d                    d |                    d          D                       dz              | j        
                                 d S d S )Nr   r%   r'   r(    c                     g | ]}d |z   S )	r   )r	   r1   s     r   r   zTrace.fail.<locals>.<listcomp>[   s    :::$$+:::r   
zFailed ... ({0} {1})


format_excz	Failed ... ({0} {1})
c                 8    g | ]}d                      |          S 		{0}
r   r   s     r   r   zTrace.fail.<locals>.<listcomp>d   s&    UUU{11!44UUUr   )r   r*   r&   
isinstancer   joinsplitr   r+   r   r,   	Exception	tracebackr;   )r   r.   r&   r/   r0   r1   r;   
err_strings           r   failz
Trace.failR   s   	 &&
%''!*%	q$	q$S 	::#))D//:::	;	;d	B3<c<077dCCDDD<#y!! ######
:<077dCCDDD<bggUUj>N>Nt>T>TUUUVVY]]^^^< r   c                     | j         sd S ddlm}  |            d         }|d         }|d         }| j                            d                    |||                     | j                                         d S )Nr   r%      r'   r(   z	{0} ({1} {2})
r)   r-   s         r   command_headerzTrace.command_headerg   s    	 &&
%''!*%	q$	q$,(//T4@@AAA,r   c                 >   | j         sd S | j                            d                    |                     | j                            d                    d |                    d          D                       dz              | j                                         d S )Nr>   r6   c                 8    g | ]}d                      |          S )z			{0}
r?   r   s     r   r   z(Trace.command_output.<locals>.<listcomp>u   s&    RRR!m22155RRRr   r9   )r   r   r+   r   rA   rB   r,   )r   r.   outputs      r   command_outputzTrace.command_outputq   s    	 &&,['',,---,RWWRRv||D?Q?QRRRSSVZZ[[[,r   c           	      (   | j         sd S ddlm}  |            d         }|d         }|d         }| j                            d                    ||                     fd|D             }|rA|D ]=}	| j                            d                    |	|	         |	                              >n| j                            d           | j                            d	                    ||                     fd
|D             }
|
r:|
D ]6}	| j                            d                    |	|	                              7n| j                            d           | j                            d           | j                                         d S )Nr   r%   r(   r'   z	Changed keys ({0} {1})
c                 H    g | ]}|v |v 
|         |         k    |S r   r   r	   keyinfonew_infos     r   r   zTrace.keys.<locals>.<listcomp>   s?    hhh#TRUYZbcfZgMgMg#MgMgMgr   z		{0}: {1} to {2}
z		None
z	New keys ({0} {1})
c                 $    g | ]}|v |v
|S r   r   rP   s     r   r   zTrace.keys.<locals>.<listcomp>   s&    IIIcSH__Dcr   z		{0}: {1}
r9   r)   )r   keysrR   rS   r&   r/   r0   r1   changed_keysrQ   new_keyss     ``       r   rU   z
Trace.keysx   s   	 &&
%''!*%	q$	q$ ,188tDDEEEhhhhhhhh, $ V VsL.55c49hsmTTUUUUV <l### ,-44T4@@AAAIIIIITIII( $ D DsL'..sHSMBBCCCCD <l###,T,r   c                     | j         sd S | j                            |dz              | j                                         d S )Nr9   )r   r   r+   r,   )r   r.   s     r   r+   zTrace.write   sB    	 &&,S4Z   ,r   c                     | j                                         | j                                        | j                                        || j        |dS )N)rL   stdoutstderrrR   erris_fail)r   getvaluer   r   r   )r   rR   r]   s      r   to_dictzTrace.to_dict   sO    \""$$\""$$\""$$
)
 
 r   N)__name__
__module____qualname__r#   r2   r4   rF   rI   rM   rU   r+   r_   r   r   r   r   r   *   s          $  	 	 	  *      :      r   r   c                   j   e Zd Z ej                    d         Z ej                    Z ej                    	                                dk    Z
 ej                    Z ej                    d         ZdZed             Zed             Zed             Zed             Zed	             Zed
             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Z ed             Z!ed             Z"ed             Z#ed             Z$ed             Z%ed             Z&ed             Z'ed             Z(ed             Z)ed             Z*ed             Z+ed              Z,ed!             Z-d"S )#
DataSourcer   windows   Tc                  @    t           j                            d          S )N/proc/cpuinfo)ospathexistsr   r   r   has_proc_cpuinfozDataSource.has_proc_cpuinfo   s    		(	((r   c                  B    t          t          d                    dk    S )Ndmesgr   len_program_pathsr   r   r   	has_dmesgzDataSource.has_dmesg       	^G$$	%	%	))r   c                  &   t          j                                                                        d                              d                                                                          } d| v ot          j                            d          S )N"'linux/var/run/dmesg.boot)platformsystemstriplowerri   rj   rk   )unames    r   has_var_run_dmesg_bootz!DataSource.has_var_run_dmesg_boot   sn    
/


!
!
#
#
)
)#
.
.
4
4S
9
9
?
?
A
A
G
G
I
I%	E		Cbgnn-BCCCr   c                  B    t          t          d                    dk    S )Ncpufreq-infor   ro   r   r   r   has_cpufreq_infozDataSource.has_cpufreq_info   s    	^N++	,	,q	00r   c                  B    t          t          d                    dk    S )Nsestatusr   ro   r   r   r   has_sestatuszDataSource.has_sestatus   s    	^J''	(	(1	,,r   c                  B    t          t          d                    dk    S )Nsysctlr   ro   r   r   r   
has_sysctlzDataSource.has_sysctl       	^H%%	&	&	**r   c                  B    t          t          d                    dk    S )Nisainfor   ro   r   r   r   has_isainfozDataSource.has_isainfo   s    	^I&&	'	'!	++r   c                  B    t          t          d                    dk    S )Nkstatr   ro   r   r   r   	has_kstatzDataSource.has_kstat   rs   r   c                  4   t          j                                                                        d                              d                                                                          } d| v pd| v }|ot	          t          d                    dk    S )Nru   rv   beoshaikusysinfor   )ry   rz   r{   r|   rp   rq   )r}   is_beoss     r   has_sysinfozDataSource.has_sysinfo   s    
/


!
!
#
#
)
)#
.
.
4
4S
9
9
?
?
A
A
G
G
I
I%eO/w%/'		7S	2233a77r   c                  B    t          t          d                    dk    S )Nlscpur   ro   r   r   r   	has_lscpuzDataSource.has_lscpu   rs   r   c                  B    t          t          d                    dk    S )Nlspropr   ro   r   r   r   has_ibm_pa_featureszDataSource.has_ibm_pa_features   r   r   c                  \    t          g d          \  } }| dk    ot          |          dk    S )N)wmicri   getVersionr   )_run_and_get_stdoutrp   )
returncoderL   s     r   has_wmiczDataSource.has_wmic   s4    *+K+K+KLL*f	q	,S[[1_,r   c                  $    t          ddg          S )Ncatrh   r   r   r   r   cat_proc_cpuinfozDataSource.cat_proc_cpuinfo   s    	e_5	6	66r   c                  "    t          dg          S )Nr   r   r   r   r   cpufreq_infozDataSource.cpufreq_info   s    	n-	.	..r   c                  $    t          ddg          S )Nr   z-br   r   r   r   
sestatus_bzDataSource.sestatus_b   s    	j$/	0	00r   c                  $    t          ddg          S )Nrn   z-ar   r   r   r   dmesg_azDataSource.dmesg_a   s    	gt_	-	--r   c                  $    t          ddg          S )Nr   rx   r   r   r   r   cat_var_run_dmesg_bootz!DataSource.cat_var_run_dmesg_boot   s    	e%:;	<	<<r   c                  $    t          g d          S )N)r   zmachdep.cpuhw.cpufrequencyr   r   r   r   "sysctl_machdep_cpu_hw_cpufrequencyz-DataSource.sysctl_machdep_cpu_hw_cpufrequency   s    	III	J	JJr   c                  $    t          ddg          S )Nr   z-vbr   r   r   r   
isainfo_vbzDataSource.isainfo_vb   s    	i/	0	00r   c                  $    t          g d          S )N)r   z-mcpu_infor   r   r   r   kstat_m_cpu_infozDataSource.kstat_m_cpu_info   s    	888	9	99r   c                  $    t          ddg          S )Nr   z-cpur   r   r   r   sysinfo_cpuzDataSource.sysinfo_cpu  s    	i0	1	11r   c                  "    t          dg          S )Nr   r   r   r   r   r   zDataSource.lscpu  s    	gY	'	''r   c                  j    dd l } |                      d          }|rt          d|d         g          S d S )Nr   z(/proc/device-tree/cpus/*/ibm,pa-featuresr   )globr   )r   ibm_featuress     r   ibm_pa_featureszDataSource.ibm_pa_features	  sF    +++EFF, ;
xa9
:
::; ;r   c                  $    t          g d          S )N)r   cpur   zOName,CurrentClockSpeed,L2CacheSize,L3CacheSize,Description,Caption,Manufacturerz/format:listr   r   r   r   wmic_cpuzDataSource.wmic_cpu  s)    	  W  W  W  
X  
X  Xr   c                  J    t          dd          } |                                 S )N.Hardware\Description\System\CentralProcessor\0ProcessorNameString)_read_windows_registry_keyr{   )processor_brands    r   winreg_processor_brandz!DataSource.winreg_processor_brand  s%    ./`bwxx/				 	  r   c                  &    t          dd          } | S )Nr   VendorIdentifierr   )vendor_id_raws    r   winreg_vendor_id_rawzDataSource.winreg_vendor_id_raw  s    ,-^`rss-	r   c                  &    t          dd          } | S )Nz<SYSTEM\CurrentControlSet\Control\Session Manager\EnvironmentPROCESSOR_ARCHITECTUREr   )arch_string_raws    r   winreg_arch_string_rawz!DataSource.winreg_arch_string_raw  s#    ./n  qI  J  J/	r   c                  D    t          dd          } t          |           } | S )Nr   z~Mhz)r   _to_decimal_string)	hz_actuals    r   winreg_hz_actualzDataSource.winreg_hz_actual$  s&    ()Z\bcc) ++)	r   c                  &    t          dd          } | S )Nr   
FeatureSetr   )feature_bitss    r   winreg_feature_bitszDataSource.winreg_feature_bits*  s    +,]_kll,	r   N).r`   ra   rb   ry   architecturebitsmultiprocessing	cpu_countrz   r|   
is_windowsmachiner   r}   uname_string_raw	can_cpuidstaticmethodrl   rr   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rd   rd      s       "&_&((ho%%''94#8#%%"HN$$Q') ) ,) * * ,* D D ,D 1 1 ,1 - - ,- + + ,+ , , ,, * * ,* 8 8 ,8
 * * ,* + + ,+ - - ,- 7 7 ,7 / / ,/ 1 1 ,1 . . ,. = = ,= K K ,K 1 1 ,1 : : ,: 2 2 ,2 ( ( ,( ; ; ,; X X ,X ! ! ,!   ,   ,   ,
   ,  r   rd   c                 (   g }t          d t          j                            dd                              t          j                            }t          j        d                             t          j                  D ]}t          j                            ||           }t          j        |t          j	                  r|
                    |           |D ];}||z   }t          j        |t          j	                  r|
                    |           <|S )NPATHEXTr6   PATH)filterri   environr   rB   pathseprj   rA   accessX_OKappend)program_namepathsextspepexts         r   rq   rq   0  s    	tRZ^^Ir2288DDEE
*V

"
"2:
.
.  Qgll1l##!Yq"' <<???  a
a%4ibg 	LL 	r   c                 <   ddl m}m} t                              dd                    |           z   dz              |s || |||          }n< || |||          } |||j        ||          }|j                                         |                                \  }}|	                    d	          }|	                    d	          }t          
                    d
t          |j                             t          
                    d|           |j        |fS )Nr   PopenPIPEzRunning command " z" ...rZ   r[   stdin)r   rZ   r[   UTF-8encodingzreturn code:zstdout:)
subprocessr   r   g_tracerI   rA   rZ   closecommunicatedecoderM   r   r   )commandpipe_commandr   r   p1p2stdout_outputstderr_outputs           r   r   r   =  s8   ########+chhw.?.??'IJJJ 	 uWT$d;;;"" uWT$d;;;"u\4EEE")// !# 0 0%%w%77%%w%77 	BM(:(:;;;	=111 	}$$r   c                    t                               d                    | |                     	 dd l}n4# t          $ r'}	 dd l}n# t          $ r
}Y d }~nd }~ww xY wY d }~nd }~ww xY w|                    |j        |           }|                    ||          d         }|	                    |           t           
                    dt          |                     |S )Nz*Reading Registry key "{0}" field "{1}" ...r   zvalue:)r   rI   r   _winregImportErrorwinregOpenKeyHKEY_LOCAL_MACHINEQueryValueExCloseKeyrM   r   )key_name
field_namer  r\   rQ   values         r   r   r   W  s    DKKHV`aabbb   ====	   4444 ~~f/::			S*	-	-a	0#e**---s3   5 
A& AA!
AA!AA!!A&c                  d    t          t          j                  \  } }| dvrt          d          d S )N)
X86_32X86_64ARM_7ARM_8PPC_64S390XMIPS_32MIPS_64RISCV_32RISCV_64zNpy-cpuinfo currently only works on X86 and some ARM/PPC/S390X/MIPS/RISCV CPUs.)_parse_archrd   r   rC   )archr   s     r   _check_archr  i  sK    *455t  	 	 	 < 	= 	= =	 	r   c                     dd l }dd l}| }|                    |          }|                    |          }|                    d          }|S )Nr   utf8)picklebase64dumps	b64encoder   )thingr  r   abcds          r   _obj_to_b64r(  q  sQ    
\\!__aXXf	r   c                     dd l }dd l}	 |                    |           }|                    |          }|S # t          $ r i cY S w xY wNr   )r  r   	b64decodeloadsrC   )r#  r  r   r$  r%  s        r   _b64_to_objr-  {  sd    u!ll1oo!	
(   	)))s   +6 AAc                     t          | t                    rd | D             S t          | t                    rd |                                 D             S | S )Nc                 ,    g | ]}t          |          S r   _utf_to_str)r	   elements     r   r   z_utf_to_str.<locals>.<listcomp>  s     	4	4	47+g

	4	4	4r   c                 N    i | ]"\  }}t          |          t          |          #S r   r0  )r	   rQ   r  s      r   
<dictcomp>z_utf_to_str.<locals>.<dictcomp>  s>     
$ 
$ 
$sE c

K.. 
$ 
$ 
$r   )r@   listdictitems)inputs    r   r1  r1    sj    ud 	4	4e	4	4	44 
$ 
$[[]]
$ 
$ 
$ $ 
,r   c                    g d}t                               || |           |D ]}|                    |d           r"|                     |d           s||         | |<   :|dk    r_|                    d          rJ|d         D ]'}|| d         vr| d                             |           (| d                                          d S )N)r   hardware_raw	brand_rawhz_advertised_friendlyhz_actual_friendlyhz_advertisedr   r  r   countr   r   l2_cache_sizel2_cache_line_sizel2_cache_associativitysteppingmodelfamilyprocessor_typeflagsl3_cache_sizel1_data_cache_sizel1_instruction_cache_sizerG  )r   rU   r   r   sort)rR   rS   rU   rQ   fs        r   _copy_new_fieldsrM    s    	 	 	 	dD(###   S\\#t TXXc4%8%8 }499
g~~(,,w//~W 7 7qWtG}33A666= r   c                    |                                 D ]}|D ]}|                                }d|v r|                    dd          \  }}|                                                                }|                                }||k    r6t	          |          dk    r#| r|                                s|c c S |c c S d S )N:r'   r   )
splitlinesr|   rB   r{   rp   isdigit)cant_be_number
raw_stringfield_namesr1   r  leftrights          r   _get_field_actualrW    s    ""$$  T  j  "":	Tkk**S!$$KD%::<<DKKMMEzc%jj1nn ]]__ ||||| lllll 	r   c                 v    t          | ||          }|r!|r	  ||          }n# t          $ r |}Y nw xY w||}|S N)rW  rC   )rR  rS  
convert_todefault_valuerT  retvals         r   
_get_fieldr]    so    
NJ
D
D  z Jv66	   666 N&s   # 22c                    	 d                     |           } |                     dd          } d                    d | D                                                       } | dk    rd} d| vrd                     |           } |                     d          } |                     d          rd                     |           } t          |           } d                     |           } | S # t          $ r Y d	S w xY w)
N{0},r   r6   c              3   N   K   | ] }|                                 s|d k    |V  !dS r   NrQ  r   s     r   	<genexpr>z%_to_decimal_string.<locals>.<genexpr>  s3      <<aiikk<QVV!VVVV<<r   0z{0}.0z{0}00.0)r   replacerA   r{   rstripendswithfloatrC   )tickss    r   r   r     s   
,,u

%
--S
!
!% ''<<U<<<
<
<
B
B
D
D%
b[[5 	>>%  5 ,,s

% ^^C  ==5 ,,%
,,u

%	,   	s   C!C$ $
C21C2c                    	 t          |           } d                    |           } |                     d          }|                    d          }|                    dd          }|                    ||z   dz   d          }||z   }d                    |d |         ||d                    }|                    d          \  }}t          |          t          |          }}||fS # t          $ r Y dS w xY w)Nr_  re  r   r6   r'   {0}.{1}r   r   )	rj  r   lstripindexrg  ljustrB   intrC   )rk  scalehz	old_index	new_indexrU  rV  s          r   _hz_short_to_fullrw    s    
,,%
,,u

% ||C"hhsmm)	zz#r"	xx	!!#S))"%):I:9::77"+$D		3u::$
   	s   C$C' '
C54C5c                    	 |                                                                  } d\  }}|                     d          rd}n/|                     d          rd}n|                     d          rd}d                    d	 | D                                                        }d
|vr|dz  }t	          ||          \  }}||fS # t
          $ r Y dS w xY w)NNNghzr   mhz   rt  r   r6   c              3   N   K   | ] }|                                 s|d k    |V  !dS rb  rc  r   s     r   rd  z'_hz_friendly_to_full.<locals>.<genexpr>  s3      ==Qqyy{{=affqffff==r   r   z.0rn  )r{   r|   ri  rA   rw  rC   )	hz_stringrt  rs  s      r   _hz_friendly_to_fullr    s    oo%%''))"e 55%   55$ 5	ww==)=====CCEE"	:2E**)"e
e   	s   CC 
CCc                    	 t          | |          \  }}d                    ||          }|                    d          }|                    dd          }d}d}|dk    rd}d}n|dk    rd	}d}n
|d
k    rd}d
}d                    |d | dz
           || dz
  d                    }d                    t	          |          |          }|                    d          }|S # t          $ r Y dS w xY w)Nrm  r   r6   Hzr   r   GHzr|  MHzrH   KHzr'   z{0:.4f} {1}re  z	0.0000 Hz)rw  r   rp  rg  rj  rh  rC   )rk  rs  rU  rV  result	dot_indexsymbols          r   _hz_short_to_friendlyr    s(   !%//+$D%((& ll3)>>#r""& &
%]]6551}}6551}}65 F9UF1H9-vufQhii/@AA& fv66&==&	-   	s   CC" "
C0/C0c                    dd l }| s| S d                    |           } ddddd}|                                D ]M\  }}|                    ||           r2d                    | d d	                                         |          c S N| S )
Nr   r_  BKBMBGB)z	^[0-9]+B$z	^[0-9]+K$z	^[0-9]+M$z	^[0-9]+G$z{0} {1})rer   r7  matchr{   )r8  r  formatspatternfriendly_sizes        r   _to_friendly_bytesr  /  s    
 	,	e		 	   '}} @ @WmXXgu @


5$B$<--//
?
????@ 	r   c                    |                                  }ddiddiddiddiddid	did
diddiddiddig
}	 |D ]}t          |                                          d         }t          |                                          d         }|                    |          r?t          |                    |          d                                                   |z  c S n# t          $ r
}Y d }~nd }~ww xY w| S )Ngibi   @mibi   kib   gbmbkbgmkr%  r'   r   )	r|   r5  rU   valuesri  rr  rB   r{   rC   )friendly_bytesr8  r  entryr  
multiplierr\   s          r   _friendly_bytes_to_intr  C  s;   					 	;4.
+$-	,) = =e%**,,"7U\\^^$$Q':nnW =u{{7##A&,,..//*<<<<== 	   $$$$ 	s   B%C C 
C2-C2c                    d|                                  vrdS |                                  }d}|                    d          rd}n|                    d          rd}d|v r|                    d          d	         }n|                    d d	          d	         }|                    d                              d                                          }t          |          }||fS )
Nrt  rf  r   r   r{  r|  rz  r   @r'   )r|   ri  rB   rsplitrh  r{   r   )
cpu_stringrt  rs  s      r   _parse_cpu_brand_stringr  a  s    
  """"		
KK 
%%kk% 
%2II	xx}}Q""	yyq!"iie$$**,,	Ur   c           	          dd l }d |                    d           D             }d |                    d           D             }d t          ||          D             } fd|                                D             }d\  }}}}|D ]}	|	                    d	          D ]}
d
 |
                    d          D             }
t          |
          dk    r|
d         |
d         }}|dk    r|                    d          }`|dk    r$t          |                    d          d          }|dk    r$t          |                    d          d          }|dv r#t          |                    d          d          }܌                                 }d}|r_d}|D ]X}	d	                    |	          }|
                    |          r,|d t          |                                                    }d}Y|_t          |          \  }}|dk    rT|D ]Q}	|	}dD ]J}||v rDd|d |                    |          t          |          z            z   }t          |          \  }} nKR|||||||fS )Nr   c                 6    g | ]}|                                 S r   startr	   r  s     r   r   z._parse_cpu_brand_string_dx.<locals>.<listcomp>{  s     
=
=
=17799
=
=
=r   z\(c                 6    g | ]}|                                 S r   r  r  s     r   r   z._parse_cpu_brand_string_dx.<locals>.<listcomp>|  s     ;;;q;;;r   z\)c                     i | ]\  }}||	S r   r   r	   r  vs      r   r4  z._parse_cpu_brand_string_dx.<locals>.<dictcomp>}  s    ///TQAq///r   c                 0    g | ]\  }}|d z   |         S )r'   r   )r	   r  endr  s      r   r   z._parse_cpu_brand_string_dx.<locals>.<listcomp>~  s*    HHH*%JuQw}%HHHr   )NNNNr`  c                 6    g | ]}|                                 S r   )r{   r   s     r   r   z._parse_cpu_brand_string_dx.<locals>.<listcomp>  s     
.
.
.17799
.
.
.r   rO  r'   originru   rC  0x   rD  famrE  TFz({0})rf  )r  r  r  zCPU @ )r  finditerzipr7  rB   rp   r{   rr  ro  r   ri  r  find)r  r  startsendsinsides	vendor_idrC  rD  rE  insidepairnamer  brand
is_workingfullhz_brandrs  rt  r  s   `                   r   _parse_cpu_brand_string_dxr  w  s   
 >
=bkk%<<
=
=
=;;BKKz::;;;//S..///HHHHHHH '?#HeV * *Vll3 * *d
.
.djjoo
.
.
.4	$ii!mmq'47%DxS!!YY			ELL&&++XX	d##R((UU	"	"	"%,,t$$b))V* 
				 *  f
..
 
 4nnT ;SYYJ;%%''EJ   +5115   f2$  u{{
R62775>>CJJ667
7R.r22_Xu
U 
 
5%HeVDDr   c                 R   	 |                      d          dd          |                      d          dd          z   |                      d          dd          z   |                      d          dd          z   |                      d          dd          z   |                      d          dd          z   }d |D             }d	 |D             }d }d
}|D ]%}t          d |D                       }||k    r|}|}&|si S |\  }}}	}
}}}d| v r^| |                     d          d                               d          d
         }|                                                                 }d |D             }d |D             }|D ]}t	          |                                          d
         }t	          |                                          d
         }|dk    r|                    d          }
l|dk    r$t          |                    d          d          }|dk    r$t          |                    d          d          }|dv r#t          |                    d          d          }g }dD ]M}|| v rG|	                    |                      |          d                              d          d
                    Ng }|D ]u}|                     d          d                              d          d
         
                                }|                     d          D ]}|	                    |           v|                                 t          |	          \  }}|dk    rd}t          |          }|
|	||||d}|r,|dk    r&t          ||          |d<   t          ||          |d<   |r,|dk    r&t          ||          |d <   t          ||          |d!<   d" |                                D             S # t"          $ r$}t$                              |           Y d }~nd }~ww xY wi S )#Nz CPU0:r'   z CPU1:z CPU:z
CPU0:z
CPU1:z
CPU:c                 h    g | ]/}|                     d           d                                         0S )r9   r   )rB   r{   r	   ls     r   r   z'_parse_dmesg_output.<locals>.<listcomp>  s3    
3
3
31774==!!##
3
3
3r   c                 ,    g | ]}t          |          S r   )r  r  s     r   r   z'_parse_dmesg_output.<locals>.<listcomp>  s!    >>>1+A..>>>r   r   c                     g | ]}|d uS rY  r   r   s     r   r   z'_parse_dmesg_output.<locals>.<listcomp>  s    222!222r   z	  Origin=r9   c                 \    g | ])}|                                                     d           *S =)r{   rB   r   s     r   r   z'_parse_dmesg_output.<locals>.<listcomp>  s,    222aQWWYY__S!!222r   c                     g | ]H}|d                                                                           |d                                          iIS )r   r'   )r{   r|   r   s     r   r   z'_parse_dmesg_output.<locals>.<listcomp>  sA    CCCqadjjll  ""QqTZZ\\2CCCr   r  ru   rC  r  r  rD  r  )z  Features=z  Features2=z  AMD Features=z  AMD Features2=<>r`  rf  r|  )r   r;  rC  rD  rE  rG  r<  r=  r>  r   c                     i | ]
\  }}|||S r   r   r  s      r   r4  z'_parse_dmesg_output.<locals>.<dictcomp>  s#    	-	-	-41a1	-!Q	-	-	-r   )rB   sumr  r{   r5  rU   r  rr  ro  r   r|   rK  r  r   r  rw  r7  rC   r   rF   )rL   linescpu_stringsbest_stringhighest_countr  r?  r   rs  r   r  rC  rD  rE  fieldsfieldr  r  
flag_linescategoryrG  r1   flagr>  rR   r\   s                             r   _parse_dmesg_outputr    s   Y
,,x
 
 
$
LL122
LL!"" LLABB  LLABB	 
 LL122% 4
3U
3
3
3% ?>>>>+ +-  j22z222335mMK 
 
9JUG)UOY% F6;;{++--/55d;;A>6LLNN  ""62262226CCFCCC6 * *u

a D  #ExS!!YY			ELL&&++XX	d##R((UU	"	"	"%,,t$$b))V *X @ @h&fll8,,Q/55d;;A>???
%  d
**S//!

"
"3
'
'
*
0
0
2
24zz#  t	LL**,,, 1AA- e5%i00= 
 
$  H}--$9-$O$O4 ! 5i G G4 ;}--,]EBB4(E::4	-	-4::<<	-	-	--   	,,s 	s   C:O6 =K8O6 6
P$ PP$c                    dd l }d\  }}|                                 } |                    d|           rd}d}n@|                    d|           rd}d}n$|                    d	|           rd
}d}n|                    d|           rd}d}n|                    d|           rd
}d}n|                    d|           rd}d}n|                    d|           rd}d}n|                    d|           rd}d}n|                    d|           rd}d}nf|                    d|           rd}d}nK| dk    rd}d}n@| dk    rd}d}n5|                    d|           rd}d}n|                    d|           rd}d}||fS ) Nr   ry  z4^i\d86$|^x86$|^x86_32$|^i86pc$|^ia32$|^ia-32$|^bepc$r      z9^x64$|^x86_64$|^x86_64t$|^i686-64$|^amd64$|^ia64$|^ia-64$r  @   z^armv8-a|aarch64|arm64$r  z/^armv7$|^armv7[a-z]$|^armv7-[a-z]$|^armv6[a-z]$r  z"^armv8$|^armv8[a-z]$|^armv8-[a-z]$z ^ppc32$|^prep$|^pmac$|^powermac$PPC_32z^powerpc$|^ppc64$|^ppc64le$r  z^sparc32$|^sparc$SPARC_32z^sparc64$|^sun4u$|^sun4v$SPARC_64z^s390x$r  mipsr  mips64r  z^riscv$|^riscv32$|^riscv32be$r  z^riscv64$|^riscv64be$r  )r  r|   r  )r   r  r  r   s       r   r  r  
  s    
t"((** HHDoVV .	$	$$hhK_]] +	$	$$hh)?;; '	$	$$hhA?SS $	$	$$hh4oFF !	$	$$hh2ODD 	$	$$hh-?? 	$	$$hh#_55 	$	$$hh+_== 	$	$$hhz?++ 	$	$$	$	$$!!	$	$$hh/AA 	$	$$hh'99 	$	$	tr   c                 "    d|z  }| |z  dk    }|S )Nr'   r   r   )regbitmaskis_sets       r   _is_bit_setr  C  s    	S
*q.r   c                 F   t                                           s|                     d           dS t                                           \  }}|dk    r|                     d           dS |                                D ]X}|                                                                }|                    d          r|                    d          r dS  dS Yd}d}|                                D ]}|                                                                }|                    d          r|                    d	          rd}U|                    d
          r|                    d	          rd}| 	                    d|           | 	                    d|           | p| S )NzFailed to find sestatus.Fr   z$Failed to run sestatus. Skipping ...zcurrent mode:	enforcingTallow_execheaponallow_execmemzcan_selinux_exec_heap:zcan_selinux_exec_memory:)
rd   r   rF   r   rP  r{   r|   
startswithri  rM   )tracer   rL   r1   can_selinux_exec_heapcan_selinux_exec_memorys         r   _is_selinux_enforcingr  I  s   !! **'(((	 !++--V!OO**3444	     T					$	___%% 
mmK   4455	     " "T					$	__%&& "4==+>+> "'' "DMM$,?,? "!.0EFFF02IJJJ"	"	A*A&ABr   c                     i }| D ]d}| |         }||v r||         |k    r|||<    |s#|dk    r*|dk    r1t          |          t          k    r|                    d          r_|||<   e|S )Nrn  r  rf  )typer   r  )rR   acceptable_valuesfiltered_inforQ   r  s        r   #_filter_dict_keys_with_empty_valuesr  m  s      S
s)% 	%%M# 
  f__ b[[ 
%[[CE,,U33-r   c                   .    e Zd Zddg fdZd Zd Zd ZdS )ASMNr   c                 v    || _         || _        || _        d | _        d | _        d | _        d | _        d| _        d S r*  )restypeargtypesmachine_code
prochandlemmfuncaddresssize)r   r  r  r  s       r   r#   zASM.__init__  s?    $,$-"$$/$'$)$,$)))r   c                 N   t                               d| j                  }t          j        t          |                    | _        t          j        ret          |          }|dk     rd}t          j	        d          }t          j	        d          }t          j
        j        j        }t          j        |_         |d t          j        |          ||          | _        | j        st!          d           t          j        t          j        t          j        t          j        t          j                  t          j                  } || j        ||          dk     rt!          d          t          j	        d          }t          j	        d          }t          j
        j        j        }	 |	t          j        | j                  t          j        |          |t          j        |                    }
|
st!          d          | j        sHt          j
        j        j        }t          j        |_        t          j         |                      | _        t          j
        j                            | j        t          j        | j                  t          j        |                    }
|
st!          d	          ndd
lm}m}m}m}m}m} t                               d| j                  }t          |          | _         |d| j        ||z  ||z  |z            | _        | j                            |           t          j         t          j!        "                    | j                            | _        t          j        | j        g| j#        R  } || j                  | _$        d S )Nr   i      zFailed to VirtualAllocr   zFailed to memmover  zFailed VirtualProtectzFailed FlushInstructionCache)mmapMAP_PRIVATEMAP_ANONYMOUS
PROT_WRITE	PROT_READ	PROT_EXECr  )rG  prot)%bytesrA   r  ctypesc_size_trp   r
  rd   r   c_ulongwindllkernel32VirtualAllocc_void_pr  r	  rC   	CFUNCTYPE_memmove_addrVirtualProtectbyrefr  GetCurrentProcessFlushInstructionCacher  r  r  r  r  r  r  r+   	addressofc_intfrom_bufferr  r  )r   r  r
  
MEM_COMMITPAGE_READWRITEpfnVirtualAllocmemmovePAGE_EXECUTEold_protectpfnVirtualProtectrespfnGetCurrentProcessr  r  r  r  r  r  functypes                      r   compilezASM.compile  s+   C!233,oc,//00$) .F
l

4
VmmFTv&&:N3''>]+8?#_?!/$(=(=z>ZZ4<
, .
,
-
-- bVfovQWQ`aabhbvww7gdlL$//!33
'
(
(( .&&<"";}-<		6?4<88&/$:O:OQ]_e_klw_x_x	y	y3
 -
+
,
,, / >!=1C#)? o&:&:&<&<==DO			5	5dovW[WcGdGdflfuvzf{f{	|	|3
 4
2
3
334 WVVVVVVVVVVVVVVV **S$"344<<  49T"di{]'BV_I_bkIklll47 7=="6<#;#;DG#D#DEE4< dl;T];;;(ht|$$$)))r   c                 .    |                                  }|S rY  )r  )r   r\  s     r   runzASM.run  s    99;;&	-r   c                 ^   t           j        rdt          j        d          }t          j        j                            t          j        | j                  t          j	        d          |           n| j
                                         d | _        d | _
        d | _        d | _        d| _        d S )Ni   r   )rd   r   r  r  r  r  VirtualFreer  r	  r  r  r   r  r  r
  )r   MEM_RELEASEs     r   freezASM.free  s     '';	=%%fodl&C&CV_UVEWEWYdeeee7==???$/$'$)$,$)))r   )r`   ra   rb   r#   r/  r1  r5  r   r   r   r  r    s]         2B    6% 6% 6%p      r   r  c                   Z    e Zd ZddZddg fdZd Zd Zd Zd Zd	 Z	d
 Z
d Zd Zd ZdS )CPUIDNc                 R    |t          dd          }t          |          | _        d S )NF)r   r  is_selinux_enforcing)r   r  s     r   r#   zCPUID.__init__  s.    
]5 4E::$r   r   c                 P    t          |||          }|                                 |S rY  )r  r/  )r   r  r  r  asms        r   	_asm_funczCPUID._asm_func  s%    GX|,,#++---	*r   c                     t          t          j        d|          }|                                 |                                }|                                 |S )Nr   )r  r  c_uint32r/  r1  r5  )r   r  r;  r\  s       r   _run_asmzCPUID._run_asm  sA    FOR..#++---7799&((***	-r   c                 "   |                      dd          }|                      dd          }|                      dd          }g }|||fD ]/}dD ]*}|                    t          ||z	  dz                       +0d                    |          }|S )N   1         ér      r        r6   )r?  r   chrrA   )r   ebxecxedxr  r  r
   s          r   get_vendor_idzCPUID.get_vendor_id  s    	 	# 		 	# 		 	# )3_ - -c - -qS#(d*++,,,,-ggi  )	r   c                     |                      dd          }|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}|dv r||z   }n|}|dv r|dz  |z   }||||dS )N      s   r      r  rF     rH   r     rH  )rP  )r|  rP  )rC  rD  rE  rF  r?  )	r   eaxstepping_idrD  	family_idrF  extended_model_idextended_family_idrE  s	            r   get_infozCPUID.get_info  s    	 	# S +!8s
%ax3)2I$.byC'r	T)&$*666'"e+5 $	
 
 r   c                 0    |                      d          }|S )Ns      rS  )r   max_extension_supports     r   get_max_extension_supportzCPUID.get_max_extension_support=  s#    --  
r   c                    |                      dd          }|                      dd          }i dt          |d          dt          |d          dt          |d	          d
t          |d          dt          |d          dt          |d          dt          |d          dt          |d          dt          |d          dt          |d          dt          |d          dt          |d          dt          |d          dt          |d          d t          |d!          d"t          |d#          d$t          |d%          i d&t          |d'          d(t          |d)          d*t          |d+          d,t          |d-          d.t          |d/          d0t          |d1          d2t          |d3          d4t          |d5          d6t          |d7          d8t          |d9          d:t          |d;          d<t          |d=          d>t          |d?          d@t          |d          dAt          |d          dBt          |d	          dCt          |d          i dDt          |d          dEt          |d          dFt          |d          dGt          |d          dHt          |d          dIt          |d          dJt          |dK          dLt          |d          dMt          |d          dNt          |d          dOt          |d!          dPt          |d%          dQt          |d'          dRt          |d)          dSt          |dT          dUt          |d+          dVt          |d-          t          |d/          t          |d1          t          |d3          t          |d5          t          |d7          t          |d9          t          |d;          t          |d=          t          |d?          dW	}dX |                                D             }|dk    r|                      dYdZ          }|                      dYd[          }i d\t          |d	          d]t          |d          d^t          |d          d_t          |d          d`t          |d          dat          |d          dbt          |d          dct          |dK          ddt          |d          det          |d          dft          |d          dgt          |d!          dht          |d#          dit          |d%          djt          |d'          dkt          |d)          dlt          |dT          i dmt          |d+          dnt          |d-          dot          |d/          dpt          |d1          dqt          |d3          drt          |d5          dst          |d7          dtt          |d9          dut          |d;          dvt          |d=          dwt          |d?          dxt          |d          dyt          |d          dzt          |d	          d{t          |d          d|t          |d          d}t          |d          t          |d          t          |d          t          |dK          t          |d          t          |d          t          |d          t          |d-          t          |d=          d~}d |                                D             }||z  }|dk    r|                      d          }|                      d          }i dt          |d          dt          |d          dt          |d	          d
t          |d          dt          |d          dt          |d          dt          |d          dt          |d          dt          |d          dt          |d          dt          |d          dt          |d          dt          |d          dt          |d          d t          |d!          d"t          |d#          d$t          |d%          i dt          |d)          dt          |dT          dt          |d-          d.t          |d/          d0t          |d1          dt          |d3          dt          |d5          dt          |d7          dt          |d;          dt          |d=          dt          |d?          dt          |d          dt          |d          dt          |d	          dt          |d          dt          |d          dt          |d          i dt          |d          dt          |d          dt          |d          dt          |d          dt          |dK          dt          |d          dt          |d          dt          |d          dt          |d!          dt          |d#          dt          |d%          dt          |d)          dt          |d+          dt          |d-          dt          |d/          dt          |d1          dt          |d5          t          |d7          t          |d9          d}d |                                D             }||z  }|                                 |S )NrO  rD  rC  fpur   vmer'   der(   pserH   tscr  msrrf   paer|  mce   cx8rF  apicr   sep   mtrrrQ  pge   mca   cmovrP  patr  pse36   pn   clflush   dts   acpi   mmx   fxsrrG  sse   sse2   ss   ht   tm   ia64   pbe   pni	pclmulqdqdtes64monitords_cplvmxsmxesttm2ssse3cid
   fmacx16xtprpdcmpciddcasse4_1sse4_2rR  x2apicmovbe)	popcnttscdeadlineaesxsaveosxsaveavxf16crdrnd
hypervisorc                     g | ]	\  }}||
S r   r   r  s      r   r   z#CPUID.get_flags.<locals>.<listcomp>  !    
,
,
,A!
,1
,
,
,r   s   1s
      s
      sgxbmi1hleavx2smepbmi2ermsinvpcidrtmpqmmpxpqeavx512favx512dqrdseedadxsmap
avx512ifmapcommit
clflushoptclwbintel_ptavx512pfavx512eravx512cdshaavx512bwavx512vlprefetchwt1
avx512vbmiumippkuospkeavx512vbmi2)gfnivaes
vpclmulqdq
avx512vnniavx512bitalgavx512vpopcntdqrdpidsgx_lcc                     g | ]	\  }}||
S r   r   r  s      r   r   z#CPUID.get_flags.<locals>.<listcomp>  !    ???41aQ?Q???r   l       s
     s
     syscallmpnxmmxextfxsr_optpdpe1gprdtscplm3dnowext3dnowlahf_lm
cmp_legacysvmextapic
cr8_legacyabmsse4amisalignsse3dnowprefetchosvwibsxopskinitwdtlwpfma4tce
nodeid_msrtbmtopoextperfctr_core
perfctr_nbdbx)perftscpci_l2ic                     g | ]	\  }}||
S r   r   r  s      r   r   z#CPUID.get_flags.<locals>.<listcomp>V  r  r   )r?  r  r7  rK  )r   r[  rL  rK  rG  rJ  extended_flagss          r   	get_flagszCPUID.get_flagsH  ss   	 	# 		 	#B;sAB;sAB +c1

B 	;sA	B
 	;sAB 	;sAB 	;sAB 	;sAB 	;sAB 
KQB 	;sBB 
KR  B 	;sBB 	;sBB  
KR  !B" 	;sB#B$ [b!!%B B& +c2

'B( {3##)B, 	;sB-B. 
KR  /B0 	;sB1B2 
KR  3B4 	;sB5B6 
KR  7B8 +c2

9B: +c2

;B< +c2

=B> 
KR  ?B@ 	;sBABD 	;sAEBF S!$$GBH k#q!!IBJ {3""KB B BL k#q!!MBN 	;sAOBP 	;sAQBR 	;sASBT 	;sAUBV [a  WBX 	;sBYB\ 	;sB]B^ 
KR  _B` 
KR  aBb 
KR  cBf 
KR  gBh 	;sBiBj k#r""kBl k#r""mBn k#r""oBp [b!!qB Br #r""sB''sBb!!3##sBR  b!!c2&&CB B B%J -
,
,
,
,% a	
 
3 

 
3B 
KQB [a  	B
 
KQB [a  B [a  B [a  B [a  B C$$B 
KR  B 
KR  B 
KR  B  
KR  !B" C$$#B$ S"%%%B& {3##'B( 
KR  )B* [b!!+B B, ;sB''-B. C$$/B0 ;sB''1B2 [b!!3B4 S"%%5B6 S"%%7B8 S"%%9B: S"%%;B< 
KR  =B> S"%%?B@ S"%%ABD KQ''EBF ;sA&&GBH [a  IBJ 
KQKBL k#q!!MBP KQ''QB BT a  a  sB''sB'' b))#C,, #r"" 3##AB B B>J @?>#7#7#9#9???>N5 j((	
 
3 

 
3B	KQB	KQB 	;sAB 
KQ	B
 
KQB 
KQB 
KQB 
KQB 
KQB [a  B C$$B [b!!B 
KR  B 
KR  B  [b!!!B" 
KR  #B$ k#r""%B B( 	;sB)B* 	;sB+B. {3##/B0 
KR  1B2 [b!!3B4 S"%%5B6 C$$7B8 {3##9B< 	;sB=B> S"%%?B@ k#r""ABD C##EBF ;sA&&GBH 
KQIBJ C##KBL ;sA&&MBN 
KQOB B BP k#q!!QBR KQ''SBT k#q))UBV [a  WBX 
KR  YBZ 
KR  [B\ {3##]B^ 
KR  _Bb 
KR  cBd [b!!eBf 
KR  gBj ;sB''kBn 
KR  oBp C$$qBr [b))sBt ;sB''uBx 
KR  yB Bz C$$C$$}B B B>J @?>#7#7#9#9???>N5**,,,	,r   c                 r   d}|dk    rg d}|D ]}|                      |d          }|                      |d          }|                      |d          }|                      |d          }||||fD ]}	dD ]}
|t          |	|
z	  d	z            z  } |                    d
                                          }|S )Nr6   l       )s     s     s     s   rB  rC  rD  rE  rH   )r?  rI  r{   )r   r[  r   instructionsinstructionrT  rJ  rK  rL  r  r
   s              r   get_processor_brandzCPUID.get_processor_brand]  s   / j((  <
 # $0 $0{
-- C -- C -- C -- C S#s# 0 0 0 0cQh$.///oo00
 $))$//5577/	r   c                 t    i }|dk     r|S |                      d          }|dz  dz  |dz	  dz  |dz	  dz  d	}|S )
Nl       s
     rH  r  rQ  rP  r  i  )size_bassociativityline_size_brS  )r   r[  
cache_inforK  s       r   	get_cachezCPUID.get_cache  sn    * Z''
 		 	# TzT!Ri3&2I' * 
r   c                 x   d }t           j        dk    rmd }t          j        t          j                  t          j        t          j                  f}|                     ||g d          }|j        fd}||_        |}n9t           j        dk    r)t          j        }d}|                     ||g d          }|}|S )N32bit)   Us   rA        1s   ]s   Ms   s      ]   c                      t          j        d          } t          j        d          } t          j        |           t          j        |                     | j        dz  dz  |j        z  }|S )Nr   r  l        )r  r>  r  r  )highlowr\  old_funcs      r   new_funcz&CPUID.get_ticks_func.<locals>.new_func  sg    ?1D
/!

CHV\$c!2!2333 zR#55BFMr   64bitr   )	   HrA  r  r  r  s    r  s   	r  )rd   r   r  POINTERc_uintr<  r  c_uint64)r   r\  r  r  get_ticks_x86_32r  get_ticks_x86_64r  s          @r   get_ticks_funczCPUID.get_ticks_func  s    &_7~fm,,fnV].K.KL8nnWh   " #8     $66'!!_78nnWh
 
 
  6	-r   c                     ddl m} |                                 }|                                } |d           |                                }||z
  }|                                 |S )Nr   )sleepr'   )timer   r  r  r5  )r   r   ticks_fnr  r  rk  s         r   
get_raw_hzzCPUID.get_raw_hz  sg      ""(
--//%%(((#;%
--///	,r   rY  )r`   ra   rb   r#   r<  r?  rM  rY  r\  r  r  r
  r  r#  r   r   r   r7  r7    s        ; ; ; ; "BR    
       F  B  R R Rj3 3 3l  .8 8 8t    r   r7  c                  2   ddl m}  t          dd          }i }|j        t          _        |j        t          _        	 t          t          j
                  \  }}|dvr+|                    d           |                    |d          S t          |          }|j        r+|                    d           |                    |d          S |                                }|                    |          }|                                }|                    |          }|                                }	t)          |	          }	t+          |          \  }
}|                                d|t/          |
|          t/          |	d          t1          |
|          t1          |	d          |d         |d	         |d
         |d         |d         |d         |d         |                    |          d}t5          |          }|                                 nw# t8          $ rj}ddlm}  |            }d                    d |                     d          D                       dz   |_!        |                    |d          cY d}~S d}~ww xY w|                    |d          S )z
	Warning! This function has the potential to crash the Python runtime.
	Do not call it directly. Use the _get_cpu_info_from_cpuid function instead.
	It will safely call this function in another process.
	r   r   Tr  r  -Not running on X86_32 or X86_64. Skipping ...z"SELinux is enforcing. Skipping ...r6   r  r  r  rC  rD  rE  rF  )r   r:  r;  r<  r=  r>  r   r@  rA  rB  rC  rD  rE  rF  rG  r:   c                 8    g | ]}d                      |          S r=   r?   r   s     r   r   z3_get_cpu_info_from_cpuid_actual.<locals>.<listcomp>8  s&    NNN!**1--NNNr   r9   NF)"r   r   r   r   sysrZ   r   r[   r  rd   r   rF   r_   r7  r9  r\  r
  rY  r  r#  r   r  rM  r  rw  r  r  r4   rC   rD   r;   rA   rB   r   )r   r  rR   r  r   cpuidr[  r	  r   r   r>  rs  r\   r;   rE   s                  r   _get_cpu_info_from_cpuid_actualr*    s    	tT		
 mm7#:566*$ 
%	%	%::=>>>
--d
#
## ,,%
 $::2333
--d
#
##  99;;455*			$--.CDD/   ) ++) 1AA-''))2=%HH.y!<<%mU;;!)Q//x(#M2'8JM(^*+OO122%
 
$* 
-T	2	2$--//// # # #""""""z||*wwNNz7G7G7M7MNNNOORVV%*	tT	"	"""""""	# 	dE"""s-   A
H A H EH 
J AI;5J ;J c                     t           j        }t           j        }t                      }|t           _        |t           _        |                     t          |                     d S rY  )r(  rZ   r[   r*  putr(  )queueorig_stdoutorig_stderrrL   s       r   +_get_cpu_info_from_cpuid_subprocess_wrapperr0  =  sI    zz
)
+
+;vr   c                     t                               d           ddlm} m} t
          j        st                               d           i S t          t
          j	                  \  }}|dvrt                               d           i S 	 t          r |            } | t          |f          }|                                 |                                r)|                    d           |                                )|j        dk    rt                               d           i S |                                rt                               d	           i S t#          |                                          }dd
l}|                    d          }d|v r(|d         r t                               |d                    d|v r^|d         rVt,          j                            d                    |d                              t,          j                                         d|v r^|d         rVt,          j                            d                    |d                              t,          j                                         d|vrt                               d           i S d|v r^|d         rVt                               d           t                               |d                    t                               d           i S d|v r$|d         rt                               d           i S d|vs|d         st                               d           i S |d         S t,          j        }	t,          j        }
t7                      }|	t,          _        |
t,          _        t                                            |d         S # t:          $ r$}t                               |           Y d
}~nd
}~ww xY wi S )z
	Returns the CPU info gathered by querying the X86 cpuid register in a new process.
	Returns {} on non X86 cpus.
	Returns {} if SELinux is in enforcing mode.
	z Tying to get info from CPUID ...r   )ProcessQueuezCan't CPUID. Skipping ...r%  r&  )targetargsz,Failed to run CPUID in process. Skipping ...z7Failed to get anything from CPUID process. Skipping ...Nr  )indentrL   rZ   z{0}
r[   r]   z6Failed to get is_fail from CPUID process. Skipping ...r\   z
Failed ...rR   z:Failed to get return info from CPUID process. Skipping ...)r   r2   r   r2  r3  rd   r   rF   r  r   CAN_CALL_CPUID_IN_SUBPROCESSr0  r  is_aliverA   exitcodeemptyr-  r   pprintPrettyPrinterr+   r(  rZ   r   r,   r[   r*  r4   rC   )r2  r3  r  r   r-  r   rL   r;  ppr.  r/  r\   s               r   _get_cpu_info_from_cpuidr>  H  s    	2333++++++++ 	 	,,+,,,	) *455t 	$$$	,,>???	)G! D5775wAQQQ177999 
 FF1III 
  jAooLL?@@@I kkmm (LLJKKKI %%FMMM			Q		'	'B 6fX.]]6(#$$$6fX.ZgnnVH%566777Z6fX.ZgnnVH%566777Z\\JKKKY 6%=\\@AAA]]6%=!!!]]<   YFvi0]]<   YV6&>\\NOOOY&> ;;+--63:3:
??
.   	,,s 	sF   BN9 %/N9 E
N9  A!N9 'N9 *'N9 N9 AN9 9
O'O""O'c                  "   t                               d           	 t                                          st                               d           i S t                                          \  } }| dk    rt                               d           i S t          d|dddd	d
          }t          d|dddddd          }t          d|ddd          }t          d|t          dd          }t          d|t          dd          }t          d|t          dd          }t          d|ddd          }t          d|ddddd          }	|	r(|	                                }	|		                                 |s	 t          dd          D ]x}
d                    |
          }t          d|dd|          }|rLd |                    d          D             }t          |          }d|v r|d         dk    rd|v r
|d         } nyn# t          $ r Y nw xY wt          d|ddd d!d"d#d$	  	        }|                                                    d%                                          }t#          |          }d&\  }}	 t%          |          \  }}n# t          $ r Y nw xY w||t'          |          |	||||d'}|r|d(k    r|}d)}n
|r|d(k    r|}t)          ||          d*k    r&t+          ||          |d+<   t)          ||          |d,<   t)          ||          d*k    r&t+          |d)          |d-<   t)          |d)          |d.<   t-          |dddd/          }t                                            |S # t          $ r&}t                               |           i cY d}~S d}~ww xY w)0z`
	Returns the CPU info gathered from /proc/cpuinfo.
	Returns {} if /proc/cpuinfo is not found.
	z(Tying to get info from /proc/cpuinfo ...z*Failed to find /proc/cpuinfo. Skipping ...r   z-Failed to run cat /proc/cpuinfo. Skipping ...FNr6   r  z	vendor idvendorTz
model namer   	processoruarchz
cache sizer  rC  rD  z
cpu familyHardwarerG  FeaturesASEs implementedr  zcache{0}c                 8    g | ]}|                     d           S r  )rB   )r	   r  s     r   r   z3_get_cpu_info_from_proc_cpuinfo.<locals>.<listcomp>  s$    >>>Eu{{3>>>r   r   level3r
  zcpu MHzz	cpu speedclockzcpu MHz dynamiczcpu MHz staticr{  r*  )r:  r;  rH  rG  r   rC  rD  rE  rf  r|  rn  r<  r>  r=  r   rC  rD  rE  )r   r2   rd   rl   rF   r   r]  rr  rB   rK  ranger   r6  rC   r|   rh  r{   r   r  r  rw  r  r  r4   )r   rL   r  r   
cache_sizerC  rD  rE  hardwarerG  ir  r  r   r>  rs  rR   r\   s                     r   _get_cpu_info_from_proc_cpuinforO    s    	:;;;V		$	$	&	& 
<<<===
9!2244*f1__
<<?@@@
9 b+{HUU)tVT4uk[bcc/%r<@@*vsB
;;(
UFCW
5
5%eVS"l;;&vtR<<( UFD$EW
X
X%
 ;;==5::<<< 
 		1b\\  a  TvtT488U >>U[[-=-=>>>e5kke	E		eGn33%&Mzu
 	 	 	D	 b)['Sdfvww)oo&&u--3355) ++) #-1/BB=%%	   4 *:66

 

$ 
 -500=55 	U**9 }e,,v55$9-$O$O4 !,]EBB4y%((611 5i C C4(A664	,Tq!VW3X3X	Y	Y$	//	+   	,,s	))))))su   4M =M CM *B	G4 3M 4
H>M  HA'M )I< ;M <
J	M J		CM 
N(N	N	Nc                  T   t                               d           	 d\  } }t                                          st                               d           i S t                                          \  }}|dk    rt                               d           i S |                    d          d                             d          d         } |                     d	          }|d
k    sJ | d|dz                                            	                                } | 
                    d          rd}n| 
                    d          rd}|                     d                              d                                          } t          |           } t          | |          t          | |          t          | |          t          | |          d}t          |          }t                                            |S # t"          $ r&}t                               |           i cY d}~S d}~ww xY w)z^
	Returns the CPU info gathered from cpufreq-info.
	Returns {} if cpufreq-info is not found.
	z'Tying to get info from cpufreq-info ...r  z)Failed to find cpufreq-info. Skipping ...r   z(Failed to run cpufreq-info. Skipping ...zcurrent CPU frequency isr'   r9   r  r  r(   r{  r|  rz  r   )r<  r=  r>  r   N)r   r2   rd   r   rF   r   rB   r  r{   r|   ri  rh  r   r  rw  r  r4   rC   )r  rs  r   rL   rN  rR   r\   s          r   _get_cpu_info_from_cpufreq_inforQ    s    	9:::%/(E		$	$	&	& 
<<;<<<
9!..00*f1__
<<:;;;
9\\455a8>>tDDQG(mmD!	
ba!A#g$$&&,,..(u 55 5__U##**5117799())( 4HeDD/%@@&x77"8U33	
 
$ 
-T	2	2$	//	+   	,,s	))))))s*   9G7 =G7 E"G7 7
H'H"H'"H'c            	      	   t                               d           	 t                                          st                               d           i S t                                          \  } }| dk    rt                               d           i S i }t          d|dddd          }|r]t          |          }d	}t          ||          |d
<   t          ||          |d<   t          ||          |d<   t          ||          |d<   t          d|dddd          }|r]t          |          }d	}t          ||          |d
<   t          ||          |d<   t          ||          |d<   t          ||          |d<   t          d|ddd          }|r||d<   t          d|ddd          }|r||d<   n.t          d|ddd          }|r|
                                s||d<   t          d|ddd          }|r&|
                                rt          |          |d<   t          d|ddd          }|r&|
                                rt          |          |d<   t          d|ddd          }	|	r&|	
                                rt          |	          |d<   t          d|ddd          }
|
r?|
                    d          d                                         }
t          |
          |d<   t          d|ddd          }|r?|                    d          d                                         }t          |          |d<   t          d|dddd           }|r?|                    d          d                                         }t          |          |d!<   t          d|ddd"          }|r?|                    d          d                                         }t          |          |d#<   t          d|ddd$d%d&          }|r-|                                }|                                 ||d$<   t!          |dddd'          }t                                            |S # t$          $ r&}t                               |           i cY d}~S d}~ww xY w)(zP
	Returns the CPU info gathered from lscpu.
	Returns {} if lscpu is not found.
	z Tying to get info from lscpu ...z"Failed to find lscpu. Skipping ...r   z!Failed to run lscpu. Skipping ...FNzCPU max MHzzCPU MHzr|  r<  r=  r>  r   zCPU dynamic MHzzCPU static MHzz	Vendor IDr   z
Model namer;  Modelz
CPU familyrE  SteppingrC  rD  z	L1d cache(rI  z	L1i cacherJ  zL2 cachez	L2d cacher@  zL3 cacherH  rG  rD  rE  rJ  )r   r2   rd   r   rF   r   r]  r   r  rw  rQ  rr  rB   r{   r  rK  r  r4   rC   )r   rL   rR   new_hzrs  r  r  rE  rC  rD  rI  rJ  r@  rH  rG  r\   s                   r   _get_cpu_info_from_lscpurW  ;  s    	2333W					 
<<4555
9!''))*f1__
<<3444
9	$eVT4	JJ& 8v&&65$9&%$H$H4 ! 5fe D D4,VU;;4(774eVT41BDTUU& 8v&&65$9&%$H$H4 ! 5fe D D4,VU;;4(774dK@@) %$4
UFD$
=
=%
 4eVT4995 EMMOO DeVT4>>&      KK4>vtT:>>( $(""$$ $(mm4

UFD$
8
8%
 u}} u::4=!%t[II K*0055a8>>@@ 67I J J4(dKPP Y8>>sCCAFLLNN'=>W'X'X4#$UFD$
KPP- A &&s++A.4466=1-@@4UFD$
CC- A &&s++A.4466=1-@@4 UFD$EW
X
X%
 ;;==5::<<<4=	,Tq!VW3X3X	Y	Y$	//	+   	,,s	))))))s*   4Q =Q N?Q 
Q?Q:4Q?:Q?c                     t                               d           t          t          j                  \  } }| dv rt                               d           i S t                                          st                               d           i S t                                          \  }}||dk    rt                               d           i S t          |          }t           	                                 |S )zr
	Returns the CPU info gathered from dmesg.
	Returns {} if dmesg is not found or does not have the desired info.
	z$Tying to get info from the dmesg ...)r  zRunning on S390X. Skipping ...z"Failed to find dmesg. Skipping ...Nr   z&Failed to run "dmesg -a". Skipping ...)
r   r2   r  rd   r   rF   rr   r   r  r4   )r  r   r   rL   rR   s        r   _get_cpu_info_from_dmesgrY    s     	6777 *455tI	,,/000	) 	 	,,3444	) !((**V
NjAoo	,,9:::	)F##r   c                     t                               d           	 t                                          st                               d           i S t                                          \  } }|| dk    rt                               d           i S |                    d          d                                         }d |D             }d	                    |          }t          |dd
         d          }t          |d
d         d          }i dt          |d          dt          |d          dt          |d          dt          |d          dt          |d          dt          |d          dt          |d          dt          |d
          dt          |d          dt          |d          dt          |d          dt          |d           d!t          |d"          d#t          |d$          d%t          |d&          d't          |d          d(t          |d)          t          |d*          t          |d+          t          |d,          t          |d-          t          |d.          t          |d/          t          |d          t          |d
          t          |d          t          |d          t          |d          t          |d          d0}d1 |                                D             }|                                 d2|i}t          |          }t                                            |S # t          $ r&}t                               |           i cY d}~S d}~ww xY w)3z
	Returns the CPU info gathered from lsprop /proc/device-tree/cpus/*/ibm,pa-features
	Returns {} if lsprop is not found or ibm,pa-features does not have the desired info.
	z!Tying to get info from lsprop ...z#Failed to find lsprop. Skipping ...Nr   zEFailed to glob /proc/device-tree/cpus/*/ibm,pa-features. Skipping ...zibm,pa-featuresr'   c                 4    g | ]}|t          d           v |S )0123456789abcfed)r5  r	   ss     r   r   z6_get_cpu_info_from_ibm_pa_features.<locals>.<listcomp>  s+    
=
=
=qD);$<$<<<1<<<r   r6   rF  r  mmur^  slbr(   r1  rH   dabrrf   ner|  wtrrf  mcrdsisrr   lpr  rirj  dabrxrQ  sprg3rm  rislbro  r=  rP  vpmzdss_2.05rs  rw  ry  r{  r}  rG  r  )darpprzdss_2.02zdss_2.06lsd_in_dscrugr_in_dscrzsso_2.06lecfarebzlsq_2.07zdss_2.07c                     g | ]	\  }}||
S r   r   r  s      r   r   z6_get_cpu_info_from_ibm_pa_features.<locals>.<listcomp>-  r  r   rG  )r   r2   rd   r   rF   r   rB   r|   rA   rr  r  r7  rK  r  r4   rC   )r   rL   r  rU  rV  rG  rR   r\   s           r   "_get_cpu_info_from_ibm_pa_featuresrt    s    	3444t		'	'	)	) 
<<5666
9 "1133*f^zQ
<<WXXX
9 ,,(
)
)!
,
2
2
4
4%
=
=e
=
=
=%
''%..% 
U1q5\2		$
eAFmR
 
 %P;tQP 	;tQP 	;tQ	P
 	;tQP 
Ka  P +dA

P 	;tQP 	;tQP [q!!P +dB

P +dB

P  [r""!P" [r""#P$ [r""%P& +dB

'P, 	;tR  -P. D"%%/P2 tR  tR  D"%%D"%% tR((tR(( E1%% eQ

q!!
eR
 
 E2&& E2&&}P P P%f -
,
,
,
,%**,,, U
$ 
-T	2	2$	//	+   	,,s	))))))s*   4M	 ?M	 J7M	 	
M9M4.M94M9c                  t   t                               d           t                                          st                               d           i S t                                          \  } }|| dk    rt                               d           i S t          |          }t                                            |S )z
	Returns the CPU info gathered from /var/run/dmesg.boot.
	Returns {} if dmesg is not found or does not have the desired info.
	z6Tying to get info from the /var/run/dmesg.boot log ...z5Failed to find /var/run/dmesg.boot file. Skipping ...Nr   z5Failed to run "cat /var/run/dmesg.boot". Skipping ...)r   r2   rd   r~   rF   r   r  r4   )r   rL   rR   s      r   )_get_cpu_info_from_cat_var_run_dmesg_bootrv  ;  s     	HIII 	))++ 	,,FGGG	) !7799V
NjAoo	,,HIII	)F##r   c                     t                               d           	 t                                          st                               d           i S t                                          \  } }|| dk    rt                               d           i S t          d|ddd          }t          d|ddd	          }t          d|t          dd
          }t          d|t          dd          }t          d|t          dd          }t          d|t          dd          }t          d|ddd                                          	                                }|
                    t          d|ddd                                          	                                           |
                    t          d|ddd                                          	                                           |                                 t          |          \  }	}
t          d|ddd          }t          |          }||t          |	|
          t          |d          t          |	|
          t          |d          t          |          dz  ||||d}t!          |          }t                                            |S # t$          $ r&}t                               |           i cY d}~S d}~ww xY w)zR
	Returns the CPU info gathered from sysctl.
	Returns {} if sysctl is not found.
	z!Tying to get info from sysctl ...z#Failed to find sysctl. Skipping ...Nr   z@Failed to run "sysctl machdep.cpu hw.cpufrequency". Skipping ...Fzmachdep.cpu.vendorTzmachdep.cpu.brand_stringzmachdep.cpu.cache.sizezmachdep.cpu.steppingzmachdep.cpu.modelzmachdep.cpu.familyr6   zmachdep.cpu.featureszmachdep.cpu.leaf7_featureszmachdep.cpu.extfeaturesr   r  r   r;  r<  r=  r>  r   r@  rC  rD  rE  rG  )r   r2   rd   r   rF   r   r]  rr  r|   rB   extendrK  r  r   r  rw  r  r4   rC   )r   rL   r  r   rL  rC  rD  rE  rG  r>  rs  r   rR   r\   s                 r   _get_cpu_info_from_sysctlrz  S  s    	34445				 	  
<<5666
9 "DDFF*f^zQ
<<TUUU
9 d4HII)tVT49STT/%a1IJJ*vsA/EFF(
UFC,?
@
@%eVS!-ABB& UFD".D
E
E
K
K
M
M
S
S
U
U%,,z%r3OPPVVXX^^``aaa,,z%r3LMMSSUU[[]]^^^**,,, 1AA-d4EFF) ++) 2=%HH.y!<<%mU;;!)Q//
OOd*
 
$" 
-T	2	2$	//	+   	,,s	))))))s*   4J* ?J* HJ* *
K4KKKc                  d    t                      } |                     t                                 | S )T
	Returns the CPU info gathered from sysinfo.
	Returns {} if sysinfo is not found.
	)_get_cpu_info_from_sysinfo_v1update_get_cpu_info_from_sysinfo_v2)rR   s    r   _get_cpu_info_from_sysinfor    s-     	&''*,,---r   c                  V   t                               d           	 t                                          st                               d           i S t                                          \  } }|| dk    rt                               d           i S d}|                    d          d                             d	          d                                         }d}t          |                    d
          d                             d          d                                                   }t          |                    d          d                             d          d                                                   }t          |                    d          d                             d          d                                                   }g }|                    d          D ]g}	|		                    d          rP|	                                
                                                                D ]}
|                    |
           h|                                 t          |          \  }}|}||t          ||          t          ||          t          ||          t          ||          t!          |          ||||d}t#          |          }t                                            |S # t&          $ r&}t                               |           i cY d}~S d}~ww xY w)r|  z,Tying to get info from sysinfo version 1 ...$Failed to find sysinfo. Skipping ...Nr   *Failed to run "sysinfo -cpu". Skipping ...r6   	CPU #0: "r'   "
z, stepping r`  z, model z	, family r9   		rx  )r   r2   rd   r   rF   r   rB   r{   rr  r  r|   r   rK  r  r  rw  r  r  r4   rC   )r   rL   r  r   rL  rC  rD  rE  rG  r1   r  r>  rs  r   rR   r\   s                   r   r}  r}    s    	>???7				!	! 
<<6777
9 "--//*f^zQ
<<>???
9 )LL--a066u==a@FFHH/*m,,Q/55c::1=CCEEFF(
fll:&&q)//44Q7==??
@
@%v||K((+11#66q9??AABB& %ll4    d
oof 

""$$**,,  
\\$**,,, 1AA-) 2=%HH.y%@@%mU;;!)U33&z22
 
$" 
-T	2	2$	//	+   	,,s	))))))s*   4K8 ?K8 I&K8 8
L(L#L(#L(c                  ^   t                               d           	 t                                          st                               d           i S t                                          \  } }|| dk    rt                               d           i S d}|                    d          d                             d	          d                                         }d}|                    d
          d                             d          d                                         }t          |                    d          d                             d          d                                                   }t          |                    d          d                             d          d                                                   }t          |                    d          d                             d          d                                                   }d }	 |	|                    d          d                    |	|                    d          d                   z    |	|                    d          d                   z   }
|
	                                 d |                    d          D             }|d                             d          d                                         
                                }|                    d                              d                                          }t          |          }|}d}|                    d          rd}n|                    d          rd}||t          ||          t          ||          t          ||          t          ||          t!          |          ||||
d}t#          |          }t                                            |S # t&          $ r&}t                               |           i cY d}~S d}~ww xY w)r|  z,Tying to get info from sysinfo version 2 ...r  Nr   r  r6   r  r'   r  z
Signature:r9   z	stepping r`  zmodel zfamily c                 D   g }|                      d          dd          D ]}|                    d          s|                    d          s nR|                                                                                     d          D ]}|                    |           |S )Nr9   r'   z                r  r   )rB   r  r{   r|   r   )rL   r\  r1   r  s       r   get_subsection_flagsz;_get_cpu_info_from_sysinfo_v2.<locals>.get_subsection_flags  s    6||D!!!""%  t??-..Stt7L7LSee##%%++C00  ]]5
=r   z
Features: z Extended Features (0x00000001): z Extended Features (0x80000001): c                     g | ]}||S r   r   r   s     r   r   z1_get_cpu_info_from_sysinfo_v2.<locals>.<listcomp>	  s    
.
.
.A
.1
.
.
.r   zrunning at r{  rz  r|  r   rx  )r   r2   rd   r   rF   r   rB   r{   rr  rK  r|   rh  r   ri  r  rw  r  r  r4   rC   )r   rL   r  r   rL  	signaturerC  rD  rE  r  rG  r  raw_hzr>  r   rs  rR   r\   s                     r   r  r    s    	>???H				!	! 
<<6777
9 "--//*f^zQ
<<>???
9 )LL--a066u==a@FFHH/*ll<((+11$77:@@BB)--a066s;;A>DDFFGG(
iooh''*0055a8>>@@
A
A%yy))!,22377:@@BBCC&   
v||L99!<
=
=&HII!LMMN&HII!LMMN% **,,, /
.fll4((
.
.
.%8>>-((+113399;;&--&&--e44::<<-$]33-)
%__U 55u 5 2=%HH.y%@@%mU;;!)U33&z22
 
$" 
-T	2	2$	//	+   	,,s	))))))s*   4O< ?O< M*O< <
P,P'!P,'P,c                     t                               d           	 t          j        rt                                          st                               d           i S t                                          \  } }|| dk    rt                               d           i S |                    d          }d |D             }d |D             }|                    d	          }t          |          \  }}|                    d
          }d}|rt          |          }|                    d          }|rt          |          dz  }|                    d          }	|	rt          |	          dz  }	d\  }
}}|                    d          p|                    d          }|                    d          }d|v rV|                    d          t          |          dz
  k     r-|                    d          }t          ||dz                      }
d|v rV|                    d          t          |          dz
  k     r-|                    d          }t          ||dz                      }d|v rV|                    d          t          |          dz
  k     r-|                    d          }t          ||dz                      }|                    d          |t          ||          t          ||          t          ||          t          ||          ||	|||
d}t!          |          }t                                            |S # t$          $ r&}t                               |           i cY d}~S d}~ww xY w)zd
	Returns the CPU info gathered from WMI.
	Returns {} if not on Windows, or wmic is not installed.
	zTying to get info from wmic ...z4Failed to find WMIC, or not on Windows. Skipping ...Nr   z Failed to run wmic. Skipping ...r9   c                 d    g | ]-}d |v |                                                     d           .S r  )rh  rB   r]  s     r   r   z+_get_cpu_info_from_wmic.<locals>.<listcomp>D	  s3    
<
<
<Q3!88188::C  888r   c                     i | ]
\  }}|||S r   r   r  s      r   r4  z+_get_cpu_info_from_wmic.<locals>.<dictcomp>E	  s#    
'
'
'DAqQ
'1a
'
'
'r   NameCurrentClockSpeedr|  L2CacheSizer  L3CacheSize)r6   r6   r6   DescriptionCaptionr   Familyr'   rS  rT  Manufacturer)r   r;  r<  r=  r>  r   r@  rH  rC  rD  rE  )r   r2   rd   r   r   rF   r   rB   r   r  r   rr  rp  rp   r  rw  r  r4   rC   )r   rL   r  r   r>  scale_advertisedr   scale_actualr@  rH  rE  rD  rC  descriptionentriesrN  rR   r\   s                     r   _get_cpu_info_from_wmicr  0	  sr   
 	1222K		 j&9&9&;&; 
<<FGGG
9!**,,*f^zQ
<<2333
9 ,,t

%
<
<%
<
<
<%
'
'E
'
'
'% IIf%%/$;O$L$L!-! ii+,,), -!),,9 ))M**- -}%%,=))M**- -}%%,= '&%		-((@EIIi,@,@+c""'W]]844s7||A~EE}}X1A6GMM'22S\\!^CC}}W1wq1u~57w}}Z883w<<>II}}Z  1'!a%.!!8 YY~.. 3MCSTT/	<HH&}6FGG"9l;;""
 
$" 
-T	2	2$	//	+   	,,s	))))))s+   A M ?M J#M 
M1M,&M1,M1c                     t                               d           	 t          j        st                               d           i S t                                                                          } t                                          }t                                          }t          |          \  }}t          
                                }t          |          }t          |           \  }}|dk    rd}t          |          }t                                          fd}i d |d          d |d	          d
 |d          d |d          d |d          d |d          d |d          d |d          d |d          d |d          d |d          d |d          d |d          d |d           d! |d"          d# |d$          d% |d&           |d'           |d(           |d)           |d*           |d+           |d,           |d-           |d.           |d/           |d0           |d1           |d2           |d3          d4}	d5 |	                                D             }	|	                                 || t!          ||          t!          |d          t#          ||          t#          |d          |	d6}
t%          |
          }
t                                            |
S # t(          $ r&}t                               |           i cY d7}~S d7}~ww xY w)8z[
	Returns the CPU info gathered from the Windows Registry.
	Returns {} if not on Windows.
	z+Tying to get info from Windows registry ...z$Not running on Windows. Skipping ...rf  r|  c                 $    d| z	  }|z  dk    }|S )Nl        r   r   )r  r  r\  r   s      r   r  z+_get_cpu_info_from_registry.<locals>.is_set	  s!    

4<!#6
=r   r^  r   r_  r'   r`  r(   ra  rH   rb  r  rc  rf   rd  re  rf  rg  rF  rh  r   sepamdr  ri  rj  rk  rQ  rl  rm  rn  ro  rp  rP  rq  r  rs  ru  rw  ry  r{  r}  rG  r  r  r  r  r  r  )rr  serialrv  rx  rz  r|  r~  r  r  r  r  r  r  c                     g | ]	\  }}||
S r   r   r  s      r   r   z/_get_cpu_info_from_registry.<locals>.<listcomp>	  r  r   )r   r;  r<  r=  r>  r   rG  N)r   r2   rd   r   rF   r   r{   r   r   r  r   r   r  r   r7  rK  r  rw  r  r4   rC   )r   r  r   r  r   r   r>  rs  r  rG  rR   r\   r   s               @r   _get_cpu_info_from_registryr  	  s    	=>>>_		 
<<6777
9 5577==??/ --//) 5577/?++*$ ))++) ++) 1AA- e5%i00= //11,    !66!99!66!99! &&))! 	66!99	!
 	66!99! 	66!99! 	66!99! 	66!99! 	66!99! 
FF1II! ffRjj! 	66"::! 
FF2JJ! 	66"::! 	66"::!  
FF2JJ!!" 	66"::#!$ VBZZfRjjvbzz6"::F2JJ6"::F2JJ6"::F2JJ
&**
&**F2JJVBZZA! ! !%H -
,
,
,
,%**,,, 2=%HH.y!<<%mU;;!)Q//

 

$ 
-T	2	2$	//	+   	,,s	))))))s$   'L KL 
ML?9M?Mc                  h   t                               d           	 t                                          rt                                          st                               d           i S t                                          \  } }|| dk    rt                               d           i S t                                          \  } }|| dk    rt                               d           i S |                    d          d                             d	          d         	                                }|                    d
          d                             d	          d         	                                }t          |                    d          d                             d	          d         	                                          }t          |                    d          d                             d	          d         	                                          }t          |                    d          d                             d	          d         	                                          }|	                                                    d	          d         	                                                                                                }|                                 d}	|                    d          d                             d	          d         	                                }
t          |
          }
|                    d          d                             d	          d         	                                }t          |          }||t          |
|	          t          |d          t          |
|	          t          |d          ||||d
}t!          |          }t                                            |S # t$          $ r&}t                               |           i cY d}~S d}~ww xY w)zh
	Returns the CPU info gathered from isainfo and kstat.
	Returns {} if isainfo or kstat are not found.
	z Tying to get info from kstat ...z,Failed to find isinfo or kstat. Skipping ...Nr   z)Failed to run "isainfo -vb". Skipping ...z/Failed to run "kstat -m cpu_info". Skipping ...z	vendor_id r'   r9   z	brand z
	stepping z	model z	family r  r|  z	clock_MHz z	current_clock_Hz )
r   r;  r<  r=  r>  r   rC  rD  rE  rG  )r   r2   rd   r   r   rF   r   r   rB   r{   rr  r|   rK  r   r  rw  r  r4   rC   )r   flag_outputr   r  r   rC  rD  rE  rG  rs  r>  r   rR   r\   s                 r   _get_cpu_info_from_kstatr  	  s    	2333:				!	! )=)=)?)? 
<<>???
9 '1133*kJ!OO
<<=>>>
9 !1133*e
]jAoo
<<CDDD
9 kk.))!,22488;AACC)KK
++A.44T::1=CCEE/]++A.44T::1=CCEEFF(
ekk*%%a(..t44Q7==??
@
@%u{{;''*0066q9??AABB& 




#
#D
)
)"
-
3
3
5
5
;
;
=
=
C
C
E
E%**,,, %++n--a066t<<Q?EEGG-$]33- kk/00399$??BHHJJ) ++) 2=%HH.y!<<%mU;;!)Q//
 
$ 
-T	2	2$	//	+   	,,s	))))))s1   AP *?P *?P *LP 
P1P,&P1,P1c                     t                               d           	 t          j                            d          d         } d\  }}}|                     d          }d|v rV|                    d          t          |          dz
  k     r-|                    d          }t          ||dz                      }d|v rV|                    d          t          |          dz
  k     r-|                    d          }t          ||dz                      }d	|v rV|                    d	          t          |          dz
  k     r-|                    d	          }t          ||dz                      }|||d
}t          |          }t           	                                 |S # t          $ r&}t                               |           i cY d }~S d }~ww xY w)Nz)Tying to get info from platform.uname ...r`  r   )NNNr   r  r'   rS  rT  )rE  rD  rC  )r   r2   rd   r   rB   rp  rp   rr  r  r4   rC   rF   )r}   rE  rD  rC  r  rN  rR   r\   s           r   !_get_cpu_info_from_platform_unamer  1
  s   ;<<<

%
+
+C
0
0
3%.&%KK'W]]844s7||A~EE}}X1A6GMM'22S\\!^CC}}W1wq1u~57w}}Z883w<<>II}}Z  1'!a%.!!8 
 
$
 
-T	2	2$	//	+   	,,s	))))))s   E=F 
G
$G?G
G
c                     t                               d           t          t          j                  \  } }ddd                    t          j                  pd} dj        t          j	         }d                    ||          }|t          t          | |t          j        t          j        d}t                               d	                    |d
                              t                               d                    |d                              t                               d                    |d                              t                               d                    |d                              t                               d                    |d                              t                               d                    |d                              t          |t                                 t          |t                                 t          |t!                                 t          |t#                                 t          |t%                                 t          |t'                                 t          |t)                                 t          |t+                                 t          |t-                                 t          |t/                                 t          |t1                                 t          |t3                                 t          |t5                                 t                               d           |S )zo
	Returns the CPU info by using the best sources of information for your OS.
	Returns {} if nothing is found.
	zP!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!z32 bitz64 bit)il    zunknown bitsz{0}.{1}.{2}.{3}.{4}z	{0} ({1}))python_versioncpuinfo_versioncpuinfo_version_stringr  r   r?  r   zpython_version: {0}r  zcpuinfo_version: {0}r  z	arch: {0}r  z	bits: {0}r   z
count: {0}r?  zarch_string_raw: {0}r   )r   r+   r  rd   r   r   r(  maxsizer   version_infoCPUINFO_VERSIONCPUINFO_VERSION_STRINGr   rM  r  r  rO  rQ  rW  rz  r  rY  rv  rt  r  r>  r  )r  r   friendly_maxsizefriendly_versionPYTHON_VERSIONrR   s         r   _get_cpu_info_internalr  S
  s    	x *455t'(<<@@MM_Q_0)0#2BC$$%57GHH $%3  0	 	 	$++D1A,BCCDDD%,,T2C-DEEFFF{!!$v,//000{!!$v,//000|""4=11222%,,T2C-DEEFFF $/11222 $355666 $799::: $799::: $022333 $133444 $022333 $022333 $ACCDDD $:<<=== $244555 $022333 $9;;<<<xr   c                     ddl } d}t          t          dd          r9t                      }|                     |          }d                    |          }nhddlm}m} t          j	        t          dg} |||||          }|                                d         }|j        dk    rd	S |                    d
          }|S )zs
	Returns the CPU info by using the best sources of information for your OS.
	Returns the result in a json string
	r   NfrozenFr_  r   --jsonr   z{}r   r   )jsongetattrr(  r  r!  r   r   r   r   
executable__file__r   r   r   )r  rL   rR   r   r   r   r   s          r   get_cpu_info_jsonr  
  s     
 C5!! +		!	!$::d&<<&&
 %$$$$$$$^Xx0'uWT$d;;;">>A&]a
$=='=**&r   c                  b    ddl } t                      }|                     |t                    }|S )zl
	Returns the CPU info by using the best sources of information for your OS.
	Returns the result in a dict
	r   N)object_hook)r  r  r,  r1  )r  rL   s     r   get_cpu_infor  
  s4     


 **V;*
7
7r   c            
      D   ddl m}  dd l} | d          }|                    ddd           |                    d	dd
           |                    ddd           |                                }t          |j        d          a	 t                       nZ# t          $ rM}t          j                            t          |          dz              t          j        d           Y d }~nd }~ww xY wt                      }|s3t          j                            d           t          j        d           |j        r$t!          |                    |                     d S |j        rt!          t&                     d S t!          d                    |                    dd                               t!          d                    |                    dd                               t!          d                    |                    dd                               t!          d                    |                    dd                               t!          d                    |                    dd                               t!          d                    |                    dd                               t!          d                    |                    dd                               t!          d                     |                    d!d                               t!          d"                    |                    d#d                               t!          d$                    |                    d%d                               t!          d&                    |                    d'd                               t!          d(                    |                    d)d                               t!          d*                    |                    d+d                               t!          d,                    |                    d-d                               t!          d.                    |                    d/d                               t!          d0                    |                    d1d                               t!          d2                    |                    d3d                               t!          d4                    |                    d5d                               t!          d6                    |                    d7d                               t!          d8                    |                    d9d                               t!          d:                    |                    d;d                               t!          d<                    |                    d=d                               t!          d>                    |                    d?d                               t!          d@                    dA                    |                    dBd                                         d S )CNr   )ArgumentParserzGets CPU info with pure Python)r  r  
store_truezReturn the info in JSON format)actionhelpz	--versionz Return the version of py-cpuinfoz--tracez/Traces code paths used to find CPU info to fileFr9   r'   zFailed to find cpu info
zPython Version: {0}r  r6   zCpuinfo Version: {0}r  zVendor ID Raw: {0}r   zHardware Raw: {0}r:  zBrand Raw: {0}r;  zHz Advertised Friendly: {0}r<  zHz Actual Friendly: {0}r=  zHz Advertised: {0}r>  zHz Actual: {0}r   z	Arch: {0}r  z	Bits: {0}r   z
Count: {0}r?  zArch String Raw: {0}r   zL1 Data Cache Size: {0}rI  zL1 Instruction Cache Size: {0}rJ  zL2 Cache Size: {0}r@  zL2 Cache Line Size: {0}rA  zL2 Cache Associativity: {0}rB  zL3 Cache Size: {0}rH  zStepping: {0}rC  z
Model: {0}rD  zFamily: {0}rE  zProcessor Type: {0}rF  z
Flags: {0}z, rG  )argparser  r  add_argument
parse_argsr   r  r   r  rC   r(  r[   r+   r   exitr  printr!  versionr  r   r   rA   )r  r  parserr5  r\   rR   s         r   mainr  
  s   $$$$$$ .%E
F
F
FXl9YZZZ[<^___Y|:klll U##----   *3s88d?###(1++++++++ 	   *.///(1+++I ?

4
l ?$$TXX.>%C%CDDEEE%%dhh/G&L&LMMNNN##DHH_b$A$ABBCCC""488NB#?#?@@AAAb 9 9::;;;%,,TXX6NPR-S-STTUUU!((2F)K)KLLMMM##DHH_b$A$ABBCCCb 9 9::;;;488FB//00111488FB//00111DHHWb1122333%%dhh/@"&E&EFFGGG!((2F)K)KLLMMM(//9TVX0Y0YZZ[[[##DHH_b$A$ABBCCC!((2F)K)KLLMMM%,,TXX6NPR-S-STTUUU##DHH_b$A$ABBCCCtxx
B7788999DHHWb1122333TXXh3344555$$TXX.>%C%CDDEEEDIIdhhw&;&;<<==>>>>>s   	B 
C/"AC**C/__main__FrY  )<r  rA   r  ri   r(  ry   r   r  r7  r   objectr   rd   rq   r   r   r  r(  r-  r1  rM  rW  r]  r   rw  r  r  r  r  r  r  r  r  r  r  r  r  r7  r*  r0  r>  rO  rQ  rW  rY  rt  rv  rz  r  r}  r  r  r  r  r  r  r  r  r  r`   r   r   r   <module>r     sS  8 "C"C?"C"C"CDD          $ 
y y y y yF y y yvH H H H H H H HV  % % % %4  $= = =
 
 
	 	 	    ,  "     <  &  ,     D  (  <  ,2E 2E 2Eh] ] ]~7 7 7r  "C "C "CH CE    >U U U U U& U U UpL L L L LF L L L\I# I# I#V	  	  	 b b bH^ ^ ^@- - -^_ _ _B  @| | |~  0= = =@  ? ? ?BP P PdR R Rhg g gRB B BH     DJ J JX  @  6? 6? 6?r z5r   