+
    =i                      a  0 t $ R t^ RIH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 ^ RIHt ^RIHt ^RIHt ^ RIt]'       d	   ^ RIHtHt ]'       g"   ]	P2                  ! 4       R8X  d   ^ RIt^ R	IHt M ! R
 R4      t]! 4       tR]R&    ! R R4      t ! R R4      t ! R R4      t  ! R R]4      t! ! R R4      t"R# )zo
Environment info about Microsoft Compilers.

>>> getfixture('windows_only')
>>> ei = EnvironmentInfo('amd64')
)annotationsN)TYPE_CHECKING	TypedDictoverload)unique_everseen)StrPath)py310)LiteralStringNotRequiredWindows)environc                  &    ] tR t^#tRtRtRtRtRtR# )winregN )	__name__
__module____qualname____firstlineno__
HKEY_USERSHKEY_CURRENT_USERHKEY_LOCAL_MACHINEHKEY_CLASSES_ROOT__static_attributes__r       r/Users/tonyclaw/.openclaw/workspace/scripts/youtube-playlists/venv/lib/python3.14/site-packages/setuptools/msvc.pyr   r   #   s    
 ! r   r   zdict[str, str]r   c                      ] tR t^,tRt]P                  ! RR4      P                  4       tR R lt	]
R R l4       tR R	 ltR
 R ltRR R lltRR R lltRR R lltRtR# )PlatformInfozi
Current and Target Architectures information.

Parameters
----------
arch: str
    Target architecture.
processor_architecture c                    V ^8  d   QhRRRR/# )   archstrreturnNoner   )formats   "r   __annotate__PlatformInfo.__annotate__8   s     9 9S 9T 9r   c                	P    VP                  4       P                  R R4      V n        R# )x64amd64N)lowerreplacer!   )selfr!   s   &&r   __init__PlatformInfo.__init__8   s    JJL((8	r   c                   V ^8  d   QhRR/# r    r#   r"   r   )r%   s   "r   r&   r'   <   s     	4 	4C 	4r   c                `    V P                   V P                   P                  R4      ^,           R # )zC
Return Target CPU architecture.

Return
------
str
    Target CPU
_N)r!   findr-   s   &r   
target_cpuPlatformInfo.target_cpu;   s(     yy,q0233r   c                   V ^8  d   QhRR/# r    r#   boolr   )r%   s   "r   r&   r'   G   s     	( 	(t 	(r   c                     V P                   R8H  # )zW
Return True if target CPU is x86 32 bits..

Return
------
bool
    CPU is x86 32 bits
x86r6   r5   s   &r   target_is_x86PlatformInfo.target_is_x86G   s     %''r   c                   V ^8  d   QhRR/# r9   r   )r%   s   "r   r&   r'   R   s     	) 	) 	)r   c                     V P                   R8H  # )zX
Return True if current CPU is x86 32 bits..

Return
------
bool
    CPU is x86 32 bits
r<   current_cpur5   s   &r   current_is_x86PlatformInfo.current_is_x86R   s     5((r   c                   V ^8  d   QhRR/# r1   r   )r%   s   "r   r&   r'   ]   s     
 
s 
r   c                    V P                   R8X  d   V'       d   R# V P                   R8X  d   V'       d   R# RV P                    2# )u  
Current platform specific subfolder.

Parameters
----------
hidex86: bool
    return '' and not '' if architecture is x86.
x64: bool
    return 'd' and not 'md64' if architecture is amd64.

Return
------
str
    subfolder: '        arget', or '' (see hidex86 parameter)
r<   r   r*   \x64\rB   r-   hidex86r)   s   &&&r   current_dirPlatformInfo.current_dir]   sR    $   E)g 	
   G+ 	

 d&&'(	
r   c                   V ^8  d   QhRR/# r1   r   )r%   s   "r   r&   r'   u   s     
 
c 
r   c                    V P                   R8X  d   V'       d   R# V P                   R8X  d   V'       d   R# RV P                    2# )a  
Target platform specific subfolder.

Parameters
----------
hidex86: bool
    return '' and not '\x86' if architecture is x86.
x64: bool
    return '\x64' and not '\amd64' if architecture is amd64.

Return
------
str
    subfolder: '\current', or '' (see hidex86 parameter)
r<   r   r*   rH   rI   r=   rJ   s   &&&r   
target_dirPlatformInfo.target_diru   sL    $ 5(W 	
 7*s 	

 doo&'	
r   c                   V ^8  d   QhRR/# r1   r   )r%   s   "r   r&   r'      s     
 
3 
r   c                    V'       d   RMV P                   pV P                  V8X  d   R# V P                  4       P                  RRV R24      # )a  
Cross platform specific subfolder.

Parameters
----------
forcex86: bool
    Use 'x86' as current architecture even if current architecture is
    not x86.

Return
------
str
    subfolder: '' if target architecture is current architecture,
    '\current_target' if not.
r<   r   rI   r3   )rC   r6   rP   r,   )r-   forcex86currents   && r   	cross_dirPlatformInfo.cross_dir   sQ      $%)9)9 ') 	
 "**42gYaA	
r   )r!   N)FFF)r   r   r   r   __doc__r   getr+   rC   r.   propertyr6   r>   rD   rL   rP   rV   r   r   r   r   r   r   ,   sZ     ++6;AACK9 	4 	4	(	)
0
0
 
r   r   c                     ] tR t^tRt]P                  ]P                  ]P                  ]P                  3t
R R lt]R R l4       t]R R l4       t]R R	 l4       t]R
 R l4       t]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R R R ll4       t]R R R ll4       tR R R lltR R ltRtR# )!RegistryInfoz
Microsoft Visual Studio related registry information.

Parameters
----------
platform_info: PlatformInfo
    "PlatformInfo" instance.
c                    V ^8  d   QhRRRR/# )r    platform_infor   r#   r$   r   )r%   s   "r   r&   RegistryInfo.__annotate__   s        l  t  r   c                	    Wn         R # Npi)r-   r_   s   &&r   r.   RegistryInfo.__init__   s    r   c                   V ^8  d   QhRR/# r    r#   r	   r   )r%   s   "r   r&   r`      s     	 	m 	r   c                    R# )zP
Microsoft Visual Studio root registry key.

Return
------
str
    Registry key
VisualStudior   r5   s   &r   visualstudioRegistryInfo.visualstudio   s     r   c                   V ^8  d   QhRR/# rg   r   )r%   s   "r   r&   r`      s     	6 	6] 	6r   c                V    \         P                  P                  V P                  R4      # )zO
Microsoft Visual Studio SxS registry key.

Return
------
str
    Registry key
SxS)ospathjoinrj   r5   s   &r   sxsRegistryInfo.sxs   s     ww||D--u55r   c                   V ^8  d   QhRR/# rg   r   )r%   s   "r   r&   r`           	- 	-M 	-r   c                V    \         P                  P                  V P                  R4      # )zL
Microsoft Visual C++ VC7 registry key.

Return
------
str
    Registry key
VC7ro   rp   rq   rr   r5   s   &r   vcRegistryInfo.vc        ww||DHHe,,r   c                   V ^8  d   QhRR/# rg   r   )r%   s   "r   r&   r`      ru   r   c                V    \         P                  P                  V P                  R4      # )zO
Microsoft Visual Studio VS7 registry key.

Return
------
str
    Registry key
VS7rx   r5   s   &r   vsRegistryInfo.vs   r{   r   c                   V ^8  d   QhRR/# rg   r   )r%   s   "r   r&   r`      s     	% 	%} 	%r   c                    R# )zS
Microsoft Visual C++ for Python registry key.

Return
------
str
    Registry key
zDevDiv\VCForPythonr   r5   s   &r   vc_for_pythonRegistryInfo.vc_for_python   s     %r   c                   V ^8  d   QhRR/# rg   r   )r%   s   "r   r&   r`      s     	  	 } 	 r   c                    R# )zA
Microsoft SDK registry key.

Return
------
str
    Registry key
zMicrosoft SDKsr   r5   s   &r   microsoft_sdkRegistryInfo.microsoft_sdk   s      r   c                   V ^8  d   QhRR/# rg   r   )r%   s   "r   r&   r`     s     	; 	;] 	;r   c                V    \         P                  P                  V P                  R4      # )zR
Microsoft Windows/Platform SDK registry key.

Return
------
str
    Registry key
r   ro   rp   rq   r   r5   s   &r   windows_sdkRegistryInfo.windows_sdk  s     ww||D..	::r   c                   V ^8  d   QhRR/# rg   r   )r%   s   "r   r&   r`     s     	< 	<= 	<r   c                V    \         P                  P                  V P                  R4      # )zP
Microsoft .NET Framework SDK registry key.

Return
------
str
    Registry key
NETFXSDKr   r5   s   &r   	netfx_sdkRegistryInfo.netfx_sdk  s     ww||D..
;;r   c                   V ^8  d   QhRR/# rg   r   )r%   s   "r   r&   r`     s     	/ 	/M 	/r   c                    R# )zP
Microsoft Windows Kits Roots registry key.

Return
------
str
    Registry key
zWindows Kits\Installed Rootsr   r5   s   &r   windows_kits_rootsRegistryInfo.windows_kits_roots  s     /r   c               $    V ^8  d   QhRRRRRR/# )r    keyr	   r<   r:   r#   r   )r%   s   "r   r&   r`   &  s    TT]TT-Tr   c                	    R # rb   r   r-   r   r<   s   &&&r   	microsoftRegistryInfo.microsoft%  s    QTr   c               $    V ^8  d   QhRRRRRR/# r    r   r"   r<   r:   r#   r   )r%   s   "r   r&   r`   (  s    @@S@t@@r   c                	    R # rb   r   r   s   &&&r   r   r   '  s    =@r   c               $    V ^8  d   QhRRRRRR/# r   r   )r%   s   "r   r&   r`   )  s&     B BS Bt B Br   c                    V P                   P                  4       '       g	   V'       d   RMRp\        P                  P	                  RVRV4      # )z
Return key in Microsoft software registry.

Parameters
----------
key: str
    Registry key path where look.
x86: bool
    Force x86 software registry.

Return
------
str
    Registry key
r   Wow6432NodeSoftware	Microsoft)rd   rD   ro   rp   rq   )r-   r   r<   node64s   &&& r   r   r   )  s8      ww--//3Mww||JSAAr   c               $    V ^8  d   QhRRRRRR/# )r    r   r"   namer#   
str | Noner   )r%   s   "r   r&   r`   <  s!     ' '# 'S 'Z 'r   c           	     V   \         P                  p\         P                  p\         P                  pV P                  pV P
                   FG  pRp V! Wv! V4      ^ V4      p \         P                  ! Y4      ^ ,          T'       d   T! T4       u # u # 	  R#   \         dL    T P                  P                  4       '       g(    T! Yv! TR4      ^ T4      p Lv  \         d      K  i ; i K  i ; i  \         d     Mi ; i T'       d   T! T4       K  K    T'       d
   T! T4       i i ; i)z
Look for values in registry in Microsoft software registry.

Parameters
----------
key: str
    Registry key path where look.
name: str
    Value name to find.

Return
------
str | None
    value
NT)
r   KEY_READOpenKeyCloseKeyr   HKEYSOSErrorrd   rD   QueryValueEx)	r-   r   r   key_readopenkeyclosekeymshkeybkeys	   &&&      r   lookupRegistryInfo.lookup<  s     ??..??^^JJDD	tRWa:#**46q9 TN # &   ww--//!&tRT]AxH" ! !   TN 4TN sT   B C/*C,CC% C,$C%%C,+C,/C=:D<C==DD(rc   NrX   )r   r   r   r   rY   r   r   r   r   r   r   r.   r[   rj   rr   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r]   r]      s    	  !!  	E  	 	 	6 	6 	- 	- 	- 	- 	% 	% 	  	  	; 	; 	< 	< 	/ 	/ T T@ @B&' 'r   r]   c                  F   ] tR tRtRt]P                  ! RR4      t]P                  ! RR4      t]P                  ! R]4      t	R5R R	 llt
R
 tR R ltR R lt]R 4       t]R R l4       t]R R l4       tR tR t]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R  R! l4       t]R" R# l4       t]R$ R% l4       t]R& R' l4       t]R( R) l4       t]R* R+ l4       t]R, R- l4       t ]R. R/ l4       t!R0 R1 lt"]R6R2 R3 ll4       t#R4t$R# )7
SystemInfoif  z
Microsoft Windows and Visual Studio related system information.

Parameters
----------
registry_info: RegistryInfo
    "RegistryInfo" instance.
vc_ver: float
    Required Microsoft Visual C++ version.
WinDirr   ProgramFileszProgramFiles(x86)Nc               $    V ^8  d   QhRRRRRR/# )r    registry_infor]   vc_verzfloat | Noner#   r$   r   )r%   s   "r   r&   SystemInfo.__annotate__x  s)     	S 	S)	S3?	S		Sr   c                	    Wn         V P                   P                  V n        V P                  4       V n        T;'       g    V P	                  4       ;V n        V n        R # rb   )rird   find_programdata_vs_versknown_vs_paths_find_latest_available_vs_vervs_verr   )r-   r   r   s   &&&r   r.   SystemInfo.__init__x  sJ      ''**";;= %+$R$Rd.P.P.RRdkr   c                    V P                  4       pV'       g2   V P                  '       g    \        P                  P	                  R4      h\        V4      pVP                  V P                  4       \        V4      # )z=
Find the latest VC version

Return
------
float
    version
z%No Microsoft Visual C++ version found)find_reg_vs_versr   	distutilserrorsDistutilsPlatformErrorsetupdatemax)r-   reg_vc_versvc_verss   &  r   r   (SystemInfo._find_latest_available_vs_ver  sd     ++-t222""997  k"t**+7|r   c                   V ^8  d   QhRR/# )r    r#   zlist[float]r   )r%   s   "r   r&   r     s      + r   c                d   V P                   P                  pV P                   P                  V P                   P                  V P                   P                  3p. p\
        P                  ! V P                   P                  V4       EFL  w  rE \        P                  ! WA! V4      ^ \        P                  4      pT;_uu_ 4        \        P                  ! T4      w  rxp	\        T4       Fk  p
\        P                  ! \         4      ;_uu_ 4        \#        \        P$                  ! Yj4      ^ ,          4      pY9  d   TP'                  T4       RRR4       Km  	  \        T4       Fd  p
\        P                  ! \         4      ;_uu_ 4        \#        \        P(                  ! Yj4      4      pY9  d   TP'                  T4       RRR4       Kf  	  RRR4       EKO  	  \+        V4      #   \         d     EKk  i ; i  + '       g   i     EK  ; i  + '       g   i     K  ; i  + '       g   i     EK  ; i)zh
Find Microsoft Visual Studio versions available in registry.

Return
------
list of float
    Versions
N)r   r   ry   r   r   	itertoolsproductr   r   r   r   r   QueryInfoKeyrange
contextlibsuppress
ValueErrorfloat	EnumValueappendEnumKeysorted)r-   r   vckeysvs_versr   r   r   subkeysvaluesr3   ivers   &           r   r   SystemInfo.find_reg_vs_vers  s    WW''**dgg33TWWZZ@"**477==&AID~~dBsGQH %+%8%8%>"vA#,,Z88#F$4$4T$=a$@A-#NN3/ 98 '
 wA#,,Z88#FNN4$;<-#NN3/ 98 (  B" g  
 988
 988 sO   ,G!A
H>G4
<H7H	=H!G10G14H?
H	H	HH/c                   V ^8  d   QhRR/# )r    r#   zdict[float, str]r   )r%   s   "r   r&   r     s     ( (*: (r   c                $   / pRp \         P                  ! V4      pT F  p \         P                  P	                  Y$R4      p\        TRRR7      ;_uu_ 4       p\        P                  ! T4      pRRR4       XR,          p\         P                  ! \         P                  P	                  TR4      4       TYP                  TR	,          4      &   K  	  T#   \         d    Tu # i ; i  + '       g   i     L; i  \        \        3 d     K  i ; i)
z
Find Visual studio 2017+ versions from information in
"C:\ProgramData\Microsoft\VisualStudio\Packages\_Instances".

Return
------
dict
    float version as key, path as value.
z9C:\ProgramData\Microsoft\VisualStudio\Packages\_Instancesz
state.jsonrtzutf-8)encodingNinstallationPathVC\Tools\MSVCinstallationVersion)
ro   listdirr   rp   rq   openjsonload_as_float_versionKeyError)	r-   vs_versionsinstances_dirhashed_namesr   
state_path
state_filestatevs_paths	   &        r   r   #SystemInfo.find_programdata_vs_vers  s     )+T	::m4L !DWW\\-|L
*dW== IIj1E > 23 

277<<1ABC  2259N3OPQ !( 1  		 >= X& s;   C 6C:C'/AC:C$#C$'C72C::DDc                b    \        RP                  V P                  R4      R,          4      4      # )z
Return a string version as a simplified float version (major.minor)

Parameters
----------
version: str
    Version.

Return
------
float
    version
.Nr    N)r   rq   split)versions   &r   r   SystemInfo._as_float_version  s&     SXXgmmC04566r   c                   V ^8  d   QhRR/# r1   r   )r%   s   "r   r&   r     s     L Lc Lr   c                    \         P                  P                  V P                  RV P                  R 24      pV P
                  P                  V P
                  P                  V P                  R 4      ;'       g    T# )z@
Microsoft Visual Studio directory.

Return
------
str
    path
Microsoft Visual Studio 0.1f)ro   rp   rq   ProgramFilesx86r   r   r   r   )r-   defaults   & r   VSInstallDirSystemInfo.VSInstallDir  s`     '',,  $<T[[<N"O

 ww~~dggjjT[[,>@KKGKr   c                   V ^8  d   QhRR/# r1   r   )r%   s   "r   r&   r     s      c r   c                    V P                  4       ;'       g    V P                  4       p\        P                  P	                  V4      '       g"   Rp\
        P                  P                  V4      hV# )z=
Microsoft Visual C++ directory.

Return
------
str
    path
z(Microsoft Visual C++ directory not found)	_guess_vc_guess_vc_legacyro   rp   isdirr   r   r   )r-   rp   msgs   &  r   VCInstallDirSystemInfo.VCInstallDir  sU     ~~::4#8#8#:ww}}T""<C""99#>>r   c                   V P                   R8:  d   R#  V P                  V P                   ,          p\        P
                  P                  VR4      p \        P                  ! V4      R,          pV P                  V4      V n	        \        P
                  P                  W#4      #   \         d    T P                  p Li ; i  \        \        3 d     R# i ; i)z<
Locate Visual C++ for VS2017+.

Return
------
str
    path
      ,@r   r   )r   r   r   r  ro   rp   rq   r   r   r   r   
IndexError)r-   vs_dirguess_vcr   s   &   r   r  SystemInfo._guess_vc  s     ;;$	'((5F
 77<<(89	ZZ)"-F008DK77<<11  	'&&F	' $ 		s$   B% AC %B?>B?CCc                   \         P                  P                  V P                  RV P                  R R24      p\         P                  P                  V P
                  P                  V P                  R 4      pV P
                  P                  VR4      pV'       d!   \         P                  P                  VR4      MTpV P
                  P                  V P
                  P                  V P                  R 4      ;'       g    T# )zK
Locate Visual C++ for versions prior to 2017.

Return
------
str
    path
r  r  z\VC
installdirVC)	ro   rp   rq   r  r   r   r   r   ry   )r-   r  reg_path	python_vc
default_vcs   &    r   r  SystemInfo._guess_vc_legacy3  s     '',,  'D'9=
 77<< 5 5$++d9KMGGNN8\:	6?RWW\\)T2W
 ww~~dggjjT[[,>@NNJNr   c                   V ^8  d   QhRR/# r    r#   ztuple[LiteralString, ...]r   )r%   s   "r   r&   r   J  s      #< r   c                    V P                   R8:  d   R# V P                   R8X  d   R# V P                   R8X  d   R# V P                   R8X  d   R	# V P                   R8  d   R
# R# )zg
Microsoft Windows SDK versions for specified MSVC++ version.

Return
------
tuple of str
    versions
      "@      $@      &@      (@r  )z7.0z6.1z6.0a)z7.1z7.0a)z8.0z8.0a)8.1z8.1a)z10.0r'  r   r   r5   s   &r   WindowsSdkVersionSystemInfo.WindowsSdkVersionI  sc     ;;#''[[D   [[D   [[D   [[D   	r   c                   V ^8  d   QhRR/# r1   r   )r%   s   "r   r&   r   `  s     	P 	Ps 	Pr   c                t    V P                  \        P                  P                  V P                  R4      4      # )zD
Microsoft Windows SDK last version.

Return
------
str
    version
lib)_use_last_dir_namero   rp   rq   WindowsSdkDirr5   s   &r   WindowsSdkLastVersion SystemInfo.WindowsSdkLastVersion_  s*     &&rww||D4F4F'NOOr   c                   V ^8  d   QhRR/# r1   r   )r%   s   "r   r&   r   l  s     ( (s (r   c                8   RpV P                    F`  p\        P                  P                  V P                  P
                  RV 24      pV P                  P                  VR4      pV'       g   K`   M	  V'       d&   \        P                  P                  V4      '       g   \        P                  P                  V P                  P                  V P                  R 4      pV P                  P                  VR4      pV'       d!   \        P                  P                  VR4      pV'       d&   \        P                  P                  V4      '       g   V P                    Fo  pVRVP                  R4       pR	V 2p\        P                  P                  V P                  V4      p\        P                  P                  V4      '       g   Km  TpKq  	  V'       d&   \        P                  P                  V4      '       gl   V P                    F[  pR
V 2p\        P                  P                  V P                  V4      p\        P                  P                  V4      '       g   KY  TpK]  	  V'       g+   \        P                  P                  V P                  R4      pV# )z>
Microsoft Windows SDK directory.

Return
------
str
    path
r   vinstallationfolderr  r  WinSDKNr   zMicrosoft SDKs\Windows Kits\zMicrosoft SDKs\Windows\vPlatformSDK)r)  ro   rp   rq   r   r   r   r  r   r   rfindr   r  )r-   sdkdirr   locrp   install_baseintverds   &       r   r/  SystemInfo.WindowsSdkDirk  s     ))C'',,tww22auI>CWW^^C)=>Fv * RWW]]62277<< 5 5$++d9KMD77>>$=LlH=RWW]]622---syy~.6vh?GGLL!2!2D977==##F . RWW]]622--23%8GGLL!2!2D977==##F	 .
 WW\\$"3"3]CFr   c                   V ^8  d   QhRR/# r    r#   r   r   )r%   s   "r   r&   r     s     " "* "r   c                   V P                   R8:  d   ^#pRpMD^(pV P                   R8:  d   RMRpV P                  P                  RVR7      P                  RR4      pR	V R
V 2p. pV P                   R8  dP   V P                   F?  pV\
        P                  P                  V P                  P                  Wd4      .,          pKA  	  V P                   FD  pV\
        P                  P                  V P                  P                  RV R2V4      .,          pKF  	  V F+  pV P                  P                  VR4      pV'       g   K)  Vu # 	  R# )zP
Microsoft Windows SDK executable directory.

Return
------
str | None
    path
r%  r   r&  TF)r)   rK   rI   -zWinSDK-NetFxToolsr  r4  Ar5  N)r   rd   rL   r,   NetFxSdkVersionro   rp   rq   r   r   r)  r   r   )	r-   netfxverr!   rK   fxregpathsr   rp   execpaths	   &        r   WindowsSDKExecutablePath#SystemInfo.WindowsSDKExecutablePath  s%    ;;$HDH"kkT1duG77&&4&AII$PSTDH:U4&1 ;;$++RWW\\$''*;*;SEFF , ))Cdgg&9&9Qse1:rJKKH * Dww~~d,@AHx 
 r   c                   V ^8  d   QhRR/# r1   r   )r%   s   "r   r&   r     s     
8 
8# 
8r   c                    \         P                  P                  V P                  P                  V P
                  R R24      pV P                  P                  VR4      ;'       g    R# )z<
Microsoft Visual F# directory.

Return
------
str
    path
r  z	\Setup\F#
productdirr   )ro   rp   rq   r   rj   r   r   )r-   rp   s   & r   FSharpInstallDirSystemInfo.FSharpInstallDir  sM     ww||DGG00dkk$5Gy2QRww~~dL177R7r   c                   V ^8  d   QhRR/# r@  r   )r%   s   "r   r&   r     s      J r   c                    V P                   R8  d   RMRpV FB  pV P                  P                  V P                  P                  RV 24      pV'       g   K@  Vu # 	  R# )zK
Microsoft Universal CRT SDK directory.

Return
------
str | None
    path
r  kitsrootN)1081r   )r   r   r   r   )r-   versr   r9  s   &   r   UniversalCRTSdkDirSystemInfo.UniversalCRTSdkDir  sV      ${{d2| CWW^^DGG$>$>(3%@PQFv 
 r   c                   V ^8  d   QhRR/# r1   r   )r%   s   "r   r&   r     s      C r   c                     V P                  \        P                  P                  V P                  R4      4      #   \
         d   p\        P                  ! TR4       h Rp?ii ; i)zP
Microsoft Universal C Runtime SDK last version.

Return
------
str
    version
r-  Cannot find UniversalCRTSdkDirN)r.  ro   rp   rq   rW  	TypeErrorr   add_note)r-   exs   & r   UniversalCRTSdkLastVersion%SystemInfo.UniversalCRTSdkLastVersion  sP    	**277<<8O8OQV+WXX 	NN2?@	s   8; A#AA#c                   V ^8  d   QhRR/# r!  r   )r%   s   "r   r&   r     s     
 
!: 
r   c                ,    V P                   R8  d   R# R# )zQ
Microsoft .NET Framework SDK versions.

Return
------
tuple of str
    versions
r  )	z4.7.2z4.7.1z4.7z4.6.2z4.6.1z4.6z4.5.2z4.5.1z4.5r   r(  r5   s   &r   rE  SystemInfo.NetFxSdkVersion  s%     {{d" X	
 	
r   c                   V ^8  d   QhRR/# r@  r   )r%   s   "r   r&   r     s      Z r   c                    RpV P                    F^  p\        P                  P                  V P                  P
                  V4      pV P                  P                  VR4      pV'       g   K]   V# 	  V# )zL
Microsoft .NET Framework SDK directory.

Return
------
str | None
    path
r   kitsinstallationfolder)rE  ro   rp   rq   r   r   r   )r-   r9  r   r:  s   &   r   NetFxSdkDirSystemInfo.NetFxSdkDir  s`      ''C'',,tww00#6CWW^^C)ABFv (
 r   c                   V ^8  d   QhRR/# r1   r   )r%   s   "r   r&   r          H H Hr   c                    \         P                  P                  V P                  R4      pV P                  P                  V P                  P                  R4      ;'       g    T# )zG
Microsoft .NET Framework 32bit directory.

Return
------
str
    path
zMicrosoft.NET\Frameworkframeworkdir32ro   rp   rq   r   r   r   ry   r-   guess_fws   & r   FrameworkDir32SystemInfo.FrameworkDir32  sE     77<<-GH ww~~dggjj*:;GGxGr   c                   V ^8  d   QhRR/# r1   r   )r%   s   "r   r&   r   !  rj  r   c                    \         P                  P                  V P                  R4      pV P                  P                  V P                  P                  R4      ;'       g    T# )zG
Microsoft .NET Framework 64bit directory.

Return
------
str
    path
zMicrosoft.NET\Framework64frameworkdir64rm  rn  s   & r   FrameworkDir64SystemInfo.FrameworkDir64   sE     77<<-IJ ww~~dggjj*:;GGxGr   c                   V ^8  d   QhRR/# r    r#   ztuple[str, ...]r   )r%   s   "r   r&   r   1       	/ 	/O 	/r   c                $    V P                  ^ 4      # )zS
Microsoft .NET Framework 32bit versions.

Return
------
tuple of str
    versions
_find_dot_net_versionsr5   s   &r   FrameworkVersion32SystemInfo.FrameworkVersion320       **2..r   c                   V ^8  d   QhRR/# rx  r   )r%   s   "r   r&   r   =  ry  r   c                $    V P                  ^@4      # )zS
Microsoft .NET Framework 64bit versions.

Return
------
tuple of str
    versions
r{  r5   s   &r   FrameworkVersion64SystemInfo.FrameworkVersion64<  r  r   c                   V ^8  d   QhRR/# rx  r   )r%   s   "r   r&   r   H  s      o r   c                   V P                   P                  V P                   P                  RV 24      p\        V RV 24      pT;'       g    V P	                  VR4      ;'       g    RpV P
                  R8  d   VR3# V P
                  R8  d#   VP                  4       R,          R	8w  d   R# TR
3# V P
                  R8X  d   R# V P
                  R8X  d   R# R# )z
Find Microsoft .NET Framework versions.

Parameters
----------
bits: int
    Platform number of bits: 32 or 64.

Return
------
tuple of str
    versions
frameworkverFrameworkDirr4  r   r&  zv4.0r$  r   v4v3.5r#  g       @)z
v4.0.30319r  )r  
v2.0.50727)zv3.0r  r   )r   r   ry   getattrr.  r   r+   )r-   bitsreg_verdot_net_dirr   s   &&   r   r|  !SystemInfo._find_dot_net_versionsH  s     ''..|D6-BCdl4&$9:HH00cBHHb ;;$;[[D #&99;r?d#:KKVKK[[C''[[C''	r   c               $    V ^8  d   QhRRRRRR/# )r    rp   r   prefixr"   r#   r   )r%   s   "r   r&   r   g  s!     ' ' '# 's 'r   c                r   a a V V3R l\        \        P                  ! S 4      4       4       p\        VR4      # )z
Return name of the last dir in path or '' if no dir found.

Parameters
----------
path: StrPath
    Use dirs in this path
prefix: str
    Use only dirs starting by this prefix

Return
------
str
    name
c              3     <"   T Fe  p\         P                  P                  \         P                  P                  SV4      4      '       g   KH  VP	                  S4      '       g   Ka  Vx  Kg  	  R # 5irb   )ro   rp   r  rq   
startswith).0dir_namerp   r  s   & r   	<genexpr>0SystemInfo._use_last_dir_name.<locals>.<genexpr>w  sN      
6ww}}RWW\\$9:  ##F+ H6s   AA0A0&
A0r   )reversedro   r   next)rp   r  matching_dirss   ff r   r.  SystemInfo._use_last_dir_namef  s/    "
$RZZ%56
 M2&&r   )r   rd   r   r   r   rb   )r   )%r   r   r   r   rY   r   rZ   r   r   r  r.   r   r   r   staticmethodr   r[   r  r  r  r  r)  r0  r/  rJ  rO  rW  r_  rE  rg  rp  ru  r}  r  r|  r.  r   r   r   r   r   r   f  s   	 [[2&F;;~r2Lkk"5|DO	S(>(T 7 7  L L"  "<O,  * 	P 	P ( (T " "H 
8 
8  (   
 
   " H H H H 	/ 	/ 	/ 	/< ' 'r   r   c                  J    ] tR tRt$ R]R&   R]R&   R]R&   R]R&   R]R&   R	tR
# )_EnvironmentDicti  r"   includer-  libpathrp   zNotRequired[str | None]py_vcruntime_redistr   N)r   r   r   r   __annotations__r   r   r   r   r  r    s    L	HL
I00r   r  c                     ] tR tRtRtR(R R llt]R 4       t]R 4       t]R 4       t	]R	 4       t
]R
 4       t]R 4       t]R 4       t]R 4       t]R 4       t]R 4       t]R 4       tR t]R R l4       t]R 4       t]R 4       t]R 4       t]R 4       t]R 4       t]R 4       t]R 4       t]R R l4       t]R R l4       t]R R  l4       t]R! 4       t]R" R# l4       tR)R$ R% llt R& t!R't"R# )*EnvironmentInfoi  a  
Return environment variables for specified Microsoft Visual C++ version
and platform : Lib, Include, Path and libpath.

This function is compatible with Microsoft Visual C++ 9.0 to 14.X.

Script created by analysing Microsoft environment configuration files like
"vcvars[...].bat", "SetEnv.Cmd", "vcbuildtools.bat", ...

Parameters
----------
arch: str
    Target architecture.
vc_ver: float
    Required Microsoft Visual C++ version. If not set, autodetect the last
    version.
vc_min_ver: float
    Minimum Microsoft Visual C++ version.
Nc                   V ^8  d   QhRR/# )r    r#   r$   r   )r%   s   "r   r&   EnvironmentInfo.__annotate__  s     ? ?4 ?r   c                	    \        V4      V n        \        V P                  4      V n        \	        V P                  V4      V n        V P                  V8  d"   R p\        P                  P                  V4      hR# )z.No suitable Microsoft Visual C++ version foundN)
r   rd   r]   r   r   sir   r   r   r   )r-   r!   r   
vc_min_vererrs   &&&& r   r.   EnvironmentInfo.__init__  s]    t$tww'TWWf-;;#BC""99#>> $r   c                .    V P                   P                  # )z;
Microsoft Visual Studio.

Return
------
float
    version
)r  r   r5   s   &r   r   EnvironmentInfo.vs_ver       ww~~r   c                .    V P                   P                  # )z@
Microsoft Visual C++ version.

Return
------
float
    version
)r  r   r5   s   &r   r   EnvironmentInfo.vc_ver  r  r   c                :   RR.pV P                   R8  d?   V P                  P                  RRR7      pVR.,          pVR.,          pVRV 2.,          pV Uu. uF7  p\        P                  P                  V P                  P                  V4      NK9  	  up# u upi )zE
Microsoft Visual Studio Tools.

Return
------
list of str
    paths
zCommon7\IDEzCommon7\Toolsr  TrK   r)   z1Common7\IDE\CommonExtensions\Microsoft\TestWindowzTeam Tools\Performance Tools)r   rd   rL   ro   rp   rq   r  r  )r-   pathsarch_subdirrp   s   &   r   VSToolsEnvironmentInfo.VSTools  s      !12;;$''--d-EKJKKE566E5k]CDDEEJKUTTWW1148UKKKs   =Bc                    \         P                  P                  V P                  P                  R4      \         P                  P                  V P                  P                  R4      .# )zb
Microsoft Visual C++ & Microsoft Foundation Class Includes.

Return
------
list of str
    paths
IncludezATLMFC\Include)ro   rp   rq   r  r  r5   s   &r   
VCIncludesEnvironmentInfo.VCIncludes  sG     GGLL--y9GGLL--/@A
 	
r   c                x   V P                   R8  d   V P                  P                  RR7      pMV P                  P                  RR7      pRV 2RV 2.pV P                   R8  d   VRV 2.,          pV Uu. uF7  p\        P                  P                  V P                  P                  V4      NK9  	  up# u upi )	zc
Microsoft Visual C++ & Microsoft Foundation Class Libraries.

Return
------
list of str
    paths
      .@Tr)   rK   Libz
ATLMFC\Libr  z	Lib\store)r   rd   rP   ro   rp   rq   r  r  )r-   r  r  rp   s   &   r   VCLibrariesEnvironmentInfo.VCLibraries  s     ;;$'',,,6K'',,T,:K{m$K=&AB;;$;-011EEJKUTTWW1148UKKKs   7=B7c                    V P                   R8  d   . # \        P                  P                  V P                  P
                  R4      .# )zW
Microsoft Visual C++ store references Libraries.

Return
------
list of str
    paths
r  zLib\store\references)r   ro   rp   rq   r  r  r5   s   &r   VCStoreRefsEnvironmentInfo.VCStoreRefs  s8     ;;ITWW113JKLLr   c           	        V P                   p\        P                  P                  VP                  R4      .pV P
                  R8:  d   RMRpV P                  P                  V4      pV'       d6   V\        P                  P                  VP                  RV 24      .,          pV P
                  R8X  dT   RV P                  P                  RR7       2pV\        P                  P                  VP                  V4      .,          pV# V P
                  R8  Ed.   V P                  P                  P                  R	R
4      P                  4       p\        P                  P                  RRV R24      pV\        P                  P                  VP                  WpP                  P                  RR7      ,          4      .,          pV P                  P                  V P                  P                  8w  dS   V\        P                  P                  VP                  WpP                  P                  RR7      ,          4      .,          pV# V\        P                  P                  VP                  R4      .,          pV# )ak  
Microsoft Visual C++ Tools.

Return
------
list of str
    paths

When host CPU is ARM, the tools should be found for ARM.

>>> getfixture('windows_only')
>>> mp = getfixture('monkeypatch')
>>> mp.setattr(PlatformInfo, 'current_cpu', 'arm64')
>>> ei = EnvironmentInfo(arch='irrelevant')
>>> paths = ei.VCTools
>>> any('HostARM64' in path for path in paths)
True

VCPackagesr$  TFBinr  r  r  r*   r)   binHostz%sr  )r  ro   rp   rq   r  r   rd   rV   rL   rC   r,   upperrP   r6   )r-   r  toolsrT   r  rp   host_idhost_dirs   &       r   VCToolsEnvironmentInfo.VCTools  s   ( WWboo|<=;;$.4Egg''1bggll2??c+4GHIIE;;$,,T,:;<Dbggll2??D9::E& # [[D gg))11'5AGGIGww||ET'"+=>HR__h9K9KPT9K9U.UV E ww""dgg&8&88GGLLGG4G4GD4G4Q)Q   bggll2??E:;;Er   c                   V P                   R8:  dV   V P                  P                  RRR7      p\        P                  P                  V P                  P                  RV 24      .# V P                  P                  RR7      p\        P                  P                  V P                  P                  R4      pV P                  p\        P                  P                  W# RV 24      .# )zG
Microsoft Windows SDK Libraries.

Return
------
list of str
    paths
r$  Tr  r  r  r-  um)	r   rd   rP   ro   rp   rq   r  r/  _sdk_subdir)r-   r  r-  libvers   &   r   OSLibrariesEnvironmentInfo.OSLibraries:  s     ;;$'',,Tt,DKGGLL!6!6#k]8KLMM '',,,6K'',,tww44e<C%%FGGLL;-&@ABBr   c                   \         P                  P                  V P                  P                  R4      pV P
                  R8:  d#   V\         P                  P                  VR4      .# V P
                  R8  d   V P                  pMRp\         P                  P                  W R24      \         P                  P                  W R24      \         P                  P                  W R24      .# )	zE
Microsoft Windows SDK Include.

Return
------
list of str
    paths
r  r$  glr  r   sharedr  winrt)ro   rp   rq   r  r/  r   r  )r-   r  sdkvers   &  r   
OSIncludesEnvironmentInfo.OSIncludesN  s     '',,tww44i@;;$RWW\\'4899 {{d"))W&78Wm4W&67 r   c                   \         P                  P                  V P                  P                  R4      p. pV P
                  R8:  d   W P                  ,          pV P
                  R8  d)   V\         P                  P                  VR4      .,          pV P
                  R8  d   VV\         P                  P                  V P                  P                  R4      \         P                  P                  VRR4      \         P                  P                  VR	R4      \         P                  P                  VR
R4      \         P                  P                  V P                  P                  RRV P
                  R RRR4      .,          pV# )zM
Microsoft Windows SDK Libraries Paths.

Return
------
list of str
    paths

Referencesr#  r%  zCommonConfiguration\Neutralr  UnionMetadataz'Windows.Foundation.UniversalApiContractz1.0.0.0z%Windows.Foundation.FoundationContractz,Windows.Networking.Connectivity.WwanContractExtensionSDKszMicrosoft.VCLibsr  CommonConfigurationneutral)ro   rp   rq   r  r/  r   r  )r-   refr  s   &  r   	OSLibpathEnvironmentInfo.OSLibpathh  s'    ggll47700,?;;#'''G;;$S*HIJJG;;$TWW22ODS"KYWS"I9UG GG))#&{{4( ) G$ r   c                4    \        V P                  4       4      # )zC
Microsoft Windows SDK Tools.

Return
------
list of str
    paths
)list
_sdk_toolsr5   s   &r   SdkToolsEnvironmentInfo.SdkTools  s     DOO%&&r   c              #  r  "   V P                   R8  dL   V P                   R8:  d   RMRp\        P                  P                  V P                  P
                  V4      x  V P                  P                  4       '       gX   V P                  P                  RR7      pRV 2p\        P                  P                  V P                  P
                  V4      x  V P                   R9   d}   V P                  P                  4       '       d   RpMV P                  P                  RRR7      pR	V 2p\        P                  P                  V P                  P
                  V4      x  MV P                   R8  d   \        P                  P                  V P                  P
                  R4      pV P                  P                  RR7      pV P                  P                  p\        P                  P                  W4 V 24      x  V P                  P                  '       d   V P                  P                  x  R
# R
# 5i)zX
Microsoft Windows SDK Tools paths generator.

Return
------
generator of str
    paths
r  r%  r  zBin\x86Tr  r   r  zBin\NETFX 4.0 ToolsN)r$  r%  )r   ro   rp   rq   r  r/  rd   rD   rL   r>   r0  rJ  )r-   bin_dirr  rp   r  s   &    r   r  EnvironmentInfo._sdk_tools  s     ;;#{{d2e
G'',,tww44g>>ww%%''''--$-7K&D'',,tww44d;;;;,&ww$$&& "gg11$D1I)+7D'',,tww44d;;[[D 77<< 5 5u=D''--$-7KWW22F'',,tx}%=>>77+++''222 ,s   A<H7?BH7DH7H7c                   V ^8  d   QhRR/# r1   r   )r%   s   "r   r&   r    s     
3 
3S 
3r   c                L    V P                   P                  pV'       d   V R2# R# )zE
Microsoft Windows SDK version subdir.

Return
------
str
    subdir
rI   r   )r  r0  r-   ucrtvers   & r   r  EnvironmentInfo._sdk_subdir  s&     ''//#*7)222r   c                    V P                   R8  d   . # \        P                  P                  V P                  P
                  R4      .# )zC
Microsoft Windows SDK Setup.

Return
------
list of str
    paths
r#  Setup)r   ro   rp   rq   r  r/  r5   s   &r   SdkSetupEnvironmentInfo.SdkSetup  s7     ;;ITWW22G<==r   c                   V P                   pV P                  pV P                  R8:  d6   RpVP                  4       '       * ;'       d    VP	                  4       '       * pMNVP                  4       ;'       g    VP	                  4       pVP
                  R8H  ;'       g    VP                  R8H  p. pV'       dL   TVP                   Uu. uF-  p\        P                  P                  VP                  V4      NK/  	  up,          pV'       dL   TVP                   Uu. uF-  p\        P                  P                  VP                  V4      NK/  	  up,          pV# u upi u upi )zF
Microsoft .NET Framework Tools.

Return
------
list of str
    paths
r$  Tr*   )rd   r  r   r>   rD   rC   r6   r}  ro   rp   rq   rp  r  ru  )r-   rd   r  	include32	include64r  r   s   &      r   FxToolsEnvironmentInfo.FxTools  s"    WWWW;;$I,,..JJr7H7H7J3JI((*AAb.?.?.AI'1MMR]]g5MI@B@U@U@UR..4@U E @B@U@U@UR..4@U E s   3E3Ec                   V P                   R8  g   V P                  P                  '       g   . # V P                  P	                  RR7      p\
        P                  P                  V P                  P                  RV 24      .# )zN
Microsoft .Net Framework SDK Libraries.

Return
------
list of str
    paths
r  Tr  zlib\um)r   r  rg  rd   rP   ro   rp   rq   )r-   r  s   & r   NetFxSDKLibraries!EnvironmentInfo.NetFxSDKLibraries  sd     ;;TWW%8%8%8Igg((T(2TWW00VK=2IJKKr   c                    V P                   R8  g   V P                  P                  '       g   . # \        P                  P                  V P                  P                  R4      .# )zM
Microsoft .Net Framework SDK Includes.

Return
------
list of str
    paths
r  z
include\um)r   r  rg  ro   rp   rq   r5   s   &r   NetFxSDKIncludes EnvironmentInfo.NetFxSDKIncludes
  sF     ;;TWW%8%8%8ITWW00-@AAr   c                l    \         P                  P                  V P                  P                  R4      .# )zT
Microsoft Visual Studio Team System Database.

Return
------
list of str
    paths
zVSTSDB\Deploy)ro   rp   rq   r  r  r5   s   &r   VsTDbEnvironmentInfo.VsTDb  s'     TWW113CDEEr   c                   V P                   R8  d   . # V P                   R8  d4   V P                  P                  pV P                  P	                  RR7      pMV P                  P
                  pRpRV P                   R RV 2p\        P                  P                  W4      .pV P                   R8  d)   V\        P                  P                  WR	4      .,          pV# )
z>
Microsoft Build Engine.

Return
------
list of str
    paths
r&  r  Tr  r   zMSBuild\r  z\binRoslyn)	r   r  r  rd   rL   r  ro   rp   rq   )r-   	base_pathr  rp   builds   &    r   MSBuildEnvironmentInfo.MSBuild%  s     ;;I[[4//I''--d-;K,,IK4;;t,D>i./;;$bggll9H=>>Er   c                    V P                   R8  d   . # \        P                  P                  V P                  P
                  R4      .# )zD
Microsoft HTML Help Workshop.

Return
------
list of str
    paths
r%  zHTML Help Workshop)r   ro   rp   rq   r  r  r5   s   &r   HTMLHelpWorkshop EnvironmentInfo.HTMLHelpWorkshopA  s8     ;;ITWW446JKLLr   c                   V ^8  d   QhRR/# r    r#   z	list[str]r   )r%   s   "r   r&   r  Q  s     B By Br   c                   V P                   R8  d   . # V P                  P                  RR7      p \        P                  P                  V P                  P                  R4      pT P                  p\        P                  P                  Y$ RT 24      .#   \         d   p\        P                  ! TR4       h Rp?ii ; i)zS
Microsoft Universal C Runtime SDK Libraries.

Return
------
list of str
    paths
r  Tr  r-  r[  Nucrt)r   rd   rP   ro   rp   rq   r  rW  r\  r   r]  _ucrt_subdir)r-   r  r-  r^  r  s   &    r   UCRTLibrariesEnvironmentInfo.UCRTLibrariesP  s     ;;Igg((T(2	'',,tww995AC ##SIT+"?@AA	  	NN2?@	s   4B B>!B99B>c                   V ^8  d   QhRR/# r  r   )r%   s   "r   r&   r  g  s     C Ci Cr   c                B   V P                   R8  d   . #  \        P                  P                  V P                  P
                  R4      p\        P                  P                  YP                   R24      .#   \         d   p\        P                  ! TR4       h Rp?ii ; i)zQ
Microsoft Universal C Runtime SDK Include.

Return
------
list of str
    paths
r  r  r[  Nr  )
r   ro   rp   rq   r  rW  r\  r   r]  r  )r-   r  r^  s   &  r   UCRTIncludesEnvironmentInfo.UCRTIncludesf  s     ;;I	ggll477#=#=yIG W):):(;4&@ABB  	NN2?@	s   4A6 6BBBc                   V ^8  d   QhRR/# r1   r   )r%   s   "r   r&   r  {  s     
3 
3c 
3r   c                L    V P                   P                  pV'       d   V R2# R# )zQ
Microsoft Universal C Runtime SDK version subdir.

Return
------
str
    subdir
rI   r   )r  r_  r  s   & r   r  EnvironmentInfo._ucrt_subdirz  s&     ''44#*7)222r   c                j    RV P                   u;8  d
   R8  d    . #  V P                  P                  .# )z;
Microsoft Visual F#.

Return
------
list of str
    paths
r%  r&  )r   r  rO  r5   s   &r   FSharpEnvironmentInfo.FSharp  s4     $++$$I % (())r   c                   V ^8  d   QhRR/# r@  r   )r%   s   "r   r&   r    s      C  C  Cr   c                v  aa RV P                    R2oV P                  P                  RR7      P                  R4      o. pV P                  P
                  p\        P                  P                  VP                  RR4      4      p\        P                  P                  V4      '       dd   \        P                  P                  V\        P                  ! V4      R,          4      pW\        P                  P                  VR4      .,          pV\        P                  P                  VR	4      .,          pR
V P                   ^
,           R2R
\        V P                  4      ^
,           R23pVV3R l\        P                   ! W4       4       p\#        \%        \        P                  P&                  V4      R4      # )zc
Microsoft Visual C++ runtime redistributable dll.

Returns the first suitable path found or None.
	vcruntimez0.dllTr  rI   z\Toolsz\RedistonecoreredistzMicrosoft.VCz.CRTc              3  l   <"   T F)  w  r\         P                  P                  VSVS4      x  K+  	  R # 5irb   )ro   rp   rq   )r  r  crt_dirr  r"  s   &  r   r  2EnvironmentInfo.VCRuntimeRedist.<locals>.<genexpr>  s1      
%J! GGLLgyAA%Js   14Nr  )r   rd   rP   stripr  r  ro   rp   dirnamer,   r  rq   r   intr   r   r   r  filterisfile)r-   prefixes
tools_pathredist_pathcrt_dirscandidate_pathsr  r"  s   &     @@r   VCRuntimeRedistEnvironmentInfo.VCRuntimeRedist  sM     }E2	gg((T(288> WW))
ggooj&8&8J&OP77==%%'',,{BJJ{4KB4OPKbggll;	&JKKHRWW\\*h788 4;;+,D13t{{+b016

%.%6%6x%J
 F277>>?;TBBr   c                    V ^8  d   QhRRRR/# )r    existsr:   r#   r  r   )r%   s   "r   r&   r    s     ; ; ;1A ;r   c                   \        V P                  RV P                  V P                  V P                  V P
                  .V4      V P                  RV P                  V P                  V P                  V P                  V P                  .V4      V P                  RV P                  V P                  V P                  V P                  .V4      V P                  RV P                  V P                  V P                  V P                   V P"                  V P                  V P$                  V P&                  V P(                  .	V4      R7      pV P*                  ^8  d"   V P,                  '       d   V P,                  VR&   V# )z
Return environment dict.

Parameters
----------
exists: bool
    It True, only return existing paths.

Return
------
dict
    environment
r  r-  r  rp   )r  r-  r  rp   r  )r  _build_pathsr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r   r2  )r-   r5  envs   && r   
return_envEnvironmentInfo.return_env  sU    %%OOOO%%))	 	 !!$$$$LL&&** 
 %%!!4<<1A1A4>>R
 ""LLLLJJMMMMLLLL))KK
 7*
V ;;"!5!5!5)-)=)=C%&
r   c                
   \         P                  P                  V4      p\        P                  ! VR4      P                  \        P                  4      p\         P                  ! WE4      pV'       d.   \        \        \        P                  P                  V4      4      MTpV'       g3   VP                  4        R2p\        P                  P                  V4      h\!        V4      p	\        P                  P#                  V	4      # )a  
Given an environment variable name and specified paths,
return a pathsep-separated string of paths containing
unique, extant, directories from those paths and from
the environment variable. Raise an error if no paths
are resolved.

Parameters
----------
name: str
    Environment variable name
spec_path_lists: list of str
    Paths
exists: bool
    It True, only return existing paths.

Return
------
str
    Pathsep-separated paths
r   z environment variable is empty)r   chainfrom_iterabler   rZ   r   ro   pathsepr  r+  rp   r  r  r   r   r   r   rq   )
r-   r   spec_path_listsr5  
spec_paths	env_pathsr  extant_pathsr  unique_pathss
   &&&&      r   r7  EnvironmentInfo._build_paths  s    . __22?C
KKb)//

;	
6=CtF277==%89ZZ\N"@AC""99#>>&|4zz|,,r   )rd   r   r  )N    )T)#r   r   r   r   rY   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  r2  r9  r7  r   r   r   r   r  r    s   .? 	 	 	 	 L L& 
 
 L L( M M 0 0d C C&  2 % %N 	' 	'!3F 
3 
3 > >  < L L B B 	F 	F  6 M M B B* C C& 
3 
3 * *  C  CD;z-r   r  )#__conditional_annotations__rY   
__future__r   r   r   r   ro   os.pathplatformtypingr   r   r   more_itertoolsr   _pathr   compatr   distutils.errorsr   typing_extensionsr	   r
   systemr   r   dictr  r   r]   r   r  r  )rF  s   @r   <module>rR     s    #    	   5 5 *   < *i7! ! #fG^$v
 v
r~ ~BW' W't1y 1M
- M
-r   