+
    ߢ2jZ                       a  RR tP0 t R t^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
HtHtHtHtHtHtHtHt ^RIHt ^RIHtHtHt ^RIHtHt RtRtRtR	tR
t ]PB                  ! ]"4      t#/ t$] ^ k Rt%Rt&Rt'Rt(Rt)R R lt*RSR R llt+]*! RR7      R R l4       t, ! R R4      t-]*! RR7      R 4       t.R t/]P`                  ! RR7      R R l4       t1R ]%R!]&/t2]P`                  ! RR7      R" R# l4       t3]*! R$R7      R% R& l4       t4R' R( lt5R) R* lt6R+ t7R, R- lt8R. R/ lt9R0 R1 lt:R2 R3 lt;]P`                  ! RR7      R4 R5 l4       t<R6 R7 lt=]=! ]'](3R87      R9 4       t>]=! ]%R87      R: 4       t?]=! ]&R87      R; 4       t@]=! ])R87      R< 4       tAR= R> ltBR?tCR@tDRAtERBtFRCtGRDtHREtIRF RG ltJRH RI ltKRJ RK ltLRL RM ltMRN RO ltNRP RQ ltOR# )Tz#Detection of CPU microarchitecturesN)AnyCallableDictListOptionalSetTupleUnion)CPUID)TARGETSMicroarchitecturegeneric_microarchitecture)
CPUID_JSONTARGETS_JSONzmachdep.cpu.brand_stringzmachdep.cpu.vendorzmachdep.cpu.featureszmachdep.cpu.leaf7_featureszmachdep.cpu.extfeaturesx86_64aarch64ppc64leppc64riscv64c                $    V ^8  d   QhR\         /# )   operating_systemstr)formats   "3lib/python3.14/site-packages/archspec/cpu/detect.py__annotate__r   -   s           c                   a  V 3R lpV# )zDecorator to mark functions that are meant to return partial information on the current cpu.

Args:
    operating_system: operating system where this function can be used.
c                 @   < \         S,          P                  V 4       V # N)INFO_FACTORYappend)factoryr   s   &r   	decoratordetection.<locals>.decorator4   s    %&--g6r    )r   r$   s   f r   	detectionr'   -   s     r   c                    V ^8  d   QhR\         R\         R\        \        \         ,          ,          R\        R\         R\        /# )r   namevendorfeatures
generationcpu_partreturn)r   r   r   intr   )r   s   "r   r   r   ;   sM      
 s3x  	
  r   c           
     J    \        T . TT;'       g    \        4       / VVR7      # )zTConstruct a partial microarchitecture, from information gathered during system scan.)r)   parentsr*   r+   	compilersr,   r-   )r   set)r)   r*   r+   r,   r-   s   &&&&&r   partial_uarchr4   ;   s0     ""SU r   Linux)r   c                $    V ^8  d   QhR\         /# r   r.   r   )r   s   "r   r   r   O   s     53 53' 53r   c                     / p \        R4      ;_uu_ 4       pV FH  pVP                  R4      w  r4pVR8w  d   V '       d    M$VP                  4       WP                  4       &   KJ  	  RRR4       \        4       pV\        8X  d)   \        V P                  RR4      \        V RR7      R7      # V\        8X  d3   \        \        V 4      \        V R	R7      V P                  R
R4      R7      # V\        \        39   d_   \        P                  ! RV P                  RR4      4      pVf   \        ^ R7      #  \        VP                  ^4      4      p\        VR7      # V\"        8X  dn   V P                  R4      R8X  d   RV R&   M1V P                  R4      R8X  g   V P                  R4      R8X  d   RV R&   \        V P                  R\"        4      R7      # \%        V4      #   + '       g   i     EL}; i  \          d    ^ p Li ; i)zMReturns a partial Microarchitecture, obtained from scanning ``/proc/cpuinfo``z/proc/cpuinfo:N	vendor_idgenericflagskeyr*   r+   FeatureszCPU part )r*   r+   r-   z
POWER(\d+)cpu)r,   uarchzsifive,u74-mcu74mczspacemit,x60z
model namezSpacemit(R) X60x60r)   )open	partitionstrip_machineX86_64r4   get_feature_setAARCH64_canonicalize_aarch64_vendorPPC64LEPPC64researchr/   group
ValueErrorRISCV64r   )	datafileliner?   	separatorvaluearchitecturegeneration_matchr,   s	            r   proc_cpuinfor_   N   s    D	o		$D$(NN3$7!CE CD %D  
  :Lv88K3l4U\>]
 	
 w/5!$J7XXj"-
 	
 ''99]DHHUB4GH # A..	-33A67J 
33w88G/#DMXXg.0DHH\4JN_4_!DM$((7G"<==$\22e 
		N  	J	s"   (G&G0G- G*	-G=<G=c                   T   a  ] tR t^t o RtR tR tV 3R lR ltV 3R lR ltRt	V t
R	# )
CpuidInfoCollectorz;Collects the information we need on the host CPU from cpuidc                   \        4       V n        V P                  P                  ! R/ \        R ,          R,          B pVP                  V n        \        P                  ! RVP                  VP                  VP                  4      P                  R4      V n        V P                  P                  ! R/ \        R,          R,          B pVP                  V n        V P                  4       V n        R# )r*   inputIIIutf-8highest_extension_supportNr&   )r
   cpuidregisters_forr   eaxhighest_basic_supportstructpackebxedxecxdecoder*   rf   	_featuresr+   )self	registerss   & r   __init__CpuidInfoCollector.__init__   s    W
JJ,,Mz(/CG/LM	%.]]"kk%	y}}U\\
 JJ,,`z:U/VW^/_`	)2&(r   c                   a a \        4       oVV 3R  lp\        R,           F,  pVR,          R,          S P                  8  d   K$  V! V4       K.  	  \        R,           F,  pVR,          R,          S P                  8  d   K$  V! V4       K.  	  S# )c                   < SP                   P                  ! R/ V R ,          B pV R,           FM  p\        WR,          4      pSP                  W2R,          4      '       g   K5  SP	                  VR,          4       KO  	  R# )rc   bitsregisterbitr)   Nr&   )rg   rh   getattr_is_bit_setadd)rX   rs   feature_checkcurrentresultrr   s   &   r   check_features4CpuidInfoCollector._features.<locals>.check_features   sd    

00A4=AI!%f!):-FG##G5-ABBJJ}V45 ".r   r=   rc   ri   zextension-flags)r3   r   rj   rf   )rr   r   	call_datar   s   f  @r   rq   CpuidInfoCollector._features   s    	6 $G,,I!%(4+E+EE9% -
 $$566I!%(4+I+II9% 7
 r   c                ,   < V ^8  d   QhRS[ RS[ RS[/# )r   ry   rz   r.   )r/   bool)r   __classdict__s   "r   r   CpuidInfoCollector.__annotate__   s"     # #C #c #d #r   c                *    ^V,          pW,          ^ 8  # )   r&   )rr   ry   rz   masks   &&& r   r|   CpuidInfoCollector._is_bit_set   s    Cx""r   c                0   < V ^8  d   QhRS[ S[,          /# r7   r   r   )r   r   s   "r   r   r      s     $ $hsm $r   c                J   V P                   R8  d   R# V P                  P                  R^ R7      pV P                  P                  R^ R7      pV P                  P                  R^ R7      p\        P                  ! RVP
                  VP                  VP                  VP                  VP
                  VP                  VP                  VP                  VP
                  VP                  VP                  VP                  4      P                  R4      pVP                  R4      # )	z'Returns the brand string, if available.l       Nl       )ri   ro   l       IIIIIIIIIIIIre    )rf   rg   rh   rk   rl   ri   rm   ro   rn   rp   rJ   )rr   r1r2r3r   s   &    r   brand_stringCpuidInfoCollector.brand_string   s    ))J6ZZ%%*!%<ZZ%%*!%<ZZ%%*!%<FFFFFFFFFFFFFFFFFFFFFFFF
 &/ 	 ||F##r   )rg   r+   rj   rf   r*   N)__name__
__module____qualname____firstlineno____doc__rt   rq   r|   r   __static_attributes____classdictcell__)r   s   @r   ra   ra      s&     E),# #$ $r   ra   Windowsc                     \        4       p V \        8X  d,   \        4       p\        VP                  VP
                  R7      # \        V 4      # )zPReturns a partial Microarchitecture, obtained from running the cpuid instructionr@   )rK   rL   ra   r4   r*   r+   r   )r]   rX   s     r   
cpuid_infor      s;     :Lv!#DKK$--HH$\22r   c                     \         P                  ! V \         P                  VR 7      ;_uu_ 4       pVP                  4       ^ ,          pRRR4       \	        XP                  R4      4      #   + '       g   i     L*; i))stdoutenvNre   )
subprocessPopenPIPEcommunicater   rp   )argsr   procoutputs   &&  r   _check_outputr      sT    			$zC	@	@D!!#A& 
Av}}W%&& 
A	@s   A**A:	)maxsizec                F    V ^8  d   QhR\         \        \        3,          /# r7   r   r   )r   s   "r   r   r      s      T#s(^ r   c            	        \        RR\        \        \        \        \
        .\        4       R7      p / pV P                  4        FA  pVP                  R4      w  r4pV'       g   K!  VP                  4       WP                  4       &   KC  	  V# )zReturns a dict of sysctl key/value pairs relevant for CPU detection on Darwin.

The ``-i`` flag silently ignores keys that do not exist (e.g. Intel keys on Apple Silicon).
sysctlz-i)r   z: )
r   MACHDEP_CPU_BRAND_STRINGMACHDEP_CPU_VENDORMACHDEP_CPU_FEATURESMACHDEP_CPU_LEAF7_FEATURESMACHDEP_CPU_EXTFEATURES_ensure_bin_usrbin_in_path
splitlinesrI   rJ   )rawrX   rZ   r?   sepr\   s         r   _darwin_sysctl_datar      sz     $ &#	
 '(C D ...%3 %D ! Kr   AMD64ARM64c                $    V ^8  d   QhR\         /# r7   r   )r   s   "r   r   r      s      # r   c                 (   \         P                  ! 4       p V R9  d   \         P                  ! 4       # V R8X  d+   \         P                  ! 4       p\        P	                  W4      # \        4       P	                  \        R4      pRV9   d   \        # \        # )z)Return the machine architecture we are onr   rB   Apple)Darwinr   )	platformsystemmachineWINDOWS_MAPPINGrM   r   r   rO   rL   )r   platform_machinebrands      r   rK   rK      s      ( 44!! 9$#++-""#3FF  !%%&>CE% Mr   r   c                $    V ^8  d   QhR\         /# r7   r8   )r   s   "r   r   r     s     $ $& $r   c                 |    \        4       p V P                  \        R4      pRV9  d   \        V 4      # \	        V 4      # )z;Returns a raw info dictionary parsing the output of sysctl.rB   r   )r   rM   r   _sysctl_info_x86_64_sysctl_info_apple)rX   	cpu_brands     r   sysctl_infor     s;      D126Ii"4((d##r   c                R    V ^8  d   QhR\         \        \        3,          R\        /# r   rX   r.   r   r   r   )r   s   "r   r   r   '  s'     U Ud38n U1B Ur   c                  a RP                  V P                  \        R4      V P                  \        R4      V P                  \        R4      .4      p\        VP                  4       P                  4       4      o\        R,          R,          P                  4        F  w  r#\        ;QJ d-    V3R lVP                  4        4       F  '       d   K   RM"	  RM! V3R lVP                  4        4       4      '       g   Kc  SP                  VP                  4       4       K  	  \        V P                  \        R4      SR7      # )	z9Returns a partial Microarchitecture for x86_64 on Darwin. rB   conversionsdarwin_flagsc              3   ,   <"   T F	  qS9   x  K  	  R # 5ir    r&   ).0xr+   s   & r   	<genexpr>&_sysctl_info_x86_64.<locals>.<genexpr>4  s     ;&:H}&:s   FTr@   )joinrM   r   r   r   r3   lowersplitr   itemsallupdater4   r   )rX   raw_featuresr   linux_flagsr+   s   &   @r   r   r   '  s    88HH)2.HH/4HH,b1	
L <%%'--/0H &2-%@%P%V%V%X!3;l&8&8&:;333;l&8&8&:;;;OOK--/0 &Y );R @8TTr   c                R    V ^8  d   QhR\         \        \        3,          R\        /# r   r   )r   s   "r   r   r   :  s#     5 5T#s(^ 50A 5r   c                2   V P                  \        R4      pVP                  4       pRp\        P                  ! RV4      pVe@   \        \        VP                  ^4      4      ^ R	4       F  pRV 2pV\        9   g   K   M	  M	VR8X  d   Rp\        VRR7      # )
z6Returns a partial Microarchitecture for Apple Silicon.rB   r   zapple\s+m(\d+)mzapple processorm1r   )r)   r*   )
rM   r   r   rS   rT   ranger/   rU   r   r4   )rX   r   	model_strmodelmatchmnums   &     r   r   r   :  s    126I!I E II'3E#ekk!n-q"5DvJE 6 
'	'eG44r   c                  :   \        \        P                  P                  4       4      p V P	                  R R4      P                  \        P                  4      pR F  pW!9  g   K  VP                  V4       K  	  \        P                  P                  V4      V R &   V # )PATHrB   )z/sbinz	/usr/sbin)	dictosenvironr   rM   r   pathsepr"   r   )child_environmentsearch_pathsadditional_paths      r   r   r   Q  sy    RZZ--/0$((4::2::FL1.0 2 !#

 =fr   c                R    V ^8  d   QhR\         \        \        3,          R\        /# r   r   )r   s   "r   r   r   \  s"     / /tCH~ /# /r   c                p    RV 9  d   R# \         R,          R,          pV R,          pVP                  W"4      # )z1Adjust the vendor field to make it human-readablezCPU implementerr<   r   arm_vendors)r   rM   )rX   r   arm_codes   &  r   rP   rP   \  s8    $ }-m<K%&H??8..r   c                t    V ^8  d   QhR\         \        \        3,          R\        R\        \        ,          /# )r   rX   r?   r.   )r   r   r   )r   s   "r   r   r   m  s-     * *tCH~ *C *CH *r   c                 T    \        V P                  VR 4      P                  4       4      # )rB   )r3   rM   r   )rX   r?   s   &&r   rN   rN   m  s!    txxR &&())r   c                $    V ^8  d   QhR\         /# r7   r8   )r   s   "r   r   r   q  s     1 1( 1r   c                     \         \        P                  ! 4       ,           F  p  V ! 4       u # 	  \        \        4       4      #   \         d+   p\        P
                  ! \        T4      4        Rp?KR  Rp?ii ; i)a%  Returns a partial Microarchitecture with information on the CPU of the current host.

This function calls all the viable factories one after the other until there's one that is
able to produce the requested information. Falls-back to a generic microarchitecture, if none
of the calls succeed.
N)	r!   r   r   	Exceptionwarningswarnr   r   rK   )r#   excs     r   detected_infor   q  s^       122	$9 3 %XZ00  	$MM#c(##	$s   AA8A33A8c                F    V ^8  d   QhR\         R\        \         ,          /# )r   infor.   )r   r   )r   s   "r   r   r     s!     	 	(9 	dCT>U 	r   c                    \        4       p\        P                  VR 4      p\        P                  ! 4        Uu. uF  q2! W4      '       g   K  VNK  	  up;'       g    \        V4      .# u upi )zReturns an unordered list of known micro-architectures that are compatible with the
partial Microarchitecture passed as input.
c                     R # )Fr&   )r   ys   &&r   <lambda>/compatible_microarchitectures.<locals>.<lambda>  s    r   )rK   COMPATIBILITY_CHECKSrM   r   valuesr   )r  architecture_familytesterr   s   &   r   compatible_microarchitecturesr    sd     #*!%%&9;MNF~~';'!6$?AA';  !"56@ ;s   A*A*c                $    V ^8  d   QhR\         /# r7   r8   )r   s   "r   r   r     s     + + +r   c                   a \        4       o\        S4      p R pV  Uu. uF  q"P                  R8X  g   K  VNK  	  pp\        W1R7      pSP                  R8w  do   \
        ;QJ d    V3R lV  4       F  '       g   K   RM	  RM! V3R lV  4       4      '       d/   V  Uu. uF"  pSP                  VP                  8X  g   K   VNK$  	  p pV  Uu. uF  q"V8  g   K  VNK  	  p pV '       g   V# \        WR7      # u upi u upi u upi )z3Detects the host micro-architecture and returns it.c                 V    \        V P                  4      \        V P                  4      3# r    )len	ancestorsr+   )items   &r   
sorting_fnhost.<locals>.sorting_fn  s    4>>"C$666r   r<   r>   rB   c              3   b   <"   T F$  pSP                   VP                   8X  g   K   Vx  K&  	  R # 5ir    )r-   )r   cr  s   & r   r   host.<locals>.<genexpr>  s"     "XjDMMQZZ<W11js   /
/TF)r   r  r*   maxr-   any)
candidatesr  r  generic_candidatesbest_genericr  s        @r   hostr    s     ?D /t4J7 &0IZ88y3H!!ZI):L }}ss"Xj"Xsss"Xj"XXX!+KAt}}

/Jaa
K
 (<Z|+;!!ZJ<  z**% J
 L
 =s"   C7C7C< C<DDc                `    V ^8  d   QhR\         \        \        \        R3,          3,          /# )r   r
  .)r	   r   r   )r   s   "r   r   r     s%      U3c3h3G-H r   c                F   a  \        S \        4      '       d   S 3o V 3R lpV# )a  Decorator to register a function as a proper compatibility check.

A compatibility check function takes a partial Microarchitecture object as a first argument,
and an arbitrary target Microarchitecture as the second argument. It returns True if the
target is compatible with the first argument, False otherwise.

Args:
    architecture_family: architecture family for which this test can be used
c                 \   < \         P                  S Uu/ uF  qV bK  	  up4       V # u upi r    )r  r   )funcfamilyr
  s   & r   r$   &compatibility_check.<locals>.decorator  s0    ##@S$T@SfT\@S$TU %Us   ))
isinstancer   )r
  r$   s   f r   compatibility_checkr%    s)     %s++24 r   )r
  c                    \         \        4       ,          pW8H  ;'       g    W!P                  9   ;'       d    VP                  V P                  8*  # )z8Compatibility check for PPC64 and PPC64LE architectures.)r   rK   r  r,   r  target	arch_roots   && r   compatibility_check_for_powerr*    sH    
 
#I<<y,<,<</ /


t
./r   c                    \         \        ,          pW8H  ;'       g    W!P                  9   ;'       dI    VP                  V P                  R39   ;'       d&    VP                  P                  V P                  4      # )z-Compatibility check for x86_64 architectures.r<   )r   rL   r  r*   r+   issubsetr'  s   && r   compatibility_check_for_x86_64r-    sh    
 I			=	=	-=-= = 	4 	4MMdkk955	4 	4OO$$T]]3r   c                   VP                   R8X  d   VP                  \        8w  d   R# \        \        ,          pW!P                  8H  ;'       d    VP                   V P                   R39   p\
        P                  ! 4       R8X  d<   \        V P                  ,          pT;'       d    W8H  ;'       g    WP                  9   # T;'       d&    VP                  P                  V P                  4      # )z.Compatibility check for AARCH64 architectures.r<   Fr   )
r*   r)   rO   r   r"  r   r   r  r+   r,  )r  r(  r)  arch_root_and_vendorr   s   &&   r   compatibility_check_for_aarch64r0    s    
 }}	!fkkW&< I$5  &--L ; H$		"#VV)U)UFoo<UVKKFOO$<$<T]]$KKr   c                    \         \        ,          pW8H  ;'       g    W!P                  9   ;'       d1    VP                  V P                  8H  ;'       g    VP                  R8H  # )z.Compatibility check for riscv64 architectures.r<   )r   rW   r  r)   r*   r'  s   && r   compatibility_check_for_riscv64r2    sU      I@@90@0@#@  tyy >>FMMY$>r   c                :    V ^8  d   QhR\         \        ,          /# r7   r   )r   s   "r   r   r     s      hsm r   c                     \         P                  ! 4       R8X  d)   \        4       P                  \        R4      ;'       g    R# \        4       P                  \        8X  d   \        4       P                  4       # R# )z;Returns the brand string of the host, if detected, or None.r   rB   N)
r   r   r   rM   r   r  r"  rL   ra   r   r&   r   r   r   r     sS    H$"$(()A2FNN$Nv}}!#0022r   z0"{name}" is not a known microarchitecture targetz-{name} is the detected host microarchitecturezP{name} is an ancestor of the detected host; {host} was selected as more specificzX{name} belongs to the {target_family} architecture family, but the host is {host_family}z>{name} requires features not available on the host: {features}zO{name} targets vendor {target_vendor}, but the host CPU vendor is {host_vendor}zH{name} is not compatible with the detected host microarchitecture {host}c                H    V ^8  d   QhR\         R\         R\         R\        /# r   r(  r  current_hostr.   r   r   )r   s   "r   r   r     s2     R RR(9RIZRRr   c                   V P                   VP                   R 39  d7   \        P                  V P                  V P                   VP                   R7      # V P                  VP                  ,
          pV'       d:   \
        P                  V P                  RP                  \        V4      4      R7      # \        P                  V P                  \        V4      R7      # )r<   r)   target_vendorhost_vendor, r)   r+   r)   r  )
r*   _WHY_NOT_VENDOR_MISMATCHr   r)   r+   _WHY_NOT_MISSING_FEATURESr   sorted_WHY_NOT_INCOMPATIBLEr   r(  r  r7  missings   &$$ r   _why_not_x86_64rF    s     }}T[[)44'.. -- / 
 	

 oo-G(//YYvg/ 0 
 	
 !''V[[s<?P'QQr   c                H    V ^8  d   QhR\         R\         R\         R\        /# r6  r8  )r   s   "r   r   r   ,  2     R RR(9RIZRRr   c                    V P                   VP                   8  d)   V P                   R V P                    RVP                    2# \        P                  V P                  \	        V4      R7      # )z requires POWER generation z, but the host is generation r?  )r,   r)   rC  r   r   r(  r  r7  s   &$$r   _why_not_powerrK  ,  sh     4??*{{m6v7H7H6I J**.//):<	
 !''V[[s<?P'QQr   c                H    V ^8  d   QhR\         R\         R\         R\        /# r6  r8  )r   s   "r   r   r   7  s2     R RR(9RIZRRr   c                   V P                   VP                   R 39  d7   \        P                  V P                  V P                   VP                   R7      # \        P
                  ! 4       R8w  d_   V P                  VP                  ,
          pV'       d:   \        P                  V P                  RP                  \        V4      4      R7      # \        P                  V P                  \        V4      R7      # )r<   r:  r   r=  r>  r?  )r*   r@  r   r)   r   r   r+   rA  r   rB  rC  r   rD  s   &$$ r   _why_not_aarch64rN  7  s     }}T[[)44'.. -- / 
 	

 H$//DMM1,33[[6'?3 4   !''V[[s<?P'QQr   c                H    V ^8  d   QhR\         R\         R\         R\        /# r6  r8  )r   s   "r   r   r   J  rH  r   c                   V P                   VP                   8w  d<   V P                  R 8w  d+   V P                    RV P                   : RVP                   : 2# \        P                  V P                   \	        V4      R7      # )r<   z" targets RISC-V microarchitecture z, but the host is r?  )r)   r*   rC  r   r   rJ  s   &$$r   _why_not_riscv64rQ  J  sm     {{diiFMMY$>{{m=fkk_ M#yym-	
 !''V[[s<?P'QQr   c                H    V ^8  d   QhR\         R\         R\         R\        /# r6  r8  )r   s   "r   r   r   U  s8     R RR R $	R
 	Rr   c                L   \        VP                  4      pV\        8X  d   \        WVR 7      # V\        \
        39   d   \        WVR 7      # V\        8X  d   \        WVR 7      # V\        8X  d   \        WVR 7      # \        P                  V P                  \        V4      R7      # )r  r7  r?  )r   r"  rL   rF  rQ   rR   rK  rO   rN  rW   rQ  rC  r   r)   )r(  r  r7  r"  s   &$$ r   _why_not_for_archrU  U  s     $$%Fv|LL'5!!flKKMMMM ''V[[s<?P'QQr   c                0    V ^8  d   QhR\         R\         /# )r   target_namer.   r   )r   s   "r   r   r   g  s     V V V Vr   c                   V \         9  d   \        P                  V R7      # \         V ,          \        4       r!W8X  d   \        P                  V R7      # W8  d!   \
        P                  V \        V4      R7      # \        4       pV\         9   d   \         V,          MRpVe   W8X  g<   WAP                  9   g,   \        P                  V \        VP                  4      VR7      # \        V\        4       VR7      # )a  Returns a human-readable explanation of why the given target was not chosen as the host.

Args:
    target_name: name of the target micro-architecture to explain.

Returns:
    A human-readable string. Never raises; if the target is unknown the
    string describes the problem.
rG   r?  N)r)   target_familyhost_familyrT  )r   _WHY_NOT_UNKNOWNr   r  _WHY_NOT_IS_HOST_WHY_NOT_HOST_MORE_SPECIFICr   rK   r  _WHY_NOT_WRONG_FAMILYr"  rU  r   )rW  r(  r7  r
  r)  s   &    r   why_notr_  g  s     '!&&K&88";/L&&K&88*11{\IZ1[["*0Cw0N+,TXI!4	EUEU8U$++fmm,+ , 
 	
 V-/UUr   c                    V ^8  d   Qh/ ^ \         9   d2   \        \        \        \        \        .\
        3,          3,          ;R&   # )r   r  )__conditional_annotations__r   r   r   r   r   )r   s   "r   r   r      s7     ) )< ] \d3*;=N)OQU)U VVW \= *r   )rB   rB   N    rB   )Qra  r   collections	functoolsr   r   rS   rk   r   r   typingr   r   r   r   r   r   r   r	   vendor.cpuid.cpuidr
   microarchitecturer   r   r   schemar   r   r   r   r   r   r   defaultdictlistr!   r  rL   rO   rQ   rR   rW   r'   r4   r_   ra   r   r   	lru_cacher   r   rK   r   r   r   r   rP   rN   r   r  r  r%  r*  r-  r0  r2  r   r[  r\  r]  r^  rA  r@  rC  rF  rK  rN  rQ  rU  r_  r   )ra  s   @r   <module>rl     sd  
 *   	  	    I I I & T T , 6 ) - 9 3 
 &&t, []  \ 



& G$53 %53pC$ C$L I&3 '3' T" #4 VW T" #8 H%$ &$U&5./"*1"	 T"+ #+D* '5)9:/ ;/ 0	 1	 1L 2L, 1 2 F B V  _  ] U  c R$RR&RR$Vr   