ó
    Þ jÒb  ã                   ó0  • S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	J
r
JrJrJrJrJrJrJrJrJrJrJrJr  S SKJr  S SKJrJr  S SKJrJr  S SKJ r   S SK!J"r"  S SK#J$r$J%r%  S S	K&J'r'J(r(J)r)  S S
K*J+r+  S SK,J-r-  S SK.J/r/J0r0  S SK1J2r2  SSK3J4r4  \\5\Rl                  4   r7\Rp                  " \95      r: " S S\5      r;S\\5S4   S\\5S4   S\54S jr< " S S\5      r= " S S\5      r> " S S5      r? " S S\5      r@ " S S \@5      rA " S! S"\@5      rBg)#é    N)ÚIOÚAnyÚ
CollectionÚ	ContainerÚDictÚIterableÚIteratorÚListÚ
NamedTupleÚOptionalÚProtocolÚTupleÚ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                   ó\   • \ rS rSr\S\4S j5       r\S\4S j5       r\S\4S j5       rSr	g)ÚBaseEntryPointé1   Úreturnc                 ó   • [        5       e©N©ÚNotImplementedError©Úselfs    ÚU/var/www/html/gaurav/venv/lib/python3.13/site-packages/pip/_internal/metadata/base.pyÚnameÚBaseEntryPoint.name2   ó   € ä!Ó#Ð#ó    c                 ó   • [        5       er(   r)   r+   s    r-   ÚvalueÚBaseEntryPoint.value6   r0   r1   c                 ó   • [        5       er(   r)   r+   s    r-   ÚgroupÚBaseEntryPoint.group:   r0   r1   © N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚpropertyÚstrr.   r3   r6   Ú__static_attributes__r8   r1   r-   r$   r$   1   sQ   † Øð$�có $ó ð$ð ð$�só $ó ð$ð ð$�só $ó ó$r1   r$   Úentry.Úinfor&   c                 óÈ   • U (       a;  U S   S:X  a2  U(       a	  US   S:X  a  US-  nOUSS nU SS n U (       a  U S   S:X  a  M2  [        [        R                  " / UQU Q76 5      $ )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   ú..éÿÿÿÿ)rC   Nr!   ©r>   ÚpathlibÚPath)r@   rA   s     r-   Ú_convert_installed_files_pathrH   ?   sm   € ö* �E˜!‘H Ó$Þ�t˜B‘x 4Ó'Ø�G‰O‰Dà˜˜�9ˆDØ�a�b�	ˆö �E˜!‘H Õ$ô Œw�|Š|Ð*˜TÐ* EÒ*Ó+Ð+r1   c                   ó4   • \ rS rSr% \\S'   \\S'   \\S'   Srg)ÚRequiresEntryé]   ÚrequirementÚextraÚmarkerr8   N)r9   r:   r;   r<   r>   Ú__annotations__r?   r8   r1   r-   rJ   rJ   ]   s   ‡ ØÓØƒJØ†Kr1   rJ   c            	       óÊ  • \ rS rSr\S\SS 4S j5       r\S\S\S\SS 4S j5       r\S	S
S\SS 4S j5       r	S\4S jr
S\4S jr\S\\   4S j5       r\S\\   4S j5       r\S\\   4S j5       r\S\\   4S j5       r\S\4S j5       r\S\4S j5       r\S\4S j5       r\S\4S j5       r\S\4S j5       r\S\4S j5       r\S\4S j5       r\S\4S j5       r\S\\   4S j5       r\S\4S j5       r\S\4S j5       r \S\4S j5       r!\S\4S j5       r"\S\4S  j5       r#\S\4S! j5       r$S"\%S\4S# jr&S\'\   4S$ jr(S"\%S\4S% jr)S\*\+   4S& jr,S\-R\                  R^                  4S' jr0\1Rd                  S\-R\                  R^                  4S( j5       r3\S\4\\54   4S) j5       r6\S\\   4S* j5       r7\S\4S+ j5       r8\S\94S, j5       r:S;S.\;\   S\*\<   4S/ jjr=S\*\   4S0 jr>S\*\   4S1 jr?S\\'\      4S2 jr@S\\'\      4S3 jrAS\\'\      4S4 jrBS\'\C   4S5 jrDS\*\   4S6 jrES\*\   4S7 jrFS8\-R\                  R^                  SS94S: jrGS-rHg9)<ÚBaseDistributionéc   Ú	directoryr&   c                 ó   • [        5       e)zwLoad the distribution from a metadata directory.

:param directory: Path to a metadata directory, e.g. ``.dist-info``.
r)   )ÚclsrS   s     r-   Úfrom_directoryÚBaseDistribution.from_directoryd   ó   € ô "Ó#Ð#r1   Úmetadata_contentsÚfilenameÚproject_namec                 ó   • [        5       e)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)   )rU   rY   rZ   r[   s       r-   Úfrom_metadata_file_contentsÚ,BaseDistribution.from_metadata_file_contentsl   s   € ô  "Ó#Ð#r1   ÚwheelÚWheelr.   c                 ó   • [        5       e)aG  Load 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)   )rU   r_   r.   s      r-   Ú
from_wheelÚBaseDistribution.from_wheel~   ó   € ô "Ó#Ð#r1   c                 óT   • U R                    SU R                   SU R                   S3$ )NÚ z (Ú))Úraw_nameÚraw_versionÚlocationr+   s    r-   Ú__repr__ÚBaseDistribution.__repr__Œ   s*   € Ø—-‘-�  $×"2Ñ"2Ð!3°2°d·m±m°_ÀAÐFÐFr1   c                 ó8   • U R                    SU R                   3$ )Nrf   )rh   ri   r+   s    r-   Ú__str__ÚBaseDistribution.__str__�   s   € Ø—-‘-�  $×"2Ñ"2Ð!3Ð4Ð4r1   c                 ó   • [        5       e)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-   rj   ÚBaseDistribution.location’   rd   r1   c                 óÒ   • U R                   nU(       a,  UR                  5       (       a  [        UR                  5      $  g[	        U R
                  5      nU(       a  U R                  $ g)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    Úurlr   rh   rj   )r,   rs   Úegg_link_paths      r-   Úeditable_project_locationÚ*BaseDistribution.editable_project_location    sZ   € ð —_‘_ˆ
ÞØ×+Ñ+×-Ñ-Ü" :§>¡>Ó2Ð2ð .ð ô 8¸¿¹ÓFˆMÞð —}‘}Ð$Ør1   c                 ó   • [        5       e)ab  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_locationÚ#BaseDistribution.installed_location¶   s   € ô "Ó#Ð#r1   c                 ó   • [        5       e)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_locationÚBaseDistribution.info_locationÃ   s   € ô "Ó#Ð#r1   c                 ór   • U R                   nU(       d  g[        R                  " U5      R                  5       $ )zþWhether 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)r}   rF   rG   Úis_file©r,   r}   s     r-   Úinstalled_by_distutilsÚ'BaseDistribution.installed_by_distutilsÓ   s-   € ð ×*Ñ*ˆÞØÜ�|Š|˜MÓ*×2Ñ2Ó4Ð4r1   c                 óL   • U R                   nU(       d  gUR                  S5      $ )zŽWhether this distribution is installed as an egg.

This usually indicates the distribution was installed by (older versions
of) easy_install.
Fz.egg)rj   Úendswith©r,   rj   s     r-   Úinstalled_as_eggÚ!BaseDistribution.installed_as_eggà   s$   € ð —=‘=ˆÞØØ× Ñ  Ó(Ð(r1   c                 ó    • U R                   nU(       d  gUR                  S5      (       d  g[        R                  " U5      R	                  5       $ )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©r}   r…   rF   rG   Úis_dirr�   s     r-   Ú"installed_with_setuptools_egg_infoÚ3BaseDistribution.installed_with_setuptools_egg_infoì   sA   € ð ×*Ñ*ˆÞØØ×%Ñ% k×2Ñ2ØÜ�|Š|˜MÓ*×1Ñ1Ó3Ð3r1   c                 ó    • U R                   nU(       d  gUR                  S5      (       d  g[        R                  " U5      R	                  5       $ )a9  Whether 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-inforŠ   r�   s     r-   Úinstalled_with_dist_infoÚ)BaseDistribution.installed_with_dist_infoþ   sA   € ð ×*Ñ*ˆÞØØ×%Ñ% l×3Ñ3ØÜ�|Š|˜MÓ*×1Ñ1Ó3Ð3r1   c                 ó   • [        5       er(   r)   r+   s    r-   Úcanonical_nameÚBaseDistribution.canonical_name  r0   r1   c                 ó   • [        5       er(   r)   r+   s    r-   ÚversionÚBaseDistribution.version  r0   r1   c                 ó   • [        5       er(   r)   r+   s    r-   ri   ÚBaseDistribution.raw_version  r0   r1   c                 ó:   • U R                   R                  SS5      $ )z„Convert a project name to its setuptools-compatible filename.

This is a copy of ``pkg_resources.to_filename()`` for compatibility.
Ú-Ú_)rh   Úreplacer+   s    r-   Úsetuptools_filenameÚ$BaseDistribution.setuptools_filename  s   € ð �}‰}×$Ñ$ S¨#Ó.Ð.r1   c                 ó   •  U R                  [        5      n [        R                  " U5      $ ! [         a     gf = f! [
        [        R                  [        4 a0  n[        R                  S[        U R                  U5         SnAgSnAff = f)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.
NzError parsing %s for %s: %s)Ú	read_textr   ÚFileNotFoundErrorr   Ú	from_jsonÚUnicodeDecodeErrorÚjsonÚJSONDecodeErrorr   ÚloggerÚwarningr’   )r,   ÚcontentÚes      r-   rs   ÚBaseDistribution.direct_url"  s‡   € ð	Ø—n‘nÔ%=Ó>ˆGð	Ü×&Ò& wÓ/Ð/øô !ó 	Ùð	ûô
 Ü× Ñ Ü$ð
ó 	ô
 �N‰NØ-Ü(Ø×#Ñ#Øô	ô ûð	ús!   ‚. ˜> ®
;º;¾BÁ&BÂBc                 óÂ   •  U R                  S5      nUR	                  5        H  nUR                  5       nU(       d  M  Us  $    g! [        [        [        4 a     gf = f)NÚ	INSTALLERÚ )r    ÚOSErrorÚ
ValueErrorr   Ú
splitlinesÚstrip)r,   Úinstaller_textÚlineÚcleaned_lines       r-   Ú	installerÚBaseDistribution.installer<  sa   € ð	Ø!Ÿ^™^¨KÓ8ˆNð #×-Ñ-Ö/ˆDØŸ:™:›<ˆLßˆ|Ø#Ò#ñ 0ð øô œÔ%6Ð7ó 	Ùð	ús   ‚A ÁAÁAc                 ó$   • U R                  S5      $ )NÚ	REQUESTED)r€   r+   s    r-   Ú	requestedÚBaseDistribution.requestedH  s   € à�|‰|˜KÓ(Ð(r1   c                 ó,   • [        U R                  5      $ r(   )Úboolrw   r+   s    r-   ÚeditableÚBaseDistribution.editableL  s   € ä�D×2Ñ2Ó3Ð3r1   c                 óH   • U R                   c  g[        U R                   5      $ )zlIf distribution is installed in the current virtual environment.

Always True if we're not in a virtualenv.
F)rz   r   r+   s    r-   ÚlocalÚBaseDistribution.localP  s$   € ð ×"Ñ"Ñ*ØÜ˜×/Ñ/Ó0Ð0r1   c                 ó|   • U R                   b  [        c  gU R                   R                  [        [        5      5      $ ©NF)rz   r   Ú
startswithr   r+   s    r-   Úin_usersiteÚBaseDistribution.in_usersiteZ  s2   € à×"Ñ"Ñ*¬iÑ.?ØØ×&Ñ&×1Ñ1´.ÄÓ2KÓLÐLr1   c                 ó|   • U R                   b  [        c  gU R                   R                  [        [        5      5      $ rÃ   )rz   r   rÄ   r   r+   s    r-   Úin_site_packagesÚ!BaseDistribution.in_site_packages`  s2   € à×"Ñ"Ñ*¬mÑ.CØØ×&Ñ&×1Ñ1´.ÄÓ2OÓPÐPr1   Úpathc                 ó   • [        5       e)z7Check whether an entry in the info directory is a file.r)   ©r,   rÊ   s     r-   r€   ÚBaseDistribution.is_filef  r0   r1   c                 ó   • [        5       e)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_namesÚ,BaseDistribution.iter_distutils_script_namesj  rX   r1   c                 ó   • [        5       e)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    ÚBaseDistribution.read_textr  ó   € ô "Ó#Ð#r1   c                 ó   • [        5       er(   r)   r+   s    r-   Úiter_entry_pointsÚ"BaseDistribution.iter_entry_points{  ó   € Ü!Ó#Ð#r1   c                 ó   • [        5       er(   r)   r+   s    r-   Ú_metadata_implÚBaseDistribution._metadata_impl~  r×   r1   c                 óH   • U R                  5       nU R                  U5        U$ )zòMetadata 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Ý   ÚBaseDistribution.metadata�  s%   € ð ×&Ñ&Ó(ˆØ×#Ñ# HÔ-Øˆr1   c                 ó,   • [        U R                  5      $ )zûPEP 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.
)r"   rÝ   r+   s    r-   Úmetadata_dictÚBaseDistribution.metadata_dictŽ  s   € ô ˜4Ÿ=™=Ó)Ð)r1   c                 ó8   • U R                   R                  S5      $ )zDValue of "Metadata-Version:" in distribution metadata, if available.zMetadata-Version)rÝ   Úgetr+   s    r-   Úmetadata_versionÚ!BaseDistribution.metadata_version™  s   € ð �}‰}× Ñ Ð!3Ó4Ð4r1   c                 óN   • U R                   R                  SU R                  5      $ )z*Value of "Name:" in distribution metadata.ÚName)rÝ   rã   r’   r+   s    r-   rh   ÚBaseDistribution.raw_namež  s!   € ð
 �}‰}× Ñ  ¨×)<Ñ)<Ó=Ð=r1   c                 ó  • U R                   R                  S5      nUc
  [        5       $  [        [        U5      5      nU$ ! [         a6  nSn[
        R                  X@R                  U5        [        5       s SnA$ SnAff = f)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.
zRequires-PythonNz-Package %r has an invalid Requires-Python: %s)rÝ   rã   r   r>   r   r¦   r§   rh   )r,   r3   Úspecr©   Úmessages        r-   Úrequires_pythonÚ BaseDistribution.requires_python¥  sq   € ð —‘×!Ñ!Ð"3Ó4ˆØ‰=Ü“>Ð!ð	"ä¤ E£
Ó+ˆDð
 ˆøô	  ó 	"ØEˆGÜ�N‰N˜7§M¡M°1Ô5Ü“>Õ!ûð	"ús   ªA  Á 
B Á
+A;Á5B Á;B r8   Úextrasc                 ó   • [        5       e)z–Dependencies of this distribution.

For modern .dist-info distributions, this is the collection of
"Requires-Dist:" entries in distribution metadata.
r)   )r,   rî   s     r-   Úiter_dependenciesÚ"BaseDistribution.iter_dependencies¸  rX   r1   c                 ó:   • U R                   R                  S/ 5      $ )zRaw Requires-Dist metadata.úRequires-Dist)rÝ   Úget_allr+   s    r-   Úiter_raw_dependenciesÚ&BaseDistribution.iter_raw_dependenciesÀ  s   € à�}‰}×$Ñ$ _°bÓ9Ð9r1   c                 ó   • [        5       e)a:  Extras 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_extrasÚ%BaseDistribution.iter_provided_extrasÄ  s   € ô "Ó#Ð#r1   c                 óœ   •  U R                  S5      nS [        R                  " UR	                  5       5       5       $ ! [         a     g f = f)NÚRECORDc              3   ód   #   • U H'  n[        [        R                  " US    5      5      v •  M)     g7f)r   NrE   )Ú.0Úrows     r-   Ú	<genexpr>ÚFBaseDistribution._iter_declared_entries_from_record.<locals>.<genexpr>Ö  s'   é € ÐSÑ5R¨c””G—L’L  Q¡Ó(×)Ð)Ò5Rùs   ‚.0)r    r¡   ÚcsvÚreaderr°   )r,   Útexts     r-   Ú"_iter_declared_entries_from_recordÚ3BaseDistribution._iter_declared_entries_from_recordÐ  sG   € ð	Ø—>‘> (Ó+ˆDñ T´S·Z²ZÀÇÁÓ@QÔ5RÓSÐSøô !ó 	Ùð	ús   ‚> ¾
AÁ
Ac                 ób  ^•  U R                  S5      nS UR                  SS9 5       nU R                  nU R                  nUb  Uc  U$  [
        R                  " U5      R                  U5      mTR                  (       d  U$ U4S jU 5       $ ! [         a     g f = f! [         a    Us $ f = f)Nzinstalled-files.txtc              3   ó4   #   • U H  o(       d  M  Uv •  M     g 7fr(   r8   )rý   Úps     r-   rÿ   ÚFBaseDistribution._iter_declared_entries_from_legacy.<locals>.<genexpr>Ý  s   é € ÐAÑ;�q»q—‘Ò;ùs   ‚	�	F)Úkeependsc              3   óŠ   >#   • U H9  n[        [        R                  " U5      R                  TR                  5      v •  M;     g 7fr(   )rH   rF   rG   Úparts)rý   r  Úinfo_rels     €r-   rÿ   r	  è  s4   øé € ð 
á�ô *¬'¯,ª,°q«/×*?Ñ*?ÀÇÁ×PÐPÚùs   ƒA A)
r    r¡   r°   rj   r}   rF   rG   Úrelative_tor¯   r  )r,   r  ÚpathsÚrootrA   r  s        @r-   Ú"_iter_declared_entries_from_legacyÚ3BaseDistribution._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                 óP   • U R                  5       =(       d    U R                  5       $ )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_entriesÚ&BaseDistribution.iter_declared_entriesí  s&   € ð ×3Ñ3Ó5÷ 9Ø×6Ñ6Ó8ð	
r1   c              #   óœ  #   •  U R                  S5      nS=p#UR                  5        H�  nUR                  5       nU(       a  UR	                  S5      (       a  M2  UR	                  S5      (       a;  UR                  S5      (       a%  UR                  S5      R                  S5      u  p%nMƒ  [        XBUS	9v •  M‘     g! [         a     gf = f7f)
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[]Ú:)rL   rM   rN   )r    r¡   r°   r±   rÄ   r…   Ú	partitionrJ   )r,   r¨   rM   rN   r³   r›   s         r-   Ú_iter_requires_txt_entriesÚ+BaseDistribution._iter_requires_txt_entriesý  s²   é € ð	Ø—n‘n ^Ó4ˆGð ÐˆØ×&Ñ&Ö(ˆDØ—:‘:“<ˆDÞ˜4Ÿ?™?¨3×/Ñ/ÙØ�‰˜s×#Ñ#¨¯©°c×(:Ñ(:Ø#'§:¡:¨dÓ#3×#=Ñ#=¸cÓ#BÑ �˜&ÙÜ¨DÀfÑMÔMò )øô !ó 	Ùð	üs(   ‚C„B< •B'CÂ<
C	ÃCÃC	Ã	Cc              #   ó¢   #   • S1nU R                  5        H4  n[        UR                  5      nX1;   a  M  UR                  U5        Uv •  M6     g7f)z'Get extras from the egg-info directory.r­   N)r  r   rM   Úadd)r,   Úknown_extrasr@   rM   s       r-   Ú_iter_egg_info_extrasÚ&BaseDistribution._iter_egg_info_extras  sI   é € à�tˆØ×4Ñ4Ö6ˆEÜ% e§k¡kÓ2ˆEØÓ$ÙØ×Ñ˜UÔ#ØŒKò 7ùs   ‚AAc              #   ól  #   • U R                  5        Hœ  n[        UR                  5      nU(       a%  UR                  (       a  SUR                   SU S3nO.U(       a  SU S3nO UR                  (       a  UR                  nOSnU(       a  UR                   SU 3v •  MŽ  UR                  v •  Mž     g7f)aA  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  r   rM   rN   rL   )r,   r@   rM   rN   s       r-   Ú_iter_egg_info_dependenciesÚ,BaseDistribution._iter_egg_info_dependencies   s—   é € ð ×4Ñ4Ö6ˆEÜ% e§k¡kÓ2ˆEÞ˜ŸŸØ˜UŸ\™\˜NÐ*:¸5¸'ÀÐC‘ÞØ% e W¨AÐ.‘Ø——ØŸ™‘à�ÞØ×*Ñ*Ð+¨3¨v¨hÐ7Ô7à×'Ñ'Ô'ò 7ùs   ‚B2B4rÝ   Nc                 óÊ   • UR                  S5      (       d  U R                  5        H  nX!S'   M	     UR                  S5      (       d  U R                  5        H  nX1S'   M	     gg)z6Add egg-info requires.txt information to the metadata.ró   zProvides-ExtraN)rô   r&  r!  )r,   rÝ   ÚdeprM   s       r-   rÜ   Ú'BaseDistribution._add_egg_info_requires<  sa   € à×Ñ ×0Ñ0Ø×7Ñ7Ö9�Ø,/˜Ó)ñ :à×ÑÐ 0×1Ñ1Ø×3Ñ3Ö5�Ø-2Ð)Ó*ò 6ð 2r1   )r8   )Ir9   r:   r;   r<   Úclassmethodr>   rV   Úbytesr]   rb   rk   rn   r=   r   rj   rw   rz   r}   r¼   r‚   r‡   rŒ   r�   r   r’   r   r•   ri   r�   r   rs   rµ   r¹   r½   rÀ   rÅ   rÈ   ÚInfoPathr€   r	   rÏ   r    r   r$   rÕ   Úemailrë   ÚMessagerÙ   Ú	functoolsÚcached_propertyrÝ   r   r   rà   rä   rh   r   rì   r   r   rð   rõ   rø   r  r  r  rJ   r  r!  r&  rÜ   r?   r8   r1   r-   rQ   rQ   c   s‹  † Øð$ sð $Ð/Aó $ó ð$ð ð$à ð$ð ð$ð ð	$ð
 
ó$ó ð$ð" ð$˜wð $¨cð $Ð6Hó $ó ð$ðG˜#ô Gð5˜ô 5ð ð$˜( 3™-ó $ó ð$ð ð¨8°C©=ó ó ðð* ð
$ H¨S¡Mó 
$ó ð
$ð ð$˜x¨™}ó $ó ð$ð ð
5¨ó 
5ó ð
5ð ð	) $ó 	)ó ð	)ð ð4°Dó 4ó ð4ð" ð4¨$ó 4ó ð4ð ð$ ó $ó ð$ð ð$˜ó $ó ð$ð ð$˜Só $ó ð$ð ð/ Só /ó ð/ð ð˜H YÑ/ó ó ðð2 ð	˜3ó 	ó ð	ð ð)˜4ó )ó ð)ð ð4˜$ó 4ó ð4ð ð1�tó 1ó ð1ð ðM˜Tó Mó ðMð
 ðQ $ó Qó ðQð
$˜Hð $¨ô $ð$¨X°c©]ô $ð$˜hð $¨3ô $ð$ 8¨NÑ#;ô $ð$ §¡× 5Ñ 5ô $ð ×Ñð
˜%Ÿ-™-×/Ñ/ó 
ó ð
ð ð*˜t C¨ H™~ó *ó ð*ð ð5 (¨3¡-ó 5ó ð5ð ð>˜#ó >ó ð>ð ð ó ó ðñ$$¨
°3©ð $ÀÈ+ÑAVõ $ð: x°¡}ô :ð
$ h¨~Ñ&>ô 
$ðT°H¸XÀc¹]Ñ4Kô Tð
°H¸XÀc¹]Ñ4Kô 
ð*
 x°¸±Ñ'>ô 
ð N¨H°]Ñ,Cô Nð2 x°¡}ô ð(¨X°c©]ô (ð83¨u¯}©}×/DÑ/Dð 3È÷ 3r1   rQ   c                   óÐ   • \ rS rSrSr\SS j5       r\S\\\	      SS 4S j5       r
S\	S\S   4S	 jrS\S   4S
 jrS\\   4S jrS\SSS4S\S\\	   S\S\S\S\\   4S jjrSrg)ÚBaseEnvironmentiF  z6An environment containing distributions to introspect.r&   c                 ó   • [        5       er(   r)   )rU   s    r-   ÚdefaultÚBaseEnvironment.defaultI  r0   r1   r  c                 ó   • [        5       er(   r)   )rU   r  s     r-   Ú
from_pathsÚBaseEnvironment.from_pathsM  r0   r1   r.   rQ   c                 ó   • [        5       e)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_distributionÚ BaseEnvironment.get_distributionQ  rX   r1   c                 ó   • [        5       e)zòIterate 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_distributionsÚ#BaseEnvironment._iter_distributionsY  rÓ   r1   c              #   ó  #   • U R                  5        Hi  n[        R                  " SUR                  [        R                  S9nU(       d-  [
        R                  SUR                  UR                  5        Me  Uv •  Mk     g7f)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§   rj   )r,   ÚdistÚproject_name_valids      r-   Úiter_all_distributionsÚ&BaseEnvironment.iter_all_distributionsb  sj   é € à×,Ñ,Ö.ˆDô
 "$§¢Ø<Ø×#Ñ#Ü—m‘mñ"Ðö
 &Ü—‘Ø;Ø×'Ñ'Ø—M‘Môñ
 ØŒJò# /ùs   ‚A?BTFÚ
local_onlyÚskipÚinclude_editablesÚeditables_onlyÚ	user_onlyc                 ó¼   ^• U R                  5       nU(       a	  S U 5       nU(       d	  S U 5       nU(       a	  S U 5       nU(       a	  S U 5       nU4S jU 5       $ )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.
c              3   óH   #   • U H  oR                   (       d  M  Uv •  M     g 7fr(   )rÀ   ©rý   Úds     r-   rÿ   Ú?BaseEnvironment.iter_installed_distributions.<locals>.<genexpr>‘  s   é € Ð+™R˜§7¥7—!‘!šRùó   ‚"™	"c              3   óH   #   • U H  oR                   (       a  M  Uv •  M     g 7fr(   ©r½   rP  s     r-   rÿ   rR  “  s   é € Ð2™R˜§z¥z—!‘!šRùrS  c              3   óH   #   • U H  oR                   (       d  M  Uv •  M     g 7fr(   rU  rP  s     r-   rÿ   rR  •  s   é € Ð.™R˜§:¥:—!‘!šRùrS  c              3   óH   #   • U H  oR                   (       d  M  Uv •  M     g 7fr(   )rÅ   rP  s     r-   rÿ   rR  —  s   é € Ð1™R˜§=¥=—!‘!šRùrS  c              3   óH   >#   • U H  oR                   T;  d  M  Uv •  M     g 7fr(   )r’   )rý   rQ  rJ  s     €r-   rÿ   rR  ˜  s   øé € Ð>™2�a×!1Ñ!1¸Ñ!=—‘š2ùs   ƒ"™	")rG  )r,   rI  rJ  rK  rL  rM  Úits     `    r-   Úiter_installed_distributionsÚ,BaseEnvironment.iter_installed_distributionsw  sR   ø€ ð0 ×(Ñ(Ó*ˆÞÙ+™RÓ+ˆBÞ Ù2™RÓ2ˆBÞÙ.™RÓ.ˆBÞÙ1™RÓ1ˆBÜ>™2Ó>Ð>r1   r8   N)r&   r3  )r9   r:   r;   r<   Ú__doc__r+  r5  r   r
   r>   r8  r;  r	   r>  rQ   rG  r   r¼   r   rZ  r?   r8   r1   r-   r3  r3  F  sß   † Ù@àó$ó ð$ð ð$˜x¨¨S©	Ñ2ð $Ð7Hó $ó ð$ð$ Sð $¨XÐ6HÑ-Iô $ð$ XÐ.@Ñ%Aô $ð¨Ð1AÑ(Bô ð.  Ø*Ø"&Ø$Øñ!?àð!?ð ˜‰nð!?ð  ð	!?ð
 ð!?ð ð!?ð 
Ð"Ñ	#÷!?ð !?r1   r3  c                   óB   • \ rS rSr% \\S'   S\R                  4S jrSr	g)r`   i›  rj   r&   c                 ó   • [        5       er(   r)   r+   s    r-   Ú
as_zipfileÚWheel.as_zipfilež  r×   r1   r8   N)
r9   r:   r;   r<   r>   rO   ÚzipfileÚZipFiler_  r?   r8   r1   r-   r`   r`   ›  s   ‡ ØƒMð$˜GŸO™O÷ $r1   r`   c                   óH   • \ rS rSrS\SS4S jrS\R                  4S jrSr	g)ÚFilesystemWheeli¢  rj   r&   Nc                 ó   • Xl         g r(   ©rj   r†   s     r-   Ú__init__ÚFilesystemWheel.__init__£  s   € Ø �r1   c                 ó@   • [         R                  " U R                  SS9$ ©NT)Ú
allowZip64)ra  rb  rj   r+   s    r-   r_  ÚFilesystemWheel.as_zipfile¦  s   € Ü�Š˜tŸ}™}¸Ñ>Ð>r1   rf  )
r9   r:   r;   r<   r>   rg  ra  rb  r_  r?   r8   r1   r-   rd  rd  ¢  s%   † ð! ð !¨ô !ð?˜GŸO™O÷ ?r1   rd  c                   óR   • \ rS rSrS\S\\   SS4S jrS\R                  4S jr
Srg)	ÚMemoryWheeliª  rj   Ústreamr&   Nc                 ó   • Xl         X l        g r(   ©rj   ro  )r,   rj   ro  s      r-   rg  ÚMemoryWheel.__init__«  s   € Ø ŒØ�r1   c                 ó@   • [         R                  " U R                  SS9$ rj  )ra  rb  ro  r+   s    r-   r_  ÚMemoryWheel.as_zipfile¯  s   € Ü�Š˜tŸ{™{°tÑ<Ð<r1   rq  )r9   r:   r;   r<   r>   r   r,  rg  ra  rb  r_  r?   r8   r1   r-   rn  rn  ª  s0   † ð ð ¨b°©ið ¸Dô ð=˜GŸO™O÷ =r1   rn  )Cr  Úemail.messager.  r0  r¤   ÚloggingrF   rB  ra  Útypingr   r   r   r   r   r   r	   r
   r   r   r   r   r   Ú"pip._vendor.packaging.requirementsr   Ú pip._vendor.packaging.specifiersr   r   Úpip._vendor.packaging.utilsr   r   Úpip._vendor.packaging.versionr   Úpip._internal.exceptionsr   Úpip._internal.locationsr   r   Úpip._internal.models.direct_urlr   r   r   Úpip._internal.utils.compatr   Úpip._internal.utils.egg_linkr   Úpip._internal.utils.miscr   r   Úpip._internal.utils.urlsr    Ú_jsonr"   r>   ÚPurePathr-  Ú	getLoggerr9   r¦   r$   rH   rJ   rQ   r3  r`   rd  rn  r8   r1   r-   Ú<module>r†     s  ðÛ 
Û Û Û Û Û Û 	Û ÷÷ ÷ õ õ  ;ß Kß IÝ 1å 6ß <÷ñ õ
 3Ý Dß =Ý 0å à��g×&Ñ&Ð&Ñ'€à	×	Ò	˜8Ó	$€ô$�Xô $ð,Ø��c�‰?ð,à
��S�‰/ð,ð 	ô,ô<�Jô ô`3�xô `3÷FR?ñ R?ôj$ˆHô $ô?�eô ?ô=�%õ =r1   