54 lines
1.9 KiB
Python
54 lines
1.9 KiB
Python
"""Helpers for GUI-side runtime history management."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from collections import deque
|
|
|
|
from python_app.models.dataset_model import ResultCollection
|
|
from python_app.models.run_config_model import RunConfigModel
|
|
|
|
|
|
def record_result_history(
|
|
result_history: deque[ResultCollection],
|
|
collection: ResultCollection,
|
|
) -> bool:
|
|
"""Append new result or replace existing entry by stable collection key."""
|
|
for index in range(len(result_history) - 1, -1, -1):
|
|
existing = result_history[index]
|
|
if (
|
|
existing.collection_id == collection.collection_id
|
|
and existing.monotonic_ns == collection.monotonic_ns
|
|
):
|
|
result_history[index] = collection
|
|
return True
|
|
|
|
result_history.append(collection)
|
|
return True
|
|
|
|
|
|
def build_run_history_signature(
|
|
config: RunConfigModel,
|
|
) -> tuple[object, ...]:
|
|
"""Build deterministic signature to detect run-settings changes (excluding live processing params)."""
|
|
combos_signature = tuple((int(combo.input), int(combo.output)) for combo in config.combos)
|
|
return (
|
|
str(config.radar.driver_mode),
|
|
str(config.radar.serial),
|
|
float(config.radar.sweep.start_hz),
|
|
float(config.radar.sweep.stop_hz),
|
|
int(config.radar.sweep.points),
|
|
float(config.radar.sweep.if_bandwidth_hz),
|
|
float(config.radar.sweep.power_dbm),
|
|
str(config.input_switch.driver_mode),
|
|
str(config.input_switch.driver),
|
|
int(config.input_switch.positions),
|
|
bool(config.input_switch.invert_logic),
|
|
str(config.output_switch.driver_mode),
|
|
str(config.output_switch.driver),
|
|
int(config.output_switch.positions),
|
|
bool(config.output_switch.invert_logic),
|
|
str(config.preprocess.calibration_set),
|
|
str(config.preprocess.reference_set),
|
|
combos_signature,
|
|
)
|