codeflash-agent/.codeflash/pypa/pip/data/coverage-analysis.md
Kevin Turcios 3b59d97647 squash
2026-04-13 14:12:17 -05:00

16 KiB

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.