U jaH@s@dZddlZddlmZmZmZmZmZmZm Z m Z ddl m Z ddl mZddlmZddlmZddlmZdd lmZerdd l mZeeZGd d d eZed efZe d e fZe d ee fZed eefZed eefZ e ee fZ!e ee!fZ"e ee#fdddZ$dddZ%ddZ&ddZ'ddZ(dS)z'Validation of dependencies of packages N) TYPE_CHECKINGCallableDictList NamedTupleOptionalSetTuple) Requirement)canonicalize_name))make_distribution_for_install_requirement)get_default_environment)DistributionVersion)InstallRequirement)NormalizedNamec@s"eZdZUeed<eeed<dS)PackageDetailsversion dependenciesN)__name__ __module__ __qualname__r__annotations__rr rrv/private/var/folders/k6/_7fsz4ts3b78x3b3xwrxjh_c8s8xv7/T/pip-unpacked-wheel-bug3gbve/pip/_internal/operations/check.pyrs rr)returnc Csi}d}t}|jdddD]d}|j}z t|}t|j|||<Wqttfk r~}zt d||d}W5d}~XYqXq||fS)z3Converts a list of distributions into a PackageSet.Fr) local_onlyskipz%Error parsing requirements for %s: %sTN) r Ziter_installed_distributionscanonical_namelistZiter_dependenciesrrOSError ValueErrorloggerwarning) package_setproblemsenvdistnamererrr!create_package_set_from_installed%s r)c Csi}i}|D]\}}t}t}|r2||r2q|jD]l}t|j} | |krzd} |jdk rf|j} | r8|| |fq8|| j} |j j | dds8|| | |fq8|rt |t d||<|rt |t d||<q||fS)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) prereleases)key) itemssetrr r'markerevaluateaddr specifiercontainssortedstr) r# should_ignoremissing conflicting package_nameZpackage_detail missing_depsconflicting_depsreqr'missedrrrrcheck_package_set6s0      r=cs6t\}}t||}t|||t|fdddfS)zeFor checking if the dependency graph would be consistent after installing given requirements cs|kSNr)r' whitelistrrrz)check_install_conflicts..)r5)r)_simulate_installation_of_create_whitelistr=) to_installr#_would_be_installedrr?rcheck_install_conflictsbs    rHcCsXt}|D]H}t|}|}|dk s*tt|j}t|j|||<| |q |S)zBComputes the version of packages after installing to_install. N) r-r get_pkg_resources_distributionAssertionErrorr project_namerparsed_versionrequiresr0)rEr# installedinst_req abstract_distr&r'rrrrCws   rCcCsLt|}|D]:}||krq ||jD] }t|j|kr$||q q$q |Sr>)r-rr r'r0)rGr#packages_affectedr8r;rrrrDs rD)N))__doc__loggingtypingrrrrrrrr Z"pip._vendor.packaging.requirementsr pip._vendor.packaging.utilsr pip._internal.distributionsr Zpip._internal.metadatar Zpip._internal.metadata.baserZpip._internal.req.req_installrr getLoggerrr!rZ PackageSetZMissingZ ConflictingZ MissingDictZConflictingDictZ CheckResultZConflictDetailsboolr)r=rHrCrDrrrrs0(             ,