
    eg3e                     V   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 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/m0Z0m1Z1 d dl2m3Z3 ddl4m5Z5 erd dl	m6Z6 ne7Z6ee e!f   Z8ee9ejt                  f   Z; ejx                  e=      Z> G d de6      Z?dee9df   dee9df   de9fdZ@ G d de      ZA G d de6      ZB G d d      ZC G d de6      ZD G d  d!eD      ZE G d" d#eD      ZFy)$    N)IOTYPE_CHECKINGAny
Collection	ContainerDictIterableIteratorList
NamedTupleOptionalTupleUnion)Requirement)InvalidSpecifierSpecifierSet)NormalizedNamecanonicalize_name)LegacyVersion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_json)Protocolc                   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    x/var/www/html/FastMealFinder_FlaskServer-InitialRelease/venv/lib/python3.12/site-packages/pip/_internal/metadata/base.pynamezBaseEntryPoint.name9       !##    c                     t               r)   r*   r,   s    r.   valuezBaseEntryPoint.value=   r0   r1   c                     t               r)   r*   r,   s    r.   groupzBaseEntryPoint.groupA   r0   r1   N)__name__
__module____qualname__propertystrr/   r3   r5    r1   r.   r&   r&   8   sQ    $c $ $ $s $ $ $s $ $r1   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"   r:   pathlibPath)r<   r=   s     r.   _convert_installed_files_pathrD   F   sm    * E!H$tBx4'GOD9Dab	 E!H$ w||*T*E*++r1   c                   ,    e Zd ZU eed<   eed<   eed<   y)RequiresEntryrequirementextramarkerN)r6   r7   r8   r:   __annotations__r;   r1   r.   rF   rF   d   s    JKr1   rF   c            	          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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+jX                  jZ                  fd%Z. e/j`                  d&'      de+jX                  jZ                  fd(       Z1ede+jX                  jZ                  fd)       Z2ede3ee4f   fd*       Z5edee   fd+       Z6edefd,       Z7ede8fd-       Z9d<d.e:e   de(e;   fd/Z<de(e   fd0Z=d1edefd2Z>dee%e      fd3Z?dee%e      fd4Z@dee%e      fd5ZAde%eB   fd6ZCde(e   fd7ZDde(e   fd8ZEd9e+jX                  jZ                  dd:fd;ZFy:)=BaseDistribution	directoryr'   c                     t               )zLoad the distribution from a metadata directory.

        :param directory: Path to a metadata directory, e.g. ``.dist-info``.
        r*   )clsrM   s     r.   from_directoryzBaseDistribution.from_directoryk        "##r1   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*   )rO   rR   rS   rT   s       r.   from_metadata_file_contentsz,BaseDistribution.from_metadata_file_contentss   s      "##r1   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*   )rO   rW   r/   s      r.   
from_wheelzBaseDistribution.from_wheel        "##r1   c                 T    | j                    d| j                   d| j                   dS )N z ())raw_nameversionlocationr,   s    r.   __repr__zBaseDistribution.__repr__   s'    --$,,r$--BBr1   c                 8    | j                    d| j                   S )Nr]   )r_   r`   r,   s    r.   __str__zBaseDistribution.__str__   s    --$,,00r1   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.   ra   zBaseDistribution.location   r[   r1   c                     | j                   }|r&|j                         rt        |j                        S yt	        | j
                        }|r| j                  S y)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   r_   ra   )r-   rg   egg_link_paths      r.   editable_project_locationz*BaseDistribution.editable_project_location   sR     __
++-":>>22  8FM }}$r1   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        "##r1   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     "##r1   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)rp   rB   rC   is_filer-   rp   s     r.   installed_by_distutilsz'BaseDistribution.installed_by_distutils   s-     **||M*2244r1   c                 B    | j                   }|sy|j                  d      S )zWhether this distribution is installed as an egg.

        This usually indicates the distribution was installed by (older versions
        of) easy_install.
        Fz.egg)ra   endswithr-   ra   s     r.   installed_as_eggz!BaseDistribution.installed_as_egg   s$     ==  ((r1   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rp   rv   rB   rC   is_dirrs   s     r.   "installed_with_setuptools_egg_infoz3BaseDistribution.installed_with_setuptools_egg_info   s>     **%%k2||M*1133r1   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-inforz   rs   s     r.   installed_with_dist_infoz)BaseDistribution.installed_with_dist_info  s>     **%%l3||M*1133r1   c                     t               r)   r*   r,   s    r.   canonical_namezBaseDistribution.canonical_name  r0   r1   c                     t               r)   r*   r,   s    r.   r`   zBaseDistribution.version  r0   r1   c                 :    | j                   j                  dd      S )zConvert 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#..r1   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)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   )r-   contentes      r.   rg   zBaseDistribution.direct_url%  s    	nn%=>G	&&w// ! 		
   $
 	
 NN-(##	 	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?  sd    	!^^K8N #--/ 	$D::<L##	$  %67 		s   ? AAc                 $    | j                  d      S )N	REQUESTED)rr   r,   s    r.   	requestedzBaseDistribution.requestedK  s    ||K((r1   c                 ,    t        | j                        S r)   )boolrk   r,   s    r.   editablezBaseDistribution.editableO  s    D2233r1   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)rm   r   r,   s    r.   localzBaseDistribution.localS  s$     ""*//00r1   c                 x    | j                   t        y| j                   j                  t        t                    S NF)rm   r   
startswithr    r,   s    r.   in_usersitezBaseDistribution.in_usersite]  s2    ""*i.?&&11.2KLLr1   c                 x    | j                   t        y| j                   j                  t        t                    S r   )rm   r   r   r    r,   s    r.   in_site_packagesz!BaseDistribution.in_site_packagesc  s2    ""*m.C&&11.2OPPr1   pathc                     t               )z7Check whether an entry in the info directory is a file.r*   r-   r   s     r.   rr   zBaseDistribution.is_filei  r0   r1   c                     t               )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*   r,   s    r.   iter_distutils_script_namesz,BaseDistribution.iter_distutils_script_namesm  rQ   r1   c                     t               )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   zBaseDistribution.read_textu       "##r1   c                     t               r)   r*   r,   s    r.   iter_entry_pointsz"BaseDistribution.iter_entry_points~      !##r1   c                     t               r)   r*   r,   s    r.   _metadata_implzBaseDistribution._metadata_impl  r   r1   r"   )maxsizec                 H    | j                         }| j                  |       |S r)   )r   _add_egg_info_requires)r-   metadatas     r.   _metadata_cachedz!BaseDistribution._metadata_cached  s%     &&(##H-r1   c                 "    | 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   r,   s    r.   r   zBaseDistribution.metadata  s     $$&&r1   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==))r1   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4r1   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!    
 }}  )<)<==r1   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)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   r_   )r-   r3   specr   messages        r.   requires_pythonz BaseDistribution.requires_python  ss     !!"34=>!	"E
+D
 	   	"EGNN7DMM15>!	"s   ? 	A?,A:4A?:A?extrasc                     t               )zDependencies 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  rQ   r1   c                     t               )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 not particularly useful other than
        display purposes due to backward compatibility issues and the extra
        names being poorly normalized prior to PEP 685. If you want to perform
        logic operations on extras, use :func:`is_extra_provided` instead.
        r*   r,   s    r.   iter_provided_extrasz%BaseDistribution.iter_provided_extras  rn   r1   rH   c                     t               )zCheck whether an extra is provided by this distribution.

        This is needed mostly for compatibility issues with pkg_resources not
        following the extra normalization rules defined in PEP 685.
        r*   )r-   rH   s     r.   is_extra_providedz"BaseDistribution.is_extra_provided  rQ   r1   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   NrA   ).0rows     r.   	<genexpr>zFBaseDistribution._iter_declared_entries_from_record.<locals>.<genexpr>  s"     ScGLLQ()Ss   +-)r   r   csvreaderr   )r-   texts     r.   "_iter_declared_entries_from_recordz3BaseDistribution._iter_declared_entries_from_record  sG    	>>(+D TSZZ@Q5R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)   r;   )r   ps     r.   r   zFBaseDistribution._iter_declared_entries_from_legacy.<locals>.<genexpr>  s     AqqAs   F)keependsc              3      K   | ]7  }t        t        j                  |      j                  j                         9 y wr)   )rD   rB   rC   parts)r   r   info_rels     r.   r   zFBaseDistribution._iter_declared_entries_from_legacy.<locals>.<genexpr>  s2      
 *',,q/*?*?P
s   =A )
r   r   r   ra   rp   rB   rC   relative_tor   r   )r-   r   pathsrootr=   r   s        @r.   "_iter_declared_entries_from_legacyz3BaseDistribution._iter_declared_entries_from_legacy  s    	>>"78D BDOOUO;A}}!!<4<L	||D)55d;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	
r1   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[]:)rG   rH   rI   )r   r   r   r   r   rv   	partitionrF   )r-   r   rH   rI   r   r   s         r.   _iter_requires_txt_entriesz+BaseDistribution._iter_requires_txt_entries  s     	nn^4G &&( 	ND::<D4??3/s#c(:#'::d#3#=#=c#B q&DfMM	N ! 		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   rH   add)r-   known_extrasr<   rH   s       r.   _iter_egg_info_extrasz&BaseDistribution._iter_egg_info_extras$  sQ     t446 	E%ekk2E$U#K	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   rH   rI   rG   )r-   r<   rH   rI   s       r.   _iter_egg_info_dependenciesz,BaseDistribution._iter_egg_info_dependencies.  s      446 	(E%ekk2EU\\N*:5'C%eWA.**+3vh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.zRequires-DistzProvides-ExtraN)get_allr   r   )r-   r   deprH   s       r.   r   z'BaseDistribution._add_egg_info_requiresJ  si    0779 0,/)0 01335 3-2)*3 2r1   )r;   )Gr6   r7   r8   classmethodr:   rP   bytesrV   rZ   rb   rd   r9   r   ra   rk   rm   rp   r   rt   rx   r|   r~   r   r   DistributionVersionr`   r   r   rg   r   r   r   r   r   r   InfoPathrr   r
   r   r   r	   r&   r   emailr   Messager   	functools	lru_cacher   r   r   r   r   r   r_   r   r   r   r   r   r   r   r   r   r   rF   r   r   r   r   r;   r1   r.   rL   rL   j   s   $s $/A $ $ $ $ $ 	$
 
$ $" $w $c $6H $ $C# C1 1 $(3- $ $ 8C=  * 
$HSM 
$ 
$ $x} $ $ 
5 
5 
5 	)$ 	) 	) 4D 4 4" 4$ 4 4 $ $ $ $, $ $ /S / / HY/  2 	3 	 	 )4 ) ) 4$ 4 4 1t 1 1 MT M M
 Q$ Q Q
$H $ $$Xc] $$h $3 $$8N#; $$ 5 5 $ Y#%--"7"7  $ '%--// ' ' *tCH~ * * 5(3- 5 5 ># > >   $$
3 $+AV $$hsm $$s $t $THXc]4K T
HXc]4K 
*
x'> 
 NH],C N2x} (Xc] (83u}}/D/D 3 3r1   rL   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*   )rO   s    r.   defaultzBaseEnvironment.defaultW  r0   r1   r   c                     t               r)   r*   )rO   r   s     r.   
from_pathszBaseEnvironment.from_paths[  r0   r1   r/   rL   c                     t               )zGiven 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_distribution_  rQ   r1   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_distributionsg  r   r1   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   ra   )r-   distproject_name_valids      r.   iter_all_distributionsz&BaseEnvironment.iter_all_distributionsp  sp     ,,. 	D
 "$<##mm"
 &;''MM
 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     +177!+   c              3   :   K   | ]  }|j                   r|  y wr)   r   r  s     r.   r   z?BaseEnvironment.iter_installed_distributions.<locals>.<genexpr>  s     2qzz!2r  c              3   :   K   | ]  }|j                   s|  y wr)   r  r  s     r.   r   z?BaseEnvironment.iter_installed_distributions.<locals>.<genexpr>  s     .1::!.r  c              3   :   K   | ]  }|j                   s|  y wr)   )r   r  s     r.   r   z?BaseEnvironment.iter_installed_distributions.<locals>.<genexpr>  s     11==!1r  c              3   @   K   | ]  }|j                   vs|  y wr)   )r   )r   r  r  s     r.   r   z?BaseEnvironment.iter_installed_distributions.<locals>.<genexpr>  s     >a!1!1!=>s   )r  )r-   r  r  r  r  r  its     `    r.   iter_installed_distributionsz,BaseEnvironment.iter_installed_distributions  sR    0 ((*+R+B 2R2B.R.B1R1B>2>>r1   N)r'   r  )r6   r7   r8   __doc__r   r  r   r   r:   r  r  r
   r	  rL   r  r   r   r   r"  r;   r1   r.   r  r  T  s    @$ $ $xS	2 $7H $ $$S $X6H-I $$X.@%A $1A(B .  *"&$!?!? n!?  	!?
 !? !? 
"	#!?r1   r  c                   8    e Zd ZU eed<   dej                  fdZy)rX   ra   r'   c                     t               r)   r*   r,   s    r.   
as_zipfilezWheel.as_zipfile  r   r1   N)r6   r7   r8   r:   rJ   zipfileZipFiler&  r;   r1   r.   rX   rX     s    M$GOO $r1   rX   c                   <    e Zd ZdeddfdZdej                  fdZy)FilesystemWheelra   r'   Nc                     || _         y r)   )ra   rw   s     r.   __init__zFilesystemWheel.__init__  s	     r1   c                 D    t        j                  | j                  d      S NT)
allowZip64)r'  r(  ra   r,   s    r.   r&  zFilesystemWheel.as_zipfile  s    t}}>>r1   )r6   r7   r8   r:   r,  r'  r(  r&  r;   r1   r.   r*  r*    s%    ! ! !?GOO ?r1   r*  c                   F    e Zd Zdedee   ddfdZdej                  fdZ	y)MemoryWheelra   streamr'   Nc                      || _         || _        y r)   )ra   r2  )r-   ra   r2  s      r.   r,  zMemoryWheel.__init__  s     r1   c                 D    t        j                  | j                  d      S r.  )r'  r(  r2  r,   s    r.   r&  zMemoryWheel.as_zipfile  s    t{{t<<r1   )
r6   r7   r8   r:   r   r   r,  r'  r(  r&  r;   r1   r.   r1  r1    s0     bi D =GOO =r1   r1  )Gr   email.messager   r   r   loggingrB   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   r   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$   objectr   r:   PurePathr   	getLoggerr6   r   r&   rD   rF   rL   r  rX   r*  r1  r;   r1   r.   <module>rG     s)   
      	      ; K I @ 6 < 
 3 D = 0 HM723 g&&&'			8	$$X $,c?,
S/, 	,<J g3x g3TR? R?j$H $?e ?=% =r1   