Skip to content

v0.9.9

Latest

Choose a tag to compare

@brendancol brendancol released this 05 May 19:35
· 28 commits to main since this release
f42106b

Version 0.9.9 - 2026-05-05

Bug fixes and improvements

  • Add geotiff edge-case tests and integer-coord fallback (#1482) (#1492)
  • Use synchronous dask scheduler for different-CRS merge parity test (#1495)
  • Fetch COG tiles concurrently in HTTP path to mask RTT (#1487)
  • Geotiff polish: validation, caching caps, parallelism thresholds, memory guards (#1488) (#1493)
  • Round-trip transform, crs, and tag metadata through to_geotiff/open_geotiff (#1484) (#1494)
  • Tighten geotiff reader: partial-tile shape check, ModelTransformation rotation guard (#1486) (#1491)
  • Add geotiff writer test matrix (#1483) (#1490)
  • Stream tile writes per dask chunk segment to bound peak memory in to_geotiff (#1485) (#1489)
  • Add regression test for GPU pred=3 multi-sample TIFFs (#1479) (#1481)
  • Make cubic resample prefilter explicit so chunk seams stay sub-eps (#1464) (#1478)
  • Preserve input float dtype through resample() (#1467) (#1476)
  • Resample polish: fix cubic depth comment, tighten NaN threshold, add edge tests (#1475)
  • Fix dask aggregate boundary contamination and clean up bookkeeping (#1469) (#1477)
  • Support 3D rasters, expose nodata, document target_resolution tuple in resample (#1466) (#1474)
  • Cover cupy median/mode, dask+cupy, integer input, target_resolution tuple in resample tests (#1470) (#1473)
  • Refresh transform and nodata attrs on resample output (#1465) (#1472)
  • Inline dask aggregate kernel in resample (#1463) (#1468)
  • Emit fresh grid metadata and propagate _FillValue in reproject (#1458) (#1462)
  • Polish reproject/merge docstrings and cover Inf and parameter edge cases (#1459) (#1461)
  • Batch CuPy reductions and drop redundant copies in reproject (#1460)
  • Add transform_precision parameter to merge() (#1452) (#1456)
  • Preserve non-spatial coords through reproject() and merge() (#1455)
  • Guard _apply_vertical_shift against non-finite coords; add vertical CRS tests (#1453)
  • Honor per-raster nodata sentinels in merge() (#1448) (#1449)
  • Preserve input attrs through reproject() and merge() (#1446)
  • Fix dask reproject dtype and same-CRS dask merge (#1450)
  • Validate raster inputs in reproject public APIs (#1431) (#1432)
  • Add memory guard and scalar validation to generate_terrain (#1443) (#1444)
  • Validate scalar parameters in hydro public APIs (#1427) (#1428)
  • Validate mannings_n DataArray values in flood (#1437) (#1438)
  • Add _validate_raster on secondary DataArray args in hydro (#1425) (#1426)
  • Validate grid/bounds/precision params in reproject (#1433) (#1434)
  • Validate cellsize in hydro public APIs (#1429) (#1430)
  • Validate pathfinding inputs and cap waypoints (#1439) (#1440)
  • Validate raster/mask inputs in polygonize (#1441) (#1442)
  • Add memory guard to flow_direction_mfd numpy/cupy backends (#1423) (#1424)
  • Reject NaN/Inf in reproject scalar inputs (#1435) (#1436)
  • Lazy assembly for hand_mfd dask path (#1416) (#1417)
  • Return NaN from glcm_texture angle=None when no angle has valid pairs (#1408) (#1409)
  • Use ground distance for sky_view_factor horizon angle (#1407) (#1410)
  • Exclude centre cell from morph_erode/dilate when kernel[centre]==0 (#1397) (#1398)
  • Use sized slice in dask morph chunk writeback (#1399) (#1400)
  • Merge sink_d8 labels across dask tile boundaries (#1394) (#1395)
  • Reject complex dtypes in _validate_raster() (#1384) (#1387)
  • Reject underflowing sigma_spatial in bilateral() (#1390) (#1392)
  • Use int64 row_ptr in _build_row_csr_numba (#1388) (#1391)
  • Reject mixed-backend arrays in validate_arrays() (#1383) (#1386)
  • Reject non-positive inputs in wpm() (#1382) (#1385)
  • Guard _idw knearest against unbounded grid x k allocation (#1377) (#1380)
  • Validate raster dtype in convolve_2d() (#1389) (#1393)
  • Reject all-zero rasters in mesh_utils.create_triangulation (#1378) (#1381)
  • Validate dtypes per band in mahalanobis() (#1376) (#1379)
  • Guard owa() against unbounded criteria stack (#1370) (#1375)
  • Guard spline() TPS against unbounded memory allocations (#1372) (#1374)
  • Reject n_samples<=0 in mcda sensitivity (#1371) (#1373)
  • Guard flow_path_d8() against unbounded memory allocations (#1364) (#1368)
  • Guard flow_path_mfd() against unbounded memory allocations (#1365) (#1369)
  • Guard flow_path_dinf() against unbounded memory allocations (#1363) (#1367)
  • Guard snap_pour_point_d8() against unbounded memory allocations (#1362) (#1366)
  • Guard sink_d8() against unbounded memory allocations (#1356) (#1361)