# Pip Coverage Analysis Report **Branch:** `codeflash/optimize` **Date:** 2026-04-08 **Test suite:** `tests/unit/` (1690 passed, 39 skipped, 4 xfailed) **Tool:** coverage.py with `--source=src/pip` --- ## 1. Summary Statistics | Metric | Value | |--------|-------| | Total files analyzed | 388 | | Total statements | 42,496 | | Covered lines | 20,725 | | Uncovered lines | 21,771 | | **Overall coverage** | **48.8%** | ### Breakdown by area | Area | Statements | Covered | Missing | Coverage | |------|-----------|---------|---------|----------| | Vendored (`_vendor/`) | 27,551 | 10,462 | 17,089 | 38.0% | | Internal (`_internal/`) | 14,902 | 10,260 | 4,642 | 68.8% | | Other (top-level) | 43 | 3 | 40 | 7.0% | Over 78% of uncovered code is in vendored dependencies. --- ## 2. Completely Unused Files (0% Coverage) ### Vendor (51 files, 5,411 lines total) | Lines | Package | File | |------:|---------|------| | 586 | msgpack | `src/pip/_vendor/msgpack/fallback.py` | | 488 | tomli | `src/pip/_vendor/tomli/_parser.py` | | 421 | urllib3 | `src/pip/_vendor/urllib3/contrib/securetransport.py` | | 419 | packaging | `src/pip/_vendor/packaging/metadata.py` | | 346 | distro | `src/pip/_vendor/distro/distro.py` | | 276 | urllib3 | `src/pip/_vendor/urllib3/contrib/_securetransport/bindings.py` | | 261 | urllib3 | `src/pip/_vendor/urllib3/contrib/pyopenssl.py` | | 212 | truststore | `src/pip/_vendor/truststore/_windows.py` | | 200 | pyproject_hooks | `src/pip/_vendor/pyproject_hooks/_in_process/_in_process.py` | | 172 | idna | `src/pip/_vendor/idna/uts46data.py` | | 159 | urllib3 | `src/pip/_vendor/urllib3/contrib/_securetransport/low_level.py` | | 147 | platformdirs | `src/pip/_vendor/platformdirs/windows.py` | | 145 | platformdirs | `src/pip/_vendor/platformdirs/android.py` | | 141 | platformdirs | `src/pip/_vendor/platformdirs/unix.py` | | 137 | pygments | `src/pip/_vendor/pygments/sphinxext.py` | | 109 | urllib3 | `src/pip/_vendor/urllib3/contrib/appengine.py` | | 106 | pygments | `src/pip/_vendor/pygments/lexers/python.py` | | 90 | urllib3 | `src/pip/_vendor/urllib3/packages/backports/weakref_finalize.py` | | 84 | pygments | `src/pip/_vendor/pygments/formatters/__init__.py` | | 81 | idna | `src/pip/_vendor/idna/codec.py` | | 72 | msgpack | `src/pip/_vendor/msgpack/ext.py` | | 71 | cachecontrol | `src/pip/_vendor/cachecontrol/heuristics.py` | | 62 | urllib3 | `src/pip/_vendor/urllib3/contrib/ntlmpool.py` | | 59 | packaging | `src/pip/_vendor/packaging/licenses/__init__.py` | | 57 | requests | `src/pip/_vendor/requests/help.py` | | 40 | pygments | `src/pip/_vendor/pygments/scanner.py` | | 40 | pygments | `src/pip/_vendor/pygments/unistring.py` | | 38 | dependency_groups | `src/pip/_vendor/dependency_groups/_pip_wrapper.py` | | 38 | pygments | `src/pip/_vendor/pygments/console.py` | | 35 | cachecontrol | `src/pip/_vendor/cachecontrol/_cmd.py` | | 35 | urllib3 | `src/pip/_vendor/urllib3/packages/backports/makefile.py` | | 34 | dependency_groups | `src/pip/_vendor/dependency_groups/_lint_dependency_groups.py` | | 34 | tomli | `src/pip/_vendor/tomli/_re.py` | | 30 | dependency_groups | `src/pip/_vendor/dependency_groups/__main__.py` | | 30 | pygments | `src/pip/_vendor/pygments/formatter.py` | | 26 | truststore | `src/pip/_vendor/truststore/_openssl.py` | | 25 | platformdirs | `src/pip/_vendor/platformdirs/__main__.py` | | 23 | msgpack | `src/pip/_vendor/msgpack/__init__.py` | | 17 | msgpack | `src/pip/_vendor/msgpack/exceptions.py` | | 11 | packaging | `src/pip/_vendor/packaging/licenses/_spdx.py` | | 8 | certifi | `src/pip/_vendor/certifi/__main__.py` | | 8 | idna | `src/pip/_vendor/idna/compat.py` | | 8 | rich | `src/pip/_vendor/rich/pager.py` | | 6 | dependency_groups | `src/pip/_vendor/dependency_groups/_toml_compat.py` | | 6 | pygments | `src/pip/_vendor/pygments/__main__.py` | | 4 | rich | `src/pip/_vendor/rich/_export_format.py` | | 4 | tomli | `src/pip/_vendor/tomli/_types.py` | | 3 | distro | `src/pip/_vendor/distro/__init__.py` | | 3 | distro | `src/pip/_vendor/distro/__main__.py` | | 3 | tomli | `src/pip/_vendor/tomli/__init__.py` | | 1 | pygments | `src/pip/_vendor/pygments/formatters/_mapping.py` | ### Internal (2 files, 79 lines total) | Lines | Module | File | |------:|--------|------| | 75 | locations | `src/pip/_internal/locations/_distutils.py` | | 4 | (root) | `src/pip/_internal/main.py` | ### Other (2 files, 38 lines total) | Lines | File | |------:|------| | 21 | `src/pip/__pip-runner__.py` | | 17 | `src/pip/__main__.py` | --- ## 3. Nearly Dead Files (<10% coverage) No files fall in the 1-9% range. All partially-covered files have at least 10% coverage. --- ## 4. Top 30 Files by Uncovered Line Count These files contain the most dead code by absolute count. | Missing | Total | Cov% | Area | File | |--------:|------:|-----:|------|------| | 1,022 | 1,272 | 19.7% | vendor | `src/pip/_vendor/distlib/util.py` | | 888 | 1,561 | 43.1% | vendor | `src/pip/_vendor/pkg_resources/__init__.py` | | 586 | 586 | 0.0% | vendor | `src/pip/_vendor/msgpack/fallback.py` | | 488 | 488 | 0.0% | vendor | `src/pip/_vendor/tomli/_parser.py` | | 480 | 996 | 51.8% | vendor | `src/pip/_vendor/rich/console.py` | | 421 | 421 | 0.0% | vendor | `src/pip/_vendor/urllib3/contrib/securetransport.py` | | 419 | 419 | 0.0% | vendor | `src/pip/_vendor/packaging/metadata.py` | | 381 | 466 | 18.2% | vendor | `src/pip/_vendor/pygments/lexer.py` | | 346 | 346 | 0.0% | vendor | `src/pip/_vendor/distro/distro.py` | | 315 | 396 | 20.5% | vendor | `src/pip/_vendor/rich/pretty.py` | | 310 | 481 | 35.6% | vendor | `src/pip/_vendor/requests/utils.py` | | 310 | 622 | 50.2% | vendor | `src/pip/_vendor/rich/progress.py` | | 276 | 276 | 0.0% | vendor | `src/pip/_vendor/urllib3/contrib/_securetransport/bindings.py` | | 271 | 632 | 57.1% | vendor | `src/pip/_vendor/packaging/specifiers.py` | | 261 | 344 | 24.1% | vendor | `src/pip/_vendor/rich/syntax.py` | | 261 | 261 | 0.0% | vendor | `src/pip/_vendor/urllib3/contrib/pyopenssl.py` | | 257 | 292 | 12.0% | vendor | `src/pip/_vendor/idna/core.py` | | 234 | 606 | 61.4% | vendor | `src/pip/_vendor/rich/text.py` | | 232 | 503 | 53.9% | vendor | `src/pip/_vendor/urllib3/packages/six.py` | | 226 | 424 | 46.7% | vendor | `src/pip/_vendor/urllib3/response.py` | | 225 | 424 | 46.9% | vendor | `src/pip/_vendor/rich/style.py` | | 218 | 290 | 24.8% | vendor | `src/pip/_vendor/rich/traceback.py` | | 216 | 397 | 45.6% | internal | `src/pip/_internal/resolution/resolvelib/factory.py` | | 212 | 212 | 0.0% | vendor | `src/pip/_vendor/truststore/_windows.py` | | 200 | 200 | 0.0% | vendor | `src/pip/_vendor/pyproject_hooks/_in_process/_in_process.py` | | 197 | 455 | 56.7% | vendor | `src/pip/_vendor/requests/models.py` | | 190 | 235 | 19.1% | vendor | `src/pip/_vendor/cachecontrol/controller.py` | | 173 | 764 | 77.4% | internal | `src/pip/_internal/index/package_finder.py` | | 172 | 172 | 0.0% | vendor | `src/pip/_vendor/idna/uts46data.py` | | 171 | 288 | 40.6% | internal | `src/pip/_internal/commands/install.py` | --- ## 5. Vendored Package Breakdown Sorted by uncovered (dead) lines, most dead code first. | Package | Files | Total | Covered | Missing | Coverage | |---------|------:|------:|--------:|--------:|---------:| | rich | 62 | 6,796 | 3,156 | 3,640 | 46.4% | | urllib3 | 39 | 4,883 | 1,858 | 3,025 | 38.1% | | pygments | 23 | 1,782 | 325 | 1,457 | 18.2% | | packaging | 17 | 3,065 | 1,654 | 1,411 | 54.0% | | distlib | 5 | 1,715 | 477 | 1,238 | 27.8% | | requests | 18 | 2,176 | 1,136 | 1,040 | 52.2% | | pkg_resources | 1 | 1,561 | 673 | 888 | 43.1% | | **msgpack** | **4** | **698** | **0** | **698** | **0.0%** | | platformdirs | 8 | 787 | 233 | 554 | 29.6% | | idna | 8 | 592 | 50 | 542 | 8.4% | | **tomli** | **4** | **529** | **0** | **529** | **0.0%** | | cachecontrol | 12 | 678 | 175 | 503 | 25.8% | | truststore | 6 | 715 | 233 | 482 | 32.6% | | **distro** | **3** | **352** | **0** | **352** | **0.0%** | | pyproject_hooks | 4 | 323 | 80 | 243 | 24.8% | | resolvelib | 9 | 457 | 285 | 172 | 62.4% | | dependency_groups | 6 | 201 | 75 | 126 | 37.3% | | tomli_w | 2 | 130 | 27 | 103 | 20.8% | | certifi | 3 | 38 | 17 | 21 | 44.7% | **Bold** = Entirely unused (0% coverage across all files in the package). **Totals:** 27,551 vendor lines, 10,462 covered (38.0%), 17,089 uncovered. --- ## 6. Dead Code Hotspots in pip Internals ### Internal module breakdown | Module | Files | Total | Covered | Missing | Coverage | |--------|------:|------:|--------:|--------:|---------:| | commands | 19 | 1,601 | 648 | 953 | 40.5% | | resolution | 13 | 1,579 | 927 | 652 | 58.7% | | cli | 13 | 1,268 | 828 | 440 | 65.3% | | req | 8 | 1,384 | 1,015 | 369 | 73.3% | | operations | 12 | 1,036 | 677 | 359 | 65.3% | | utils | 28 | 1,729 | 1,409 | 320 | 81.5% | | (root) | 9 | 1,194 | 887 | 307 | 74.3% | | metadata | 8 | 958 | 672 | 286 | 70.1% | | vcs | 6 | 829 | 563 | 266 | 67.9% | | locations | 4 | 371 | 123 | 248 | 33.2% | | index | 4 | 1,113 | 904 | 209 | 81.2% | | network | 8 | 920 | 785 | 135 | 85.3% | | models | 13 | 789 | 723 | 66 | 91.6% | | distributions | 5 | 131 | 99 | 32 | 75.6% | ### Large contiguous uncovered blocks in pip internals (>= 10 lines) These are likely entire unused functions, methods, or code branches. | Size | Lines | File | |-----:|-------|------| | 16 | 212-227 | `src/pip/_internal/commands/show.py` | | 16 | 1175-1190 | `src/pip/_internal/index/package_finder.py` | | 16 | 475-490 | `src/pip/_internal/metadata/base.py` | | 13 | 75-87 | `src/pip/_internal/locations/_sysconfig.py` | | 13 | 423-435 | `src/pip/_internal/models/link.py` | | 13 | 24-36 | `src/pip/_internal/utils/pylock.py` | | 12 | 103-114 | `src/pip/_internal/resolution/resolvelib/found_candidates.py` | | 12 | 142-153 | `src/pip/_internal/vcs/subversion.py` | | 11 | 284-294 | `src/pip/_internal/commands/list.py` | | 11 | 388-398 | `src/pip/_internal/commands/list.py` | | 11 | 93-103 | `src/pip/_internal/operations/install/wheel.py` | | 10 | 533-542 | `src/pip/_internal/commands/install.py` | | 10 | 632-641 | `src/pip/_internal/commands/install.py` | | 10 | 621-630 | `src/pip/_internal/req/req_uninstall.py` | | 10 | 69-78 | `src/pip/_internal/resolution/resolvelib/found_candidates.py` | | 10 | 97-106 | `src/pip/_internal/utils/filesystem.py` | | 10 | 104-113 | `src/pip/_internal/wheel_builder.py` | Total: 17 blocks, 204 lines of contiguous dead code in internals. **Note:** The `commands` module has 953 uncovered lines (40.5% coverage). This is expected because unit tests do not exercise most CLI command handlers -- those are covered by functional tests (which were not included in this analysis). The unit tests primarily exercise library/utility code. --- ## 7. Never-Imported Modules During Typical Usage Running `pip install --dry-run requests` imported **337 pip modules**. The following were **never imported** during that operation. ### Never-imported vendor modules (54 modules) **Entirely unused vendor packages:** - `pip._vendor.msgpack` (all 4 modules) -- serialization library, not used at runtime - `pip._vendor.tomli` (all 4 modules) -- TOML parser, not needed for install - `pip._vendor.distro` (all 3 modules) -- Linux distribution detection, not needed on macOS/for install - `pip._vendor.tomli_w` (2 modules) -- TOML writer **Unused vendor submodules (platform-specific / optional features):** - `pip._vendor.truststore._windows`, `pip._vendor.truststore._openssl` -- platform-specific TLS backends - `pip._vendor.platformdirs.windows`, `pip._vendor.platformdirs.android`, `pip._vendor.platformdirs.unix` -- wrong-platform dirs - `pip._vendor.urllib3.contrib.*` (securetransport, pyopenssl, appengine, ntlmpool, socks, backports) -- optional urllib3 extras - `pip._vendor.idna.codec`, `pip._vendor.idna.compat`, `pip._vendor.idna.uts46data` -- IDNA codec/compat, rarely needed - `pip._vendor.cachecontrol._cmd`, `pip._vendor.cachecontrol.heuristics` -- CLI/heuristic features unused by pip - `pip._vendor.packaging.metadata`, `pip._vendor.packaging.licenses` -- packaging metadata/license handling - `pip._vendor.dependency_groups.*` (all 5 modules) -- dependency group resolution - `pip._vendor.requests.help` -- requests debug info - `pip._vendor.rich` partial: `_export_format`, `_spinners`, `ansi`, `file_proxy`, `filesize`, `live`, `live_render`, `pager`, `progress`, `progress_bar`, `screen`, `spinner` - `pip._vendor.certifi.__main__` -- certifi CLI - `pip._vendor.pygments` (most submodules) -- syntax highlighting, not used in install path ### Never-imported internal modules (26 modules) Most are **command modules not used during `install`**: - `pip._internal.commands.cache` - `pip._internal.commands.check` - `pip._internal.commands.completion` - `pip._internal.commands.configuration` - `pip._internal.commands.debug` - `pip._internal.commands.download` - `pip._internal.commands.freeze` - `pip._internal.commands.hash` - `pip._internal.commands.help` - `pip._internal.commands.index` - `pip._internal.commands.inspect` - `pip._internal.commands.list` - `pip._internal.commands.lock` - `pip._internal.commands.search` - `pip._internal.commands.show` - `pip._internal.commands.uninstall` - `pip._internal.commands.wheel` Other never-imported internals: - `pip._internal.locations._distutils` -- legacy distutils location support - `pip._internal.main` -- thin wrapper, bypassed in tests - `pip._internal.metadata.pkg_resources` -- legacy metadata backend - `pip._internal.network.xmlrpc` -- XML-RPC client (for `pip search`) - `pip._internal.operations.freeze` -- freeze operation - `pip._internal.resolution.legacy` (2 modules) -- legacy resolver - `pip._internal.utils._jaraco_text` -- text utility --- ## 8. Recommendations ### High-impact: Entirely unused vendor packages These packages have **0% coverage** and were **never imported** during install. They are candidates for removal or lazy-loading. | Package | Lines | Recommendation | |---------|------:|----------------| | **msgpack** | 698 | Already replaced by JSON caching (per commit `070099c01`). Can likely be fully removed from vendor. | | **tomli** | 529 | Python 3.11+ has `tomllib` in stdlib. If pip's minimum is 3.11+, this is dead weight. Otherwise needed for <3.11. | | **distro** | 352 | Only used on Linux for distro detection. Already lazy-imported. Could be skipped entirely on macOS/Windows. | **Potential savings: ~1,579 lines of vendor code.** ### Medium-impact: Heavily unused vendor code | Package | Missing Lines | Notes | |---------|-------------:|-------| | rich | 3,640 | Pip uses a small fraction of rich. Consider vendoring only the needed subset. | | urllib3 `contrib/` | ~1,289 | securetransport, pyopenssl, appengine, ntlmpool, socks, backports -- all 0% coverage. Platform-specific or optional. | | pygments | 1,457 | 18.2% coverage. Pip only uses basic lexing. Most formatters, lexers, and utilities are unused. | | distlib | 1,238 | `util.py` alone has 1,022 uncovered lines. Much of distlib is unused. | | pkg_resources | 888 | Legacy metadata backend. 43.1% coverage. Being phased out. | ### Low-impact: Internal pip dead code The internal pip code is reasonably well-covered at 68.8%. The uncovered code is mostly: 1. **Command handlers** (953 lines) -- Expected. These are tested by functional tests, not unit tests. Not actually dead. 2. **Legacy resolver** (`resolution/legacy/`) -- Never imported during install. Could be lazy-loaded or gated. 3. **Platform-specific paths** (distutils locations, Windows/Linux branches) -- Not dead, just not exercised on macOS. 4. **VCS backends** (subversion, mercurial) -- Only used when installing from VCS URLs. ### Lazy-loading opportunities These modules are never imported during a standard `pip install` but are needed for other commands: - All command modules except `install` -- already lazy-loaded via command discovery - `pip._internal.resolution.legacy` -- could gate behind a flag check - `pip._internal.metadata.pkg_resources` -- could lazy-import - `pip._internal.network.xmlrpc` -- only used by deprecated `pip search` - `pip._vendor.pygments` -- only needed for `--verbose` or rich output formatting ### Summary of removable/reducible code | Category | Estimated Removable Lines | |----------|-------------------------:| | Entirely unused vendor packages (msgpack, tomli, distro) | ~1,579 | | Unused vendor submodules (urllib3 contrib, pygments extras, etc.) | ~2,500 | | Never-imported vendor utility modules (__main__, CLI tools, etc.) | ~400 | | Total potential reduction | **~4,500 lines** | This represents roughly **10.6% of all pip source code** that could potentially be removed or lazy-loaded.