Skip to content

Wandas 0.7.0

Wandas 0.7.0 is a feature release centered on typed spectral results, explicit WDF and Recipe contracts, and stronger validation around immutable Frame state. It also expands the executable documentation and browser-oriented validation workflow. Review the compatibility table before upgrading from 0.6.x.

Highlights

  • Dedicated CoherenceFrame, CrossSpectralFrame, and TransferFunctionFrame types now own pairwise spectral quantities, ordered channel-pair metadata, quantity-specific properties, plotting, and WDF round-trips.
  • Corrected FFT, Welch, cepstrum, IFFT, N-octave, and level-processing behavior keeps released Recipe meanings replayable while current public calls emit the corresponding current Recipe contracts.
  • Spectral NumPy properties follow the canonical Frame.data channel shape, and independent numerical oracles cover inverse spectral transforms.
  • Built-in Frame, WDF, and Recipe extension contracts are checked for exact public type coverage, codec ownership, Recipe ownership, and deterministic registration order while preserving Dask-lazy construction.
  • The executable Learning Path, tutorial, documentation contracts, and Pyodide browser smoke tests now provide a broader release-validation surface.

Changes

  • Issue #365 and PR #382: correct IFFT normalization while preserving the released Recipe v1 amplitude scaling and emitting Recipe v2 for current calls.
  • Issue #368 and PR #386: distinguish linear RMS, calibrated physical quantities, reference-relative dB, and sound levels; preserve released Recipe v1 numerics and metadata while current level calls emit Recipe v2.
  • Issue #397 (parent #391): preserve released Recipe v1 replay and emit Recipe v2 for corrected FFT, Welch, and cepstrum calls.
  • Issue #398: make N-octave synthesis use authoritative FFT-size provenance and validate its ratio conventions at the Operation boundary.
  • Issue #400 and PR #417: align materialized spectral properties with the public Frame channel-axis shape.
  • Issue #401, Issue #406, and PR #419: define pairwise spectral contracts and add typed coherence, CSD, and transfer-function Frames.
  • Issue #402 and PR #418: add independent ISTFT numerical-oracle coverage.
  • Issue #411 and PR #416: split fast CI from full compatibility validation and close ref-routing and validation gaps.
  • Issue #424: keep direct CoherenceFrame construction structural and Dask-lazy without scanning, clipping, or replacing supplied values.
  • Issue #430 and PR #433: replace lazy Operation import-side-effect registration with explicit module/attribute providers and deterministic collision and resolution behavior.
  • PR #420, PR #421, PR #422, and PR #423: improve the executable tutorial, organize Recipe learning materials, and add robust Learning Path internationalization validation.
  • PR #431, PR #432, PR #434, PR #435, and PR #436: expand Japanese and English Learning Path translations and publish direct entry points for both languages.
  • Commit 1c9ab6f: add shared built-in Frame, WDF, and Recipe contract coverage.

Compatibility

WDF remains format version 0.4 and Recipe JSON remains schema version 2. Readers continue to reject unsupported versions explicitly. The following public or serialized meanings change in this 0.x feature release; the linked issues record the numerical-correctness or persisted-meaning decisions.

Affected surface or artifact Classification Deprecation start Replacement or migration Removal/change version Exception reason and decision link
wandas.processing.NOctSynthesis constructor Stable None Pass the positive source n_fft; SpectralFrame.noct_synthesis() supplies it automatically. 0.7.0 Numerical-correctness exception approved by Issue #398.
wandas.spectral.noct_synthesis Recipe v1 Serialized None Existing v1 payloads replay through the legacy meaning; new public calls emit version 2. 0.7.0 Persisted numerical meaning is kept separate from corrected current behavior; Issue #398.
wandas.audio.fft, wandas.audio.welch, and wandas.audio.cepstrum Recipe v1 Serialized None Existing v1 payloads replay through the released meaning; new public calls emit version 2. 0.7.0 Persisted numerical meaning is kept separate from corrected current behavior; Issue #397, parent #391.
wandas.spectral.ifft Recipe v1 and SpectralFrame.ifft() Stable / Serialized None Existing v1 payloads replay the released amplitude scaling; new calls emit version 2 and use the corrected inverse normalization. 0.7.0 Numerical correctness is corrected without reinterpreting persisted v1 payloads; Issue #365, PR #382.
wandas.audio.rms_trend and wandas.audio.sound_level Recipe v1 Stable / Serialized None Existing v1 payloads replay their released numerics and metadata; new calls emit version 2 with corrected calibrated numerics and physical-unit/reference metadata. 0.7.0 Acoustic quantity correctness is corrected without reinterpreting persisted v1 payloads; Issue #368, PR #386.
SpectralFrame and SpectrogramFrame spectral NumPy properties Stable None Single-channel properties follow frame.data without a leading singleton channel axis; multi-channel properties retain the channel axis. 0.7.0 Public shape consistency correction; Issue #400.
ChannelFrame.coherence(), .csd(), and .transfer_function() Stable / Serialized None Use CoherenceFrame, CrossSpectralFrame, and TransferFunctionFrame; existing Recipe v1 payloads retain their released contracts, while new calls emit current versions. 0.7.0 Quantity meaning is represented by exact Frame type and typed pair state; Issue #406.
Direct CoherenceFrame construction and WDF decoding Stable / Serialized None Applications that require finite [0, 1] coherence should validate external values before construction; ChannelFrame.coherence() continues to produce mathematically valid values. 0.7.0 Structural construction preserves Dask laziness and supplied data/graph identity without a full-value scan; Issue #424.
register_lazy_operation() Stable None Supply the required keyword-only attribute_name, and remove module-level register_operation() calls from lazy implementation modules. 0.7.0 The former two-argument import-side-effect form is replaced by explicit providers so collisions and failed resolution are deterministic; Issue #430, PR #433.