Skip to content

Releases: xarray-contrib/xarray-spatial

v0.10.17

Choose a tag to compare

@brendancol brendancol released this 17 Jul 19:14
418f775

Bug fixes and improvements

  • dependencies: decouple datashader; the examples extra now uses matplotlib, geopandas, and shapely, and the example notebooks use xrspatial's own rasterize (#3641)
  • pathfinding: raise on infeasible tours and honor snap in multi_stop_search optimize_order (#3654)
  • pathfinding: add multi_stop_search Examples, fix the sourcecode directive, and document NaN impassability (#3662)
  • pathfinding: extend asv benchmarks to dask, cupy, and multi_stop_search (#3648)
  • pathfinding: add tests for dask edge handling, degenerate shapes, and parameter branches (#3665)
  • convolution: close backend, boundary, and metadata test coverage gaps (#3621)

Thanks

Thanks to @Melissari1997 for decoupling datashader from xarray-spatial (#3641).

v0.10.16

Choose a tag to compare

@brendancol brendancol released this 09 Jul 20:55
275240f

New features

  • bump: add a name parameter to name the output DataArray (#3610)
  • pathfinding: accept Datasets in a_star_search and add type hints and defaults (#3653)

Bug fixes and improvements

  • pathfinding: validate barriers, search_radius, start/goal points, and dims (#3664)
  • pathfinding: stitch multi_stop_search segments lazily on dask backends (#3666)
  • pathfinding: route the HPA* coarse grid without value barriers (#3659)
  • pathfinding: reset the dask graph-token name on outputs (#3656)
  • pathfinding: reuse symmetric costs in optimize_order instead of running reverse A* searches (#3667)
  • pathfinding: fix multi_stop_search on the cupy and dask+cupy backends (#3637)
  • pathfinding: return all-NaN from HPA* when a segment cannot be refined (#3638)
  • pathfinding: map points to the nearest cell center and reject out-of-bounds points in _get_pixel_id (#3635)
  • pathfinding: add golden-value reference tests for a_star_search (#3663)
  • pathfinding: drop the unused has_dask_array import and fix isort ordering (#3658)
  • kde: fix dask backends dropping points on descending-coordinate templates (#3633)
  • kde/line_density: drop non-finite points and segments (#3636)
  • convolution: validate kernel and agg inputs (#3624)
  • convolution: align the dask output dtype with numpy and cupy (#3622)
  • convolution: parallelize the convolve_2d numpy kernel (#3616)
  • convolution: document the cross-correlation convention and pin it with a test (#3619)
  • convolution: fill docstring gaps and fix stale examples (#3620)
  • convolution: drop an unused import and fix isort ordering (#3613)
  • bump: validate agg, count, and spread inputs (#3614)
  • bump: correct the height_func contract and count default in the docstring (#3607)
  • bump: vectorise _partition_bumps to fix the O(n_chunks x count) dask graph build (#3617)
  • bump: fix isort import-ordering drift (#3611)
  • geotiff: pad category_names to pixel indices in _parse_rat for sparse RATs (#3643)
  • geotiff: reject 0D/1D DataArray in to_geotiff with a clear "Expected 2D or 3D" error (#3604)
  • geotiff: remove the previous file's PAM sidecar when to_geotiff overwrites a path (#3599)
  • geotiff: stop a non-finite RAT value in a PAM sidecar from crashing open_geotiff (#3594)
  • geotiff: accumulate color_ramp stats during the streaming dask write (#3600)
  • geotiff: document PAM categorical sidecar behavior and category attrs (#3598)
  • geotiff: fix the to_geotiff docstring tier for extra_tags pass-through (#3596)
  • geotiff: add asv benchmark coverage for read/write paths (#3603)
  • geotiff: add tests for PAM sidecar reader edges and symbology dask stats (#3605)
  • geotiff: fix isort drift in the writer and symbology test (#3589)
  • sky_view_factor: aim rays in ground azimuth space (#3634)
  • bilateral: honor the boundary parameter on the cupy backend (#3632)
  • mahalanobis: add Examples and document NaN propagation (#3581)
  • mahalanobis: test Inf input, all-NaN, and degenerate shapes (#3584)
  • mahalanobis: drop an unused import and fix isort drift (#3582)
  • pycnophylactic: fix a crash on all-NaN zones or unmatched zone ids (#3586)
  • cost_distance: add a backend statement and Examples to the docstring (#3642)
  • templates: cap eager coordinate allocation on the from_template dask path (#3585)
  • templates: test tuple chunks and the explicit-shape chunk-cap message (#3580)
  • templates: sort imports to match the isort config (#3578)
  • analytics: remove the unused xrspatial.analytics module (#3602)
  • ci: pin libjxl to 0.11.* in the geotiff-corpus and cog-validator envs (#3639)
  • docs: point the README AI-review link to the xarray-spatial-skills repo (#3669)

Thanks

Thanks to @Melissari1997 for code and test contributions to this release.

v0.10.15

Choose a tag to compare

@brendancol brendancol released this 29 Jun 21:11
76ebd7e

Bug fixes and improvements

  • terrain: map the generate_terrain dask backends over an empty skeleton so from_template grids no longer drop out of the task graph (#3575)

v0.10.14

Choose a tag to compare

@brendancol brendancol released this 29 Jun 04:22
6383ead

New features

  • templates: add regional templates to from_template for Africa, Asia, the Americas, and Oceania (#3553)
  • templates: add global-projection templates to from_template (web_mercator, wgs84/latlon, equal_earth) (#3550)
  • templates: accept explicit height/width and produce dask-aligned extents in from_template (#3567)
  • templates: add coregister and neighborhood-friendly dask chunks to from_template (#3562)
  • accessor: expose multi_stop_search on the .xrs DataArray and Dataset accessors (#3564)

Bug fixes and improvements

  • preview: recompute the res attribute for downsampled preview() output (#3570)
  • rasterize/kde/line_density: set output attrs['res'] when the grid resolution changes (#3572)
  • classify: return all-NaN instead of crashing on all-non-finite input (#3548)
  • proximity: match the cKDTree max_distance check to the brute-force float32 convention (#3555)
  • templates: guard dask grids against task-graph explosion (#3559)
  • templates: skip the cell cap for lazy dask grids when chunks is supplied (#3556)
  • terrain: speed up the generate_terrain numpy backend with a fused parallel kernel (#3566)
  • templates: add type hints to from_template and list_templates (#3543)
  • interpolate: add IDW examples and backend-support notes to the docs (#3547)
  • templates: fix a stale UTM zone in the from_template FRA example (#3544)
  • benchmark: guard the datashader import in the rasterizer benchmark (#3560)
  • geotiff: cover symbology sidecars on dask, dask+GPU, 3D single-band, and color_ramp_range (#3546)
  • templates: cover single-pixel/strip grids and resolution-tuple validation in tests (#3540)
  • curvature: fix isort import-ordering (#3568)

v0.10.13

Choose a tag to compare

@brendancol brendancol released this 26 Jun 18:26
5da5062

New features

  • geotiff: write continuous-raster symbology sidecars (.qml + PAM statistics) from to_geotiff (#3537) (#3538)
  • templates: add list_templates() to discover from_template names (#3536)
  • templates: add major world cities as bounding-box templates in from_template (#3534)
  • fire: accept m/min spread rate in fireline_intensity by default (#3527) (#3529)
  • hydrology: make routing the sole public hydrology API surface (#3528) (#3530)
  • accessor: add coregister=True to .xrs.rasterize (#3492) (#3493)

Bug fixes and improvements

  • flood: fix float32 dtype leak in flood_depth/curve_number_runoff dask backends (#3499) (#3509)
  • flood: fix dask backends emitting float32 output for float32 input (#3498)
  • flood: make mannings_n DataArray validation lazy-safe (#3503) (#3507)
  • flood: fix E305 and collapse utils import (#3504)
  • flood: add missing reference entries, examples, and backend notes (#3502)
  • binary: output float32 on all backends (#3514)
  • binary: type the dask+cupy meta so the lazy dtype matches float32 (#3508) (#3513)
  • geotiff: stop a short-row PAM RAT from crashing open_geotiff (#3522)
  • geotiff: add Examples section to to_geotiff docstring (#3521)
  • geotiff: cover categorical PAM sidecar round-trip on dask and GPU write paths (#3518) (#3519)
  • geotiff: join backslash-continued import in test (isort) (#3517)
  • templates: use CF Conventions metadata instead of crs_units/crs_name (#3532)
  • templates: fill all-NaN templates in generate_terrain (numpy/cupy) (#3526)
  • templates: honor requested resolution exactly in from_template() (#3494) (#3495)
  • classify: fix stale example outputs and add missing examples (#3516)
  • classify: cover all-NaN degenerate input across classifiers (#3515)
  • classify: document num_sample=None in natural_breaks docstring (#3505)
  • fire: add Examples sections and backend-support notes to docstrings (#3512)
  • fire: add Inf/-Inf regression tests (#3500)
  • multispectral: test vegetation_roughness ndvi on dask+cupy backend (#3497)

v0.10.12

Choose a tag to compare

@brendancol brendancol released this 25 Jun 15:07
ada7d9b

New features

  • templates: add from_template() for empty study-area DataArrays over common regions (#3484) (#3487)
  • accessor: add .xrs.validate() to check a raster against the xarray-spatial contract (#3486)
  • accessor: add a categorized repr to the .xrs accessor (#3476) (#3477)
  • accessor: forward per-tool repr to the accessed tool (#3478) (#3479)
  • interpolation: accept GeoDataFrames and expose on the .xrs accessor with coregister (#3481)
  • rasterize: support string/categorical columns with QGIS-visible labels (#3483)

Bug fixes and improvements

  • proximity: fix EUCLIDEAN proximity/allocation/direction dropping targets at exact max_distance (#3443)
  • perlin: preserve input x/y coordinates on the output (#3470)
  • perlin: preserve input dtype on the dask backends (#3471)
  • perlin: fix dask OOM by dropping a redundant dask.persist (#3469) (#3473)
  • perlin: document the name parameter in the docstring (#3468)
  • perlin: document name param, float-dtype requirement, and ValueError (#3467)
  • perlin: drop unused not_implemented_func import, fix isort wrap (#3466)
  • perlin: add test coverage for params, degenerate shapes, and metadata (#3472)
  • perlin: fix stale test_perlin coords assertion after coords preservation (#3489)
  • generate_terrain: preserve caller coords/res/crs (#3474) (#3475)
  • least_cost_corridor: propagate friction geo-attrs (#3446) (#3449)
  • corridor: validate matching shapes for precomputed surfaces (#3447)
  • corridor: add strip, cross-backend, param, and metadata test coverage (#3448)
  • fire: add test coverage for dask+cupy dispatch and metadata preservation (#3444)

v0.10.11

Choose a tag to compare

@brendancol brendancol released this 22 Jun 13:51
4108b32

Bug fixes and improvements

  • classify: align natural_breaks parameter order with sibling classifiers (#3418)
  • multispectral: propagate input dims/coords through true_color() (#3429) (#3434)
  • multispectral: fix nbr() docstring parameter name to match signature (swir2_agg) (#3435)
  • multispectral: remove unused import and fix import ordering (#3428) (#3432)
  • multispectral: add test coverage for true_color edges and evi/savi validation (#3436)
  • diffusion: drop unused import, sort imports (#3421) (#3423)
  • diffusion: add test coverage for cupy/dask+cupy, reflect boundary, and edge shapes (#3424)
  • disaggregate: fix limiting_variable silently losing a zone's value (#3403) (#3414)
  • disaggregate: vectorize the zone-membership loop (#3408) (#3420)
  • dasymetric: add test coverage for metadata, 1x1, Inf weight, 3-class limiting_variable (#3419)
  • dasymetric: clean up lint (F401, E128, isort) (#3411)
  • classify: keep the large-array sampler O(num_sample) in host memory (#3416)
  • classify: add edge-case and error-path test coverage (#3417)
  • classify: remove unused import and fix isort ordering (#3405)
  • morphology: remove unused imports and dead local, fix import order (#3413)
  • morphology: skip the memory guard for lazy dask inputs (#3401) (#3410)
  • morphology: add missing accessor methods (#3409)
  • morphology: add test coverage for edge inputs (Inf, all-NaN, strip, integer) (#3415)
  • viewshed: add tests for 1x1, all-NaN, and Inf-terrain edge cases (#3425) (#3426)
  • proximity: match GPU max_distance precision to the CPU brute-force (#3389) (#3391)
  • proximity: fix isort import-ordering drift (#3393)
  • proximity: cover Dataset input for proximity/allocation/direction (#3390)
  • fire: declare float32 dtype on the dask+numpy backend (#3394) (#3396)
  • fire: drop dead code and fix import ordering (#3395) (#3397)
  • aspect: sort imports per isort config (#3437) (#3438)
  • aspect: test Inf and all-NaN elevation input across backends (#3439) (#3440)
  • engine: carry the coregister/auto_reproject target on the parameter value (#3380)
  • rasterize: match dask all_touched polygon boundary to eager on grid lines (#3384) (#3386)
  • rasterize: add validation-guard test coverage (#3383) (#3385)
  • zonal: vectorize _sort_and_stride 3D reindex, drop deepcopy (#3381) (#3382)

v0.10.10

Choose a tag to compare

@brendancol brendancol released this 17 Jun 20:53
9704307

New features

  • geotiff: expose the GeoTIFF loader as an xarray backend engine (#3365) (#3375)
  • geotiff: expose coregistered reads through the xarray engine via like= (#3376) (#3377)

Bug fixes and improvements

  • geotiff: read and parse a local file once on the chunked GPU read path (#3373) (#3374)
  • geotiff: reject predictor with jpeg2000/lerc/jpeg compression (#3371) (#3372)
  • cost_distance: fix Dijkstra heap overflow on non-uniform friction (#3370)
  • cost_distance: add test for the dask all-impassable early return (#3367) (#3368)
  • ci: add free-threaded Python 3.14 (3.14t) to the test matrix (#3360)
  • ci: make test_chunks_is_lazy counter thread-safe for free-threaded CI (#3363) (#3364)
  • ci: scope the 'performance' labeler to benchmarked modules (#3357)
  • remove AI-assistant tooling definitions (#3362)

v0.10.9

Choose a tag to compare

@brendancol brendancol released this 15 Jun 19:23
ef65fa3

Bug fixes and improvements

  • cost_distance: route bounded large-radius dask path to iterative Dijkstra (#3345)
  • cost_distance: guard the numpy dask chunk path with _check_memory (#3346)
  • cost_distance: fix leaking dask task name as output .name (#3349)
  • cost_distance: replace mutable default target_values=[] with a None sentinel (#3348)
  • cost_distance: add tests for 1x1 raster, Inf friction, and metadata (#3347)
  • cost_distance: fix flake8/isort findings (#3350)
  • contour: batch dask chunk compute to bound client memory (#3334)
  • contour: remove redundant np.empty_like allocation in the coordinate transform (#3354)
  • contour: add test coverage for all-equal auto-levels and empty explicit levels (#3353)
  • geotiff: reject a zero or non-finite ModelPixelScale on read (#3332)
  • geotiff: fix isort import ordering in _writers/eager.py (#3330)
  • docs: fix file paths in the deep-sweep documentation (#3336)

Thanks

Thanks to @Melissari1997 for code and test contributions to this release.

v0.10.8

Choose a tag to compare

@brendancol brendancol released this 15 Jun 12:47
e2c258b

Bug fixes and improvements

  • geotiff: gate dict gdal_metadata behind the experimental rich-tag opt-in (#3327)
  • name dask tasks for remaining xrspatial tool modules (#3326)
  • geotiff: don't flip masked_nodata True on a caller dtype= cast of an unmasked buffer (#3325)
  • to_geotiff: type-check compression_level (#3324)
  • rasterize: burn all_touched lines with the supercover walk (#3322)
  • focal: handle empty rasters consistently across backends (#3319)
  • reproject: promote large-output in-memory cupy inputs to dask (#3318)
  • reproject: serialize all parallel=True kernel launches behind one lock (#3317)
  • docs: add an examples-and-data getting-started page and landing index (#3316)