3 (\@s dZddlZddlmZddlmZddlmZddlm Z ddl m Z ddl m Z ejeZe rdd lmZdd lmZmZmZmZmZmZmZeed fZeeefZeeeefZeeeefZeeeefZ eee fZ!ed d d gZ"ddZ#dddZ$ddZ%ddZ&ddZ'dS)z'Validation of dependencies of packages N) namedtuple)canonicalize_name)RequirementParseError)make_abstract_dist)get_installed_distributions)MYPY_CHECK_RUNNING)InstallRequirement)AnyCallableDictOptionalSetTupleListPackageDetailsversionrequirescKs|ikrdfd}i}d}xjtf|D]\}t|j}yt|j|j||<Wq&tk r}ztjd||d}WYdd}~Xq&Xq&W||fS)z8Converts a list of distributions into a PackageSet. F) local_onlyskipz%Error parsing requirements for %s: %sTN) rr project_namerrrrloggingwarning)kwargs package_setZproblemsdistnameerq/private/var/folders/pf/wv4htv3x0qs2c2mp0dnn0kchsvlck3/T/pip-build-k1a8l1r5/pip/pip/_internal/operations/check.py!create_package_set_from_installed"s  rc Cs|dkrdd}t}t}x|D]}t}t}||r.should_ignoreT) prereleases)key) dictsetrrrmarkerevaluateaddr specifiercontainssortedstr) rr missingZ conflicting package_nameZ missing_depsZconflicting_depsreqrZmissedrrrrcheck_package_set7s4     r/cs6t\}}t||}t|||t|fdddfS)zeFor checking if the dependency graph would be consistent after installing given requirements cs|kS)Nr)r) whitelistrrvsz)check_install_conflicts..)r )r_simulate_installation_of_create_whitelistr/) to_installr_would_be_installedr)r0rcheck_install_conflictsfs    r7cCsLt}x@|D]8}t|j}t|j}t|j|j||<|j|q W|S)zBComputes the version of packages after installing to_install. ) r$rrrr"rrrr')r4r installedZinst_reqrrrrrr2{s   r2cCsRt|}xD|D]<}||krqx,||jD]}t|j|kr(|j|Pq(WqW|S)N)r$rrrr')r6rZpackages_affectedr-r.rrrr3s   r3)N)(__doc__r collectionsrpip._vendor.packaging.utilsrZpip._vendor.pkg_resourcesrZ pip._internal.operations.preparerZpip._internal.utils.miscrZpip._internal.utils.typingr getLogger__name__loggerZpip._internal.req.req_installrZtypingr r r r r rrr+Z PackageSetZMissingZ ConflictingZ MissingDictZConflictingDictZ CheckResultrrr/r7r2r3rrrrs.        $    /