bencher.result_collector
Result collection and storage for benchmarking.
This module provides the ResultCollector class for managing benchmark results, including xarray dataset operations, caching, and metadata management.
Attributes
Classes
Manages benchmark result collection, storage, and caching. |
Functions
Return the sentinel value used for 'missing' entries of this result type. |
|
|
Null out over_time entries older than var_limit for a single result variable. |
|
Set a value in a multi-dimensional xarray at the specified index position. |
|
Write a single result value, using pre-cached numpy arrays when available. |
Module Contents
- bencher.result_collector.logger
- bencher.result_collector._MEDIA_RESULT_TYPES
- bencher.result_collector._sentinel_for_result_var(rv)
Return the sentinel value used for ‘missing’ entries of this result type.
Thin wrapper over the single source of truth in
bencher.variables.results(result_missing_fill); kept as a local alias for the over_time aging path.
- bencher.result_collector._null_old_entries(dataset, rv, var_limit)
Null out over_time entries older than var_limit for a single result variable.
Mutates *dataset* in-place by writing sentinel values directly into the backing numpy arrays of the affected data variables.
For media types (images, videos, .rrd files), the referenced files are collected for deferred deletion. Returns a list of file paths to delete; the caller is responsible for removing them after the dataset is cached so that a cache-write failure does not leave orphaned sentinel values.
- bencher.result_collector.set_xarray_multidim(data_array: xarray.DataArray, index_tuple: tuple[int, Ellipsis], value: Any) xarray.DataArray
Set a value in a multi-dimensional xarray at the specified index position.
This function sets a value in an N-dimensional xarray using dynamic indexing that works for any number of dimensions.
- Parameters:
data_array (xr.DataArray) – The data array to modify
index_tuple (tuple[int, ...]) – The index coordinates as a tuple
value (Any) – The value to set at the specified position
- Returns:
The modified data array
- Return type:
xr.DataArray
- bencher.result_collector._set_result_value(bench_res: bencher.results.bench_result.BenchResult, rv_arrays: dict[str, numpy.ndarray] | None, name: str, idx: tuple, value: Any) None
Write a single result value, using pre-cached numpy arrays when available.
- class bencher.result_collector.ResultCollector(cache_size: int = DEFAULT_CACHE_SIZE_BYTES)
Manages benchmark result collection, storage, and caching.
This class handles the initialization of xarray datasets for storing benchmark results, storing results from worker jobs, managing caches, and adding metadata.
- cache_size
Maximum size of the cache in bytes
- Type:
int
- ds_dynamic
Dictionary for storing unstructured vector datasets
- Type:
dict
- cache_size = 0
- ds_dynamic: dict
- _benchmark_cache: diskcache.Cache | None = None
- _history_cache: diskcache.Cache | None = None
- get_benchmark_cache() diskcache.Cache
Return the persistent benchmark_inputs Cache, creating it on first access.
- get_history_cache() diskcache.Cache
Return the persistent history Cache, creating it on first access.
- close_caches() None
Close any open cache instances. Safe to call multiple times.
- __enter__() ResultCollector
- __exit__(*exc_info) None
- setup_dataset(bench_cfg: bencher.bench_cfg.BenchCfg, time_src: datetime.datetime | str) tuple[bencher.results.bench_result.BenchResult, zip, list[str], int]
Initialize an n-dimensional xarray dataset from benchmark configuration parameters.
This function creates the data structures needed to store benchmark results based on the provided configuration. It sets up the xarray dimensions, coordinates, and variables based on input variables and result variables.
- Parameters:
bench_cfg (BenchCfg) – Configuration defining the benchmark parameters, inputs, and results
time_src (datetime | str) – Timestamp or event name for the benchmark run
- Returns:
A BenchResult object with the initialized dataset
A lazy iterator of function input tuples (index, value pairs)
A list of dimension names for the dataset
The total number of jobs (Cartesian product size)
- Return type:
tuple[BenchResult, zip, list[str], int]
- define_extra_vars(bench_cfg: bencher.bench_cfg.BenchCfg, repeats: int, time_src: datetime.datetime | str) list[bencher.variables.inputs.IntSweep]
Define extra meta variables for tracking benchmark execution details.
This function creates variables that aren’t passed to the worker function but are stored in the n-dimensional array to provide context about the benchmark, such as the number of repeat measurements and timestamps.
- Parameters:
bench_cfg (BenchCfg) – The benchmark configuration to add variables to
repeats (int) – The number of times each sample point should be measured
time_src (datetime | str) – Either a timestamp or a string event name for temporal tracking
- Returns:
A list of additional parameter variables to include in the benchmark
- Return type:
list[IntSweep]
- static precompute_result_arrays(bench_res: bencher.results.bench_result.BenchResult) dict[str, numpy.ndarray]
Pre-fetch the underlying numpy arrays for all result variables.
This avoids repeated xarray Dataset.__getitem__ lookups (which trigger _construct_dataarray) during the per-job store loop. The returned arrays are views into the dataset, so writes go directly into bench_res.ds.
- store_results(job_result: bencher.job.JobFuture, bench_res: bencher.results.bench_result.BenchResult, worker_job: bencher.worker_job.WorkerJob, bench_run_cfg: bencher.bench_cfg.BenchRunCfg, rv_arrays: dict[str, numpy.ndarray] | None = None) None
Store the results from a benchmark worker job into the benchmark result dataset.
This method handles unpacking the results from worker jobs and placing them in the correct locations in the n-dimensional result dataset. It supports different types of result variables including scalars, vectors, references, and media.
- Parameters:
job_result (JobFuture) – The future containing the worker function result
bench_res (BenchResult) – The benchmark result object to store results in
worker_job (WorkerJob) – The job metadata needed to index the result
bench_run_cfg (BenchRunCfg) – Configuration for how results should be handled
rv_arrays (dict, optional) – Pre-computed numpy arrays from precompute_result_arrays(). Falls back to dataset lookup if None.
- Raises:
RuntimeError – If an unsupported result variable type is encountered
- cache_results(bench_res: bencher.results.bench_result.BenchResult, bench_cfg_hash: str, bench_cfg_hashes: list[str]) None
Cache benchmark results for future retrieval.
This method stores benchmark results in the disk cache using the benchmark configuration hash as the key. It temporarily removes non-pickleable objects from the benchmark result before caching.
- Parameters:
bench_res (BenchResult) – The benchmark result to cache
bench_cfg_hash (str) – The hash value to use as the cache key
bench_cfg_hashes (list[str]) – List to append the hash to (modified in place)
- _load_history_record(cache: diskcache.Cache, bench_cfg_hash: str) dict | None
Fetch and normalize one history record, or None when absent/unreadable.
Bare
xr.Datasetvalues (hand-seeded or pre-record entries) are wrapped into the record shape with no column metadata, which the reconciler treats as adopt-in-place.
- load_history_cache(dataset: xarray.Dataset, bench_cfg_hash: str, clear_history: bool, max_time_events: int | None = None, result_vars: list | None = None, *, on_history_reset: str = 'warn', bench_name: str | None = None, tag: str | None = None, config_summary: dict | None = None) xarray.Dataset
Load, reconcile, and persist historical benchmark data.
The history key excludes result variables, so the stored record is a superset of every column ever measured under this benchmark’s input space; result-var differences are reconciled per column (retained, retired, resumed, or born — see
bencher.history) and consumers receive a projection onto exactly the currentresult_varscolumns. If clear_history is True, existing history is ignored (a fresh series starts and is written back).- Parameters:
dataset (xr.Dataset) – Freshly calculated benchmark data for the current run
bench_cfg_hash (str) – History key — the benchmark identity hash computed with
include_result_vars=Falseclear_history (bool) – If True, clears historical data instead of loading it
max_time_events (int | None) – Maximum number of over_time events to retain. Oldest events are trimmed. None means unlimited.
result_vars (list | None) – Result variable instances defining the served columns. Also used for per-variable
max_time_eventsaging. When None, column reconciliation and projection are skipped entirely.on_history_reset (str) – Policy for loss-y schema events — “warn”, “error” (raise HistoryResetError before persisting), or “ignore”.
bench_name (str | None) – Benchmark name for the last-seen index; enables full-reset detection when the history key moves.
tag (str | None) – Benchmark tag for the last-seen index.
config_summary (dict | None) –
bencher.history.config_summaryof the current config, stored in the last-seen index and diffed on resets.
- Returns:
- The current config’s view of the accumulated history —
historical plus current data, projected onto the current columns.
- Return type:
xr.Dataset
- add_metadata_to_dataset(bench_res: bencher.results.bench_result.BenchResult, input_var: Any) None
Add variable metadata to the xarray dataset for improved visualization.
This method adds metadata like units, long names, and descriptions to the xarray dataset attributes, which helps visualization tools properly label axes and tooltips.
- Parameters:
bench_res (BenchResult) – The benchmark result object containing the dataset to display
input_var – The variable to extract metadata from
- report_results(bench_res: bencher.results.bench_result.BenchResult, print_xarray: bool, print_pandas: bool) None
Display the calculated benchmark data in various formats.
This method provides options to display the benchmark results as xarray data structures or pandas DataFrames for debugging and inspection.
- Parameters:
bench_res (BenchResult) – The benchmark result containing the dataset to display
print_xarray (bool) – If True, log the raw xarray Dataset structure
print_pandas (bool) – If True, log the dataset converted to a pandas DataFrame