o
    5e                     @   s  d Z ddlZddlmZmZmZmZmZmZm	Z	 ddl
mZ ddlmZ ddlmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ eeZG dd deZ eee f Z!e	eef Z"e	eeef Z#eeee" f Z$eeee# f Z%e	e$e%f Z&e	e!e&f Z'de	e!e(f fddZ)	d de!deee*ge(f  de&fddZ+dee de'fddZ,dee de!dee fddZ-dee de!dee fddZ.de!ddfddZ/dS )!z'Validation of dependencies of packages
    N)CallableDictList
NamedTupleOptionalSetTuple)Requirement)LegacySpecifier)NormalizedNamecanonicalize_name)LegacyVersion))make_distribution_for_install_requirement)get_default_environment)DistributionVersion)InstallRequirement)
deprecatedc                   @   s"   e Zd ZU eed< ee ed< dS )PackageDetailsversiondependenciesN)__name__
__module____qualname__r   __annotations__r   r	    r   r   Q/var/www/html/venv/lib/python3.10/site-packages/pip/_internal/operations/check.pyr      s   
 r   returnc                  C   s   i } d}t  }|jdddD ]2}|j}zt| }t|j|| |< W q ttfy@ } zt	
d|| d}W Y d}~qd}~ww | |fS )z3Converts a list of distributions into a PackageSet.Fr   )
local_onlyskipz%Error parsing requirements for %s: %sTN)r   iter_installed_distributionscanonical_namelistiter_dependenciesr   r   OSError
ValueErrorloggerwarning)package_setproblemsenvdistnamer   er   r   r   !create_package_set_from_installed%   s   r-   r'   should_ignorec                 C   s   t |  i }i }|  D ]b\}}t }t }|r||rq|jD ]9}t|j}	|	| vrDd}
|jdur:|jddi}
|
rC||	|f q | |	 j	}|j
j|ddsY||	||f q |rdt|td||< |rnt|td||< q||fS )zCheck if a package set is consistent

    If should_ignore is passed, it should be a callable that takes a
    package name and returns a boolean.
    TNextra )prereleases)key)#warn_legacy_versions_and_specifiersitemssetr   r   r+   markerevaluateaddr   	specifiercontainssortedstr)r'   r.   missingconflictingpackage_namepackage_detailmissing_depsconflicting_depsreqr+   missedr   r   r   r   check_package_set6   s6   	



rE   
to_installc                    s6   t  \}}t| |}t|| |t| fdddfS )zeFor checking if the dependency graph would be consistent after     installing given requirements
    c                    s   |  vS Nr   )r+   	whitelistr   r   <lambda>t   s    z)check_install_conflicts.<locals>.<lambda>)r.   )r-   _simulate_installation_of_create_whitelistrE   )rF   r'   _would_be_installedr   rH   r   check_install_conflictse   s   


rO   c                 C   sL   t  }| D ]}t|}| }|j}t|jt| ||< || q|S )z=Computes the version of packages after installing to_install.)	r5   r   get_metadata_distributionr    r   r   r!   r"   r8   )rF   r'   	installedinst_reqabstract_distr*   r+   r   r   r   rK   y   s   rK   rN   c                 C   sL   t | }|D ]}||v rq|| jD ]}t|j|v r"||  nqq|S rG   )r5   r   r   r+   r8   )rN   r'   packages_affectedr?   rC   r   r   r   rL      s   
rL   c              	   C   s   |   D ]C\}}t|jtr!t| d|j dd| dddd |jD ]"}tdd	 |jD rFt| d|j d
| dd| dddd q$qd S )N z# has a non-standard version number.z!to upgrade to a newer version of z^ or contact the author to suggest that they release a version with a conforming version numberi/  z24.0)reasonreplacementissuegone_inc                 s   s    | ]}t |tV  qd S rG   )
isinstancer
   ).0specr   r   r   	<genexpr>   s    z6warn_legacy_versions_and_specifiers.<locals>.<genexpr>z) has a non-standard dependency specifier .ze or contact the author to suggest that they release a version with a conforming dependency specifiers)r4   rZ   r   r   r   r   anyr9   )r'   project_namepackage_detailsdepr   r   r   r3      s*   


r3   rG   )0__doc__loggingtypingr   r   r   r   r   r   r   "pip._vendor.packaging.requirementsr	    pip._vendor.packaging.specifiersr
   pip._vendor.packaging.utilsr   r   pip._vendor.packaging.versionr   pip._internal.distributionsr   pip._internal.metadatar   pip._internal.metadata.baser   pip._internal.req.req_installr   pip._internal.utils.deprecationr   	getLoggerr   r%   r   
PackageSetMissingConflictingMissingDictConflictingDictCheckResultConflictDetailsboolr-   r<   rE   rO   rK   rL   r3   r   r   r   r   <module>   s\    $

/

