
    Nf jD                        U 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m	Z	m
Z
mZm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$e%e&d<   ej'        dk    Z(de)fdZ* e*            Z+e+sddlm,Z, e(r
e+sej-        Z.nej/        Z.de)fdZ0dee%e%f         de)fdZ1 e j2        d          de)fd            Z3 e j2        d          de)fd            Z4 e j2        d          de)fd            Z5 e j2        d          de)fd            Z6 e j2        d          de)fd            Z7dee%         de	e%ddf         fdZ8 e j2        d          dej9        dej9        de%ddfd             Z:dej9        dej9        de%de)fd!Z; e j2        d          d"dddd#d$e)d%ee%         d&ee%         d'ee%         ddf
d(            Z<	 	 	 	 	 d8d)e%d$e)d%ee%         d&ee%         d*e)d'ee%         defd+Z=de%fd,Z>de%fd-Z?d.e%de)fd/Z@de%fd0ZAde%fd1ZBd2e%d3e%de
e%         fd4ZCd5e%de)fd6ZDd'e%de
e%         fd7ZEdS )9    N)AnyDict	GeneratorListOptionalTuple)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_prefixed_libsget_purelib
get_schemer   r   r   
platlibdirlib_PLATLIBDIR)   
   returnc                  R    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     tC:\Users\Terasoftware\OneDrive\Desktop\faahhh\fyndo\fyndo\venv\Lib\site-packages\pip/_internal/locations/__init__.py_should_use_sysconfigr+   /   s      	#79OPPQQQr)   
_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.installr0   KeyError)r0   unix_user_platlibs     r*   _looks_like_bpo_44860r6   M   s[    
 :99999+K8C   uu++s    
%%schemec                     | d         }d|v r|                     ddt           d          }d|vrdS |                     dd          }|                     dd          | d	         k    S )
Nr2   z/$platlibdir///lib64/Fz/lib/z
$platbase/z$base/purelib)replacer   )r7   r2   	unpatcheds      r*   +_looks_like_red_hat_patched_platlib_purelibr>   [   s~    YG'! G///3E{3E3E3EFF u	733I\844y8IIIr)   )maxsizec                  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)r>   ).0kr0   s     r*   	<genexpr>z*_looks_like_red_hat_lib.<locals>.<genexpr>m   sT          	
_ 	L78JKK     r)   )unix_prefix	unix_home)r3   r0   allr/   s   @r*   _looks_like_red_hat_librI   e   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)r3   r0   r/   s    r*   _looks_like_debian_schemerM   t   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)r3   rO   distutils.distrP   finalize_optionsexec_prefixospathnormpathsysprefix)rO   rP   cmds      r*   _looks_like_red_hat_schemerZ   |   s     211111++++++w||~~&&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)r7   expandr:   r;   )r   r&   	get_pathsr4   pathss    r*   _looks_like_slackware_schemera      si      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)r]   c              3   R   K   | ]"}d |vod|v o|                     d           V  #dS )Libr   zsite-packagesN)endswithrC   ps     r*   rE   z1_looks_like_msys2_mingw_scheme.<locals>.<genexpr>   sW         	QI5A:Iajj.I.I*I     r)   c              3   (   K   | ]}|         V  d S rB   r(   )rC   keyr`   s     r*   rE   z1_looks_like_msys2_mingw_scheme.<locals>.<genexpr>   s'      ??%*??????r)   r2   r;   )r&   r^   rH   r_   s   @r*   _looks_like_msys2_mingw_schemerl      s]     U333E  ????(>???     r)   partsc              #     K   t          j        d          }t          t          dd           }|r|r|                    |          s
| E d {V  d S | D ]5}|                    |          r|d dt          |          z
           }|V  6d S )N	LDVERSIONabiflagsr   )r&   get_config_varr%   rW   rf   len)rm   	ldversionrp   parts       r*   _fix_abiflagsru      s      (55IsJ--H  H I,>,>x,H,H    ==## 	/-1s8}},-.D



 r)   oldnewrj   c                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)rv   rw   rj   	issue_urlmessages        r*   _warn_mismatchedr~      s5    :I	 
 JJicBBBBBr)   c                :    | |k    rdS t          | ||           dS )NFrj   T)r~   )rv   rw   rj   s      r*   _warn_if_mismatchr      s-    
cz uS#3''''4r)   FuserhomerootrX   r   r   r   rX   c                 |    g d}t                               t          d                    |          | |||           d S )N)zAdditional context:z	user = %rz	home = %rz	root = %rzprefix = %r
)ry   rz   r{   join)r   r   r   rX   rm   s        r*   _log_contextr      sC      E JJ		% 0 0$dFKKKKKr)   	dist_nameisolatedc           	         t          j        | |||||          }t          r|S t          j        | |||||          g }t          D ]}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|o6|dk    o0t           o(t          j        dk    ot"          dk    ot%                      }|rR|o|dv ot           ot'                      }|rr|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t1                      }|rt          j        dk     o5t           o-|dv o)t3          t5          |	j                            |
j        k    }|rVt          o|dv ot7                      }|rst9          j        d          ot           o|dv }|r|                    |	|
d| f           |sS t          j        | |||||d          tA          fdt          D                       rtC          dd d            S |D ]\  }	}
}tE          |	|
|           tG          ||||           S )N)r   r   r   r   rX   pypyrk   pythonheadersr2   )r   	   r   r   r   )usrlocalr      r   )r      )r   r2   r;   T)
check_home)r   includeplatincludezscheme.)ignore_config_filesc              3   L   K   | ]}|         t          |          k    V  d S rB   )r%   )rC   rD   default_oldrv   s     r*   rE   zget_scheme.<locals>.<genexpr>  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_inr   r   )$r   r   _USE_SYSCONFIGr-   r	   pathlibPathr%   rW   implementationnameparent
startswithr   rI   r   version_infor   r6   ra   r   rm   rr   rZ   rM   tupleru   rl   r&   is_python_buildappenddistutils_schemeanyr   r~   r   )r   r   r   r   r   rX   rw   warning_contextsrD   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_sysconfig_abiflag_bugskip_msys2_mingw_bugskip_cpython_buildrj   r   rv   s                       @@r*   r   r      s    
  C  


  C  o? o?WS!__--WS!__--E> 	 #v- .D .++. ,. 
%%h//	.
 
%%f-- 	 " 	  7 ""7Y7 #u|37 !,,X66 	- 0 	 	> 	577 	  (Y((  F*( 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 	' * 	
 v% AA66A mEK0011U[@	 	# & 	
 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_prefixr   )r   r   r   r-   r   r   r   r   rw   rv   s     r*   r   r     sd    

#
%
%C 


#
%
%Cc**GL,=,=<PPP Jr)   c                  8    t          j        dd          j        S )N T)r   )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)rM   )r   s    r*   $_looks_like_deb_system_dist_packagesr     s/     %&& u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.r;   r   )	r   r   r   r-   r   r   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,   r2   r   )
r   r   r   r   r-   r   r   r   r   r   )rw   r-   rv   s      r*   r   r     s    

 
"
"C 

 *
 
"
"C+C00 
c**GL,=,=9MMM Jr)   v1v2c                     | |k    r| gS | |gS )zDeduplicate values from a list.r(   )r   r   s     r*   _deduplicatedr     s    	Rx t8Or)   rU   c                 b    t           j        dd         dk    rdS | dt                       dk    S )zAApple patches sysconfig to *always* look under */Library/Python*.N   darwinFz/Library/Python/z/site-packages)rW   platformr   )rU   s    r*   _looks_like_apple_libraryr     s=    
|BQB8# uO&=&?&?OOOOOr)   c                     t          j        |           \  }}t          rt          ||          S t	          j        |           \  }}t          ||          }t          d |D                       rt          ddd           |S t          t          j	        |          t          j	        |          d          t          t          j	        |          t          j	        |          d          g}t          |          rt          |            |S )	z*Return the lib locations under ``prefix``.c              3   4   K   | ]}t          |          V  d S rB   )r   rg   s     r*   rE   z$get_prefixed_libs.<locals>.<genexpr>  s+      
?
?A$Q''
?
?
?
?
?
?r)   a&  Python distributed by Apple's Command Line Tools incorrectly patches sysconfig to always point to '/Library/Python'. This will cause build isolation to operate incorrectly on Python 3.10 or later. Please help report this to Apple so they can fix this. https://developer.apple.com/bug-reporting/Nr   zprefixed-purelibr   zprefixed-platlib)rX   )r   r   r   r   r-   rH   r   r   r   r   r   r   )rX   new_purenew_platold_pureold_platold_lib_pathswarneds          r*   r   r     s1   #5f==Hh 1Xx000#5f==Hh!(H55M 
?
?
?
?
??? G 
	
 
	
 
	
 
	
  	L""L"""	
 	
 	

 	L""L"""	
 	
 	
F 6{{ $F####r)   )FNNFN)F	functoolsloggingrT   r   rW   r&   typingr   r   r   r   r   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__ry   r%   r   str__annotations__r   r'   r$   r+   r   r-   WARNINGr{   DEBUGr6   r>   	lru_cacherI   rM   rZ   ra   rl   ru   r   r~   r   r   r   r   r   r   r   r   r   r   r   r(   r)   r*   <module>r      s7         				  



     > > > > > > > > > > > > > > > > ; ; ; ; ; ; ; ; . . . . . . 6 6 6 6 6 6 C C C C C C                        
	8	$	$ 73e44S 4 4 4)W4 Rt R R R R '&((    $. $oOOmO,t , , , ,JS#X J4 J J J J T"""    #" T"""O4 O O O #"O T"""D    #"& T"""Hd H H H #"H T"""    #""s 	#tT/(B      T"""C', CW\ C3 C4 C C C #"C7< gl C D     T"""  L L L
L 3-L 3-	L
 SML 
L L L #"L(  o oo
o 3-o 3-	o
 o SMo o o o od    8c 8 8 8 8     "S    S     c s tCy    PC PD P P P P+c +d3i + + + + + +r)   