+
    ÎiLc                        ^ RI Ht ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIHtHtHtHt ^ RIHtHtHtHtHt ^ RIHt ^ RIHtHt ^ RIHtHt ^ RIHt ^ R	I H!t! ^ R
I"H#t#H$t$ ^ RI%H&t&H't'H(t( ^ RI)H*t* ^ RI+H,t, ^ RI-H.t.H/t/ ^ RI0H1t1 ^RI2H3t3 ]]4]Pj                  3,          t6]Pn                  ! ]84      t9 ! R R]4      t:R R lt; ! R R]4      t< ! R R]4      t= ! R R4      t> ! R R]4      t? ! R R]?4      t@ ! R R ]?4      tAR# )!    )annotationsN)
Collection	ContainerIterableIterator)IOAny
NamedTupleProtocolUnion)Requirement)InvalidSpecifierSpecifierSet)NormalizedNamecanonicalize_name)Version)NoneMetadataError)site_packages	user_site)DIRECT_URL_METADATA_NAME	DirectUrlDirectUrlValidationError)stdlib_pkgs)egg_link_path_from_sys_path)is_localnormalize_path)url_to_path)msg_to_jsonc                  X    ] tR t^,t]R R l4       t]R R l4       t]R R l4       tRtR# )	BaseEntryPointc                   V ^8  d   QhRR/#    returnstr )formats   "j/Users/ahmad/.openclaw/workspace/scripts/.venv/lib/python3.14/site-packages/pip/_internal/metadata/base.py__annotate__BaseEntryPoint.__annotate__.   s     $ $c $    c                	    \        4       hNNotImplementedErrorselfs   &r(   nameBaseEntryPoint.name-       !##r+   c                   V ^8  d   QhRR/# r"   r&   )r'   s   "r(   r)   r*   2        $ $s $r+   c                	    \        4       hr-   r.   r0   s   &r(   valueBaseEntryPoint.value1   r4   r+   c                   V ^8  d   QhRR/# r"   r&   )r'   s   "r(   r)   r*   6   r6   r+   c                	    \        4       hr-   r.   r0   s   &r(   groupBaseEntryPoint.group5   r4   r+   r&   N)	__name__
__module____qualname____firstlineno__propertyr2   r8   r<   __static_attributes__r&   r+   r(   r    r    ,   s<    $ $ $ $ $ $r+   r    c               $    V ^8  d   QhRRRRRR/# )r#   entryztuple[str, ...]infor$   r%   r&   )r'   s   "r(   r)   r)   :   s&     , ,,
, 	,r+   c                    V '       d?   V ^ ,          R8X  d1   V'       d   VR,          R8X  d   VR,          pMVRR pV R,          p KF  \        \        P                  ! . VOV O5!  4      # )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.
..N:   NN)rH   r%   pathlibPath)rE   rF   s   &&r(   _convert_installed_files_pathrN   :   sY    * E!H$tBx4'GOD9Db	w||*T*E*++r+   c                  6    ] tR t^Xt$ R]R&   R]R&   R]R&   RtR# )RequiresEntryr%   requirementextramarkerr&   N)r>   r?   r@   rA   __annotations__rC   r&   r+   r(   rP   rP   X   s    JKr+   rP   c                  L   ] tR t^^t]R R l4       t]R R l4       t]R R l4       tR R ltR	 R
 lt	]
R R l4       t]
R R l4       t]
R R l4       t]
R R l4       t]
R R l4       t]
R R l4       t]
R R l4       t]
R R l4       t]
R R l4       t]
R R l4       t]
R R  l4       t]
R! R" l4       t]
R# R$ l4       t]
R% R& l4       t]
R' R( l4       t]
R) R* l4       t]
R+ R, l4       t]
R- R. l4       t]
R/ R0 l4       tR1 R2 ltR3 R4 ltR5 R6 lt R7 R8 lt!R9 R: lt"]#PH                  R; R< l4       t%]
R= R> l4       t&]
R? R@ l4       t']
RA RB l4       t(]
RC RD l4       t)R[RE RF llt*RG RH lt+RI RJ lt,RK RL lt-RM RN lt.RO RP lt/RQ RR lt0RS RT lt1RU RV lt2RW RX lt3RYt4RZ# )\BaseDistributionc                    V ^8  d   QhRRRR/# )r#   	directoryr%   r$   rV   r&   )r'   s   "r(   r)   BaseDistribution.__annotate__`   s     $ $s $/? $r+   c                    \        4       h)zwLoad the distribution from a metadata directory.

:param directory: Path to a metadata directory, e.g. ``.dist-info``.
r.   )clsrX   s   &&r(   from_directoryBaseDistribution.from_directory_        "##r+   c               (    V ^8  d   QhRRRRRRRR/# )r#   metadata_contentsbytesfilenamer%   project_namer$   rV   r&   )r'   s   "r(   r)   rY   h   s2     $ $ $ $ 	$
 
$r+   c                    \        4       h)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.   )r[   r`   rb   rc   s   &&&&r(   from_metadata_file_contents,BaseDistribution.from_metadata_file_contentsg   s      "##r+   c               $    V ^8  d   QhRRRRRR/# )r#   wheelWheelr2   r%   r$   rV   r&   )r'   s   "r(   r)   rY   z   s"     $ $u $C $4D $r+   c                    \        4       h)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.   )r[   rh   r2   s   &&&r(   
from_wheelBaseDistribution.from_wheely        "##r+   c                   V ^8  d   QhRR/# r"   r&   )r'   s   "r(   r)   rY      s     G G# Gr+   c                	T    V P                    R V P                   RV P                   R2# ) z ())raw_nameraw_versionlocationr0   s   &r(   __repr__BaseDistribution.__repr__   s*    --$"2"2!32dmm_AFFr+   c                   V ^8  d   QhRR/# r"   r&   )r'   s   "r(   r)   rY      s     5 5 5r+   c                	8    V P                    R V P                   2# )rp   )rr   rs   r0   s   &r(   __str__BaseDistribution.__str__   s    --$"2"2!344r+   c                   V ^8  d   QhRR/# r#   r$   z
str | Noner&   )r'   s   "r(   r)   rY      s     $ $* $r+   c                    \        4       h)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.   r0   s   &r(   rt   BaseDistribution.location   rm   r+   c                   V ^8  d   QhRR/# r|   r&   )r'   s   "r(   r)   rY      s      : r+   c                    V P                   pV'       d/   VP                  4       '       d   \        VP                  4      #  R# \	        V P
                  4      pV'       d   V P                  # R# )zThe 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   rr   rt   )r1   r   egg_link_paths   &  r(   editable_project_location*BaseDistribution.editable_project_location   sZ     __
++--":>>22 .  8FM }}$r+   c                   V ^8  d   QhRR/# r|   r&   )r'   s   "r(   r)   rY      s     
$ 
$J 
$r+   c                    \        4       h)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.   r0   s   &r(   installed_location#BaseDistribution.installed_location   s     "##r+   c                   V ^8  d   QhRR/# r|   r&   )r'   s   "r(   r)   rY      s     $ $z $r+   c                    \        4       h)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.   r0   s   &r(   info_locationBaseDistribution.info_location   s     "##r+   c                   V ^8  d   QhRR/# r#   r$   boolr&   )r'   s   "r(   r)   rY      s     
5 
5 
5r+   c                v    V P                   pV'       g   R# \        P                  ! V4      P                  4       # )zWhether 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   rL   rM   is_filer1   r   s   & r(   installed_by_distutils'BaseDistribution.installed_by_distutils   s-     **||M*2244r+   c                   V ^8  d   QhRR/# r   r&   )r'   s   "r(   r)   rY      s     7 7$ 7r+   c                t    V P                   pV'       g   R# \        P                  ! V4      P                  R8H  # )zWhether this distribution is installed as an egg.

This usually indicates the distribution was installed by (older versions
of) easy_install.
Fz.egg)rt   rL   rM   suffixr1   rt   s   & r(   installed_as_egg!BaseDistribution.installed_as_egg   s/     == ||H%,,66r+   c                   V ^8  d   QhRR/# r   r&   )r'   s   "r(   r)   rY      s     4 4D 4r+   c                    V P                   pV'       g   R# VP                  R4      '       g   R# \        P                  ! V4      P	                  4       # )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   endswithrL   rM   is_dirr   s   & r(   "installed_with_setuptools_egg_info3BaseDistribution.installed_with_setuptools_egg_info   sA     **%%k22||M*1133r+   c                   V ^8  d   QhRR/# r   r&   )r'   s   "r(   r)   rY      s     4 4$ 4r+   c                    V P                   pV'       g   R# VP                  R4      '       g   R# \        P                  ! V4      P	                  4       # )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                   V ^8  d   QhRR/# )r#   r$   r   r&   )r'   s   "r(   r)   rY     s     $ $ $r+   c                	    \        4       hr-   r.   r0   s   &r(   canonical_nameBaseDistribution.canonical_name  r4   r+   c                   V ^8  d   QhRR/# )r#   r$   r   r&   )r'   s   "r(   r)   rY     s     $ $ $r+   c                	    \        4       hr-   r.   r0   s   &r(   versionBaseDistribution.version  r4   r+   c                   V ^8  d   QhRR/# r"   r&   )r'   s   "r(   r)   rY     s     $ $S $r+   c                	    \        4       hr-   r.   r0   s   &r(   rs   BaseDistribution.raw_version  r4   r+   c                   V ^8  d   QhRR/# r"   r&   )r'   s   "r(   r)   rY     s     / /S /r+   c                :    V P                   P                  RR4      # )zConvert a project name to its setuptools-compatible filename.

This is a copy of ``pkg_resources.to_filename()`` for compatibility.
-_)rr   replacer0   s   &r(   setuptools_filename$BaseDistribution.setuptools_filename  s     }}$$S#..r+   c                   V ^8  d   QhRR/# )r#   r$   zDirectUrl | Noner&   )r'   s   "r(   r)   rY      s      , r+   c                (    V P                  \        4      p \        P                  ! T4      #   \         d     R# i ; i  \
        \        P                  \        3 d2   p\        P                  R\        T P                  T4        Rp?R# Rp?ii ; i)zObtain 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   )r1   contentes   &  r(   r   BaseDistribution.direct_url  s    	nn%=>G	&&w// ! 		
   $
 	
 NN-(##	 	s#   . A  ==  B &BBc                   V ^8  d   QhRR/# r"   r&   )r'   s   "r(   r)   rY   :  s     	 	3 	r+   c                	     V P                  R 4      pTP	                  4        F  pTP                  4       pT'       g   K  Tu # 	  R#   \        \        \        3 d     R# i ; i)	INSTALLER )r   OSError
ValueErrorr   
splitlinesstrip)r1   installer_textlinecleaned_lines   &   r(   	installerBaseDistribution.installer9  sa    	!^^K8N #--/D::<L|## 0  %67 		s   A A"!A"c                   V ^8  d   QhRR/# r   r&   )r'   s   "r(   r)   rY   F  s     ) )4 )r+   c                	$    V P                  R 4      # )	REQUESTED)r   r0   s   &r(   	requestedBaseDistribution.requestedE  s    ||K((r+   c                   V ^8  d   QhRR/# r   r&   )r'   s   "r(   r)   rY   J  s     4 4$ 4r+   c                	,    \        V P                  4      # r-   )r   r   r0   s   &r(   editableBaseDistribution.editableI  s    D2233r+   c                   V ^8  d   QhRR/# r   r&   )r'   s   "r(   r)   rY   N  s     1 1t 1r+   c                L    V P                   f   R# \        V P                   4      # )zlIf distribution is installed in the current virtual environment.

Always True if we're not in a virtualenv.
F)r   r   r0   s   &r(   localBaseDistribution.localM  s$     ""*//00r+   c                   V ^8  d   QhRR/# r   r&   )r'   s   "r(   r)   rY   X  s     M MT Mr+   c                	    V P                   e	   \        f   R# V P                   P                  \        \        4      4      # NF)r   r   
startswithr   r0   s   &r(   in_usersiteBaseDistribution.in_usersiteW  s2    ""*i.?&&11.2KLLr+   c                   V ^8  d   QhRR/# r   r&   )r'   s   "r(   r)   rY   ^  s     Q Q$ Qr+   c                	    V P                   e	   \        f   R# V P                   P                  \        \        4      4      # r   )r   r   r   r   r0   s   &r(   in_site_packages!BaseDistribution.in_site_packages]  s2    ""*m.C&&11.2OPPr+   c                    V ^8  d   QhRRRR/# )r#   pathInfoPathr$   r   r&   )r'   s   "r(   r)   rY   c  s     $ $H $ $r+   c                    \        4       h)z7Check whether an entry in the info directory is a file.r.   r1   r   s   &&r(   r   BaseDistribution.is_filec  r4   r+   c                   V ^8  d   QhRR/# )r#   r$   zIterator[str]r&   )r'   s   "r(   r)   rY   g  s     $ $] $r+   c                    \        4       h)zFind 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.   r0   s   &r(   iter_distutils_script_names,BaseDistribution.iter_distutils_script_namesg  r^   r+   c                    V ^8  d   QhRRRR/# )r#   r   r   r$   r%   r&   )r'   s   "r(   r)   rY   o  s     $ $h $3 $r+   c                    \        4       h)zRead 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_texto       "##r+   c                   V ^8  d   QhRR/# )r#   r$   zIterable[BaseEntryPoint]r&   )r'   s   "r(   r)   rY   x  s     $ $#; $r+   c                	    \        4       hr-   r.   r0   s   &r(   iter_entry_points"BaseDistribution.iter_entry_pointsx      !##r+   c                   V ^8  d   QhRR/# r#   r$   email.message.Messager&   )r'   s   "r(   r)   rY   {  s     $ $ 5 $r+   c                	    \        4       hr-   r.   r0   s   &r(   _metadata_implBaseDistribution._metadata_impl{  r   r+   c                   V ^8  d   QhRR/# r   r&   )r'   s   "r(   r)   rY     s     
 
/ 
r+   c                H    V P                  4       pV P                  V4       V# )zMetadata 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)r1   metadatas   & r(   r  BaseDistribution.metadata~  s%     &&(##H-r+   c                   V ^8  d   QhRR/# )r#   r$   zdict[str, Any]r&   )r'   s   "r(   r)   rY     s     * *~ *r+   c                ,    \        V P                  4      # )zPEP 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  r0   s   &r(   metadata_dictBaseDistribution.metadata_dict  s     4==))r+   c                   V ^8  d   QhRR/# r|   r&   )r'   s   "r(   r)   rY     s     5 5* 5r+   c                8    V P                   P                  R4      # )zDValue of "Metadata-Version:" in distribution metadata, if available.zMetadata-Version)r  getr0   s   &r(   metadata_version!BaseDistribution.metadata_version  s     }}  !344r+   c                   V ^8  d   QhRR/# r"   r&   )r'   s   "r(   r)   rY     s     > ># >r+   c                N    V P                   P                  RV P                  4      # )z*Value of "Name:" in distribution metadata.Name)r  r  r   r0   s   &r(   rr   BaseDistribution.raw_name  s!    
 }}  )<)<==r+   c                   V ^8  d   QhRR/# )r#   r$   r   r&   )r'   s   "r(   r)   rY     s       r+   c                
   V P                   P                  R4      pVf   \        4       #  \        \        V4      4      pV#   \         d7   pRp\
        P                  Y@P                  T4       \        4       u Rp?# Rp?ii ; i)zValue 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   rr   )r1   r8   specr   messages   &    r(   requires_python BaseDistribution.requires_python  sq     !!"34=>!	"E
+D
 	   	"EGNN7MM15>!	"s   A B+A=7B=Bc                    V ^8  d   QhRRRR/# )r#   extraszCollection[str]r$   zIterable[Requirement]r&   )r'   s   "r(   r)   rY     s     $ $ $AV $r+   c                    \        4       h)zDependencies of this distribution.

For modern .dist-info distributions, this is the collection of
"Requires-Dist:" entries in distribution metadata.
r.   )r1   r  s   &&r(   iter_dependencies"BaseDistribution.iter_dependencies  r^   r+   c                   V ^8  d   QhRR/# r#   r$   zIterable[str]r&   )r'   s   "r(   r)   rY     s     : :} :r+   c                :    V P                   P                  R. 4      # )zRaw Requires-Dist metadata.Requires-Dist)r  get_allr0   s   &r(   iter_raw_dependencies&BaseDistribution.iter_raw_dependencies  s    }}$$_b99r+   c                   V ^8  d   QhRR/# )r#   r$   zIterable[NormalizedName]r&   )r'   s   "r(   r)   rY     s     
$ 
$&> 
$r+   c                    \        4       h)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.   r0   s   &r(   iter_provided_extras%BaseDistribution.iter_provided_extras  s     "##r+   c                   V ^8  d   QhRR/# r#   r$   zIterator[str] | Noner&   )r'   s   "r(   r)   rY     s     T T4H Tr+   c                	     V P                  R 4      pR \        P                  ! TP	                  4       4       4       #   \         d     R# i ; i)RECORDNc              3  n   "   T F+  p\        \        P                  ! V^ ,          4      4      x  K-  	  R# 5i)r   NrK   ).0rows   & r(   	<genexpr>FBaseDistribution._iter_declared_entries_from_record.<locals>.<genexpr>  s'     S5RcGLLQ())5Rs   35)r   r   csvreaderr   )r1   texts   & r(   "_iter_declared_entries_from_record3BaseDistribution._iter_declared_entries_from_record  sG    	>>(+D TSZZ@Q5RSS ! 		s   > AAc                   V ^8  d   QhRR/# r-  r&   )r'   s   "r(   r)   rY     s     
 
4H 
r+   c                	t  a  V P                  R 4      pR TP                  RR7       4       pT P                  pT P                  pTe   Tf   T#  \
        P                  ! T4      P                  T4      oSP                  '       g   T# T3R lT 4       #   \         d     R# i ; i  \         d    Tu # i ; i)zinstalled-files.txtNc              3  8   "   T F  q'       g   K  Vx  K  	  R # 5ir-   r&   )r1  ps   & r(   r3  FBaseDistribution._iter_declared_entries_from_legacy.<locals>.<genexpr>  s     A;qq;s   	
F)keependsc              3     <"   T F9  p\        \        P                  ! V4      P                  SP                  4      x  K;  	  R # 5ir-   )rN   rL   rM   parts)r1  r=  info_rels   & r(   r3  r>    s4      
 *',,q/*?*?PPs   AA)
r   r   r   rt   r   rL   rM   relative_tor   rA  )r1   r7  pathsrootrF   rB  s   &    @r(   "_iter_declared_entries_from_legacy3BaseDistribution._iter_declared_entries_from_legacy  s    	>>"78D BDOOUO;A}}!!<4<L	||D)55d;H ~~~L

 	
 ! 		  	L	s#   B %B' B$#B$'B76B7c                   V ^8  d   QhRR/# r-  r&   )r'   s   "r(   r)   rY     s     
 
'; 
r+   c                R    V P                  4       ;'       g    V P                  4       # )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``.
)r8  rF  r0   s   &r(   iter_declared_entries&BaseDistribution.iter_declared_entries  s+     335 9 9668	
r+   c                   V ^8  d   QhRR/# )r#   r$   zIterator[RequiresEntry]r&   )r'   s   "r(   r)   rY     s     N N,C Nr+   c              #    "    V P                  R4      pR;r#TP                  4        F  pTP                  4       pT'       d   TP	                  R4      '       d   K4  TP	                  R4      '       d=   TP                  R4      '       d&   TP                  R4      P                  R4      w  r%pK  \        YBTR	7      x  K  	  R#   \         d     R# i ; i5i)
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[]:)rQ   rR   rS   )r   r   r   r   r   r   	partitionrP   )r1   r   rR   rS   r   r   s   &     r(   _iter_requires_txt_entries+BaseDistribution._iter_requires_txt_entries  s     	nn^4G &&(D::<D4??3//s##c(:(:#'::d#3#=#=c#B &DfMM ) ! 		s:   CC ACC3C
:CCCCCc                   V ^8  d   QhRR/# r"  r&   )r'   s   "r(   r)   rY     s      } r+   c              #     "   R0pV P                  4        F5  p\        VP                  4      pW19   d   K   VP                  V4       Vx  K7  	  R# 5i)z'Get extras from the egg-info directory.r   N)rS  r   rR   add)r1   known_extrasrE   rR   s   &   r(   _iter_egg_info_extras&BaseDistribution._iter_egg_info_extras  sI     t446E%ekk2E$U#K 7s   AAc                   V ^8  d   QhRR/# r"  r&   )r'   s   "r(   r)   rY     s     ( (] (r+   c              #  x  "   V P                  4        F  p\        VP                  4      pV'       d'   VP                  '       d   RVP                   RV R2pM0V'       d   RV R2pM!VP                  '       d   VP                  pMRpV'       d   VP                   RV 2x  K  VP                  x  K  	  R# 5i)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)rS  r   rR   rS   rQ   )r1   rE   rR   rS   s   &   r(   _iter_egg_info_dependencies,BaseDistribution._iter_egg_info_dependencies  s      446E%ekk2EU\\N*:5'C%eWA.**+3vh77''' 7s   AB:B:!B::B:)B:c                    V ^8  d   QhRRRR/# )r#   r  r   r$   Noner&   )r'   s   "r(   r)   rY   9  s     3 3/D 3 3r+   c                    VP                  R4      '       g   V P                  4        F  pW!R&   K	  	  VP                  R4      '       g   V P                  4        F  pW1R&   K	  	  R# R# )z6Add egg-info requires.txt information to the metadata.r$  zProvides-ExtraN)r%  r_  rY  )r1   r  deprR   s   &&  r(   r  'BaseDistribution._add_egg_info_requires9  sa    00779,/) : 011335-2)* 6 2r+   r&   N)r&   )5r>   r?   r@   rA   classmethodr\   re   rk   ru   ry   rB   rt   r   r   r   r   r   r   r   r   r   rs   r   r   r   r   r   r   r   r   r   r   r   r   r  	functoolscached_propertyr  r  r  rr   r  r  r&  r*  r8  rF  rJ  rS  rY  r_  r  rC   r&   r+   r(   rV   rV   ^   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3 3r+   rV   c                      ] tR tRtRt]R R l4       t]R R l4       tR R ltR	 R
 lt	R R lt
R]RRR3R R lltRtR# )BaseEnvironmentiC  z6An environment containing distributions to introspect.c                   V ^8  d   QhRR/# )r#   r$   rj  r&   )r'   s   "r(   r)   BaseEnvironment.__annotate__G  s     $ $ $r+   c                	    \        4       hr-   r.   )r[   s   &r(   defaultBaseEnvironment.defaultF  r4   r+   c                    V ^8  d   QhRRRR/# )r#   rD  zlist[str] | Noner$   rj  r&   )r'   s   "r(   r)   rl  K  s     $ $/ $O $r+   c                	    \        4       hr-   r.   )r[   rD  s   &&r(   
from_pathsBaseEnvironment.from_pathsJ  r4   r+   c                    V ^8  d   QhRRRR/# )r#   r2   r%   r$   zBaseDistribution | Noner&   )r'   s   "r(   r)   rl  N  s     $ $S $-D $r+   c                    \        4       h)zGiven a requirement name, return the installed distributions.

The name may not be normalized. The implementation must canonicalize
it for lookup.
r.   )r1   r2   s   &&r(   get_distribution BaseEnvironment.get_distributionN  r^   r+   c                   V ^8  d   QhRR/# r#   r$   Iterator[BaseDistribution]r&   )r'   s   "r(   r)   rl  V  s     $ $%? $r+   c                    \        4       h)zIterate 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.   r0   s   &r(   _iter_distributions#BaseEnvironment._iter_distributionsV  r   r+   c                   V ^8  d   QhRR/# ry  r&   )r'   s   "r(   r)   rl  _  s      (B r+   c              #    "   V P                  4        Fm  p\        P                  ! RVP                  \        P                  R7      pV'       g.   \
        P                  RVP                  VP                  4       Ki  Vx  Ko  	  R# 5i)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   rt   )r1   distproject_name_valids   &  r(   iter_all_distributions&BaseEnvironment.iter_all_distributions_  sj     ,,.D
 "$<##mm"
 &;''MM
 J# /s   BBTFc               0    V ^8  d   QhRRRRRRRRRRRR	/# )
r#   
local_onlyr   skipzContainer[str]include_editableseditables_only	user_onlyr$   rz  r&   )r'   s   "r(   r)   rl  t  sF     !? !?!? !?  	!?
 !? !? 
$!?r+   c                   a V P                  4       pV'       d
   R V 4       pV'       g
   R V 4       pV'       d
   R V 4       pV'       d
   R V 4       pV3R lV 4       # )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  L   "   T F  qP                   '       g   K  Vx  K  	  R # 5ir-   )r   r1  ds   & r(   r3  ?BaseEnvironment.iter_installed_distributions.<locals>.<genexpr>  s     +R77!!R   $
$c              3  L   "   T F  qP                   '       d   K  Vx  K  	  R # 5ir-   r   r  s   & r(   r3  r    s     2Rzz!!Rr  c              3  L   "   T F  qP                   '       g   K  Vx  K  	  R # 5ir-   r  r  s   & r(   r3  r    s     .R::!!Rr  c              3  L   "   T F  qP                   '       g   K  Vx  K  	  R # 5ir-   )r   r  s   & r(   r3  r    s     1R==!!Rr  c              3  L   <"   T F  qP                   S9  g   K  Vx  K  	  R # 5ir-   )r   )r1  r  r  s   & r(   r3  r    s     >2a!1!1!=2s   $
$)r  )r1   r  r  r  r  r  its   &&f&&& r(   iter_installed_distributions,BaseEnvironment.iter_installed_distributionst  sR    0 ((*+R+B 2R2B.R.B1R1B>2>>r+   r&   N)r>   r?   r@   rA   __doc__rf  rn  rr  rv  r|  r  r   r  rC   r&   r+   r(   rj  rj  C  sU    @$ $ $ $$$.  *"&$!? !?r+   rj  c                  .    ] tR tRt$ R]R&   R R ltRtR# )ri   i  r%   rt   c                   V ^8  d   QhRR/# r#   r$   zzipfile.ZipFiler&   )r'   s   "r(   r)   Wheel.__annotate__  s     $ $O $r+   c                	    \        4       hr-   r.   r0   s   &r(   
as_zipfileWheel.as_zipfile  r   r+   r&   N)r>   r?   r@   rA   rT   r  rC   r&   r+   r(   ri   ri     s    M$ $r+   ri   c                  .    ] tR tRtR R ltR R ltRtR# )FilesystemWheeli  c                    V ^8  d   QhRRRR/# )r#   rt   r%   r$   rb  r&   )r'   s   "r(   r)   FilesystemWheel.__annotate__  s     ! ! ! !r+   c                	    Wn         R # r-   rt   r   s   &&r(   __init__FilesystemWheel.__init__  s     r+   c                   V ^8  d   QhRR/# r  r&   )r'   s   "r(   r)   r    s     ? ?O ?r+   c                	F    \         P                  ! V P                  R R7      # T)
allowZip64)zipfileZipFilert   r0   s   &r(   r  FilesystemWheel.as_zipfile  s    t}}>>r+   r  Nr>   r?   r@   rA   r  r  rC   r&   r+   r(   r  r    s    !? ?r+   r  c                  .    ] tR tRtR R ltR R ltRtR# )MemoryWheeli  c               $    V ^8  d   QhRRRRRR/# )r#   rt   r%   streamz	IO[bytes]r$   rb  r&   )r'   s   "r(   r)   MemoryWheel.__annotate__  s!       i D r+   c                	    Wn         W n        R # r-   rt   r  )r1   rt   r  s   &&&r(   r  MemoryWheel.__init__  s     r+   c                   V ^8  d   QhRR/# r  r&   )r'   s   "r(   r)   r    s     = =O =r+   c                	F    \         P                  ! V P                  R R7      # r  )r  r  r  r0   s   &r(   r  MemoryWheel.as_zipfile  s    t{{t<<r+   r  Nr  r&   r+   r(   r  r    s    = =r+   r  )B
__future__r   r5  email.messageemailrg  r   loggingrL   r  r  collections.abcr   r   r   r   typingr   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   	getLoggerr>   r   r    rN   rP   rV   rj  ri   r  r  r&   r+   r(   <module>r     s    " 
      	  E E  ; K I 1 6 < 
 3 D = 0 g&&&'			8	$$X $,<J b3x b3JR? R?j$H $?e ?=% =r+   