<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
U
    .e                     @   s   d Z ddl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erdd	lmZ dd
lmZmZmZmZmZmZmZ eed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dddgZ"dd Z#dddZ$dd Z%dd Z&dd Z'dS )z'Validation of dependencies of packages
    N)
namedtuple)canonicalize_name)RequirementParseError))make_distribution_for_install_requirement)get_installed_distributions)MYPY_CHECK_RUNNING)InstallRequirement)AnyCallableDictOptionalSetTupleListPackageDetailsversionrequiresc                  K   s   | i krddd} i }d}t f | D ]\}t|j}zt|j| ||< W q$ tk
r~ } ztd|| d}W 5 d}~X Y q$X q$||fS )z8Converts a list of distributions into a PackageSet.
    F )Z
local_onlyskipz%Error parsing requirements for %s: %sTN)	r   r   project_namer   r   r   r   loggingZwarning)kwargspackage_setZproblemsdistnameer   r   B/usr/lib/python3.8/site-packages/pip/_internal/operations/check.py!create_package_set_from_installed(   s    

r   c                 C   s   |dkrdd }i }i }| D ]}t  }t  }||r6q| | jD ]l}t|j}|| krd}	|jdk	rn|j }	|	r@|||f q@| | j}
|jj	|
dds@|||
|f q@|rt
|td||< |rt
|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.
    Nc                 S   s   dS )NFr   r   r   r   r   should_ignoreE   s    z(check_package_set.<locals>.should_ignoreT)Zprereleases)key)setr   r   r   ZmarkerZevaluateaddr   Z	specifiercontainssortedstr)r   r   ZmissingZconflictingpackage_nameZmissing_depsZconflicting_depsreqr   Zmissedr   r   r   r   check_package_set=   s4    



r(   c                    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   |  kS Nr   r   Z	whitelistr   r   <lambda>|       z)check_install_conflicts.<locals>.<lambda>)r   )r   _simulate_installation_of_create_whitelistr(   )
to_installr   _would_be_installedr   r*   r   check_install_conflictsl   s    


 
r2   c                 C   sL   t  }| D ]<}t|}| }t|j}t|j| ||< || q
|S )zBComputes the version of packages after installing to_install.
    )	r!   r   Zget_pkg_resources_distributionr   r    r   r   r   r"   )r/   r   Z	installedZinst_reqZabstract_distr   r   r   r   r   r-      s    
r-   c                 C   sL   t | }|D ]:}||krq|| jD ] }t|j|kr$||  qq$q|S r)   )r!   r   r   r   r"   )r1   r   Zpackages_affectedr&   r'   r   r   r   r.      s    
r.   )N)(__doc__r   collectionsr   Zpip._vendor.packaging.utilsr   Zpip._vendor.pkg_resourcesr   Zpip._internal.distributionsr   Zpip._internal.utils.miscr   Zpip._internal.utils.typingr   Z	getLogger__name__ZloggerZpip._internal.req.req_installr   typingr	   r
   r   r   r   r   r   r%   Z
PackageSetZMissingZConflictingZMissingDictZConflictingDictZCheckResultr   r   r(   r2   r-   r.   r   r   r   r   <module>   s.   
$
/