Repository navigation
release: v0.9.1 - #13
Conversation
Reads cellstream's public `group_spans()` instead of a private accessor, adds `AUTHORS`, and removes a third-party licence audit that carried no notice obligation -- gpudge redistributes no third-party code, and the wheel contains only the package. Also fixes metadata and messages that had gone stale: `CITATION.cff` named the previous release, so citing this library from its own metadata cited the wrong version; two `pip install gpudge[fast]` hints were unquoted, which zsh treats as a glob and refuses; and the streaming extra's missing-dependency error still told callers to install from a checkout, which stopped being necessary when gpudge reached PyPI. The publishing workflow now asserts that every file carrying the release version agrees with the tag, which is what would have caught the citation metadata. Full notes in CHANGELOG.md.
There was a problem hiding this comment.
Code Review
This pull request updates gpudge to version 0.9.1, migrating from cellstream's private _load_groups() API to the public group_spans() API and manifest properties. It introduces a centralized label_str helper to safely decode bytes labels, removes the stale third-party license documentation, adds an AUTHORS file, and updates install hints and error messages to reflect the PyPI release of cellstream. The review feedback correctly identifies that the type check isinstance(ref, list) when parsing reference labels is too restrictive and fragile, and suggests supporting other iterable types like tuples, sets, or numpy arrays to prevent malformed label strings.
| if ref is None: | ||
| return None, ranges | ||
| ref_labels = [str(x) for x in (ref if isinstance(ref, list) else [ref])] | ||
| ref_labels = [label_str(x) for x in (ref if isinstance(ref, list) else [ref])] |
There was a problem hiding this comment.
Checking strictly for list using isinstance(ref, list) is fragile and non-idiomatic. If ref is a tuple, set, or numpy.ndarray of reference labels, it will be wrapped in a list as a single element (e.g., [('ntc', 'safe')]), causing label_str to stringify the entire sequence into a single malformed label string like "('ntc', 'safe')".
Consider checking for a broader set of sequence/iterable types, or checking if ref is a string/bytes first and treating it as an iterable otherwise, to align with how validate_archive_reference handles reference sequences.
ref_labels = [label_str(x) for x in (ref if isinstance(ref, (list, tuple, set, np.ndarray)) else [ref])]There was a problem hiding this comment.
Code Review
This pull request bumps the version of gpudge to 0.9.1 and migrates the streaming path from using cellstream's private _load_groups() API to the public group_spans() API. It introduces robust validation of group spans, decodes bytes labels via a new label_str helper, and improves missing-dependency error messages. Additionally, the PR adds an AUTHORS file, removes the stale THIRD_PARTY_LICENSES.md file, quotes install hints to prevent shell globbing issues, and updates documentation and tests to reflect the shardad to cellstream rename. As there were no review comments provided, I have no feedback to provide on reviewer comments.
Publishes v0.9.1. Full notes in
CHANGELOG.md.Changed —
de(archive=…, layout='cell')reads cellstream's publicCellStore.group_spans()instead of a private accessor. Behaviour is unchanged: same group table, same guards, verified on real archives in both reference modes.Added —
AUTHORS, a curated credit record. It credits the GPU fork of pdex that demonstrated the idea gpudge is built on, and records a production evaluation by someone other than this library's author.Removed —
docs/THIRD_PARTY_LICENSES.md. gpudge redistributes no third-party code — the wheel carries only thegpudge/package, which the release workflow asserts on every publish — so the file had no notice obligation to discharge, and it had gone materially stale.SECURITY.mdnow states the actual situation.Fixed
CITATION.cffnamed the previous release, so citing this library from its own metadata cited the wrong version.pip install gpudge[fast]hints were unquoted; zsh, the macOS default shell, treats that as a glob and fails rather than installing.Verification
All four release gates pass against this exact tree and its built artifacts: the sdist allow-list, wheel containment, tag-versus-version, and version parity. Test suite 633 passed / 202 skipped on a CPU runner; the full suite passes on an H100 (971/1) and on a fresh unpinned resolve on an L4 (818/10) that had moved to newer torch, numba and scanpy than the pinned development environment.