+
     h[  c                   s    ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t^ RIHt ^ RIHt ^ RIHt ^ RIHtHtHt ^ RIHt ^ RIHtHt ^ RIHtHtHtHtH t H!t!H"t"H#t#H$t$H%t%H&t&H't'H(t(H)t)H*t*H+t+ ^ R	I,H-t- ^ R
I.H/t/ ^ RI0H1t1 ^ RI2H3t3H4t4 ^ RI5H6t6 ^ RI7H8t8 ^ RI9H:t: ^ RI;H<t< . R{Ot=]P|                  ! ]?4      t@])! R4      tA]'](]B,          ]B]3,          tC]']D]D]D3,          tE]']F]']$]F,          ]$]F,          3,          3,          tG]]]]B.]3,          tH]]]]C.]3,          tIR|tJR R ltKR R ltLR R ltMR R ltN]:! ^RR7      R}R R ll4       tOR R  ltPR! R" ltQR#]Q/R$ R% lltRR& R' ltSR~R( R) lltTR* R+ ltUR, R- ltVR. R/ ltWR0 R1 ltXR2 R3 ltYR4 R5 ltZR6 R7 lt[R8 R9 lt\R: R; lt]]J3R< R= llt^RR? R@ llt_RA RB lt`RC RD ltaRE RF ltbRG RH ltc ! RI RJ]4      tdRK RL lteRM RN ltfRRO RP lltgRQ RR lthRS RT ltiRU RV ltjRW RX ltkRY RZ ltlR[ R\ ltmR] R^ ltnR_ R` ltoRa Rb ltpRc Rd ltq]! R>Re7       ! Rf Rg4      4       trRh Ri ltsRj Rk lttRl Rm ltuRn Ro ltvRp Rq ltwRRr Rs lltxRt Ru ltyRv Rw ltz ! Rx R]/4      t{Ry Rz lt|R# )    N)	dataclass)partial)StringIO)filterfalseteezip_longest)Path)FunctionTypeTracebackType)AnyBinaryIOCallable	GeneratorIterableIteratorListMappingOptionalSequenceTextIOTupleTypeTypeVarUnioncast)Requirement)BuildBackendHookCaller)__version__)CommandErrorExternallyManagedEnvironment)get_major_minor_version)WINDOWS)retry)running_under_virtualenv ConfiguredBuildBackendHookCallerTc                $    V ^8  d   QhR\         /#    returnstrformat   "=/usr/lib/python3.14/site-packages/pip/_internal/utils/misc.py__annotate__r/   L   s     X X X    c                  s    \         P                  P                  \         P                  P                  \        4      R R 4      p \         P                  P                  V 4      p R\         RV  R\        4        R2# )z..zpip z from z	 (python Z))ospathjoinZdirnameZ__file__abspathr   r   )Zpip_pkg_dir    r.   get_pip_versionr6   L   sX    '',,rwwx8$EK''//+.K+f[M;R;T:UUVWWr0   c                sv    V ^8  d   QhR\         \        R3,          R\         \        \        \        3,          /# )r'   py_version_info.r(   )r   intr+   r-   r.   r/   r/   S   s.     0 0E#s(O 0c3PSm@T 0r0   c                s    \        V 4      ^8  d"   V ^\        V 4      ,
          R,          ,          p M\        V 4      ^8  d
   V R,          p \        RV 4      # )a\  
Convert a tuple of ints representing a Python version to one of length
three.

:param py_version_info: a tuple of ints representing a Python version,
    or None to specify no version. The tuple can have any length.

:return: a tuple of length three if `py_version_info` is non-None.
    Otherwise, return `py_version_info` unchanged (i.e. None).
:N   NVersionInfo)r    )lenr   )r7      &r.   normalize_version_infor=   S   sN     ?aAO 44<<	_		!)"-//r0   c                (    V ^8  d   QhR\         RR/# )r'   r2   r(   Nr)   r+   r-   r.   r/   r/   f   s      S T r0   c                s     \         P                  ! V 4       R#   \         dQ   pTP                  \        P                  8w  d'   TP                  \        P
                  8w  d   h  Rp?R#  Rp?R# Rp?ii ; i)z os.path.makedirs without EEXIST.N)r1   makedirsOSErrorerrnoZEEXISTZ	ENOTEMPTY)r2   Ze   & r.   
ensure_dirrC   f   sN    
D 77ell"qww%//'A (B"s    A5?A00A5c                r%   r&   r)   r+   r-   r.   r/   r/   p   s     	 	# 	r0   c                  s     \         P                  P                  \        P                  ^ ,          4      p V R9   d   \        P
                   R2# V #   \        \        \        3 d     R# i ; i)r    z -m pippip)z__main__.pyz-c)	r1   r2   basenamesysargv
executableZAttributeErrorZ	TypeErrorZ
IndexError)Zprogr5   r.   get_progrI   p   s_    ww,((nn%W--KIz2 s   AA A A,+A,g      ?)Zstop_after_delayZwaitc                sV    V ^8  d   QhR\         R\        R\        \        ,          RR/# )r'   dirignore_errorsonexcr(   N)r*   boolr   OnExcr+   r-   r.   r/   r/   ~   s0     , ,	,!,2:5/,	,r0   c                 s    V'       d   \         pVf   \        p\        \        VR7      p\        P
                  R8  d   \        P                  ! WR7       R # \        P                  ! WR7       R # )N)rL   )Zonerror)r9   i   )_onerror_ignore_onerror_reraiser   rmtree_errorhandlerrF   version_infoshutilrmtree)rJ   rK   rL   Zhandlers   &&& r.   rT   rT   }   sI     } 0>G
7"c)c+r0   c                r>   r'   _argsr(   Nr
   r+   r-   r.   r/   r/      s     	 	C 	D 	r0   c                  s    R # N rV      *r.   rO   rO      s    r0   c                r>   rU   rW   r+   r-   r.   r/   r/      s     
 
S 
T 
r0   c                  s    h rX   rY   rZ   r[   r.   rP   rP      s    	r0   rL   c          
      sn    V ^8  d   QhR\         R\        R\        \        \        3,          R\
        RR/# )r'   funcr2   exc_inforL   r(   N)r   r   r   ExcInfoBaseExceptionrN   r+   r-   r.   r/   r/      sD     &  & 
& 
&  G]*+& 
 &  
& r0   c               s    \         P                  ! V4      P                  pT\        P                  ,          '       g8    \         P
                  ! Y\        P                  ,          4        T ! T4       R# \        T\        4      '       g   Tw  rRpT! YT4       R#   \         d     R# i ; i  \         d     LEi ; i  \         d     LVi ; i)a  
`rmtree` error handler to 'force' a file remove (i.e. like `rm -f`).

* If a file is readonly then it's write flag is set and operation is
  retried.

* `onerror` is the original callback from `rmtree(... onerror=onerror)`
  that is chained at the end if the "rm -f" still fails.
N)r1   statst_moder@   ZS_IWRITEZchmodZ
isinstancer_   )r\   r2   r]   rL   ra   Z_s   &&&$  r.   rQ   rQ      s     ''$-''
 T]]""
	HHTT]]23
T
 h..!Q	$h)      		s5    B  +B? ,B. B+*B+.B<;B<?CCc                0    V ^8  d   QhR\         R\         /# r'   r2   r(   r)   r+   r-   r.   r/   r/      s      s s r0   c                s`   \         P                  P                  \         P                  P                  V 4      4      p V P	                  \         P
                  ! 4       \         P                  P                  ,           4      '       d)   RV \        \         P
                  ! 4       4      R ,           p V # )zPGives the display value for a given path, making it relative to cwd
if possible..N)r1   r2   normcaser4   
startswithZgetcwdZsepr;   r2   r<   r.   display_pathrh      si     77BGGOOD12Dryy{RWW[[011T#biik*,--Kr0   c                <    V ^8  d   QhR\         R\         R\         /# )r'   rJ   extr(   r)   r+   r-   r.   r/   r/      s!      C c s r0   c                s    ^pTp\         P                  P                  W,           4      '       d   V^,          pV\        V4      ,           pKH  W,           # )zXFigure out the name of a directory to back up the given dir to
(adding .bak, .bak2, etc))r1   r2   existsr*   )rJ   rj   nZ	extension   &&  r.   
backup_dirrn      sA     	
AI
''..
)
)	Q#a&L	?r0   c                R    V ^8  d   QhR\         R\        \         ,          R\         /# r'   messageoptionsr(   r*   r   r+   r-   r.   r/   r/      s%     ! !S !8C= !S !r0   c                 s    \         P                  P                  R R4      P                  4        F  pW!9   g   K  Vu # 	  \	        W4      # )ZPIP_EXISTS_ACTION )r1   environgetsplitask)rq   rr   Zaction   && r.   ask_path_existsrz      s>    **..!4b9??AM B w  r0   c                r>   )r'   rq   r(   Nr)   r+   r-   r.   r/   r/      s     
 
S 
T 
r0   c                sl    \         P                  P                  R4      '       d   \        RV  24      hR# )z&Raise an error if no input is allowed.ZPIP_NO_INPUTz5No input was expected ($PIP_NO_INPUT set); question: N)r1   ru   rv   Z	Exceptionrq   r<   r.   _check_no_inputr|      s1    	zz~~n%%CG9M
 	
 &r0   c                ro   rp   rs   r+   r-   r.   r/   r/      s%       x}  r0   c                s     \        V 4       \        V 4      pVP                  4       P                  4       pW!9  d-   \	        RP                  VRP                  V4      4      4       Kg  V# )z@Ask the message interactively, with the given possible responsesz>Your response ({!r}) was not one of the expected responses: {}z, )r|   inputZstriplowerZprintr,   r3   )rq   rr   Zresponsery   r.   rx   rx      sZ    
 >>>#))+"VHdii&89
 Or0   c                rb   r'   rq   r(   r)   r+   r-   r.   r/   r/      s      s s r0   c                s.    \        V 4       \        V 4      # )zAsk for input interactively.)r|   r}   r{   r<   r.   	ask_inputr      s    G>r0   c                rb   r   r)   r+   r-   r.   r/   r/      s     $ $# $# $r0   c                sD    \        V 4       \        P                  ! V 4      # )z!Ask for a password interactively.)r|   getpassr{   r<   r.   ask_passwordr      s    G??7##r0   c                0    V ^8  d   QhR\         R\        /# )r'   valr(   )r*   r8   r+   r-   r.   r/   r/      s     9 93 93 9r0   c                sd    V P                  4       p V R9   d   ^# V R9   d   ^ # \        RV : 24      h)zConvert a string representation of truth to true (1) or false (0).

True values are 'y', 'yes', 't', 'true', 'on', and '1'; false values
are 'n', 'no', 'f', 'false', 'off', and '0'.  Raises ValueError if
'val' is anything else.
zinvalid truth value )ZyZyesZtZtrueZonZ1)rl   ZnofZfalseZoffZ0)r~   Z
ValueError)r   r<   r.   	strtoboolr      s:     ))+C
22	5	5/w788r0   c                r   )r'   bytesr(   )Zfloatr*   r+   r-   r.   r/   r/     s     % %u % %r0   c                 s    V R8  d   V R,          R ,          R R2# V R8  d   \        V R ,          4       R2# V R 8  d   V R,          R R2# \        V 4       R2# )i  g     @@z.1fz MBz kBz bytesi@B i'  )r8   )r   r<   r.   format_sizer     sn    {&.4',C00		edl#$C((	&.%S))e*V$$r0   c                s    V ^8  d   QhR\         \         \        ,          ,          R\        \        \        ,          \        \
        ,          3,          /# )r'   rowsr(   )r   r
   r   r   r*   r8   r+   r-   r.   r/   r/     s5      8HSM* uT#YS	5I/J r0   c           
     sd   V  Uu. uF  p\        \        \        V4      4      NK  	  p p\        V RR/  Uu. uF  p\	        \        \
        V4      4      NK  	  ppV  Uu. uF:  pRP                  \        \        P                  W4      4      P                  4       NK<  	  ppWC3# u upi u upi u upi )zReturn a list of formatted rows and a list of column sizes.

For example::

>>> tabulate([['foobar', 2000], [0xdeadbeef]])
(['foobar     2000', '3735928559'], [10, 4])
Z	fillvaluert    )	ZtupleZmapr*   r   Zmaxr;   r3   ZljustZrstrip)r   ZrowZcolZsizesZtables   &    r.   tabulater     s     -11DSE#c3- DD1+6+K+KL+KCSS#+KELFJKdsSXXc#))S0188:dEK< 2LKs   "B#"B(A B-c                r   rc   r*   rM   r+   r-   r.   r/   r/   %  s      S T r0   c                sh   \         P                  P                  V 4      '       g   R# \         P                  P                  \         P                  P	                  V R4      4      '       d   R# \         P                  P                  \         P                  P	                  V R4      4      '       d   R# R# )a`  Is path is a directory containing pyproject.toml or setup.py?

If pyproject.toml exists, this is a PEP 517 project. Otherwise we look for
a legacy setuptools layout by identifying setup.py. We don't check for the
setup.cfg because using it without setup.py is only available for PEP 517
projects, which are already covered by the pyproject.toml check.
Fzpyproject.tomlTzsetup.py)r1   r2   Zisdirisfiler3   rg   r<   r.   is_installable_dirr   %  sh     77==	ww~~bggll4)9:;;	ww~~bggll4455r0   c          	      sX    V ^8  d   QhR\         R\        R\        \        RR3,          /# )r'   filesizer(   N)r   r8   r   r   r+   r-   r.   r/   r/   6  s0      
udD !r0   c              #  sN   "    V P                  V4      pV'       g   R# Vx  K"  5i)z7Yield pieces of data from a file-like object until EOF.N)Zread)r   r   Zchunkry   r.   read_chunksr   6  s"      		$s   %%Tc                s<    V ^8  d   QhR\         R\        R\         /# )r'   r2   resolve_symlinksr(   r   r+   r-   r.   r/   r/   A  s!     
" 
" 
" 
" 
"r0   c                s   \         P                  P                  V 4      p V'       d!   \         P                  P                  V 4      p M\         P                  P	                  V 4      p \         P                  P                  V 4      # )zF
Convert a path to its canonical, case-normalized, absolute version.

)r1   r2   Z
expanduserZrealpathr4   re   )r2   r      &&r.   normalize_pathr   A  sV    
 77d#Dww%wwt$77D!!r0   c                sR    V ^8  d   QhR\         R\        \         \         3,          /# rc   r*   r   r+   r-   r.   r/   r/   N  s"      3 5c? r0   c                s    \         P                  ! V 4      w  rVP                  4       P                  R4      '       d   VRR V,           pVRR pW3# )z,Like os.path.splitext, but take off .tar tooz.tarNi)	posixpathsplitextr~   Zendswith)r2   Zbaserj      &  r.   r   r   N  sM    ""4(IDzz|V$$23i#oCRy9r0   c                4    V ^8  d   QhR\         R\         RR/# )r'   oldnewr(   Nr)   r+   r-   r.   r/   r/   W  s!       3 4 r0   c                s   \         P                  P                  V4      w  r#V'       dD   V'       d<   \         P                  P                  V4      '       g   \         P                  ! V4       \
        P                  ! W4       \         P                  P                  V 4      w  r#V'       d$   V'       d    \         P                  ! V4       R# R# R#   \         d     R# i ; i)z7Like os.renames(), but handles renaming across devices.N)	r1   r2   rw   rk   r?   rS   ZmoveZ
removedirsr@   )r   r   ZheadZtailrm   r.   renamesr   W  s     s#JDRWW^^D11
D
KKs#JD	MM$ t  		s   5C C C c                r   rc   r   r+   r-   r.   r/   r/   h  s     7 73 74 7r0   c                sv    \        4       '       g   R# V P                  \        \        P                  4      4      # )z
Return True if path is within sys.prefix, if we're running in a virtualenv.

If we're not in a virtualenv, all paths are considered "local."

Caution: this function assumes the head of path has been normalized
with normalize_path.
T)r"   rf   r   rF   Zprefixrg   r<   r.   is_localr   h  s(     $%%??>#**566r0   c                r   )r'   msgargsr(   NrW   r+   r-   r.   r/   r/   v  s!      c # $ r0   c                 s6    \         P                  ! V .VO5!   R # rX   )loggerZinfo)r   r   s   &*r.   write_outputr   v  s    
KKdr0   c                   sd   a  ] tR tRt o ]V 3R lR l4       t]V 3R lR l4       tV 3R ltRt	V t
R# )	StreamWrapperiz  c                s$   < V ^8  d   QhRS[ RR/# )r'   orig_streamr(   r   r   r,   __classdict__   "r.   r/   StreamWrapper.__annotate__~  s      f  r0   c                s     V ! 4       pWn         V# rX   )r   )Zclsr   Zretry   r.   from_streamZStreamWrapper.from_stream}  s    e%
r0   c                    < V ^8  d   QhRS[ /# r&   r)   r   r   r.   r/   r     s     ) )# )r0   c                s.    V P                   P                  # rX   )r   encodingselfr<   r.   r   ZStreamWrapper.encoding  s    (((r0   c                s&   < V ^8  d   Qh/ S[ ;R&   # )r'   r   r   r   r   r.   r/   r   z  s      r0   rY   N)__name__
__module____qualname____firstlineno__Zclassmethodr   Zpropertyr   __annotate_func____static_attributes____classdictcell__r      @r.   r   r   z  s4        ) )  r0   r   c                sR    V ^8  d   QhR\         R\         R\        \         ,          /# )r'   
sequentialnamedr(   )r
   r   r+   r-   r.   r/   r/     s%     # #c #C #DI #r0   c            
      s    \        \        V \        \        V 4      4      4      3/ VB pVP	                  4        UUu/ uF  w  r4WCbK	  	  pppWRR &   \        RRV4      # u uppi )Zreverse_mappingZEnumrY   )ZdictZzipZranger;   Zitemstype)r   r   ZenumsZkeyvalueZreverses   *,    r.   enumr     s\    Zs:!78BEBE,1KKM:MjcuzMG:&
E"" ;s   Ac                sR    V ^8  d   QhR\         R\        \        ,          R\         /# )r'   hostportr(   )r*   r   r8   r+   r-   r.   r/   r/     s%     	 	s 	(3- 	C 	r0   c                s6    Vf   V # RV 9   d   RV  R2p V  RV 2# )z&
Build a netloc from a host-port pair
:[]rY   )r   r   r   r.   build_netlocr     s3     |
d{4&{V1TFr0   c                ri   )r'   netlocschemer(   r)   r+   r-   r.   r/   r/     s!     " "# "s " "r0   c                sd    V P                  R4      ^8  d   RV 9  d   RV 9  d   RV  R2p V RV  2# )z!
Build a full URL from a netloc.
r   @r   r   z://)Zcount)r   r   r   r.   build_url_from_netlocr     sA     ||CA#V"368IVHAXS!!r0   c                s~    V ^8  d   QhR\         R\        \        \         ,          \        \        ,          3,          /# r'   r   r(   )r*   r   r   r8   r+   r-   r.   r/   r/     s,     ( ( (x}hsm'C!D (r0   c                s    \        V 4      p\        P                  P                  V4      pVP                  VP
                  3# )z*
Return the host-port pair from a netloc.
)r   urllibparseZurlparseZhostnamer   )r   urlZparsedr   r.   parse_netlocr     s5      
'C\\""3'F??FKK''r0   c                r   r   r*   NetlocTupler+   r-   r.   r/   r/     s      3 ; r0   c                s   RV 9  d   V R3# V P                  R^4      w  rRpRV9   d   VP                  R^4      w  r2MTRr#\        P                  P	                  V4      pVe    \        P                  P	                  V4      pWV33# )zd
Parse out and remove the auth information from a netloc.

Returns: (netloc, (username, password)).
r   Nr   NN)Zrsplitrw   r   r   Zunquote)r   authZpwuser   &   r.   split_auth_from_netlocr     s     &|##
 ==a(LDB
d{ ::c1%bb<<%D	~\\!!"%":r0   c                rb   r   r)   r+   r-   r.   r/   r/     s     ( (# (# (r0   c                s    \        V 4      w  p w  rVf   V # Vf   RpRpM!\        P                  P                  V4      pRpV V RV  2# )z
Replace the sensitive data in a netloc with "****", if it exists.

For example:
    - "user:pass@example.com" returns "user:****@example.com"
    - "accesstoken@example.com" returns "****@example.com"
****rt   z:****r   )r   r   r   Zquote)r   r   Zpasswordr   r.   redact_netlocr     s^      6f=FT|||!!$'VH:Qvh''r0   c                s    V ^8  d   QhR\         R\        \         .\        \        R3,          3,          R\        \         \        3,          /# )r'   r   transform_netloc.r(   )r*   r   r   r
   r   r+   r-   r.   r/   r/     sB     3 3	3 (#c3h)? @3
33r0   c                s*   \         P                  P                  V 4      pV! VP                  4      pVP                  V^ ,          VP
                  VP                  VP                  3p\         P                  P                  V4      pV\        RV4      3# )a:  Transform and replace netloc in a url.

transform_netloc is a function taking the netloc and returning a
tuple. The first element of this tuple is the new netloc. The
entire tuple is returned.

Returns a tuple containing the transformed url as item 0 and the
original tuple returned by transform_netloc as item 1.
r   )
r   r   Zurlsplitr   r   r2   ZqueryZfragmentZ
urlunsplitr   )r   r   ZpurlZnetloc_tupleZ
url_piecesZsurl   &&    r.   _transform_urlr     sp     <<  %D#DKK0L++|A		4::t}}UJ<<"":.Dm\222r0   c                r   r   r   r+   r-   r.   r/   r/     s     * * * *r0   c                 s    \        V 4      # rX   )r   r   r<   r.   _get_netlocr     s    !&))r0   c                sF    V ^8  d   QhR\         R\        \         ,          /# r   r   r+   r-   r.   r/   r/     s     $ $3 $5: $r0   c                 s    \        V 4      3# rX   )r   r   r<   r.   _redact_netlocr     s    &!##r0   c          
      s    V ^8  d   QhR\         R\        \         \         \        \        \         ,          \        \         ,          3,          3,          /# r'   r   r(   )r*   r   r   r+   r-   r.   r/   r/     s:     	* 	*		*
3U8C=(3-7889	*r0   c                s4    \        V \        4      w  pw  r#WV3# )zz
Parse a url into separate netloc, auth, and url with no auth.

Returns: (url_without_auth, netloc, (username, password))
r   r   )r   Zurl_without_authr   r   r   r.   split_auth_netloc_from_urlr     s#     (6c;'G$nvT))r0   c                rb   r   r)   r+   r-   r.   r/   r/   
  s     / /c /c /r0   c                0    \        V \        4      ^ ,          # )z7Return a copy of url with 'username:password@' removed.r   r   r<   r.   remove_auth_from_urlr   
  s     #{+A..r0   c                rb   r   r)   r+   r-   r.   r/   r/     s     2 2c 2c 2r0   c                r   )z.Replace the password in a given url with ****.)r   r   r   r<   r.   redact_auth_from_urlr     s    #~.q11r0   c                r   )r'   reqr(   )r   r*   r+   r-   r.   r/   r/     s     D Dk Dc Dr0   c                s    V P                   '       g   \        V 4      # \        V 4      P                  V P                   \        V P                   4      4      # )z:Replace the password in a given requirement url with ****.)r   r*   Zreplacer   )r   r<   r.   redact_auth_from_requirementr     s9    7773xs8CGG%9#''%BCCr0   )Zfrozenc                   sb   a  ] tR tRt o V 3R lR ltV 3R lR ltV 3R lR ltV 3R ltR	tV t	R
# )
HiddenTexti  c                r   r&   r)   r   r   r.   r/   HiddenText.__annotate__"  s     - -# -r0   c                s"    R \        V 4      : R2# )z<HiddenText Z>r)   r   r<   r.   __repr__ZHiddenText.__repr__"  s    c$i]!,,r0   c                r   r&   r)   r   r   r.   r/   r   %  s       r0   c                s    V P                   # rX   redactedr   r<   r.   __str__ZHiddenText.__str__%  s    }}r0   c                s&   < V ^8  d   QhRS[ RS[/# )r'   otherr(   )r
   rM   r   r   r.   r/   r   )  s     + +C +D +r0   c                sh    \        V 4      \        V4      Jd   R # V P                  VP                  8H  # )F)r   secret)r   r   r   r.   __eq__ZHiddenText.__eq__)  s*    :T%[( {{ell**r0   c                s2   < V ^8  d   Qh/ S[ ;R&   S[ ;R&   # )r'   r   r   r)   r   r   r.   r/   r     s     K  M r0   rY   N)
r   r   r   r   r   r   r   r   r   r   r   r   r.   r   r     s*     
- - + +  r0   r   c                r   )r'   r   r(   r*   r   r+   r-   r.   r/   r/   2  s     . .c .j .r0   c                 s    \        V R R7      # )r   r   )r   )r   r<   r.   
hide_valuer   2  s    ef--r0   c                r   r   r   r+   r-   r.   r/   r/   6  s     . .# .* .r0   c                 s0    \        V 4      p\        WR 7      # )r   )r   r   )r   r   rB   r.   hide_urlr   6  s    #C(Hc--r0   c                r>   )r'   modifying_pipr(   NrM   r+   r-   r.   r/   r/   ;  s     
 
D 
T 
r0   c                s   RR\         P                  P                   2R\         P                  P                   R\         P                  P                   2.pT ;'       dF    \        ;'       d8    \
        P                  P                  \         P                  ^ ,          4      V9   pV'       dY   \         P                  RR.\         P                  R,          ,           p\        RP                  RP                  V4      4      4      hR# )zProtection of pip.exe from modification on Windows

On Windows, any operation modifying pip should be run as:
    python -m pip ...
rD   rd   z-m:i   NNz3To modify pip, please run the following command:
{}r   N)rF   rR   ZmajorZminorr    r1   r2   rE   rG   rH   r   r,   r3   )r   Z	pip_namesZshould_show_use_python_msgZnew_commandr   r.   (protect_pip_from_modification_on_windowsr   ;  s     	
c$$%&
c$$%Qs'7'7'='=&>?I 	PP'PPbgg&6&6sxx{&Cy&P  "~~tU3chhrlBBII%
 	
 "r0   c                    V ^8  d   QhRR/# r'   r(   NrY   r+   r-   r.   r/   r/   U  s     ; ;$ ;r0   c                 s   \        4       '       d   R# \        P                  P                  \        P
                  ! R4      R4      p \        P                  P                  V 4      '       g   R# \        P                  ! V 4      h)zCheck whether the current environment is externally managed.

If the ``EXTERNALLY-MANAGED`` config file is found, the current environment
is considered externally managed, and an ExternallyManagedEnvironment is
raised.
NZstdlibzEXTERNALLY-MANAGED)	r"   r1   r2   r3   	sysconfigZget_pathr   r   Zfrom_config)Zmarkerr5   r.   check_externally_managedr   U  sW      !!WW\\),,X68LMF77>>&!!
&
2
26
::r0   c                r%   r&   r   r+   r-   r.   r/   r/   d  s     8 8 8r0   c                 sr    \         P                  RJ;'       d    \         P                  P                  4       # )zIs this console interactive?N)rF   ZstdinZisattyrY   r0   r.   is_console_interactiver   d  s&    99D 77SYY%5%5%77r0   c                s^    V ^8  d   QhR\         R\        R\        \        \        3,          /# )r'   r2   	blocksizer(   )r*   r8   r   r
   r+   r-   r.   r/   r/   i  s)     	 	C 	C 	eCHo 	r0   c                s   \         P                  ! 4       p^ p\        V R4      ;_uu_ 4       p\        WAR7       F&  pV\	        V4      ,          pVP                  V4       K(  	  RRR4       W#3#   + '       g   i     Y#3# ; i)z5Return (hash, length) for path using hashlib.sha256()Zrb)r   N)hashlibZsha256Zopenr   r;   Zupdate)r2   r   ZhZlengthr   Zblockr   r.   	hash_filer   i  sn     	AF	dD		Q 3Ec%j FHHUO 4 
 9	 
	 9s   7A..B 	c                s~    V ^8  d   QhR\         \        ,          R\        \        \        \        3,          ,          /# )r'   iterabler(   )r   r
   r   r   r+   r-   r.   r/   r/   u  s+     + +x} +%S/)B +r0   c                s.    \        V 4      p \        W 4      # )zR
Return paired elements.

For example:
    s -> (s0, s1), (s2, s3), (s4, s5), ...
)Ziterr   )r   r<   r.   pairwiser   u  s     H~Hx**r0   c          	      s    V ^8  d   QhR\         \        .\        3,          R\        \        ,          R\        \        \        ,          \        \        ,          3,          /# )r'   predr   r(   )r   r$   rM   r   r   r+   r-   r.   r/   r/     sE     
3 
3
A39

3)1!
3
8A;#$
3r0   c                sH    \        V4      w  r#\        W4      \        W4      3# )z
Use a predicate to partition entries into false entries and true entries,
like

    partition(is_odd, range(10)) --> 0 2 4 6 8   and  1 3 5 7 9
)r   r   Zfilter)r   r   Zt1Zt2rm   r.   	partitionr     s$     ]FBt &"222r0   c                   s"  a a ] tR tRt oRV3R lV 3R llltRV3R lV 3R llltRV3R lV 3R llltRV3R lV 3R	 llltRV3R
 lV 3R llltRV3R lV 3R lllt	RV3R lV 3R lllt
RV3R lV 3R llltRV3R lV 3R llltRtVtV ;t# )r#   i  c                s|   < V ^8  d   QhRS[ RS[RS[RS[S[,          RS[S[R,          ,          RS[S[,          /# )r'   config_holder
source_dirbuild_backendbackend_pathrunnerpython_executable).N)r
   r*   r   r   r   r   r.   r/   -ConfiguredBuildBackendHookCaller.__annotate__  sY     + ++ + 	+
 sm+ ),-+ $C=+r0   c                s6   < \         SV `  W#WEV4       Wn        R # rX   )super__init__r   )r   r   r   r   r  r  r  	__class__s   &&&&&&&r.   r  Z)ConfiguredBuildBackendHookCaller.__init__  s"     	|=N	
 +r0   c                h   < V ^8  d   QhRS[ RS[S[S[ S[3,          ,          RS[S[ ,          RS[ /# r'   wheel_directoryconfig_settingsmetadata_directoryr(   r*   r   r   r
   r   r   r.   r/   r    E     	
 	
	
 "'#s("34	
 %SM		

 
	
r0   c                R   < V P                   P                  p\        SV `  WVR 7      # )r  r  )r   r  r  build_wheelr   r
  r  r  csr     &&&& r.   r  Z,ConfiguredBuildBackendHookCaller.build_wheel  s3     //w"DV # 
 	
r0   c                sR   < V ^8  d   QhRS[ RS[S[S[ S[3,          ,          RS[ /# )r'   sdist_directoryr  r(   r  r   r   r.   r/   r    s<     H HH "'#s("34H 
	Hr0   c                sP   < V P                   P                  p\        SV `  WR 7      # )r  )r   r  r  build_sdist)r   r  r  r  r  s   &&& r.   r  Z,ConfiguredBuildBackendHookCaller.build_sdist  s)    
 //w"?"GGr0   c                r  r	  r  r   r   r.   r/   r    r  r0   c                r  r  )r   r  r  build_editabler  r  r.   r  Z/ConfiguredBuildBackendHookCaller.build_editable  s3     //w%DV & 
 	
r0   c                \   < V ^8  d   QhRS[ S[S[S[3,          ,          RS[S[,          /# r'   r  r(   r   r   r*   r
   r   r   r   r.   r/   r    3     H H'S(9:H	#Hr0   c                P   < V P                   P                  p\        SV `  VR 7      # r  )r   r  r  get_requires_for_build_wheelr   r  r  r     && r.   r  Z=ConfiguredBuildBackendHookCaller.get_requires_for_build_wheel  )     //w3B3GGr0   c                r  r  r  r   r   r.   r/   r    r  r0   c                r  r  )r   r  r  get_requires_for_build_sdistr  r   r.   r"  Z=ConfiguredBuildBackendHookCaller.get_requires_for_build_sdist  r!  r0   c                r  r  r  r   r   r.   r/   r    s3     K K'S(9:K	#Kr0   c                r  r  )r   r  r  get_requires_for_build_editabler  r   r.   r#  Z@ConfiguredBuildBackendHookCaller.get_requires_for_build_editable  s)     //w6r6JJr0   c                sX   < V ^8  d   QhRS[ RS[S[S[ S[3,          ,          RS[RS[ /# r'   r  r  _allow_fallbackr(   r*   r   r   r
   rM   r   r   r.   r/   r    sA     
 

 "'#s("34
 	

 

r0   c                T   < V P                   P                  p\        SV `  VVVR 7      # )r  r  r%  )r   r  r   prepare_metadata_for_build_wheelr   r  r  r%  r  r  r  r.   r)  ZAConfiguredBuildBackendHookCaller.prepare_metadata_for_build_wheel  s6     //w71+ 8 
 	
r0   c          	      sh   < V ^8  d   QhRS[ RS[S[S[ S[3,          ,          RS[RS[S[ ,          /# r$  r&  r   r   r.   r/   r    sE     
 

 "'#s("34
 	

 
#
r0   c                r'  r(  )r   r  r  #prepare_metadata_for_build_editabler*  r  r.   r+  ZDConfiguredBuildBackendHookCaller.prepare_metadata_for_build_editable  s6     //w:1+ ; 
 	
r0   )r   )NNNr   rX   )NT)r   r   r   r   r  r  r  r  r  r"  r#  r)  r+  r   r   Z__classcell__)r  r   s   @@r.   r#   r#     sl     + +	
 	
H H	
 	
H HH HK K
 

 
 
r0   c                r   r   rY   r+   r-   r.   r/   r/     s      T r0   c                 s   \        4       '       d   R# \        \        R4      '       g   R# \        P                  R8X  g   \        P                  R8X  d   R# \        P
                  ! 4       ^ 8w  d   R# \        P                  R4       R# )zOutput a warning for sudo users on Unix.

In a virtual environment, sudo pip still writes to virtualenv.
On Windows, users may run pip as Administrator without issues.
This warning only applies to Unix root users outside of virtualenv.
NgetuidZwin32Zcygwinab  Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager, possibly rendering your system unusable. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv. Use the --root-user-action option if you know what you are doing and want to suppress this warning.)r"   Zhasattrr1   rF   Zplatformr,  r   ZwarningrY   r0   r.   warn_if_run_as_rootr-    s^      !!2x   ||w#,,(":	yy{a
NN	)r0   )rT   rh   rn   rx   r   r   r   r   r   rI   rC   r   r   r#      )FN)z.bak)T)Zhttps)r.  )}rA   r   r   Zloggingr1   r   rS   r`   rF   r   Zurllib.parser   Zdataclassesr   Z	functoolsr   Zior   Z	itertoolsr   r   r   Zpathlibr   Ztypesr   r	   Ztypingr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Z"pip._vendor.packaging.requirementsr   Zpip._vendor.pyproject_hooksr   rD   r   Zpip._internal.exceptionsr   r   Zpip._internal.locationsr   Zpip._internal.utils.compatr    Zpip._internal.utils.retryr!   Zpip._internal.utils.virtualenvr"   Z__all__Z	getLoggerr   r   r$   r_   r^   r8   r:   r*   r   rN   ZOnErrZFILE_CHUNK_SIZEr6   r=   rC   rI   rT   rO   rP   rQ   rh   rn   rz   r|   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r#   r-  rY   r0   r.   <module>r/     sU       	    
   !   3 3  -    & ; >  O ; . + C" 
		8	$CL
]#]MA
BCcM"Cx}hsm;<<=,m4c9:,g.34X0&	 $, %,	
& 
 $& R!
$9 %$ !0
""7)H )"#	"(:((3(*$	*/2
D $+ + +(..

4;8
	+
3W
'= W
tr0   