Ë
    ÇqjÒb  ã                   ó.  — d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZmZ d dlmZmZ d dlm Z  d dl!m"Z" d dl#m$Z$m%Z% d d	l&m'Z'm(Z(m)Z) d d
l*m+Z+ d dl,m-Z- d dl.m/Z/m0Z0 d dl1m2Z2 ddl3m4Z4 ee5ejl                  f   Z7 ejp                  e9«      Z: G d„ de«      Z;dee5df   dee5df   de5fd„Z< G d„ de«      Z= G d„ de«      Z> G d„ d«      Z? G d„ de«      Z@ G d„ d e@«      ZA G d!„ d"e@«      ZBy)#é    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                   óN   — e Zd Zedefd„«       Zedefd„«       Zedefd„«       Zy)ÚBaseEntryPointÚreturnc                 ó   — t        «       ‚©N©ÚNotImplementedError©Úselfs    ú\/var/www/html/kelly-backend/venv/lib/python3.12/site-packages/pip/_internal/metadata/base.pyÚnamezBaseEntryPoint.name2   ó   € ä!Ó#Ð#ó    c                 ó   — t        «       ‚r'   r(   r*   s    r,   ÚvaluezBaseEntryPoint.value6   r.   r/   c                 ó   — t        «       ‚r'   r(   r*   s    r,   ÚgroupzBaseEntryPoint.group:   r.   r/   N)Ú__name__Ú
__module__Ú__qualname__ÚpropertyÚstrr-   r1   r3   © r/   r,   r$   r$   1   sQ   „ Øð$�cò $ó ð$ð ð$�sò $ó ð$ð ð$�sò $ó ñ$r/   r$   Úentry.Úinfor%   c                 ó    — | r-| d   dk(  r%|r|d   dk(  r|dz  }n|dd }| dd } | r	| d   dk(  rŒ%t        t        j                  g |¢| ¢­Ž «      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   ú..éÿÿÿÿ)r=   Nr!   ©r8   ÚpathlibÚPath)r:   r;   s     r,   Ú_convert_installed_files_pathrB   ?   sm   € ñ* �E˜!‘H Ò$Ù�t˜B‘x 4Ò'Ø�G‰O‰Dà˜˜�9ˆDØ�a�b�	ˆñ �E˜!‘H Ó$ô Œw�|‰|Ð*˜TÐ* EÒ*Ó+Ð+r/   c                   ó,   — e Zd ZU eed<   eed<   eed<   y)ÚRequiresEntryÚrequirementÚextraÚmarkerN)r4   r5   r6   r8   Ú__annotations__r9   r/   r,   rD   rD   ]   s   … ØÓØƒJØ„Kr/   rD   c            	       óh  — e Zd Zededd fd„«       Zededededd fd„«       Zedd	d
edd fd„«       Zdefd„Z	defd„Z
edee   fd„«       Zedee   fd„«       Zedee   fd„«       Zedee   fd„«       Zedefd„«       Zedefd„«       Zedefd„«       Zedefd„«       Zedefd„«       Zedefd„«       Zedefd„«       Zedefd„«       Zedee   fd„«       Zedefd„«       Zedefd„«       Zedefd„«       Z edefd„«       Z!edefd„«       Z"edefd „«       Z#d!e$defd"„Z%de&e   fd#„Z'd!e$defd$„Z(de)e*   fd%„Z+de,jZ                  j\                  fd&„Z/e0jb                  de,jZ                  j\                  fd'„«       Z2ede3ee4f   fd(„«       Z5edee   fd)„«       Z6edefd*„«       Z7ede8fd+„«       Z9d9d,e:e   de)e;   fd-„Z<de)e   fd.„Z=de)e   fd/„Z>dee&e      fd0„Z?dee&e      fd1„Z@dee&e      fd2„ZAde&eB   fd3„ZCde)e   fd4„ZDde)e   fd5„ZEd6e,jZ                  j\                  dd7fd8„ZFy7):ÚBaseDistributionÚ	directoryr%   c                 ó   — t        «       ‚)z‡Load the distribution from a metadata directory.

        :param directory: Path to a metadata directory, e.g. ``.dist-info``.
        r(   )ÚclsrK   s     r,   Úfrom_directoryzBaseDistribution.from_directoryd   ó   € ô "Ó#Ð#r/   Úmetadata_contentsÚfilenameÚproject_namec                 ó   — 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(   )rM   rP   rQ   rR   s       r,   Úfrom_metadata_file_contentsz,BaseDistribution.from_metadata_file_contentsl   s   € ô  "Ó#Ð#r/   ÚwheelÚWheelr-   c                 ó   — t        «       ‚)a  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(   )rM   rU   r-   s      r,   Ú
from_wheelzBaseDistribution.from_wheel~   ó   € ô "Ó#Ð#r/   c                 óT   — | j                   › d| j                  › d| j                  › d�S )NÚ z (Ú))Úraw_nameÚraw_versionÚlocationr*   s    r,   Ú__repr__zBaseDistribution.__repr__Œ   s*   € Ø—-‘-�  $×"2Ñ"2Ð!3°2°d·m±m°_ÀAÐFÐFr/   c                 ó8   — | j                   › d| j                  › �S )Nr[   )r]   r^   r*   s    r,   Ú__str__zBaseDistribution.__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_   zBaseDistribution.location’   rY   r/   c                 ó²   — | j                   }|r&|j                  «       rt        |j                  «      S yt	        | j
                  «      }|r| j                  S y)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   r]   r_   )r+   re   Ú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_locationzBaseDistribution.info_locationÃ   s   € ô "Ó#Ð#r/   c                 óf   — | j                   }|syt        j                  |«      j                  «       S )a  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)rm   r@   rA   Úis_file©r+   rm   s     r,   Úinstalled_by_distutilsz'BaseDistribution.installed_by_distutilsÓ   s-   € ð ×*Ñ*ˆÙØÜ�|‰|˜MÓ*×2Ñ2Ó4Ð4r/   c                 óB   — | j                   }|sy|j                  d«      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_   Úendswith©r+   r_   s     r,   Úinstalled_as_eggz!BaseDistribution.installed_as_eggà   s$   € ð —=‘=ˆÙØØ× Ñ  Ó(Ð(r/   c                 óŠ   — | j                   }|sy|j                  d«      syt        j                  |«      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©rm   rs   r@   rA   Úis_dirrp   s     r,   Ú"installed_with_setuptools_egg_infoz3BaseDistribution.installed_with_setuptools_egg_infoì   s>   € ð ×*Ñ*ˆÙØØ×%Ñ% kÔ2ØÜ�|‰|˜MÓ*×1Ñ1Ó3Ð3r/   c                 óŠ   — | j                   }|sy|j                  d«      syt        j                  |«      j	                  «       S )aa  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-inforw   rp   s     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_namezBaseDistribution.canonical_name  r.   r/   c                 ó   — t        «       ‚r'   r(   r*   s    r,   ÚversionzBaseDistribution.version  r.   r/   c                 ó   — t        «       ‚r'   r(   r*   s    r,   r^   zBaseDistribution.raw_version  r.   r/   c                 ó:   — | j                   j                  dd«      S )z”Convert a project name to its setuptools-compatible filename.

        This is a copy of ``pkg_resources.to_filename()`` for compatibility.
        Ú-Ú_)r]   Úreplacer*   s    r,   Úsetuptools_filenamez$BaseDistribution.setuptools_filename  s   € ð �}‰}×$Ñ$ S¨#Ó.Ð.r/   c                 ó  — 	 | j                  t        «      }	 t        j                  |«      S # t        $ r Y yw xY w# t
        t        j                  t        f$ r0}t        j                  dt        | j                  |«       Y d}~yd}~ww xY w)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,   re   zBaseDistribution.direct_url"  s‡   € ð	Ø—n‘nÔ%=Ó>ˆGð	Ü×&Ñ& wÓ/Ð/øô !ò 	Ùð	ûô
 Ü× Ñ Ü$ð
ò 	ô
 �N‰NØ-Ü(Ø×#Ñ#Øô	ô ûð	ús!   ‚- ˜< ­	9¸9¼B
Á&BÂB
c                 ó²   — 	 | j                  d«      }|j	                  «       D ]  }|j                  «       }|sŒ|c S  y# t        t        t        f$ r Y yw xY w)NÚ	INSTALLERÚ )r‡   ÚOSErrorÚ
ValueErrorr   Ú
splitlinesÚstrip)r+   Úinstaller_textÚlineÚcleaned_lines       r,   Ú	installerzBaseDistribution.installer<  s_   € ð	Ø!Ÿ^™^¨KÓ8ˆNð #×-Ñ-Ö/ˆDØŸ:™:›<ˆLÚØ#Ò#ð 0ð øô œÔ%6Ð7ò 	Ùð	ús   ‚? ¿AÁAc                 ó$   — | j                  d«      S )NÚ	REQUESTED)ro   r*   s    r,   Ú	requestedzBaseDistribution.requestedH  s   € à�|‰|˜KÓ(Ð(r/   c                 ó,   — t        | j                  «      S r'   )Úboolri   r*   s    r,   ÚeditablezBaseDistribution.editableL  s   € ä�D×2Ñ2Ó3Ð3r/   c                 óF   — | j                   €yt        | j                   «      S )z|If distribution is installed in the current virtual environment.

        Always True if we're not in a virtualenv.
        F)rk   r   r*   s    r,   ÚlocalzBaseDistribution.localP  s$   € ð ×"Ñ"Ð*ØÜ˜×/Ñ/Ó0Ð0r/   c                 óx   — | j                   �t        €y| j                   j                  t        t        «      «      S ©NF)rk   r   Ú
startswithr   r*   s    r,   Úin_usersitezBaseDistribution.in_usersiteZ  s2   € à×"Ñ"Ð*¬iÐ.?ØØ×&Ñ&×1Ñ1´.ÄÓ2KÓLÐLr/   c                 óx   — | j                   �t        €y| j                   j                  t        t        «      «      S r¥   )rk   r   r¦   r   r*   s    r,   Úin_site_packagesz!BaseDistribution.in_site_packages`  s2   € à×"Ñ"Ð*¬mÐ.CØØ×&Ñ&×1Ñ1´.ÄÓ2OÓPÐPr/   Úpathc                 ó   — t        «       ‚)z7Check whether an entry in the info directory is a file.r(   ©r+   rª   s     r,   ro   zBaseDistribution.is_filef  r.   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_namesj  rO   r/   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‡   zBaseDistribution.read_textr  ó   € ô "Ó#Ð#r/   c                 ó   — t        «       ‚r'   r(   r*   s    r,   Úiter_entry_pointsz"BaseDistribution.iter_entry_points{  ó   € Ü!Ó#Ð#r/   c                 ó   — t        «       ‚r'   r(   r*   s    r,   Ú_metadata_implzBaseDistribution._metadata_impl~  r³   r/   c                 óH   — | j                  «       }| j                  |«       |S )a  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¸   zBaseDistribution.metadata�  s%   € ð ×&Ñ&Ó(ˆØ×#Ñ# HÔ-Øˆr/   c                 ó,   — t        | j                  «      S )a  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_dictzBaseDistribution.metadata_dictŽ  s   € ô ˜4Ÿ=™=Ó)Ð)r/   c                 ó8   — | j                   j                  d«      S )zDValue of "Metadata-Version:" in distribution metadata, if available.zMetadata-Version)r¸   Úgetr*   s    r,   Úmetadata_versionz!BaseDistribution.metadata_version™  s   € ð �}‰}× Ñ Ð!3Ó4Ð4r/   c                 óN   — | j                   j                  d| j                  «      S )z*Value of "Name:" in distribution metadata.ÚName)r¸   r¼   r}   r*   s    r,   r]   zBaseDistribution.raw_namež  s!   € ð
 �}‰}× Ñ  ¨×)<Ñ)<Ó=Ð=r/   c                 ó  — | j                   j                  d«      }|€
t        «       S 	 t        t        |«      «      }|S # t        $ r7}d}t
        j                  || j                  |«       t        «       cY d}~S d}~ww xY w)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   r8   r   r�   rŽ   r]   )r+   r1   Ú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:Á4A?Á:A?Úextrasc                 ó   — t        «       ‚)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_dependenciesz"BaseDistribution.iter_dependencies¸  rO   r/   c                 ó:   — | j                   j                  dg «      S )zRaw Requires-Dist metadata.úRequires-Dist)r¸   Úget_allr*   s    r,   Úiter_raw_dependenciesz&BaseDistribution.iter_raw_dependenciesÀ  s   € à�}‰}×$Ñ$ _°bÓ9Ð9r/   c                 ó   — t        «       ‚)aj  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_extrasz%BaseDistribution.iter_provided_extrasÄ  s   € ô "Ó#Ð#r/   c                 ó˜   — 	 | j                  d«      }d„ t        j                  |j	                  «       «      D «       S # t        $ r Y y w xY w)NÚRECORDc              3   ó^   K  — | ]%  }t        t        j                  |d    «      «      –— Œ' y­w)r   Nr?   )Ú.0Úrows     r,   Ú	<genexpr>zFBaseDistribution._iter_declared_entries_from_record.<locals>.<genexpr>Ö  s%   è ø€ ÐSÑ5R¨c””G—L‘L  Q¡Ó(×)Ñ5Rù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  ‡— 	 | j                  d«      }d„ |j                  d¬«      D «       }| j                  }| j                  }|�|€|S 	 t        j                  |«      j                  |«      Š‰j                  s|S ˆfd„|D «       S # t        $ r Y y w xY w# t        $ r |cY S w xY w)Nzinstalled-files.txtc              3   ó&   K  — | ]	  }|sŒ|–— Œ y ­wr'   r9   )rÐ   Úps     r,   rÒ   zFBaseDistribution._iter_declared_entries_from_legacy.<locals>.<genexpr>Ý  s   è ø€ ÐAÑ;�qºq”Ñ;ùs   ‚ŠF)Úkeependsc              3   ó„   •K  — | ]7  }t        t        j                  |«      j                  ‰j                  «      –— Œ9 y ­wr'   )rB   r@   rA   Úparts)rÐ   rÙ   Úinfo_rels     €r,   rÒ   zFBaseDistribution._iter_declared_entries_from_legacy.<locals>.<genexpr>è  s2   øè ø€ ð 
á�ô *¬'¯,©,°q«/×*?Ñ*?ÀÇÁ×PÙùs   ƒ=A )
r‡   rˆ   r–   r_   rm   r@   rA   Ú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                  «       xs | 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              #   óv  K  — 	 | j                  d«      }dx}}|j                  «       D ]}  }|j                  «       }|r|j	                  d«      rŒ'|j	                  d«      r6|j                  d«      r%|j                  d«      j                  d«      \  }}}Œnt        |||¬	«      –— Œ y# t        $ r Y yw xY w­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[]Ú:)rE   rF   rG   )r‡   rˆ   r–   r—   r¦   rs   Ú	partitionrD   )r+   r�   rF   rG   r™   rƒ   s         r,   Ú_iter_requires_txt_entriesz+BaseDistribution._iter_requires_txt_entriesý  s°   è ø€ ð	Ø—n‘n ^Ó4ˆGð Ðˆ�Ø×&Ñ&Ö(ˆDØ—:‘:“<ˆDÙ˜4Ÿ?™?¨3Ô/ØØ�‰˜sÔ#¨¯©°cÔ(:Ø#'§:¡:¨dÓ#3×#=Ñ#=¸cÓ#BÑ ��q˜&ØÜ¨D¸ÀfÔMÓMñ )øô !ò 	Ùð	üs(   ‚B9„B* •BB9Â*	B6Â3B9Â5B6Â6B9c              #   óš   K  — dh}| j                  «       D ]1  }t        |j                  «      }||v rŒ|j                  |«       |–— Œ3 y­w)z'Get extras from the egg-info directory.r“   N)rê   r   rF   Úadd)r+   Úknown_extrasr:   rF   s       r,   Ú_iter_egg_info_extrasz&BaseDistribution._iter_egg_info_extras  sL   è ø€ à�tˆØ×4Ñ4Ö6ˆEÜ% e§k¡kÓ2ˆEØ˜Ñ$ØØ×Ñ˜UÔ#Ø‹Kñ 7ùs   ‚A	Ac              #   ó4  K  — | j                  «       D ]�  }t        |j                  «      }|r |j                  rd|j                  › d|› d�}n$|rd|› d�}n|j                  r|j                  }nd}|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ê   r   rF   rG   rE   )r+   r:   rF   rG   s       r,   Ú_iter_egg_info_dependenciesz,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   ‚BBr¸   Nc                 ó²   — |j                  d«      s| j                  «       D ]  }||d<   Œ	 |j                  d«      s| j                  «       D ]  }||d<   Œ	 yy)z6Add egg-info requires.txt information to the metadata.rÈ   zProvides-ExtraN)rÉ   rò   rî   )r+   r¸   ÚdeprF   s       r,   r·   z'BaseDistribution._add_egg_info_requires<  s_   € à×Ñ Ô0Ø×7Ñ7Ö9�Ø,/�˜Ò)ð :à×ÑÐ 0Ô1Ø×3Ñ3Ö5�Ø-2�Ð)Ò*ñ 6ð 2r/   )r9   )Gr4   r5   r6   Úclassmethodr8   rN   ÚbytesrT   rX   r`   rb   r7   r   r_   ri   rk   rm   r    rq   ru   ry   r{   r   r}   r   r   r^   r…   r   re   r›   rž   r¡   r£   r§   r©   ÚInfoPathro   r	   r®   r‡   r   r$   r²   ÚemailrÂ   ÚMessagerµ   Ú	functoolsÚcached_propertyr¸   r   r   rº   r½   r]   r   rÃ   r   r   rÆ   rÊ   rÌ   rÖ   rá   rã   rD   rê   rî   rò   r·   r9   r/   r,   rJ   rJ   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Èô 3r/   rJ   c                   óº   — e Zd ZdZedd„«       Zedeee      dd fd„«       Z	deded   fd„Z
ded   fd	„Zdee   fd
„Zdedddfdedee   dedededee   fd„Zy)ÚBaseEnvironmentz6An environment containing distributions to introspect.r%   c                 ó   — t        «       ‚r'   r(   )rM   s    r,   ÚdefaultzBaseEnvironment.defaultI  r.   r/   rß   c                 ó   — t        «       ‚r'   r(   )rM   rß   s     r,   Ú
from_pathszBaseEnvironment.from_pathsM  r.   r/   r-   rJ   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_distributionQ  rO   r/   c                 ó   — t        «       ‚)a  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_distributionsz#BaseEnvironment._iter_distributionsY  r°   r/   c              #   óú   K  — | j                  «       D ]d  }t        j                  d|j                  t        j                  ¬«      }|s,t
        j                  d|j                  |j                  «       Œa|–— Œf y­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_distributionsb  sk   è ø€ à×,Ñ,Ö.ˆDô
 "$§¡Ø<Ø×#Ñ#Ü—m‘mô"Ðñ
 &Ü—‘Ø;Ø×'Ñ'Ø—M‘Môð
 Ø‹Jñ# /ùs   ‚A9A;TFÚ
local_onlyÚskipÚinclude_editablesÚeditables_onlyÚ	user_onlyc                 ó’   ‡— | j                  «       }|r	d„ |D «       }|s	d„ |D «       }|r	d„ |D «       }|r	d„ |D «       }ˆfd„|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.
        c              3   ó:   K  — | ]  }|j                   sŒ|–— Œ y ­wr'   )r£   ©rÐ   Úds     r,   rÒ   z?BaseEnvironment.iter_installed_distributions.<locals>.<genexpr>‘  s   è ø€ Ð+™R˜ 1§7£7”!™Rùó   ‚”c              3   ó:   K  — | ]  }|j                   rŒ|–— Œ y ­wr'   ©r¡   r  s     r,   rÒ   z?BaseEnvironment.iter_installed_distributions.<locals>.<genexpr>“  s   è ø€ Ð2™R˜ q§z£z”!™Rùr  c              3   ó:   K  — | ]  }|j                   sŒ|–— Œ y ­wr'   r  r  s     r,   rÒ   z?BaseEnvironment.iter_installed_distributions.<locals>.<genexpr>•  s   è ø€ Ð.™R˜ 1§:£:”!™Rùr  c              3   ó:   K  — | ]  }|j                   sŒ|–— Œ y ­wr'   )r§   r  s     r,   rÒ   z?BaseEnvironment.iter_installed_distributions.<locals>.<genexpr>—  s   è ø€ Ð1™R˜ 1§=£=”!™Rùr  c              3   ó@   •K  — | ]  }|j                   ‰vsŒ|–— Œ y ­wr'   )r}   )rÐ   r  r  s     €r,   rÒ   z?BaseEnvironment.iter_installed_distributions.<locals>.<genexpr>˜  s   øè ø€ Ð>™2�a ×!1Ñ!1¸Ò!=”™2ùs   ƒ—)r  )r+   r  r  r  r  r  Úits     `    r,   Úiter_installed_distributionsz,BaseEnvironment.iter_installed_distributionsw  sR   ø€ ð0 ×(Ñ(Ó*ˆÙÙ+™RÓ+ˆBÙ Ù2™RÓ2ˆBÙÙ.™RÓ.ˆBÙÙ1™RÓ1ˆBÛ>™2Ó>Ð>r/   N)r%   rý   )r4   r5   r6   Ú__doc__rõ   rÿ   r   r
   r8   r  r  r	   r  rJ   r  r   r    r   r  r9   r/   r,   rý   rý   F  sÚ   „ Ù@àò$ó ð$ð ð$˜x¨¨S©	Ñ2ð $Ð7Hò $ó ð$ð$ Sð $¨XÐ6HÑ-Ió $ð$ XÐ.@Ñ%Aó $ð¨Ð1AÑ(Bó ð.  Ø*Ø"&Ø$Øñ!?àð!?ð ˜‰nð!?ð  ð	!?ð
 ð!?ð ð!?ð 
Ð"Ñ	#ô!?r/   rý   c                   ó8   — e Zd ZU eed<   dej                  fd„Zy)rV   r_   r%   c                 ó   — t        «       ‚r'   r(   r*   s    r,   Ú
as_zipfilezWheel.as_zipfilež  r³   r/   N)r4   r5   r6   r8   rH   ÚzipfileÚZipFiler"  r9   r/   r,   rV   rV   ›  s   … ØƒMð$˜GŸO™Oô $r/   rV   c                   ó<   — e Zd Zdeddfd„Zdej                  fd„Zy)ÚFilesystemWheelr_   r%   Nc                 ó   — || _         y r'   )r_   rt   s     r,   Ú__init__zFilesystemWheel.__init__£  s	   € Ø ˆ�r/   c                 óD   — t        j                  | j                  d¬«      S ©NT)Ú
allowZip64)r#  r$  r_   r*   s    r,   r"  zFilesystemWheel.as_zipfile¦  s   € Ü�‰˜tŸ}™}¸Ô>Ð>r/   )r4   r5   r6   r8   r(  r#  r$  r"  r9   r/   r,   r&  r&  ¢  s%   „ ð! ð !¨ó !ð?˜GŸO™Oô ?r/   r&  c                   óF   — e Zd Zdedee   ddfd„Zdej                  fd„Z	y)ÚMemoryWheelr_   Ústreamr%   Nc                 ó    — || _         || _        y r'   )r_   r.  )r+   r_   r.  s      r,   r(  zMemoryWheel.__init__«  s   € Ø ˆŒØˆ�r/   c                 óD   — t        j                  | j                  d¬«      S r*  )r#  r$  r.  r*   s    r,   r"  zMemoryWheel.as_zipfile¯  s   € Ü�‰˜tŸ{™{°tÔ<Ð<r/   )
r4   r5   r6   r8   r   rö   r(  r#  r$  r"  r9   r/   r,   r-  r-  ª  s0   „ ð ð ¨b°©ið ¸Dó ð=˜GŸO™Oô =r/   r-  )CrÓ   Úemail.messagerø   rú   r‹   Úloggingr@   r  r#  Ú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"   r8   ÚPurePathr÷   Ú	getLoggerr4   r�   r$   rB   rD   rJ   rý   rV   r&  r-  r9   r/   r,   Ú<module>rB     s  ðÛ 
Û Û Û Û Û Û 	Û ÷÷ ÷ õ õ  ;ß Kß IÝ 1å 6ß <÷ñ õ
 3Ý Dß =Ý 0å à��g×&Ñ&Ð&Ñ'€à	ˆ×	Ñ	˜8Ó	$€ô$�Xô $ð,Ø��c�‰?ð,à
��S�‰/ð,ð 	ó,ô<�Jô ô`3�xô `3÷FR?ñ R?ôj$ˆHô $ô?�eô ?ô=�%õ =r/   