Skip to content

v3.20.0

Choose a tag to compare

@github-actions github-actions released this 15 Feb 06:28
· 272 commits to main since this release

v3.20.0 (2026-02-15)

✨ Features

  • manager: add reusable watch API and deprecate low-level watch transports (#273) (f0f5567)

    Introduces a thread-safe, module-level watcher API (watch, watched_variables, maybe_push, shutdown) that works both with and without the IPython extension (including non-IPython notebook environments like marimo). Refactors %watch and extension load/unload to delegate to this shared API, keeping IPython behavior consistent while adding a polling fallback when post-cell hooks are unavailable.

    This does not affect behavior for existing users of %watch in IPython notebooks, but enables new use cases for programmatic data watching in other contexts.

  • ftool: export fit parameters (values and stderr) to HDF5 or ImageTool from the right-click menu of the parameter plot (#270) (0d76dbb)

  • imagetool: support non-uniform non-display axes in multicursor plot code (#268) (8392e9f)

    Generate valid matplotlib code for multicursor selections when non-display axes are non-uniform by using mixed selection (isel for non-uniform axes, qsel for uniform axes) and correctly averaging binned non-uniform selections.

  • ftool: improve parameter merging when changing model parameters (#264) (e70e0e9)

    Changing model parameters now merges parameters more intelligently. Parameters that exist in both the old and new models are retained with their current values. Also, expressions are transferred if they can be evaluated with the new model's parameters; otherwise the computed value and bounds are

    copied instead.

  • ftool: add overlay plot (#263) (764379a)

    Adds a parameter overlay checkbox next to the parameter selector for 2D fits that plots the selected parameter on the 2D image.

  • analysis.fit: add a Shirley background option to MultiPeakModel (#258) (edcecb5)

    MultiPeakModel now supports a Shirley background.

    This also changes MultiPeakModel.eval_components to return several named background components instead of a single _bkg entry. This may require changes to user code that references the background.

🐞 Bug Fixes

  • restool: ensure fit results are computed inside the thread for dask-backed inputs (60786ae)

  • ftool: fix thread lifetime handling and possible deadlock on very fast fits (7fe75fb)

  • restool: resolved threading issues related to canceling fits and closing window while fit is running (aedf5da)

  • imagetool: suppress duplicate UI alerts for exceptions and warnings (#271) (68c2893)

    This fixes an issue where multiple alert dialogs would appear for the same error condition when creating ImageTool windows or loading workspaces, leading to a hang on Windows.

  • imagetool: allow out-of-bounds center values in RotationDialog (e677e58)

    Center coordinates are no longer clamped to the current data bounds. This lets users rotate around arbitrary points (including outside the visible coordinate range).

  • imagetool: improve server shutdown handling and timeout management (f8135cd)

  • analysis.image: make boxcar_filter compatible with dask arrays (ea80731)

  • analysis: enforce coordinate validity in filters and correlation (c699574)

    Tighten coordinate handling in gaussian filters and autocorrelation, and raises on invalid/degenerate spacing. This prevents divide-by-zero issues and makes errors explicit for constant coordinates.

  • imagetool: correct formatting of error traceback (8b90db8)

  • analysis: correctly handle dimensions of size 1 across various functions (67875c6)

  • dtool: handle data with dimensions of size 1 (5d53894)

  • interactive.utils: improve cut tolerance (histogram) handling for scalar and iterable inputs (e5e159f)

  • interactive.utils: handle singleton dimensions in array_rect (5ea9163)

  • imagetool: avoid false non-uniform axes for user _idx dims (42f073e)

    Refine ImageTool so that non-uniform axis detection so only dims created by make_dims_uniform are treated as non-uniform. This prevents accidental misclassification when users provide their own *_idx dimensions.

  • interactive: ensure spinbox value updates and validation checks are accurate (0c4e67e)

  • qsel.average: average over all dimensions when no dimension is specified (54d460b)

    DataArray.qsel.average() now averages over all dimensions when dim=None is passed to match the behavior of DataArray.mean().

  • imagetool: average coordinates when binning over non-uniform axes (bce5a66)

    When binning over non-uniform axes, coordinates associated to the non-uniform dimension were dropped instead of being

    averaged. This commit fixes that by using qsel.average() to average the coordinates along the binned dimensions.

  • qsel: drop non-numeric coordinates silently when averaging instead of raising an error (26b4b29)

⚡️ Performance

  • imagetool: micro-optimization for restoring single cursor state (09619f3)

  • itool: avoid unnecessary deep-copying of data (4ef1bd2)

  • manager: speed up closing multiple ImageTool windows (#272) (4c334a5)

  • ktool: ensure updates are smooth under rapid input parameter changes (#267) (133205e)

  • analysis.transform: disable parallel interpolation in shift with order 1 and add some parameters for further optimization (b53e89f)

    Uses serial interpolation in shift for compatibility with workflows that utilize multiprocessing, like dask. Also adds new parameters keep_dim_order and assume_sorted which further optimizes the graph for dask-based workflows.

  • ftool: cache y values for 2D data (e2c4611)

  • analysis.correlation: micro-optimization to use shallow copy (d5a88b7)

  • imagetool: micro-optimize shallow copy when updating data (5e7d4fe)

  • interactive: defer ImageTool UI updates (#262) (e2ad0e8)

    ImageTool now lazy-populates colormap and control UI to reduce startup time, and avoids auto-showing windows when loading multiple DataArrays at once. The window contents are now computed on demand.

♻️ Code Refactor

  • manager: change console toggle shortcut to Ctrl+J (9ebb92f)

  • ftool: ask for confirmation before transposing data (580c933)

[main 6d0e364] bump: version 3.19.2 → 3.20.0
3 files changed, 3 insertions(+), 3 deletions(-)