a
    ñ»j  ã                   @  s¨  d Z ddlmZ ddl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mZ dd	lmZ dd
lmZ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! 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/ddœdd„Z0d/ddddœdd„Z1dddœd d!„Z2d"d#d$d%œd&d'„Z3ddd(d)œd*d+„Z4d(dd(d,œd-d.„Z5dS )0z&Validation of dependencies of packagesé    )ÚannotationsN)Ú	GeneratorÚIterable)Úsuppress)ÚParser)Úreduce)ÚCallableÚ
NamedTuple)ÚRequirement)ÚTagÚ	parse_tag)ÚNormalizedNameÚcanonicalize_name)ÚVersion)Ú)make_distribution_for_install_requirement)Úget_default_environment)ÚBaseDistribution)ÚInstallRequirementc                   @  s   e Zd ZU ded< ded< dS )ÚPackageDetailsr   Úversionzlist[Requirement]ÚdependenciesN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© r   r   úDE:\soccer\ml_env\Lib\site-packages\pip/_internal/operations/check.pyr      s   
r   ztuple[PackageSet, bool])Ú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 dependencies of %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.   Ú
PackageSetzCallable[[str], bool] | NoneÚCheckResult)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(   r1   ÚmissingÚconflictingÚpackage_nameÚpackage_detailÚmissing_depsÚconflicting_depsÚreqr,   Úmissedr   r   r   r   Úcheck_package_set=   s0    	



rG   zlist[InstallRequirement]ÚConflictDetails)Ú
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>y   ó    z)check_install_conflicts.<locals>.<lambda>)r1   )r.   Ú_simulate_installation_ofÚ_create_whitelistrG   )rI   r(   Ú_Úwould_be_installedr   rK   r   Úcheck_install_conflictsj   s    


ÿþrS   zIterable[BaseDistribution]zIterable[Tag]z'Generator[BaseDistribution, None, None])ÚpackagesÚsupported_tagsr   c              
   c  sv   | D ]l}t tƒ�P | d¡}ttjtttƒ  	|¡ 
dg ¡ƒtƒ ƒ}| |¡rR|V  W d   ƒ q1 sf0    Y  qd S )NZWHEELr   )r   ÚFileNotFoundErrorÚ	read_textr   Ú	frozensetÚunionÚmapr   r   ÚparsestrÚget_allÚ
isdisjoint)rT   rU   ÚpÚ
wheel_fileZ
wheel_tagsr   r   r   Úcheck_unsupported~   s    

ý
r`   zset[NormalizedName])rI   r(   r   c                 C  sL   t ƒ }| D ]<}t|ƒ}| ¡ }|j}t|jt| ¡ ƒƒ||< | |¡ q
|S )z=Computes the version of packages after installing to_install.)	r7   r   Úget_metadata_distributionr!   r   r   r"   r#   r:   )rI   r(   Ú	installedÚinst_reqÚabstract_distr+   r,   r   r   r   rO   Ž   s    rO   )rR   r(   r   c                 C  sL   t | ƒ}|D ]:}||v rq|| jD ] }t|jƒ|v r$| |¡  qq$q|S rJ   )r7   r   r   r,   r:   )rR   r(   Úpackages_affectedrA   rE   r   r   r   rP   ¡   s    
rP   )N)6Ú__doc__Ú
__future__r   ÚloggingÚcollections.abcr   r   Ú
contextlibr   Úemail.parserr   Ú	functoolsr   Útypingr   r	   Ú"pip._vendor.packaging.requirementsr
   Zpip._vendor.packaging.tagsr   r   Ú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   Ú	getLoggerr   r&   r   Údictr/   ÚtupleÚMissingÚConflictingr"   ÚMissingDictÚConflictingDictr0   rH   r.   rG   rS   r`   rO   rP   r   r   r   r   Ú<module>   s>   
 ÿ-