o
    h                     @  s  d Z ddlmZ ddl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mZ dd	lmZ dd
lmZmZ ddlmZmZ ddlmZ ddlmZ ddlmZ 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/d0ddZ0	d1d2ddZ1d3d!d"Z2d4d(d)Z3d5d+d,Z4d6d.d/Z5dS )7z&Validation of dependencies of packages    )annotationsN)	GeneratorIterable)suppress)Parser)reduce)Callable
NamedTuple)Requirement)Tag	parse_tag)NormalizedNamecanonicalize_name)Version))make_distribution_for_install_requirement)get_default_environment)BaseDistribution)InstallRequirementc                   @  s   e Zd ZU ded< ded< dS )PackageDetailsr   versionzlist[Requirement]dependenciesN)__name__
__module____qualname____annotations__ r   r   Q/var/www/html/venv/lib/python3.10/site-packages/pip/_internal/operations/check.pyr      s   
 r   returntuple[PackageSet, bool]c                  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 dependencies of %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)   
PackageSetshould_ignoreCallable[[str], bool] | NoneCheckResultc                 C  s   i }i }|   D ]b\}}t }t }|r||rq|jD ]9}t|j}	|	| vr@d}
|jdur6|jddi}
|
r?||	|f q| |	 j}|j	j
|ddsU||	||f q|r`t|td||< |rjt|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)itemssetr   r   r-   markerevaluateaddr   	specifiercontainssortedstr)r)   r1   missingconflictingpackage_namepackage_detailmissing_depsconflicting_depsreqr-   missedr   r   r   r   check_package_set=   s4   	



rI   
to_installlist[InstallRequirement]ConflictDetailsc                   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>y   s    z)check_install_conflicts.<locals>.<lambda>)r1   )r/   _simulate_installation_of_create_whitelistrI   )rJ   r)   _would_be_installedr   rN   r   check_install_conflictsj   s   


rU   packagesIterable[BaseDistribution]supported_tagsIterable[Tag]'Generator[BaseDistribution, None, None]c              
   c  sx    | D ]6}t t( |d}ttjttt 	|
dg t }||r*|V  W d    n1 s4w   Y  qd S )NWHEELr   )r   FileNotFoundError	read_textr   	frozensetunionmapr   r   parsestrget_all
isdisjoint)rV   rX   p
wheel_file
wheel_tagsr   r   r   check_unsupported~   s   


rg   set[NormalizedName]c                 C  sL   t  }| D ]}t|}| }|j}t|jt| ||< || q|S )z=Computes the version of packages after installing to_install.)	r9   r   get_metadata_distributionr"   r   r   r#   r$   r<   )rJ   r)   	installedinst_reqabstract_distr,   r-   r   r   r   rQ      s   rQ   rT   c                 C  sL   t | }|D ]}||v rq|| jD ]}t|j|v r"||  nqq|S rM   )r9   r   r   r-   r<   )rT   r)   packages_affectedrC   rG   r   r   r   rR      s   
rR   )r   r   rM   )r)   r0   r1   r2   r   r3   )rJ   rK   r   rL   )rV   rW   rX   rY   r   rZ   )rJ   rK   r)   r0   r   rh   )rT   rh   r)   r0   r   rh   )6__doc__
__future__r   loggingcollections.abcr   r   
contextlibr   email.parserr   	functoolsr   typingr   r	   "pip._vendor.packaging.requirementsr
   pip._vendor.packaging.tagsr   r   pip._vendor.packaging.utilsr   r   pip._vendor.packaging.versionr   pip._internal.distributionsr   pip._internal.metadatar   pip._internal.metadata.baser   pip._internal.req.req_installr   	getLoggerr   r'   r   dictr0   tupleMissingConflictingr#   MissingDictConflictingDictr3   rL   r/   rI   rU   rg   rQ   rR   r   r   r   r   <module>   s@    


-

