v0.27.2
Maintenance release: crash fixes, large performance wins, and much better error reporting. All changes are bug fixes/hardening/perf — no API changes since v0.27.1. Bundles the matching NeoQCP engine fixes.
Performance
- Pan/zoom/autoscale no longer scan the entire dataset on the GUI thread. On large series (10M×3, 0.1% visible window): min/max rescale ~17 ms → ~0.04 ms (~400×), percentile rescale ~7 ms → ~0.5 ms (~13×). Removes the jank when interacting with big spectrograms and multi-line graphs.
Stability (crash fixes)
- No more use-after-free when closing a plot (or the window) while a spectrogram/line resample is still in flight — the classic "random crash on close."
- Waterfall plots no longer race in-flight resample jobs or draw stale data on gain/offset/normalize changes.
- Providers or
set_datareturning float32 or mismatched-length arrays no longer terminate the process — invalid batches are rejected (direct calls raise; provider batches are dropped with a warning). - Re-publishing a product into the products tree no longer corrupts row bookkeeping or frees a live node.
- Function graphs no longer leak a worker thread on destruction.
Usability
- Wrong-argument calls now raise a readable
TypeErrorlisting the accepted overloads, instead of a crypticNameError: name 'SciQLopPlotsBindings' is not defined. - Non-numeric / garbage arrays raise instead of silently rendering nothing.
SciQLopPlotRange("…","dates")with an unparsable date now raises instead of producing silent NaN bounds (and its repr no longer prints a fake1970-01-01for NaN ranges).- Removing a plot no longer emits "Abstract method called" / "plottable not in list" diagnostic noise.
Build / CI
- Windows (MSVC) build fix (
Q_FUNC_INFOinstead of__PRETTY_FUNCTION__). - Data-source shape lies degrade to empty with a warning instead of asserting/aborting.