Skip to content

Changelog

Unreleased

Added

  • xrtoolz.metrics.array — Tier A array kernels (D11) for the canonical pixel metrics: mse, rmse, mae, bias, nrmse, correlation, r2_score. Tier B (xrtoolz.metrics._src.pixel) now delegates via xr.apply_ufunc rather than reimplementing the math.
  • xrtoolz.transforms.array — Tier A array kernels (D11) for the canonical Fourier entry points: fft, ifft, power_spectrum. Numpy-only computational core; Tier B (xrft-backed) is unchanged.
  • xrtoolz.calc.array — Tier A array kernels (D11) for the canonical finite-difference primitives: partial, gradient (2nd-order central, uniform spacing). Numpy-only core complementing the finitediffx-backed Tier B.
  • xrtoolz.interpolate.refine_2d — scikit-image-backed 2-D resize for bicubic/biquintic refinement; Refine(order=...) opts into this path.
  • tests/test_tier_contract.py — three-tier contract harness (Tier A reachable, Tier B numerically agrees with Tier A, Tier C numerically agrees with Tier B) for the metrics/transforms/calc pilots.
  • xrtoolz.transforms.operators — Tier C wrappers for the encoder primitives: CyclicalEncode, FourierFeatures, RandomFourierFeatures, PositionalEncoding, EncodeTimeCyclical, EncodeTimeOrdinal, TimeRescale, TimeUnrescale (#95).
  • xrtoolz.interpolate temporal helpers — resample_time(..., method="interpolate") for time upsampling and fillnan_climatology / FillNaNClimatology for climatological gap fill.

Removed

  • Value-resampling primitives moved out of xrtoolz.geo into the new xrtoolz.interpolate package (D8/D12, Epic F3). No deprecation shim — the package is pre-1.0 and has no external users.
  • xrtoolz.geo.{fillnan_spatial, fillnan_temporal, fillnan_rbf, resample_time, coarsen, refine, bin_2d, histogram_2d, points_to_grid, Grid, Period, SpaceTimeGrid} → xrtoolz.interpolate.<same-name>
  • xrtoolz.geo.operators.{FillNaNSpatial, FillNaNTemporal, ResampleTime} → xrtoolz.interpolate.operators.<same-name>

Added

  • xrtoolz.interpolate — value-resampling package, sub-organized by source/target structure (gap_fill, grid_to_grid, resample, binning, points_to_grid) with placeholder submodules (coord_remap, smooth, downscale, grid_to_points) for upcoming work.
  • xrtoolz.interpolate.operators — Bin2D, Coarsen, FillNaNRBF, FillNaNSpatial, FillNaNTemporal, Histogram2D, PointsToGrid, Refine, ResampleTime.
  • xrtoolz.inference — Layer-1 wrappers for trained ML models (D4, Epic F4): ModelOp (framework-agnostic, duck-typed dispatch on a configurable method, xarray↔array marshalling, leading non-feature dims supported by flattening into a single (N, F) model call), plus SklearnModelOp and JaxModelOp thin subclasses. sklearn, jax, equinox, and torch are never imported at top level — backend imports are lazy. Not auto-exported from xrtoolz; opt-in via from xrtoolz.inference import ModelOp.

Deprecated

  • xrtoolz.geo.{cyclical_encode, fourier_features, positional_encoding, random_fourier_features, lat_90_to_180, lat_180_to_90, lon_180_to_360, lon_360_to_180, encode_time_cyclical, encode_time_ordinal, time_rescale, time_unrescale} — moved to xrtoolz.transforms.encoders (D8). The legacy paths still resolve via PEP-562 with a DeprecationWarning for one release; removal scheduled for the next minor.

0.4.0 (2026-10-30)

⚠ BREAKING CHANGES

  • the xrtoolz-grad (xrgrad) distribution is gone, with no shim (PL-Q5): use from xrops import grad.
  • xrops: the xrtoolz-core distribution and the xrcore import are gone, with no shim (PL-Q5): use from xrops import Operator and from pipekit import Signature.

Code Refactoring

  • delete xrtoolz-grad; xrops.grad is the calculus (#382) (82f6fa7)
  • xrops: fold xrcore into xrops._src and delete xrtoolz-core (#380) (756fc30)

0.3.0 (2026-10-29)

⚠ BREAKING CHANGES

  • xrops: knn regridding, kde_to_grid, xrops.learn and the decomposition presets need pip install 'xrtoolz-ops[sklearn]'.
  • the xrtoolz-einx (xreinx) and xrtoolz-sklearn (xrsklearn) distributions are gone, with no shim (PL-Q5).

Code Refactoring

  • delete xrtoolz-einx and xrtoolz-sklearn (#376) (6b51221)
  • xrops: a light base install without einx or scikit-learn (#377) (2b9bd37)

0.2.0 (2026-10-29)

⚠ BREAKING CHANGES

  • products: install xrtoolz-products and import xrproducts; xrreader no longer exists, and the cache env var is XRPRODUCTS_CACHE.

Code Refactoring

  • products: rename xrtoolz-reader to xrtoolz-products (import xrproducts) (#372) (b1e642d)

0.1.0 (2026-10-29)

⚠ BREAKING CHANGES

  • xrops: import the operators from xrops (pip install xrtoolz-ops); xrtoolz.* paths, xrtoolz.Operator/Signature/Sequential and the calc, einx, signature and geo metric/encoder shims are gone.

Code Refactoring

  • xrops: create xrtoolz-ops (import xrops) and a code-free xrtoolz umbrella (#368) (d654087)

0.0.6 (2026-10-27)

Bug Fixes

  • metrics: score a single-member ensemble CRPS as absolute error (#352) (2f6318d)

0.0.5 (2026-10-05)

Features

  • metrics: Cartesian + explicit-Coriolis physical-balance metrics (#339) (c14280b), closes #323
  • ocn: thread dims / geometry / explicit Coriolis through kinematics (#338) (c8429bd), closes #322
  • viz: HovmollerPanel — time × spatial-axis section (#344) (802f59e), closes #120
  • viz: projection-free CartesianMapPanel + EnergyTimeSeriesPanel (#341) (57dc910), closes #325
  • viz: SpatialDiffPanel — (pred, ref, pred - ref) snapshot triptych (#342) (b19e725), closes #117
  • viz: TimeSeriesErrorPanel — multi-method skill scores over time (#343) (5eb4bb4), closes #118

0.0.4 (2026-09-24)

Features

  • geo: add vector ↔ raster bridge (vectorize, rasterize, footprint) (#311) (b095ee3)

0.0.3 (2026-09-18)

Features

  • atm: met diagnostics and atm.gas.ch4 column primitives (#306) (f3f35d4)
  • atm: open_wrfout — WRF-ARW NetCDF to CF Dataset (#307) (7a37aa8)
  • geo: utm_crs_for + local_frame — UTM zone from an origin and a metric local frame (#302) (1588dd3)
  • interpolate: regrid_conservative — area-weighted regrid onto an arbitrary rectilinear target (#305) (201230b)
  • interpolate: remap_axis with per-column source coordinates and extrapolation policy (#304) (4a47b6f)
  • reader: add LocalL2Source with TROPOMI / EMIT / GHGSat methane L2 openers (#303) (d04768e)

0.0.2 (2026-08-17)

Features

  • fold xrreader into the workspace as xrtoolz-reader (#259) (aa0859b)
  • geo,interpolate: add spatial_mosaic, reproject_match and Delaunay swath gridding (#260) (e80663c)
  • grad,ocn: mixed geometry, time derivatives, periodic boundaries, 3-D advection (#282) (afef8a3)

0.0.1 (2026-08-13)

Features

  • split xrtoolz into a uv workspace (core, grad, einx, sklearn) (#252) (f37a532)

0.1.0 (2026-06-10)

⚠ BREAKING CHANGES

  • xrtoolz.data and xrtoolz.types are removed; import the readers and the typed request/Variable API from xrreader / xrreader.types.
  • flip basis encoders + dm_test to DataArray-native (PR δ) (#217)
  • remove public array tier, collapse to two-tier contract (#215)
  • flip transforms + geo single-field primitives to DataArray-positional (PR γ) (#209)
  • flip metrics + interpolate primitives to DataArray-positional (PR β) (#208)

Features

  • cds: pin insitu land profile to dataset version 3_0_0 (370bb1d)
  • core: xarray-aware Operator with DataTree dispatch (PR α) (#206) (f16ddaa)
  • einx: implement xrtoolz.einx labeled named-tensor bridge (PR 1/3) (#218) (c2340a7)
  • flip basis encoders + dm_test to DataArray-native (PR δ) (#217) (7bcbbdd)
  • flip metrics + interpolate primitives to DataArray-positional (PR β) (#208) (90d4173)
  • flip transforms + geo single-field primitives to DataArray-positional (PR γ) (#209) (9fab49f)
  • metrics,geo: nrmse_score + get_dataset_resolution (OB-1.5, closes #136) (#210) (16b322d)
  • metrics: instance-segmentation matching + AP / F1 (#216) (bad16a3)

Code Refactoring

  • move data + types to xrreader (P0 xrtoolz side) (#225) (8384e25)
  • remove public array tier, collapse to two-tier contract (#215) (0c39b88)

0.0.8 (2026-05-22)

⚠ BREAKING CHANGES

  • rename xr_toolz → xrtoolz, depend on pipekit for composition core (#203)

Features

  • geo: add 1-D wavelet analysis (Torrence-Compo + Liu rectified power) (#197) (4aeabfe)
  • rename xr_toolz → xrtoolz, depend on pipekit for composition core (#203) (3e3d8a4)

Bug Fixes

  • docs: repair api/core.md autodoc + migrate notebook imports (#205) (14792ab)

0.0.7 (2026-05-09)

Features

  • geo: add 2-D Morlet wavelet wavenumber spectra (#176) (834ecfc)
  • geo: add RegionSpec registry and regionmask-backed regional subsetting (#173) (8aab417)
  • geo: add rename_to_cf_standard_names / rename_from_cf_standard_names + operators (#172) (49f03e9)
  • interpolate: add biharmonic NaN inpainting (#189) (4f10dbb)
  • interpolate: add cosine-latitude conservative coarsen (#186) (cf01cfc)
  • interpolate: add grid-to-points sampling (#191) (cafeea5)
  • interpolate: add kNN IDW interpolation (#183) (6752c97)
  • interpolate: add mask morphology cleanup operations (#188) (b6e4674)
  • interpolate: add NaN-aware Gaussian smoothing (#190) (0d0c596)
  • interpolate: add skimage-backed 2D refine (#187) (09b00cb)
  • interpolate: add sklearn-backed KDE points-to-grid (#184) (62961b6)
  • interpolate: add temporal interpolation and climatology gap fill (#185) (8c6fcdf)
  • metrics: add composite RMSE/PSD helpers and 2-D resolved-scale summary (#175) (95ddab0)
  • transforms, viz: add rotary spectrum + RegionScoreBarPanel + RotaryPolarizationPanel (#174) (aa3bd75)
  • transforms: add KE/enstrophy spectral flux + integral scale, slope fit, compensated spectrum (#171) (e8135f8)

0.0.6 (2026-05-08)

Features

  • core: signature protocol + sequential.summary / graph.summary (#140) (b6d1996)
  • geo: add decode_cf_time, validate_time, check_dataset_coords + operators (#169) (8307ee8)
  • interpolate: add FIR filters and along-track wavelength bandpass (#166) (507355e)
  • interpolate: add Laplacian NaN gap fill primitive (#170) (7e298ae)
  • metrics: add gap-tolerant segmented along-track PSD score (#165) (e6e82ba)
  • metrics: add ODC-1.4 residual binning, regional scoring, and DM test (#168) (db8e6c0)
  • ocn: make lwe optional in calculate_ssh_alongtrack + document MDT-regrid pattern (#167) (852e1b7)
  • transforms: sklearn integration (SklearnOp, accessor, nan-mask) (#139) (690363f)

0.0.5 (2026-05-05)

Features

  • foundations bundle — operators, viz utilities, metric helpers (#131) (79c24fc)
  • viz: v1.5 PSD plot panels + savefig/show on all panels (#129) (1b34e1d)

0.0.4 (2026-05-05)

Features

  • core: operator combinators + ocean tutorial notebooks (#115) (b1e4cb3)
  • metrics: add V1.3 FrequencyBandSkill + V1.4 demo + pipeline ops (#112) (0d6f3f3)

0.0.3 (2026-05-04)

Features

  • interpolate: coord_remap submodule (F3.2) (#110) (9a5ab15)
  • interpolate: smooth submodule (F3.3) (#109) (d331b4c)
  • metrics: add v1.1 SkillByLeadTime + v1.2 EvaluateByRegion (#103) (19741d2)
  • metrics: add v4 process-evaluation (physical metrics + budgets) (#106) (b46582a)
  • metrics: land V2 data-representation metrics (structural / probabilistic / distributional / masked) (#104) (b64ac6f)
  • viz: add v6 validation panels (viz.validation) (#107) (263fbdf)

0.0.2 (2026-04-30)

Features

  • inference: modelop + Sklearn/Jax wrappers (Epic F4) (#100) (e00db49)
  • transforms: tier c encoder operators (#95) (#99) (a28f15f)

0.0.1 (2026-04-30)

Features

  • add xrtoolz.types primitives and xrtoolz.data downloaders (#8) (06d2e7b)
  • data: aemet OpenData adapter + Station type + GeoParquet archive (#11) (b3db90f)
  • data: cds in-situ surface-land / surface-marine adapter + archive (#12) (fc80abb)
  • seed xrtoolz with core, geo primitives, ocn physics, and L1 operators (#7) (424ec89)
  • transforms: xrtoolz.transforms + utils.XarrayEstimator (#15) (fd92ccd)
  • xrtoolz.calc finite-diff primitives + ocn.kinematics refactor (#14) (a828788)

Changelog

All notable changes to this project will be documented in this file.

See Conventional Commits for commit guidelines.