ó
    T=Œj*d  ã                  ó  • S SK J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
r
S SKJrJrJrJr  S SK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+J,r,  S SK-J.r.  SSK/J0r0  1 Skr1\2\Rf                  -  r4\Rj                  " \65      r7 " S S\5      r8      S!S jr9 " S S\5      r: " S S\5      r; " S S5      r< " S S\5      r= " S S\=5      r> " S S \=5      r?g)"é    )ÚannotationsN)Ú
CollectionÚ	ContainerÚIterableÚIterator)ÚIOÚAnyÚ
NamedTupleÚProtocol)ÚRequirement)ÚInvalidSpecifierÚSpecifierSet)ÚNormalizedNameÚcanonicalize_name)ÚVersion)ÚNoneMetadataError)Úsite_packagesÚ	user_site)ÚDIRECT_URL_METADATA_NAMEÚ	DirectUrlÚDirectUrlValidationError)Úegg_link_path_from_sys_path)Úis_localÚnormalize_path)Úurl_to_pathé   )Úmsg_to_json>   ÚpythonÚwsgirefÚargparsec                  óP   • \ rS rSr\SS j5       r\SS j5       r\SS j5       rSrg)ÚBaseEntryPointé2   c                ó   • [        5       e©N©ÚNotImplementedError©Úselfs    Ú_/Users/stevendouglas/BidBrain/.venv/lib/python3.13/site-packages/pip/_internal/metadata/base.pyÚnameÚBaseEntryPoint.name3   ó   € ä!Ó#Ð#ó    c                ó   • [        5       er%   r&   r(   s    r*   ÚvalueÚBaseEntryPoint.value7   r-   r.   c                ó   • [        5       er%   r&   r(   s    r*   ÚgroupÚBaseEntryPoint.group;   r-   r.   © N©ÚreturnÚstr)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Úpropertyr+   r0   r3   Ú__static_attributes__r5   r.   r*   r"   r"   2   s<   † Øó$ó ð$ð ó$ó ð$ð ó$ó ó$r.   r"   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   ú..éÿÿÿÿ)r@   Nr   ©r8   ÚpathlibÚPath)ÚentryÚinfos     r*   Ú_convert_installed_files_pathrG   @   sm   € ö* �E˜!‘H Ó$Þ�t˜B‘x 4Ó'Ø�G‰O‰Dà˜˜�9ˆDØ�a�b�	ˆö �E˜!‘H Õ$ô Œw�|Š|Ð*˜TÐ* EÒ*Ó+Ð+r.   c                  ó4   • \ rS rSr% S\S'   S\S'   S\S'   Srg)ÚRequiresEntryé^   r8   ÚrequirementÚextraÚmarkerr5   N)r9   r:   r;   r<   Ú__annotations__r>   r5   r.   r*   rI   rI   ^   s   ‡ ØÓØƒJØ†Kr.   rI   c                  ó  • \ rS rSr\S0S j5       r\        S1S j5       r\S2S j5       rS3S jrS3S jr	\
S4S j5       r\R                  S4S j5       r\
S4S	 j5       r\
S4S
 j5       r\
S5S j5       r\
S5S j5       r\
S5S j5       r\
S5S j5       r\
S6S j5       r\
S7S j5       r\
S3S j5       r\
S3S j5       r\
S8S j5       r\
S3S j5       r\
S5S j5       r\
S5S j5       r\
S5S j5       r\
S5S j5       r\
S5S j5       rS9S jr S:S jr!S;S jr"S<S jr#S=S jr$\R                  S=S j5       r%\
S>S  j5       r&\
S4S! j5       r'\
S3S" j5       r(\
S?S# j5       r)S@SAS% jjr*SBS& jr+SCS' jr,SDS( jr-SDS) jr.SDS* jr/SES+ jr0SBS, jr1SBS- jr2SFS. jr3S$r4g/)GÚBaseDistributionéd   c                ó   • [        5       e)zwLoad the distribution from a metadata directory.

:param directory: Path to a metadata directory, e.g. ``.dist-info``.
r&   )ÚclsÚ	directorys     r*   Úfrom_directoryÚBaseDistribution.from_directorye   ó   € ô "Ó#Ð#r.   c                ó   • [        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&   )rS   Úmetadata_contentsÚfilenameÚproject_names       r*   Úfrom_metadata_file_contentsÚ,BaseDistribution.from_metadata_file_contentsm   s   € ô  "Ó#Ð#r.   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&   )rS   Úwheelr+   s      r*   Ú
from_wheelÚBaseDistribution.from_wheel   ó   € ô "Ó#Ð#r.   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ÐFr.   c                ó8   • U R                    SU R                   3$ )Nrd   )rf   rg   r(   s    r*   Ú__str__ÚBaseDistribution.__str__�   s   € Ø—-‘-�  $×"2Ñ"2Ð!3Ð4Ð4r.   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*   rh   ÚBaseDistribution.location“   rb   r.   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   rf   rh   )r)   rq   Úegg_link_paths      r*   Úeditable_project_locationÚ*BaseDistribution.editable_project_location¡   sZ   € ð —_‘_ˆ
ÞØ×+Ñ+×-Ñ-Ü" :§>¡>Ó2Ð2ð .ð ô 8¸¿¹ÓFˆMÞð —}‘}Ð$Ør.   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   € ô "Ó#Ð#r.   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   € ô "Ó#Ð#r.   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{   rC   rD   Úis_file©r)   r{   s     r*   Úinstalled_by_distutilsÚ'BaseDistribution.installed_by_distutilsÓ   s-   € ð ×*Ñ*ˆÞØÜ�|Š|˜MÓ*×2Ñ2Ó4Ð4r.   c                óp   • U R                   nU(       d  g[        R                  " U5      R                  S:H  $ )zŽWhether this distribution is installed as an egg.

This usually indicates the distribution was installed by (older versions
of) easy_install.
Fz.egg)rh   rC   rD   Úsuffix©r)   rh   s     r*   Úinstalled_as_eggÚ!BaseDistribution.installed_as_eggà   s/   € ð —=‘=ˆÞØô �|Š|˜HÓ%×,Ñ,°Ñ6Ð6r.   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{   ÚendswithrC   rD   Úis_dirr   s     r*   Ú"installed_with_setuptools_egg_infoÚ3BaseDistribution.installed_with_setuptools_egg_infoî   sA   € ð ×*Ñ*ˆÞØØ×%Ñ% k×2Ñ2ØÜ�|Š|˜MÓ*×1Ñ1Ó3Ð3r.   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Ð3r.   c                ó   • [        5       er%   r&   r(   s    r*   Úcanonical_nameÚBaseDistribution.canonical_name  r-   r.   c                ó   • [        5       er%   r&   r(   s    r*   ÚversionÚBaseDistribution.version  r-   r.   c                ó   • [        5       er%   r&   r(   s    r*   rg   ÚBaseDistribution.raw_version  r-   r.   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.
Ú-Ú_)rf   Úreplacer(   s    r*   Úsetuptools_filenameÚ$BaseDistribution.setuptools_filename  s   € ð �}‰}×$Ñ$ S¨#Ó.Ð.r.   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*   rq   Ú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.requestedJ  s   € à�|‰|˜KÓ(Ð(r.   c                ó,   • [        U R                  5      $ r%   )Úboolru   r(   s    r*   ÚeditableÚBaseDistribution.editableN  s   € ä�D×2Ñ2Ó3Ð3r.   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)rx   r   r(   s    r*   ÚlocalÚBaseDistribution.localR  s$   € ð ×"Ñ"Ñ*ØÜ˜×/Ñ/Ó0Ð0r.   c                ó|   • U R                   b  [        c  gU R                   R                  [        [        5      5      $ ©NF)rx   r   Ú
startswithr   r(   s    r*   Úin_usersiteÚBaseDistribution.in_usersite\  s2   € à×"Ñ"Ñ*¬iÑ.?ØØ×&Ñ&×1Ñ1´.ÄÓ2KÓLÐLr.   c                ó|   • U R                   b  [        c  gU R                   R                  [        [        5      5      $ rÂ   )rx   r   rÃ   r   r(   s    r*   Úin_site_packagesÚ!BaseDistribution.in_site_packagesb  s2   € à×"Ñ"Ñ*¬mÑ.CØØ×&Ñ&×1Ñ1´.ÄÓ2OÓPÐPr.   c                ó   • [        5       e)z7Check whether an entry in the info directory is a file.r&   ©r)   Úpaths     r*   r~   ÚBaseDistribution.is_fileh  r-   r.   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_namesl  rW   r.   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_textt  ó   € ô "Ó#Ð#r.   c                ó   • [        5       er%   r&   r(   s    r*   Úiter_entry_pointsÚ"BaseDistribution.iter_entry_points}  ó   € Ü!Ó#Ð#r.   c                ó   • [        5       er%   r&   r(   s    r*   Ú_metadata_implÚBaseDistribution._metadata_impl€  rÖ   r.   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Ô-Øˆr.   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Ÿ=™=Ó)Ð)r.   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Ð4r.   c                óN   • U R                   R                  SU R                  5      $ )z*Value of "Name:" in distribution metadata.ÚName)rÜ   râ   r‘   r(   s    r*   rf   ÚBaseDistribution.raw_name   s!   € ð
 �}‰}× Ñ  ¨×)<Ñ)<Ó=Ð=r.   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   r8   r   r¥   r¦   rf   )r)   r0   Ú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 r5   c                ó   • [        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)   Úextrass     r*   Úiter_dependenciesÚ"BaseDistribution.iter_dependenciesº  rW   r.   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Ð9r.   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   € ô "Ó#Ð#r.   c                óœ   •  U R                  S5      nS [        R                  " UR	                  5       5       5       $ ! [         a     g f = f)NÚRECORDc              3  óf   #   • U  H'  n[        [        R                  " US    5      5      v •  M)     g7f)r   NrB   )Ú.0Úrows     r*   Ú	<genexpr>ÚFBaseDistribution._iter_declared_entries_from_record.<locals>.<genexpr>Ø  s'   é € ÐSÒ5R¨c””G—L’L  Q¡Ó(×)Ð)Ò5Rùs   ‚/1)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  ó6   #   • U  H  o(       d  M  Uv •  M     g 7fr%   r5   )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%   )rG   rC   rD   Úparts)rü   r  Úinfo_rels     €r*   rþ   r  ê  s4   øé € ð 
â�ô *¬'¯,ª,°q«/×*?Ñ*?ÀÇÁ×PÐPÚùs   ƒAA)
rŸ   r    r¯   rh   r{   rC   rD   Úrelative_tor®   r  )r)   r  ÚpathsÚrootrF   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ð	
r.   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[]Ú:)rK   rL   rM   )rŸ   r    r¯   r°   rÃ   r‰   Ú	partitionrI   )r)   r§   rL   rM   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   rL   Úadd)r)   Úknown_extrasrE   rL   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   rL   rM   rK   )r)   rE   rL   rM   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c                óÊ   • 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Ü   ÚdeprL   s       r*   rÛ   Ú'BaseDistribution._add_egg_info_requires>  sa   € à×Ñ ×0Ñ0Ø×7Ñ7Ö9�Ø,/˜Ó)ñ :à×ÑÐ 0×1Ñ1Ø×3Ñ3Ö5�Ø-2Ð)Ó*ò 6ð 2r.   N)rT   r8   r7   rP   )rY   ÚbytesrZ   r8   r[   r8   r7   rP   )r_   ÚWheelr+   r8   r7   rP   r6   )r7   z
str | None)r7   r»   )r7   r   )r7   r   )r7   zDirectUrl | None)rË   ÚInfoPathr7   r»   )r7   zIterator[str])rË   r,  r7   r8   )r7   zIterable[BaseEntryPoint])r7   úemail.message.Message)r7   zdict[str, Any])r7   r   )r5   )rî   zCollection[str]r7   zIterable[Requirement])r7   zIterable[str])r7   zIterable[NormalizedName])r7   zIterator[str] | None)r7   zIterator[RequiresEntry])rÜ   r-  r7   ÚNone)5r9   r:   r;   r<   ÚclassmethodrU   r\   r`   ri   rl   r=   rh   Ú	functoolsÚcached_propertyru   rx   r{   r€   r…   r‹   rŽ   r‘   r”   rg   rœ   rq   r´   r¸   r¼   r¿   rÄ   rÇ   r~   rÎ   rŸ   rÔ   rØ   rÜ   rß   rã   rf   rë   rï   rô   r÷   r  r  r  r  r   r%  rÛ   r>   r5   r.   r*   rP   rP   d   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ô(÷83r.   rP   c                  óŒ   • \ rS rSrSr\SS j5       r\SS j5       rSS jrSS jr	SS jr
S\SS	S	4           SS
 jjrSrg)ÚBaseEnvironmentiH  z6An environment containing distributions to introspect.c                ó   • [        5       er%   r&   )rS   s    r*   ÚdefaultÚBaseEnvironment.defaultK  r-   r.   c                ó   • [        5       er%   r&   )rS   r  s     r*   Ú
from_pathsÚBaseEnvironment.from_pathsO  r-   r.   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_distributionS  rW   r.   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_distributions[  rÒ   r.   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¦   rh   )r)   ÚdistÚproject_name_valids      r*   Úiter_all_distributionsÚ&BaseEnvironment.iter_all_distributionsd  sj   é € à×,Ñ,Ö.ˆDô
 "$§¢Ø<Ø×#Ñ#Ü—m‘mñ"Ðö
 &Ü—‘Ø;Ø×'Ñ'Ø—M‘Môñ
 ØŒJò# /ùs   ‚A?BTFc                ó¼   ^• 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  óJ   #   • 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  óJ   #   • U  H  oR                   (       a  M  Uv •  M     g 7fr%   ©r¼   rK  s     r*   rþ   rM  •  s   é € Ð2šR˜§z¥z—!‘!šRùrN  c              3  óJ   #   • U  H  oR                   (       d  M  Uv •  M     g 7fr%   rP  rK  s     r*   rþ   rM  —  s   é € Ð.šR˜§:¥:—!‘!šRùrN  c              3  óJ   #   • U  H  oR                   (       d  M  Uv •  M     g 7fr%   )rÄ   rK  s     r*   rþ   rM  ™  s   é € Ð1šR˜§=¥=—!‘!šRùrN  c              3  óJ   >#   • U  H  oR                   T;  d  M  Uv •  M     g 7fr%   )r‘   )rü   rL  Úskips     €r*   rþ   rM  š  s   øé € Ð>š2�a×!1Ñ!1¸Ñ!=—‘š2ùs   ƒ#š	#)rG  )r)   Ú
local_onlyrT  Úinclude_editablesÚeditables_onlyÚ	user_onlyÚits     `    r*   Úiter_installed_distributionsÚ,BaseEnvironment.iter_installed_distributionsy  sR   ø€ ð0 ×(Ñ(Ó*ˆÞÙ+™RÓ+ˆBÞ Ù2™RÓ2ˆBÞÙ.™RÓ.ˆBÞÙ1™RÓ1ˆBÜ>™2Ó>Ð>r.   r5   N)r7   r3  )r  zlist[str] | Noner7   r3  )r+   r8   r7   zBaseDistribution | None)r7   úIterator[BaseDistribution])rU  r»   rT  zContainer[str]rV  r»   rW  r»   rX  r»   r7   r\  )r9   r:   r;   r<   Ú__doc__r/  r5  r8  r;  r>  rG  Ústdlib_pkgsrZ  r>   r5   r.   r*   r3  r3  H  s�   † Ù@àó$ó ð$ð ó$ó ð$ô$ô$ôð.  Ø*Ø"&Ø$Øð!?àð!?ð ð!?ð  ð	!?ð
 ð!?ð ð!?ð 
$÷!?ð !?r.   r3  c                  ó*   • \ rS rSr% S\S'   SS jrSrg)r+  i�  r8   rh   c                ó   • [        5       er%   r&   r(   s    r*   Ú
as_zipfileÚWheel.as_zipfile   rÖ   r.   r5   N©r7   zzipfile.ZipFile)r9   r:   r;   r<   rN   ra  r>   r5   r.   r*   r+  r+  �  s   ‡ ØƒM÷$r.   r+  c                  ó(   • \ rS rSrSS jrSS jrSrg)ÚFilesystemWheeli¤  c                ó   • Xl         g r%   ©rh   r„   s     r*   Ú__init__ÚFilesystemWheel.__init__¥  s   € Ø �r.   c                ó@   • [         R                  " U R                  SS9$ ©NT)Ú
allowZip64)ÚzipfileÚZipFilerh   r(   s    r*   ra  ÚFilesystemWheel.as_zipfile¨  s   € Ü�Š˜tŸ}™}¸Ñ>Ð>r.   rg  N)rh   r8   r7   r.  rc  ©r9   r:   r;   r<   rh  ra  r>   r5   r.   r*   re  re  ¤  s   † ô!÷?r.   re  c                  ó(   • \ rS rSrSS jrSS jrSrg)ÚMemoryWheeli¬  c                ó   • Xl         X l        g r%   ©rh   Ústream)r)   rh   ru  s      r*   rh  ÚMemoryWheel.__init__­  s   € Ø ŒØ�r.   c                ó@   • [         R                  " U R                  SS9$ rk  )rm  rn  ru  r(   s    r*   ra  ÚMemoryWheel.as_zipfile±  s   € Ü�Š˜tŸ{™{°tÑ<Ð<r.   rt  N)rh   r8   ru  z	IO[bytes]r7   r.  rc  rp  r5   r.   r*   rr  rr  ¬  s   † ô÷=r.   rr  )rE   útuple[str, ...]rF   ry  r7   r8   )@Ú
__future__r   r   Úemail.messageÚemailr0  r£   ÚloggingrC   rB  rm  Úcollections.abcr   r   r   r   Útypingr   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.egg_linkr   Úpip._internal.utils.miscr   r   Úpip._internal.utils.urlsr   Ú_jsonr   r^  r8   ÚPurePathr,  Ú	getLoggerr9   r¥   r"   rG   rI   rP   r3  r+  re  rr  r5   r.   r*   Ú<module>r�     sý   ðÝ "ã 
Û Û Û Û Û Û 	Û ß EÓ E÷ó õ ;ß Kß IÝ 1å 6ß <÷ñ õ
 Eß =Ý 0å ò 0€ð �×!Ñ!Ñ!€à	×	Ò	˜8Ó	$€ô$�Xô $ð,Øð,à
ð,ð 	ô,ô<�Jô ôa3�xô a3÷HR?ñ R?ôj$ˆHô $ô?�eô ?ô=�%õ =r.   