
    yj6                       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j        e          Z eedd          Zde d<   d5dZ! e!            Z"e"sddlm#Z# e"rej$        Z%nej&        Z%d5dZ'd6dZ(ej)        d5d            Z*ej)        d5d            Z+ej)        d5d            Z,ej)        d5d            Z-ej)        d5d            Z.ej)        d7d!            Z/d8d"Z0ej)        d#dddd$d9d*            Z1	 	 	 	 	 d:d;d.Z2d<d/Z3d<d0Z4d=d2Z5d<d3Z6d<d4Z7dS )>    )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returnboolc                 H    t          t          t          dd                    S )ah  This function determines the value of _USE_SYSCONFIG.

    By default, pip uses sysconfig.
    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_SYSCONFIGT)r   getattr	sysconfig     a/usr/local/lib/hermes-agent/venv/lib/python3.11/site-packages/pip/_internal/locations/__init__.py_should_use_sysconfigr#   -   s     	#7>>???r!   
_distutilsc                 \    ddl m}  	 | d         d         }n# t          $ r Y dS w xY w|dk    S )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_44860r.   K   s[    
 :99999+K8C   uu++s    
%%schemedict[str, str]c                    | d         }d|v r|                     ddt           d          }d|vrdS |                     dd          }|                     dd          | d	         k    S )
Nr*   z/$platlibdir///lib64/Fz/lib/z
$platbase/z$base/purelib)replacer   )r/   r*   	unpatcheds      r"   +_looks_like_red_hat_patched_platlib_purelibr7   Y   sy    YG'!!///3E{3E3E3EFFu	733I\844y8IIIr!   c                 F     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  J   K   | ]}|v ot          |                   V  d S N)r7   ).0kr(   s     r"   	<genexpr>z*_looks_like_red_hat_lib.<locals>.<genexpr>k   sT          	
_ 	L78JKK     r!   )unix_prefix	unix_home)r+   r(   allr'   s   @r"   _looks_like_red_hat_librA   c   sQ     :99999     .     r!   c                     ddl m}  d| v od| v S )z#Debian adds two additional schemes.r   r'   
deb_system
unix_local)r+   r(   r'   s    r"   _looks_like_debian_schemerE   r   s+     :99999?*N|/NNr!   c                 <   ddl m}  ddlm}  |  |                      }|                                 |j        t          j                            t          j                   dk    o4|j
        t          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+   rG   distutils.distrH   finalize_optionsexec_prefixospathnormpathsysprefix)rG   rH   cmds      r"   _looks_like_red_hat_schemerR   z   s     211111++++++
',,..
!
!Cbg..s??GGGG 	BJRW--cj99AAAAr!   c                     t           dS 	 t          j        dd          } n# t          $ r Y dS w xY wd| d         v odt           vS )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.
    NF
posix_user)r/   expandr3   r4   )r   r   	get_pathsr,   pathss    r"   _looks_like_slackware_schemerY      sg     u#<FFF   uui((GYi-GGs   " 
00c                 z     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)rU   c              3  R   K   | ]"}d |vod|v o|                     d           V  #dS )Libr   zsite-packagesN)endswith)r;   ps     r"   r=   z1_looks_like_msys2_mingw_scheme.<locals>.<genexpr>   sW         	QI5A:Iajj.I.I*I     r!   c              3  (   K   | ]}|         V  d S r:   r    )r;   keyrX   s     r"   r=   z1_looks_like_msys2_mingw_scheme.<locals>.<genexpr>   s'      ??%*??????r!   r*   r4   )r   rV   r@   rW   s   @r"   _looks_like_msys2_mingw_schemerc      s]     U333E  ????(>???     r!   oldpathlib.Pathnewra   Nonec               V    d}d}t                               t          |||| |           d S )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)rd   rf   ra   	issue_urlmessages        r"   _warn_mismatchedrn      s5    :I	 
 JJicBBBBBr!   c               :    | |k    rdS t          | ||           dS )NFra   T)rn   )rd   rf   ra   s      r"   _warn_if_mismatchrq      s*    
czzuS#3''''4r!   FuserhomerootrP   rs   rt   
str | Noneru   rP   c                |    g d}t                               t          d                    |          | |||           d S )N)zAdditional context:z	user = %rz	home = %rz	root = %rzprefix = %r
)ri   rj   rk   join)rs   rt   ru   rP   partss        r"   _log_contextr{      sC      E JJ		% 0 0$dFKKKKKr!   	dist_nameisolatedr   c           	     P   t          j        | |||||          }t          r|S t          j        | |||||          g }t          D ]Y}t          j        t          |                    }	t          j        t          ||                    }
|	|
k    rNt          j	        j
        dk    oK|d uoG|dv oC|	j        |
j        k    o3|	j
                            d          o|
j
                            d          }|r|oGt                      o9|dk    o3|	j        j        |
j        k    o|	j        j
                            d          }|r|dk    rt                      r|o&|dk    o t           ot           dk    ot#                      }|rB|o|dv ot           ot%                      }|rb|p|p|pt'                       o|	j        dd	         d
k    omt+          |
j                  dk    oU|
j        d         dk    oDt+          |
j                  d	k     p|
j        d         dk    ot-                      pt/                      }|rt          o|dv ot1                      }|rt3          j        d          ot           o|dv }|r>|                    |	|
d| f           [|sS t          j        | |||||d          t;          fdt          D                       rt=          dd d            S |D ]\  }	}
}t?          |	|
|           tA          ||||           S )N)rs   rt   ru   r}   rP   pypyrb   pythonheadersr*   r   r	      )usrlocalr      r   T)
check_home)r   includeplatincludezscheme.)ignore_config_filesc              3  L   K   | ]}|         t          |          k    V  d S r:   )r   )r;   r<   default_oldrd   s     r"   r=   zget_scheme.<locals>.<genexpr>f  s4      
B
B;q>WS!__,
B
B
B
B
B
Br!   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_inrp   rr   )!r
   r   _USE_SYSCONFIGr%   r   pathlibPathr   rO   implementationnameparent
startswithr   rA   r   r   r.   rY   r   rz   lenrR   rE   rc   r   is_python_buildappenddistutils_schemeanyr   rn   r{   )r|   rs   rt   ru   r}   rP   rf   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_buildra   r   rd   s                      @@r"   r   r      sq    
  C  

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

 -   K 
B
B
B
B
Bk
B
B
BBB L
 		
 		
 		
 		
 
 . 0 0uc3/////dD@@@@Jr!   c                     t          j                    } t          r| S t          j                    }t	          t          j        |          t          j        |           d          rt                       |S )N
bin_prefixrp   )r
   r   r   r%   rq   r   r   r{   rf   rd   s     r"   r   r   {  sd    

#
%
%C 


#
%
%Cc**GL,=,=<PPP Jr!   c                 8    t          j        dd          j        S )N T)rs   )r
   r   scriptsr    r!   r"   r   r     s     $///77r!   valuec                6    t                      sdS | dk    rdS dS )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)rE   )r   s    r"   $_looks_like_deb_system_dist_packagesr     s-     %&& u000t5r!   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   rp   )	r
   r   r   r%   r   rq   r   r   r{   r   s     r"   r   r     sy    

 
"
"C 


 
"
"C+C00 
c**GL,=,=9MM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*   rp   )
r
   r   r   r   r%   r   rq   r   r   r{   )rf   r%   rd   s      r"   r   r     s    

 
"
"C 

 *
 
"
"C+C00 
c**GL,=,=9MMM Jr!   )r   r   )r/   r0   r   r   )rd   re   rf   re   ra   r   r   rg   )rd   re   rf   re   ra   r   r   r   )
rs   r   rt   rv   ru   rv   rP   rv   r   rg   )FNNFN)r|   r   rs   r   rt   rv   ru   rv   r}   r   rP   rv   r   r   )r   r   )r   r   r   r   )8
__future__r   	functoolsloggingrL   r   rO   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__ri   r   r   __annotations__r#   r   r%   DEBUGrk   WARNINGr.   r7   cacherA   rE   rR   rY   rc   rn   rq   r{   r   r   r   r   r   r   r    r!   r"   <module>r      s   " " " " " " "      				  



     ; ; ; ; ; ; ; ; . . . . . . 6 6 6 6 6 6 C C C C C C                        
	8	$	$ 73e44 4 4 4 4@ @ @ @ '&((    &mOOoO, , , ,J J J J     O O O O    & H H H H    " C C C C     L L L L L L( c c c c cL   8 8 8 8   "        r!   