o
    |ŸŽiH  ã                   @   s@  d Z ddlZddlmZ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 ddlmZ ddlmZ dd	lmZ erFdd
lmZ e e¡ZG dd„ deƒZedef Ze
def Ze
deef Zedee f Zedee f Z e
ee f Z!e
ee!f Z"de
ee#f f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)ÚTYPE_CHECKINGÚCallableÚDictÚListÚ
NamedTupleÚOptionalÚSetÚTuple)ÚRequirement)Úcanonicalize_name)Ú)make_distribution_for_install_requirement)Úget_default_environment)ÚDistributionVersion)ÚInstallRequirement)ÚNormalizedNamec                   @   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   úhC:\Users\psant\Downloads\Anu Raj Backend\school\venv\Lib\site-packages\pip/_internal/operations/check.pyr      s   
 r   r   Úreturnc                  C   sŠ   i } d}t ƒ }|jddd�D ]2}|j}zt| ¡ ƒ}t|j|ƒ| |< W q ttfy@ } zt	 
d||¡ d}W Y d}~qd}~ww | |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+   c                 C   sØ   i }i }|   ¡ D ]_\}}tƒ }tƒ }|r||ƒrq|jD ]6}t|jƒ}	|	| vr=d}
|jdur3|j ¡ }
|
r<| |	|f¡ q| |	 j}|j	j
|dd�sR| |	||f¡ q|r]t|td�||< |rgt|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)ÚitemsÚsetr   r   r)   ÚmarkerÚevaluateÚaddr   Ú	specifierÚcontainsÚsortedÚstr)r%   Úshould_ignoreÚmissingÚconflictingÚpackage_nameÚpackage_detailÚmissing_depsÚconflicting_depsÚreqr)   Úmissedr   r   r   r   Úcheck_package_set6   s4   




€€r@   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>r   s    z)check_install_conflicts.<locals>.<lambda>)r7   N)r+   Ú_simulate_installation_ofÚ_create_whitelistr@   )Ú
to_installr%   Ú_Úwould_be_installedr   rB   r   Úcheck_install_conflictsb   s   


ÿþrJ   c                 C   sX   t ƒ }| D ]$}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   Úproject_namer   Úparsed_versionÚrequiresr2   )rG   r%   Ú	installedÚinst_reqÚabstract_distr(   r)   r   r   r   rE   w   s   
rE   c                 C   sL   t | ƒ}|D ]}||v rq|| jD ]}t|jƒ|v r"| |¡  qqq|S rA   )r/   r   r   r)   r2   )rI   r%   Úpackages_affectedr:   r>   r   r   r   rF   Œ   s   
þÿrF   rA   ))Ú__doc__ÚloggingÚtypingr   r   r   r   r   r   r   r	   Z"pip._vendor.packaging.requirementsr
   Úpip._vendor.packaging.utilsr   Úpip._internal.distributionsr   Úpip._internal.metadatar   Zpip._internal.metadata.baser   Zpip._internal.req.req_installr   r   Ú	getLoggerr   r#   r   Ú
PackageSetÚMissingÚConflictingÚMissingDictÚConflictingDictÚCheckResultÚConflictDetailsÚboolr+   r@   rJ   rE   rF   r   r   r   r   Ú<module>   s2    (

,