Problem — the declarative, content-addressable description of
an SA campaign’s input space. Vector of factors, each with a name,
distribution, and kind (continuous / discrete / categorical /
boolean).
A single factor in the experiment. Name + distribution + kind.
#[non_exhaustive] blocks struct-literal construction outside
this crate; consumers go through ProblemBuilder.
Per-chunk size for the parallel block-then-tree reduction. Fixed;
changing it would change reduction-tree shape and therefore
bit-level results. Future workload-tuned per-Experiment blocks
would land via ADR.
Parallel block-then-tree sum. Partitions xs into BLOCK-sized
chunks, reduces each chunk via tree_sum in parallel via rayon,
then reduces the per-chunk sums via tree_sum sequentially.
Bit-identical to tree_sum(xs) regardless of rayon thread count
or worker partition pattern.
Parallel two-pass unbiased sample variance. Mean via
par_tree_sum; centered-square via parallel map (preserves
index order on IndexedParallelIterator); then the centered-square
reduction via par_tree_sum.