Skip to main content

BatchLens Bio

Experimental-design and batch-confounding audits for single-cell and spatial metadata.

BatchLens checks declared experimental units, target-by-batch coverage and whether a specific contrast is estimable under an additive fixed-effects model. It produces an offline HTML report, JSON findings and auditable tables. It never fits or corrects expression data.

Status: exploratory alpha. External user validation and independent scientific review are not yet completed. See the release page and validation record for publication and test evidence. PyPI distribution is tracked separately.

Why another tool?

Keep using scIB/kBET/LISI for integration evaluation. Good embedding mixing cannot recover information absent from an experimental design. If D0 samples were processed only in run A and D7 only in run B, time + run cannot distinguish the time effect from run.

BatchQC and ExploreModelMatrix already provide valuable confounding/design diagnostics. BatchLens offers a narrowly scoped Python CLI that connects experimental-unit checks, explicit contrasts, machine-readable findings and offline delivery. It is a workflow tool using established linear algebra, not a new statistical method. See competitor research.

Install and try

Python 3.12 or 3.13; CI passes on Linux and macOS. Windows is not yet tested or supported. Install from the source repository:

git clone https://github.com/guatou904/batchlens-bio.git
cd batchlens-bio
python -m venv .venv
# macOS / Linux
source .venv/bin/activate
python -m pip install .
batchlens demo --case balanced --out demo-balanced
batchlens demo --case confounded-time --out demo-confounded --fail-on none

Open demo-confounded/report.html in your browser. Every demo is synthetic, runs offline and is included in the wheel. The report shows NON_ESTIMABLE; --fail-on none allows this intentional demonstration to exit successfully without hiding the finding.

Actual synthetic confounding report

Downloadable offline report preview · Reproduce the public spatial example

Other cases: partial-overlap, redundant-nuisance, paired, spatial-replicates, mixed-assays. Each output path must be new and have an existing parent. Existing files are never overwritten or deleted.

Your metadata

Prepare a CSV/TSV with one row per sample and a YAML design declaration. IDs are strings; declare the true experimental unit rather than assuming every cell or spot is independent.

batchlens validate --samples samples.tsv --design design.yaml
batchlens audit --samples samples.tsv --design design.yaml --out audit-001
batchlens audit --samples samples.tsv --design design.yaml \
  --observations cells.tsv --assays assays.tsv --out audit-002

The input guide specifies columns and includes a complete configuration. Export only metadata from your analysis environment; h5ad, expression matrices and spatial images are not required or read.

Understand the result

Contrast status Meaning
ESTIMABLE Algebraically estimable under the declared model; not a power, biological validity or causality pass
NON_ESTIMABLE The requested contrast cannot be uniquely determined under that model
NOT_ASSESSED Sampling structure is outside the supported independent/paired model; descriptive checks still run

Rank deficiency does not necessarily invalidate every contrast. Partial target-by-batch overlap is not automatically complete confounding. More cells or technical sections do not create more experimental units. See methods and interpretation.

Output and automation

  • report.html: self-contained, no network or JavaScript required.
  • result.json: versioned design, findings, contrast results and numerical evidence.
  • tables/*.tsv: sample/unit coverage and optional annotation summaries.
  • manifest.json: input/output SHA256 hashes, environment and dependency versions.
  • COMPLETE: written last; its absence indicates an incomplete bundle.

IDs are replaced with local aliases; labels/design values can still identify people. Review all outputs before sharing. No original ID map, absolute input paths or cell-level rows are exported. TSV formula-like labels are prefixed with an apostrophe for spreadsheet safety; JSON preserves original scientific labels.

Exit codes: 0 completed, 1 internal failure, 2 input/output error, 3 findings exceed policy. --fail-on critical is the default. Use --fail-on warning in strict CI so unsupported models do not pass silently; --fail-on none changes only exit behavior. A successful validate command does not test estimability.

Supported scope

Independent: one sample per declared experimental unit. Paired: one sample at each of two target levels per unit, with an explicit unit block. Categorical target; additive categorical/numeric adjustment. Multi-batch samples and more complex repeated sampling produce NOT_ASSESSED, never silent aggregation. No interaction terms, mixed-effects inference, power analysis, causal inference, spatial correlation test or batch correction.

Metadata-only audits cannot verify randomization, independence or unmeasured confounding. The study specification is supplied by the analyst. Near-singular designs require numerical review. Current resource guard: at most 100,000 samples and 256 encoded columns; this is a safety limit, not a performance guarantee.

Development and verification

uv sync --locked --no-editable
uv run --no-editable pytest
uv run --no-editable ruff check .
uv run --no-editable mypy
uv run --no-editable python -m build
uv run --no-editable twine check dist/*.whl dist/*.tar.gz

The validation record distinguishes executed tests from pending external evidence. R's model.matrix/QR supplies an independent oracle for selected scientific fixtures; see scripts/verify_r_oracle.R. The CI and release workflows validate tests, package installation outside the source directory, and demo output. Remote CI success is claimed only with a recorded run URL.

See CONTRIBUTING.md, CITATION.cff, release checklist and CHANGELOG.md. MIT-licensed code and synthetic examples; public datasets have their own provenance and terms.

Maintainer: guatou904. Report reproducible installation/scientific issues via GitHub Issues; use synthetic inputs and include the software version. The next iteration prioritizes fixes and actual user feedback.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

batchlens_bio-0.1.0.tar.gz (193.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

batchlens_bio-0.1.0-py3-none-any.whl (28.6 kB view details)

Uploaded Python 3

File details

Details for the file batchlens_bio-0.1.0.tar.gz.

File metadata

  • Download URL: batchlens_bio-0.1.0.tar.gz
  • Upload date:
  • Size: 193.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for batchlens_bio-0.1.0.tar.gz
Algorithm Hash digest
SHA256 eefb38ea087ff2b0ba8c0f370da5cced1db7e39cd24b4bcdc0b22f3a783d054a
MD5 1f9ea8537a7628e0ff8edf495eaa678f
BLAKE2b-256 362bb5388aa180db4101768809e971bac69d7dd034bf68d9c40c9b0863de055f

See more details on using hashes here.

Provenance

The following attestation bundles were made for batchlens_bio-0.1.0.tar.gz:

Publisher: pypi.yml on guatou904/batchlens-bio

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file batchlens_bio-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: batchlens_bio-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 28.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for batchlens_bio-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 657d72af0311743a3b9ea41ded5d3128ca735cc4d134fbb9a34dc976e7716728
MD5 e2d1f9704f49cbe087771658c71a5066
BLAKE2b-256 e5c14252692eb6ccec3e3abdd44975a5e1d178e9db4cf9d681328e5368b9a54e

See more details on using hashes here.

Provenance

The following attestation bundles were made for batchlens_bio-0.1.0-py3-none-any.whl:

Publisher: pypi.yml on guatou904/batchlens-bio

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.2.0

2 files

This release

0.1.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page