a
    ˆÀàg`  ã                   @   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rðdd	lmZmZmZmZmZmZmZ dd
l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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)ÚAnyÚCallableÚDictÚListÚOptionalÚSetÚTuple)ÚInstallRequirementÚPackageDetailsÚversionÚrequiresc                  K   s”   | i krdddœ} i }d}t f i | ¤ŽD ]b}t|jƒ}zt|j| ¡ ƒ||< W q( ttfyˆ } zt 	d||¡ d}W Y d}~q(d}~0 0 q(||fS )z8Converts a list of distributions into a PackageSet.
    F© )Ú
local_onlyÚskipz%Error parsing requirements for %s: %sTN)
r   r   Úproject_namer   r   r   ÚOSErrorr   ÚloggerÚwarning)ÚkwargsÚpackage_setZproblemsÚdistÚnameÚer   r   úW/var/www/sistema_ama/venv/lib/python3.9/site-packages/pip/_internal/operations/check.pyÚ!create_package_set_from_installed"   s    

r    c                 C   sÔ   i }i }| D ]¾}t ƒ }t ƒ }|r*||ƒr*q| | jD ]l}t|jƒ}|| vrvd}	|jdurb|j ¡ }	|	r4| ||f¡ q4| | j}
|jj	|
dd�s4| ||
|f¡ q4|r¶t
|td�||< |rt
|td�||< q||fS )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.
    TN)Úprereleases)Úkey)Úsetr   r   r   ÚmarkerÚevaluateÚaddr   Ú	specifierÚcontainsÚsortedÚstr)r   Úshould_ignoreÚmissingÚconflictingÚpackage_nameZmissing_depsZconflicting_depsÚreqr   Zmissedr   r   r   r   Úcheck_package_set7   s0    



r0   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   | ˆ vS ©Nr   )r   ©Z	whitelistr   r   Ú<lambda>s   ó    z)check_install_conflicts.<locals>.<lambda>)r+   )r    Ú_simulate_installation_ofÚ_create_whitelistr0   )Ú
to_installr   Ú_Úwould_be_installedr   r2   r   Úcheck_install_conflictsc   s    


ÿþr:   c                 C   sX   t ƒ }| D ]H}t|ƒ}| ¡ }|dus*J ‚t|jƒ}t|j| ¡ ƒ||< | |¡ q
|S )zBComputes the version of packages after installing to_install.
    N)	r#   r   Úget_pkg_resources_distributionr   r"   r   r   r   r&   )r7   r   Ú	installedZinst_reqÚabstract_distr   r   r   r   r   r5   x   s    
r5   c                 C   sL   t | ƒ}|D ]:}||v rq|| jD ] }t|jƒ|v r$| |¡  qq$q|S r1   )r#   r   r   r   r&   )r9   r   Zpackages_affectedr.   r/   r   r   r   r6   Ž   s    
r6   )N))Ú__doc__ÚloggingÚcollectionsr   Úpip._vendor.packaging.utilsr   Zpip._vendor.pkg_resourcesr   Úpip._internal.distributionsr   Úpip._internal.utils.miscr   Úpip._internal.utils.typingr   Ú	getLoggerÚ__name__r   Útypingr   r	   r
   r   r   r   r   Úpip._internal.req.req_installr   r*   Z
PackageSetZMissingZConflictingZMissingDictZConflictingDictZCheckResultÚConflictDetailsr   r    r0   r:   r5   r6   r   r   r   r   Ú<module>   s0   
$
,