
    Kuic                       U d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	m
Z
 d dlmZmZ d dlmZ ddlmZmZmZ  ej(                  e      Z e ej0                               Z eed	d      Zd
ed<   ddZddZddZddZ g dZ! ejD                  d      e!jG                  d       	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ$ddZ%ddZ&ddZ'y)    )annotationsN)Callable)InvalidSchemeCombinationUserInstallationInvalid)SCHEME_KEYSScheme)running_under_virtualenv   )change_rootget_major_minor_versionis_osx_frameworkget_preferred_schemezCallable[[str], str] | None_PREFERRED_SCHEME_APIc                 D    dt         v xr t                xr
 t               S )a  Check for Apple's ``osx_framework_library`` scheme.

    Python distributed by Apple's Command Line Tools has this special scheme
    that's used when:

    * This is a framework build.
    * We are installing into the system prefix.

    This does not account for ``pip install --prefix`` (also means we're not
    installing to the system prefix), which should use ``posix_prefix``, but
    logic here means ``_infer_prefix()`` outputs ``osx_framework_library``. But
    since ``prefix`` is not available for ``sysconfig.get_default_scheme()``,
    which is the stdlib replacement for ``_infer_prefix()``, presumably Apple
    wouldn't be able to magically switch between ``osx_framework_library`` and
    ``posix_prefix``. ``_infer_prefix()`` returning ``osx_framework_library``
    means its behavior is consistent whether we use the stdlib implementation
    or our own, and we deal with this special case in ``get_scheme()`` instead.
    osx_framework_library)_AVAILABLE_SCHEMESr	   r        l/root/.openclaw/workspace/chatterbox_venv/lib/python3.12/site-packages/pip/_internal/locations/_sysconfig.py _should_use_osx_framework_prefixr   !   s+    ( 	 #55 	(**	r   c                    t         rt        d      S t               ryt        j                  j                   dt
        j                   } | t        v r| S t        j                  j                  t        v rt        j                  j                  S t
        j                   d}|t        v r|S t
        j                  t        v rt
        j                  S y)a!  Try to find a prefix scheme for the current platform.

    This tries:

    * A special ``osx_framework_library`` for Python distributed by Apple's
      Command Line Tools, when not running in a virtual environment.
    * Implementation + OS, used by PyPy on Windows (``pypy_nt``).
    * Implementation without OS, used by PyPy on POSIX (``pypy``).
    * OS + "prefix", used by CPython on POSIX (``posix_prefix``).
    * Just the OS name, used by CPython on Windows (``nt``).

    If none of the above works, fall back to ``posix_prefix``.
    prefixr   __prefixposix_prefix)r   r   sysimplementationnameosr   )implementation_suffixedsuffixeds     r   _infer_prefixr"   ;   s     $X..')&!$!3!3!8!8 9277)D"44&&
"44!!&&&'''"H%%	ww$$wwr   c                     t         rt        d      S t               rt               sd} nt        j                   d} | t
        v r| S dt
        vr
t               y)z3Try to find a user scheme for the current platform.userosx_framework_user_user
posix_user)r   r   r	   r   r   r   r   r!   s    r   _infer_userr)   Z   sT    $V,,":"<'ggYe$%%--%''r   c                 `    t         rt        d      S t        j                   d} | t        v r| S y)z,Try to find a home for the current platform.home_home
posix_home)r   r   r   r   r(   s    r   _infer_homer.   i   s1    $V,,''% H%%r   )installed_basebaseinstalled_platbaseplatbaser   exec_prefixuserbasec                *   |r|rt        dd      |r|rt        dd      |t               }n|rt               }n
t               }||dk(  rd}|t        D ci c]  }|| }}n|t        D ci c]  }|| }}ni }t        j                  ||      }	t               rv|r!|j                  dt        j                        }
n |j                  dt        j                        }
d	t                }t        j                  j                  |
d
d|      |	d
<   n| sd} t        |	d   |	d   t        j                  j                  |	d
   |       |	d   |	d         }|1i }t         D ]  }t#        |t%        ||            ||<    t        di |}|S c c}w c c}w )a\  
    Get the "scheme" corresponding to the input parameters.

    :param dist_name: the name of the package to retrieve the scheme for, used
        in the headers scheme path
    :param user: indicates to use the "user" scheme
    :param home: indicates to use the "home" scheme
    :param root: root under which other directories are re-based
    :param isolated: ignored, but kept for distutils compatibility (where
        this controls whether the user-site pydistutils.cfg is honored)
    :param prefix: indicates to use the "prefix" scheme and provides the
        base directory for the same
    z--userz--prefixz--homer   r   )schemevarsr4   r0   pythonincludesiteUNKNOWNplatlibpurelibscriptsdata)r<   r=   headersr>   r?   r   )r   r.   r)   r"   
_HOME_KEYS	sysconfig	get_pathsr	   getr   r   r   r   pathjoinr   r   r   getattr)	dist_namer$   r+   rootisolatedr   scheme_namek	variablespathsr0   	python_xyr6   converted_keyskeys                  r   
get_schemerR      s   * &x<<&x<<!m	!m#o
 k-DD$&01QW1	1		(231QY3	3	{CE  !==SZZ8D==4D4678	77<<iKi	i i U9-y9i 6]F  	JC"-dGFC4H"IN3	J).)MG 23s   
F/
Fc                     t         j                  d d dk(  rt         j                  d d dk(  ryt        j                         d   S )N   darwin   z/System/Library/z/usr/local/binr>   )r   platformr   rB   rC   r   r   r   get_bin_prefixrX      s>    
||BQ8#

3B;M(M ++r   c                 0    t        j                         d   S )Nr=   rB   rC   r   r   r   get_purelibr[           ++r   c                 0    t        j                         d   S )Nr<   rZ   r   r   r   get_platlibr^      r\   r   )returnbool)r_   str)FNNFN)rH   ra   r$   r`   r+   
str | NonerI   rb   rJ   r`   r   rb   r_   r   )(
__future__r   loggingr   r   rB   typingr   pip._internal.exceptionsr   r   pip._internal.models.schemer   r   pip._internal.utils.virtualenvr	   r0   r   r   r   	getLogger__name__loggersetget_scheme_namesr   rG   r   __annotations__r   r"   r)   r.   rA   get_config_varappendrR   rX   r[   r^   r   r   r   <module>rq      s   "  	 
   V ; C H H			8	$ 33356 5<%t6 2 
4>
 9J'3j!
 KK
K K 	K
 K K K\,,,r   