Releases: NOAA-GFDL/NDSL
2025.11.00: Bug fix and experimental feature
Highlights
⚠️ API update -QuantityFactorrequires abackend⚠️ ndsl.Nanelistis no more - usef90nml.Namelistto read in Fortran namelist- 🔧 New stencil: min/max in column, with index and value
- 🐞 Absolute indexing in K, up-casting (mixed precision)
- 🔧 Relax overly defensive for write after read, notably on column
- 🔧 Dynamic/Runtime interval in
debugbackend - 🧪 Experimental merge & cache friendly optimization
All PRs
- Check gt4py-backend options in config by @twicki in #291
- fix: allow any Comm object in ZarrMonitor by @romanc in #292
- Patch domain checks to only happen once by @twicki in #293
- BREAKING CHANGE: change constructor of
QuantityFactoryby @romanc in #228 - BREAKING CHANGE: remove ndsl/exceptions by @romanc in #281
- BREAKING CHANGE: remove deprecated environment variables by @romanc in #282
- ci: specialize concurrency group per repo by @romanc in #287
- Remove ndsl.Namelist by @jjuyeonkim in #297
- [feature] Common data types for orchestration via
compiletimeby @FlorianDeconinck in #296 - BREAKING CHANGE: remove deprecated
ndsl/units.pyby @romanc in #283 - BREAKING CHANGE: removal of extra_dim_lengths by @romanc in #295
- BREAKING CHANGE: remove deprecated
ndsl/filesystem.pyby @romanc in #284 - build: gt4py update (fix absolute indexing in debug backend) by @romanc in #302
- docs: release checklist and documentation by @romanc in #299
- column min/max stencil - value and index by @CharlesKrop in #301
- build: gt4py udpdate (fix upcasting, abs k test coverage) by @romanc in #303
- restore default PR template by @romanc in #305
- BREAKING CHANGE: last 2025.10.00 deprecations (
CopyCorners,Quantity.values(),extra_dim_lengthsonSubtileGridSizerby @romanc in #300 - refactor: make GridSizer an abstract base class by @romanc in #306
- refactor: remove leftover debug print statements by @romanc in #308
- refactor: directly use gt_storage in
QuantityFactoryby @romanc in #307 - [Feature] Schedule Tree: refine transient by @FlorianDeconinck in #304
- build: gt4py update (upcasting in cast operations) by @romanc in #310
- build: gt4py update (precision of global constants) by @romanc in #313
- refactor: Quantity constructor:
gt4py_backend->backendby @romanc in #312 - refactor: prepare
ZarrMonitorfor upcommingCommchanges by @romanc in #315 - [Orchestration/Build]: Flag to force single cache for orchestration by @FlorianDeconinck in #311
- refactor:
Quantityconstructor: makebackenda required keyword argument by @romanc in #314 - Deprecate
CopyCornersXYby @romanc in #317 - refactor: remove
DummyCommas alias toLocalCommby @romanc in #319 - refactor: Deprecate
NullCommin favor ofMPICommandLocalCommby @romanc in #318 - build: gt4py update (self-assignment in serial vertical loops) by @romanc in #316
- refactor: specify
backendwhen allocating aQuantityby @romanc in #320 - [Translate test] Compute the percentage of changing grid points that error by @FlorianDeconinck in #322
- refactor: remove --no_legacy_namelist option of pytest by @jjuyeonkim in #323
- New functions: column_min_ddim & column_max_ddim by @CharlesKrop in #324
- [Optimization/Experimental] Better
AxisMergefor column physics by @FlorianDeconinck in #325 - [Feature/Experimental] Stree Refine Transient optimization pass: data dimensions and proper unit tests by @FlorianDeconinck in #327
- [Update] GT4Py & DaCe updated to 2025.11.25 state of
mainby @FlorianDeconinck in #330 - [Tool] Best Guess Netcdfs diff by @FlorianDeconinck in #177
- [Update] GT4Py updated to 2025.11.25 (bis) by @FlorianDeconinck in #331
- [Rework/Experimental] Refine Transient v2:
Rangesfor all! by @FlorianDeconinck in #328 - [Fix] [Translate] Update API for parallel test when using
MultiModalMetricby @FlorianDeconinck in #332 - NDSL 2025.11.00 by @FlorianDeconinck in #333
- NDSL 2025.11.00 (bis - bad merge) by @FlorianDeconinck in #334
Full Changelog: 2025.10.00...2025.11.00
2025.10.00
What's Changed
- README update by @romanc in #163
- refactor: avoid stringified type hints by @romanc in #168
- Improve eta tests and file handling by @romanc in #149
- Change
xarray.Dataset.{dims -> sizes}by @romanc in #169 - Update pre-commit hooks by @romanc in #172
- [Serialbox to NetCDF] Allow variables to not be saved in non zero ranks by @FlorianDeconinck in #174
- tests: re-enable caching tests and more cleanups in tests/dsl by @romanc in #175
- Store static eta files under
tests/databy @fmalatino in #171 - Fixes for external grid data read-in method by @fmalatino in #165
- Packaging: Use of pyproject.toml and move to minimal setup.py for modernization by @fmalatino in #159
- ci: Re-enable
flake8'sF401rule: no unused imports by @romanc in #180 - Fixes for GH200 hardware compilation (+ misc) by @FlorianDeconinck in #183
- ci: extend
blackformatter to jupyter notebooks by @romanc in #181 - Upgrade
mpi4pyto >4 by @FlorianDeconinck in #184 - [Fix] Multimodal override fix for Absolute Epsilon by @FlorianDeconinck in #187
- ci: Add cache for pre-commit environments by @romanc in #182
- Update GT4Py/DaCe to get "Debug Backend" and "Schedule Tree Bridge" by @romanc in #170
- Update readme with MPI / compiler recommendataions by @romanc in #191
- ci: configure tests to run on merge-queue by @romanc in #194
- Deprecate
PACE_*environment variables in favor ofNDSL_*by @romanc in #193 - Test: Merge queue test by @fmalatino in #197
- Test: Merge queue test - removing test file by @fmalatino in #198
- Update gt4py: support for literal precision by @romanc in #192
- tests: fix NaNs introduced into reference values by @romanc in #199
- build:
pytest-subtestsis a required dependency by @romanc in #201 - NDSL Documentation via MkDocs by @gmao-ckung in #205
- 2D Stencil Indexing Method by @oelbert in #54
- Minor QOL changes to translate test infrastructure by @CharlesKrop in #176
- Update gt4py: np.bool_ external and gtscript round() by @romanc in #207
- Updating NetCDF4 version to 1.7.2 for use by pyRTE-RRTMGP by @fmalatino in #210
- tests: Move test for GridIndexing.get_2d_compute_origin_domain() by @romanc in #209
- refactor: remove workaround in fill_corners_dgrid by @romanc in #204
- tests: remove an unused arguments in stencil definition by @romanc in #214
- fix: stencil wrapper field origins with data_dims by @romanc in #216
- fix: gpu/mpi synchronization issue with in-place all reduce sum by @romanc in #215
- ci: Effective cache sharing between PRs by @romanc in #202
- [Orchestration] Common cast operation replacements by @FlorianDeconinck in #211
- ci: Update actions/checkout v4 -> v5 by @romanc in #217
- perf: Optimize cpu compiler flags for dace:cpu by @romanc in #213
- fix: compile flags for GCC (14) on GH200 by @romanc in #219
- Adding a test for indexing 4-dimensional fields by @oelbert in #221
- refactor: use modern python for cached properties by @romanc in #227
- fix: fully type allocator and fix fallout by @romanc in #226
- fix: boilerplate allocation and layout warnings by @romanc in #225
- Deprecation warning for QuantityFactory constructor by @romanc in #231
- tests: stabilize `test_caches.py by @romanc in #236
- Remove
FrozenCompiledSDFGto avert the hidden behavior on orchestration call by @twicki in #220 - docs: improved docstrings in stencil, quantity and grid generation by @romanc in #233
- BREAKING CHANGE: orchestration boilerplate options by @romanc in #238
- GT4Py update and cleanups from milestone2 branch by @romanc in #237
- [Fix] DaCe build system should be tied more closely to existing configuration by @FlorianDeconinck in #241
- State V0 by @FlorianDeconinck in #242
- State: quick fix to v0 by @FlorianDeconinck in #245
- API cleanup: deprecate
OutOfBoundsErrorin favor ofIndexErrorby @romanc in #247 - API cleanup: deprecate
ndsl/filesystem.pyby @romanc in #249 - Namelist Refactor: Utility functions for namelist to dict + conftest --no_legacy_namelist by @jjuyeonkim in #246
- gt4py update: absolute K indexing (experimental) by @romanc in #252
- API cleanup: deprecate
ndsl/units.pyby @romanc in #248 - State features:
filland data dimensions support. by @FlorianDeconinck in #250 - Add
QuantityFactory.fullby @FlorianDeconinck in #256 - Translate tests: raise if test class can't be found by @romanc in #259
- Deprecation of
CopyCornersby @twicki in #240 - BREAKING CHANGE: remove unused global configuration by @romanc in #260
- deps: gt4py update (push ForScope down, error messages) by @romanc in #261
- [Feature] Internal timer to track runtime of orchestrated call by @FlorianDeconinck in #262
- refactor: imports cleanup by @romanc in #264
- ci: stricter type checking with
mypyby @romanc in #257 - ci: all the types (or at least most of them) enforced with
mypyby @romanc in #258 - ci: Add build docs step to PR workflows (and fix currently broken autodoc generation) by @romanc in #268
- refactor: modern type hints in NDSL by @romanc in #270
- ci|docs: automatic docs deployment when merging into develop by @romanc in #269
- Store information about the halo-size in the allocated Quantity by @twicki in #265
- Locals by @FlorianDeconinck in #266
- build: gt4py & dace update by @romanc in #271
- Propagate Halo Information by @twicki in #274
- Add domain-size checks on FrozenStencil by @twicki in #239
- [Translate] Allow slicing of N-Dimensions fields by @FlorianDeconinck in #273
- Add versioning by @twicki in #275
- Deprecate usage of ndsl.Namelist by @romanc in #276
- Refactor: QuantityFactory data dimensions operations by @FlorianDeconinck in #272
- tools: use flake8-bugbear by @romanc in #277
- Update gt4py to version 1.0.10 by @romanc in #278
- Development setup and early work for a Schedule Tree Optimizer Pipeline by @romanc in #189
- Native NDSL types for GT4Py 2D temporaries by @FlorianDeconinck in #280
- docs: update examples by @romanc in #285
- ci: create cache for translate test data by @romanc in #279
- build: gt4py update (temp annotation fix) by @romanc in #286
- [feature] Add 2D temporary support for NDSL's
BoolFieldIJby @FlorianDeconinck in #288 - Release version
2025.10.00by @romanc in #289
Full Changelog: 2025.05.00...2025.10.00
2025.05.00
What's Changed
- docs: Translate tests readme update by @romanc in #132
- Translate tests: no threshold analysis by default by @romanc in #134
- Ochestration with ConstantPropagation by @romanc in #139
- Features to support surface physics by @oelbert in #135
- Quantity.field has true array accessor to the compute domain on a Quantity by @FlorianDeconinck in #141
- Adding sw_dynamics to NamelistDefaults by @jjuyeonkim in #136
- Remove deprecated
floating_point_precision()by @romanc in #140 - Simple test for gt4py wrapper by @romanc in #142
- Expose stencil from gt4py by @romanc in #144
- Features used in the shallow convection and the PBL schemes by @oelbert in #130
- Field Bundle: Functional code for 4D array by @FlorianDeconinck in #143
- Grid metrics terms: mixed precision & GPU readiness by @FlorianDeconinck in #147
- [Experimental] Debugger by @FlorianDeconinck in #137
- Change gt4py imports in examples and tests by @romanc in #148
- build: update gt4py current state of
mainbranch by @romanc in #150 - Fix warning in tests by @romanc in #151
- Fix deprecation warning when reading model state by @romanc in #153
- tests: Don't exit on first failure by @romanc in #155
- No boost dependency anymore by @romanc in #158
- Optional and non-optional dependencies by @romanc in #154
New Contributors
- @CharlesKrop made their first contribution in #104
- @twicki made their first contribution in #123
- @jjuyeonkim made their first contribution in #136
Full Changelog: 2025.03.00...2025.05.00
2025.03.00
What's Changed
- For release
2025.03.00#127 - Fix saving NetCDF for parallel translate test #125
- Doc enhancment #123
- Grid Mixed Precision and Coriolis force load (+ QOL) #121
- Change deprecated np.product() to np.prod() #120
- Update GT4Py and DaCe to bring in refactored GT4Py/DaCe bridge that exposes control flow #119
- Mixed Precision fixes and QOL #118
- Feature: NetCDF output precision configurable #117
- Adds some quick capacities used in the post-radiation phase of the physics, including the Stefan-Boltzmann constant #116
- Adding temperature of h2o triple point #115
- [Feature] Porting workflow: enhancing errors readability #114
- [CI] Streamline linting workflow #110
- [build]: Bump DaCe to v1.0.1 #109
- [QOL] Logging, Type Hints and Quantity helpers #108
- [Translate test] Save better reports & netCDF for multiple ranks on failure #106
- Automatic Int precision and stencil regeneration change #104
- Adding in exception for compute domains with sizes less than or equal to halo size #103
Full Changelog: 2025.01.00...2025.03.00
2025.01.00
What's Changed
- [Feature] Expose stencil vertical domain to Frozen Stencil #78
- [Serialbox to Netcdf tool] Collapse all rank into 1 if rank have different sized data #82
- [F32] Constants must default to the system-wide floating point precision #88
- [F32] Fixes to translate test infrastructure & metric #91
- [Feature] Allreduce and allreduce for Communication #92
- [QOL] Fix for boilerplate to work on GPU #95
Full Changelog: 2024.09.00...2025.01.00
2024.09.00
What's Changed
- Update to
mypy1.4.1 by @FlorianDeconinck in #38 - Code coverage basics for pytest by @FlorianDeconinck in #40
- Boilerplate code for fast deploy of NDSL by @FlorianDeconinck in #39
- [Refactor] Centralize Translate Test architecture by @FlorianDeconinck in #45
- Jupyter Notebooks containing tutorials for GT4Py, NDSL, and Serialbox by @gmao-ckung in #48
- Cast parameters in Translate test to proper float precision by @FlorianDeconinck in #55
- Translate test: "default" grid over-compute the npx/npy parameters by @FlorianDeconinck in #56
- Containerized CI and expansion to trigger external tests by @mlee03 in #51
- Serialbox tool: fix type mismatch by @FlorianDeconinck in #61
- Improved docs for NDSL examples by @romanc in #63
- Support for pbl scheme by @oelbert in #66
- Option to merge blocks in serialized data by @oelbert in #68
- Multi-modal metric for 32-bit float translate tests by @FlorianDeconinck in #67
- Hotfix for LegacyMetric errors with 0 compute and 0 metric errors by @oelbert in #74
- Hotfix (non-ideal) for unreachable scalar variables by @fmalatino in #69
- Hotfix to handle bools in serialized test data by @oelbert in #75
- Ability to generate surface metric terms and addition of
test_eta.pyunit test by @fmalatino in #65 - [QOL] Break report Translate errors in terminal & files by @FlorianDeconinck in #77
Patches to come 🚧
Layout transparency issue - Vector halo update bug
Bugs with high number of ranks when using gt:cpu_ifirst backend
New Contributors
- @gmao-ckung made their first contribution in #48
- @mlee03 made their first contribution in #51
- @xyuan made their first contribution in #60
- @romanc made their first contribution in #62
- @oelbert made their first contribution in #66
Full Changelog: 2024.04.00...2024.09.00
2024.04.00
What's Changed
- Added basic_operations.py from pyFV3/stencils to ndsl/stencils by @fmalatino in #21
- Allow pressure coeff to be read from ak & bk data by @FlorianDeconinck in #34
- Release 2024.04.00 by @fmalatino in #35
Full Changelog: 2024.03.01...2024.04.00
2024.03.01
Updated README files and fixed existing circular imports across dependent repositories.
Submodules:
- DaCe @ b1a7f8a (2024.03.01)
- GT4py @ 66f8447 (2024.03.06)
PR List
- Update readme with CI badges & default py version by @FlorianDeconinck in #26
- Fixes for circular imports in pyFV3 by @fmalatino in #28
Full Changelog: 2024.03.00...2024.03.01
2024.03.00
First release version of NDSL
Physics parametrization feature from gt4py: GlobalTable to do read-only access to any dimensions in stencils.
Introduce python 3.11.7 as the canonical python version.
Submodules:
- DaCe @ b1a7f8a (2024.03.01)
- GT4py @ 66f8447 (2024.03.06)
PR list
- Add dace submodule that points to gcc_fix: #9
- Add 3.11.7 to python in unit tests: #11
- [Fix] f32 scalars in DaCe: #12
- Move
DaCeto top ofmasteras of March 1st.: #19 - [Update/GT4Py ] Grab
GlobalTablefeature: #20 - Adding and updating init files for modules: #14
New Contributors
- @FlorianDeconinck made their first contribution in #1
- @fmalatino made their first contribution in #9
Full Changelog: https://github.com/NOAA-GFDL/NDSL/commits/2024.03.00