Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 10 additions & 5 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@ All notable changes to gpudge are documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

> **A note on issue and PR numbers.** References such as `#124`, `gpudge_arc#115`
> and `shardad #246` throughout this file are **provenance, not links**: they
> identify entries in issue trackers that are not public, and will not resolve
> from here. They are kept so that each change can be traced back to the
> discussion that produced it.

## [Unreleased]

## [0.8.0] — 2026-08-18
Expand Down Expand Up @@ -77,7 +83,7 @@ H100, and 3 were refuted and are not listed here).
coercion.** Assigning to a view's `.X` writes through to the parent instead of
rebinding, so the coercion vanished while its warning claimed success —
dropping every gather tile onto scipy slicing, the regression
[#66](https://github.com/ArcInstitute/gpudge_arc/issues/66) added it to
`gpudge_arc#66` added it to
prevent. On an already-CSR view the assignment also ran a full
O(n_obs × n_var) sparse scatter into the caller's matrix. The coerced matrix is
now bound to a local **for views only**. A materialized `AnnData` is still
Expand Down Expand Up @@ -264,7 +270,7 @@ it go red.
### Added

- **`de(cell_source=…)` — a public bring-your-own cell source**
([#86](https://github.com/ArcInstitute/gpudge_arc/issues/86)). A third input
(`gpudge_arc#86`). A third input
mode, alongside `adata=` and `archive=`, taking a callable that yields one
public `CellGroup(label, X, rows=None)` per target group plus `targets=` /
`var_names=`. It runs the same `refpool_de_core` as the other
Expand Down Expand Up @@ -323,7 +329,7 @@ it go red.
`tau_star` and `tau_star_se`.

- **`de(archive=…)` reads `layout='cell'` shardad archives**
([#110](https://github.com/ArcInstitute/gpudge_arc/issues/110)): streaming DE
(`gpudge_arc#110`): streaming DE
now works on `.csad` per-cell archives, the form several VCI production
datasets are written in, removing the need for a shard-layout twin of a 40+ GB
archive. `de(shard_archive=…)` is the deprecated spelling of the new
Expand Down Expand Up @@ -1038,8 +1044,7 @@ ULP of the CPU baseline on every assertable column.
<!-- Compare links resolve against this repository, which is published as
milestone snapshots: 0.1.0, 0.2.0, 0.3.0, 0.3.1, 0.7.0 and 0.8.0 are tagged
here. The versions between them are documented above but are not separately
tagged here, so they carry no compare link. Issue and PR numbers throughout
refer to the development repository. -->
tagged here, so they carry no compare link. -->

[Unreleased]: https://github.com/ArcInstitute/gpudge/compare/v0.8.0...HEAD
[0.8.0]: https://github.com/ArcInstitute/gpudge/compare/v0.7.0...v0.8.0
Expand Down
11 changes: 8 additions & 3 deletions docs/reviews/2026-06-27-gpudge-ultrareview.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,16 @@ No live correctness bug exists in any realistic, supported code path. The core M

## Resolution status

Added 2026-08-18. **All 22 findings were addressed in v0.3.1 ([#59](https://github.com/ArcInstitute/gpudge_arc/pull/59))**, the release immediately following this review; two of them deliberately by deciding no code should change. Statuses below were re-verified against the tree at `v0.8.0`, and the *Evidence* column names something you can open — a regression test that cites the finding ID, or the code that now carries the guard.
> `gpudge_arc#59` and similar tokens below are **provenance, not links**: they
> identify entries in an issue tracker that is not public and will not resolve
> from here. They are kept so each disposition can be traced to the change that
> made it.
Comment on lines +31 to +34

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

For phrasing consistency with the note in CHANGELOG.md ("They are kept so that..."), consider using "so that" here as well:

gpudge_arc#59 and similar tokens below are provenance, not links: they
identify entries in an issue tracker that is not public and will not resolve
from here. They are kept so that each disposition can be traced to the change that
made it.

Comment on lines +31 to +34

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

To maintain grammatical consistency with the note added to CHANGELOG.md, consider adding "that" after "so" in the final sentence.

Suggested change
> `gpudge_arc#59` and similar tokens below are **provenance, not links**: they
> identify entries in an issue tracker that is not public and will not resolve
> from here. They are kept so each disposition can be traced to the change that
> made it.
> 'gpudge_arc#59' and similar tokens below are provenance, not links: they identify entries in an issue tracker that is not public and will not resolve from here. They are kept so that each disposition can be traced to the change that made it.


Added 2026-08-18. **All 22 findings were addressed in v0.3.1 (`gpudge_arc#59`)**, the release immediately following this review; two of them deliberately by deciding no code should change. Statuses below were re-verified against the tree at `v0.8.0`, and the *Evidence* column names something you can open — a regression test that cites the finding ID, or the code that now carries the guard.

| # | Severity | Finding | Status | Evidence |
|---|---|---|---|---|
| H1 | High | NaN/None `groupby` labels bucketed into `'nan'`/`'None'` groups | **Fixed** (v0.3.1); guard broadened in v0.8.0 ([#124](https://github.com/ArcInstitute/gpudge_arc/pull/124)) | `_ingest.MISSING_LABEL_SPELLINGS` and the mirroring guard in `_shard_stream.py`, which was the only streaming layout when this was fixed; `_cell_stream.py` gained the same screen when the cell layout arrived in v0.7.0. ⚠️ One backend-parity gap remains open as [#127](https://github.com/ArcInstitute/gpudge_arc/issues/127) — a group *genuinely* named `nan` is rejected on streaming but accepted in memory |
| H1 | High | NaN/None `groupby` labels bucketed into `'nan'`/`'None'` groups | **Fixed** (v0.3.1); guard broadened in v0.8.0 (`gpudge_arc#124`) | `_ingest.MISSING_LABEL_SPELLINGS` and the mirroring guard in `_shard_stream.py`, which was the only streaming layout when this was fixed; `_cell_stream.py` gained the same screen when the cell layout arrived in v0.7.0. ⚠️ One backend-parity gap remains open as `gpudge_arc#127` — a group *genuinely* named `nan` is rejected on streaming but accepted in memory |
| M1 | Medium | MWU-vs-scipy correctness tests all `@needs_cuda` | **Fixed** | `test_mwu.py::test_mwu_ref_matches_scipy_cpu`, which cites M1 |
| M2 | Medium | Streaming equivalence checked Pearson correlation only | **Fixed** | `test_shard_stream.py::_assert_equiv` — `allclose(rtol=1e-5, atol=1e-7, equal_nan=True)` over full row coverage, with the M2 reasoning at the call site |
| M3 | Medium | `environment.yml` pinned `gpudge @v0.2.0` | **Fixed** | pins the current release tag; kept in step with README by a note in both |
Expand All @@ -51,7 +56,7 @@ Added 2026-08-18. **All 22 findings were addressed in v0.3.1 ([#59](https://gith
| N2 | Nit | `.item()` forces per-chunk GPU→CPU syncs | **No change** | a perf nit with no correctness impact; the syncs are still there in `_mwu.py` |
| N3 | Nit | A group literally named `'all_others'` is remapped | **No change, deliberate** | this review's own recommendation was "no action before the legacy spelling is removed"; the behaviour is noted in `__init__.py` |
| N4 | Nit | `mwu_ref` sentinel test checked only the p-value half | **Fixed** | `test_mwu.py` now asserts `(U[ref_idx] == 0).all()`, citing N4 |
| N5 | Nit | `MeanCalc` / `__version__` absent from the README API docs | **Fixed** | both documented in the README ([#126](https://github.com/ArcInstitute/gpudge_arc/pull/126)) |
| N5 | Nit | `MeanCalc` / `__version__` absent from the README API docs | **Fixed** | both documented in the README (`gpudge_arc#126`) |
| N6 | Nit | `csr_row_sums` docstring said "CSR" but accepts dense | **Fixed** | now "Per-row sum of a CSR sparse OR dense matrix" |
| N7 | Nit | README/SKILL listed 5 of the 10 default output columns | **Fixed** | both now list all ten under a `columns (10):` heading |

Expand Down
4 changes: 4 additions & 0 deletions docs/reviews/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ defect from a live one without cross-referencing the changelog. A findings list
without dispositions reads as a list of known, open bugs — the opposite of what
publishing it is for.

Issue and PR numbers on this page and in the reports — `gpudge_arc#59` and
similar — are provenance: they identify entries in an issue tracker that is not
public and will not resolve from here.
Comment on lines +12 to +14

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

For visual consistency with the notes added in CHANGELOG.md and docs/reviews/2026-06-27-gpudge-ultrareview.md, consider formatting this note as a blockquote:

Issue and PR numbers on this page and in the reports — gpudge_arc#59 and
similar — are provenance: they identify entries in an issue tracker that is not
public and will not resolve from here.

Comment on lines +12 to +14
Comment on lines +12 to +14

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

To maintain consistency with the phrasing used in CHANGELOG.md and the ultrareview report, consider using the bolded "provenance, not links" terminology here as well.

Suggested change
Issue and PR numbers on this page and in the reports — `gpudge_arc#59` and
similar — are provenance: they identify entries in an issue tracker that is not
public and will not resolve from here.
Issue and PR numbers on this page and in the reports — 'gpudge_arc#59' and similar — are provenance, not links: they identify entries in an issue tracker that is not public and will not resolve from here.


| report | findings | disposition |
|---|---|---|
| [2026-06-13](2026-06-13-gpudge-ultrareview.md) | 23 survived verification, of 28 raw | status table in the report: 9 confirmed defects, 5 fixed in the same PR, 4 filed as issues |
Expand Down
Loading