U ��.e��@s dZddlZddlmZddlmZddlmZddlm Z ddl m Z ddl m Z e�e�Ze r�dd lmZdd lmZmZmZmZmZmZmZeed fZeeefZeeeefZeeeefZeeeefZ eee fZ!ed d d g�Z"dd�Z#ddd�Z$dd�Z%dd�Z&dd�Z'dS)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 Ks�|ikrddd�}i}d}tf|�D]\}t|j�}zt|j|���||<Wq$tk r~}zt�d||�d}W5d}~XYq$Xq$||fS)z8Converts a list of distributions into a PackageSet. F�)Z local_only�skipz%Error parsing requirements for %s: %sTN) rr� project_namerrrr�loggingZwarning)�kwargs� package_setZproblems�dist�name�err�B/usr/lib/python3.8/site-packages/pip/_internal/operations/check.py�!create_package_set_from_installed(s  rc Cs�|dkrdd�}i}i}|D]�}t�}t�}||�r6q||jD]l}t|j�}||kr�d} |jdk rn|j��} | r@|�||f�q@||j} |jj | dd�s@|�|| |f�q@|r�t |t d�||<|rt |t d�||<q||fS)z�Check 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. NcSsdS)NFr�rrrr� should_ignoreEsz(check_package_set..should_ignoreT)Z prereleases)�key) �setrrrZmarkerZevaluate�addrZ specifier�contains�sorted�str) rrZmissingZ conflicting� package_nameZ missing_depsZconflicting_deps�reqrZmissedrrrr�check_package_set=s4    r(cs6t�\}}t||�}t||��|t|�fdd�d�fS)zeFor checking if the dependency graph would be consistent after installing given requirements cs|�kS�Nrr�Z whitelistrr�|�z)check_install_conflicts..)r)r�_simulate_installation_of�_create_whitelistr()� to_installr�_�would_be_installedrr*r�check_install_conflictsls    ��r2cCsLt�}|D]<}t|�}|��}t|j�}t|j|���||<|�|�q |S)zBComputes the version of packages after installing to_install. ) r!rZget_pkg_resources_distributionrr rrrr")r/rZ installedZinst_reqZ abstract_distrrrrrr-�s  r-cCsLt|�}|D]:}||krq ||jD] }t|j�|kr$|�|�q q$q |Sr))r!rrrr")r1rZpackages_affectedr&r'rrrr.�s r.)N)(�__doc__r� collectionsrZpip._vendor.packaging.utilsrZpip._vendor.pkg_resourcesrZpip._internal.distributionsrZpip._internal.utils.miscrZpip._internal.utils.typingrZ getLogger�__name__ZloggerZpip._internal.req.req_installr�typingr r r r r rrr%Z PackageSetZMissingZ ConflictingZ MissingDictZConflictingDictZ CheckResultrrr(r2r-r.rrrr�s.        $    /