• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

pirl-unc / tcrsift / 25771776949
84%

Build:
DEFAULT BRANCH: main
Ran 13 May 2026 01:09AM UTC
Jobs 4
Files 25
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

13 May 2026 01:07AM UTC coverage: 70.864%. Remained the same
25771776949

push

github

web-flow
Harden load path against test gaps that produced #37 and #39 (#42)

Both today's user-reported bugs had the same shape: synthetic tests
covered one variant of an input or contract while production used a
different variant. Surface-level fixes already shipped in PRs #38 and
#40; this PR closes the underlying coverage gaps.

## Production: broaden _ensure_x to normalize *any* non-CSR sparse

PR #38 fixed CSC specifically with `isinstance(X, csc_matrix)`. The
same shape applies to COO, scipy 1.11+ `csc_array` (new sparse-array
family, not a `csc_matrix` subclass), and any other sparse format
concat_on_disk can't merge. Switched to a format-driven check:

  elif issparse(adata.X) and getattr(adata.X, "format", "csr") != "csr":
      adata.X = adata.X.tocsr()

Covers every current and future non-CSR sparse layout in one branch.

## Tests

(1) Parametric X-format coverage for load_samples — CSR / CSC / COO /
dense. Replaces the single CSC-only test from PR #38. Catches the
#37 class of bug for any sparse format anndata accepts.

(2) Parametric contract test for QC bounds: every documented bound
(min_genes / max_genes / min_counts / max_counts / min_mito_pct /
max_mito_pct) must produce a smaller cell pool when tightened past
the fixture's median for that metric. Self-calibrating thresholds
(set bound = median of unfiltered) so a fixture re-seeding doesn't
silently break the test. Catches the #39 class of bug for any future
QC parameter someone adds and forgets to plumb through to filtering.

(3) Added n_obs > 0 defense to test_load_gex_applies_qc_filter to
close a vacuous-truth blind spot flagged in PR #40's review (empty
results would have let later assertions pass without checking
anything).

Net: 9 new test rows (+10 parametric variants - 1 replaced test).
722 pass total, lint clean.

Version 0.8.7 (patch — additive test hardening + small backward-
compatible widening of _ensure_x to cover formats CellRanger doesn't
emit today but might in future scipy/a... (continued)

4648 of 6559 relevant lines covered (70.86%)

2.83 hits per line

Coverage Regressions

Lines Coverage ∆ File
10
89.14
0.0% loader.py
Jobs
ID Job ID Ran Files Coverage
1 python-3.11 - 25771776949.1 13 May 2026 01:09AM UTC 25
70.85
GitHub Action Run
2 python-3.10 - 25771776949.2 13 May 2026 01:09AM UTC 25
70.85
GitHub Action Run
3 python-3.12 - 25771776949.3 13 May 2026 01:09AM UTC 25
70.85
GitHub Action Run
4 python-3.9 - 25771776949.4 13 May 2026 01:09AM UTC 25
70.83
GitHub Action Run
Source Files on build 25771776949
  • Tree
  • List 25
  • Changed 1
  • Source Changed 0
  • Coverage Changed 1
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #25771776949
  • 6f2580d3 on github
  • Prev Build on main (#25761768094)
  • Next Build on main (#25815465724)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc