hyb
2026-01-30 7657e1b2fa251a2ea372710ad75cb395a3c0e374
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
255
256
257
258
259
260
261
Ë
ñúhLcãó—ddlmZddlZddlZddlZddlZddlZddlZddl    Z    ddl
Z
ddl m Z m Z mZmZddlmZmZmZmZmZddlmZddlmZmZddlmZmZddlmZdd    l m!Z!dd
l"m#Z#m$Z$dd l%m&Z&m'Z'm(Z(dd l)m*Z*dd l+m,Z,ddl-m.Z.m/Z/ddl0m1Z1ddl2m3Z3ee4ejjfZ6ejne8«Z9Gd„de«Z:                        d!d„Z;Gd„de«Z<Gd„de«Z=Gd„d«Z>Gd„de«Z?Gd„de?«Z@Gd„d e?«ZAy)"é)Ú annotationsN)Ú
CollectionÚ    ContainerÚIterableÚIterator)ÚIOÚAnyÚ
NamedTupleÚProtocolÚUnion)Ú Requirement)ÚInvalidSpecifierÚ SpecifierSet)ÚNormalizedNameÚcanonicalize_name)ÚVersion)ÚNoneMetadataError)Ú site_packagesÚ    user_site)ÚDIRECT_URL_METADATA_NAMEÚ    DirectUrlÚDirectUrlValidationError)Ú stdlib_pkgs)Úegg_link_path_from_sys_path)Úis_localÚnormalize_path)Ú url_to_pathé)Ú msg_to_jsoncóB—eZdZedd„«Zedd„«Zedd„«Zy)ÚBaseEntryPointcó—t«‚©N©ÚNotImplementedError©Úselfs úNH:\Change_password\venv_build\Lib\site-packages\pip/_internal/metadata/base.pyÚnamezBaseEntryPoint.name-ó €ä!Ó#Ð#ócó—t«‚r#r$r&s r(ÚvaluezBaseEntryPoint.value1r*r+có—t«‚r#r$r&s r(ÚgroupzBaseEntryPoint.group5r*r+N©ÚreturnÚstr)Ú__name__Ú
__module__Ú __qualname__Úpropertyr)r-r/©r+r(r!r!,s<„Ø ò$óð$ðò$óð$ðò$óñ$r+r!có —|r-|ddk(r%|r|ddk(r|dz }n|dd}|dd}|r    |ddk(rŒ%ttjg|¢|¢­Ž«S)aìConvert a legacy installed-files.txt path into modern RECORD path.
 
    The legacy format stores paths relative to the info directory, while the
    modern format stores paths relative to the package root, e.g. the
    site-packages directory.
 
    :param entry: Path parts of the installed-files.txt entry.
    :param info: Path parts of the egg-info directory relative to package root.
    :returns: The converted entry.
 
    For best compatibility with symlinks, this does not use ``abspath()`` or
    ``Path.resolve()``, but tries to work with path parts:
 
    1. While ``entry`` starts with ``..``, remove the equal amounts of parts
       from ``info``; if ``info`` is empty, start appending ``..`` instead.
    2. Join the two directly.
    rú..éÿÿÿÿ)r9Nr©r2ÚpathlibÚPath)ÚentryÚinfos  r(Ú_convert_installed_files_pathr@:sm€ñ* E˜!‘H Ò$ِt˜B‘x 4Ò'Ø G‰O‰Dà˜˜9ˆDؐab    ˆñ E˜!‘H Ó$ô Œw|‰|Ð*˜TÐ* EÒ*Ó +Ð+r+có,—eZdZUded<ded<ded<y)Ú RequiresEntryr2Ú requirementÚextraÚmarkerN)r3r4r5Ú__annotations__r7r+r(rBrBXs…ØÓØ ƒJØ „Kr+rBcó —eZdZed.d„«Ze                                d/d„«Zed0d„«Zd1d„Zd1d„Ze    d2d„«Z
e    d2d„«Z e    d2d„«Z e    d2d    „«Z e    d3d
„«Ze    d3d „«Ze    d3d „«Ze    d3d „«Ze    d4d„«Ze    d5d„«Ze    d1d„«Ze    d1d„«Ze    d6d„«Ze    d1d„«Ze    d3d„«Ze    d3d„«Ze    d3d„«Ze    d3d„«Ze    d3d„«Zd7d„Zd8d„Zd9d„Zd:d„Z d;d„Z!e"jFd;d„«Z$e    d<d„«Z%e    d2d „«Z&e    d1d!„«Z'e    d=d"„«Z(d>d?d#„Z)d@d$„Z*dAd%„Z+dBd&„Z,dBd'„Z-dBd(„Z.dCd)„Z/d@d*„Z0d@d+„Z1dDd,„Z2y-)EÚBaseDistributioncó—t«‚)z‡Load the distribution from a metadata directory.
 
        :param directory: Path to a metadata directory, e.g. ``.dist-info``.
        r$)ÚclsÚ    directorys  r(Úfrom_directoryzBaseDistribution.from_directory_ó €ô "Ó#Ð#r+có—t«‚)aÁLoad the distribution from the contents of a METADATA file.
 
        This is used to implement PEP 658 by generating a "shallow" dist object that can
        be used for resolution without downloading or building the actual dist yet.
 
        :param metadata_contents: The contents of a METADATA file.
        :param filename: File name for the dist with this metadata.
        :param project_name: Name of the project this dist represents.
        r$)rJÚmetadata_contentsÚfilenameÚ project_names    r(Úfrom_metadata_file_contentsz,BaseDistribution.from_metadata_file_contentsgs €ô "Ó#Ð#r+có—t«‚)aLoad the distribution from a given wheel.
 
        :param wheel: A concrete wheel definition.
        :param name: File name of the wheel.
 
        :raises InvalidWheel: Whenever loading of the wheel causes a
            :py:exc:`zipfile.BadZipFile` exception to be thrown.
        :raises UnsupportedWheel: If the wheel is a valid zip, but malformed
            internally.
        r$)rJÚwheelr)s   r(Ú
from_wheelzBaseDistribution.from_wheelyó €ô"Ó#Ð#r+cóT—|j›d|j›d|j›dS)Nú z (ú))Úraw_nameÚ raw_versionÚlocationr&s r(Ú__repr__zBaseDistribution.__repr__‡s*€Ø—-‘-  $×"2Ñ"2Ð!3°2°d·m±m°_ÀAÐFÐFr+có8—|j›d|j›S)NrX)rZr[r&s r(Ú__str__zBaseDistribution.__str__Šs€Ø—-‘-  $×"2Ñ"2Ð!3Ð4Ð4r+có—t«‚)aÐWhere the distribution is loaded from.
 
        A string value is not necessarily a filesystem path, since distributions
        can be loaded from other sources, e.g. arbitrary zip archives. ``None``
        means the distribution is created in-memory.
 
        Do not canonicalize this value with e.g. ``pathlib.Path.resolve()``. If
        this is a symbolic link, we want to preserve the relative path between
        it and files in the distribution.
        r$r&s r(r\zBaseDistribution.locationrVr+có²—|j}|r&|j«rt|j«Syt    |j
«}|r |j Sy)zÉThe project location for editable distributions.
 
        This is the directory where pyproject.toml or setup.py is located.
        None if the distribution is not installed in editable mode.
        N)Ú
direct_urlÚis_local_editablerÚurlrrZr\)r'rbÚ egg_link_paths   r(Úeditable_project_locationz*BaseDistribution.editable_project_location›sR€ð—_‘_ˆ
Ù Ø×+Ñ+Ô-Ü" :§>¡>Ó2Ð2ðô 8¸¿ ¹ ÓFˆMÙð—}‘}Ð$Ør+có—t«‚)a’The distribution's "installed" location.
 
        This should generally be a ``site-packages`` directory. This is
        usually ``dist.location``, except for legacy develop-installed packages,
        where ``dist.location`` is the source code location, and this is where
        the ``.egg-link`` file is.
 
        The returned location is normalized (in particular, with symlinks removed).
        r$r&s r(Úinstalled_locationz#BaseDistribution.installed_location±s €ô"Ó#Ð#r+có—t«‚)a/Location of the .[egg|dist]-info directory or file.
 
        Similarly to ``location``, a string value is not necessarily a
        filesystem path. ``None`` means the distribution is created in-memory.
 
        For a modern .dist-info installation on disk, this should be something
        like ``{location}/{raw_name}-{version}.dist-info``.
 
        Do not canonicalize this value with e.g. ``pathlib.Path.resolve()``. If
        this is a symbolic link, we want to preserve the relative path between
        it and other files in the distribution.
        r$r&s r(Ú info_locationzBaseDistribution.info_location¾s €ô"Ó#Ð#r+cóf—|j}|sytj|«j«S)aWhether this distribution is installed with legacy distutils format.
 
        A distribution installed with "raw" distutils not patched by setuptools
        uses one single file at ``info_location`` to store metadata. We need to
        treat this specially on uninstallation.
        F)rjr<r=Úis_file©r'rjs  r(Úinstalled_by_distutilsz'BaseDistribution.installed_by_distutilsÎs-€ð×*Ñ*ˆ ÙØÜ|‰|˜MÓ*×2Ñ2Ó4Ð4r+cód—|j}|sytj|«jdk(S)z¦Whether this distribution is installed as an egg.
 
        This usually indicates the distribution was installed by (older versions
        of) easy_install.
        Fz.egg)r\r<r=Úsuffix©r'r\s  r(Úinstalled_as_eggz!BaseDistribution.installed_as_eggÛs/€ð—=‘=ˆÙØô|‰|˜HÓ%×,Ñ,°Ñ6Ð6r+cóŠ—|j}|sy|jd«sytj|«j    «S)aÙWhether this distribution is installed with the ``.egg-info`` format.
 
        This usually indicates the distribution was installed with setuptools
        with an old pip version or with ``single-version-externally-managed``.
 
        Note that this ensure the metadata store is a directory. distutils can
        also installs an ``.egg-info``, but as a file, not a directory. This
        property is *False* for that case. Also see ``installed_by_distutils``.
        Fz    .egg-info©rjÚendswithr<r=Úis_dirrms  r(Ú"installed_with_setuptools_egg_infoz3BaseDistribution.installed_with_setuptools_egg_infoés>€ð×*Ñ*ˆ ÙØØ×%Ñ% kÔ2ØÜ|‰|˜MÓ*×1Ñ1Ó3Ð3r+cóŠ—|j}|sy|jd«sytj|«j    «S)aaWhether this distribution is installed with the "modern format".
 
        This indicates a "modern" installation, e.g. storing metadata in the
        ``.dist-info`` directory. This applies to installations made by
        setuptools (but through pip, not directly), or anything using the
        standardized build backend interface (PEP 517).
        Fz
.dist-infortrms  r(Úinstalled_with_dist_infoz)BaseDistribution.installed_with_dist_infoûs>€ð×*Ñ*ˆ ÙØØ×%Ñ% lÔ3ØÜ|‰|˜MÓ*×1Ñ1Ó3Ð3r+có—t«‚r#r$r&s r(Úcanonical_namezBaseDistribution.canonical_name r*r+có—t«‚r#r$r&s r(ÚversionzBaseDistribution.versionr*r+có—t«‚r#r$r&s r(r[zBaseDistribution.raw_versionr*r+có:—|jjdd«S)z”Convert a project name to its setuptools-compatible filename.
 
        This is a copy of ``pkg_resources.to_filename()`` for compatibility.
        ú-Ú_)rZÚreplacer&s r(Úsetuptools_filenamez$BaseDistribution.setuptools_filenames€ð }‰}×$Ñ$ S¨#Ó.Ð.r+có—    |jt«}    tj|«S#t$rYywxYw#t
t jtf$r0}tjdt|j|«Yd}~yd}~wwxYw)z¬Obtain a DirectUrl from this distribution.
 
        Returns None if the distribution has no `direct_url.json` metadata,
        or if `direct_url.json` is invalid.
        NzError parsing %s for %s: %s) Ú    read_textrÚFileNotFoundErrorrÚ    from_jsonÚUnicodeDecodeErrorÚjsonÚJSONDecodeErrorrÚloggerÚwarningr{)r'ÚcontentÚes   r(rbzBaseDistribution.direct_urls‡€ð    Ø—n‘nÔ%=Ó>ˆGð     Ü×&Ñ& wÓ/Ð /øô!ò    Ùð    ûô
Ü ×  Ñ  Ü $ð
ò     ô
N‰NØ-Ü(Ø×#Ñ#Øô     ô ûð     ús!‚-˜<­    9¸9¼B
Á&BÂB
c󲗠   |jd«}|j    «D]}|j «}|sŒ|cSy#tttf$rYywxYw)NÚ    INSTALLERÚ)r…ÚOSErrorÚ
ValueErrorrÚ
splitlinesÚstrip)r'Úinstaller_textÚlineÚ cleaned_lines    r(Ú    installerzBaseDistribution.installer9sd€ð    Ø!Ÿ^™^¨KÓ8ˆNð#×-Ñ-Ó/ò    $ˆDØŸ:™:›<ˆLÚØ#Ò#ð    $ðøô œÔ%6Ð7ò    Ùð    ús‚?¿AÁAcó$—|jd«S)NÚ    REQUESTED)rlr&s r(Ú    requestedzBaseDistribution.requestedEs€à|‰|˜KÓ(Ð(r+có,—t|j«Sr#)Úboolrfr&s r(ÚeditablezBaseDistribution.editableIs€äD×2Ñ2Ó3Ð3r+cóF—|j€yt|j«S)z|If distribution is installed in the current virtual environment.
 
        Always True if we're not in a virtualenv.
        F)rhrr&s r(ÚlocalzBaseDistribution.localMs$€ð × "Ñ "Ð *ØÜ˜×/Ñ/Ó0Ð0r+cóx—|jt€y|jjtt««S©NF)rhrÚ
startswithrr&s r(Ú in_usersitezBaseDistribution.in_usersiteWs2€à × "Ñ "Ð *¬iÐ.?ØØ×&Ñ&×1Ñ1´.ÄÓ2KÓLÐLr+cóx—|jt€y|jjtt««Sr£)rhrr¤rr&s r(Úin_site_packagesz!BaseDistribution.in_site_packages]s2€à × "Ñ "Ð *¬mÐ.CØØ×&Ñ&×1Ñ1´.ÄÓ2OÓPÐPr+có—t«‚)z7Check whether an entry in the info directory is a file.r$©r'Úpaths  r(rlzBaseDistribution.is_filecr*r+có—t«‚)zÕFind distutils 'scripts' entries metadata.
 
        If 'scripts' is supplied in ``setup.py``, distutils records those in the
        installed distribution's ``scripts`` directory, a file for each script.
        r$r&s r(Úiter_distutils_script_namesz,BaseDistribution.iter_distutils_script_namesgrMr+có—t«‚)zçRead a file in the info directory.
 
        :raise FileNotFoundError: If ``path`` does not exist in the directory.
        :raise NoneMetadataError: If ``path`` exists in the info directory, but
            cannot be read.
        r$r©s  r(r…zBaseDistribution.read_textoó €ô"Ó#Ð#r+có—t«‚r#r$r&s r(Úiter_entry_pointsz"BaseDistribution.iter_entry_pointsxó €Ü!Ó#Ð#r+có—t«‚r#r$r&s r(Ú_metadata_implzBaseDistribution._metadata_impl{r±r+cóH—|j«}|j|«|S)aMetadata of distribution parsed from e.g. METADATA or PKG-INFO.
 
        This should return an empty message if the metadata file is unavailable.
 
        :raises NoneMetadataError: If the metadata file is available, but does
            not contain valid metadata.
        )r³Ú_add_egg_info_requires)r'Úmetadatas  r(r¶zBaseDistribution.metadata~s%€ð×&Ñ&Ó(ˆØ ×#Ñ# HÔ-؈r+có,—t|j«S)aPEP 566 compliant JSON-serializable representation of METADATA or PKG-INFO.
 
        This should return an empty dict if the metadata file is unavailable.
 
        :raises NoneMetadataError: If the metadata file is available, but does
            not contain valid metadata.
        )rr¶r&s r(Ú metadata_dictzBaseDistribution.metadata_dict‹s€ô˜4Ÿ=™=Ó)Ð)r+có8—|jjd«S)zDValue of "Metadata-Version:" in distribution metadata, if available.zMetadata-Version)r¶Úgetr&s r(Úmetadata_versionz!BaseDistribution.metadata_version–s€ð}‰}× Ñ Ð!3Ó4Ð4r+cóN—|jjd|j«S)z*Value of "Name:" in distribution metadata.ÚName)r¶rºr{r&s r(rZzBaseDistribution.raw_name›s!€ð
}‰}× Ñ  ¨×)<Ñ)<Ó=Ð=r+có—|jjd«}|€
t«S    tt|««}|S#t$r7}d}t
j ||j|«t«cYd}~Sd}~wwxYw)z±Value of "Requires-Python:" in distribution metadata.
 
        If the key does not exist or contains an invalid value, an empty
        SpecifierSet should be returned.
        zRequires-PythonNz-Package %r has an invalid Requires-Python: %s)r¶rºrr2rr‹rŒrZ)r'r-ÚspecrŽÚmessages     r(Úrequires_pythonz BaseDistribution.requires_python¢ss€ð— ‘ ×!Ñ!Ð"3Ó4ˆØ ˆ=Ü“>Ð !ð    "䤠E£
Ó+ˆDð
ˆ øô     ò    "ØEˆGÜ N‰N˜7 D§M¡M°1Ô 5Ü“>Õ !ûð    "ús©?¿    A?Á,A:Á4A?Á:A?có—t«‚)z®Dependencies of this distribution.
 
        For modern .dist-info distributions, this is the collection of
        "Requires-Dist:" entries in distribution metadata.
        r$)r'Úextrass  r(Úiter_dependenciesz"BaseDistribution.iter_dependenciesµrMr+có:—|jjdg«S)zRaw Requires-Dist metadata.ú Requires-Dist)r¶Úget_allr&s r(Úiter_raw_dependenciesz&BaseDistribution.iter_raw_dependencies½s€à}‰}×$Ñ$ _°bÓ9Ð9r+có—t«‚)ajExtras provided by this distribution.
 
        For modern .dist-info distributions, this is the collection of
        "Provides-Extra:" entries in distribution metadata.
 
        The return value of this function is expected to be normalised names,
        per PEP 685, with the returned value being handled appropriately by
        `iter_dependencies`.
        r$r&s r(Úiter_provided_extrasz%BaseDistribution.iter_provided_extrasÁs €ô"Ó#Ð#r+c󘗠   |jd«}d„tj|j    ««D«S#t$rYywxYw)NÚRECORDc3ó^K—|]%}ttj|d««–—Œ'y­w)rNr;)Ú.0Úrows  r(ú    <genexpr>zFBaseDistribution._iter_declared_entries_from_record.<locals>.<genexpr>Ós"èø€ÒS¨c””G—L‘L  Q¡Ó(×)ÑSùs‚+-)r…r†ÚcsvÚreaderr”)r'Útexts  r(Ú"_iter_declared_entries_from_recordz3BaseDistribution._iter_declared_entries_from_recordÍsG€ð    Ø—>‘> (Ó+ˆDñT´S·Z±ZÀÇÁÓ@QÓ5RÔSÐSøô!ò    Ùð    ús‚=½    A    ÁA    cóR‡—    |jd«}d„|jd¬«D«}|j}|j}||€|S    t j |«j|«Š‰js|Sˆfd„|D«S#t$rYywxYw#t$r|cYSwxYw)Nzinstalled-files.txtc3ó&K—|]    }|sŒ|–—Œ y­wr#r7)rÎÚps  r(rÐzFBaseDistribution._iter_declared_entries_from_legacy.<locals>.<genexpr>Úsèø€ÒAqºq”ÑAùs‚ŠF)Úkeependsc3ó„•K—|]7}ttj|«j‰j«–—Œ9y­wr#)r@r<r=Úparts)rÎr×Úinfo_rels  €r(rÐzFBaseDistribution._iter_declared_entries_from_legacy.<locals>.<genexpr>ås2øèø€ò
àô *¬'¯,©,°q«/×*?Ñ*?ÀÇÁ× Pñ
ùsƒ=A)
r…r†r”r\rjr<r=Ú relative_tor“rÚ)r'rÓÚpathsÚrootr?rÛs     @r(Ú"_iter_declared_entries_from_legacyz3BaseDistribution._iter_declared_entries_from_legacyÕs¸ø€ð    Ø—>‘>Ð"7Ó8ˆDñB˜DŸO™O°U˜OÓ;ÔAˆØ}‰}ˆØ×!Ñ!ˆØ ˆ<˜4˜<؈Lð    Ü—|‘| DÓ)×5Ñ5°dÓ;ˆHð~Š~؈Ló
àô
ð    
øô!ò    Ùð    ûôò    ØŠLð    ús#ƒB    Á $B        BÂBÂ B&Â%B&cóF—|j«xs|j«S)aòIterate through file entries declared in this distribution.
 
        For modern .dist-info distributions, this is the files listed in the
        ``RECORD`` metadata file. For legacy setuptools distributions, this
        comes from ``installed-files.txt``, with entries normalized to be
        compatible with the format used by ``RECORD``.
 
        :return: An iterator for listed entries, or None if the distribution
            contains neither ``RECORD`` nor ``installed-files.txt``.
        )rÔrßr&s r(Úiter_declared_entriesz&BaseDistribution.iter_declared_entriesês&€ð × 3Ñ 3Ó 5ò 9Ø×6Ñ6Ó8ð    
r+c#óvK—    |jd«}dx}}|j«D]}}|j«}|r|j    d«rŒ'|j    d«r6|j d«r%|jd«j d«\}}}Œnt|||¬    «–—Œy#t$rYywxYw­w)
aöParse a ``requires.txt`` in an egg-info directory.
 
        This is an INI-ish format where an egg-info stores dependencies. A
        section name describes extra other environment markers, while each entry
        is an arbitrary string (not a key-value pair) representing a dependency
        as a requirement string (no markers).
 
        There is a construct in ``importlib.metadata`` called ``Sectioned`` that
        does mostly the same, but the format is currently considered private.
        z requires.txtNr‘ú#ú[ú]z[]ú:)rCrDrE)r…r†r”r•r¤ruÚ    partitionrB)r'rrDrEr—rs      r(Ú_iter_requires_txt_entriesz+BaseDistribution._iter_requires_txt_entriesús·èø€ð    Ø—n‘n ^Ó4ˆGðЈØ×&Ñ&Ó(ò    NˆDØ—:‘:“<ˆDÙ˜4Ÿ?™?¨3Ô/ØØ‰˜sÔ#¨¯ © °cÔ(:Ø#'§:¡:¨dÓ#3×#=Ñ#=¸cÓ#BÑ q˜&ØÜ¨D¸ÀfÔMÓ Mñ    Nøô!ò    Ù ð    üs(‚B9„B*•BB9Â*    B6Â3B9Â5B6Â6B9c#óšK—dh}|j«D]1}t|j«}||vrŒ|j|«|–—Œ3y­w)z'Get extras from the egg-info directory.r‘N)rèrrDÚadd)r'Ú known_extrasr>rDs    r(Ú_iter_egg_info_extrasz&BaseDistribution._iter_egg_info_extrassQèø€àtˆ Ø×4Ñ4Ó6ò    ˆEÜ% e§k¡kÓ2ˆEؘ Ñ$ØØ × Ñ ˜UÔ #Ø‹Kñ     ùs‚A    A c#ó4K—|j«D]}t|j«}|r |jrd|j›d|›d}n$|rd|›d}n|jr |j}nd}|r|j›d|›–—Œt|j–—Œƒy­w)a‰Get distribution dependencies from the egg-info directory.
 
        To ease parsing, this converts a legacy dependency entry into a PEP 508
        requirement string. Like ``_iter_requires_txt_entries()``, there is code
        in ``importlib.metadata`` that does mostly the same, but not do exactly
        what we need.
 
        Namely, ``importlib.metadata`` does not normalize the extra name before
        putting it into the requirement string, which causes marker comparison
        to fail because the dist-info format do normalize. This is consistent in
        all currently available PEP 517 backends, although not standardized.
        ú(z) and extra == "ú"z
extra == "r‘z ; N)rèrrDrErC)r'r>rDrEs    r(Ú_iter_egg_info_dependenciesz,BaseDistribution._iter_egg_info_dependenciessèø€ð×4Ñ4Ó6ò     (ˆEÜ% e§k¡kÓ2ˆEÙ˜ŸšØ˜UŸ\™\˜NÐ*:¸5¸'ÀÐC‘ÙØ% e W¨AÐ.‘Ø—’ØŸ™‘àÙØ×*Ñ*Ð+¨3¨v¨hÐ7Ó7à×'Ñ'Ó'ñ     (ùs‚BBcó²—|jd«s|j«D]}||d<Œ    |jd«s|j«D]}||d<Œ    yy)z6Add egg-info requires.txt information to the metadata.rÆzProvides-ExtraN)rÇrðrì)r'r¶ÚdeprDs    r(rµz'BaseDistribution._add_egg_info_requires9si€à×Ñ Ô0Ø×7Ñ7Ó9ò 0Ø,/˜Ò)ð 0à×ÑР0Ô1Ø×3Ñ3Ó5ò 3Ø-2Ð)Ò*ñ 3ð2r+N)rKr2r1rH)rOÚbytesrPr2rQr2r1rH)rTÚWheelr)r2r1rHr0)r1z
str | None)r1rž)r1r)r1r)r1zDirectUrl | None)rªÚInfoPathr1rž)r1z Iterator[str])rªrõr1r2)r1zIterable[BaseEntryPoint])r1úemail.message.Message)r1zdict[str, Any])r1r)r7)rÃzCollection[str]r1zIterable[Requirement])r1z Iterable[str])r1zIterable[NormalizedName])r1zIterator[str] | None)r1zIterator[RequiresEntry])r¶rör1ÚNone)3r3r4r5Ú classmethodrLrRrUr]r_r6r\rfrhrjrnrrrwryr{r}r[rƒrbr™rœrŸr¡r¥r§rlr¬r…r°r³Ú    functoolsÚcached_propertyr¶r¸r»rZrÁrÄrÈrÊrÔrßrárèrìrðrµr7r+r(rHrH^s¤„Øò$óð$ðð$à ð$ðð$ðð    $ð
 
ò $óð$ð"ò $óð $óGó5ðò $óð $ðòóðð*ò
$óð
$ðò $óð $ðò
5óð
5ðò 7óð 7ðò4óð4ð"ò 4óð 4ðò$óð$ðò$óð$ðò$óð$ðò/óð/ðòóðð2ò    óð    ðò)óð)ðò4óð4ðò1óð1ðòMóðMð
òQóðQó
$ó$ó$ó$ó$ð×Ñò
óð
ðò*óð*ðò5óð5ðò>óð>ð òóðô$$ó:ó
$óTó
ó*
ó Nó2ó(ô83r+rHcóv—eZdZdZed d„«Zed d„«Zd d„Zdd„Zdd„Z    de
dddf                                            dd    „Z y
)ÚBaseEnvironmentz6An environment containing distributions to introspect.có—t«‚r#r$)rJs r(ÚdefaultzBaseEnvironment.defaultFr*r+có—t«‚r#r$)rJrÝs  r(Ú
from_pathszBaseEnvironment.from_pathsJr*r+có—t«‚)z«Given a requirement name, return the installed distributions.
 
        The name may not be normalized. The implementation must canonicalize
        it for lookup.
        r$)r'r)s  r(Úget_distributionz BaseEnvironment.get_distributionNrMr+có—t«‚)aIterate through installed distributions.
 
        This function should be implemented by subclass, but never called
        directly. Use the public ``iter_distribution()`` instead, which
        implements additional logic to make sure the distributions are valid.
        r$r&s r(Ú_iter_distributionsz#BaseEnvironment._iter_distributionsVr®r+c#óúK—|j«D]d}tjd|jtj¬«}|s,t
j d|j|j«Œa|–—Œfy­w)zBIterate through all installed distributions without any filtering.z)^([A-Z0-9]|[A-Z0-9][A-Z0-9._-]*[A-Z0-9])$)Úflagsz%Ignoring invalid distribution %s (%s)N)rÚreÚmatchr{Ú
IGNORECASEr‹rŒr\)r'ÚdistÚproject_name_valids   r(Úiter_all_distributionsz&BaseEnvironment.iter_all_distributions_spèø€à×,Ñ,Ó.ò    ˆDô
"$§¡Ø<Ø×#Ñ#Ü—m‘mô"Ð ñ
&Ü—‘Ø;Ø×'Ñ'Ø—M‘Môð
Ø‹Jñ#    ùs‚A9A;TFcó’‡—|j«}|r    d„|D«}|s    d„|D«}|r    d„|D«}|r    d„|D«}ˆfd„|D«S)a/Return a list of installed distributions.
 
        This is based on ``iter_all_distributions()`` with additional filtering
        options. Note that ``iter_installed_distributions()`` without arguments
        is *not* equal to ``iter_all_distributions()``, since some of the
        configurations exclude packages by default.
 
        :param local_only: If True (default), only return installations
        local to the current virtualenv, if in a virtualenv.
        :param skip: An iterable of canonicalized project names to ignore;
            defaults to ``stdlib_pkgs``.
        :param include_editables: If False, don't report editables.
        :param editables_only: If True, only report editables.
        :param user_only: If True, only report installations in the user
        site directory.
        c3ó:K—|]}|jsŒ|–—Œy­wr#)r¡©rÎÚds  r(rÐz?BaseEnvironment.iter_installed_distributions.<locals>.<genexpr>Žsèø€Ò+˜ 1§7£7”!Ñ+ùó‚”c3ó:K—|]}|jrŒ|–—Œy­wr#©rŸrs  r(rÐz?BaseEnvironment.iter_installed_distributions.<locals>.<genexpr>sèø€Ò2˜ q§z£z”!Ñ2ùrc3ó:K—|]}|jsŒ|–—Œy­wr#rrs  r(rÐz?BaseEnvironment.iter_installed_distributions.<locals>.<genexpr>’sèø€Ò.˜ 1§:£:”!Ñ.ùrc3ó:K—|]}|jsŒ|–—Œy­wr#)r¥rs  r(rÐz?BaseEnvironment.iter_installed_distributions.<locals>.<genexpr>”sèø€Ò1˜ 1§=£=”!Ñ1ùrc3ó@•K—|]}|j‰vsŒ|–—Œy­wr#)r{)rÎrÚskips  €r(rÐz?BaseEnvironment.iter_installed_distributions.<locals>.<genexpr>•søèø€Ò>a ×!1Ñ!1¸Ò!=”Ñ>ùsƒ—)r )r'Ú
local_onlyrÚinclude_editablesÚeditables_onlyÚ    user_onlyÚits  `    r(Úiter_installed_distributionsz,BaseEnvironment.iter_installed_distributionstsRø€ð0× (Ñ (Ó *ˆÙ Ù+˜RÔ+ˆBÙ Ù2˜RÔ2ˆBÙ Ù.˜RÔ.ˆBÙ Ù1˜RÔ1ˆBÛ>˜2Ô>Ð>r+N)r1rü)rÝzlist[str] | Noner1rü)r)r2r1zBaseDistribution | None)r1úIterator[BaseDistribution]) rržrzContainer[str]rržrržrržr1r) r3r4r5Ú__doc__rørþrrrr rrr7r+r(rürüCsŠ„Ù@àò$óð$ðò$óð$ó$ó$óð. Ø*Ø"&Ø$Øð !?àð!?ðð!?ð ð    !?ð
ð !?ð ð !?ð
$ô!?r+rücó —eZdZUded<dd„Zy)rôr2r\có—t«‚r#r$r&s r(Ú
as_zipfilezWheel.as_zipfile›r±r+N©r1zzipfile.ZipFile)r3r4r5rFr"r7r+r(rôrô˜s …؃Mô$r+rôcó—eZdZdd„Zdd„Zy)ÚFilesystemWheelcó—||_yr#)r\rqs  r(Ú__init__zFilesystemWheel.__init__ s    €Ø ˆ r+cóD—tj|jd¬«S©NT)Ú
allowZip64)ÚzipfileÚZipFiler\r&s r(r"zFilesystemWheel.as_zipfile£s€Ü‰˜tŸ}™}¸Ô>Ð>r+N)r\r2r1r÷r#©r3r4r5r'r"r7r+r(r%r%Ÿs „ó!ô?r+r%có—eZdZdd„Zdd„Zy)Ú MemoryWheelcó —||_||_yr#)r\Ústream)r'r\r1s   r(r'zMemoryWheel.__init__¨s€Ø ˆŒ ؈ r+cóD—tj|jd¬«Sr))r+r,r1r&s r(r"zMemoryWheel.as_zipfile¬s€Ü‰˜tŸ{™{°tÔ<Ð<r+N)r\r2r1z    IO[bytes]r1r÷r#r-r7r+r(r/r/§s „óô=r+r/)r>útuple[str, ...]r?r3r1r2)BÚ
__future__rrÑÚ email.messageÚemailrùr‰Úloggingr<rr+Úcollections.abcrrrrÚtypingrr    r
r r Ú"pip._vendor.packaging.requirementsr Ú pip._vendor.packaging.specifiersrrÚpip._vendor.packaging.utilsrrÚpip._vendor.packaging.versionrÚpip._internal.exceptionsrÚpip._internal.locationsrrÚpip._internal.models.direct_urlrrrÚpip._internal.utils.compatrÚpip._internal.utils.egg_linkrÚpip._internal.utils.miscrrÚpip._internal.utils.urlsrÚ_jsonrr2ÚPurePathrõÚ    getLoggerr3r‹r!r@rBrHrürôr%r/r7r+r(ú<module>rHsýðÝ"ã
ÛÛÛ ÛÛÛ    ÛßEÓE÷õõ;ßKßIÝ1å6ß<÷ñõ
3ÝDß=Ý0åà g×&Ñ&Ð&Ñ '€à    ˆ×    Ñ    ˜8Ó    $€ô $Xô $ð,Ø ð,à
ð,ð    ó,ô<Jôô b3xôb3÷JR?ñR?ôj$ˆHô$ô?eô?ô=%õ=r+