Single-cell counts in 10x MatrixMarket layout: genes on rows, cells on
columns, coordinate triplets. Counts are f64 because ComBat runs on the
log-normalized float matrix scanpy feeds it.
Parametric ComBat (Johnson, Li & Rabinovic 2007) with batch as the only
model term. Operates in place on a gene-major dense matrix and overwrites
it with the corrected values, mirroring scanpy’s _combat.
Read a barcode → batch-label TSV. Two columns (barcode, label); a header
line barcode<TAB>colname is honored when key names that second column,
otherwise the first data row sets the schema. Returns the per-cell batch
index aligned to barcodes, plus the ordered distinct labels.