zmc
2023-10-12 ed135d79df12a2466b52dae1a82326941211dcc9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
U
H=®dkã@s ddlmZddlZddlZddlZddlZddlZddlZddlZddl    Z    ddl
Z
ddl Z ddl Z ddl mZddlmZddlmZddlmZddlmZddlmZmZdd    lmZmZmZmZmZdd
l m!Z"dd l#m$Z%dd l&m'Z'dd l(m)Z)ddl*m+Z+m,Z,m-Z-ddl.m/Z/m0Z0m1Z1m2Z2ddl3m4Z4m5Z5ddl6m7Z7m8Z8er\ddlm9Z:n ddlm:Z:e4rÈddl;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGddlHmIZIeEeJeJeJfZKeFdƒZLdddddddddd d!d"d#d$gZMe NeO¡ZPd%d&„ZQd'd(„ZRd)d"„ZSd*d „ZTed+d,d-d—d/d„ƒZUd0d1„ZVd2d3„ZWd4d„ZXd˜d6d„ZYd7d8„ZZd9d:„Z[d;d„Z\d<d=„Z]d>d?„Z^d@d„Z_dAdB„Z`dCd„ZaejbfdDdE„Zcd™dGd„ZddHd„ZedId„ZfdJdK„ZgdLdM„ZhdNdO„ZidPdQ„ZjdRdS„ZkdFe1dFd.d.dfdTdU„ZldVdW„ZmdXdY„ZndZd[„Zod\d]„Zpd^d_„ZqGd`da„daerƒZsGdbdc„dce:ƒZtejuddde„ƒZvdfd!„Zwdgdh„Zxdšdid#„Zydjdk„Zzdldm„Z{dndo„Z|d›dqdr„Z}dsdt„Z~dudv„Zdwdx„Z€dydz„Zd{d|„Z‚d}d~„Zƒdd€„Z„dd$„Z…d‚dƒ„Z†Gd„d…„d…erƒZ‡d†d‡„Zˆdˆd‰„Z‰dŠd‹„ZŠdŒd„Z‹dœdd„ZŒd‘d’„Zd“d”„ZŽd•d–„ZdS)é)Úabsolute_importN©Údeque)Útee)Ú pkg_resources)Úcanonicalize_name)Úretry)ÚPY2Ú    text_type)ÚfilterÚ filterfalseÚinputÚmapÚ zip_longest)Úparse)Úunquote)Ú __version__)Ú CommandError)Úget_major_minor_versionÚ site_packagesÚ    user_site)ÚWINDOWSÚ
expanduserÚ stdlib_pkgsÚstr_to_display)ÚMYPY_CHECK_RUNNINGÚcast)Úrunning_under_virtualenvÚvirtualenv_no_global)ÚBytesIO)ÚStringIO) ÚAnyÚAnyStrÚCallableÚ    ContainerÚIterableÚIteratorÚListÚOptionalÚTextÚTupleÚTypeVarÚUnion)Ú DistributionÚTÚrmtreeÚ display_pathÚ
backup_dirÚaskÚsplitextÚ format_sizeÚis_installable_dirÚnormalize_pathÚrenamesÚget_progÚcaptured_stdoutÚ
ensure_dirÚget_installed_versionÚremove_auth_from_urlcCs4tj tj t¡dd¡}tj |¡}d t|tƒ¡S)Nz..zpip {} from {} (python {}))    ÚosÚpathÚjoinÚdirnameÚ__file__ÚabspathÚformatrr)Ú pip_pkg_dir©rEúOD:\z\workplace\VsCode\pyvenv\venv\Lib\site-packages\pip/_internal/utils/misc.pyÚget_pip_versionNs ÿÿrGcCsDt|ƒdkr"|dt|ƒd7}nt|ƒdkr:|dd…}td|ƒ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).
    é)rNÚ VersionInfo)Úlenr)Úpy_version_inforErErFÚnormalize_version_infoZs
  rLc
CsPzt |¡Wn<tk
rJ}z|jtjkr:|jtjkr:‚W5d}~XYnXdS)z os.path.makedirs without EEXIST.N)r=ÚmakedirsÚOSErrorÚerrnoÚEEXISTÚ    ENOTEMPTY)r>ÚerErErFr:ns
c
CsRz2tj tjd¡}|dkr*d tj¡WS|WSWnttt    fk
rLYnXdS)Nr)z __main__.pyz-cz    {} -m pipÚpip)
r=r>ÚbasenameÚsysÚargvrCÚ
executableÚAttributeErrorÚ    TypeErrorÚ
IndexError)ÚprogrErErFr8ys
i¸ iô)Ústop_max_delayÚ
wait_fixedFcCstj||tddS)N)Ú ignore_errorsÚonerror)Úshutilr/Úrmtree_errorhandler)Údirr^rErErFr/‡sÿc    CsXzt |¡jtj@ }Wnttfk
r2YdSX|rRt |tj¡||ƒdS‚dS)zÑOn 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_IWRITEÚIOErrorrNÚchmod)Úfuncr>Úexc_infoÚhas_attr_readonlyrErErFraŽsracCsd|dkr dSt|tƒr|Sz| t ¡d¡}Wn0tk
r^trRtd |¡ƒ}nt    |ƒ}YnX|S)zû
    Convert a bytes (or text) path to text (unicode in Python 2) for display
    and logging purposes.
 
    This function should never error out. Also, this function is mainly needed
    for Python 2 since in Python 3 str paths are already text.
    NÚstrictzb{!r})
Ú
isinstancer
ÚdecoderUÚgetfilesystemencodingÚUnicodeDecodeErrorr    rrCÚascii)r>r0rErErFÚpath_to_display¢s    
rqcCsttj tj |¡¡}tjddkrB| t ¡d¡}| t     ¡d¡}| 
t  ¡tjj ¡rpd|t t  ¡ƒd…}|S)zTGives the display value for a given path, making it relative to cwd
    if possible.réÚreplaceÚ.N)r=r>ÚnormcaserBrUÚ version_informrnÚencodeÚgetdefaultencodingÚ
startswithÚgetcwdÚseprJ©r>rErErFr0Äsú.bakcCs6d}|}tj ||¡r.|d7}|t|ƒ}q||S)z\Figure out the name of a directory to back up the given dir to
    (adding .bak, .bak2, etc)é)r=r>ÚexistsÚstr)rbÚextÚnÚ    extensionrErErFr1Ñs cCs2tj dd¡ ¡D]}||kr|Sqt||ƒS)NÚPIP_EXISTS_ACTIONÚ)r=ÚenvironÚgetÚsplitr2)ÚmessageÚoptionsÚactionrErErFÚask_path_existsÝs
rŒcCstj d¡rtd |¡ƒ‚dS)z&Raise an error if no input is allowed.Ú PIP_NO_INPUTz7No input was expected ($PIP_NO_INPUT set); question: {}N)r=r†r‡Ú    ExceptionrC©r‰rErErFÚ_check_no_inputås  ÿÿrcCsFt|ƒt|ƒ}| ¡ ¡}||kr<td |d |¡¡ƒq|SqdS)z@Ask the message interactively, with the given possible responsesz>Your response ({!r}) was not one of the expected responses: {}z, N)rr ÚstripÚlowerÚprintrCr?)r‰rŠÚresponserErErFr2ïs ÿÿcCst|ƒt|ƒS)zAsk for input interactively.)rr rrErErFÚ    ask_inputÿsr•cCst|ƒt |¡S)z!Ask for a password interactively.)rÚgetpassrrErErFÚ ask_passwordsr—cCs\|dkrd |dd¡S|dkr4d t|dƒ¡S|dkrJd |d¡Sd t|ƒ¡SdS)    Ni@Bz    {:.1f} MBg@@ièi'z{} kBz    {:.1f} kBz{} bytes)rCÚint)ÚbytesrErErFr4 scs@dd„|Dƒ}dd„t|ddiŽDƒ‰‡fdd„|Dƒ}|ˆfS)z¸Return a list of formatted rows and a list of column sizes.
 
    For example::
 
    >>> tabulate([['foobar', 2000], [0xdeadbeef]])
    (['foobar     2000', '3735928559'], [10, 4])
    cSsg|]}ttt|ƒƒ‘qSrE)Útuplerr€©Ú.0ÚrowrErErFÚ
<listcomp>"sztabulate.<locals>.<listcomp>cSsg|]}ttt|ƒƒ‘qSrE)ÚmaxrrJ)rœÚcolrErErFrž#sÚ    fillvaluer…cs$g|]}d ttj|ˆƒ¡ ¡‘qS)ú )r?rr€ÚljustÚrstripr›©ÚsizesrErFrž$s)r)ÚrowsÚtablerEr¥rFÚtabulates    r©cCsPtj |¡sdStj |d¡}tj |¡r.dStj |d¡}tj |¡rLdSdS)zBIs path is a directory containing setup.py or pyproject.toml?
    Fzsetup.pyTzpyproject.toml)r=r>Úisdirr?Úisfile)r>Úsetup_pyÚpyproject_tomlrErErFr5(s   ccs| |¡}|sq|VqdS)z7Yield pieces of data from a file-like object until EOF.N)Úread)ÚfileÚsizeÚchunkrErErFÚ read_chunks7s
r²TcCs2t|ƒ}|rtj |¡}n tj |¡}tj |¡S)zN
    Convert a path to its canonical, case-normalized, absolute version.
 
    )rr=r>ÚrealpathrBru)r>Úresolve_symlinksrErErFr6@s
 cCs@t |¡\}}| ¡ d¡r8|dd…|}|dd…}||fS)z,Like os.path.splitext, but take off .tar tooz.taréüÿÿÿN)Ú    posixpathr3r’Úendswith)r>ÚbaserrErErFr3Ns
 cCsztj |¡\}}|r.|r.tj |¡s.t |¡t ||¡tj |¡\}}|rv|rvzt |¡Wntk
rtYnXdS)z7Like os.renames(), but handles renaming across devices.N)    r=r>rˆrrMr`ÚmoveÚ
removedirsrN)ÚoldÚnewÚheadÚtailrErErFr7Xs
 cCstƒs
dS| ttjƒ¡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)rryr6rUÚprefixr|rErErFÚis_localjs
rÀcCs tt|ƒƒ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©ÚdistrErErFÚ dist_is_localys    rÄcCst|ƒ ttƒ¡S)zF
    Return True if given Distribution is installed in user site.
    )rÁryr6rrÂrErErFÚdist_in_usersite…srÅcCst|ƒ ttƒ¡S)z[
    Return True if given Distribution is installed in
    sysconfig.get_python_lib().
    )rÁryr6rrÂrErErFÚdist_in_site_packagessrÆcCs6tjD]*}tj ||jd¡}tj |¡rdSqdS)zC
    Return True if given Distribution is an editable install.
    ú    .egg-linkTF)rUr>r=r?Ú project_namer«)rÃÚ    path_itemÚegg_linkrErErFÚdist_is_editable–s
 
 rËcs€|rt |¡}ntj}|r t‰ndd„‰|r6dd„‰ndd„‰|rLdd„‰ndd„‰|r^t‰nd    d
„‰‡‡‡‡‡fd d „|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 ``include_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.
 
    If ``paths`` is set, only report the distributions present at the
    specified list of locations.
    cSsdS©NTrE©ÚdrErErFÚ
local_testÆsz/get_installed_distributions.<locals>.local_testcSsdSrÌrErÍrErErFÚ editable_testÊsz2get_installed_distributions.<locals>.editable_testcSs
t|ƒ S©N©rËrÍrErErFrÐÍscSst|ƒSrÑrÒrÍrErErFÚeditables_only_testÑsz8get_installed_distributions.<locals>.editables_only_testcSsdSrÌrErÍrErErFrÓÔscSsdSrÌrErÍrErErFÚ    user_testÚsz.get_installed_distributions.<locals>.user_testcs:g|]2}ˆ|ƒr|jˆkrˆ|ƒrˆ|ƒrˆ|ƒr|‘qSrE)Úkey)rœrΩrÐrÓrÏÚskiprÔrErFržÝs
ûz/get_installed_distributions.<locals>.<listcomp>)rÚ
WorkingSetÚ working_setrÄrÅ)Ú
local_onlyr×Úinclude_editablesÚeditables_onlyÚ    user_onlyÚpathsrÙrErÖrFÚget_installed_distributions¢s  
 
rßcCs*t|ƒ}tdd}dd„|Dƒ}| |¡S)NrE)r×cSsi|]}t|jƒ|“qSrE)rrÕ)rœÚprErErFÚ
<dictcomp>ísz'search_distribution.<locals>.<dictcomp>)rrßr‡)Úreq_nameÚpackagesÚpkg_dictrErErFÚsearch_distributionæs
råcCs>t|ƒ}|s6ztj |¡Wntjk
r4YdSXt|ƒS)zBGiven a requirement name, return the installed Distribution objectN)rårrÙÚrequireÚDistributionNotFound)rârÃrErErFÚget_distributionñs rècCsxg}tƒr*| t¡tƒsBtrB| t¡ntr8| t¡| t¡|D],}tj ||j¡d}tj     |¡rF|SqFdS)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.
    rÇN)
rÚappendrrrr=r>r?rÈr«)rÃÚsitesÚsiteÚegglinkrErErFÚ egg_link_paths
 
 
 
 
rícCst|ƒ}|rt|ƒSt|jƒS)aO
    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.
 
    The returned location is normalized (in particular, with symlinks removed).
    )rír6Úlocation)rÃrÊrErErFrÁ,s
rÁcGstj|f|žŽdSrÑ)ÚloggerÚinfo)ÚmsgÚargsrErErFÚ write_output<sróc@s(eZdZdZdd„Zdd„Zdd„ZdS)    ÚFakeFilezQWrap a list of lines in an object with readline() to make
    ConfigParser happy.cCst|ƒ|_dSrÑ)ÚiterÚ_gen)ÚselfÚlinesrErErFÚ__init__DszFakeFile.__init__cCs(z t|jƒWStk
r"YdSXdS)Nr…)ÚnextröÚ StopIteration©r÷rErErFÚreadlineGs zFakeFile.readlinecCs|jSrÑ)rörürErErFÚ__iter__MszFakeFile.__iter__N)Ú__name__Ú
__module__Ú __qualname__Ú__doc__rùrýrþrErErErFrôAsrôc@s$eZdZedd„ƒZedd„ƒZdS)Ú StreamWrappercCs ||_|ƒSrÑ)Ú orig_stream)ÚclsrrErErFÚ from_streamSszStreamWrapper.from_streamcCs|jjSrÑ)rÚencodingrürErErFrYszStreamWrapper.encodingN)rÿrrÚ classmethodrÚpropertyrrErErErFrQs
rc
cs@tt|ƒ}tt|t |¡ƒztt|ƒVW5tt||ƒXdS)zËReturn 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)ÚgetattrrUÚsetattrrr)Ú stream_nameÚ orig_stdoutrErErFÚcaptured_output^s
 
rcCstdƒS)zÜCapture 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.
    Ústdout©rrErErErFr9ms    cCstdƒS)z 
    See captured_stdout().
    ÚstderrrrErErErFÚcaptured_stderrysrcCs4tj |¡}|dkrt ¡}| |¡}|r0|jSdS)zCGet the installed version of dist_name avoiding pkg_resources cacheN)rÚ RequirementrrØÚfindÚversion)Ú    dist_namerÙÚreqrÃrErErFr;€s
 
cCst|dddS)zConsume an iterable at C speed.r)ÚmaxlenNr)ÚiteratorrErErFÚconsume’srcOs@tt|tt|ƒƒƒf|Ž}dd„| ¡Dƒ}||d<tdd|ƒS)NcSsi|]\}}||“qSrErE)rœrÕÚvaluerErErFrášszenum.<locals>.<dictcomp>Úreverse_mappingÚEnumrE)ÚdictÚzipÚrangerJÚitemsÚtype)Ú
sequentialÚnamedÚenumsÚreverserErErFÚenum˜sr'cCs*|dkr |Sd|krd |¡}d ||¡S)z.
    Build a netloc from a host-port pair
    Nú:ú[{}]z{}:{})rC)ÚhostÚportrErErFÚ build_netlocŸs
 
r,ÚhttpscCs4| d¡dkr(d|kr(d|kr(d |¡}d ||¡S)z)
    Build a full URL from a netloc.
    r(rrú@ú[r)z{}://{})ÚcountrC)ÚnetlocÚschemerErErFÚbuild_url_from_netloc¬s
r3cCst|ƒ}t |¡}|j|jfS)z2
    Return the host-port pair from a netloc.
    )r3Ú urllib_parseÚurlparseÚhostnamer+)r1ÚurlÚparsedrErErFÚ parse_netloc·s
r9cCsXd|kr|dfS| dd¡\}}d|kr6| dd¡}n|df}tdd„|Dƒƒ}||fS)zp
    Parse out and remove the auth information from a netloc.
 
    Returns: (netloc, (username, password)).
    r.)NNr~r(Ncss"|]}|dkrdnt|ƒVqdSrÑ)Úurllib_unquote)rœÚxrErErFÚ    <genexpr>Ösz)split_auth_from_netloc.<locals>.<genexpr>)Úrsplitrˆrš)r1ÚauthÚ    user_passrErErFÚsplit_auth_from_netlocÁsÿr@cCsLt|ƒ\}\}}|dkr|S|dkr.d}d}nt |¡}d}dj|||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"
    Nú****r…z:****z{user}{password}@{netloc})ÚuserÚpasswordr1)r@r4ÚquoterC)r1rBrCrErErFÚ redact_netlocÝs    
þrEcCs@t |¡}||jƒ}|j|d|j|j|jf}t |¡}||fS)aRTransform 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)r4Úurlsplitr1r2r>ÚqueryÚfragmentÚ
urlunsplit)r7Útransform_netlocÚpurlÚ netloc_tupleÚ
url_piecesÚsurlrErErFÚ_transform_urlôs
 
 
ÿ
rOcCst|ƒSrÑ)r@©r1rErErFÚ _get_netlocsrQcCs
t|ƒfSrÑ)rErPrErErFÚ_redact_netloc srRcCst|tƒ\}\}}|||fS)z†
    Parse a url into separate netloc, auth, and url with no auth.
 
    Returns: (url_without_auth, netloc, (username, password))
    ©rOrQ)r7Úurl_without_authr1r>rErErFÚsplit_auth_netloc_from_urlsrUcCst|tƒdS)z7Return a copy of url with 'username:password@' removed.rrS©r7rErErFr<scCst|tƒdS)z.Replace the password in a given url with ****.r)rOrRrVrErErFÚredact_auth_from_url#srWc@s4eZdZdd„Zdd„Zdd„Zdd„Zd    d
„Zd S) Ú
HiddenTextcCs||_||_dSrÑ)ÚsecretÚredacted)r÷rYrZrErErFrù*szHiddenText.__init__cCsd t|ƒ¡S)Nz<HiddenText {!r}>)rCr€rürErErFÚ__repr__3szHiddenText.__repr__cCs|jSrÑ©rZrürErErFÚ__str__7szHiddenText.__str__cCs t|ƒt|ƒkrdS|j|jkS)NF)r"rY©r÷ÚotherrErErFÚ__eq__<szHiddenText.__eq__cCs
||k SrÑrEr^rErErFÚ__ne__GszHiddenText.__ne__N)rÿrrrùr[r]r`rarErErErFrX)s
     rXcCs t|ddS)NrAr\)rX)rrErErFÚ
hide_valueLsrbcCst|ƒ}t||dS)Nr\)rWrX)r7rZrErErFÚhide_urlQsrccCszdd tjd¡djtjdd…Žg}|oBtoBtj tjd¡|k}|rvtjddgtjd    d…}t    d
 d  
|¡¡ƒ‚dS) zProtection of pip.exe from modification on Windows
 
    On Windows, any operation modifying pip should be run as:
        python -m pip ...
    zpip.exez    pip{}.exerz pip{}.{}.exeNrrz-mrSr~z3To modify pip, please run the following command:
{}r¢) rCrUrvrr=r>rTrVrWrr?)Ú modifying_pipÚ    pip_namesÚshould_show_use_python_msgÚ new_commandrErErFÚ(protect_pip_from_modification_on_windowsWs*ýÿýÿ þÿÿrhcCstjdk    otj ¡S)z!Is this console interactive?
    N)rUÚstdinÚisattyrErErErFÚis_console_interactiveusrkéc    CsRt ¡}d}t|dƒ.}t||dD]}|t|ƒ7}| |¡q$W5QRX||fS)z:Return (hash, length) for path using hashlib.sha256()
    rÚrb)r°)ÚhashlibÚsha256Úopenr²rJÚupdate)r>Ú    blocksizeÚhÚlengthÚfÚblockrErErFÚ    hash_file|s  rwcCs(z ddl}Wntk
r"YdSXdS)z8
    Return whether the wheel package is installed.
    rNFT)ÚwheelÚ ImportError)rxrErErFÚis_wheel_installedŠs
 rzcCst|ƒ}t||ƒS)zb
    Return paired elements.
 
    For example:
        s -> (s0, s1), (s2, s3), (s4, s5), ...
    )rõr)ÚiterablerErErFÚpairwise–sr|cCs t|ƒ\}}t||ƒt||ƒfS)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
    )rr r )Úpredr{Út1Út2rErErFÚ    partition¢s r€)F)r})T)N)r-)rl)Ú
__future__rÚ
contextlibrOr–rnÚioÚloggingr=r¶r`rcrUÚ collectionsrÚ    itertoolsrÚ pip._vendorrZpip._vendor.packaging.utilsrÚpip._vendor.retryingrZpip._vendor.sixr    r
Úpip._vendor.six.movesr r r rrZpip._vendor.six.moves.urllibrr4Ú"pip._vendor.six.moves.urllib.parserr:rSrÚpip._internal.exceptionsrÚpip._internal.locationsrrrÚpip._internal.utils.compatrrrrÚpip._internal.utils.typingrrÚpip._internal.utils.virtualenvrrrr Útypingr!r"r#r$r%r&r'r(r)r*r+r,Zpip._vendor.pkg_resourcesr-r˜rIr.Ú__all__Ú    getLoggerrÿrïrGrLr:r8r/rarqr0r1rŒrr2r•r—r4r©r5ÚDEFAULT_BUFFER_SIZEr²r6r3r7rÀrÄrÅrÆrËrßrårèrírÁróÚobjectrôrÚcontextmanagerrr9rr;rr'r,r3r9r@rErOrQrRrUr<rWrXrbrcrhrkrwrzr|r€rErErErFÚ<module>sè           8 ú    
 
 "
 
     
 
      ú
D $ 
 
 
 
 #