a
    |Ä#d  ã                   @   sx  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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!e	ee"f dœdd„Z#deeee$ge"f  e dœdd„Z%ee e!dœdd„Z&ee eee dœdd„Z'ee eee dœdd„Z(dS )z'Validation of dependencies of packages
é    N)ÚCallableÚDictÚListÚ
NamedTupleÚOptionalÚSetÚTuple)ÚRequirement)ÚNormalizedNameÚcanonicalize_name)Ú)make_distribution_for_install_requirement)Úget_default_environment)ÚDistributionVersion)ÚInstallRequirementc                   @   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   úU/var/www/html/gsl.tools/lib/python3.9/site-packages/pip/_internal/operations/check.pyr      s   
r   )Úreturnc                  C   sŒ   i } d}t ƒ }|jddd�D ]f}|j}z t| ¡ ƒ}t|j|ƒ| |< W q ttfy€ } zt	 
d||¡ d}W Y d}~qd}~0 0 q| |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_ignorer   c                 C   sÞ   i }i }|   ¡ D ]Ä\}}tƒ }tƒ }|r2||ƒr2q|jD ]r}t|jƒ}	|	| vr€d}
|jdurl|j ddi¡}
|
r8| |	|f¡ q8| |	 j}|j	j
|dd�s8| |	||f¡ q8|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ÚextraÚ )Úprereleases)Úkey)Ú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_set3   s0    	



rA   )Ú
to_installr   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(   ©Ú	whitelistr   r   Ú<lambda>o   ó    z)check_install_conflicts.<locals>.<lambda>)r+   )r*   Ú_simulate_installation_ofÚ_create_whitelistrA   )rB   r$   Ú_Úwould_be_installedr   rD   r   Úcheck_install_conflicts`   s    


ÿþrL   )rB   r$   r   c                 C   sL   t ƒ }| D ]<}t|ƒ}| ¡ }|j}t|jt| ¡ ƒƒ||< | |¡ q
|S )z=Computes the version of packages after installing to_install.)	r1   r   Úget_metadata_distributionr   r   r   r   r   r4   )rB   r$   Ú	installedÚinst_reqÚabstract_distr'   r(   r   r   r   rH   t   s    rH   )rK   r$   r   c                 C   sL   t | ƒ}|D ]:}||v rq|| jD ] }t|jƒ|v r$| |¡  qq$q|S rC   )r1   r   r   r(   r4   )rK   r$   Úpackages_affectedr;   r?   r   r   r   rI   ‡   s    
rI   )N))Ú__doc__ÚloggingÚtypingr   r   r   r   r   r   r   Ú"pip._vendor.packaging.requirementsr	   Zpip._vendor.packaging.utilsr
   r   Úpip._internal.distributionsr   Úpip._internal.metadatar   Zpip._internal.metadata.baser   Zpip._internal.req.req_installr   Ú	getLoggerr   r"   r   Ú
PackageSetÚMissingÚConflictingÚMissingDictÚConflictingDictÚCheckResultÚConflictDetailsÚboolr*   r8   rA   rL   rH   rI   r   r   r   r   Ú<module>   s<   $
 ÿþ-þþ