§
    !xÅj  ã                  ó$  — d dl mZ d dlZd dlZd dlmZ d dlmZ d dlm	Z	m
Z
mZ d dlmZ d dlmZ ed         Z G d	„ d
ee¦  «        Z ed¬¦  «         G d„ d¦  «        ¦   «         Zd(d„Zd(d„Zd)d„Zd*d„Zd(d„Zd+d„Zd,d-d„Z	 d.d/d%„Z	 d.d0d'„ZdS )1é    )ÚannotationsN)Ú	dataclass)ÚEnum)ÚDistributionÚPackageNotFoundErrorÚdistribution)ÚPath)ÚLiteral)ÚaddÚlockc                  ó2   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
S )Ú	InstallerÚpipzuv-pipz
uv-projectzuv-toolÚpipxÚbrewÚcondaÚmambaÚunknownN)Ú__name__Ú
__module__Ú__qualname__ÚPIPÚUV_PIPÚUVÚUV_TOOLÚPIPXÚBREWÚCONDAÚMAMBAÚUNKNOWN© ó    úIC:\Projects\Historical\venv\Lib\site-packages\detect_installer/_detect.pyr   r      s;   € € € € € Ø
€CØ€FØ	€BØ€GØ€DØ€DØ€EØ€EØ€G€G€Gr"   r   T)Úfrozenc                  ó$   — e Zd ZU ded<   ded<   dS )ÚInstallerInfor   Ú	installerú
str | NoneÚupgrade_cmdN)r   r   r   Ú__annotations__r!   r"   r#   r&   r&      s*   € € € € € € àÐÐÑØÐÐÑÐÐr"   r&   ÚreturnÚboolc                 ó:   — dt           j        v pdt           j        v S )zDCheck whether the current environment is inside a pipx-managed venv.z
pipx/venvsz
pipx\venvs©ÚsysÚprefixr!   r"   r#   Ú_is_pipx_environmentr1       s   € ð �3œ:Ð%ÐD¨½#¼*Ð)DÐDr"   c                 ó:   — dt           j        v pdt           j        v S )zGCheck whether the current environment is inside a uv tool-managed venv.z
/uv/tools/z
\uv\tools\r.   r!   r"   r#   Ú_is_uv_tool_environmentr3   &   s   € ð �3œ:Ð%ÐF¨½C¼JÐ)FÐFr"   c                 óp   — t           j                             d¦  «        rt          j        nt          j        S )zDReturn MAMBA if the Mamba executable is configured, otherwise CONDA.Ú	MAMBA_EXE)ÚosÚenvironÚgetr   r   r   r!   r"   r#   Ú_detect_conda_variantr9   ,   s%   € õ !œjŸnšn¨[Ñ9Ô9ÐN�9Œ?ˆ?½y¼ÐNr"   úInstaller | Nonec                 óþ  ‡— t           j                             dd¦  «        } | rgt           j                             t
          j        ¦  «                             t           j                             | ¦  «        ¦  «        rt          ¦   «         S t
          j         	                    ¦   «         }| 
                    dd¦  «                             d¦  «        }dŠt          ˆfd„|D ¦   «         ¦  «        rt          ¦   «         S dS )a7  Detect whether the current environment is a Conda (or Mamba) environment.

    Checks in two ways:
    - CONDA_PREFIX env var being set (i.e. a conda env is activated)
    - sys.prefix path containing a known conda distribution directory name

    Returns the installer, or None if not a conda environment.
    ÚCONDA_PREFIXÚ ú\ú/)r   Ú	minicondaÚ	miniforgeÚ
mambaforgec              3  óB   •K  — | ]}|                      ‰¦  «        V — Œd S ©N)Ú
startswith)Ú.0ÚpartÚconda_prefixess     €r#   ú	<genexpr>z,_detect_conda_environment.<locals>.<genexpr>F   s/   øè è € Ð
=Ð
=¨tˆ4�?Š?˜>Ñ*Ô*Ð
=Ð
=Ð
=Ð
=Ð
=Ð
=r"   N)r6   r7   r8   ÚpathÚnormcaser/   r0   rE   r9   ÚlowerÚreplaceÚsplitÚany)Úconda_prefixÚprefix_lowerÚpartsrH   s      @r#   Ú_detect_conda_environmentrS   2   sÝ   ø€ õ ”:—>’> .°"Ñ5Ô5€LØð '�œ×(Ò(­¬Ñ4Ô4×?Ò?Ý
Œ×Ò˜Ñ&Ô&ñô ð 'õ %Ñ&Ô&Ð&å”:×#Ò#Ñ%Ô%€LØ× Ò   sÑ+Ô+×1Ò1°#Ñ6Ô6€EØF€Nå
Ð
=Ð
=Ð
=Ð
=°uÐ
=Ñ
=Ô
=Ñ=Ô=ð 'Ý$Ñ&Ô&Ð&àˆ4r"   c                 óv   ‡ — t           j                             ¦   «         Š t          ˆ fd„dD ¦   «         ¦  «        S )zBCheck whether the Python executable lives under a Homebrew prefix.c              3  ó    •K  — | ]}|‰v V — Œ	d S rD   r!   )rF   ÚpÚexes     €r#   rI   z'_is_brew_environment.<locals>.<genexpr>O   s8   øè è € ð ð ØˆˆSˆðð ð ð ð ð r"   )z/opt/homebrew/z/usr/local/cellar/z/home/linuxbrew/)r/   Ú
executablerL   rO   )rW   s   @r#   Ú_is_brew_environmentrY   L   sN   ø€ å
Œ.×
Ò
Ñ
 Ô
 €CÝð ð ð ð ØVðñ ô ñ ô ð r"   Údistr   r(   c                óŒ   — |                       d¦  «        x}€dS |                     ¦   «                              ¦   «         }|r|ndS )zARead the INSTALLER metadata file from a distribution, if present.Ú	INSTALLERN)Ú	read_textÚstriprL   )rZ   Úvalues     r#   Ú_get_installer_metadatar`   T   sH   € ð —’ Ñ,Ô,Ð,ˆÐ5Øˆtà�KŠK‰MŒM×ÒÑ!Ô!€EàÐ#ˆ5ˆ5˜tÐ#r"   é   Ú	max_depthÚintc                óž   — t          t          j        ¦  «        }t          | ¦  «        D ]#}|j        }|dz                       ¦   «         r dS Œ$dS )zHCheck whether a uv.lock file exists in a parent directory of sys.prefix.zuv.lockTF)r	   r/   r0   ÚrangeÚparentÚexists)rb   rf   Ú_s      r#   Ú_has_uv_lockri   _   s]   € õ •#”*ÑÔ€Få�9ÑÔð ð ˆØ”ˆà�YÑ×&Ò&Ñ(Ô(ð 	Ø�4�4ð	ð ˆ5r"   r   r'   Úpackage_nameÚstrÚuv_upgrade_strategyÚUvUpgradeStrategyc                óH  — | t           j        k    r|dk    rd|› �S d|› d|› �S t           j        d|› �t           j        d|› �t           j        d|› �t           j        d|› �t           j        d	|› �t           j        d
|› �t           j        d|› �i}| 	                    | ¦  «        S )zFReturn the shell command to upgrade a package for the given installer.r   zuv lock --upgrade-package zuv add z --upgrade-package zpip install -U zuv pip install --upgrade zuv tool upgrade zpipx upgrade zbrew upgrade zconda update zmamba update )
r   r   r   r   r   r   r   r   r   r8   )r'   rj   rl   Úcommandss       r#   Ú_get_upgrade_cmdrp   m   sÏ   € ð •I”LÒ Ð Ø &Ò(Ð(Ø>°Ð>Ð>Ð>àH˜ÐHÐH¸,ÐHÐHÐHõ 	ŒÐ7¨Ð7Ð7ÝÔÐD°lÐDÐDÝÔÐ<¨lÐ<Ð<ÝŒÐ6¨Ð6Ð6ÝŒÐ6¨Ð6Ð6ÝŒÐ7¨Ð7Ð7ÝŒÐ7¨Ð7Ð7ð&€Hð �<Š<˜	Ñ"Ô"Ð"r"   úInstallerInfo | Nonec                ód  ‡ ‡— d	ˆ ˆfd„}	 t          ‰ ¦  «        }n# t          $ r Y dS w xY wt          ¦   «         r |t          j        ¦  «        S t          ¦   «         r |t          j        ¦  «        S t          ¦   «         x}r ||¦  «        S t          ¦   «         r |t          j	        ¦  «        S t          |¦  «        }|dk    r8t          ¦   «         r |t          j        ¦  «        S  |t          j        ¦  «        S |dk    r |t          j        ¦  «        S t          t          j        d¦  «        S )
zuDetect which installer was used to install the given package.

    Returns None if the package is not installed.
    r'   r   r+   r&   c                óB   •— t          | t          | ‰‰¦  «        ¦  «        S rD   )r&   rp   )r'   rj   rl   s    €€r#   Ú_resultz!detect_installer.<locals>._result�   s(   ø€ ÝØÝ˜Y¨Ð6IÑJÔJñ
ô 
ð 	
r"   NÚuvr   )r'   r   r+   r&   )r   r   r1   r   r   r3   r   rS   rY   r   r`   ri   r   r   r   r&   r    )rj   rl   rt   rZ   Úconda_resultÚmetadata_values   ``    r#   Údetect_installerrx   ‡   s`  øø€ ð
ð 
ð 
ð 
ð 
ð 
ð 
ðÝ˜LÑ)Ô)ˆˆøÝð ð ð Øˆtˆtðøøøõ ÑÔð 'Øˆw•y”~Ñ&Ô&Ð&åÑ Ô ð *Øˆw•yÔ(Ñ)Ô)Ð)å0Ñ2Ô2Ð2€|ð %Øˆw�|Ñ$Ô$Ð$åÑÔð 'Øˆw•y”~Ñ&Ô&Ð&õ -¨TÑ2Ô2€Nà˜ÒÐÝ‰>Œ>ð 	)Ø�7�9œ<Ñ(Ô(Ð(Øˆw•yÔ'Ñ(Ô(Ð(à˜ÒÐØˆw•y”}Ñ%Ô%Ð%õ �Ô*¨DÑ1Ô1Ð1s   ‹ ›
)¨))r+   r,   )r+   r   )r+   r:   )rZ   r   r+   r(   )ra   )rb   rc   r+   r,   )r   )r'   r   rj   rk   rl   rm   r+   r(   )rj   rk   rl   rm   r+   rq   )Ú
__future__r   r6   r/   Údataclassesr   Úenumr   Úimportlib.metadatar   r   r   Úpathlibr	   Útypingr
   rm   rk   r   r&   r1   r3   r9   rS   rY   r`   ri   rp   rx   r!   r"   r#   ú<module>r      së  ðØ "Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø 
€
€
€
Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OØ Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à˜MÔ*Ð ð	ð 	ð 	ð 	ð 	��Tñ 	ô 	ð 	ð €�$ÐÑÔðð ð ð ð ñ ô ñ Ôðð
Eð Eð Eð EðGð Gð Gð GðOð Oð Oð Oðð ð ð ð4ð ð ð ð$ð $ð $ð $ðð ð ð ð ð" .3ð#ð #ð #ð #ð #ð8 .3ð-2ð -2ð -2ð -2ð -2ð -2ð -2r"   