Skip to content

Wandas 0.6.0

Wandas 0.6.0 focuses on typed persistence, reproducible processing, calibration, scalability, and explicit API/schema contracts.

Highlights

  • WDF 0.4 round-trips all seven built-in Frame types with semantic dimensions, constructor state, channel metadata and calibration, represented coordinates, and display history.
  • WDF 0.4 accepts exactly format version 0.4, rejects versions 0.1–0.3 and unsupported future versions explicitly, saves Dask chunks without precomputing the complete tensor, and loads backend-backed lazy data with a documented source-file lifetime.
  • RecipePlan.save() and RecipePlan.load() use independent strict wandas.recipe schema 2 JSON artifacts for portable operation intent.
  • Per-channel calibration metadata applies known sensor coefficients lazily and survives Recipe replay and WDF round-trips.
  • The scalability and public API stability contracts distinguish chunked WDF writer behavior from the current whole-Frame AudioOperation materialization boundary.

Compatibility

WDF 0.4 intentionally provides no compatibility shim for older WDF formats. Resave an artifact with a compatible Wandas version before loading it with 0.6.0. A lazily loaded Frame retains access to its source WDF. Read the NumPy array returned by frame.data before moving, deleting, or replacing the source file. operation_history remains display-only; use a separate Recipe JSON artifact for replay.

The experimental backend-facing Frame APIs were removed without deprecation shims. Use the following migration paths:

Removed API Migration
compute() Use frame.data. A single channel no longer retains its singleton channel axis.
persist() Before changing a source, capture values = frame.data. Wandas does not expose a public Frame-detach API.
xr / to_xarray() Construct xarray or another container from frame.data plus the public axes and metadata you need. Wandas does not guarantee an xarray schema.

to_numpy() and np.asarray(frame) remain supported interoperability boundaries and return the same values, shape, and dtype as frame.data.