o
    [h                  	   @   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	m
Z
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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ee)e0f fddZ1	d$de)dee	e2ge0f  de.fddZ3dee$ de/fddZ4dee" dee dee"ddf fddZ5dee$ de)dee fdd Z6d!ee de)dee fd"d#Z7dS )%z&Validation of dependencies of packages    N)suppress)Parser)reduce)
CallableDict	FrozenSet	GeneratorIterableList
NamedTupleOptionalSetTuple)Requirement)Tag	parse_tag)NormalizedNamecanonicalize_name)Version))make_distribution_for_install_requirement)get_default_environment)BaseDistribution)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    /home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/venv/lib/python3.10/site-packages/pip/_internal/operations/check.pyr   !   s   
 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 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_installed1   s   r3   r-   should_ignorec                 C   s   i }i }|   D ]b\}}t }t }|r||rq|jD ]9}t|j}	|	| vr@d}
|jdur6|jddi}
|
r?||	|f q| |	 j}|j	j
|ddsU||	||f q|r`t|td||< |rjt|td||< q||fS )zCheck 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   r1   markerevaluateaddr   	specifiercontainssortedstr)r-   r4   missingconflictingpackage_namepackage_detailmissing_depsconflicting_depsreqr1   missedr   r    r    r!   check_package_setB   s4   	



rJ   
to_installc                    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    )r1   	whitelistr    r!   <lambda>~   s    z)check_install_conflicts.<locals>.<lambda>)r4   )r3   _simulate_installation_of_create_whitelistrJ   )rK   r-   _would_be_installedr    rM   r!   check_install_conflictso   s   


rT   packagessupported_tagsc              
   c   sx    | D ]6}t t( |d}ttjttt 	|
dg t }||r*|V  W d    n1 s4w   Y  qd S )NWHEELr   )r   FileNotFoundError	read_textr   	frozensetunionmapr   r   parsestrget_all
isdisjoint)rU   rV   p
wheel_fileZ
wheel_tagsr    r    r!   check_unsupported   s   


rb   c                 C   sL   t  }| D ]}t|}| }|j}t|jt| ||< || q|S )z=Computes the version of packages after installing to_install.)	r:   r   get_metadata_distributionr&   r   r   r'   r(   r=   )rK   r-   	installedinst_reqabstract_distr0   r1   r    r    r!   rP      s   rP   rS   c                 C   sL   t | }|D ]}||v rq|| jD ]}t|j|v r"||  nqq|S rL   )r:   r   r   r1   r=   )rS   r-   packages_affectedrD   rH   r    r    r!   rQ      s   
rQ   rL   )8__doc__logging
contextlibr   email.parserr   	functoolsr   typingr   r   r   r   r	   r
   r   r   r   r   "pip._vendor.packaging.requirementsr   Zpip._vendor.packaging.tagsr   r   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   	getLoggerr   r+   r   
PackageSetMissingConflictingMissingDictConflictingDictCheckResultConflictDetailsboolr3   rA   rJ   rT   rb   rP   rQ   r    r    r    r!   <module>   sl    0

-

