U
    ƒIÀd–  ã                   @   s¬  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 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 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.e!ddœdd „Z/dS )"z'Validation of dependencies of packages
é    N)ÚCallableÚDictÚListÚ
NamedTupleÚOptionalÚSetÚTuple)ÚRequirement)ÚLegacySpecifier)ÚNormalizedNameÚcanonicalize_name)ÚLegacyVersion)Ú)make_distribution_for_install_requirement)Úget_default_environment)ÚDistributionVersion)ÚInstallRequirement)Ú
deprecatedc                   @   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   úW/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/pip/_internal/operations/check.pyr      s   
r   )Úreturnc                  C   sŠ   i } d}t ƒ }|jddd�D ]d}|j}z t| ¡ ƒ}t|j|ƒ| |< W q ttfk
r~ } zt	 
d||¡ d}W 5 d}~X Y qX 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æ   t | ƒ i }i }|  ¡ D ]Ä\}}tƒ }tƒ }|r:||ƒr:q|jD ]r}t|jƒ}	|	| krˆd}
|jdk	rt|j ddi¡}
|
r@| |	|f¡ q@| |	 j	}|j
j|dd�s@| |	||f¡ q@|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)Ú#warn_legacy_versions_and_specifiersÚ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_set6   s2    	



rE   )Ú
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   | ˆ kS ©Nr   )r+   ©Ú	whitelistr   r   Ú<lambda>t   ó    z)check_install_conflicts.<locals>.<lambda>)r.   )r-   Ú_simulate_installation_ofÚ_create_whitelistrE   )rF   r'   Ú_Úwould_be_installedr   rH   r   Úcheck_install_conflictse   s    


 
ÿþrP   )rF   r'   r   c                 C   sL   t ƒ }| D ]<}t|ƒ}| ¡ }|j}t|jt| ¡ ƒƒ||< | |¡ q
|S )z=Computes the version of packages after installing to_install.)	r5   r   Úget_metadata_distributionr    r   r   r!   r"   r8   )rF   r'   Ú	installedÚinst_reqÚabstract_distr*   r+   r   r   r   rL   y   s    rL   )rO   r'   r   c                 C   sL   t | ƒ}|D ]:}||krq|| jD ] }t|jƒ|kr$| |¡  qq$q|S rG   )r5   r   r   r+   r8   )rO   r'   Úpackages_affectedr?   rC   r   r   r   rM   Œ   s    
rM   )r'   r   c              	   C   s”   |   ¡ D ]†\}}t|jtƒrBt|› d|j› d�d|› d�ddd� |jD ]D}tdd	„ |jD ƒƒrHt|› d|j› d
|› d�d|› d�ddd� qHqd S )Nú z# has a non-standard version number.z!to upgrade to a newer version of z^ or contact the author to suggest that they release a version with a conforming version numberi/  z23.3)ÚreasonÚreplacementÚissueÚgone_inc                 s   s   | ]}t |tƒV  qd S rG   )Ú
isinstancer
   )Ú.0Úspecr   r   r   Ú	<genexpr>®   s     z6warn_legacy_versions_and_specifiers.<locals>.<genexpr>z) has a non-standard dependency specifier Ú.ze or contact the author to suggest that they release a version with a conforming dependency specifiers)r4   r[   r   r   r   r   Úanyr9   )r'   Úproject_nameÚpackage_detailsÚdepr   r   r   r3   �   s     
õ

õr3   )N)0Ú__doc__ÚloggingÚtypingr   r   r   r   r   r   r   Ú"pip._vendor.packaging.requirementsr	   Z pip._vendor.packaging.specifiersr
   Zpip._vendor.packaging.utilsr   r   Zpip._vendor.packaging.versionr   Úpip._internal.distributionsr   Úpip._internal.metadatar   Zpip._internal.metadata.baser   Zpip._internal.req.req_installr   Úpip._internal.utils.deprecationr   Ú	getLoggerr   r%   r   Ú
PackageSetÚMissingÚConflictingÚMissingDictÚConflictingDictÚCheckResultÚConflictDetailsÚboolr-   r<   rE   rP   rL   rM   r3   r   r   r   r   Ú<module>   sJ   $
 ÿ þ/ þ þ