Repository navigation
Run coverage from pytest addopts; ship a type stub for the extension - #12
Merged
Merged
Conversation
…command `[tool.pytest.ini_options] addopts` now carries `--cov --cov-report=term-missing`, so the README's `uv run pytest` prints the coverage table and enforces `[tool.coverage.report] fail_under` the same way CI does. The CI step drops the flags it no longer needs. A single-file run can skip the floor with `--no-cov`. Co-Authored-By: Claude Mythos 5.1 <noreply@anthropic.com>
`mwatershed/mwatershed.pyi` declares `agglom_rs`, `cluster`, `cluster_weighted` and `cluster_arrays` with the signatures from `src/lib.rs`, and `py.typed` marks the package as typed; `[tool.maturin] include` ships both in the wheel. The two `# ty: ignore[unresolved-import]` comments on the extension imports go away, so ty now checks the wrapper's calls into Rust and the tests' calls to the extension instead of treating them as Unknown. The ty job and README run `ty check --error-on-warning`. Co-Authored-By: Claude Mythos 5.1 <noreply@anthropic.com>
The tests job times its own `uv run pytest`, measures the cold import of the package's headline modules (benchmarks/run.py), and uploads the two numbers as an artifact from one matrix cell. The benchmark workflow runs when a tests run on main completes, downloads that artifact, creates the gh-pages branch if it is missing, and publishes with github-action-benchmark to gh-pages:dev/bench, with a comparison table in the job summary and a commit comment when a metric gets 1.5x worse. The docs gain a Benchmarks page that charts every metric from that data, one line per metric with the commit on hover and click; the docs workflow now runs after each benchmark run and copies dev/bench from gh-pages into the deployed site, so the charts carry the newest point and the action's own dashboard keeps its URL. Nothing runs the test suite twice. Co-Authored-By: Claude Mythos 5.1 <noreply@anthropic.com>
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.
uv run pytestnow measures coverage[tool.pytest.ini_options] addoptscarries--cov --cov-report=term-missing, so the README'suv run pytestprints the coverage table and enforces the committedfail_underfloor exactly as CI does. The CI step drops the flags it no longer needs. A single file can be run without the floor:testpaths = ["tests"]replaces thetestsargument on the command line.Type stub and
py.typedty was green only because two
# ty: ignore[unresolved-import]comments hid the compiled module, so every call into Rust wasUnknown.mwatershed/mwatershed.pyinow declaresagglom_rs,cluster,cluster_weightedandcluster_arrayswith the signatures fromsrc/lib.rs(usizeasnp.uintp),py.typedmarks the package as typed, and[tool.maturin] includeships both in the wheel. The two ignores are gone, so ty checks the wrapper's calls into the extension and the tests' calls to it. The lint job and README runty check --error-on-warning.Verified locally:
uv run ty check --error-on-warningclean,unzip -lof the built wheel listsmwatershed/mwatershed.pyiandmwatershed/py.typed, 76 tests pass at 100% coverage.Import time and test duration, tracked per commit
The
testsjob times its ownuv run pytestand measures the cold import ofmwatershed(benchmarks/run.py), and uploads the two numbers as an artifact from the floor-interpreter, highest-resolution cell. A newbenchmarkworkflow runs when a tests run onmaincompletes, downloads that artifact, creates thegh-pagesbranch if it is missing, and publishes with github-action-benchmark togh-pages:dev/bench, with a comparison table in the job summary and a commit comment when a metric gets 1.5x worse. The docs gain a Benchmarks page that charts every metric from that data; the docs workflow now runs after each benchmark run (instead of on push) and copiesdev/benchfromgh-pagesinto the deployed site, so the charts carry the newest point and the action's own dashboard stays reachable under the docs site. Nothing runs the test suite twice.The same setup runs end to end in pattonw/prototype-lib.
🤖 Generated with Claude Code