Ë
    »ÿæiª\  ã                  óL  — 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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 d dlmZ d dlmZ d dlmZ d dlmZmZmZ d dlmZ d d	l m!Z!m"Z" d d
l#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* d dl+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2m3Z3 d dl4m5Z5 d dl6m7Z7 d dl8m9Z9 d dl:m;Z; g d¢Z< ejz                  e>«      Z? e)d«      Z@eAeBeC   eCe"f   ZDeAeEeEeEf   ZFeAeGeAe'eG   e'eG   f   f   ZHe&e!eeCge$f   ZIe&e!eeDge$f   ZJdZKdQd„ZLdRd„ZMdSd„ZNdQd„ZO e9dd¬«      dTdUd„«       ZPdVd„ZQdVd„ZReRd œ	 	 	 	 	 	 	 	 	 dWd!„ZSdXd"„ZTdYdZd#„ZUd[d$„ZVd\d%„ZWd[d&„ZXd]d'„ZYd]d(„ZZd^d)„Z[d_d*„Z\d`d+„Z]dad,„Z^eKf	 	 	 	 	 dbd-„Z_dcddd/„Z`ded0„Zadfd1„Zbdad2„Zcdgd3„Zd G d4„ d5e«      Zedhd6„Zfdid7„Zgdjdkd8„Zhdld9„Zidmd:„Zjdnd;„Zk	 	 	 	 	 	 dod<„Zldmd=„Zmdpd>„Zn	 	 	 	 dqd?„Zodrd@„ZpdrdA„ZqdsdB„Zr ed.¬C«       G dD„ dE«      «       ZsdtdF„ZtdudG„ZudvdH„ZvdwdI„ZwdxdJ„ZxdydzdK„Zyd{dL„Zz	 	 	 	 	 	 d|dM„Z{ G dN„ dOe.«      Z|dwdP„Z}y)}é    )ÚannotationsN)Ú	GeneratorÚIterableÚIteratorÚMappingÚSequence)Ú	dataclass)Úpartial)ÚStringIO)ÚfilterfalseÚteeÚzip_longest)ÚPath)ÚFunctionTypeÚTracebackType)ÚAnyÚBinaryIOÚCallableÚOptionalÚTextIOÚTypeVarÚcast)ÚRequirement)ÚBuildBackendHookCaller)Ú__version__)ÚCommandErrorÚExternallyManagedEnvironment)Úget_major_minor_version)ÚWINDOWS)Úretry)Úrunning_under_virtualenv)ÚrmtreeÚdisplay_pathÚ
backup_dirÚaskÚsplitextÚformat_sizeÚis_installable_dirÚnormalize_pathÚrenamesÚget_progÚ
ensure_dirÚremove_auth_from_urlÚcheck_externally_managedÚ ConfiguredBuildBackendHookCallerÚTé   c                 óô   — t         j                  j                  t         j                  j                  t        «      dd«      } t         j                  j                  | «      } dt        › d| › dt        «       › d�S )Nz..zpip z from z	 (python Ú))ÚosÚpathÚjoinÚdirnameÚ__file__Úabspathr   r   )Úpip_pkg_dirs    úm/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/pip/_internal/utils/misc.pyÚget_pip_versionr<   F   sX   € Ü—'‘'—,‘,œrŸw™wŸ™¬xÓ8¸$ÀÓE€KÜ—'‘'—/‘/ +Ó.€Kà”+�˜f [ M°Ô;RÓ;TÐ:UÐUVÐWÐWó    c                ó†   — t        | «      dk  r| dt        | «      z
  dz  z  } nt        | «      dkD  r| dd } t        d| «      S )ax  
    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).
    é   )r   NÚVersionInfo)Úlenr   )Úpy_version_infos    r;   Únormalize_version_inforC   M   sP   € ô ˆ?Ó˜aÒØ˜A¤ OÓ 4Ñ4¸Ñ<Ñ<‰Ü	ˆ_Ó	 Ò	!Ø)¨"¨1Ð-ˆä�˜Ó/Ð/r=   c                óÜ   — 	 t        j                  | «       y# t        $ rJ}|j                  t        j                  k7  r#|j                  t        j
                  k7  r‚ Y d}~yY d}~yd}~ww xY w)z os.path.makedirs without EEXIST.N)r4   ÚmakedirsÚOSErrorÚerrnoÚEEXISTÚ	ENOTEMPTY)r5   Úes     r;   r,   r,   `   sN   € ðÜ
�‰�DÕøÜò à�7‰7”e—l‘lÒ" q§w¡w´%·/±/Ò'AØô (BÔ"ûðús   ‚ ˜	A+¡;A&Á&A+c                 óÊ   — 	 t         j                  j                  t        j                  d   «      } | dv rt        j
                  › d�S | S # t        t        t        f$ r Y yw xY w)Nr   )z__main__.pyz-cz -m pipÚpip)	r4   r5   ÚbasenameÚsysÚargvÚ
executableÚAttributeErrorÚ	TypeErrorÚ
IndexError)Úprogs    r;   r+   r+   j   s_   € ðÜ�w‰w×Ñ¤§¡¨¡Ó,ˆØÐ(Ñ(Ü—n‘nÐ% WÐ-Ð-àˆKøÜœI¤zÐ2ò ØØðús   ‚AA Á	A ÁA"Á!A"r?   g      à?)Ústop_after_delayÚwaitc                óÊ   — |rt         }|€t        }t        t        |¬«      }t        j
                  dk\  rt        j                  | |¬«       y t        j                  | |¬«       y )N©Úonexc)r?   é   )Úonerror)Ú_onerror_ignoreÚ_onerror_reraiser
   Úrmtree_errorhandlerrN   Úversion_infoÚshutilr"   )ÚdirÚignore_errorsrY   Úhandlers       r;   r"   r"   w   sK   € áÜˆØ€}Ü ˆÜÔ0¸Ô>€GÜ
×Ñ˜7Ò"ä�‰�c Ö)ä�‰�c 7Ö+r=   c                  ó   — y ©N© ©Ú_argss    r;   r\   r\   …   s   € Ør=   c                  ó   — ‚ re   rf   rg   s    r;   r]   r]   ‰   s   € Ø	r=   rX   c               óh  — 	 t        j                  |«      j                  }|t        j                  z  s2	 t        j
                  ||t        j                  z  «       	  | |«       yt        |t        «      s|\  }}} || ||«       y# t        $ r Y yw xY w# t        $ r Y Œ;w xY w# t        $ r Y ŒJw xY w)a1  
    `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)r4   ÚstatÚst_moderF   ÚS_IWRITEÚchmodÚ
isinstanceÚBaseException)Úfuncr5   Úexc_inforY   rl   Ú_s         r;   r^   r^   �   s°   € ð Ü—'‘'˜$“-×'Ñ'ˆð
 ”T—]‘]Ò"ð
	Ü�H‰H�T˜7¤T§]¡]Ñ2Ô3ð
Ù�T”
Øô �h¤Ô.Ø!‰ˆˆ8�QÙ	ˆ$��hÕøô) ò áðûô ò Ùðûô ò 	Ùð	ús4   ‚B µ'B% ÁB Â	BÂBÂ	B"Â!B"Â%	B1Â0B1c                ó¾   — 	 t        | «      j                  t        j                  «       «      }t        j
                  j                  d|«      S # t        $ r | cY S w xY w)zTGives the display value for a given path, making it relative to cwd
    if possible.Ú.)r   Úrelative_toÚcwdÚ
ValueErrorr4   r5   r6   )r5   Úrelatives     r;   r#   r#   ¶   sN   € ðÜ˜“:×)Ñ)¬$¯(©(«*Ó5ˆô �7‰7�<‰<˜˜XÓ&Ð&øô ò àŠðús   ‚,A ÁAÁAc                óÄ   — d}|}t         j                  j                  | |z   «      r6|dz  }|t        |«      z   }t         j                  j                  | |z   «      rŒ6| |z   S )z\Figure out the name of a directory to back up the given dir to
    (adding .bak, .bak2, etc)é   )r4   r5   ÚexistsÚstr)ra   ÚextÚnÚ	extensions       r;   r$   r$   Á   sZ   € ð 	
€AØ€IÜ
�'‰'�.‰.˜˜y™Ô
)Ø	ˆQ‰ˆØœ#˜a›&‘Lˆ	ô �'‰'�.‰.˜˜y™Õ
)ð �‰?Ðr=   c                ó�   — t         j                  j                  dd«      j                  «       D ]
  }||v sŒ|c S  t	        | |«      S )NÚPIP_EXISTS_ACTIONÚ )r4   ÚenvironÚgetÚsplitr%   )ÚmessageÚoptionsÚactions      r;   Úask_path_existsrŠ   Ì   sB   € Ü—*‘*—.‘.Ð!4°bÓ9×?Ñ?ÖAˆØ�WÒØŠMð Bô ˆw˜Ó Ð r=   c                ó^   — t         j                  j                  d«      rt        d| › �«      ‚y)z&Raise an error if no input is allowed.ÚPIP_NO_INPUTz5No input was expected ($PIP_NO_INPUT set); question: N)r4   r„   r…   Ú	Exception©r‡   s    r;   Ú_check_no_inputr�   Ó   s.   € ä	‡z�z‡~�~�nÔ%ÜØCÀGÀ9ÐMó
ð 	
ð &r=   c                óÐ   — 	 t        | «       t        | «      }|j                  «       j                  «       }||vr+t	        dj                  |dj                  |«      «      «       n|S Œf)z@Ask the message interactively, with the given possible responsesz>Your response ({!r}) was not one of the expected responses: {}z, )r�   ÚinputÚstripÚlowerÚprintÚformatr6   )r‡   rˆ   Úresponses      r;   r%   r%   Û   sa   € à
Ü˜Ô Ü˜“>ˆØ—>‘>Ó#×)Ñ)Ó+ˆØ˜7Ñ"Üðß‘V˜H d§i¡i°Ó&8Ó9õð
 ˆOð r=   c                ó.   — t        | «       t        | «      S )zAsk for input interactively.)r�   r‘   rŽ   s    r;   Ú	ask_inputr˜   ê   s   € ä�GÔÜ�‹>Ðr=   c                óB   — t        | «       t        j                  | «      S )z!Ask for a password interactively.)r�   ÚgetpassrŽ   s    r;   Úask_passwordr›   ð   s   € ä�GÔÜ�?‰?˜7Ó#Ð#r=   c                óR   — | j                  «       } | dv ry| dv ryt        d| ›�«      ‚)zôConvert 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.
    )ÚyÚyesÚtÚtrueÚonÚ1r{   )r   ÚnoÚfÚfalseÚoffÚ0r   zinvalid truth value )r“   rx   )Úvals    r;   Ú	strtoboolr©   ö   s:   € ð �)‰)‹+€CØ
Ð2Ñ2ØØ	Ð5Ñ	5ØäÐ/°¨wÐ7Ó8Ð8r=   c                óˆ   — | dkD  r| dz  dz  d›d�S | dkD  rt        | dz  «      › d�S | dkD  r	| dz  d›d�S t        | «      › d�S )	Ni@B g     @�@iè  z.1fz MBi'  z kBz bytes)Úint)Úbytess    r;   r'   r'     sn   € Øˆ{ÒØ˜&‘. 4Ñ'¨Ð,¨CÐ0Ð0Ø	�Ò	Ü�e˜d‘lÓ#Ð$ CÐ(Ð(Ø	�ŠØ˜&‘. Ð% SÐ)Ð)ä�e“*�˜VÐ$Ð$r=   c           
     ó\  — | D �cg c]  }t        t        t        |«      «      ‘Œ } }t        | ddiŽD �cg c]  }t	        t        t
        |«      «      ‘Œ }}| D �cg c]:  }dj                  t        t        j                  ||«      «      j                  «       ‘Œ< }}||fS c c}w c c}w c c}w )z¸Return a list of formatted rows and a list of column sizes.

    For example::

    >>> tabulate([['foobar', 2000], [0xdeadbeef]])
    (['foobar     2000', '3735928559'], [10, 4])
    Ú	fillvaluerƒ   Ú )	ÚtupleÚmapr}   r   ÚmaxrA   r6   ÚljustÚrstrip)ÚrowsÚrowÚcolÚsizesÚtables        r;   Útabulaterº     s–   € ñ -1Ó1©D SŒE”#”c˜3“-Õ ¨D€DÐ1Ü+6¸Ð+KÈÒ+KÓLÑ+K CŒS””S˜#“ÕÐ+K€EÐLÙFJÓKÁd¸sˆS�X‰X”cœ#Ÿ)™) S¨%Ó0Ó1×8Ñ8Õ:Àd€EÐKØ�%ˆ<Ðùò 2ùÚLùÚKs   … B´ B$Á?B)c                ó<  — t         j                  j                  | «      syt         j                  j                  t         j                  j	                  | d«      «      ryt         j                  j                  t         j                  j	                  | d«      «      ryy)at  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)r4   r5   ÚisdirÚisfiler6   ©r5   s    r;   r(   r(     s_   € ô �7‰7�=‰=˜ÔØÜ	‡w�w‡~�~”b—g‘g—l‘l 4Ð)9Ó:Ô;ØÜ	‡w�w‡~�~”b—g‘g—l‘l 4¨Ó4Ô5ØØr=   c              #  ó>   K  — 	 | j                  |«      }|sy|–— Œ­w)z7Yield pieces of data from a file-like object until EOF.N)Úread)ÚfileÚsizeÚchunks      r;   Úread_chunksrÄ   0  s(   è ø€ ð Ø—	‘	˜$“ˆÙØØŠð	 ùs   ‚Tc                ó   — t         j                  j                  | «      } |r t         j                  j                  | «      } nt         j                  j	                  | «      } t         j                  j                  | «      S )zN
    Convert a path to its canonical, case-normalized, absolute version.

    )r4   r5   Ú
expanduserÚrealpathr9   Únormcase)r5   Úresolve_symlinkss     r;   r)   r)   ;  sV   € ô
 �7‰7×Ñ˜dÓ#€DÙÜ�w‰w×Ñ Ó%‰ä�w‰w�‰˜tÓ$ˆÜ�7‰7×Ñ˜DÓ!Ð!r=   c                ó’   — t        j                  | «      \  }}|j                  «       j                  d«      r|dd |z   }|dd }||fS )z,Like os.path.splitext, but take off .tar tooz.taréüÿÿÿN)Ú	posixpathr&   r“   Úendswith)r5   Úbaser~   s      r;   r&   r&   H  sN   € ä×"Ñ" 4Ó(�I€Dˆ#Ø‡z�zƒ|×Ñ˜VÔ$Ø�2�3ˆi˜#‰oˆØ�C�RˆyˆØ�ˆ9Ðr=   c                ó~  — t         j                  j                  |«      \  }}|r6|r4t         j                  j                  |«      st        j                  |«       t        j                  | |«       t         j                  j                  | «      \  }}|r|r	 t        j                  |«       yyy# t        $ r Y yw xY w)z7Like os.renames(), but handles renaming across devices.N)	r4   r5   r†   r|   rE   r`   ÚmoveÚ
removedirsrF   )ÚoldÚnewÚheadÚtails       r;   r*   r*   Q  s�   € ô —‘—‘˜sÓ#�J€Dˆ$Ù‘œRŸW™WŸ^™^¨DÔ1Ü
�‰�DÔä
‡K�K��SÔä—‘—‘˜sÓ#�J€Dˆ$Ù‘ð	Ü�M‰M˜$Õð €tøô ò 	Ùð	ús   ÂB0 Â0	B<Â;B<c                óh   — t        «       sy| j                  t        t        j                  «      «      S )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!   Ú
startswithr)   rN   Úprefixr¾   s    r;   Úis_localrÙ   b  s%   € ô $Ô%ØØ�?‰?œ>¬#¯*©*Ó5Ó6Ð6r=   c                ó0   — t        j                  | g|¢­Ž  y re   )ÚloggerÚinfo)ÚmsgÚargss     r;   Úwrite_outputrß   p  s   € Ü
‡K�K�Ð�dÔr=   c                  ó<   — e Zd ZU ded<   edd„«       Zedd„«       Zy)ÚStreamWrapperr   Úorig_streamc                ó"   —  | «       }||_         |S re   )râ   )Úclsrâ   Úrets      r;   Úfrom_streamzStreamWrapper.from_streamw  s   € á‹eˆØ%ˆŒØˆ
r=   c                ó.   — | j                   j                  S re   )râ   Úencoding©Úselfs    r;   rè   zStreamWrapper.encoding  s   € à×Ñ×(Ñ(Ð(r=   N)râ   r   Úreturnrá   ©rë   r}   )Ú__name__Ú
__module__Ú__qualname__Ú__annotations__Úclassmethodræ   Úpropertyrè   rf   r=   r;   rá   rá   t  s.   … ØÓàòó ðð ò)ó ñ)r=   rá   c            
     óÈ   — t        t        | t        t        | «      «      «      fi |¤Ž}|j	                  «       D ��ci c]  \  }}||“Œ
 }}}||d<   t        dd|«      S c c}}w )NÚreverse_mappingÚEnumrf   )ÚdictÚzipÚrangerA   ÚitemsÚtype)Ú
sequentialÚnamedÚenumsÚkeyÚvalueÚreverses         r;   Úenumr  …  sb   € Ü”�Z¤¤s¨:£Ó!7Ó8ÑB¸EÑB€EØ,1¯K©K¬MÔ:©M™j˜c 5ˆu�c‰z¨M€GÑ:Ø&€EÐ
ÑÜ�˜˜EÓ"Ð"ùó ;s   ¼Ac                ó,   — |€| S d| v rd| › d�} | › d|› �S )z.
    Build a netloc from a host-port pair
    Ú:Ú[Ú]rf   )ÚhostÚports     r;   Úbuild_netlocr  Œ  s3   € ð €|ØˆØ
ˆd�{à�4�&˜ˆ{ˆØˆV�1�T�FÐÐr=   c                óT   — | j                  d«      dk\  rd| vr
d| vrd| › d�} |› d| › �S )z)
    Build a full URL from a netloc.
    r  é   Ú@r  r  z://)Úcount)ÚnetlocÚschemes     r;   Úbuild_url_from_netlocr  ˜  sA   € ð ‡|�|�CÓ˜AÒ #¨VÑ"3¸À6Ñ8Ià�V�H˜A�ˆØˆX�S˜˜Ð!Ð!r=   c                ó†   — t        | «      }t        j                  j                  |«      }|j                  |j
                  fS )z2
    Return the host-port pair from a netloc.
    )r  ÚurllibÚparseÚurlparseÚhostnamer  )r  ÚurlÚparseds      r;   Úparse_netlocr  ¢  s5   € ô   Ó
'€CÜ�\‰\×"Ñ" 3Ó'€FØ�?‰?˜FŸK™KÐ'Ð'r=   c                ó  — d| vr| dfS | j                  dd«      \  }} d}d|v r|j                  dd«      \  }}n|d}}t        j                  j	                  |«      }|�t        j                  j	                  |«      }| ||ffS )zp
    Parse out and remove the auth information from a netloc.

    Returns: (netloc, (username, password)).
    r  ©NNr{   Nr  )Úrsplitr†   r  r  Úunquote)r  ÚauthÚpwÚusers       r;   Úsplit_auth_from_netlocr  «  s”   € ð �&ÑØ�|Ð#Ð#ð
 —=‘=  aÓ(�L€Dˆ&Ø€BØ
ˆd�{ð —:‘:˜c 1Ó%‰ˆ‰bà˜ˆbˆä�<‰<×Ñ Ó%€DØ	€~Ü�\‰\×!Ñ! "Ó%ˆà�D˜"�:ÐÐr=   c                óŽ   — t        | «      \  } \  }}|€| S |€d}d}n!t        j                  j                  |«      }d}|› |› d| › �S )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"
    ú****rƒ   z:****r  )r  r  r  Úquote)r  r  Úpasswords      r;   Úredact_netlocr$  È  s`   € ô  6°fÓ=Ñ€FÑˆT�8Ø€|ØˆØÐØˆØ‰ä�|‰|×!Ñ! $Ó'ˆØˆØˆV�H�:˜Q˜v˜hÐ'Ð'r=   c                ó"  — t         j                  j                  | «      } ||j                  «      }|j                  |d   |j
                  |j                  |j                  f}t         j                  j                  |«      }|t        d|«      fS )aR  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   ÚNetlocTuple)
r  r  Úurlsplitr  r  r5   ÚqueryÚfragmentÚ
urlunsplitr   )r  Útransform_netlocÚpurlÚnetloc_tupleÚ
url_piecesÚsurls         r;   Ú_transform_urlr0  Ü  sp   € ô �<‰<× Ñ  Ó%€DÙ# D§K¡KÓ0€Là—+‘+˜|¨A™°·	±	¸4¿:¹:ÀtÇ}Á}ÐU€JÜ�<‰<×"Ñ" :Ó.€DØ”�m \Ó2Ð2Ð2r=   c                ó   — t        | «      S re   )r  ©r  s    r;   Ú_get_netlocr3  ð  s   € Ü! &Ó)Ð)r=   c                ó   — t        | «      fS re   )r$  r2  s    r;   Ú_redact_netlocr5  ô  s   € Ü˜&Ó!Ð#Ð#r=   c                ó8   — t        | t        «      \  }\  }}|||fS )z†
    Parse a url into separate netloc, auth, and url with no auth.

    Returns: (url_without_auth, netloc, (username, password))
    ©r0  r3  )r  Úurl_without_authr  r  s       r;   Úsplit_auth_netloc_from_urlr9  ø  s'   € ô (6°c¼;Ó'GÑ$Ð‘n�v˜tØ˜V TÐ)Ð)r=   c                ó(   — t        | t        «      d   S )z7Return a copy of url with 'username:password@' removed.r   r7  ©r  s    r;   r-   r-     s   € ô ˜#œ{Ó+¨AÑ.Ð.r=   c                ó(   — t        | t        «      d   S )z.Replace the password in a given url with ****.r   )r0  r5  r;  s    r;   Úredact_auth_from_urlr=    s   € ä˜#œ~Ó.¨qÑ1Ð1r=   c                ó    — | j                   st        | «      S t        | «      j                  | j                   t        | j                   «      «      S )z:Replace the password in a given requirement url with ****.)r  r}   Úreplacer=  )Úreqs    r;   Úredact_auth_from_requirementrA    s7   € à�7Š7Ü�3‹xˆÜˆs‹8×Ñ˜CŸG™GÔ%9¸#¿'¹'Ó%BÓCÐCr=   )Úfrozenc                  ó>   — e Zd ZU ded<   ded<   dd„Zdd„Zd	d„ZdZy)
Ú
HiddenTextr}   ÚsecretÚredactedc                ó    — dt        | «      ›d�S )Nz<HiddenText Ú>)r}   ré   s    r;   Ú__repr__zHiddenText.__repr__  s   € Øœc $›i˜]¨!Ð,Ð,r=   c                ó   — | j                   S re   ©rF  ré   s    r;   Ú__str__zHiddenText.__str__  s   € Ø�}‰}Ðr=   c                óˆ   — t        | «      t        |«      u r'| j                  t        t        |«      j                  k(  S t        S re   )rú   rE  r   rD  ÚNotImplemented)rê   Úothers     r;   Ú__eq__zHiddenText.__eq__"  s6   € ä�‹:œ˜e›Ñ$ð —;‘;¤$¤z°5Ó"9×"@Ñ"@Ñ@Ð@ÜÐr=   Nrì   )rO  Úobjectrë   Úbool)rí   rî   rï   rð   rI  rL  rP  Ú__hash__rf   r=   r;   rD  rD    s"   … àƒKØƒMó-óóð �Hr=   rD  c                ó   — t        | d¬«      S )Nr!  rK  )rD  )rÿ   s    r;   Ú
hide_valuerU  0  s   € Ü�e fÔ-Ð-r=   c                ó2   — t        | «      }t        | |¬«      S )NrK  )r=  rD  )r  rF  s     r;   Úhide_urlrW  4  s   € Ü# CÓ(€HÜ�c HÔ-Ð-r=   c                óÐ  — ddt         j                  j                  › �dt         j                  j                  › dt         j                  j                  › �g}| xr: t        xr2 t
        j                  j                  t         j                  d   «      |v }|rPt         j                  ddgt         j                  dd z   }t        dj                  dj                  |«      «      «      ‚y)	z�Protection of pip.exe from modification on Windows

    On Windows, any operation modifying pip should be run as:
        python -m pip ...
    rL   ru   r   z-mr{   Nz3To modify pip, please run the following command:
{}r¯   )rN   r_   ÚmajorÚminorr   r4   r5   rM   rO   rP   r   r•   r6   )Úmodifying_pipÚ	pip_namesÚshould_show_use_python_msgÚnew_commands       r;   Ú(protect_pip_from_modification_on_windowsr_  9  sÏ   € ð 	Ø
Œc×Ñ×$Ñ$Ð%Ð&Ø
Œc×Ñ×$Ñ$Ð% Q¤s×'7Ñ'7×'=Ñ'=Ð&>Ð?ð€Ið 	ÒPœ'ÒP¤b§g¡g×&6Ñ&6´s·x±xÀ±{Ó&CÀyÐ&Pð ñ "Ü—~‘~ t¨UÐ3´c·h±h¸q¸r°lÑBˆÜØB×IÑIØ—‘˜Ó%óó
ð 	
ð "r=   c                 óè   — t        «       ryt        j                  j                  t	        j
                  d«      d«      } t        j                  j                  | «      syt        j                  | «      ‚)zëCheck 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.
    NÚstdlibzEXTERNALLY-MANAGED)	r!   r4   r5   r6   Ú	sysconfigÚget_pathr½   r   Úfrom_config)Úmarkers    r;   r.   r.   S  sQ   € ô  Ô!ØÜ�W‰W�\‰\œ)×,Ñ,¨XÓ6Ð8LÓM€FÜ�7‰7�>‰>˜&Ô!ØÜ
&×
2Ñ
2°6Ó
:Ð:r=   c                 óf   — t         j                  duxr t         j                  j                  «       S )zIs this console interactive?N)rN   ÚstdinÚisattyrf   r=   r;   Úis_console_interactiveri  b  s#   € ä�9‰9˜DÐ Ò7¤S§Y¡Y×%5Ñ%5Ó%7Ð7r=   c                óâ   — t        j                  «       }d}t        | d«      5 }t        ||¬«      D ]!  }|t	        |«      z  }|j                  |«       Œ# 	 ddd«       ||fS # 1 sw Y   ||fS xY w)z5Return (hash, length) for path using hashlib.sha256()r   Úrb)rÂ   N)ÚhashlibÚsha256ÚopenrÄ   rA   Úupdate)r5   Ú	blocksizeÚhÚlengthr¤   Úblocks         r;   Ú	hash_filert  g  sn   € ô 	�‰Ó€AØ€FÜ	ˆd�DÔ	˜QÜ  ¨×3ˆEØ”c˜%“jÑ ˆFØ�H‰H�U�Oñ 4÷ 
ð ˆfˆ9Ð÷	 
ð ˆfˆ9Ðús   £2A"Á"A.c                ó0   — t        | «      } t        | | «      S )zb
    Return paired elements.

    For example:
        s -> (s0, s1), (s2, s3), (s4, s5), ...
    )Úiterr   )Úiterables    r;   Úpairwiserx  s  s   € ô �H‹~€HÜ�x Ó*Ð*r=   c                óN   — t        |«      \  }}t        | |«      t        | |«      fS )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   Úfilter)Úpredrw  Út1Út2s       r;   Ú	partitionr~  ~  s*   € ô �‹]�F€BˆÜ�t˜RÓ ¤&¨¨rÓ"2Ð2Ð2r=   c                  ó  ‡ — e Zd Z	 	 	 d
	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Z	 	 d	 	 	 	 	 	 	 dˆ fd„Z	 d	 	 	 	 	 dˆ fd„Z	 	 d	 	 	 	 	 	 	 dˆ fd„Z	 d	 	 	 dˆ fd„Z	 d	 	 	 dˆ fd„Z	 d	 	 	 dˆ fd„Z		 	 d	 	 	 	 	 	 	 dˆ fd„Z
	 	 d	 	 	 	 	 	 	 dˆ fd	„Zˆ xZS )r/   c                ó:   •— t         ‰| �  |||||«       || _        y re   )ÚsuperÚ__init__Úconfig_holder)rê   rƒ  Ú
source_dirÚbuild_backendÚbackend_pathÚrunnerÚpython_executableÚ	__class__s          €r;   r‚  z)ConfiguredBuildBackendHookCaller.__init__Œ  s(   ø€ ô 	‰ÑØ˜ |°VÐ=Nô	
ð +ˆÕr=   c                óT   •— | j                   j                  }t        ‰| �  |||¬«      S ©N)Úconfig_settingsÚmetadata_directory)rƒ  rŒ  r�  Úbuild_wheel©rê   Úwheel_directoryrŒ  r�  Úcsr‰  s        €r;   rŽ  z,ConfiguredBuildBackendHookCaller.build_wheelš  s5   ø€ ð ×Ñ×/Ñ/ˆÜ‰wÑ"Ø¨RÐDVð #ó 
ð 	
r=   c                óR   •— | j                   j                  }t        ‰| �  ||¬«      S ©N)rŒ  )rƒ  rŒ  r�  Úbuild_sdist)rê   Úsdist_directoryrŒ  r‘  r‰  s       €r;   r”  z,ConfiguredBuildBackendHookCaller.build_sdist¥  s+   ø€ ð
 ×Ñ×/Ñ/ˆÜ‰wÑ" ?ÀBÐ"ÓGÐGr=   c                óT   •— | j                   j                  }t        ‰| �  |||¬«      S r‹  )rƒ  rŒ  r�  Úbuild_editabler�  s        €r;   r—  z/ConfiguredBuildBackendHookCaller.build_editable­  s5   ø€ ð ×Ñ×/Ñ/ˆÜ‰wÑ%Ø¨RÐDVð &ó 
ð 	
r=   c                óP   •— | j                   j                  }t        ‰| �  |¬«      S r“  )rƒ  rŒ  r�  Úget_requires_for_build_wheel©rê   rŒ  r‘  r‰  s      €r;   r™  z=ConfiguredBuildBackendHookCaller.get_requires_for_build_wheel¸  ó)   ø€ ð ×Ñ×/Ñ/ˆÜ‰wÑ3ÀBÐ3ÓGÐGr=   c                óP   •— | j                   j                  }t        ‰| �  |¬«      S r“  )rƒ  rŒ  r�  Úget_requires_for_build_sdistrš  s      €r;   r�  z=ConfiguredBuildBackendHookCaller.get_requires_for_build_sdist¾  r›  r=   c                óP   •— | j                   j                  }t        ‰| �  |¬«      S r“  )rƒ  rŒ  r�  Úget_requires_for_build_editablerš  s      €r;   rŸ  z@ConfiguredBuildBackendHookCaller.get_requires_for_build_editableÄ  s)   ø€ ð ×Ñ×/Ñ/ˆÜ‰wÑ6ÀrÐ6ÓJÐJr=   c                óT   •— | j                   j                  }t        ‰| �  |||¬«      S ©N)r�  rŒ  Ú_allow_fallback)rƒ  rŒ  r�  Ú prepare_metadata_for_build_wheel©rê   r�  rŒ  r¢  r‘  r‰  s        €r;   r£  zAConfiguredBuildBackendHookCaller.prepare_metadata_for_build_wheelÊ  s6   ø€ ð ×Ñ×/Ñ/ˆÜ‰wÑ7Ø1ØØ+ð 8ó 
ð 	
r=   c                óT   •— | j                   j                  }t        ‰| �  |||¬«      S r¡  )rƒ  rŒ  r�  Ú#prepare_metadata_for_build_editabler¤  s        €r;   r¦  zDConfiguredBuildBackendHookCaller.prepare_metadata_for_build_editable×  s6   ø€ ð ×Ñ×/Ñ/ˆÜ‰wÑ:Ø1ØØ+ð ;ó 
ð 	
r=   )NNN)rƒ  r   r„  r}   r…  r}   r†  ú
str | Noner‡  zCallable[..., None] | Nonerˆ  r§  r  )r�  r}   rŒ  úMapping[str, Any] | Noner�  r§  rë   r}   re   )r•  r}   rŒ  r¨  rë   r}   )rŒ  r¨  rë   zSequence[str])NT)r�  r}   rŒ  r¨  r¢  rR  rë   r}   )r�  r}   rŒ  r¨  r¢  rR  rë   r§  )rí   rî   rï   r‚  rŽ  r”  r—  r™  r�  rŸ  r£  r¦  Ú__classcell__)r‰  s   @r;   r/   r/   ‹  sŸ  ø„ ð $(Ø-1Ø(,ð+àð+ð ð+ð ð	+ð
 !ð+ð +ð+ð &õ+ð" 59Ø)-ð		
àð	
ð 2ð	
ð 'ð		
ð
 
õ	
ð 59ðHàðHð 2ðHð 
õ	Hð 59Ø)-ð		
àð	
ð 2ð	
ð 'ð		
ð
 
õ	
ð ;?ðHØ7ðHà	õHð ;?ðHØ7ðHà	õHð ;?ðKØ7ðKà	õKð 59Ø $ð	
àð
ð 2ð
ð ð	
ð
 
õ
ð  59Ø $ð	
àð
ð 2ð
ð ð	
ð
 
÷
ñ 
r=   r/   c                 óä   — t        «       ryt        t        d«      syt        j                  dk(  st        j                  dk(  ryt        j
                  «       dk7  ryt        j                  d«       y)züOutput 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ÚgetuidÚwin32Úcygwinr   ab  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!   Úhasattrr4   rN   Úplatformr«  rÛ   Úwarningrf   r=   r;   Úwarn_if_run_as_rootr±  å  sX   € ô  Ô!ØÜ”2�xÔ Øô ‡|�|�wÒ¤#§,¡,°(Ò":Øä	‡y�yƒ{�aÒØä
‡N�Nð	)õr=   rì   )rB   ztuple[int, ...]rë   ztuple[int, int, int])r5   r}   rë   ÚNone)FN)ra   r}   rb   rR  rY   zOnExc | Nonerë   r²  )rh   r   rë   r²  )
rq   r   r5   r   rr   zExcInfo | BaseExceptionrY   ÚOnExcrë   r²  )r5   r}   rë   r}   )z.bak)ra   r}   r~   r}   rë   r}   )r‡   r}   rˆ   zIterable[str]rë   r}   )r‡   r}   rë   r²  )r‡   r}   rë   r}   )r¨   r}   rë   r«   )r¬   Úfloatrë   r}   )rµ   zIterable[Iterable[Any]]rë   ztuple[list[str], list[int]])r5   r}   rë   rR  )rÁ   r   rÂ   r«   rë   zGenerator[bytes, None, None])T)r5   r}   rÉ   rR  rë   r}   )r5   r}   rë   ztuple[str, str])rÒ   r}   rÓ   r}   rë   r²  )rÝ   r   rÞ   r   rë   r²  )rû   r   rü   r   rë   z	type[Any])r  r}   r  z
int | Nonerë   r}   )Úhttps)r  r}   r  r}   rë   r}   )r  r}   rë   ztuple[str | None, int | None])r  r}   rë   r&  )r  r}   rë   r}   )r  r}   r+  z Callable[[str], tuple[Any, ...]]rë   ztuple[str, NetlocTuple])r  r}   rë   z
tuple[str])r  r}   rë   z.tuple[str, str, tuple[str | None, str | None]])r  r}   rë   r}   )r@  r   rë   r}   )rÿ   r}   rë   rD  )r  r}   rë   rD  )r[  rR  rë   r²  )rë   r²  )rë   rR  )r1   )r5   r}   rp  r«   rë   ztuple[Any, int])rw  zIterable[Any]rë   zIterator[tuple[Any, Any]])r{  zCallable[[T], bool]rw  zIterable[T]rë   ztuple[Iterable[T], Iterable[T]])~Ú
__future__r   rG   rš   rl  Úloggingr4   rÌ   r`   rk   rN   rb  Úurllib.parser  Úcollections.abcr   r   r   r   r   Údataclassesr	   Ú	functoolsr
   Úior   Ú	itertoolsr   r   r   Úpathlibr   Útypesr   r   Útypingr   r   r   r   r   r   r   Ú"pip._vendor.packaging.requirementsr   Úpip._vendor.pyproject_hooksr   rL   r   Úpip._internal.exceptionsr   r   Úpip._internal.locationsr   Úpip._internal.utils.compatr   Úpip._internal.utils.retryr    Úpip._internal.utils.virtualenvr!   Ú__all__Ú	getLoggerrí   rÛ   r0   r°   rú   rp   ÚExcInfor«   r@   r}   r&  r³  ÚOnErrÚFILE_CHUNK_SIZEr<   rC   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$  r0  r3  r5  r9  r-   r=  rA  rD  rU  rW  r_  r.   ri  rt  rx  r~  r/   r±  rf   r=   r;   Ú<module>rÍ     s×  ðÝ "ã Û Û Û Û 	Û Û Û Û 
Û Û ß LÕ LÝ !Ý Ý ß 3Ñ 3Ý ß -÷÷ ñ õ ;Ý >å ß OÝ ;Ý .Ý +Ý Cò€ð" 
ˆ×	Ñ	˜8Ó	$€áˆCƒL€Ø
��]Ñ# ]°MÐAÑ
B€Ø�C˜˜c�MÑ"€Ø�C˜˜x¨™}¨h°s©mÐ;Ñ<Ð<Ñ=€Ø�,  mÐ4°cÐ9Ñ:€Ø�,  gÐ.°Ð3Ñ4€à€óXó0ó&ó	ñ ˜ Ô$ó
,ó %ð
,ó	ó
ð $ñ& Ø
ð& à
ð& ð &ð& ð
 ð& ð 
ó& óR'ôó!ó
óóó$ó9ó %óóð$ !0ðØ
ðØðà!óô
"óóó"7óô)�Hô )ó"#ó	ô"ó(óó:(ð(3Ø	ð3Ø @ð3àó3ó(*ó$ð	*Ø	ð	*à3ó	*ó/ó2ó
Dñ �$Ô÷ð ó ðó0.ó.ó

ó4;ó8ô
	ó+ð
3Ø
ð
3Ø)4ð
3à$ó
3ôW
Ð'=ô W
ôtr=   