
    iM7                        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Zd dlZd dlm	Z	m
Z
 d dlmZ d dlmZ d dlmZ ddlmZ dd	lmZmZmZmZmZmZ g d
Z ej6                  e      Z eedd      Zde d<   ejB                  dk\  Z"d$dZ# e#       Z$e$sddlm%Z% e"re$sejL                  Z'nejP                  Z'd$dZ)d%dZ*ejV                  d$d       Z,ejV                  d$d       Z-ejV                  d$d       Z.ejV                  d$d       Z/ejV                  d$d       Z0ejV                  d&d       Z1d'dZ2ejV                  ddddd	 	 	 	 	 	 	 	 	 d(d       Z3	 	 	 	 	 d)	 	 	 	 	 	 	 	 	 	 	 	 	 d*dZ4d+dZ5d+d Z6d,d!Z7d+d"Z8d+d#Z9y)-    )annotationsN)SCHEME_KEYSScheme)WINDOWS)
deprecated)running_under_virtualenv   )
_sysconfig)USER_CACHE_DIRget_major_minor_versionget_src_prefixis_osx_frameworksite_packages	user_site)
r   get_bin_prefixget_bin_userr   get_platlibget_purelib
get_schemer   r   r   
platlibdirlibstr_PLATLIBDIR)   
   c                 >    t        t        t        dt                    S )ax  This function determines the value of _USE_SYSCONFIG.

    By default, pip uses sysconfig on Python 3.10+.
    But Python distributors can override this decision by setting:
        sysconfig._PIP_USE_SYSCONFIG = True / False
    Rationale in https://github.com/pypa/pip/issues/10647

    This is a function for testability, but should be constant during any one
    run.
    _PIP_USE_SYSCONFIG)boolgetattr	sysconfig_USE_SYSCONFIG_DEFAULT     \/home/portmadness/app/.venv/lib/python3.12/site-packages/pip/_internal/locations/__init__.py_should_use_sysconfigr%   /   s     	#79OPQQr#   
_distutilsc                 H    ddl m}  	 | d   d   }|dk(  S # t        $ r Y yw xY w)zsThe resolution to bpo-44860 will change this incorrect platlib.

    See <https://bugs.python.org/issue44860>.
    r   INSTALL_SCHEMES	unix_userplatlibFz	$usersite)distutils.command.installr*   KeyError)r*   unix_user_platlibs     r$   _looks_like_bpo_44860r0   M   s=    
 :+K8C ++  s    	!!c                    | d   }d|v r|j                  ddt         d      }d|vry|j                  dd      }|j                  dd      | d	   k(  S )
Nr,   z/$platlibdir///lib64/Fz/lib/z
$platbase/z$base/purelib)replacer   )schemer,   	unpatcheds      r$   +_looks_like_red_hat_patched_platlib_purelibr8   [   se    YG'!///Q{m13EF	73I\84y8IIIr#   c                 8     ddl m  t         fddD              S )zRed Hat patches platlib in unix_prefix and unix_home, but not purelib.

    This is the only way I can see to tell a Red Hat-patched Python.
    r   r)   c              3  F   K   | ]  }|v xr t        |           y wN)r8   ).0kr*   s     r$   	<genexpr>z*_looks_like_red_hat_lib.<locals>.<genexpr>m   s9        	
_ 	L78JK	Ls   !)unix_prefix	unix_home)r-   r*   allr)   s   @r$   _looks_like_red_hat_librB   e   s$     :  .  r#   c                 "    ddl m}  d| v xr d| v S )z#Debian adds two additional schemes.r   r)   
deb_system
unix_local)r-   r*   r)   s    r$   _looks_like_debian_schemerF   t   s     :?*N|/NNr#   c                 L   ddl m}  ddlm}  |  |             }|j	                          |j
                  t        j                  j                  t        j
                         dk(  xr= |j                  t        j                  j                  t        j                         dk(  S )a\  Red Hat patches ``sys.prefix`` and ``sys.exec_prefix``.

    Red Hat's ``00251-change-user-install-location.patch`` changes the install
    command's ``prefix`` and ``exec_prefix`` to append ``"/local"``. This is
    (fortunately?) done quite unconditionally, so we create a default command
    object without any configuration to detect this.
    r   )install)Distributionz/local)r-   rH   distutils.distrI   finalize_optionsexec_prefixospathnormpathsysprefix)rH   rI   cmds      r$   _looks_like_red_hat_schemerS   |   s{     2+
,.
!Cbgg..s?@GG 	BJJRWW--cjj9:&AAr#   c                     t         y	 t        j                  dd      } d| d   v xr dt         vS # t        $ r Y yw xY w)zSlackware patches sysconfig but fails to patch distutils and site.

    Slackware changes sysconfig's user scheme to use ``"lib64"`` for the lib
    path, but does not do the same to the site module.
    F
posix_user)r6   expandr3   r4   )r   r    	get_pathsr.   pathss    r$   _looks_like_slackware_schemerZ      sT     ##<F i((GYi-GG  s   1 	==c                 h     t        j                  dd       t        d  fddD        D              S )a  MSYS2 patches distutils and sysconfig to use a UNIX-like scheme.

    However, MSYS2 incorrectly patches sysconfig ``nt`` scheme. The fix is
    likely going to be included in their 3.10 release, so we ignore the warning.
    See msys2/MINGW-packages#9319.

    MSYS2 MINGW's patch uses lowercase ``"lib"`` instead of the usual uppercase,
    and is missing the final ``"site-packages"``.
    ntF)rV   c              3  X   K   | ]"  }d |vxr d|v xr |j                  d        $ yw)Libr   zsite-packagesN)endswith)r<   ps     r$   r>   z1_looks_like_msys2_mingw_scheme.<locals>.<genexpr>   s9       	QI5A:Iajj.I*IIs   (*c              3  (   K   | ]	  }|     y wr;   r"   )r<   keyrY   s     r$   r>   z1_looks_like_msys2_mingw_scheme.<locals>.<genexpr>   s     ?%*?s   r,   r4   )r    rW   rA   rX   s   @r$   _looks_like_msys2_mingw_schemerd      s7     U3E ?(>?  r#   c               H    d}d}t         j                  t        |||| |       y )Nz(https://github.com/pypa/pip/issues/10151zSValue for %s does not match. Please report this to <%s>
distutils: %s
sysconfig: %s)loggerlog_MISMATCH_LEVEL)oldnewrb   	issue_urlmessages        r$   _warn_mismatchedrm      s)    :I	 
 JJicBr#   c               ,    | |k(  ryt        | ||       y)NFrb   T)rm   )ri   rj   rb   s      r$   _warn_if_mismatchrp      s    
czS#3'r#   FuserhomerootrQ   c                f    g d}t         j                  t        dj                  |      | |||       y )N)zAdditional context:z	user = %rz	home = %rz	root = %rzprefix = %r
)rf   rg   rh   join)rr   rs   rt   rQ   partss        r$   _log_contextry      s*    E JJ		% 0$dFKr#   c           	        t        j                  | |||||      }t        r|S t        j                  | |||||      g }t        D ]  }t        j                  t        |            }	t        j                  t        ||            }
|	|
k(  rHt        j                  j                  dk(  xr_ |d uxrY |dv xrS |	j                  |
j                  k(  xr8 |	j                  j                  d      xr |
j                  j                  d      }|r|xr] t               xrQ |dk(  xrJ |	j                  j                  |
j                  k(  xr% |	j                  j                  j                  d      }|r.|dk(  rt               r?|xr% |dk(  xr t         xr t         dk7  xr
 t#               }|rl|xr |dv xr t         xr
 t%               }|r|xs |xs |xs
 t'                xr |	j(                  dd	 d
k(  xrr t+        |
j(                        dkD  xrX |
j(                  d   dk(  xrD t+        |
j(                        d	k  xs |
j(                  d   dk7  xr t-               xs
 t/               }|r0t        xr |dv xr
 t1               }|rLt3        j4                  d      xr t         xr |dv }|ru|j7                  |	|
d| f        |sS t        j8                  | |||||d      t;        fdt        D              rt=        dd d        S |D ]  \  }	}
}t?        |	|
|        tA        ||||       S )N)rr   rs   rt   isolatedrQ   pypyrc   pythonheadersr,   r   r	   r   )usrlocalr      r   T)
check_home)r~   includeplatincludezscheme.)ignore_config_filesc              3  B   K   | ]  }|   t        |      k7    y wr;   )r   )r<   r=   default_oldri   s     r$   r>   zget_scheme.<locals>.<genexpr>h  s      
B;q>WS!_,
Bs   zConfiguring installation scheme with distutils config files is deprecated and will no longer work in the near future. If you are using a Homebrew or Linuxbrew Python, please see discussion at https://github.com/Homebrew/homebrew-core/issues/76621)reasonreplacementgone_inro   rq   )!r
   r   _USE_SYSCONFIGr'   r   pathlibPathr   rP   implementationnameparent
startswithr   rB   r   r   r0   rZ   r   rx   lenrS   rF   rd   r    is_python_buildappenddistutils_schemeanyr   rm   ry   )	dist_namerr   rs   rt   r{   rQ   rj   warning_contextsr=   old_vnew_vskip_pypy_special_case$skip_osx_framework_user_special_caseskip_bpo_44860skip_slackware_user_schemeskip_linux_system_special_caseskip_msys2_mingw_bugskip_cpython_buildrb   r   ri   s                      @@r$   r   r      s    

C 



C  c?WS!_-WS!_-E> ##v- .D .++. ,. 

%%h/	.
 

%%f- 	 "  7 "7Y7 ##u||37 !!,,X6 	- 0 	>57  (Y(( u$( &' 	 
  /++// -.	 	# & EEE+C+EF NAa $44NEKK 1$N A%'N U[[!A%BQ7)B	N
 ,-L1J1L 	' *
 X33X8V8X 	   %%6 ;;:: 	
 } =>Gc?J 

 -- K 
Bk
BBL
 		
 
 . 0uc3/0dD@Jr#   c                     t        j                         } t        r| S t        j                         }t	        t        j                  |      t        j                  |       d      r
t                |S )N
bin_prefixro   )r
   r   r   r'   rp   r   r   ry   rj   ri   s     r$   r   r   }  sN    

#
#
%C


#
#
%Cc*GLL,=<PJr#   c                 D    t        j                  dd      j                  S )N T)rr   )r
   r   scriptsr"   r#   r$   r   r     s      $/777r#   c                &    t               sy| dk(  ryy)a  Check if the value is Debian's APT-controlled dist-packages.

    Debian's ``distutils.sysconfig.get_python_lib()`` implementation returns the
    default package path controlled by APT, but does not patch ``sysconfig`` to
    do the same. This is similar to the bug worked around in ``get_scheme()``,
    but here the default is ``deb_system`` instead of ``unix_local``. Ultimately
    we can't do anything about this Debian bug, and this detection allows us to
    skip the warning when needed.
    Fz/usr/lib/python3/dist-packagesT)rF   )values    r$   $_looks_like_deb_system_dist_packagesr     s     %&00r#   c                     t        j                         } t        r| S t        j                         }t	        |      r|S t        t        j                  |      t        j                  |       d      r
t                |S )z,Return the default pure-Python lib location.r4   ro   )	r
   r   r   r'   r   rp   r   r   ry   r   s     r$   r   r     s[    

 
 
"C


 
 
"C+C0
c*GLL,=9MJr#   c                    t        j                         } t        r| S ddlm}  |j                         }t        |      r|S t        t        j                  |      t        j                  |       d      r
t                |S )z0Return the default platform-shared lib location.r	   r&   r,   ro   )
r
   r   r   r   r'   r   rp   r   r   ry   )rj   r'   ri   s      r$   r   r     s`    

 
 
"C

 *
 
 
"C+C0
c*GLL,=9MJr#   )returnr   )r6   zdict[str, str]r   r   )ri   pathlib.Pathrj   r   rb   r   r   None)ri   r   rj   r   rb   r   r   r   )
rr   r   rs   
str | Nonert   r   rQ   r   r   r   )FNNFN)r   r   rr   r   rs   r   rt   r   r{   r   rQ   r   r   r   )r   r   )r   r   r   r   ):
__future__r   	functoolsloggingrM   r   rP   r    pip._internal.models.schemer   r   pip._internal.utils.compatr   pip._internal.utils.deprecationr   pip._internal.utils.virtualenvr   r   r
   baser   r   r   r   r   r   __all__	getLogger__name__rf   r   r   __annotations__version_infor!   r%   r   r'   WARNINGrh   DEBUGr0   r8   cacherB   rF   rS   rZ   rd   rm   rp   ry   r   r   r   r   r   r   r"   r#   r$   <module>r      s"   "   	  
  ; . 6 C   
		8	$ 3e4S 4))W4 R '(  .ooOmmO,J   O O  & H H  " C C  L
L L 	L
 L 
L L( cc
c c 	c
 c c cL8"r#   