Dependency cleanup (PR 1 of 3): packaging truth — extras [extras]/[test]/[dev], drop setup.py and sortedcollections - #811
Open
DLWoodruff wants to merge 1 commit into
Open
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #811 +/- ##
=======================================
Coverage 76.33% 76.33%
=======================================
Files 170 170
Lines 22628 22628
=======================================
Hits 17274 17274
Misses 5354 5354 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
- Delete the stale setup.py (metadata frozen at 0.13.2.dev0; pyproject.toml
has been authoritative since 0.14.0).
- Drop sortedcollections from dependencies: it is imported nowhere in the
repository.
- Drop the unused single-package alias extras (scipy, pandas, plot).
- Add three purposeful extras:
extras = scipy, pandas, matplotlib, dill, mip (every pip-safe optional
feature of the library)
test = extras + pytest, coverage, addheader, gridx-egret
dev = test + doc + ruff
Solvers and proprietary-bridge packages stay out of all extras
(licensing decisions); mpi4py stays only in [mpi].
- Update install docs (README, quick_start, install_mpi, CLAUDE.md) and add
the design document.
First of three PRs; see doc/designs/dependency_cleanup_design.md for the
full plan (phase 2 = CI runners consume the extras, phase 3 = attempt_import
guards for the opt-in modules).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
DLWoodruff
force-pushed
the
dependency-cleanup-phase1
branch
from
July 23, 2026 21:30
6e71480 to
1051791
Compare
bknueven
approved these changes
Jul 29, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This is the first of three PRs implementing the dependency cleanup designed in
doc/designs/dependency_cleanup_design.md(included in this PR). Phase 2 will switch the CI runners to install via the new extras; phase 3 will addattempt_importguards to the four opt-in modules that currently crash on import when their optional package is missing.What this PR does
Deletes
setup.py. It has been dead weight since 0.14.0:pyproject.tomlis authoritative (pip, editable installs, and the publish workflow all use it), whilesetup.pystill said version 0.13.2.dev0 with its own diverged dependency lists.Drops
sortedcollectionsfrom the hard dependencies — it is imported nowhere in the repository (leftover from removed code). The true hard dependencies are justnumpyandpyomo>=6.4.Drops the unused alias extras
scipy,pandas,plot(each just installed one identically-named package; nothing in the repo, docs, or CI used them, and pip only warns on unknown extras so stale external installs don't break).Adds three purposeful extras (extras may reference other extras of the same project):
extras— every pip-safe optional feature of the library itself:scipy(confidence intervals, prox approx, kkt),pandas(rho CSV, wtracker, phtracker),matplotlib(plotting),dill(pickled bundles),mip(MPS/LP/SMPS input).test—extraspluspytest,coverage,addheader(imported bytest_headers.py), andgridx-egret(UC tests/examples).dev—testplusdocplusruff; the contributor one-stop shop:pip install -e ".[mpi,dev]".Solvers (cplex/gurobipy/xpress) and proprietary-bridge packages (gams, amplpy) are deliberately in no extra — licensing decisions.
mpi4pystays only in[mpi]because pip-installing it fails without an MPI toolchain.Updates the install docs (README,
quick_start.rst,install_mpi.rst— which now documents what each extra enables — and CLAUDE.md).Verification
pip install --dry-run -e ".[dev]"resolves correctly (all nested extras expand; no sortedcollections).pip install -e . --no-depsrebuilds fine withoutsetup.py;import mpisppyand the console scripts work.ruff checkclean;mpisppy/tests/test_sputils.pypasses (136 tests);cd doc && make htmlbuilds clean.setup.py,sortedcollections, or the dropped alias extras.🤖 Generated with Claude Code