<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
Pfml                 @   s  d dl mZ 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Zd dlZd dlZd dlmZ d dlmZmZmZ d dl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$m%Z% d d
l&m'Z' e%rd dlm(Z) nd dlm)Z) dddddddddddddddddddd d!d"d#d$gZ*e	j+e,Z-dzZ.d{Z/d|Z0d}Z1e0e. e1 e/ Z2e0e1 Z3yd dl4Z4e3e.7 Z3W n  e5k
r   e-j6d1 Y nX yd dl7Z7e3e/7 Z3W n  e5k
r   e-j6d2 Y nX d3d4 Z8d5d! Z9d6d Z:e'd7d8d9d~d;dZ;d<d= Z<d>d Z=dd@dZ>dAdB Z?dCd Z@dDd ZAdEd ZBdFd ZCdGd ZDejEfdHdIZFdJd ZGdKd ZHddMdZIdNd ZJdOd ZKdPdQ ZLdRdS ZMdTdU ZNdVdW ZOdXdY ZPdZd[ ZQdLedLd:d:fd\d]ZRd^d_ ZSd`da ZTdbd ZUdcdd ZVddedZWdfd ZXdgd ZYddidZZdjdk Z[dldm Z\G dndo doe]Z^G dpdq dqe)Z_ej`drds Zadtd  ZbG dudv dve]Zcddwd$Zddxdy ZedS )    )absolute_import)dequeN)InstallationError)console_to_str
expanduserstdlib_pkgs)site_packages	user_siterunning_under_virtualenvvirtualenv_no_globalwrite_delete_marker_filedistutils_scheme)pkg_resources)input)PY2)retry)BytesIO)StringIOrmtreedisplay_path
backup_dirasksplitextformat_sizeis_installable_diris_svn_pagefile_contentssplit_leading_dirhas_leading_dirnormalize_pathrenamesget_terminal_sizeget_prog
unzip_file
untar_fileunpack_filecall_subprocesscaptured_stdout
ensure_dirARCHIVE_EXTENSIONSSUPPORTED_EXTENSIONSget_installed_version.tar.bz2.tbz.tar.xz.txz.tlz.tar.lz	.tar.lzma.zip.whl.tar.gz.tgz.tarzbz2 module is not availablezlzma module is not availablec             O   s,   yt | S  tk
r&   |||Y nX d S )N)
__import__ImportError)Zpkg_or_module_stringZExceptionTypeargskwargs r<   /usr/lib/python3.6/__init__.pyimport_or_raiseI   s    r>   c             C   sD   yt j|  W n0 tk
r> } z|jtjkr. W Y dd}~X nX dS )z os.path.makedirs without EEXIST.N)osmakedirsOSErrorerrnoZEEXIST)pather<   r<   r=   r(   P   s
    c               C   sD   y$t jjtjd dkr"dtj S W n tttfk
r>   Y nX dS )Nr   __main__.py-cz	%s -m pipZpip)rE   rF   )	r?   rC   basenamesysargv
executableAttributeError	TypeError
IndexErrorr<   r<   r<   r=   r"   Y   s    i  i  )Zstop_max_delayZ
wait_fixedFc             C   s   t j| |td d S )N)ignore_errorsonerror)shutilr   rmtree_errorhandler)dirrN   r<   r<   r=   r   c   s    c             C   s2   t j|jtj@ r,t j|tj | | dS  dS )zOn Windows, the files in .svn are read-only, so when rmtree() tries to
    remove them, an exception is thrown.  We catch that here, remove the
    read-only attribute, and hopefully continue without problems.N)r?   statst_modeS_IREADchmodS_IWRITE)funcrC   exc_infor<   r<   r=   rQ   i   s
    rQ   c             C   st   t jjt jj| } tjd dkrB| jtj d} | jtj	 d} | j
t j t jj rpd| tt j d  } | S )zTGives the display value for a given path, making it relative to cwd
    if possible.r      replace.N)r?   rC   normcaseabspathrH   version_infodecodegetfilesystemencodingencodegetdefaultencoding
startswithgetcwdseplen)rC   r<   r<   r=   r   x   s    .bakc             C   s:   d}|}x(t jj| | r0|d7 }|t| }q
W | | S )z\Figure out the name of a directory to back up the given dir to
    (adding .bak, .bak2, etc)   )r?   rC   existsstr)rR   extn	extensionr<   r<   r=   r      s    c             C   s2   x&t jjddj D ]}||kr|S qW t| |S )NZPIP_EXISTS_ACTION )r?   environgetsplitr   )messageoptionsactionr<   r<   r=   ask_path_exists   s    rv   c             C   sZ   xTt jjdrtd|  t| }|j j }||krNtd|dj|f  q|S qW dS )z@Ask the message interactively, with the given possible responsesZPIP_NO_INPUTz7No input was expected ($PIP_NO_INPUT set); question: %sz<Your response (%r) was not one of the expected responses: %sz, N)	r?   rp   rq   	Exceptionr   striplowerprintjoin)rs   rt   Zresponser<   r<   r=   r      s    c             C   sL   | dkrd| d d  S | d	kr,d| d  S | dkr@d| d  S d|  S d S )
Ni  z%.1fMBg     @@
   z%ikBz%.1fkBz%ibytesi@B i'  r<   )bytesr<   r<   r=   r      s    c             C   s2   t jj| sdS t jj| d}t jj|r.dS dS )z@Return True if `path` is a directory containing a setup.py file.Fzsetup.pyT)r?   rC   isdirr{   isfile)rC   Zsetup_pyr<   r<   r=   r      s    c             C   s   t jd| ot jd| t jS )zT
    Returns true if the page appears to be the index page of an svn repository
    z<title>[^<]*Revision \d+:z#Powered by (?:<a[^>]*?>)?Subversion)researchI)Zhtmlr<   r<   r=   r      s    c          	   C   s$   t | d}|j jdS Q R X d S )Nrbzutf-8)openreadr`   )filenamefpr<   r<   r=   r      s    c             c   s    x| j |}|sP |V  qW dS )z7Yield pieces of data from a file-like object until EOF.N)r   )filesizechunkr<   r<   r=   read_chunks   s
    
r   c             C   sh   | j dj d} d| krHd| kr4| jd| jdk s<d| krH| jddS d| kr\| jddS | dfS d S )N/\ri   ro   )lstripfindrr   )rC   r<   r<   r=   r      s    $c             C   sD   d}x:| D ]2}t |\}}|s"dS |dkr0|}q
||kr
dS q
W dS )zyReturns true if all the paths have the same leading path name
    (i.e., everything is in one subdirectory in an archive)NFT)r   )pathsZcommon_prefixrC   prefixrestr<   r<   r=   r      s    
Tc             C   s2   t | } |rtjj| } ntjj| } tjj| S )zN
    Convert a path to its canonical, case-normalized, absolute version.

    )r   r?   rC   realpathr^   r]   )rC   Zresolve_symlinksr<   r<   r=   r      s
    c             C   s@   t j| \}}|j jdr8|dd | }|dd }||fS )z,Like os.path.splitext, but take off .tar tooz.tar   Nr   )	posixpathr   ry   endswith)rC   baserl   r<   r<   r=   r      s
    c             C   s|   t jj|\}}|r0|r0t jj| r0t j| tj| | t jj| \}}|rx|rxyt j| W n tk
rv   Y nX dS )z7Like os.renames(), but handles renaming across devices.N)	r?   rC   rr   rj   r@   rP   Zmove
removedirsrA   )oldnewheadtailr<   r<   r=   r      s    
c             C   s   t  s
dS t| 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."

    T)r
   r   rd   rH   r   )rC   r<   r<   r=   is_local  s    r   c             C   s   t t| S )z
    Return True if given Distribution object is installed locally
    (i.e. within current virtualenv).

    Always True if we're not in a virtualenv.

    )r   dist_location)distr<   r<   r=   dist_is_local!  s    r   c             C   s   t t| }|jt tS )zF
    Return True if given Distribution is installed in user site.
    )r   r   rd   r	   )r   	norm_pathr<   r<   r=   dist_in_usersite,  s    r   c             C   s   t t| jt tS )ze
    Return True if given Distribution is installed in
    distutils.sysconfig.get_python_lib().
    )r   r   rd   r   )r   r<   r<   r=   dist_in_site_packages4  s    
r   c             C   s,   t t| }|jt tdd jdd S )zf
    Return True if given Distribution is installed in
    path matching distutils_scheme layout.
    ro   purelibpythonr   )r   r   rd   r   rr   )r   r   r<   r<   r=   dist_in_install_path>  s    r   c             C   s8   x2t jD ](}tjj|| jd }tjj|rdS qW dS )z$Is distribution an editable install?z	.egg-linkTF)rH   rC   r?   r{   project_namer   )r   Z	path_itemegg_linkr<   r<   r=   dist_is_editableH  s
    r   c                sl   | r
t ndd |r dd  ndd  |r6dd ndd |rHtnd	d
  fddtjD S )a  
    Return a list of installed Distribution objects.

    If ``local_only`` is True (default), only return installations
    local to the current virtualenv, if in a virtualenv.

    ``skip`` argument is an iterable of lower-case project names to
    ignore; defaults to stdlib_pkgs

    If ``editables`` is False, don't report editables.

    If ``editables_only`` is True , only report editables.

    If ``user_only`` is True , only report installations in the user
    site directory.

    c             S   s   dS )NTr<   )dr<   r<   r=   
local_testj  s    z/get_installed_distributions.<locals>.local_testc             S   s   dS )NTr<   )r   r<   r<   r=   editable_testn  s    z2get_installed_distributions.<locals>.editable_testc             S   s
   t |  S )N)r   )r   r<   r<   r=   r   q  s    c             S   s   t | S )N)r   )r   r<   r<   r=   editables_only_testu  s    z8get_installed_distributions.<locals>.editables_only_testc             S   s   dS )NTr<   )r   r<   r<   r=   r   x  s    c             S   s   dS )NTr<   )r   r<   r<   r=   	user_test~  s    z.get_installed_distributions.<locals>.user_testc                s:   g | ]2}|r|j kr |r|r|r|qS r<   )key).0r   )r   r   r   skipr   r<   r=   
<listcomp>  s    
z/get_installed_distributions.<locals>.<listcomp>)r   r   r   working_set)Z
local_onlyr   Zinclude_editablesZeditables_onlyZ	user_onlyr<   )r   r   r   r   r   r=   get_installed_distributionsQ  s    

r   c             C   s   g }t  r6t r|jt qN|jt trN|jt ntrD|jt |jt x0|D ](}tjj|| jd }tjj	|rT|S qTW dS )a  
    Return the path for the .egg-link file if it exists, otherwise, None.

    There's 3 scenarios:
    1) not in a virtualenv
       try to find in site.USER_SITE, then site_packages
    2) in a no-global virtualenv
       try to find in site_packages
    3) in a yes-global virtualenv
       try to find in site_packages, then site.USER_SITE
       (don't look in global location)

    For #1 and #3, there could be odd cases, where there's an egg-link in 2
    locations.

    This method will just return the first one found.
    z	.egg-linkN)
r
   r   appendr   r	   r?   rC   r{   r   r   )r   ZsitesZsiteZegglinkr<   r<   r=   egg_link_path  s    



r   c             C   s   t | }|r|S | jS )z
    Get the site-packages location of this distribution. Generally
    this is dist.location, except in the case of develop-installed
    packages, where dist.location is the source code location, and we
    want to know where the egg-link file is.

    )r   location)r   r   r<   r<   r=   r     s    r   c           
   C   s   dd } | dp| dp| d}|sZy(t jt j t j}| |}t j| W n   Y nX |szt jjddt jjdd	f}t|d t|d fS )
zlReturns a tuple (x, y) representing the width(x) and the height(x)
    in characters of the terminal window.c             S   sP   y4dd l }dd l}dd l}|jd|j| |jd}W n
   d S |dkrLd S |S )Nr   ZhhZ1234)r   r   )fcntltermiosstructunpackZioctlZ
TIOCGWINSZ)fdr   r   r   crr<   r<   r=   ioctl_GWINSZ  s    z'get_terminal_size.<locals>.ioctl_GWINSZr   ri   rZ   ZLINES   ZCOLUMNSP   )r?   r   ctermidO_RDONLYcloserp   rq   int)r   r   r   r<   r<   r=   r!     s    c              C   s   t jd} t j|  | S )zBGet the current umask which involves having to set it temporarily.r   )r?   umask)maskr<   r<   r=   current_umask  s    

r   c             C   s  t | t| d}ztj|dd}t|j o0|}x|j D ]}|j}|j|}|}	|rdt	|d }	t
jj||	}	t
jj|	}
|	jds|	jdrt |	 q<t |
 t|	d}z|j| W d|j  |jd	? }|rtj|r|d
@ rt
j|	dt  d
B  X q<W W d|j  X dS )a  
    Unzip the file (with path `filename`) to the destination `location`.  All
    files are written based on system defaults and umask (i.e. permissions are
    not preserved), except that regular file members with any execute
    permissions (user, group, or world) have "chmod +x" applied after being
    written. Note that for windows, any execute changes using os.chmod are
    no-ops per the python docs.
    r   T)Z
allowZip64ri   r   r   wbN   I   i  )r(   r   zipfileZZipFiler   ZnamelistZinfolistr   r   r   r?   rC   r{   dirnamer   writer   Zexternal_attrrS   S_ISREGrV   r   )r   r   flattenZzipfpzipleadinginfonamedatafnrR   r   moder<   r<   r=   r#     s0    	




 c          (   C   s@  t | | j jds$| j jdr*d}nL| j jtr>d}n8| j jtrRd}n$| j jdrfd}ntjd|  d	}tj| |}zt	d
d |j
 D }x|j
 D ]}|j}|dkrq|rt|d }tjj||}ytj|j|d| W n tjk
r   Y nX |j r"t | q|j rxy|j|| W n8 tk
rt } ztjd| |j| wW Y dd}~X nX qy|j|}	W n< ttfk
r } ztjd| |j| wW Y dd}~X nX t tjj| t|d}
tj|	|
 W dQ R X |	j  |j|| |jd@ rtj |dt!  dB  qW W d|j  X dS )a  
    Untar the file (with path `filename`) to the destination `location`.
    All files are written based on system defaults and umask (i.e. permissions
    are not preserved), except that regular file members with any execute
    permissions (user, group, or world) have "chmod +x" applied after being
    written.  Note that for windows, any execute changes using os.chmod are
    no-ops per the python docs.
    z.gzz.tgzzr:gzzr:bz2zr:xzz.tarrz-Cannot determine compression type for file %szr:*c             S   s   g | ]}|j d kr|j qS )pax_global_header)r   )r   memberr<   r<   r=   r   (  s    zuntar_file.<locals>.<listcomp>r   ri   )r   z/In the tar file %s the member %s is invalid: %sNr   r   i  )"r(   ry   r   BZ2_EXTENSIONSXZ_EXTENSIONSloggerwarningtarfiler   r   Z
getmembersr   r   r?   rC   r{   Zdata_filterr[   ZLinkOutsideDestinationErrorr~   ZissymZ_extract_memberrw   ZextractfileKeyErrorrK   r   rP   Zcopyfileobjr   utimer   rV   r   )r   r   r   Ztarr   r   r   rC   excr   Zdestfpr<   r<   r=   r$     sh    	



c             C   s   t jj| } |dks,| j jts,tj| rDt| || jd d n|dkslt	j
| sl| j jtt t rxt| | nX|r|jdrtt| rddlm} |d|j j| ntjd	| || td
| d S )Nzapplication/zipz.whl)r   zapplication/x-gzipz	text/htmlr   )
Subversionzsvn+zZCannot unpack file %s (downloaded from %s, content-type: %s); cannot detect archive formatz%Cannot determine archive format of %s)r?   rC   r   ry   r   ZIP_EXTENSIONSr   Z
is_zipfiler#   r   Z
is_tarfileTAR_EXTENSIONSr   r   r$   rd   r   r   Zpip.vcs.subversionr   Zurlr   r   criticalr   )r   r   Zcontent_typelinkr   r<   r<   r=   r%   `  s,    


raisec             C   s,  |r
d }nt j}|d krng }xF| D ]>}	d|	ksFd|	ksFd|	ksFd|	krVd|	jdd }	|j|	 q"W dj|}tjd| tjj	 }
|r|
j
| yt j| t jd |||
d}W n2 tk
r } ztjd	||  W Y d d }~X nX |d k	rNg }x\t|jj }|sP |j }|j|d  tj tjkr:tj| q|d k	r|j  qW |j  |d k	r~|jrt|jd
 n
|jd |jr|dkrtj tjkr| rtjd| tjdj|d  td||j|f n:|dkrtjd||j| n|dkrntdt| |s(dj|S d S )N 
"'z"%s"z\"zRunning command %s)stderrstdinstdoutcwdenvz#Error %s while executing command %serrordoner   z Complete output from command %s:ro   z)
----------------------------------------z,Command "%s" failed with error code %s in %swarnz$Command "%s" had error code %s in %signorezInvalid value: on_returncode=%s)
subprocessPIPEr[   r   r{   r   debugr?   rp   copyupdatePopenZSTDOUTrw   r   r   r   readlinerstripZgetEffectiveLevelstd_loggingDEBUGZspinwait
returncodeZfinishr   r   r   
ValueErrorrepr)cmdZshow_stdoutr   Zon_returncodeZcommand_descZextra_environZspinnerr   Z	cmd_partspartr   procr   Z
all_outputliner<   r<   r=   r&     sz    
 










c             C   sh   t | d}|j }W dQ R X dtjddg}x4|D ],}y|j|}W n tk
r\   w4Y nX P q4W |S )aR  Return the contents of *filename*.

    Try to decode the file contents with utf-8, the preferred system encoding
    (e.g., cp1252 on some Windows machines), and latin1, in that order.
    Decoding a byte string with latin1 will never raise an error. In the worst
    case, the returned string will contain some garbage characters.

    r   Nzutf-8Flatin1)r   r   localegetpreferredencodingr`   UnicodeDecodeError)r   r   r   Z	encodingsencr<   r<   r=   read_text_file  s    	
r  c             C   s   t j|  t|  d S )N)r?   r@   r   )Z	build_dirr<   r<   r=   _make_build_dir  s    
r  c               @   s(   e Zd ZdZdd Zdd Zdd ZdS )	FakeFilezQWrap a list of lines in an object with readline() to make
    ConfigParser happy.c             C   s   dd |D | _ d S )Nc             s   s   | ]
}|V  qd S )Nr<   )r   lr<   r<   r=   	<genexpr>  s    z$FakeFile.__init__.<locals>.<genexpr>)_gen)selflinesr<   r<   r=   __init__  s    zFakeFile.__init__c             C   sD   y*y
t | jS  tk
r&   | jj  S X W n tk
r>   dS X d S )Nro   )nextr  	NameErrorStopIteration)r  r<   r<   r=   r     s    
zFakeFile.readlinec             C   s   | j S )N)r  )r  r<   r<   r=   __iter__  s    zFakeFile.__iter__N)__name__
__module____qualname____doc__r  r   r  r<   r<   r<   r=   r     s   	r  c               @   s$   e Zd Zedd Zedd ZdS )StreamWrapperc             C   s   || _ |  S )N)orig_stream)clsr  r<   r<   r=   from_stream  s    zStreamWrapper.from_streamc             C   s   | j jS )N)r  encoding)r  r<   r<   r=   r"    s    zStreamWrapper.encodingN)r  r  r  classmethodr!  propertyr"  r<   r<   r<   r=   r    s   r  c             c   s@   t t| }tt| tj| zt t| V  W dtt| | X dS )zReturn a context manager used by captured_stdout/stdin/stderr
    that temporarily replaces the sys stream *stream_name* with a StringIO.

    Taken from Lib/support/__init__.py in the CPython repo.
    N)getattrrH   setattrr  r!  )Zstream_nameZorig_stdoutr<   r<   r=   captured_output   s
    
r'  c               C   s   t dS )zCapture the output of sys.stdout:

       with captured_stdout() as stdout:
           print('hello')
       self.assertEqual(stdout.getvalue(), 'hello
')

    Taken from Lib/support/__init__.py in the CPython repo.
    r   )r'  r<   r<   r<   r=   r'   /  s    	c               @   s    e Zd ZdZdd Zdd ZdS )cached_propertyzA property that is only computed once per instance and then replaces
       itself with an ordinary attribute. Deleting the attribute resets the
       property.

       Source: https://github.com/bottlepy/bottle/blob/0.11.5/bottle.py#L175
    c             C   s   t |d| _|| _d S )Nr  )r%  r  rX   )r  rX   r<   r<   r=   r  C  s    zcached_property.__init__c             C   s(   |d kr| S | j | }|j| j j< |S )N)rX   __dict__r  )r  objr   valuer<   r<   r=   __get__G  s    zcached_property.__get__N)r  r  r  r  r  r,  r<   r<   r<   r=   r(  ;  s   r(  c             C   s@   t jj| }|dkrt j }n
t j|}|j|}|r<|jS dS )zCGet the installed version of dist_name avoiding pkg_resources cacheN)r   ZRequirementparseZ
WorkingSetr   version)Z	dist_nameZlookup_dirsZreqr   r   r<   r<   r=   r+   O  s    


c             C   s   t | dd dS )zConsume an iterable at C speed.r   )maxlenN)r   )iteratorr<   r<   r=   consumec  s    r1  )r,   r-   )r.   r/   r0   r1   r2   )r3   r4   )r5   r6   r7   )F)rh   )T)T)TNr   NNN)N)fZ
__future__r   collectionsr   
contextlibrB   ior	  Zloggingr   r   r?   r   rP   rS   r   rH   r   r   Zpip.exceptionsr   Z
pip.compatr   r   r   Zpip.locationsr   r	   r
   r   r   r   Zpip._vendorr   Zpip._vendor.six.movesr   Zpip._vendor.sixr   Zpip._vendor.retryingr   r   r   __all__Z	getLoggerr  r   r   r   r   r   r)   r*   bz2r9   r   Zlzmar>   r(   r"   r   rQ   r   r   rv   r   r   r   r   r   DEFAULT_BUFFER_SIZEr   r   r   r   r   r    r   r   r   r   r   r   r   r   r   r!   r   r#   r$   r%   r&   r  r  objectr  r  contextmanagerr'  r'   r(  r+   r1  r<   r<   r<   r=   <module>   s    
	



	
	

	5%
+S!   
_
