Skip to content

Harden code, tests, and documentation for robustness and compliance - #96

Merged
bbakernoaa merged 14 commits into
NOAA-EMC:mainfrom
bbakernoaa:main
May 16, 2026
Merged

Harden code, tests, and documentation for robustness and compliance#96
bbakernoaa merged 14 commits into
NOAA-EMC:mainfrom
bbakernoaa:main

Conversation

@bbakernoaa

Copy link
Copy Markdown
Collaborator

This pull request adds significant new functionality and tests to the xregrid accessors for xarray.DataArray and xarray.Dataset, making them more flexible and user-friendly. The main changes include allowing the accessors' .to() method to accept either a target grid or a pre-computed Regridder, adding convenience methods for regridder creation and diagnostics plotting, and introducing comprehensive tests for these features.

Enhancements to accessor functionality:

  • The .to() method for both DataArray and Dataset accessors now accepts either a target grid (xr.Dataset) or an existing Regridder instance, enabling more efficient and flexible regridding workflows. [1] [2]
  • Added .get_regridder() convenience methods to both accessors, allowing users to easily create and reuse a Regridder instance. [1] [2]
  • Introduced .plot_diagnostics() methods to both accessors, providing a simple interface for visualizing regridding diagnostics directly from a DataArray or Dataset. [1] [2]

Testing improvements:

  • Added new tests in tests/test_accessors.py to verify the new accessor behaviors, including support for both eager (NumPy) and lazy (Dask) arrays, regridding with a Regridder instance, and smoke tests for the diagnostics plotting methods.

Type hint improvements:

  • Updated type hints to use Union[xr.Dataset, Regridder] for the target_grid parameter, reflecting the expanded input options.

These changes make the regridding API more flexible and user-friendly, and the new tests ensure robustness and correct behavior.

bbakernoaa and others added 14 commits May 9, 2026 07:33
- Refactor `.values` calls in `grid.py` to maintain Dask laziness for mask handling.
- Implement `Regridder.clear_cache()` and `clear_instance_cache()` for improved memory management.
- Add `__del__` to `Regridder` to ensure automatic cleanup of worker-local caches.
- Improve ESMF error handling by translating cryptic codes into descriptive messages.
- Harden `_apply_weights_core` to handle empty or NaN-only input arrays gracefully.
- Add comprehensive new tests for hardening verification, Aero Protocol compliance, and cache isolation.
- Format codebase with `ruff`.
- Resolved formatting issues in test files and core logic.
- Added missing NumPy-style docstrings and type hints to CLI and internal functions.
- Verified that all unit tests pass with both Eager and Lazy backends.
- Ensured compliance with the Aero Protocol for backend-agnostic computation.
- Verified that pre-commit hooks (ruff, ruff-format) pass completely.
Moved approximately 70 fragmented test files into 11 categorical files:
- test_backends.py
- test_diagnostics.py
- test_grids.py
- test_integration.py
- test_misc.py
- test_optimization.py
- test_protocol.py
- test_regridder.py
- test_unstructured.py
- test_utils.py
- test_viz.py

Each file contains migrated test functions and classes, with name conflicts
resolved by appending suffixes. Shared fixtures like dask_client and
sample_input were preserved. All original test_aero_*.py and other redundant
test files were removed to improve repository structure and maintainability.
…8799792

Consolidate and logically name test suite
- Add Architecture overview with Mermaid diagram to index.md
- Create Scientific Hygiene guide (Aero Protocol, NaN handling, diagnostics)
- Document xarray accessors in new accessors.md
- Complete missing grid generation utilities in utils.md
- Update navigation and examples README
- Fix SyntaxError and missing import in tests/test_utils.py
Harden Documentation and Scientific Guides
- Replace star imports with explicit imports in `tests/test_utils.py`.
- Fix bare except in `tests/test_utils.py`.
- Remove redundant empty test files that only contained star imports and no tests.
- Consolidate ESMF check logic in `tests/test_utils.py`.
- Ensure compliance with `ruff` linting rules.
- Update `.regrid.to()` to support passing a pre-computed `Regridder` instance, avoiding redundant weight generation.
- Add `.regrid.get_regridder()` to both DataArray and Dataset accessors to allow users to extract and reuse regridders.
- Add `.regrid.plot_diagnostics()` to accessors for rapid quality control.
- Ensure all new methods follow the Aero Protocol (backend-agnostic, strictly typed, NumPy docstrings).
- Add comprehensive tests in `tests/test_accessors.py` covering NumPy and Dask backends.
…8936950334624906

Optimize xarray accessors for weight reuse and diagnostics
@bbakernoaa
bbakernoaa merged commit 61b2aab into NOAA-EMC:main May 16, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant