Refactor cache validation and optimize alignment wizard incremental updates
- Extract cache mismatch logic into reusable cache_mismatch_reasons() function for cleaner validation and consistent miss reporting - Expose memory_budget_bytes() for external callers (aligned exporter) - Optimize rebuild_stack() with incremental layer updates when only one angle parameters change, avoiding full reprojection overhead - Remove unused seed_per_angle parameter from alignment wizard - Simplify cached_rf_image() DC masking with cleaner early exit logic - Clean up internal state tracking with explicit origin caching Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
+25
-2
@@ -2,8 +2,8 @@
|
||||
|
||||
from PyQt6.QtCore import Qt
|
||||
from PyQt6.QtWidgets import (
|
||||
QDoubleSpinBox, QFormLayout, QFrame, QGroupBox, QLabel, QScrollArea,
|
||||
QSizePolicy, QVBoxLayout, QWidget,
|
||||
QComboBox, QDoubleSpinBox, QFormLayout, QFrame, QGroupBox, QLabel,
|
||||
QScrollArea, QSizePolicy, QVBoxLayout, QWidget,
|
||||
)
|
||||
|
||||
from sras_format import CH1_IDX, CH3_IDX, CH4_IDX
|
||||
@@ -85,6 +85,29 @@ def _make_dspin(lo: float, hi: float, decimals: int, *, suffix: str = "",
|
||||
return spin
|
||||
|
||||
|
||||
def _combo(items=(), *, min_chars: int = 10) -> QComboBox:
|
||||
"""A combo box whose size hint does not depend on its longest entry.
|
||||
|
||||
By default a QComboBox asks for enough width to show its widest item. These
|
||||
hold descriptive phrases, and the side panels are fixed-width — in a scroll
|
||||
area with the horizontal scrollbar off (`_scroll_panel`) an unconstrained
|
||||
hint pushes the inner widget past the panel and everything on the right,
|
||||
including the hint text, is silently clipped instead of scrolling.
|
||||
|
||||
*items* is a sequence of (label, data) pairs, or of plain labels.
|
||||
"""
|
||||
combo = QComboBox()
|
||||
combo.setSizeAdjustPolicy(
|
||||
QComboBox.SizeAdjustPolicy.AdjustToMinimumContentsLengthWithIcon)
|
||||
combo.setMinimumContentsLength(min_chars)
|
||||
for item in items:
|
||||
if isinstance(item, tuple):
|
||||
combo.addItem(item[0], item[1])
|
||||
else:
|
||||
combo.addItem(item)
|
||||
return combo
|
||||
|
||||
|
||||
def _axes_extent(x_axis, y_axis, dx: float, dy: float) -> list[float]:
|
||||
"""Matplotlib imshow extent with half-pixel margins, Y flipped so row 0
|
||||
renders at the top."""
|
||||
|
||||
Reference in New Issue
Block a user