Same as SparseIoVec::collapse_columns_multilevel_vec, but also returns
the per-level cell → pb mapping needed for hierarchical / nested
chain sampling in downstream consumers (currently
graph-embedding-util).
Variant of collapse_columns_multilevel_with_hierarchy that skips
the BBKNN + Poisson DC-SBM refinement, instead synthesising the
per-pb-sample group assignment from a caller-supplied
cell_to_pb_per_level (finest-first; the same shape returned in
[MultilevelCollapseOut.cell_to_pb_per_level] by the refining
entry point). Typical use: senna {topic, itopic, ce-topic} --from
inheriting a prior run’s partition.
The SparseIoStack collapse, also returning the per-level cell → pb
membership (finest first) the layers share — the stack counterpart of
collapse_columns_multilevel_with_hierarchy. With
params.keep_finest_stats the finest level keeps its sufficient statistics,
which CollapsedOut::observed_counts reads.
Sparse pb-sample gene profile: rows[pbsamp] = Vec<(gene_idx, sum)> sorted
by gene_idx, as produced by collect_pb_sample_gene_sums and
consumed by collect_matched_stat_coarse and the refinement pass.