Skip to content

Update README dependency graph to match current setup.cfg#1908

Merged
brendancol merged 4 commits into
mainfrom
issue-1907
May 15, 2026
Merged

Update README dependency graph to match current setup.cfg#1908
brendancol merged 4 commits into
mainfrom
issue-1907

Conversation

@brendancol
Copy link
Copy Markdown
Contributor

Summary

Rewrite img/dependencies.dot and re-render the SVG and PNG so the README diagram reflects what xarray-spatial actually depends on today.

  • Required (green, solid edges): numpy, xarray, numba, scipy, matplotlib, zstandard — every entry in install_requires.
  • Optional (yellow, dashed edges): cupy, cuspatial, rtxpy, kvikio, nvcomp, dask, dask-geopandas, shapely, geopandas, awkward, spatialpandas, pyproj, deflate.
  • Removed: datashader, holoviews, rasterio, GDAL, GEOS, fiona, rtree, libspatialindex, pandas. The first four contradict the README's "Free of GDAL / GEOS Dependencies" line and the built-in GeoTIFF reader/writer; the rest are no longer in the tree.

Closes #1907.

Test plan

  • grep -E "datashader|holoviews|rasterio|gdal|geos|rtree|libspatialindex|fiona" img/dependencies.dot returns no matches.
  • Each of kvikio, nvcomp, cuspatial, rtxpy, matplotlib, zstandard, pyproj, deflate, awkward, dask_geopandas appears in the .dot file.
  • dot -Tsvg and dot -Tpng regenerate the rendered images cleanly.
  • Reviewer opens img/dependencies.png in the PR and confirms the layout reads well at README width.

Copilot AI review requested due to automatic review settings May 15, 2026 13:01
@github-actions github-actions Bot added the performance PR touches performance-sensitive code label May 15, 2026
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the project’s dependency diagram assets so the README’s “Dependencies” graph reflects the current dependency set (core vs optional) rather than older Datashader/GDAL-era dependencies.

Changes:

  • Rewrote img/dependencies.dot to reflect current setup.cfg install requirements and optional extras/lazy GPU deps.
  • Regenerated the rendered SVG dependency diagram from the updated .dot source.
  • Removed legacy nodes/edges for packages no longer intended to appear in the README dependency graph (e.g., datashader/rasterio/GDAL/GEOS chain).

Reviewed changes

Copilot reviewed 1 out of 3 changed files in this pull request and generated 2 comments.

File Description
img/dependencies.dot Updates the Graphviz source defining core/optional dependency nodes and edges.
img/dependencies.svg Regenerated rendered dependency diagram to match the updated .dot graph.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread img/dependencies.dot Outdated
Comment on lines +8 to +14
subgraph required {
xarray_spatial -> datashader;
xarray_spatial -> numba;
xarray_spatial -> numpy;
xarray_spatial -> xarray;
xarray_spatial -> cupy;
xarray_spatial -> numba;
xarray_spatial -> scipy;
xarray_spatial -> matplotlib;
xarray_spatial -> zstandard;
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed in 75e7379 (and the earlier 20e5677). Required nodes use palegreen fill and required edges now use color=darkgreen so the rendered diagram matches the "green, solid edges" legend in the PR description. Optional nodes stay yellow with dashed edges.

Comment thread img/dependencies.dot
Comment on lines +58 to +61
kvikio [label=<<b>KvikIO</b><br />(GPUDirect Storage I/O)> fillcolor=lemonchiffon style=filled href="https://github.com/rapidsai/kvikio"];
nvcomp [label=<<b>nvCOMP</b><br />(GPU Decompression)> fillcolor=lemonchiffon style=filled href="https://developer.nvidia.com/nvcomp"];
dask [label=<<b>Dask</b><br />(Distributed-Ndarray)> fillcolor=lemonchiffon style=filled href="https://dask.org"];
dask_geopandas [label=<<b>dask-geopandas</b><br />(Distributed GeoDataFrame)> fillcolor=lemonchiffon style=filled href="https://github.com/geopandas/dask-geopandas"];
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed in 20e5677 and carried through 75e7379. The node is renamed from nvcomp to libnvcomp, its label is libnvcomp.so, and the xarray_spatial -> libnvcomp / libnvcomp -> cupy edges were updated to match. The href still points at the nvCOMP product page.

@brendancol
Copy link
Copy Markdown
Contributor Author

PR Review: Update README dependency graph to match current setup.cfg

Blockers (must fix before merge)

  • None

Suggestions (should fix, not blocking)

  • img/dependencies.dot:50,62,97libnvcomp and kvikio are not in setup.cfg under any extra. They are runtime dependencies of the GeoTIFF GPU path but installing the gpu extra (cupy, cuspatial) will not pull them in. Either add them to a setup.cfg extra (so the graph reflects what pip install xarray-spatial[gpu] actually installs), or add a short note in the README explaining the GPU GeoTIFF stack needs these installed separately. As is, the graph promises more than setup.cfg delivers.
  • img/dependencies.dot:28 — the second subgraph header was subgraph required before and is now subgraph optional. Graphviz does not enforce subgraph name uniqueness, but consider cluster_required / cluster_optional if you ever want the legend grouping to render as a visible cluster box. Pure cosmetic.

Nits (optional improvements)

  • img/dependencies.dot:108deflate node label reads "(GeoTIFF Codec)". The PyPI package is deflate (libdeflate bindings); labelling it as a codec is fine but a tooltip/href to https://github.com/dcwatson/deflate would match the treatment of the other optional nodes that have href=.
  • img/dependencies.dotdatashader is still listed in setup.cfg under the examples extra. Dropping it from the graph is defensible (examples are not runtime), but consider a one-line README caption clarifying that the graph shows runtime deps only, so readers do not infer that examples is gone.
  • img/dependencies.dot:51dask in setup.cfg is dask[array] (plus dask[dataframe] in doc). The graph node is just dask; fine as a simplification.

What looks good

  • Every install_requires entry (numpy, xarray, numba, scipy, matplotlib, zstandard) is represented as a green required node with an edge from xarray_spatial. Internal edges (xarray -> numpy, numba -> numpy, scipy -> numpy, matplotlib -> numpy) are accurate.
  • Optional extras optional (awkward, geopandas, shapely, spatialpandas, rtxpy), reproject (pyproj), geotiff (deflate), dask (dask, dask-geopandas), and gpu (cupy, cuspatial) all show up as yellow dashed nodes.
  • Removing datashader, holoviews, rasterio, gdal, geos, fiona, rtree, libspatialindex, pandas is correct — none of those are in the current tree, and the first four contradict the README's GDAL/GEOS-free claim and the built-in GeoTIFF reader.
  • Color swap aquamarine -> palegreen for required nodes matches the legend wording.
  • Renaming nvcomp to libnvcomp with the libnvcomp.so label avoids the misread that pip install nvcomp is the install path.
  • Graphviz 9.0.0 regenerated the SVG cleanly; the .dot syntax parses.

Checklist

  • Algorithm matches reference/paper — N/A (docs-only)
  • All implemented backends produce consistent results — N/A
  • NaN handling is correct — N/A
  • Edge cases are covered by tests — N/A
  • Dask chunk boundaries handled correctly — N/A
  • No premature materialization or unnecessary copies — N/A
  • Benchmark exists or is not needed — N/A (not needed)
  • README feature matrix updated (if applicable) — dependency graph is the README artifact and it is updated
  • Docstrings present and accurate — N/A

@brendancol
Copy link
Copy Markdown
Contributor Author

PR Review: Update README dependency graph to match current setup.cfg (re-review after rebase)

Rebased onto origin/main at 75e7379. Both Copilot inline comments resolved in prior commits (20e5677, 211942c) plus a small follow-up here.

Scope

  • img/dependencies.dot: explicit edge [color=darkgreen] inside cluster_required so required edges render in green, matching the legend wording in the PR description.
  • Regenerated img/dependencies.svg, img/dependencies.png, and docs/source/_static/img/dependencies.svg from the updated .dot.

Blockers

  • None

Suggestions

  • None

Verification

  • grep -E "datashader|holoviews|rasterio|gdal|geos|rtree|libspatialindex|fiona" img/dependencies.dot returns no matches.
  • dot -Tsvg and dot -Tpng produce the rendered images cleanly (graphviz 9.0.0).
  • libnvcomp node + edges replace the prior nvcomp spelling; href still points at the nvCOMP product page.
  • Required nodes use palegreen fill, optional nodes use lemonchiffon, optional edges keep style=dashed.

Rewrite img/dependencies.dot and re-render the SVG and PNG so the
diagram reflects what xarray-spatial actually depends on today.

Required deps (green): numpy, xarray, numba, scipy, matplotlib,
zstandard.

Optional deps (yellow, dashed): cupy, cuspatial, rtxpy, kvikio,
nvcomp, dask, dask-geopandas, shapely, geopandas, awkward,
spatialpandas, pyproj, deflate.

Removed datashader, holoviews, rasterio, GDAL, GEOS, fiona, rtree,
libspatialindex, and pandas. The first four conflict with the
README's "Free of GDAL / GEOS Dependencies" claim and the built-in
GeoTIFF reader/writer; the rest are no longer in the tree.
- Recolor required nodes ``aquamarine -> palegreen`` so the
  rendered diagram matches the PR description's "Required (green)"
  legend. The previous aquamarine fill drifted from the intended
  green and would mislead readers using the legend as a key.
- Rename the ``nvcomp`` node to ``libnvcomp``, update the label to
  ``libnvcomp.so``, and keep the official nvCOMP product page as
  the href. The optional dependency is the shared library
  ``libnvcomp.so`` loaded via kvikio/cuda; spelling it as
  ``nvcomp`` invited the misread that ``pip install nvcomp`` is the
  install instruction.
- Regenerate the SVG/PNG from the updated .dot so the rendered
  images match the source.
@brendancol
Copy link
Copy Markdown
Contributor Author

Rebased onto current main at 6cd038e to pick up the Python 3.14 CI matrix limit (b1579f8).

@brendancol brendancol merged commit d7b0dac into main May 15, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

performance PR touches performance-sensitive code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Update README dependency graph to match current setup.cfg

2 participants