Struct SizeRegime

Struct Documentation

struct SizeRegime

Per-space extents and per-rank CSV moment tables that define one size regime for a dry-run replay. Extents are element counts; CSV moments are power means over occupied pairs (PNO) or singles (OSV).

Public Functions

inline std::size_t extent(Index const &ix) const
Returns:

the flat extent of ix's space; throws std::out_of_range if the space is not present in space_extent (fail loud rather than silently defaulting to 1).

inline container::svector<std::size_t> const &slice_extents(Index const &ix) const
Returns:

ix's space batch-slice-extent sequence, or an empty span if the space has no partition recorded (=> the caller falls back to uniform target_batch_size blocks). Never throws.

inline double inner_pow(Index const &composite, std::size_t k) const
Returns:

the k-th power-mean moment for a proto-indexed CSV/PNO composite index (k clamped to 0..4), or pow(extent, k) for a plain (non-composite) index. Rank is determined by the number of proto indices: 1 => OSV (occupied single), 2 => PNO (occupied pair), >= 3 => the rank-specific csv_moment_by_rank table if present, else the PNO (rank-2) table.

inline std::function<std::size_t(Index const&)> idx_to_extent() const
inline std::function<double(Index const&, std::size_t)> inner_pow_fn() const

Public Members

std::map<std::wstring, std::size_t> space_extent
std::map<std::wstring, container::svector<std::size_t>> space_slice_extents

Optional per-space batch partition: the element extent of each realized batch slice along the space’s batch axis, keyed by space base_key, in order. Empty (default) => the dry-run batches a mode into uniform target_batch_size blocks (backend-model-agnostic fallback). When present for a batch axis, ResultDryRun::mode_batches uses this partition directly (accumulated to [lo,hi) ranges), so the dry-run’s batch count &#8212; hence its recompute &#8212; matches whatever the wet backend realizes, even when a tile is coarser than target_batch_size.

The dry-run backend deliberately does not know how these were derived: the caller converts its backend’s structure into slice extents and supplies them here, so a new backend model is supported without touching dry-run eval internals. For a tile-based wet backend, batch_slice_extents_from_ tiles is the ready-made converter. The extents must sum to space_extent.

std::array<double, 5> csv_pno_moment = {1.0, 1.0, 1.0, 1.0, 1.0}
std::array<double, 5> csv_osv_moment = {1.0, 1.0, 1.0, 1.0, 1.0}
std::map<std::size_t, std::array<double, 5>> csv_moment_by_rank