xarray-spatial 0.10.7__tar.gz → 0.10.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/CHANGELOG.md +14 -0
- {xarray_spatial-0.10.7/xarray_spatial.egg-info → xarray_spatial-0.10.8}/PKG-INFO +1 -1
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8/xarray_spatial.egg-info}/PKG-INFO +1 -1
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xarray_spatial.egg-info/SOURCES.txt +3 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/_version.py +3 -3
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/classify.py +7 -4
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/cost_distance.py +3 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/dasymetric.py +2 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/diffusion.py +5 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/emerging_hotspots.py +5 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/fire.py +25 -10
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/flood.py +4 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/focal.py +72 -12
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_attrs.py +15 -3
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_backends/dask.py +10 -5
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_backends/gpu.py +11 -4
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_validation.py +27 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_writers/eager.py +13 -2
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_writers/gpu.py +3 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/attrs/test_contract.py +43 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/gpu/test_writer.py +3 -1
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/read/test_mask_and_scale_dtype_parity_3066.py +4 -1
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/read/test_nodata.py +110 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/read/test_rioxarray_compat_2961.py +9 -3
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/read/test_scale_zero_3104.py +3 -1
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/release_gates/test_features.py +2 -1
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/unit/test_safe_xml.py +2 -1
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/unit/test_signatures.py +40 -2
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/vrt/test_metadata.py +9 -7
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/write/test_basic.py +48 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/write/test_pack_3064.py +3 -1
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/write/test_pack_band_subset_3161.py +3 -1
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/write/test_pack_float_width_3080.py +3 -1
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/write/test_pack_lazy_nan_guard_3235.py +3 -1
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/write/test_pack_nodata_kwarg_3168.py +3 -1
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/write/test_pack_range_guard_3260.py +6 -4
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/glcm.py +3 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/basin_d8.py +6 -4
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/fill_d8.py +3 -2
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/flow_accumulation_d8.py +4 -2
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/flow_accumulation_dinf.py +3 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/flow_accumulation_mfd.py +2 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/flow_direction_d8.py +6 -3
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/flow_direction_dinf.py +5 -2
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/flow_length_d8.py +3 -1
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/flow_path_d8.py +10 -1
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/flow_path_dinf.py +3 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/flow_path_mfd.py +3 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/hand_d8.py +9 -1
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/hand_dinf.py +2 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/hand_mfd.py +2 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/sink_d8.py +4 -2
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/snap_pour_point_d8.py +6 -1
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/stream_link_d8.py +6 -4
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/stream_link_dinf.py +5 -2
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/stream_link_mfd.py +2 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/stream_order_d8.py +8 -5
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/stream_order_dinf.py +7 -3
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/stream_order_mfd.py +3 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/watershed_d8.py +4 -2
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/watershed_dinf.py +2 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/watershed_mfd.py +2 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/interpolate/_idw.py +5 -3
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/interpolate/_kriging.py +7 -2
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/interpolate/_spline.py +5 -3
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/mahalanobis.py +3 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/mcda/combine.py +3 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/mcda/sensitivity.py +2 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/mcda/standardize.py +6 -2
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/morphology.py +3 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/multispectral.py +46 -24
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/perlin.py +6 -4
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/polygon_clip.py +3 -2
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/proximity.py +13 -2
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/rasterize.py +326 -52
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/reproject/__init__.py +40 -14
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/reproject/_itrf.py +15 -8
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/reproject/_projections.py +4 -1
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/reproject/_vertical.py +11 -3
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/resample.py +19 -5
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/sky_view_factor.py +3 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/terrain_metrics.py +14 -8
- xarray_spatial-0.10.8/xrspatial/tests/test_dask_task_names.py +357 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_focal.py +37 -9
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rasterize_coverage_2026_06_09.py +52 -53
- xarray_spatial-0.10.8/xrspatial/tests/test_rasterize_lines_all_touched_3102.py +251 -0
- xarray_spatial-0.10.8/xrspatial/tests/test_reproject_cupy_promotion_3281.py +144 -0
- xarray_spatial-0.10.8/xrspatial/tests/test_reproject_parallel_kernels_3141.py +125 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_reproject_streaming_3101.py +22 -11
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/worley.py +6 -4
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/zonal.py +8 -3
- xarray_spatial-0.10.7/xrspatial/tests/test_dask_task_names.py +0 -154
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.claude/commands/backend-parity.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.claude/commands/bench.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.claude/commands/dask-notebook.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.claude/commands/deep-sweep.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.claude/commands/efficiency-audit.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.claude/commands/new-issues.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.claude/commands/ready-to-merge.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.claude/commands/release-major.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.claude/commands/release-minor.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.claude/commands/release-patch.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.claude/commands/review-contributor-pr.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.claude/commands/review-pr.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.claude/commands/rockout.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.claude/commands/sweep-accuracy.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.claude/commands/sweep-api-consistency.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.claude/commands/sweep-metadata.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.claude/commands/sweep-performance.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.claude/commands/sweep-security.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.claude/commands/sweep-style.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.claude/commands/sweep-test-coverage.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.claude/commands/user-guide-notebook.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.claude/commands/validate.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.claude/sweep-accuracy-state.csv +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.claude/sweep-api-consistency-state.csv +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.claude/sweep-metadata-state.csv +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.claude/sweep-performance-state.csv +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.claude/sweep-security-state.csv +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.claude/sweep-style-state.csv +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.claude/sweep-test-coverage-state.csv +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.codex/commands/backend-parity.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.codex/commands/bench.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.codex/commands/dask-notebook.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.codex/commands/deep-sweep.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.codex/commands/efficiency-audit.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.codex/commands/new-issues.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.codex/commands/ready-to-merge.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.codex/commands/release-major.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.codex/commands/release-minor.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.codex/commands/release-patch.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.codex/commands/review-contributor-pr.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.codex/commands/review-pr.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.codex/commands/rockout.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.codex/commands/sweep-accuracy.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.codex/commands/sweep-api-consistency.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.codex/commands/sweep-metadata.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.codex/commands/sweep-performance.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.codex/commands/sweep-security.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.codex/commands/sweep-style.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.codex/commands/sweep-test-coverage.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.codex/commands/user-guide-notebook.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.codex/commands/validate.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.codex/sweep-accuracy-state.csv +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.codex/sweep-api-consistency-state.csv +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.codex/sweep-metadata-state.csv +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.codex/sweep-performance-state.csv +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.codex/sweep-security-state.csv +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.codex/sweep-style-state.csv +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.codex/sweep-test-coverage-state.csv +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.cursor/rules/backend-parity.mdc +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.cursor/rules/bench.mdc +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.cursor/rules/dask-notebook.mdc +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.cursor/rules/deep-sweep.mdc +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.cursor/rules/efficiency-audit.mdc +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.cursor/rules/new-issues.mdc +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.cursor/rules/ready-to-merge.mdc +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.cursor/rules/release-major.mdc +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.cursor/rules/release-minor.mdc +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.cursor/rules/release-patch.mdc +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.cursor/rules/review-contributor-pr.mdc +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.cursor/rules/review-pr.mdc +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.cursor/rules/rockout.mdc +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.cursor/rules/sweep-accuracy.mdc +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.cursor/rules/sweep-api-consistency.mdc +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.cursor/rules/sweep-metadata.mdc +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.cursor/rules/sweep-performance.mdc +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.cursor/rules/sweep-security.mdc +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.cursor/rules/sweep-style.mdc +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.cursor/rules/sweep-test-coverage.mdc +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.cursor/rules/user-guide-notebook.mdc +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.cursor/rules/validate.mdc +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.cursorrules +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.efficiency-audit-baseline.json +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.efficiency-audit-baseline.prev.json +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.gitattributes +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.github/ISSUE_TEMPLATE/feature-proposal.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.github/ISSUE_TEMPLATE/new-contributor.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.github/labeler.yml +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.github/pull_request_template.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.github/workflows/benchmarks.yml +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.github/workflows/copilot-review.yml +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.github/workflows/docs.yml +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.github/workflows/labeler.yml +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.github/workflows/pypi-publish.yml +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.github/workflows/test-cog-validator.yml +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.github/workflows/test-geotiff-corpus.yml +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.github/workflows/test.yml +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.github/workflows/welcome-contributor.yml +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.gitignore +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.kilo/command/backend-parity.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.kilo/command/bench.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.kilo/command/dask-notebook.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.kilo/command/deep-sweep.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.kilo/command/efficiency-audit.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.kilo/command/new-issues.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.kilo/command/ready-to-merge.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.kilo/command/release-major.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.kilo/command/release-minor.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.kilo/command/release-patch.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.kilo/command/review-contributor-pr.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.kilo/command/review-pr.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.kilo/command/rockout.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.kilo/command/sweep-accuracy.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.kilo/command/sweep-api-consistency.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.kilo/command/sweep-metadata.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.kilo/command/sweep-performance.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.kilo/command/sweep-security.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.kilo/command/sweep-style.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.kilo/command/sweep-test-coverage.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.kilo/command/user-guide-notebook.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.kilo/command/validate.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.kilo/sweep-accuracy-state.csv +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.kilo/sweep-api-consistency-state.csv +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.kilo/sweep-metadata-state.csv +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.kilo/sweep-performance-state.csv +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.kilo/sweep-security-state.csv +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.kilo/sweep-style-state.csv +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.kilo/sweep-test-coverage-state.csv +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/.readthedocs.yml +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/AI_POLICY.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/CLAUDE.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/CODE_OF_CONDUCT.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/CONTRIBUTING.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/Citation-styles.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/LICENSE.txt +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/MANIFEST.in +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/README.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/RELEASE.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/codecov.yml +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/pyproject.toml +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/setup.cfg +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/setup.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xarray_spatial.egg-info/dependency_links.txt +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xarray_spatial.egg-info/entry_points.txt +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xarray_spatial.egg-info/not-zip-safe +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xarray_spatial.egg-info/requires.txt +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xarray_spatial.egg-info/top_level.txt +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/__init__.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/__main__.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/accessor.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/analytics.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/aspect.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/balanced_allocation.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/bilateral.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/bump.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/contour.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/convolution.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/corridor.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/curvature.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/dataset_support.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/datasets/__init__.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/datasets/sentinel-2/blue_band.nc +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/datasets/sentinel-2/green_band.nc +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/datasets/sentinel-2/nir_band.nc +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/datasets/sentinel-2/red_band.nc +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/datasets/sentinel-2/swir1_band.nc +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/datasets/sentinel-2/swir2_band.nc +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/diagnostics.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/edge_detection.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/erosion.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/experimental/__init__.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/experimental/min_observable_height.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geodesic.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/__init__.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_backends/__init__.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_backends/_gpu_helpers.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_backends/vrt.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_cog_http.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_compression.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_coords.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_crs.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_decode.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_dtypes.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_encode.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_errors.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_geotags.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_gpu_decode.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_header.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_layout.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_nodata.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_overview.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_overview_kernels.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_reader.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_runtime.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_safe_xml.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_sidecar.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_sources.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_vrt.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_vrt_validation.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_write_layout.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_writer.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_writers/__init__.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/_writers/vrt.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/__init__.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/_geotiff_fixtures.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/_helpers/__init__.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/_helpers/markers.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/_helpers/tiff_builders.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/_helpers/tiff_surgery.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/attrs/__init__.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/bench_vs_rioxarray.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/conftest.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/README.md +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/__init__.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/_marks.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/_oracle.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/fixtures/cog_internal_overview_uint16.tif +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/fixtures/compression_deflate_predictor2_uint16.tif +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/fixtures/compression_deflate_predictor3_float32.tif +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/fixtures/compression_jpeg_uint8_ycbcr.tif +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/fixtures/compression_lerc_float32.tif +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/fixtures/compression_lzw_predictor2_int16.tif +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/fixtures/compression_none_uint8.tif +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/fixtures/crs_citation_only.tif +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/fixtures/crs_epsg_3857.tif +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/fixtures/crs_wkt_utm10n.tif +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/fixtures/dtype_float32.tif +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/fixtures/dtype_float64.tif +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/fixtures/dtype_int16.tif +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/fixtures/dtype_int32.tif +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/fixtures/dtype_int8.tif +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/fixtures/dtype_uint16.tif +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/fixtures/dtype_uint32.tif +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/fixtures/dtype_uint8.tif +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/fixtures/extra_tags_uint16.tif +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/fixtures/gdal_metadata_namespaced_uint16.tif +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/fixtures/nodata_int_sentinel_uint16.tif +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/fixtures/nodata_miniswhite_uint8.tif +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/fixtures/nodata_nan_float32.tif +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/fixtures/overview_external_ovr_uint16.tif +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/fixtures/overview_external_ovr_uint16.tif.ovr +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/fixtures/overview_internal_uint16.tif +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/fixtures/planar_separate_uint8_rgb.tif +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/fixtures/sparse_tiled_uint16.tif +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/fixtures/stripped_be_uint16.tif +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/fixtures/stripped_le_uint16.tif +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/fixtures/tiled_be_uint16.tif +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/fixtures/tiled_le_uint16.tif +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/generate.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/manifest.yaml +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/test_compression.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/test_corpus_determinism.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/test_dask_gpu.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/test_dask_numpy.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/test_dtype_variants.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/test_eager_numpy.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/test_fsspec.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/test_gpu.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/test_http.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/test_layout_endian.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/test_manifest.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/test_metadata_tags.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/test_nodata_sentinels.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/test_oracle.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/test_overview_cog.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/golden_corpus/test_vrt.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/gpu/__init__.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/gpu/test_codec.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/gpu/test_kernels_and_kwargs.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/gpu/test_reader.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/integration/__init__.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/integration/test_dask_pipeline.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/integration/test_gpu_pipeline.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/integration/test_http_sources.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/integration/test_sidecar.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/parity/__init__.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/parity/test_api_consolidation.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/parity/test_backend_matrix.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/parity/test_finalization.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/parity/test_pixel_equality.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/parity/test_reference.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/parity/test_signature_contract.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/read/__init__.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/read/test_basic.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/read/test_bbox_2555.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/read/test_bbox_vrt_2668.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/read/test_compression.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/read/test_coords.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/read/test_crs.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/read/test_degenerate_shapes.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/read/test_dtypes.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/read/test_endianness.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/read/test_georef.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/read/test_overview.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/read/test_streaming.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/read/test_tiling.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/read/test_unpack_noop_doc_3263.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/release_gates/__init__.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/release_gates/test_stable_features.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/test_edge_cases.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/test_fuzz_hypothesis.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/test_polish.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/test_round_trip.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/test_security.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/test_shutdown_cleanup_2486.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/test_stable_only_bbox_ordering_2869.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/test_stable_only_remote_2821.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/unit/__init__.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/unit/test_codec_roundtrip.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/unit/test_compression.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/unit/test_exception_exports_3265.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/unit/test_geotags.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/unit/test_header.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/unit/test_ifd.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/unit/test_input_validation.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/unit/test_metadata.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/unit/test_photometric.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/unit/test_predictor.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/vrt/__init__.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/vrt/test_dtype_conversion.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/vrt/test_missing_sources.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/vrt/test_non_georef_placement_3116.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/vrt/test_parity.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/vrt/test_source_opt_ins_2672.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/vrt/test_validation.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/vrt/test_window.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/write/__init__.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/write/test_bigtiff.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/write/test_cog.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/write/test_crs.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/write/test_nodata.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/write/test_overview.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/write/test_pack_64bit_sentinel_3264.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/write/test_streaming.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/geotiff/tests/write/test_vrt_atomic.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/gpu_rtx/__init__.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/gpu_rtx/_memory.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/gpu_rtx/cuda_utils.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/gpu_rtx/hillshade.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/gpu_rtx/mesh_utils.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/gpu_rtx/viewshed.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hillshade.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/__init__.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/_boundary_store.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/flow_direction_mfd.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/flow_length_dinf.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/flow_length_mfd.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/__init__.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/conftest.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_basin_d8.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_fill_d8.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_flow_accumulation_d8.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_flow_accumulation_dinf.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_flow_accumulation_mfd.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_flow_direction_d8.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_flow_direction_dinf.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_flow_direction_mfd.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_flow_length_d8.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_flow_length_dinf.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_flow_length_mfd.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_flow_path_d8.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_flow_path_dinf.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_flow_path_mfd.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_hand_d8.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_hand_dinf.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_hand_mfd.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_sink_d8.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_snap_pour_point_d8.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_stream_link_d8.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_stream_link_dinf.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_stream_link_mfd.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_stream_order_d8.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_stream_order_dinf.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_stream_order_mfd.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_twi_d8.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_validate_cellsize.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_validate_mfd_companion_shape.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_validate_mfd_fractions.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_validate_scalar_params.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_validate_secondary_args.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_watershed_d8.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_watershed_dinf.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/tests/test_watershed_mfd.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/hydro/twi_d8.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/interpolate/__init__.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/interpolate/_validation.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/kde.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/mcda/__init__.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/mcda/constrain.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/mcda/weights.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/normalize.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/pathfinding.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/polygonize.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/preview.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/reproject/_crs_utils.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/reproject/_grid.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/reproject/_interpolate.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/reproject/_lite_crs.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/reproject/_merge.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/reproject/_projections_cuda.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/reproject/_transform.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/reproject/grids/us_nga_egm96_15.tif +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/sieve.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/slope.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/surface_distance.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/terrain.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/__init__.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/bench_reproject_vs_rioxarray.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/conftest.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/general_checks.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_accessor.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_analytics.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_aspect.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_balanced_allocation.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_bilateral.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_bump.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_classify.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_contour.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_convolution.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_corridor.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_cost_distance.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_curvature.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_dask_cupy_gaps.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_dask_laziness.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_dasymetric.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_dataset_support.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_datasets.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_diagnostics.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_diffusion.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_edge_detection.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_emerging_hotspots.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_erosion.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_fire.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_flood.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_fused_overlap.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_geodesic_aspect.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_geodesic_slope.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_glcm.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_glcm_metric_order.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_gpu_rtx_has_rtx.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_gpu_rtx_memory.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_gpu_rtx_mesh.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_hillshade.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_hypsometric_integral.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_interpolation.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_kde.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_lite_crs.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_mahalanobis.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_mcda.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_min_observable_height.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_morphology.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_morphology_derived.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_multi_overlap.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_multispectral.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_normalize.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_northness_eastness.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_open_geotiff_coregister.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_open_geotiff_resampling.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_optional_shapely.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_pathfinding.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_perlin.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_polygon_clip.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_polygonize.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_polygonize_atol_rtol_backend_coverage_2026_05_27.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_polygonize_coverage_2026_05_19.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_polygonize_dask_row_batch_2608.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_polygonize_issue_2172.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_polygonize_issue_2583.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_polygonize_issue_2606.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_polygonize_issue_2666.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_polygonize_issue_2677.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_polygonize_issue_3292.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_polygonize_issue_3303.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_polygonize_mask_chunk_mismatch_3299.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_polygonize_mask_dtype_coverage_2026_05_29.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_preview.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_proximity.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rasterize.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rasterize_accuracy.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rasterize_all_touched_supercover_2169.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rasterize_alloc_3107.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rasterize_coverage_2026_05_17.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rasterize_coverage_2026_05_21.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rasterize_coverage_2026_05_27.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rasterize_coverage_2026_05_29.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rasterize_crs_mismatch_3058.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rasterize_descending_x_2568.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rasterize_dtype_annot_3291.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rasterize_fill_dtype_3054.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rasterize_geom_crs_3087.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rasterize_gpu_alias_3089.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rasterize_gpu_callable_warn_3057.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rasterize_gpu_race_2167.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rasterize_int_precision_3056.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rasterize_linearring_3055.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rasterize_merge_dedup_3304.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rasterize_mixed_type_ordered_merge_3296.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rasterize_nan_int_fill_2504.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rasterize_nan_propagation_2255.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rasterize_nonfinite_burn_3085.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rasterize_nonfinite_burn_3088.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rasterize_nonfinite_coords_3295.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rasterize_partial_dims_2569.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rasterize_props_hoist_2506.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rasterize_resolution_exact_2573.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rasterize_resolution_validation_2576.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rasterize_signature_annot_2250.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rasterize_signed_step_2566.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rasterize_tile_props_slice_2020.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_rechunk_no_shuffle.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_reproject.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_reproject_coverage_2026_05_27.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_reproject_cupy_gate_2564.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_reproject_inverse_kernels_3274.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_reproject_itrf_scale_3276.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_reproject_pyproj_warning_3242.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_reproject_sphere_ellipsoid_guard_3275.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_resample.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_resample_coverage_2026_05_27.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_resample_cupy_agg_fallback_2615.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_resample_input_validation_2574.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_resample_irregular_coords_2663.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_resample_nodata_dask_parity_3073.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_resample_signature_annot_2544.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_sieve.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_sieve_gdal_parity.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_sky_view_factor.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_slope.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_surface_distance.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_sweep_state_csv_merge_2754.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_terrain.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_terrain_metrics.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_utils.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_validation.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_viewshed.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_visibility.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_zonal.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/tests/test_zonal_backend_coverage_2026_05_27.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/utils.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/viewshed.py +0 -0
- {xarray_spatial-0.10.7 → xarray_spatial-0.10.8}/xrspatial/visibility.py +0 -0
|
@@ -2,6 +2,20 @@
|
|
|
2
2
|
-----------
|
|
3
3
|
|
|
4
4
|
|
|
5
|
+
### Version 0.10.8 - 2026-06-14
|
|
6
|
+
|
|
7
|
+
#### Bug fixes and improvements
|
|
8
|
+
- geotiff: gate dict gdal_metadata behind the experimental rich-tag opt-in (#3327)
|
|
9
|
+
- name dask tasks for remaining xrspatial tool modules (#3326)
|
|
10
|
+
- geotiff: don't flip masked_nodata True on a caller dtype= cast of an unmasked buffer (#3325)
|
|
11
|
+
- to_geotiff: type-check compression_level (#3324)
|
|
12
|
+
- rasterize: burn all_touched lines with the supercover walk (#3322)
|
|
13
|
+
- focal: handle empty rasters consistently across backends (#3319)
|
|
14
|
+
- reproject: promote large-output in-memory cupy inputs to dask (#3318)
|
|
15
|
+
- reproject: serialize all parallel=True kernel launches behind one lock (#3317)
|
|
16
|
+
- docs: add an examples-and-data getting-started page and landing index (#3316)
|
|
17
|
+
|
|
18
|
+
|
|
5
19
|
### Version 0.10.7 - 2026-06-13
|
|
6
20
|
|
|
7
21
|
#### New features
|
|
@@ -582,6 +582,7 @@ xrspatial/tests/test_rasterize_gpu_callable_warn_3057.py
|
|
|
582
582
|
xrspatial/tests/test_rasterize_gpu_race_2167.py
|
|
583
583
|
xrspatial/tests/test_rasterize_int_precision_3056.py
|
|
584
584
|
xrspatial/tests/test_rasterize_linearring_3055.py
|
|
585
|
+
xrspatial/tests/test_rasterize_lines_all_touched_3102.py
|
|
585
586
|
xrspatial/tests/test_rasterize_merge_dedup_3304.py
|
|
586
587
|
xrspatial/tests/test_rasterize_mixed_type_ordered_merge_3296.py
|
|
587
588
|
xrspatial/tests/test_rasterize_nan_int_fill_2504.py
|
|
@@ -600,8 +601,10 @@ xrspatial/tests/test_rechunk_no_shuffle.py
|
|
|
600
601
|
xrspatial/tests/test_reproject.py
|
|
601
602
|
xrspatial/tests/test_reproject_coverage_2026_05_27.py
|
|
602
603
|
xrspatial/tests/test_reproject_cupy_gate_2564.py
|
|
604
|
+
xrspatial/tests/test_reproject_cupy_promotion_3281.py
|
|
603
605
|
xrspatial/tests/test_reproject_inverse_kernels_3274.py
|
|
604
606
|
xrspatial/tests/test_reproject_itrf_scale_3276.py
|
|
607
|
+
xrspatial/tests/test_reproject_parallel_kernels_3141.py
|
|
605
608
|
xrspatial/tests/test_reproject_pyproj_warning_3242.py
|
|
606
609
|
xrspatial/tests/test_reproject_sphere_ellipsoid_guard_3275.py
|
|
607
610
|
xrspatial/tests/test_reproject_streaming_3101.py
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '0.10.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 10,
|
|
21
|
+
__version__ = version = '0.10.8'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 10, 8)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'ge2c258bf7'
|
|
@@ -26,6 +26,7 @@ import numpy as np
|
|
|
26
26
|
|
|
27
27
|
from xrspatial.utils import (
|
|
28
28
|
ArrayTypeFunctionMapping,
|
|
29
|
+
_dask_task_name_kwargs,
|
|
29
30
|
_validate_raster,
|
|
30
31
|
_validate_scalar,
|
|
31
32
|
cuda_args,
|
|
@@ -74,7 +75,7 @@ def _run_numpy_binary(data, values):
|
|
|
74
75
|
|
|
75
76
|
def _run_dask_numpy_binary(data, values):
|
|
76
77
|
_func = partial(_run_numpy_binary, values=values)
|
|
77
|
-
out = data.map_blocks(_func)
|
|
78
|
+
out = data.map_blocks(_func, **_dask_task_name_kwargs('xrspatial.binary'))
|
|
78
79
|
return out
|
|
79
80
|
|
|
80
81
|
|
|
@@ -104,7 +105,8 @@ def _run_cupy_binary(data, values):
|
|
|
104
105
|
|
|
105
106
|
|
|
106
107
|
def _run_dask_cupy_binary(data, values_cupy):
|
|
107
|
-
out = data.map_blocks(lambda da: _run_cupy_binary(da, values_cupy), meta=cupy.array(())
|
|
108
|
+
out = data.map_blocks(lambda da: _run_cupy_binary(da, values_cupy), meta=cupy.array(()),
|
|
109
|
+
**_dask_task_name_kwargs('xrspatial.binary'))
|
|
108
110
|
return out
|
|
109
111
|
|
|
110
112
|
|
|
@@ -224,7 +226,7 @@ def _run_dask_numpy_bin(data, bins, new_values):
|
|
|
224
226
|
bins=bins,
|
|
225
227
|
new_values=new_values)
|
|
226
228
|
|
|
227
|
-
out = data.map_blocks(_func)
|
|
229
|
+
out = data.map_blocks(_func, **_dask_task_name_kwargs('xrspatial.reclassify'))
|
|
228
230
|
return out
|
|
229
231
|
|
|
230
232
|
|
|
@@ -281,7 +283,8 @@ def _run_cupy_bin(data, bins, new_values):
|
|
|
281
283
|
def _run_dask_cupy_bin(data, bins_cupy, new_values_cupy):
|
|
282
284
|
out = data.map_blocks(lambda da:
|
|
283
285
|
_run_cupy_bin(da, bins_cupy, new_values_cupy),
|
|
284
|
-
meta=cupy.array(())
|
|
286
|
+
meta=cupy.array(()),
|
|
287
|
+
**_dask_task_name_kwargs('xrspatial.reclassify'))
|
|
285
288
|
return out
|
|
286
289
|
|
|
287
290
|
|
|
@@ -49,6 +49,7 @@ except ImportError:
|
|
|
49
49
|
ndarray = False
|
|
50
50
|
|
|
51
51
|
from xrspatial.utils import (
|
|
52
|
+
_dask_task_name_kwargs,
|
|
52
53
|
_validate_raster,
|
|
53
54
|
cuda_args, get_dataarray_resolution, ngjit,
|
|
54
55
|
has_cuda_and_cupy, is_cupy_array, is_dask_cupy,
|
|
@@ -506,6 +507,7 @@ def _cost_distance_dask_cupy(source_da, friction_da,
|
|
|
506
507
|
boundary=np.nan,
|
|
507
508
|
dtype=np.float32,
|
|
508
509
|
meta=cp.array((), dtype=cp.float32),
|
|
510
|
+
**_dask_task_name_kwargs('xrspatial.cost_distance'),
|
|
509
511
|
)
|
|
510
512
|
|
|
511
513
|
# Unbounded or padding too large: convert to dask+numpy, use CPU path
|
|
@@ -1187,6 +1189,7 @@ def _cost_distance_dask(source_da, friction_da, cellsize_x, cellsize_y,
|
|
|
1187
1189
|
boundary=np.nan,
|
|
1188
1190
|
dtype=np.float32,
|
|
1189
1191
|
meta=np.array((), dtype=np.float32),
|
|
1192
|
+
**_dask_task_name_kwargs('xrspatial.cost_distance'),
|
|
1190
1193
|
)
|
|
1191
1194
|
return out
|
|
1192
1195
|
|
|
@@ -52,6 +52,7 @@ except ImportError:
|
|
|
52
52
|
|
|
53
53
|
from xrspatial.utils import (
|
|
54
54
|
ArrayTypeFunctionMapping,
|
|
55
|
+
_dask_task_name_kwargs,
|
|
55
56
|
has_cuda_and_cupy,
|
|
56
57
|
has_dask_array,
|
|
57
58
|
is_cupy_array,
|
|
@@ -293,6 +294,7 @@ def _disaggregate_dask_numpy(zones_da, weight_da, values_dict, method,
|
|
|
293
294
|
method=method,
|
|
294
295
|
nodata_zone=nodata_zone,
|
|
295
296
|
dtype=np.float64,
|
|
297
|
+
**_dask_task_name_kwargs('xrspatial.disaggregate'),
|
|
296
298
|
)
|
|
297
299
|
return result
|
|
298
300
|
|
|
@@ -33,6 +33,7 @@ except ImportError:
|
|
|
33
33
|
from xrspatial.utils import (
|
|
34
34
|
ArrayTypeFunctionMapping,
|
|
35
35
|
_boundary_to_dask,
|
|
36
|
+
_dask_task_name_kwargs,
|
|
36
37
|
_pad_array,
|
|
37
38
|
_validate_boundary,
|
|
38
39
|
_validate_raster,
|
|
@@ -267,6 +268,7 @@ def _diffuse_dask_numpy(data, alpha, steps, dt_over_dx2, boundary):
|
|
|
267
268
|
depth=(1, 1),
|
|
268
269
|
boundary=_boundary_to_dask(boundary),
|
|
269
270
|
meta=np.array(()),
|
|
271
|
+
**_dask_task_name_kwargs('xrspatial.diffuse'),
|
|
270
272
|
)
|
|
271
273
|
else:
|
|
272
274
|
# Pass alpha as a second dask argument to map_overlap
|
|
@@ -278,6 +280,7 @@ def _diffuse_dask_numpy(data, alpha, steps, dt_over_dx2, boundary):
|
|
|
278
280
|
meta=np.array(()),
|
|
279
281
|
steps=1,
|
|
280
282
|
dt_over_dx2=dt_over_dx2,
|
|
283
|
+
**_dask_task_name_kwargs('xrspatial.diffuse'),
|
|
281
284
|
)
|
|
282
285
|
return u
|
|
283
286
|
|
|
@@ -318,6 +321,7 @@ def _diffuse_dask_cupy(data, alpha, steps, dt_over_dx2, boundary):
|
|
|
318
321
|
depth=(1, 1),
|
|
319
322
|
boundary=_boundary_to_dask(boundary, is_cupy=True),
|
|
320
323
|
meta=cp.array(()),
|
|
324
|
+
**_dask_task_name_kwargs('xrspatial.diffuse'),
|
|
321
325
|
)
|
|
322
326
|
else:
|
|
323
327
|
u = da.map_overlap(
|
|
@@ -327,6 +331,7 @@ def _diffuse_dask_cupy(data, alpha, steps, dt_over_dx2, boundary):
|
|
|
327
331
|
boundary=_boundary_to_dask(boundary, is_cupy=True),
|
|
328
332
|
meta=cp.array(()),
|
|
329
333
|
dt_over_dx2=dt_over_dx2,
|
|
334
|
+
**_dask_task_name_kwargs('xrspatial.diffuse'),
|
|
330
335
|
)
|
|
331
336
|
return u
|
|
332
337
|
|
|
@@ -30,6 +30,7 @@ from xrspatial.focal import (
|
|
|
30
30
|
)
|
|
31
31
|
from xrspatial.utils import (
|
|
32
32
|
ArrayTypeFunctionMapping,
|
|
33
|
+
_dask_task_name_kwargs,
|
|
33
34
|
_validate_boundary,
|
|
34
35
|
ngjit,
|
|
35
36
|
not_implemented_func,
|
|
@@ -608,6 +609,7 @@ def _emerging_hotspots_dask_numpy(raster, kernel, boundary='nan'):
|
|
|
608
609
|
gi_zscore,
|
|
609
610
|
dtype=np.int8,
|
|
610
611
|
meta=np.array((), dtype=np.int8),
|
|
612
|
+
**_dask_task_name_kwargs('xrspatial.emerging_hotspots.gi_bin'),
|
|
611
613
|
)
|
|
612
614
|
|
|
613
615
|
# Pass 3: Mann-Kendall + classification via map_blocks
|
|
@@ -620,6 +622,7 @@ def _emerging_hotspots_dask_numpy(raster, kernel, boundary='nan'):
|
|
|
620
622
|
drop_axis=0,
|
|
621
623
|
new_axis=0,
|
|
622
624
|
meta=np.array((), dtype=np.float32),
|
|
625
|
+
**_dask_task_name_kwargs('xrspatial.emerging_hotspots.mk_classify'),
|
|
623
626
|
)
|
|
624
627
|
|
|
625
628
|
return gi_zscore, gi_bin, mk_result
|
|
@@ -690,6 +693,7 @@ def _emerging_hotspots_dask_cupy(raster, kernel, boundary='nan'):
|
|
|
690
693
|
gi_zscore,
|
|
691
694
|
dtype=np.int8,
|
|
692
695
|
meta=cupy.array((), dtype=cupy.int8),
|
|
696
|
+
**_dask_task_name_kwargs('xrspatial.emerging_hotspots.gi_bin'),
|
|
693
697
|
)
|
|
694
698
|
|
|
695
699
|
# Pass 3: Mann-Kendall + classification via map_blocks
|
|
@@ -701,6 +705,7 @@ def _emerging_hotspots_dask_cupy(raster, kernel, boundary='nan'):
|
|
|
701
705
|
drop_axis=0,
|
|
702
706
|
new_axis=0,
|
|
703
707
|
meta=cupy.array((), dtype=cupy.float32),
|
|
708
|
+
**_dask_task_name_kwargs('xrspatial.emerging_hotspots.mk_classify'),
|
|
704
709
|
)
|
|
705
710
|
|
|
706
711
|
return gi_zscore, gi_bin, mk_result
|
|
@@ -26,6 +26,7 @@ from numba import cuda
|
|
|
26
26
|
from xrspatial.dataset_support import supports_dataset
|
|
27
27
|
from xrspatial.utils import (
|
|
28
28
|
ArrayTypeFunctionMapping,
|
|
29
|
+
_dask_task_name_kwargs,
|
|
29
30
|
_validate_raster,
|
|
30
31
|
_validate_scalar,
|
|
31
32
|
cuda_args,
|
|
@@ -165,7 +166,8 @@ def _dnbr_gpu(pre_data, post_data, out):
|
|
|
165
166
|
|
|
166
167
|
|
|
167
168
|
def _dnbr_dask(pre_data, post_data):
|
|
168
|
-
return da.map_blocks(_dnbr_cpu, pre_data, post_data, meta=np.array(())
|
|
169
|
+
return da.map_blocks(_dnbr_cpu, pre_data, post_data, meta=np.array(()),
|
|
170
|
+
**_dask_task_name_kwargs('xrspatial.dnbr'))
|
|
169
171
|
|
|
170
172
|
|
|
171
173
|
def _dnbr_cupy(pre_data, post_data):
|
|
@@ -178,7 +180,8 @@ def _dnbr_cupy(pre_data, post_data):
|
|
|
178
180
|
|
|
179
181
|
def _dnbr_dask_cupy(pre_data, post_data):
|
|
180
182
|
return da.map_blocks(_dnbr_cupy, pre_data, post_data,
|
|
181
|
-
dtype=cupy.float32, meta=cupy.array(())
|
|
183
|
+
dtype=cupy.float32, meta=cupy.array(()),
|
|
184
|
+
**_dask_task_name_kwargs('xrspatial.dnbr'))
|
|
182
185
|
|
|
183
186
|
|
|
184
187
|
def dnbr(pre_nbr_agg: xr.DataArray,
|
|
@@ -256,7 +259,8 @@ def _rdnbr_gpu(dnbr_data, pre_data, out):
|
|
|
256
259
|
|
|
257
260
|
|
|
258
261
|
def _rdnbr_dask(dnbr_data, pre_data):
|
|
259
|
-
return da.map_blocks(_rdnbr_cpu, dnbr_data, pre_data, meta=np.array(())
|
|
262
|
+
return da.map_blocks(_rdnbr_cpu, dnbr_data, pre_data, meta=np.array(()),
|
|
263
|
+
**_dask_task_name_kwargs('xrspatial.rdnbr'))
|
|
260
264
|
|
|
261
265
|
|
|
262
266
|
def _rdnbr_cupy(dnbr_data, pre_data):
|
|
@@ -269,7 +273,8 @@ def _rdnbr_cupy(dnbr_data, pre_data):
|
|
|
269
273
|
|
|
270
274
|
def _rdnbr_dask_cupy(dnbr_data, pre_data):
|
|
271
275
|
return da.map_blocks(_rdnbr_cupy, dnbr_data, pre_data,
|
|
272
|
-
dtype=cupy.float32, meta=cupy.array(())
|
|
276
|
+
dtype=cupy.float32, meta=cupy.array(()),
|
|
277
|
+
**_dask_task_name_kwargs('xrspatial.rdnbr'))
|
|
273
278
|
|
|
274
279
|
|
|
275
280
|
def rdnbr(dnbr_agg: xr.DataArray,
|
|
@@ -382,7 +387,8 @@ def _bsc_gpu(data, out):
|
|
|
382
387
|
|
|
383
388
|
|
|
384
389
|
def _bsc_dask(data):
|
|
385
|
-
return da.map_blocks(_bsc_cpu, data, dtype=np.int8, meta=np.array(())
|
|
390
|
+
return da.map_blocks(_bsc_cpu, data, dtype=np.int8, meta=np.array(()),
|
|
391
|
+
**_dask_task_name_kwargs('xrspatial.burn_severity_class'))
|
|
386
392
|
|
|
387
393
|
|
|
388
394
|
def _bsc_cupy(data):
|
|
@@ -394,7 +400,8 @@ def _bsc_cupy(data):
|
|
|
394
400
|
|
|
395
401
|
def _bsc_dask_cupy(data):
|
|
396
402
|
return da.map_blocks(_bsc_cupy, data,
|
|
397
|
-
dtype=np.int8, meta=cupy.array(())
|
|
403
|
+
dtype=np.int8, meta=cupy.array(()),
|
|
404
|
+
**_dask_task_name_kwargs('xrspatial.burn_severity_class'))
|
|
398
405
|
|
|
399
406
|
|
|
400
407
|
@supports_dataset
|
|
@@ -464,7 +471,8 @@ def _fli_gpu(fuel_data, spread_data, heat_content, out):
|
|
|
464
471
|
|
|
465
472
|
def _fli_dask(fuel_data, spread_data, heat_content):
|
|
466
473
|
return da.map_blocks(_fli_cpu, fuel_data, spread_data, heat_content,
|
|
467
|
-
meta=np.array(())
|
|
474
|
+
meta=np.array(()),
|
|
475
|
+
**_dask_task_name_kwargs('xrspatial.fireline_intensity'))
|
|
468
476
|
|
|
469
477
|
|
|
470
478
|
def _fli_cupy(fuel_data, spread_data, heat_content):
|
|
@@ -477,7 +485,8 @@ def _fli_cupy(fuel_data, spread_data, heat_content):
|
|
|
477
485
|
|
|
478
486
|
def _fli_dask_cupy(fuel_data, spread_data, heat_content):
|
|
479
487
|
return da.map_blocks(_fli_cupy, fuel_data, spread_data, heat_content,
|
|
480
|
-
dtype=cupy.float32, meta=cupy.array(())
|
|
488
|
+
dtype=cupy.float32, meta=cupy.array(()),
|
|
489
|
+
**_dask_task_name_kwargs('xrspatial.fireline_intensity'))
|
|
481
490
|
|
|
482
491
|
|
|
483
492
|
def fireline_intensity(fuel_consumed_agg: xr.DataArray,
|
|
@@ -562,7 +571,8 @@ def _fl_gpu(intensity_data, out):
|
|
|
562
571
|
|
|
563
572
|
|
|
564
573
|
def _fl_dask(intensity_data):
|
|
565
|
-
return da.map_blocks(_fl_cpu, intensity_data, meta=np.array(())
|
|
574
|
+
return da.map_blocks(_fl_cpu, intensity_data, meta=np.array(()),
|
|
575
|
+
**_dask_task_name_kwargs('xrspatial.flame_length'))
|
|
566
576
|
|
|
567
577
|
|
|
568
578
|
def _fl_cupy(intensity_data):
|
|
@@ -575,7 +585,8 @@ def _fl_cupy(intensity_data):
|
|
|
575
585
|
|
|
576
586
|
def _fl_dask_cupy(intensity_data):
|
|
577
587
|
return da.map_blocks(_fl_cupy, intensity_data,
|
|
578
|
-
dtype=cupy.float32, meta=cupy.array(())
|
|
588
|
+
dtype=cupy.float32, meta=cupy.array(()),
|
|
589
|
+
**_dask_task_name_kwargs('xrspatial.flame_length'))
|
|
579
590
|
|
|
580
591
|
|
|
581
592
|
@supports_dataset
|
|
@@ -733,6 +744,7 @@ def _ros_dask(slope_data, wind_data, moisture_data,
|
|
|
733
744
|
w_0, h, M_x, beta, rho_b, Gamma, eta_s, xi, epsilon,
|
|
734
745
|
C_w, B_w, E_w,
|
|
735
746
|
meta=np.array(()),
|
|
747
|
+
**_dask_task_name_kwargs('xrspatial.rate_of_spread'),
|
|
736
748
|
)
|
|
737
749
|
|
|
738
750
|
|
|
@@ -758,6 +770,7 @@ def _ros_dask_cupy(slope_data, wind_data, moisture_data,
|
|
|
758
770
|
w_0, h, M_x, beta, rho_b, Gamma, eta_s, xi, epsilon,
|
|
759
771
|
C_w, B_w, E_w,
|
|
760
772
|
dtype=cupy.float32, meta=cupy.array(()),
|
|
773
|
+
**_dask_task_name_kwargs('xrspatial.rate_of_spread'),
|
|
761
774
|
)
|
|
762
775
|
|
|
763
776
|
|
|
@@ -907,6 +920,7 @@ def _kbdi_dask(kbdi_prev_data, max_temp_data, precip_data, annual_precip):
|
|
|
907
920
|
return da.map_blocks(
|
|
908
921
|
_kbdi_cpu, kbdi_prev_data, max_temp_data, precip_data, annual_precip,
|
|
909
922
|
meta=np.array(()),
|
|
923
|
+
**_dask_task_name_kwargs('xrspatial.kbdi'),
|
|
910
924
|
)
|
|
911
925
|
|
|
912
926
|
|
|
@@ -926,6 +940,7 @@ def _kbdi_dask_cupy(kbdi_prev_data, max_temp_data, precip_data,
|
|
|
926
940
|
_kbdi_cupy, kbdi_prev_data, max_temp_data, precip_data,
|
|
927
941
|
annual_precip,
|
|
928
942
|
dtype=cupy.float32, meta=cupy.array(()),
|
|
943
|
+
**_dask_task_name_kwargs('xrspatial.kbdi'),
|
|
929
944
|
)
|
|
930
945
|
|
|
931
946
|
|
|
@@ -29,6 +29,7 @@ except ImportError:
|
|
|
29
29
|
da = None
|
|
30
30
|
|
|
31
31
|
from xrspatial.utils import (
|
|
32
|
+
_dask_task_name_kwargs,
|
|
32
33
|
_validate_raster,
|
|
33
34
|
has_cuda_and_cupy,
|
|
34
35
|
is_cupy_array,
|
|
@@ -627,6 +628,7 @@ def _veg_roughness_nlcd_dask(data, lut):
|
|
|
627
628
|
return _da.map_blocks(
|
|
628
629
|
_apply_lut, data, dtype=np.float64,
|
|
629
630
|
meta=np.array((), dtype=np.float64),
|
|
631
|
+
**_dask_task_name_kwargs('xrspatial.vegetation_roughness_nlcd'),
|
|
630
632
|
)
|
|
631
633
|
|
|
632
634
|
|
|
@@ -669,6 +671,7 @@ def _veg_roughness_ndvi_dask(data):
|
|
|
669
671
|
return _da.map_blocks(
|
|
670
672
|
_apply, data, dtype=np.float64,
|
|
671
673
|
meta=np.array((), dtype=np.float64),
|
|
674
|
+
**_dask_task_name_kwargs('xrspatial.vegetation_roughness_ndvi'),
|
|
672
675
|
)
|
|
673
676
|
|
|
674
677
|
|
|
@@ -795,6 +798,7 @@ def _veg_cn_dask(lc, sg, lut):
|
|
|
795
798
|
return _da.map_blocks(
|
|
796
799
|
_apply, lc, sg, dtype=np.float64,
|
|
797
800
|
meta=np.array((), dtype=np.float64),
|
|
801
|
+
**_dask_task_name_kwargs('xrspatial.vegetation_curve_number'),
|
|
798
802
|
)
|
|
799
803
|
|
|
800
804
|
|
|
@@ -28,9 +28,22 @@ except ImportError:
|
|
|
28
28
|
from xrspatial.convolution import (_available_memory_bytes, _promote_float, convolve_2d,
|
|
29
29
|
custom_kernel)
|
|
30
30
|
from xrspatial.dataset_support import supports_dataset
|
|
31
|
-
from xrspatial.utils import (ArrayTypeFunctionMapping, _boundary_to_dask,
|
|
32
|
-
_validate_boundary, _validate_raster, _validate_scalar,
|
|
33
|
-
is_cupy_array, is_dask_cupy, ngjit)
|
|
31
|
+
from xrspatial.utils import (ArrayTypeFunctionMapping, _boundary_to_dask, _dask_task_name_kwargs,
|
|
32
|
+
_pad_array, _validate_boundary, _validate_raster, _validate_scalar,
|
|
33
|
+
cuda_args, is_cupy_array, is_dask_cupy, ngjit)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def _is_empty_raster(agg):
|
|
37
|
+
"""True if *agg* has a degenerate spatial axis (0 rows or 0 cols).
|
|
38
|
+
|
|
39
|
+
An empty raster has no cells to filter, but the GPU and dask paths
|
|
40
|
+
crash on it rather than no-op: ``cuda_args`` hands ``cuLaunchKernel``
|
|
41
|
+
a zero-sized grid, and ``map_overlap`` rejects a depth that exceeds
|
|
42
|
+
the (zero-length) axis. The numpy path already returns an empty
|
|
43
|
+
result with the input shape preserved, so the focal APIs short
|
|
44
|
+
circuit empty input to match it on every backend (issue #3225).
|
|
45
|
+
"""
|
|
46
|
+
return agg.shape[-2] == 0 or agg.shape[-1] == 0
|
|
34
47
|
|
|
35
48
|
|
|
36
49
|
def _validate_binary_kernel(kernel, func_name):
|
|
@@ -210,7 +223,8 @@ def _mean_dask_numpy(data, excludes, boundary='nan'):
|
|
|
210
223
|
out = data.map_overlap(_func,
|
|
211
224
|
depth=(1, 1),
|
|
212
225
|
boundary=_boundary_to_dask(boundary),
|
|
213
|
-
meta=np.array((), dtype=data.dtype)
|
|
226
|
+
meta=np.array((), dtype=data.dtype),
|
|
227
|
+
**_dask_task_name_kwargs('xrspatial.mean'))
|
|
214
228
|
return out
|
|
215
229
|
|
|
216
230
|
|
|
@@ -220,7 +234,8 @@ def _mean_dask_cupy(data, excludes, boundary='nan'):
|
|
|
220
234
|
out = data.map_overlap(_func,
|
|
221
235
|
depth=(1, 1),
|
|
222
236
|
boundary=_boundary_to_dask(boundary, is_cupy=True),
|
|
223
|
-
meta=cupy.array((), dtype=data.dtype)
|
|
237
|
+
meta=cupy.array((), dtype=data.dtype),
|
|
238
|
+
**_dask_task_name_kwargs('xrspatial.mean'))
|
|
224
239
|
return out
|
|
225
240
|
|
|
226
241
|
|
|
@@ -441,6 +456,16 @@ def mean(agg, passes=1, excludes=None, name='mean', boundary='nan'):
|
|
|
441
456
|
return _apply_per_band(mean, agg, passes=passes, excludes=excludes,
|
|
442
457
|
name=name, boundary=boundary)
|
|
443
458
|
|
|
459
|
+
if _is_empty_raster(agg):
|
|
460
|
+
# No cells to filter; return an empty result of the input shape
|
|
461
|
+
# and dtype contract, matching the numpy path on every backend
|
|
462
|
+
# (issue #3225).
|
|
463
|
+
return DataArray(agg.data.astype(_promote_float(agg.dtype)),
|
|
464
|
+
name=name,
|
|
465
|
+
dims=agg.dims,
|
|
466
|
+
coords=agg.coords,
|
|
467
|
+
attrs=agg.attrs)
|
|
468
|
+
|
|
444
469
|
# Preserve the input float dtype, promoting ints to float32 -- the same
|
|
445
470
|
# contract as apply() / focal_stats() (#2769) and convolve_2d() (#1096).
|
|
446
471
|
# Cast excludes to the working dtype so value matching behaves the same
|
|
@@ -565,7 +590,8 @@ def _apply_dask_numpy(data, kernel, func, boundary='nan'):
|
|
|
565
590
|
out = data.map_overlap(_func,
|
|
566
591
|
depth=(pad_h, pad_w),
|
|
567
592
|
boundary=_boundary_to_dask(boundary),
|
|
568
|
-
meta=np.array((), dtype=data.dtype)
|
|
593
|
+
meta=np.array((), dtype=data.dtype),
|
|
594
|
+
**_dask_task_name_kwargs('xrspatial.apply'))
|
|
569
595
|
return out
|
|
570
596
|
|
|
571
597
|
|
|
@@ -595,7 +621,8 @@ def _apply_dask_cupy(data, kernel, func, boundary='nan'):
|
|
|
595
621
|
out = data.map_overlap(_func,
|
|
596
622
|
depth=(pad_h, pad_w),
|
|
597
623
|
boundary=_boundary_to_dask(boundary, is_cupy=True),
|
|
598
|
-
meta=cupy.array((), dtype=data.dtype)
|
|
624
|
+
meta=cupy.array((), dtype=data.dtype),
|
|
625
|
+
**_dask_task_name_kwargs('xrspatial.apply'))
|
|
599
626
|
return out
|
|
600
627
|
|
|
601
628
|
|
|
@@ -759,6 +786,15 @@ def apply(agg=None, kernel=None, func=None, name='focal_apply',
|
|
|
759
786
|
chunks=getattr(agg.data, 'chunks', None),
|
|
760
787
|
itemsize=itemsize)
|
|
761
788
|
|
|
789
|
+
if _is_empty_raster(agg):
|
|
790
|
+
# No cells to filter; return an empty result of the input shape,
|
|
791
|
+
# matching the numpy path on every backend (issue #3225).
|
|
792
|
+
return DataArray(agg.data.astype(_promote_float(agg.dtype)),
|
|
793
|
+
name=name,
|
|
794
|
+
coords=agg.coords,
|
|
795
|
+
dims=agg.dims,
|
|
796
|
+
attrs=agg.attrs)
|
|
797
|
+
|
|
762
798
|
# apply kernel to raster values
|
|
763
799
|
# if agg is a numpy or dask with numpy backed data array,
|
|
764
800
|
# the function func must be a @ngjit
|
|
@@ -1246,7 +1282,8 @@ def _focal_stats_dask_cupy(agg, kernel, stats_funcs, boundary='nan'):
|
|
|
1246
1282
|
data = agg.data.astype(_promote_float(agg.data.dtype))
|
|
1247
1283
|
stats_data = data.map_overlap(
|
|
1248
1284
|
_func, depth=(pad_h, pad_w),
|
|
1249
|
-
boundary=dask_bnd, meta=cupy.array((), dtype=data.dtype)
|
|
1285
|
+
boundary=dask_bnd, meta=cupy.array((), dtype=data.dtype),
|
|
1286
|
+
**_dask_task_name_kwargs('xrspatial.focal_stats'))
|
|
1250
1287
|
stats_agg = xr.DataArray(
|
|
1251
1288
|
stats_data, dims=agg.dims, coords=agg.coords, attrs=agg.attrs)
|
|
1252
1289
|
stats_aggs.append(stats_agg)
|
|
@@ -1402,6 +1439,16 @@ def focal_stats(agg,
|
|
|
1402
1439
|
chunks=getattr(agg.data, 'chunks', None),
|
|
1403
1440
|
itemsize=itemsize)
|
|
1404
1441
|
|
|
1442
|
+
if _is_empty_raster(agg):
|
|
1443
|
+
# No cells to filter; build the empty stacked result the same way
|
|
1444
|
+
# the real paths do, reusing apply()'s empty short circuit so the
|
|
1445
|
+
# output matches the numpy path on every backend (issue #3225).
|
|
1446
|
+
stats_aggs = [apply(agg, kernel, boundary=boundary) for _ in stats_funcs]
|
|
1447
|
+
result = xr.concat(stats_aggs,
|
|
1448
|
+
pd.Index(stats_funcs, name='stats', dtype=object))
|
|
1449
|
+
result.name = name
|
|
1450
|
+
return result
|
|
1451
|
+
|
|
1405
1452
|
mapper = ArrayTypeFunctionMapping(
|
|
1406
1453
|
numpy_func=partial(_focal_stats_cpu, boundary=boundary),
|
|
1407
1454
|
cupy_func=partial(_focal_stats_cupy_boundary, boundary=boundary),
|
|
@@ -1587,9 +1634,11 @@ def _hotspots_dask_numpy(raster, kernel, boundary='nan'):
|
|
|
1587
1634
|
# all-NaN / single-valid-cell rasters raise at compute time instead of
|
|
1588
1635
|
# classifying to a silent all-zeros raster (issue #2843).
|
|
1589
1636
|
z_array = da.map_blocks(_gistar_validate_lazy, z_array, global_std, n,
|
|
1590
|
-
dtype=z_array.dtype, meta=z_array._meta
|
|
1637
|
+
dtype=z_array.dtype, meta=z_array._meta,
|
|
1638
|
+
**_dask_task_name_kwargs('xrspatial.hotspots.validate'))
|
|
1591
1639
|
out = z_array.map_blocks(_calc_hotspots_numpy,
|
|
1592
|
-
meta=np.array((), dtype=np.int8)
|
|
1640
|
+
meta=np.array((), dtype=np.int8),
|
|
1641
|
+
**_dask_task_name_kwargs('xrspatial.hotspots'))
|
|
1593
1642
|
return out
|
|
1594
1643
|
|
|
1595
1644
|
|
|
@@ -1627,9 +1676,11 @@ def _hotspots_dask_cupy(raster, kernel, boundary='nan'):
|
|
|
1627
1676
|
# all-NaN / single-valid-cell rasters raise at compute time instead of
|
|
1628
1677
|
# classifying to a silent all-zeros raster (issue #2843).
|
|
1629
1678
|
z_array = da.map_blocks(_gistar_validate_lazy, z_array, global_std, n,
|
|
1630
|
-
dtype=z_array.dtype, meta=z_array._meta
|
|
1679
|
+
dtype=z_array.dtype, meta=z_array._meta,
|
|
1680
|
+
**_dask_task_name_kwargs('xrspatial.hotspots.validate'))
|
|
1631
1681
|
out = z_array.map_blocks(_calc_hotspots_cupy,
|
|
1632
|
-
meta=cupy.array((), dtype=cupy.int8)
|
|
1682
|
+
meta=cupy.array((), dtype=cupy.int8),
|
|
1683
|
+
**_dask_task_name_kwargs('xrspatial.hotspots'))
|
|
1633
1684
|
return out
|
|
1634
1685
|
|
|
1635
1686
|
|
|
@@ -1805,6 +1856,15 @@ def hotspots(agg=None, kernel=None, name='hotspots', boundary='nan', *,
|
|
|
1805
1856
|
_check_kernel_vs_raster_memory(kernel, rows, cols, func_name='hotspots',
|
|
1806
1857
|
chunks=getattr(agg.data, 'chunks', None))
|
|
1807
1858
|
|
|
1859
|
+
if _is_empty_raster(agg):
|
|
1860
|
+
# An empty raster has no valid cells, so Gi* is undefined. Raise the
|
|
1861
|
+
# same clear error the numpy path already raises, before the cupy and
|
|
1862
|
+
# dask backends crash on a zero-sized reduction or overlap (#3225).
|
|
1863
|
+
raise ValueError(
|
|
1864
|
+
"hotspots() needs at least 2 valid (non-NaN) cells to "
|
|
1865
|
+
"compute the Getis-Ord Gi* statistic."
|
|
1866
|
+
)
|
|
1867
|
+
|
|
1808
1868
|
mapper = ArrayTypeFunctionMapping(
|
|
1809
1869
|
numpy_func=partial(_hotspots_numpy, boundary=boundary),
|
|
1810
1870
|
cupy_func=partial(_hotspots_cupy, boundary=boundary),
|
|
@@ -531,6 +531,11 @@ def _validate_write_rich_tag_optin(
|
|
|
531
531
|
triggered: list[str] = []
|
|
532
532
|
if attrs.get('gdal_metadata_xml') is not None:
|
|
533
533
|
triggered.append("attrs['gdal_metadata_xml']")
|
|
534
|
+
# ``_extract_rich_tags`` only builds GDAL XML from ``gdal_metadata``
|
|
535
|
+
# when it is a dict (and ``gdal_metadata_xml`` is absent); a non-dict
|
|
536
|
+
# value is ignored by the writer, so it does not need gating.
|
|
537
|
+
if isinstance(attrs.get('gdal_metadata'), dict):
|
|
538
|
+
triggered.append("attrs['gdal_metadata']")
|
|
534
539
|
if attrs.get('extra_tags') is not None:
|
|
535
540
|
triggered.append("attrs['extra_tags']")
|
|
536
541
|
if gdal_metadata_xml_kwarg is not None:
|
|
@@ -2211,6 +2216,11 @@ def _finalize_eager_read(
|
|
|
2211
2216
|
# ``_validation``; local import keeps ``_attrs`` free of a top-level
|
|
2212
2217
|
# validation dependency for parity with ``_validate_read_geo_info``.
|
|
2213
2218
|
dtype_cast_attr: str | None = None
|
|
2219
|
+
# Capture float-ness BEFORE the caller's ``dtype=`` cast so ``masked``
|
|
2220
|
+
# below reflects masking-promotion, not the cast (issue #3323). A
|
|
2221
|
+
# caller casting an unmasked int buffer to float must not flip
|
|
2222
|
+
# ``masked_nodata`` to True.
|
|
2223
|
+
pre_cast_is_float = np.dtype(str(arr.dtype)).kind == 'f'
|
|
2214
2224
|
if dtype is not None:
|
|
2215
2225
|
from ._validation import _validate_dtype_cast
|
|
2216
2226
|
target = np.dtype(dtype)
|
|
@@ -2219,16 +2229,18 @@ def _finalize_eager_read(
|
|
|
2219
2229
|
dtype_cast_attr = target.name
|
|
2220
2230
|
|
|
2221
2231
|
# Stamp the nodata lifecycle attrs. ``masked`` is True iff
|
|
2222
|
-
# the caller opted into masking AND the
|
|
2232
|
+
# the caller opted into masking AND the pre-cast buffer dtype is float.
|
|
2223
2233
|
# ``_apply_eager_nodata_mask`` promotes a maskable integer source to
|
|
2224
2234
|
# float64 whenever masking is on (issue #2990), so an ``int`` buffer +
|
|
2225
2235
|
# ``mask_nodata=True`` here means the sentinel was unmaskable
|
|
2226
2236
|
# (out-of-range / non-finite / fractional) and could never match, not
|
|
2227
2237
|
# that masking was disabled. Either way ``masked`` is correctly False
|
|
2228
|
-
# because the literal sentinel still occupies its integer slot.
|
|
2238
|
+
# because the literal sentinel still occupies its integer slot. Using
|
|
2239
|
+
# the pre-cast dtype keeps a caller ``dtype=<float>`` cast from
|
|
2240
|
+
# flipping ``masked`` True on that unmasked int buffer (issue #3323).
|
|
2229
2241
|
_set_nodata_attrs(
|
|
2230
2242
|
attrs, nodata,
|
|
2231
|
-
masked=(effective_mask and
|
|
2243
|
+
masked=(effective_mask and pre_cast_is_float),
|
|
2232
2244
|
pixels_present=nodata_pixels_present,
|
|
2233
2245
|
dtype_cast=dtype_cast_attr,
|
|
2234
2246
|
)
|
|
@@ -521,10 +521,15 @@ def _read_geotiff_dask(source: str, *,
|
|
|
521
521
|
# Share the validate-then-populate-then-stamp
|
|
522
522
|
# block with the dask+GPU backend via ``_finalize_lazy_read_attrs``.
|
|
523
523
|
#
|
|
524
|
-
# ``graph_dtype`` is the
|
|
525
|
-
#
|
|
526
|
-
#
|
|
527
|
-
#
|
|
524
|
+
# ``graph_dtype`` is ``effective_dtype`` -- the pre-cast graph dtype
|
|
525
|
+
# after the masking-induced int->float64 auto-promotion but BEFORE
|
|
526
|
+
# the caller's ``dtype=`` cast -- so ``masked_nodata`` reflects
|
|
527
|
+
# whether the per-chunk mask actually ran (masking on a maskable int
|
|
528
|
+
# source auto-promotes to float64; an un-promoted int graph means the
|
|
529
|
+
# sentinel was unmaskable and masking didn't run). Passing the
|
|
530
|
+
# post-cast ``target_dtype`` would let a caller ``dtype=<float>`` cast
|
|
531
|
+
# flip ``masked_nodata`` True on an unmasked int graph (issue #3323);
|
|
532
|
+
# the VRT path already threads its pre-cast dtype for the same reason.
|
|
528
533
|
# ``caller_dtype`` is the caller's ``dtype=`` kwarg verbatim so
|
|
529
534
|
# ``nodata_dtype_cast`` records caller intent rather than the
|
|
530
535
|
# masking-induced auto-promotion.
|
|
@@ -538,7 +543,7 @@ def _read_geotiff_dask(source: str, *,
|
|
|
538
543
|
geo_info=geo_info,
|
|
539
544
|
nodata=nodata_attr,
|
|
540
545
|
mask_nodata=(mask_nodata or mask_and_scale),
|
|
541
|
-
graph_dtype=
|
|
546
|
+
graph_dtype=effective_dtype,
|
|
542
547
|
caller_dtype=dtype,
|
|
543
548
|
window=window,
|
|
544
549
|
allow_rotated=allow_rotated,
|