Document surface_distance backends, geodesic limits, and add runnable examples - #3724
Document surface_distance backends, geodesic limits, and add runnable examples#3724brendancol wants to merge 2 commits into
Conversation
…#3714) The three public functions in surface_distance.py had no runnable example, no statement of which array backends they support, and no note that method='geodesic' works on NumPy input only. - State NumPy / CuPy / Dask+NumPy / Dask+CuPy support, matching the wording cost_distance() already uses. - Say on the method parameter that geodesic requires a NumPy-backed DataArray; the other three backends raise NotImplementedError. - Add a .. sourcecode:: python Examples block to each function, output pinned to a real run on this host. - Note on surface_direction() that the unbounded dask path currently returns wrong bearings, and link the fix to #3713. - Add docstring guard tests plus checks that the pinned example output is what the functions return.
Self-reviewScope. Two files, docstrings and tests. No kernel, dispatcher, or Things I checked before writing the wording.
Deliberate non-changes.
Risk. The pinned example outputs are the only thing that can rot, and |
|
Merge-order note for whoever reviews this: the PR #3729 (test-coverage sweep, same /deep-sweep run) fixes #3713. If #3729 lands first, that paragraph becomes documentation of a bug that no longer exists, and it will keep pointing users at a closed issue. Suggested order: merge #3729 first, then drop the stale paragraph from this PR before merging. The rest of this PR — the backend-support statement, the |
Closes #3714.
grep -c '>>>' xrspatial/surface_distance.pyreturned 0. The three publicfunctions were also silent about which array backends they accept, and about
the fact that
method='geodesic'runs on one backend out of four. This PR isdocstrings and tests only; no behaviour changes.
Changes
Backend statement.
surface_distance(),surface_allocation(), andsurface_direction()now say they support NumPy, CuPy, Dask with NumPy, andDask with CuPy backed DataArrays and return the type they were given. That
matches
cost_distance()'s existing wording and what_compute()actuallydispatches to. Verified by running all twelve function/backend combinations
on a CUDA host — every one produced a float32 result, which is what the
Returns sections claim.
Geodesic caveat. The
methodparameter now says geodesic requires aNumPy-backed DataArray. Observed:
Examples. Each function gets a
.. sourcecode:: pythonblock. Thesurface_distance()one puts a peak in the middle of a flat 3x3 grid so theoutput shows the thing the function exists for: the far corner is cheaper to
reach around the peak (3.41) than the summit is to climb (3.32). Every pinned
output came from executing the example; the new tests re-run them.
Known-issue note on
surface_direction(). While checking the backendclaims I found that the unbounded dask path returns bearings measured from
the wrong origin in every chunk but the first. That is a code bug, not a
documentation bug, so it is filed separately as #3713 and not fixed here; the
docstring now points at it rather than implying dask output is trustworthy.
The note should come out when #3713 lands, and no test pins it, so removing
it will not turn CI red.
Tests
xrspatial/tests/test_surface_distance.pygains 13 tests in the shape of theexisting
test_docstring_states_all_backends/test_docstring_has_examples_sectionguards intest_proximity.py,test_cost_distance.py, andtest_edge_detection.py:Examplessection containing>>>, and nothree-dot
... sourcecode::(which renders as literal text)NotImplementedError, so the documentedlimitation stays tied to the behaviour
37 before, 50 after.
xrspatial/tests/test_accessor.py(98 passed) andtest_dask_task_names.pyalso stay green.One pre-existing
flake8F841 attest_surface_distance.py:236predates thisbranch and is left alone.
Found by
/sweep-documentationonsurface_distance.