ó
    Ñ]jŽ†  ã                  óà  • % S r SSKJr  SSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
r
SSKrSSKJr  SSKJr  SSKJrJrJrJr  \(       a  SSKJrJr  SS	KJr  SS
KJr   " S S\5      r\R:                  " \5      rS\ S'   S S jr!\!" 5       r"S\ S'   Sr#S\ S'   \RH                  " S\RJ                  5      r&S\ S'    " S S5      r'\(" 1 Sk5      r)S\ S'    S!S jr*S"S jr+\S:X  a  \+" 5         gg)#zdConcrete Python interpreter information, also used as subprocess interrogation script (stdlib only).é    )ÚannotationsN)ÚOrderedDict)Údigits)ÚTYPE_CHECKINGÚClassVarÚFinalÚ
NamedTuple)Ú	GeneratorÚMappingé   )ÚPyInfoCache)Ú
PythonSpecc                  óH   • \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S'   S	rg
)ÚVersionInfoé   ÚintÚmajorÚminorÚmicroÚstrÚreleaselevelÚserial© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__Ú__static_attributes__r   ó    ÚV/home/mande/repo/quber/.venv/lib/python3.13/site-packages/python_discovery/_py_info.pyr   r      s   ‡ ØƒJØƒJØƒJØÓØ†Kr    r   zFinal[logging.Logger]Ú_LOGGERc            	     óØ   • [        [        R                  " S/[        R                  R                  SS5      R                  5       R                  [        R                  5      Q5      5      $ )NÚ ÚPATHEXT)	Úlistr   ÚfromkeysÚosÚenvironÚgetÚlowerÚsplitÚpathsepr   r    r!   Ú_get_path_extensionsr.   $   sJ   € Ü”×$Ò$ bÐ%c¬2¯:©:¯>©>¸)ÀRÓ+H×+NÑ+NÓ+P×+VÑ+VÔWY×WaÑWaÓ+bÐ%cÓdÓeÐer    zFinal[list[str]]Ú
EXTENSIONSé   z
Final[int]Ú_32BIT_POINTER_SIZEzB
    \{ \w+  }   # sysconfig variable placeholder like {base}
    zFinal[re.Pattern[str]]Ú_CONF_VAR_REc                  ó&  • \ rS rSr% SrS5S jrS5S jrS5S jrS5S jrS5S jr	\
S6S j5       rS7S	 jrS8S
 jrS9S jr\
S:S j5       r\S;S j5       r\S;S j5       r\S;S j5       r\S<S j5       r\S<S j5       rS\R.                  4S=S jjr\S;S j5       r\S;S j5       r\S;S j5       rS;S jrS;S jr\S;S j5       r\S;S j5       r\ S>S j5       r!S?S jr"S@S jr#S@S jr$S@S jr%Sr&Sr'\ SASBS  jj5       r(\ SASBS! jj5       r)S;S" jr*SCS# jr+\  SAS$S%S$SS&.             SDS' jjj5       r,\ SES( j5       r-\ SFS) j5       r.\ SGS* j5       r/0 r0S+\1S,'   S$SS-.         SHS. jjr2              SIS/ jr3\
SJS0 j5       r4SKS1 jr5SLS2 jr6SMS3 jr7S4r8g)NÚ
PythonInfoé2   z.Contains information for a Python interpreter.c                ó„   • U R                  5         U R                  5         U R                  5         U R                  5         g ©N)Ú_init_identityÚ_init_prefixesÚ_init_schemesÚ_init_sysconfig©Úselfs    r!   Ú__init__ÚPythonInfo.__init__5   s2   € Ø×ÑÔØ×ÑÔØ×ÑÔØ×ÑÕr    c                ó<  • [         R                  U l        [        R                  " 5       U l        U R                  S:X  a  [	        [         R
                  5      U l        [        [         R                  6 U l        [        R                  " S5      [        :X  a  SOSU l        [        R                  " 5       U l        [        R                  " S5      U l        [         R"                  U l        [$        R&                  U l        [        R                  " S5      S:H  U l        g )NÚPyPyÚPé    é@   Úpy_version_nodotÚPy_GIL_DISABLEDr   )ÚsysÚplatformÚpython_implementationÚimplementationÚtupleÚpypy_version_infor   Úversion_infoÚstructÚcalcsizer1   ÚarchitectureÚ	sysconfigÚget_platformÚsysconfig_platformÚget_config_varÚversion_nodotÚversionr(   ÚnameÚfree_threadedr<   s    r!   r8   ÚPythonInfo._init_identity;   sÂ   € ÜŸ™ˆŒÜ&×<Ò<Ó>ˆÔØ×Ñ &Ó(Ü%*¬3×+@Ñ+@Ó%AˆDÔ"ä'¬×)9Ñ)9Ð:ˆÔä"(§/¢/°#Ó"6Ô:MÓ"M™BÐSUˆÔÜ"+×"8Ò"8Ó":ˆÔÜ&×5Ò5Ð6HÓIˆÔÜ—{‘{ˆŒÜ—'‘'ˆŒÜ&×5Ò5Ð6GÓHÈAÑMˆÕr    c                óž  • SS jnU" [        [        SS 5      5      U l        U" [        [        SS 5      5      U l        U" [        [        SS 5      5      U l        U" [        [        SS 5      5      U l        U" [        [        SS 5      5      U l        U" [        R                  5      U l        U" U R                  5      U l        U R                  5       U l
         [        S5        SnX l        [        R                  U l        [        R                  " 5       U l        [        [        R"                  S
S 5      U l        g ! [         a    S	n Ndf = f)Nc                óJ   • U c  S $ [         R                  R                  U 5      $ r7   )r(   ÚpathÚabspath)Úvalues    r!   Úabs_pathÚ+PythonInfo._init_prefixes.<locals>.abs_pathK   s   € Ø ™=�4ÐD¬b¯g©g¯o©o¸eÓ.DÐDr    ÚprefixÚbase_prefixÚreal_prefixÚbase_exec_prefixÚexec_prefixÚvenvTFÚencoding)r^   ú
str | NoneÚreturnrh   )ÚgetattrrG   ra   rb   rc   rd   re   Ú
executableÚoriginal_executableÚ_fast_get_system_executableÚsystem_executableÚ
__import__ÚImportErrorÚhas_venvr\   ÚgetfilesystemencodingÚfile_system_encodingÚstdoutÚstdout_encoding)r=   r_   Úhass      r!   r9   ÚPythonInfo._init_prefixesJ   s
  € ô	Eñ œw¤s¨H°dÓ;Ó<ˆŒÙ#¤G¬C°ÀÓ$EÓFˆÔÙ#¤G¬C°ÀÓ$EÓFˆÔÙ (¬´Ð6HÈ$Ó)OÓ PˆÔÙ#¤G¬C°ÀÓ$EÓFˆÔá"¤3§>¡>Ó2ˆŒÙ#+¨D¯O©OÓ#<ˆÔ Ø!%×!AÑ!AÓ!CˆÔð	Ü�vÔØˆCð ŒÜ—H‘HˆŒ	Ü$'×$=Ò$=Ó$?ˆÔ!Ü&¤s§z¡z°:¸tÓDˆÕøô ó 	ØŠCð	ús   ÃD= Ä=EÅEc           
     óÂ  • [         R                  " 5       nSU;   aX  SU l        [         R                  " 5        Vs0 s H#  o"[         R                  " USU R                  S9_M%     snU l        0 U l        g [        R                  S S S:X  a^  SU;   aX  SU l        [         R                  " 5        Vs0 s H#  o"[         R                  " USU R                  S9_M%     snU l        0 U l        g S U l        [         R                  " 5        Vs0 s H  o"[         R                  " USS9_M     snU l        U R                  5       R                  5       U l        g s  snf s  snf s  snf )	Nrf   F)ÚexpandÚschemeé   )é   é
   Ú
deb_systemÚposix_prefix)ry   )rQ   Úget_scheme_namesÚsysconfig_schemeÚget_path_namesÚget_pathÚsysconfig_pathsÚdistutils_installrG   rM   Ú_distutils_installÚcopy)r=   Úscheme_namesÚis      r!   r:   ÚPythonInfo._init_schemesb   s:  € Ü ×1Ò1Ó3ˆà�\Ó!Ø$*ˆDÔ!ä^g×^vÒ^vÔ^xó$Ú^xÐYZ”9×%Ò% a°¸d×>SÑ>SÑTÒTÑ^xñ$ˆDÔ ð &(ˆDÕ"ä×Ñ˜b˜qÐ! WÓ,°ÀÓ1MØ$2ˆDÔ!ä^g×^vÒ^vÔ^xó$Ú^xÐYZ”9×%Ò% a°¸d×>SÑ>SÑTÒTÑ^xñ$ˆDÔ ð &(ˆDÕ"à$(ˆDÔ!ÜT]×TlÒTlÔTnÓ#oÒTnÈq¤y×'9Ò'9¸!ÀEÑ'JÒ$JÑTnÑ#oˆDÔ Ø%)×%<Ñ%<Ó%>×%CÑ%CÓ%EˆDÕ"ùò$ùò$ùò $ps   º*EÂ/*EÄEc           	     ó2  • [        [        S[        [        SS 5      5      nSUb  U" 5       OS 44 VVs0 s H  u  p#Uc  M
  X#_M     snnU l        [        5       nU R                  R	                  5        H.  nUR                  S [        R                  U5       5       5        M0     UR                  S5        UR                  S5        U Vs0 s H"  of[        R                  " U=(       d    S5      _M$     snU l
        S[        R                  ;   a  U R                  5       u  U l        U l        OS	u  U l        U l        U R                  R!                  5        VVs0 s HI  u  p#U[#        U[$        5      (       a,  UR'                  U R(                  5      (       a  U R*                  OU_MK     nnnU R-                  S
U5      U l        U R-                  SU5      U l        [        [2        S[        [2        SS 5      5      U l        S U l        g s  snnf s  snf s  snnf )NÚget_makefile_filenameÚ_get_makefile_filenameÚmakefile_filenamec              3  ó*   #   • U  H	  oS S v •  M     g7f)r   éÿÿÿÿNr   )Ú.0Úks     r!   Ú	<genexpr>Ú-PythonInfo._init_sysconfig.<locals>.<genexpr>ƒ   s   é € Ð"RÒ4Q¨q Q r¥7Ò4Qùs   ‚ÚPYTHONFRAMEWORK)ÚPy_ENABLE_SHAREDÚ
INSTSONAMEÚLIBDIRr$   ÚTCL_LIBRARY©NNÚstdlibÚ
platstdlibÚmaxsizeÚmaxint)rj   rQ   Úsetr„   ÚvaluesÚupdater2   ÚfindallÚaddrT   Úsysconfig_varsr(   r)   Ú_get_tcl_tk_libsÚtcl_libÚtk_libÚitemsÚ
isinstancer   Ú
startswithra   Úsystem_prefixÚsysconfig_pathÚsystem_stdlibÚsystem_stdlib_platformrG   Úmax_sizeÚ	_creators)r=   Úmakefiler’   ÚvÚconfig_var_keysÚelementr‰   Úconfss           r!   r;   ÚPythonInfo._init_sysconfigw   sÓ  € Üœ9Ð&=¼wÄyÐRjÐlpÓ?qÓrˆð %°HÑ4H¡h¤jÈdÐSñô
ò‘�ð ó	 ˆAŠDñò
ˆŒô ›%ˆØ×+Ñ+×2Ñ2Ö4ˆGØ×"Ñ"Ñ"R´L×4HÑ4HÈÔ4QÓ"RÖRñ 5à×ÑÐ-Ô.Ø×ÑÐKÔLáM\Ó]Ê_È¤)×":Ò":¸1¿7ÀÓ"CÒCÉ_Ñ]ˆÔàœBŸJ™JÓ&Ø(,×(=Ñ(=Ó(?Ñ%ˆDŒL˜$�+à(2Ñ%ˆDŒL˜$œ+ð ×+Ñ+×1Ñ1Ô3ô
â3‘�ð ¤j°´C×&8Ñ&8¸Q¿\¹\È$Ï+É+×=VÑ=V�×"Ò"Ð\]Ò]Ù3ð 	ñ 
ð "×0Ñ0°¸5ÓAˆÔØ&*×&9Ñ&9¸,ÈÓ&NˆÔ#Ü¤ Y´¼¸XÀtÓ0LÓMˆŒØˆ�ùó9
ùò ^ùó
s   ³	HÁ HÃ)HÅAHc                 óv  • Su  p SSK n UR                  5       nUR                  S5      n  UR                  S5      nU(       a%  [        R                  R                  U5      (       a  OSn UGc   UR                  S5      n[        R                  R                  U 5      nUSR                  UR                  S5      SS 5      UR                  S5      S   /nU H’  n[        R                  R                  US	U 35      n[        R                  R                  U5      (       d  ML  [        R                  R                  [        R                  R                  US
5      5      (       d  M�  Un  O   X4$  X4$ ! UR                   a    Sn GN f = f! UR                   a     X4$ f = f! [         a     X4$ f = f)z.Detect the tcl and tk libraries using tkinter.rš   r   Nzinfo libraryzset tk_libraryzpackage require TkÚ.r{   Útkztk.tcl)ÚtkinterÚTclÚevalr(   r\   ÚisdirÚTclErrorÚdirnameÚjoinr,   Úexistsrp   )	r¦   r§   r¹   ÚtclÚ
tk_versionÚ
tcl_parentÚversion_variantsrV   Útk_lib_paths	            r!   r¥   ÚPythonInfo._get_tcl_tk_libs—   s   € ð %‰ˆð(	Û ð#Ø—f‘f“h�ØŸ(™( >Ó2�ð"Ø ŸX™XÐ&6Ó7�FÞ¤"§'¡'§-¡-°×"7Ñ"7Øà!%™ð
 ’>Ø!$§¡Ð*>Ó!?�JÜ!#§¡§¡°Ó!9�Jð #ØŸ™ ×!1Ñ!1°#Ó!6°r¸Ð!:Ó;Ø"×(Ñ(¨Ó-¨aÑ0ð(Ð$ó $4˜Ü&(§g¡g§l¡l°:ÀÀGÀ9¸~Ó&N˜Ü!Ÿw™wŸ}™}¨[×9Ñ9Ù$ÜŸ7™7Ÿ>™>¬"¯'©'¯,©,°{ÀHÓ*M×NÓNØ%0˜FÙ!ñ $4ð ˆÐð "ð
 ˆÐøð5 —{‘{ó "Ø!“Fð"ûð. —;‘;ó ØàˆÐðûôK ó 	ØðN ˆÐðQ	ús^   †F) ‹!F ­<E8 Á)F Á*E8 Á,C;F Å+F Å/F Å8FÆ
F ÆFÆF ÆF&Æ%F&Æ)
F8Æ7F8c                óh  • U R                   (       d3  U R                  b  U R                  U R                  :w  d  U R                  $ U R                   b  g[	        [
        SS5      nUc  g[
        R                  U:X  a  g[        R                  R                  U5      (       a  U$ U R                  U5      $ )z?Try to get the system executable by just looking at properties.NÚ_base_executable)rc   rb   ra   rl   rj   rG   rk   r(   r\   rÁ   Ú_try_posix_fallback_executable)r=   Úbase_executables     r!   rm   Ú&PythonInfo._fast_get_system_executableÊ   s    € ð × ×  T×%5Ñ%5Ñ%AÀd×FVÑFVÐZ^×ZeÑZeÓFeØ×+Ñ+Ð+ð ×ÑÑ'Øä!¤#Ð'9¸4Ó@ˆØÑ"Øô �>‰>˜_Ó,Øô �7‰7�>‰>˜/×*Ñ*Ø"Ð"ð ×2Ñ2°?ÓCÐCr    c           	     óÞ  • U R                   R                  U R                   R                  p2U R                  S:w  d  X#4S:  a  g[        R                  R                  U5      nSU 3SU SU 3/nU R                  S:X  a  UR                  SSSU 3SU SU 3/5        U HJ  n[        R                  R                  XF5      n[        R                  R                  U5      (       d  MH  Us  $    g)	zJFind a versioned Python binary as fallback for POSIX virtual environments.Úposix)r|   é   NÚpythonr¸   rA   ÚpypyÚpypy3)
rM   r   r   r(   r\   r¿   rJ   ÚextendrÀ   rÁ   )r=   rË   r   r   Úbase_dirÚ
candidatesÚ	candidateÚ	full_paths           r!   rÊ   Ú)PythonInfo._try_posix_fallback_executableä   sÝ   € à×(Ñ(×.Ñ.°×0AÑ0A×0GÑ0GˆuØ�7‰7�gÓ % °'Ó!9Øô —7‘7—?‘? ?Ó3ˆØ˜u˜gÐ&¨&°°°q¸¸Ð(@ÐAˆ
Ø×Ñ &Ó(Ø×Ñ˜v w°$°u°g°À$ÀuÀgÈQÈuÈgÐ@VÐWÔXã#ˆIÜŸ™Ÿ™ XÓ9ˆIÜ�w‰w�~‰~˜i×(Ó(Ø Ò ñ $ð
 r    c                ón  • U R                   R                  U5      nUc�  U R                  U R                  U R                  U R
                  4nU R                  R                  5        VVs0 s H  u  pEXEU;   a  SOU_M     nnnU R                  XS9R                  [        R                  5      nU$ s  snnf )z¢
Return the relative installation path for a given installation scheme *key*.

:param key: sysconfig installation scheme key (e.g. ``"scripts"``, ``"purelib"``).
r$   )Ú
config_var)r…   r*   ra   re   rb   rd   r¤   r¨   r¬   Úlstripr(   Úsep)r=   ÚkeyÚresultÚprefixesr’   r²   rÚ   s          r!   Úinstall_pathÚPythonInfo.install_path÷   s¢   € ð ×'Ñ'×+Ñ+¨CÓ0ˆØ‰>à—{‘{ D×$4Ñ$4°d×6FÑ6FÈ×H]ÑH]Ð]ˆHØDH×DWÑDW×D]ÑD]ÔD_Ô`ÒD_¹D¸A˜!¨£=™R°aÒ7ÑD_ˆJÑ`Ø×(Ñ(¨Ð(ÐD×KÑKÌBÏFÉFÓSˆFØˆùó as   Á*B1c            	     óÄ  • [         R                  " 5          [         R                  " S5         SSKJn   SSKJn   S S S 5        W R                  SS05      n[        [        S5      (       a  S [        l        [         R                  " 5          [         R                  " S5        UR                  SS	S
9nS S S 5        [        R                  Wl        UR!                  5         W Vs0 s H2  oD[#        USU 35      SS  R%                  [        R                  5      _M4     sn$ ! [         a    0 s sS S S 5        $ f = f! , (       d  f       GN= f! , (       d  f       N = fs  snf )NÚignorer   )Údist)ÚSCHEME_KEYSÚscript_argsz--no-user-cfgÚ
_frameworkÚinstallT)ÚcreateÚinstall_r   )ÚwarningsÚcatch_warningsÚsimplefilterÚ	distutilsrä   Údistutils.command.installrå   rp   ÚDistributionÚhasattrrG   rç   Úget_command_objr(   rÜ   ra   Úfinalize_optionsrj   rÛ   )rä   rå   Údistributionrè   rÝ   s        r!   r†   ÚPythonInfo._distutils_install  s!  € ô
 ×$Ò$Õ&Ü×!Ò! (Ô+ðÝ*ÞA÷	 'ð ×(Ñ(Ø˜?ð*
ó ˆô ”3˜×%Ñ%Ø!ŒCŒNä×$Ò$Õ&Ü×!Ò! (Ô+Ø"×2Ñ2°9ÀTÐ2ÐJˆG÷ 'ô Ÿ™ˆŒØ× Ñ Ô"ÙXcÓdÒXcÐQT”g˜g¨°#°Ð'7Ó8¸¸Ð<×DÑDÄRÇVÁVÓLÒLÑXcÑdÐdøô ó Ø‘	÷ 'Ñ&ð
ú÷ 'Ö&ú÷ 'Õ&üò es:   –D:®DÂ'EÃ#9EÄD7Ä+D:Ä6D7Ä7D:Ä:
E	Å
Ec                óL   • SR                  S U R                  SS  5       5      $ )zCThe full version as ``major.minor.micro`` string (e.g. ``3.13.2``).r¸   c              3  ó8   #   • U  H  n[        U5      v •  M     g 7fr7   ©r   ©r‘   r‰   s     r!   r“   Ú)PythonInfo.version_str.<locals>.<genexpr>#  ó   é € Ð?Ò(> 1œ˜AŸ˜Ò(>ùó   ‚r   r|   ©rÀ   rM   r<   s    r!   Úversion_strÚPythonInfo.version_str   ó&   € ð �x‰xÑ?¨×(9Ñ(9¸!¸AÑ(>Ó?Ó?Ð?r    c                óL   • SR                  S U R                  SS  5       5      $ )z>The release version as ``major.minor`` string (e.g. ``3.13``).r¸   c              3  ó8   #   • U  H  n[        U5      v •  M     g 7fr7   rø   rù   s     r!   r“   Ú1PythonInfo.version_release_str.<locals>.<genexpr>(  rû   rü   r   r{   rý   r<   s    r!   Úversion_release_strÚPythonInfo.version_release_str%  r   r    c                óR   • U R                   nSUR                   SUR                   3$ )zBThe python executable name as ``pythonX.Y`` (e.g. ``python3.13``).rÐ   r¸   )rM   r   r   )r=   rM   s     r!   Úpython_nameÚPythonInfo.python_name*  s0   € ð ×(Ñ(ˆØ˜×*Ñ*Ð+¨1¨\×-?Ñ-?Ð,@ÐAÐAr    c                ó   • U R                   SL$ )zW``True`` if this interpreter runs inside an old-style virtualenv (has ``real_prefix``).N)rc   r<   s    r!   Úis_old_virtualenvÚPythonInfo.is_old_virtualenv0  ó   € ð ×Ñ tÐ+Ð+r    c                ó   • U R                   SL$ )zN``True`` if this interpreter runs inside a PEP 405 venv (has ``base_prefix``).N)rb   r<   s    r!   Úis_venvÚPythonInfo.is_venv5  r  r    Nc                óþ   • U R                   R                  U5      nUc  gUc  U R                  nO-U R                  R                  5       nUR	                  U5        UnUR
                  " S0 UD6R                  SU5      $ )aH  
Return the sysconfig install path for a scheme *key*, optionally substituting config variables.

:param key: sysconfig path key (e.g. ``"purelib"``, ``"include"``).
:param config_var: replacement mapping for sysconfig variables; when ``None`` uses the interpreter's own values.
:param sep: path separator to use in the result.
r$   Ú/r   )r„   r*   r¤   r‡   r¡   ÚformatÚreplace)r=   rÝ   rÚ   rÜ   ÚpatternÚbases         r!   r¬   ÚPythonInfo.sysconfig_path:  sw   € ð ×&Ñ&×*Ñ*¨3Ó/ˆØ‰?ØØÑØ×,Ñ,‰Jà×&Ñ&×+Ñ+Ó-ˆDØ�K‰K˜
Ô#ØˆJØ�~Š~Ñ+ 
Ñ+×3Ñ3°C¸Ó=Ð=r    c                óT  • U R                  SU R                  R                  5        VVs0 s HI  u  pU[        U[        5      (       a,  UR                  U R                  5      (       a  U R                  OU_MK     snn5      n[        R                  R                  U5      (       d|  [        R                  R                  U R                  [        R                  R                  U R                  S5      5      5      n[        R                  R                  U5      (       a  UnU$ s  snnf )z7The path to the system include directory for C headers.ÚincludeÚheaders)r¬   r¤   r¨   r©   r   rª   ra   r«   r(   r\   rÁ   rÀ   r¿   rà   )r=   r’   r²   r\   Úfallbacks        r!   Úsystem_includeÚPythonInfo.system_includeM  sÙ   € ð ×"Ñ"Øð !×/Ñ/×5Ñ5Ô7ôâ7‘D�Að ¬*°Q¼×*<Ñ*<ÀÇÁÈdÏkÉk×AZÑAZ�D×&Ò&Ð`aÒaÙ7òó
ˆô �w‰w�~‰~˜d×#Ñ#Ü—w‘w—|‘| D§K¡K´·±·±À×ARÑARÐS\ÓA]Ó1^Ó_ˆHÜ�w‰w�~‰~˜h×'Ñ'Ø�Øˆùós   ªAD$c                óf   • U R                   =(       d    U R                  =(       d    U R                  $ )z=The prefix of the system Python this interpreter is based on.)rc   rb   ra   r<   s    r!   r«   ÚPythonInfo.system_prefix]  s$   € ð ×Ñ×B 4×#3Ñ#3×B°t·{±{ÐBr    c                óf   • U R                   =(       d    U R                  =(       d    U R                  $ )zBThe exec prefix of the system Python this interpreter is based on.)rc   rd   re   r<   s    r!   Úsystem_exec_prefixÚPythonInfo.system_exec_prefixb  s&   € ð ×Ñ×L 4×#8Ñ#8×L¸D×<LÑ<LÐLr    c           
     óä   • SR                  U R                  R                  U R                  R	                  5        VVs0 s H  u  pUR                  S5      (       a  M  X_M!     snn5      $ s  snnf )Nz{}({!r})Ú_)r  Ú	__class__r   Ú__dict__r¨   rª   )r=   r’   r²   s      r!   Ú__repr__ÚPythonInfo.__repr__g  sW   € Ø× Ñ Ø�N‰N×#Ñ#Ø"Ÿm™m×1Ñ1Ô3ÔMÒ3‘d�a¸1¿<¹<È×;L‹TˆQŠTÑ3ÒMó
ð 	
ùãMs   ¾A,ÁA,c                ó  • SR                  U R                  R                  SR                  S SU R                  4U R
                  b  U R
                  U R                  :w  a  SOS U R
                  4U R                  U R
                  U R                  1;  a  SOS U R                  4SU R                  4SU R                  4S	[        U R                  5      4S
U R                   SU R                   344 5       5      5      $ )Nz{}({})z, c              3  ó>   #   • U  H  u  pUc  M
  U SU 3v •  M     g 7f)NÚ=r   )r‘   r’   r²   s      r!   r“   Ú%PythonInfo.__str__.<locals>.<genexpr>p  s.   é € ð ò‘D�Að& ó) �1�#�Q�q�c•
òùs   ‚	�ÚspecÚsystemÚoriginalÚexerH   rV   Úencoding_fs_ioÚ-)r  r$  r   rÀ   r,  rn   rk   rl   rH   ÚreprrV   rs   ru   r<   s    r!   Ú__str__ÚPythonInfo.__str__m  s  € Ø�‰Ø�N‰N×#Ñ#Ø�I‰Iñ ð ˜TŸY™YÐ'ð  ×1Ñ1Ñ=À$×BXÑBXÐ\`×\kÑ\kÓBkñ !à!Ø×.Ñ.ð	ð  ×3Ñ3¸D×<RÑ<RÐTX×TcÑTcÐ;dÓdñ #à!Ø×0Ñ0ð	ð ˜DŸO™OÐ,Ø §¡Ð/Ø¤ T§\¡\Ó 2Ð3Ø%¨$×*CÑ*CÐ)DÀAÀd×FZÑFZÐE[Ð'\Ð]ñ#óó ó
ð 	
r    c                óÂ   • U R                   nUc  gUS:X  a  gUR                  SS5      S   nUS:X  a#  [        R                  " 5       R	                  5       n[        U5      $ )zZReturn the instruction set architecture (ISA) derived from :func:`sysconfig.get_platform`.ÚunknownÚwin32Úx86r1  r   r�   Ú
universal2)rS   ÚrsplitrH   Úmachiner+   Únormalize_isa)r=   ÚplatÚisas      r!   r;  ÚPythonInfo.machine‰  s`   € ð ×&Ñ&ˆØ‰<ØØ�7‹?ØØ�k‰k˜#˜qÓ! "Ñ%ˆØ�,ÓÜ×"Ò"Ó$×*Ñ*Ó,ˆCÜ˜SÓ!Ð!r    c                óÎ   • SR                  U R                  SR                  S U R                   5       5      U R                  (       a  SOSU R
                  U R                  5      $ )zVA specification string identifying this interpreter (e.g. ``CPython3.13.2-64-arm64``).z{}{}{}-{}-{}r¸   c              3  ó8   #   • U  H  n[        U5      v •  M     g 7fr7   rø   rù   s     r!   r“   Ú"PythonInfo.spec.<locals>.<genexpr>›  s   é € Ð7Ò%6 ”S˜—V�VÒ%6ùrü   Útr$   )r  rJ   rÀ   rM   rX   rP   r;  r<   s    r!   r,  ÚPythonInfo.spec–  sU   € ð ×$Ñ$Ø×ÑØ�H‰HÑ7 T×%6Ò%6Ó7Ó7Ø×%×%‰C¨2Ø×ÑØ�L‰Ló
ð 	
r    c                óT   • SSK Jn  U" U5        U R                  R                  5         g)za
Clear all cached interpreter information from *cache*.

:param cache: the cache store to clear.
r   )ÚclearN)Ú_cached_py_inforF  Ú_cache_exe_discovery)ÚclsÚcacherF  s      r!   Úclear_cacheÚPythonInfo.clear_cache¡  s    € õ 	+áˆeŒØ× Ñ ×&Ñ&Õ(r    c          	     óZ  • UR                   (       a  U R                  U5      (       d  gU(       a  U R                  U5      (       d  gUR                  b  UR                  U R                  :w  a  gUR                  b  UR                  U R                  :w  a  gUR
                  b  UR
                  U R
                  :w  a  gUR                  b  U R                  U5      (       d  g[        S [        U R                  SS UR                  UR                  UR                  45       5       5      $ )zÛ
Check if a given specification can be satisfied by this python interpreter instance.

:param spec: the specification to check against.
:param impl_must_match: when ``True``, the implementation name must match exactly.
Fc              3  óZ   #   • U  H!  u  pUS L =(       d    US L =(       d    X:H  v •  M#     g 7fr7   r   )r‘   ÚourÚreqs      r!   r“   Ú'PythonInfo.satisfies.<locals>.<genexpr>À  s0   é € ð 
â]‘�ð �4ˆK×4˜3 $˜;×4¨#©*Ô4Ú]ùs   ‚)+r   r|   )r\   Ú_satisfies_pathÚ_satisfies_implementationrP   r;  rX   Úversion_specifierÚ_satisfies_version_specifierÚallÚziprM   r   r   r   )r=   r,  Úimpl_must_matchs      r!   Ú	satisfiesÚPythonInfo.satisfies­  sø   € ð �9�9˜T×1Ñ1°$×7Ñ7ØÞ 4×#AÑ#AÀ$×#GÑ#GØØ×ÑÑ(¨T×->Ñ->À$×BSÑBSÓ-SØØ�<‰<Ñ#¨¯©¸¿¹Ó(DØØ×ÑÑ)¨d×.@Ñ.@ÀD×DVÑDVÓ.VØØ×!Ñ!Ñ-°d×6WÑ6WÐX\×6]Ñ6]ØÜñ 
ä × 1Ñ 1°!°AÐ 6¸¿¹ÀTÇZÁZÐQU×Q[ÑQ[Ð8\Ô]ó
ó 
ð 	
r    c                óÎ  • U R                   [        R                  R                  UR                  5      :X  a  gUR                  (       a  g[        R                  R                  U R                  5      nUR                  n[        R                  S:X  aO  [        R                  R                  U5      u  p$U(       a%  UR                  U5      (       a  US [        U5      *  OUnX#:H  $ )NTr7  )rk   r(   r\   r]   Úis_absÚbasenamerl   rG   rH   ÚsplitextÚendswithÚlen)r=   r,  r]  Ú	spec_pathÚsuffixs        r!   rR  ÚPythonInfo._satisfies_pathÅ  s£   € Ø�?‰?œbŸg™gŸo™o¨d¯i©iÓ8Ó8ØØ�;�;ØÜ—7‘7×#Ñ# D×$<Ñ$<Ó=ˆØ—I‘Iˆ	Ü�<‰<˜7Ó"Ü!Ÿw™w×/Ñ/°Ó9ÑˆHÞ5;À	×@RÑ@RÐSY×@ZÑ@Z˜	 .¤S¨£[ LÑ1Ð`iˆIØÑ$Ð$r    c                ó–   • UR                   S L =(       d5    UR                   R                  5       U R                   R                  5       :H  $ r7   )rJ   r+   )r=   r,  s     r!   rS  Ú$PythonInfo._satisfies_implementationÑ  s;   € Ø×"Ñ" dÐ*×h¨d×.AÑ.A×.GÑ.GÓ.IÈT×M`ÑM`×MfÑMfÓMhÑ.hÐhr    c                óz  • UR                   c  gU R                  nUR                    GH  nUR                  c   eUR                  nS H  nXT;   d  M
  UR	                  U5      S   n  O   UR                  S5      S-   nSR                  S UR                  UR                  UR                  /S U  5       5      nUR                  S:w  aU  US:X  d  UR                  R                  b8  S	S
SS.R                  UR                  5      =n(       a  U U UR                   3nUR                  U5      (       a  GM    g   g)NT)ÚrcÚbÚar   r¸   r   c              3  ó8   #   • U  H  n[        U5      v •  M     g 7fr7   rø   )r‘   Úcs     r!   r“   Ú:PythonInfo._satisfies_version_specifier.<locals>.<genexpr>à  s   é € ÐxÒ/w¨!œs 1Ÿv˜vÒ/wùrü   Úfinalr|   ri  rh  rg  )ÚalphaÚbetarÖ   F)rT  rM   rV   rþ   r,   ÚcountrÀ   r   r   r   r   Úpre_typer*   r   Úcontains)	r=   r,  rM   Ú	specifierÚnumeric_versionra   Ú	precisionÚreleaserb  s	            r!   rU  Ú'PythonInfo._satisfies_version_specifierÔ  s;  € Ø×!Ñ!Ñ)ØØ×(Ñ(ˆØ×/Õ/ˆIØ×$Ñ$Ñ0Ð0Ð0Ø'×3Ñ3ˆOÛ*�ØÕ,Ø&5×&;Ñ&;¸FÓ&CÀAÑ&F�OÙñ +ð (×-Ñ-¨cÓ2°QÑ6ˆIØ—h‘hÑx°×0BÑ0BÀL×DVÑDVÐXd×XjÑXjÐ/kÐlvÐmvÑ/wÓxÓxˆGà×)Ñ)¨WÓ4Ø !“^ y×'8Ñ'8×'AÑ'AÑ'MØ),°cÈÑM×QÑQÐR^×RkÑRkÓlÐl�VÕlà$˜I f X¨l×.AÑ.AÐ-BÐC�Ø×%Ñ% g×.Ô.Ùñ! 0ð" r    c                ó    • U R                   c6  U R                  [        R                  USSS9nUc  Sn[	        U5      eX l         U R                   $ )zƒ
Locate the current host interpreter information.

:param cache: interpreter metadata cache; when ``None`` results are not cached.
TF©Úraise_on_errorÚresolve_to_hostz*failed to query current Python interpreter)Ú_currentÚfrom_exerG   rk   ÚRuntimeError©rI  rJ  rÞ   Úmsgs       r!   ÚcurrentÚPythonInfo.currentî  sM   € ð �<‰<ÑØ—\‘\¤#§.¡.°%ÈÐ^c�\ÐdˆFØ‰~ØB�Ü" 3Ó'Ð'Ø!ŒLØ�|‰|Ðr    c                ó    • U R                   c6  U R                  [        R                  USSS9nUc  Sn[	        U5      eX l         U R                   $ )z®
Locate the current system interpreter information, resolving through any virtualenv layers.

:param cache: interpreter metadata cache; when ``None`` results are not cached.
Try  z1failed to query current system Python interpreter)Ú_current_systemr}  rG   rk   r~  r  s       r!   Úcurrent_systemÚPythonInfo.current_systemý  sR   € ð ×ÑÑ&Ø—\‘\¤#§.¡.°%ÈÐ^b�\ÐcˆFØ‰~ØI�Ü" 3Ó'Ð'Ø"(ÔØ×"Ñ"Ð"r    c                óH   • [         R                  " U R                  5       SS9$ )z8Serialize this interpreter information to a JSON string.r{   )Úindent)ÚjsonÚdumpsÚto_dictr<   s    r!   Úto_jsonÚPythonInfo.to_json  s   € ä�zŠz˜$Ÿ,™,›.°Ñ3Ð3r    c                ó¾   • [        U 5       Vs0 s H  oUS:w  a  [        X5      OS_M     nnUS   n[        US5      (       a  UR                  5       OUUS'   U$ s  snf )z;Convert this interpreter information to a plain dictionary.r°   NrM   Ú_asdict)Úvarsrj   rñ   r�  )r=   ÚvarÚdatarM   s       r!   r‹  ÚPythonInfo.to_dict  sf   € äUYÐZ^ÔU_Ó`ÒU_Èc¨C°;Ó,>”g˜dÔ(ÀDÒHÑU_ˆÐ`Ø˜NÑ+ˆÜ9@ÀÈy×9YÑ9Y˜|×3Ñ3Ô5Ð_kˆˆ^ÑØˆùò as   ŽATF)rz  Úignore_cacher{  Úenvc          	     ó2  • SSK Jn  Uc  [        R                  OUnU" XXX4S9n[	        U[
        5      (       a  U(       a   UR                  X(5      nU$ U$ ! [         a6  n	U(       a  e [        R                  SUR                  U	5        Sn Sn	A	U$ Sn	A	ff = f)aÖ  
Get the python information for a given executable path.

:param exe: path to the Python executable.
:param cache: interpreter metadata cache; when ``None`` results are not cached.
:param raise_on_error: raise on failure instead of returning ``None``.
:param ignore_cache: bypass the cache and re-query the interpreter.
:param resolve_to_host: resolve through virtualenv layers to the system interpreter.
:param env: environment mapping; defaults to :data:`os.environ`.
r   )r}  N)r•  rz  r”  z-ignore %s due cannot resolve system due to %r)rG  r}  r(   r)   r©   r4   Úresolve_to_systemÚ	Exceptionr"   Úinforl   )
rI  r/  rJ  rz  r”  r{  r•  r}  ÚproposedÚ	exceptions
             r!   r}  ÚPythonInfo.from_exe  s�   € õ* 	.à™KŒb�jŠj¨SˆÙ˜C¨À^Ñoˆä�h¤
×+Ñ+¶ð Ø#×5Ñ5°eÓF�ð ˆˆxˆøô ó  Þ!ØÜ—‘ÐLÈh×NjÑNjÐluÔvØ”Øˆûð ús   ÁA Á
BÁ +BÂBc                ól   • [         R                  " U5      nU R                  UR                  5       5      $ )zl
Deserialize interpreter information from a JSON string.

:param payload: JSON produced by :meth:`to_json`.
)r‰  ÚloadsÚ	from_dictr‡   )rI  ÚpayloadÚraws      r!   Ú	from_jsonÚPythonInfo.from_json;  s'   € ô �jŠj˜Ó!ˆØ�}‰}˜SŸX™X›ZÓ(Ð(r    c                ó`   • [        S0 US   D6US'   U " 5       nUR                  5       Ul        U$ )zr
Reconstruct a :class:`PythonInfo` from a plain dictionary.

:param data: dictionary produced by :meth:`to_dict`.
rM   r   )r   r‡   r%  )rI  r’  rÞ   s      r!   rŸ  ÚPythonInfo.from_dictE  s4   € ô  +ÑB¨T°.Ñ-AÑBˆˆ^ÑÙ“ˆØŸ)™)›+ˆŒØˆr    c                ó"  • UR                   n[        5       nUR                  Gc)  UR                  =(       d    UR                  =(       d    UR
                  nXT;   aÎ  [        U5      S:X  a(  [        R                  SU5        UR                   Ul        O»[        UR                  5       SS9 H  u  nu  px[        R                  SXgU5        M!     [        R                  S[        U5      S-   XR5        SR                  SR                  UR                  5       5      5      n	[        U	5      eX$U'   UR!                  XSS9nUR                  c  GM)  UR                   UR                  :w  a!  U R#                  UR                  U5      n
U
b  U
nX2l         U$ )	zË
Walk virtualenv/venv prefix chains to find the underlying system interpreter.

:param cache: interpreter metadata cache; when ``None`` results are not cached.
:param target: the interpreter to resolve.
r   z$%r links back to itself via prefixes)Ústartz%d: prefix=%s, info=%rz prefixes are causing a circle {}Ú|F)ra   Úexact)rk   r   rn   rc   rb   ra   r`  r"   r™  Ú	enumerater¨   Úerrorr  rÀ   Úkeysr~  Údiscover_exer}  )rI  rJ  ÚtargetÚstart_executablerß   ra   ÚatÚprC  r€  Úresolveds              r!   r—  ÚPythonInfo.resolve_to_systemQ  sU  € ð "×,Ñ,ÐÜ“=ˆØ×&Ñ&Ò.Ø×'Ñ'×N¨6×+=Ñ+=×NÀÇÁˆFØÓ!Ü�x“= AÓ%Ü—L‘LÐ!GÈÔPØ/5×/@Ñ/@�FÔ,ØÜ"+¨H¯N©NÓ,<ÀAÔ"F‘J�B™˜Ü—M‘MÐ":¸BÀ1ÖEñ #Gä—‘Ð6¼¸H»ÈÑ8IÈ6ÔZØ8×?Ñ?ÀÇÁÈÏÉËÓ@YÓZ�Ü" 3Ó'Ð'Ø%�VÑØ×(Ñ(¨ÀUÐ(ÐKˆFð ×&Ñ&Ô.ð ×Ñ × 8Ñ 8Ó8Ø—|‘| F×$<Ñ$<¸eÓDˆHØÑ#Ø!�Ø,ÔØˆr    z,ClassVar[dict[tuple[str, bool], PythonInfo]]rH  )r©  r•  c               ó   • X#4nXPR                   ;   a:  U(       a3  [        R                  SX#U R                   U   5        U R                   U   $ [        R                  SX5        U R                  5       nU R	                  U5      n/ nUc  [
        R                  OUnU H4  n	U H+  n
U R                  XX¨XCS9nUc  M  X°R                   U'   Us  s  $    M6     USL a]  U(       aV  U R                  X€5      n[
        R                  R                  U5      nX°R                   U'   [        R                  SX¼5        U$ SR                  SR                  U5      [
        R                  R                  U5      5      n[        U5      e)a#  
Discover a matching Python executable under a given *prefix* directory.

:param cache: interpreter metadata cache.
:param prefix: directory prefix to search under.
:param exact: when ``True``, require an exact version match.
:param env: environment mapping; defaults to :data:`os.environ`.
z)discover exe from cache %s - exact %s: %rzdiscover exe for %s in %s)r©  FzFno exact match found, chosen most similar of %s within base folders %szfailed to detect {} in {}r¨  )rH  r"   ÚdebugÚ_find_possible_exe_namesÚ_find_possible_foldersr(   r)   Ú
_check_exeÚ_select_most_likelyr-   rÀ   r  r~  )r=   rJ  ra   r©  r•  rÝ   Úpossible_namesÚpossible_foldersÚ
discoveredÚfolderrW   r™  Úfoldersr€  s                 r!   r­  ÚPythonInfo.discover_exer  sP  € ð  ˆmˆØ×+Ñ+Ó+¶Ü�M‰MÐEÀvÐVZ×VoÑVoÐpsÑVtÔuØ×,Ñ,¨SÑ1Ð1Ü�‰Ð1°4Ô@Ø×6Ñ6Ó8ˆØ×6Ñ6°vÓ>ÐØˆ
Ø™KŒb�jŠj¨SˆÛ&ˆFÛ&�Ø—‘ u°dÈ�ÐY�ØÓ#Ø59×-Ñ-¨cÑ2Ø”Kó	 'ñ 'ð �EŠ>žjØ×+Ñ+¨JÓ=ˆDÜ—j‘j—o‘oÐ&6Ó7ˆGØ-1×%Ñ% cÑ*Ü�M‰MÐbÐdhÔrØˆKØ)×0Ñ0°·±¸.Ó1IÌ2Ï:É:Ï?É?Ð[kÓKlÓmˆÜ˜3ÓÐr    c               óâ  • [         R                  R                  X#5      n[         R                  R                  U5      (       d  g U R	                  XqSSUS9nUc  g S HŽ  n	[        X‰5      n
[        X	5      nX«:w  d  M   U	S:X  a/  SR                  S U
 5       5      SR                  S U 5       5      pºUR                  n[        R                  SXÉX«5        USL a  UR                  U5          g    U$ )	NF)r{  rz  r•  )rJ   rP   r;  rM   rM   r¸   c              3  ó8   #   • U  H  n[        U5      v •  M     g 7fr7   rø   rù   s     r!   r“   Ú(PythonInfo._check_exe.<locals>.<genexpr>¯  s   é € Ð.Eºu¸!¬s°1¯v¨vºuùrü   c              3  ó8   #   • U  H  n[        U5      v •  M     g 7fr7   rø   rù   s     r!   r“   rÂ  ¯  s   é € ÐOiÒ`hÐ[\ÔPSÐTU×PVÐPVÒ`hùrü   z2refused interpreter %s because %s differs %s != %s)
r(   r\   rÀ   rÁ   r}  rj   rk   r"   rµ  Úappend)r=   rJ  r½  rW   r¼  r•  r©  Úexe_pathr™  ÚitemÚfoundÚsearchedrk   s                r!   r¸  ÚPythonInfo._check_exeš  sß   € ô —7‘7—<‘< Ó-ˆÜ�w‰w�~‰~˜h×'Ñ'ØØ�}‰}˜X¸eÐTYÐ_bˆ}ÐcˆØ‰<ØÛQˆDÜ˜DÓ'ˆEÜ˜tÓ*ˆHØÕ Ø˜>Ó)Ø&)§h¡hÑ.E¹uÓ.EÓ&EÀsÇxÁxÑOiÑ`hÓOiÓGi˜8Ø!Ÿ_™_�
Ü—‘ÐRÐT^ÐfkÔvØ˜E’>Ø×%Ñ% dÔ+Øð ñ Rð ˆKr    c                ó2   ^• SU4S jjn[        XSS9nUS   $ )Nc           	     ó˜  >• U R                   TR                   :H  U R                  R                  TR                  R                  :H  U R                  R                  TR                  R                  :H  U R                  TR                  :H  U R
                  TR
                  :H  U R                  R                  TR                  R                  :H  U R                  R                  TR                  R                  :H  U R                  R                  TR                  R                  :H  /n[        S [        [        U5      5       5       5      $ )Nc              3  óB   #   • U  H  u  pU(       a  S U-  OSv •  M     g7f)r   r   Nr   )r‘   ÚposÚmatchs      r!   r“   ÚBPythonInfo._select_most_likely.<locals>.sort_by.<locals>.<genexpr>È  s   é € ÐaÒD`±j°c¦E˜˜Sš¨qÔ0ÒD`ùs   ‚)rJ   rM   r   r   rP   r;  r   r   r   Úsumrª  Úreversed)r™  Úmatchesr®  s     €r!   Úsort_byÚ/PythonInfo._select_most_likely.<locals>.sort_by»  s  ø€ ð ×#Ñ# v×'<Ñ'<Ñ<Ø×!Ñ!×'Ñ'¨6×+>Ñ+>×+DÑ+DÑDØ×!Ñ!×'Ñ'¨6×+>Ñ+>×+DÑ+DÑDØ×!Ñ! V×%8Ñ%8Ñ8Ø—‘ §¡Ñ.Ø×!Ñ!×'Ñ'¨6×+>Ñ+>×+DÑ+DÑDØ×!Ñ!×.Ñ.°&×2EÑ2E×2RÑ2RÑRØ×!Ñ!×(Ñ(¨F×,?Ñ,?×,FÑ,FÑFð	ˆGô ÑaÄIÌhÐW^ÓN_ÔD`ÓaÓaÐar    T)rÝ   Úreverser   )r™  r4   ri   r   )Úsorted)r¼  r®  rÓ  Úsorted_discovereds    `  r!   r¹  ÚPythonInfo._select_most_likely¹  s#   ø€ ÷	bô # :ÀDÑIÐØ  Ñ#Ð#r    c                ój  • [        5       n[        5       nS U[        R                  R                  U R                  5      '   S X0R                  '   S U[        R                  R                  U R
                  5      '   S X0R
                  '   U Hd  n[        R                  R                  U5      nUR                  U R                  5      (       d  MD  U[        U R                  5      S  nS X! U 3'   Mf     S X!'   U Vs/ s H+  n[        R                  R                  U5      (       d  M)  UPM-     sn$ s  snf r7   )r   r(   r\   Úrealpathrk   rl   r¿   rª   ra   r`  rÁ   )r=   Úinside_folderÚcandidate_folderÚexecutablesr/  r  Úrelativer‰   s           r!   r·  Ú!PythonInfo._find_possible_foldersÍ  sò   € Ü&›=ÐÜ!“mˆØ9=ˆ”B—G‘G×$Ñ$ T§_¡_Ó5Ñ6Ø'+ˆ—O‘OÑ$ØBFˆ”B—G‘G×$Ñ$ T×%=Ñ%=Ó>Ñ?Ø04ˆ×,Ñ,Ñ-ÛˆCÜ—7‘7—?‘? 3Ó'ˆDØ�‰˜tŸ{™{×+Ó+Ø¤ D§K¡KÓ 0Ð 2Ð3�ØAEÐ  ?°8°*Ð!=Ó>ñ	 ð +/ÐÑ'Ù+ÓAÒ+�a¬r¯w©w¯~©~¸a×/@—Ñ+ÑAÐAùÒAs   Ã;(D0Ä'D0c           
     ó˜  • [        5       nU R                  5        H”  nS H‹  nSR                  S U R                  S U  5       5      nS/nU R                  (       a  UR                  S5        U H8  nSU R                   3S4 H   n[         H  nU U U U U 3n	S X'   M     M"     M:     M�     M–     [        UR                  5       5      $ )N)r|   r{   r   r   r¸   c              3  ó8   #   • U  H  n[        U5      v •  M     g 7fr7   rø   rù   s     r!   r“   Ú6PythonInfo._find_possible_exe_names.<locals>.<genexpr>â  s   é € Ð"JÒ3I¨a¤3 q§6 6Ò3Iùrü   r$   rC  r1  )
r   Ú_possible_baserÀ   rM   rX   rÄ  rP   r/   r&   r¬  )
r=   Úname_candidaterW   r°  rV   ÚmodsÚmodÚarchÚextrÖ   s
             r!   r¶  Ú#PythonInfo._find_possible_exe_namesÞ  sÌ   € Ü$›ˆØ×'Ñ'Ö)ˆDÛ"�ØŸ(™(Ñ"J°4×3DÑ3DÀSÀbÑ3IÓ"JÓJ�Ø�t�Ø×%×%Ø—K‘K Ô$Û�CØ#$ T×%6Ñ%6Ð$7Ð!8¸"Ó =˜ß#-˜CØ+/¨&°°	¸#¸¸t¸fÀSÀEÐ(J˜IØ8<˜NÓ5ó $.ó !>ó  ó #ñ *ô �N×'Ñ'Ó)Ó*Ð*r    c              #  óÂ  #   • [        5       n[        R                  R                  [        R                  R	                  U R
                  5      5      S   R                  [        5      nS X'   S XR                  '   SU;   a  US	 S US'   U HO  nUR                  5       nUv •  SSK
Jn  U" 5       (       d  M+  X4:w  a  Uv •  UR                  5       nXc:w  d  MK  Uv •  MQ     g 7f)Nr   rÐ   r   )Úfs_is_case_sensitive)r   r(   r\   r^  r]  rk   Úrstripr   rJ   r+   Ú_compatrë  Úupper)r=   Úpossible_baser]  r  r+   rë  rî  s          r!   rã  ÚPythonInfo._possible_baseí  s¹   é € Ü#›ˆÜ—7‘7×#Ñ#¤B§G¡G×$4Ñ$4°T·_±_Ó$EÓFÀqÑI×PÑPÔQWÓXˆØ"&ˆÑØ-1ˆ×)Ñ)Ñ*à�}Ó$Ø˜hÐ'Ø"&ˆ�hÑÛ!ˆDØ—J‘J“LˆEØŠKÝ5á#×%Ó%Ø“=Ø’JØŸ
™
›�Ø•=Ø”Kò "ùs   ‚B0CÂ6CÃ	C)!r°   rP   rd   rb   r…   re   rk   rs   rX   rq   rJ   r¯   rl   r(   r\   rH   ra   rL   rc   ru   rQ   r„   rS   r�   r¤   rn   r­   r®   r¦   r§   rV   rM   rU   ©ri   ÚNone)ri   ztuple[str | None, str | None])ri   rh   )rË   r   ri   rh   )rÝ   r   ri   r   )ri   zdict[str, str])ri   r   )ri   Úbool)rÝ   r   rÚ   zdict[str, str] | NonerÜ   r   ri   r   )rJ  r   ri   rò  )r,  r   rX  ró  ri   ró  )r,  r   ri   ró  r7   )rJ  úPyInfoCache | Noneri   r4   )ri   údict[str, object])r/  r   rJ  rô  rz  ró  r”  ró  r{  ró  r•  úMapping[str, str] | Noneri   úPythonInfo | None)r   r   ri   r4   )r’  rõ  ri   r4   )rJ  rô  r®  r4   ri   r4   )
rJ  r   ra   r   r©  ró  r•  rö  ri   r4   )rJ  rô  r½  r   rW   r   r¼  úlist[PythonInfo]r•  zMapping[str, str]r©  ró  ri   r÷  )r¼  rø  r®  r4   ri   r4   )rÛ  r   ri   ú	list[str]©ri   rù  )ri   zGenerator[str, None, None])9r   r   r   r   Ú__doc__r>   r8   r9   r:   r;   Ústaticmethodr¥   rm   rÊ   rà   r†   Úpropertyrþ   r  r  r
  r  r(   rÜ   r¬   r  r«   r   r&  r3  r;  r,  ÚclassmethodrK  rY  rR  rS  rU  r„  r|  r�  r…  rŒ  r‹  r}  r¢  rŸ  r—  rH  r   r­  r¸  r¹  r·  r¶  rã  r   r   r    r!   r4   r4   2   s  ‡ Ù8ôôNôEô0Fô*ð@ ó0ó ð0ôdDô4ô&ð óeó ðeð4 ó@ó ð@ð ó@ó ð@ð óBó ðBð
 ó,ó ð,ð ó,ó ð,ð LPÐ\^×\bÑ\bö >ð& óó ðð óCó ðCð óMó ðMô
ô
ð8 ó
"ó ð
"ð ó
ó ð
ð ó	)ó ð	)ô
ô0
%ôiôð. €OØ€Hàõó ðð õ#ó ð#ô4ôð ð %)ð!ð
  $Ø"Ø $Ø(,ñ!àð!ð "ð!ð
 ð!ð ð!ð ð!ð &ð!ð 
õ!ó ð!ðF ó)ó ð)ð ó	ó ð	ð óó ðð< JLÐÐFÓKð Ø(,ñ& àð& ð ð& ð
 ð& ð &ð& ð 
õ& ðPà!ðð ðð ð	ð
 %ðð ðð ðð 
ôð> ó$ó ð$ô&Bô"+÷ r    r4   >
   Úppcr8  Úarm64Úppc64Ús390xÚx86_64Úppc64leÚriscv64Úsparc64Úloongarch64zfrozenset[str]ÚKNOWN_ARCHITECTURESc                óZ   • U R                  5       nSSSSSSSSSSS.
R                  X5      $ )	uÚ   
Normalize an ISA (instruction set architecture) string to a canonical form.

Known aliases are mapped (e.g. ``amd64`` â†’ ``x86_64``, ``aarch64`` â†’ ``arm64``).
Unrecognized values are lowercased and returned as-is.
r  r   r8  rÿ  r  r  r  )
Úamd64Úaarch64Úi386Úi486Úi586Úi686ÚpowerpcÚ	powerpc64Úpowerpc64leÚsparcv9)r+   r*   )r>  Úlows     r!   r<  r<    sB   € ð �)‰)‹+€CàØØØØØØØØ Øñ÷ 
�cˆ#ƒmðr    c            
     ó¼  • [         R                  SS  n [        U 5      S:¼  a  U S   nU SS  n OSn[        U 5      S:¼  a  U S   nU SS  n OSn[         R                  S S U -   [         l        [        5       R	                  5       n[         R
                  R                  SR                  US S S2   X2S S S2   45      5        [         R
                  R                  5         g )Nr   r   r$   r�   )	rG   Úargvr`  r4   rŒ  rt   ÚwriterÀ   Úflush)r  Ústart_cookieÚ
end_cookierÞ   s       r!   Ú_mainr  ,  sÁ   € Ü�8‰8�A�Bˆ<€Dä
ˆ4ƒy�Aƒ~Ø˜A‘wˆØ�A�Bˆx‰àˆä
ˆ4ƒy�Aƒ~Ø˜!‘Wˆ
Ø�A�Bˆx‰àˆ
ä�x‰x˜˜ˆ|˜dÑ"„C„Hä‹\×!Ñ!Ó#€FÜ‡J�J×Ñ�R—W‘W˜l©4¨R¨4Ñ0°&ÁTÀrÀTÑ:JÐKÓLÔMÜ‡J�J×ÑÕr    Ú__main__rú  )r>  r   ri   r   rñ  ),rû  Ú
__future__r   r‰  Úloggingr(   rH   ÚrerN   rG   rQ   rë   Úcollectionsr   Ústringr   Útypingr   r   r   r	   Úcollections.abcr
   r   Ú_cacher   Ú_py_specr   r   Ú	getLoggerr   r"   r   r.   r/   r1   ÚcompileÚVERBOSEr2   r4   Ú	frozensetr  r<  r  r   r    r!   Ú<module>r*     sð   ðÚ jå "ã Û Û 	Û Û 	Û Û 
Û Û Ý #Ý ß =Ó =æß2å#Ý$ô�*ô ð ")×!2Ò!2°8Ó!<€Ð	Ó <ôfñ  4Ó5€
ÐÓ 5Ø"#Ð �ZÓ #Ø')§z¢zðð ‡J�Jó	(€Ð$ó ÷N ñ N ñb '0ò 1ó 'Ð �^ó ðôô,ð, ˆzÓÙ	…Gð r    