Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
4b3d440
Check gt4py-backend options in config (#291)
twicki Oct 29, 2025
cd5dd0d
fix: allow any Comm object in ZarrMonitor (#292)
romanc Oct 29, 2025
103e633
Patch domain checks to only happen once (#293)
twicki Oct 30, 2025
bdbf157
BREAKING CHANGE: change constructor of `QuantityFactory` (#228)
romanc Oct 30, 2025
dd620f0
BREAKING CHANGE: remove ndsl/exceptions (#281)
romanc Oct 30, 2025
7118bad
BREAKING CHANGE: remove deprecated environment variables (#282)
romanc Oct 30, 2025
d8027ea
ci: specialize concurrency group per repo (#287)
romanc Oct 30, 2025
d5f3e54
Remove ndsl.Namelist (#297)
jjuyeonkim Oct 31, 2025
2145824
[feature] Common data types for orchestration via `compiletime` (#296)
FlorianDeconinck Oct 31, 2025
f0f6798
BREAKING CHANGE: remove deprecated ndsl/units.py (#283)
romanc Oct 31, 2025
616d02b
BREAKING CHANGE: removal of extra_dim_lengths (#295)
romanc Oct 31, 2025
911ae32
BREAKING CHANGE: remove deprecated ndsl/filesystem.py (#284)
romanc Oct 31, 2025
a89dd22
docs: release checklist and documentation (#299)
romanc Nov 3, 2025
7534675
gt4py update: fix absolute indexin in debug backend (#302)
romanc Nov 3, 2025
25092ad
column min/max stencil - value and index (#301)
CharlesKrop Nov 3, 2025
d1be2e7
build: gt4py udpdate (fix upcasting, abs k test coverage) (#303)
romanc Nov 3, 2025
dd931b2
restore default PR template (#305)
romanc Nov 3, 2025
2c9946c
BREAKING CHANGE: last 2025.10.00 deprecations (`CopyCorners`, `Quanti…
romanc Nov 4, 2025
f66e473
refactor: remove leftover debug print statements (#308)
romanc Nov 5, 2025
9708cac
refactor: make GridSizer an abstract base class (#306)
romanc Nov 5, 2025
baadd98
refactor: directly use gt_storage in QuantityFactory (#307)
romanc Nov 5, 2025
67ecc90
[Feature] Schedule Tree: refine transient (#304)
FlorianDeconinck Nov 5, 2025
7215954
build: gt4py update (upcasting in cast operations) (#310)
romanc Nov 6, 2025
74a144d
build: gt4py update (precision of global constants) (#313)
romanc Nov 7, 2025
32eacf6
refactor: Quantity constructor: `gt4py_backend` -> `backend` (#312)
romanc Nov 10, 2025
a76b671
refactor: prepare `ZarrMonitor` for upcomming `Comm` changes (#315)
romanc Nov 10, 2025
cbfa2a3
Introduce a `single_code_path` flag in the DaCeConfig that forces a s…
FlorianDeconinck Nov 10, 2025
66d3515
refactor: Deprecate optional backend argument to Quantity/Local (#314)
romanc Nov 12, 2025
51cae6f
refactor: remove DummyComm as alias to LocalComm (#319)
romanc Nov 13, 2025
9c84e75
Deprecate `CopyCornersXY` (#317)
romanc Nov 13, 2025
29bbbad
refactor: Deprecate `NullComm` in favor of `MPIComm` and `LocalComm` …
romanc Nov 13, 2025
1098794
build: gt4py update (self-assignment in serial vertical loops) (#316)
romanc Nov 13, 2025
18919a8
refactor: specify backend when allocating a Quantity (#320)
romanc Nov 13, 2025
e8177b7
[Translate test] Compute the percentage of changing grid points that …
FlorianDeconinck Nov 14, 2025
da1d2e7
Removing --no_legacy_namelist flag (#323)
jjuyeonkim Nov 14, 2025
b4d109e
Added new functions: column_min_ddim & column_max_ddim and coorespond…
CharlesKrop Nov 14, 2025
3812e02
[Optimization/Experimental] Better `AxisMerge` for column physics (#325)
FlorianDeconinck Nov 19, 2025
7b80a19
[Feature/Experimental] Stree Refine Transient optimization pass: dat…
FlorianDeconinck Nov 20, 2025
e965bea
[Update] GT4Py & DaCe updated to 2025.11.25 state of `main` (#330)
FlorianDeconinck Nov 25, 2025
9129624
[Tool] Best Guess Netcdfs diff (#177)
FlorianDeconinck Nov 25, 2025
57a1ba4
Update `gt4py` to capture improvement to user error (#331)
FlorianDeconinck Nov 26, 2025
a7898db
[Rework/Experimental] Refine Transient v2: `Ranges` for all! (#328)
FlorianDeconinck Nov 26, 2025
abcc3cd
[Fix] [Translate] Update API for parallel test when using `MultiModal…
FlorianDeconinck Nov 26, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Pull request templates

- `../pull_request_template.md`: The default pull request template. Used for PRs.
- `release.md`: Special template used for releasing a new version of NDSL.
- `release-patch.md`: Special template used for patch releases.

Note: GitHub has limited support for multiple pull request templates. Most notably, templates can only be [selected by an URL query parameter](https://github.com/orgs/community/discussions/4620) and there's currently [no way to set a title](https://github.com/orgs/community/discussions/63965).

Note: GitHub does not support having the default pull request template in this folder. All templates in this folder can only be used with the `template=` URL parameter (see note above).
32 changes: 32 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE/release-patch.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Release NDSL version `YYYY.MM.PP`

This PR patches release `YYYY.MM.PP` because

1. reason
2. reason
3. ...

## Pre-release checklist

Things to do before the patch release. Helps to keep the fallout from this release as minimal as possible.

- [ ] setup a draft PR in [NOAA-GFDL/pace](https://github.com/NOAA-GFDL/pace) with updated submodules for `NDSL`, `pyFV3`, and `pySHiELD`.
Don't merge yet - just let CI run and fix potential issues before the release. To be merged afterwards, see post-release checklist.

## Release checklist

What to do to actually release:

- [x] create this PR to merge changes from `my-patches` into `main`
- use "squash merge"
- [ ] once merged, create a GitHub release and tag the new version
- version format is `[year].[month].[patch]`. Increase the patch version, e.g. `2025.10.01` if this is patching the `2025.10.00` release.
- let GitHub auto-generate release notes from the last tagged version
- [ ] send an announcement on Mattermost

## Post-release checklist

What to do after a release:

- [ ] update the pace PR from the pre-commit checklist to include the released version of NDSL and merge it.
- [ ] in NDSL, merge `main` back into `develop` (potentially adding a commit to fix the issue "properly")
26 changes: 26 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE/release.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Release NDSL version `YYYY.MM.00`

## Pre-release checklist

Things to do before the release. Helps to keep the fallout from this release as minimal as possible.

- [ ] setup a draft PR in [NOAA-GFDL/pace](https://github.com/NOAA-GFDL/pace) with updated submodules for `NDSL`, `pyFV3`, and `pySHiELD`.
Don't merge yet - just let CI run and fix potential issues before the release. To be merged afterwards, see post-release checklist.

## Release checklist

What to do to actually release:

- [x] create this PR to merge changes from `develop` into `main`
- merge as "Merge commit"
- [ ] once merged, create a GitHub release and tag the new version
- version format is `[year].[month].[patch]`, e.g. `2025.10.00`
- let GitHub auto-generate release notes from the last tagged version
- [ ] send an announcement on Mattermost

## Post-release checklist

What to do after a release:

- [ ] update the pace PR from the pre-commit checklist to include the released version of NDSL and merge it.
- [ ] merge breaking changes in NDSL (e.g. search for deprecation warnings)
File renamed without changes.
6 changes: 3 additions & 3 deletions .github/workflows/create-cache.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ on:

# Cancel running jobs if there's a newer push
concurrency:
group: ${{ github.repository }}-${{ github.workflow }}-${{ github.ref }}
group: ndsl-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
Expand Down Expand Up @@ -45,8 +45,8 @@ jobs:

# GitHub Actions cache of pyFV3 test data
pyFV3_test_data:
uses: NOAA-GFDL/pyFV3/.github/workflows/create_cache.yml@develop
uses: NOAA-GFDL/pyFV3/.github/workflows/create_cache.yaml@develop

# GitHub Actions cache of pySHiELD test data
pySHiELD_test_data:
uses: NOAA-GFDL/pySHiELD/.github/workflows/create_cache.yml@develop
uses: NOAA-GFDL/pySHiELD/.github/workflows/create_cache.yaml@develop
2 changes: 1 addition & 1 deletion .github/workflows/docs_build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
python-version: '3.11'

- name: Install mkdocs
run: pip install mkdocs-material mkdocstrings[python]
run: pip install mkdocs-material mkdocstrings[python] mkdocs-exclude

- name: Build docs
run: mkdocs build
2 changes: 1 addition & 1 deletion .github/workflows/docs_deploy.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ jobs:
python-version: 3.11

- name: Install dependencies
run: pip install mkdocs-material mkdocstrings[python]
run: pip install mkdocs-material mkdocstrings[python] mkdocs-exclude

- name: Deploy docs to GitHub Pages
run: mkdocs gh-deploy --force
2 changes: 1 addition & 1 deletion .github/workflows/unit_tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jobs:
run: pip3 install mpich

- name: Install Python packages
run: pip3 install .[test]
run: pip3 install .[test,zarr]

- name: Run serial-cpu tests
run: coverage run --rcfile=pyproject.toml -m pytest tests
Expand Down
3 changes: 0 additions & 3 deletions docs/docstrings/testing/dummy_comm.md

This file was deleted.

3 changes: 0 additions & 3 deletions docs/docstrings/top/exceptions.md

This file was deleted.

3 changes: 0 additions & 3 deletions docs/docstrings/top/filesystem.md

This file was deleted.

3 changes: 0 additions & 3 deletions docs/docstrings/top/namelist.md

This file was deleted.

3 changes: 0 additions & 3 deletions docs/docstrings/top/units.md

This file was deleted.

3 changes: 3 additions & 0 deletions docs/internal/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Internal documentation

This folder contains internal / developer documentation and processes, e.g. how to build a release. This folder is thus ignored when building the public facing documentation from the `docs/` folder.
24 changes: 24 additions & 0 deletions docs/internal/release.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Release a new version

This internal documentation guides you through the process of releasing a new version of NDSL. It is very simple:

1. Click [create a release](https://github.com/NOAA-GFDL/NDSL/compare/main...develop?expand=1&template=release.md) and follow the steps in the release checklist.

## Patch release

Every now and then, we'll need to patch the currently released version of NDSL. To do so, follow these steps:

1. Create a branch from `main`.
2. Commit your changes on that branch.
3. Use the following URL <https://github.com/NOAA-GFDL/NDSL/compare/main...[your-branch-name]?expand=1&template=release-patch.md> and follow the steps in the patch release checklist.

As an example, you'd go and create branch `my-patches` from `main`

```bash
git checkout main
git switch -c my-patches
# do changes ...
git push
```

and in that case, the URL with the patch release template is: <https://github.com/NOAA-GFDL/NDSL/compare/main...my-patches?expand=1&template=release-patch.md>.
4 changes: 2 additions & 2 deletions docs/user/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,13 @@ NDSL tries to have sensible defaults. In cases you want tweak something, here ar

### Literal precision (float/int)

Unspecified integer and floating point literals (e.g. `42` and `3.1415`) default to 64-bit precision. This can be changed with the environment variable `PACE_FLOAT_PRECISION`.
Unspecified integer and floating point literals (e.g. `42` and `3.1415`) default to 64-bit precision. This can be changed with the environment variable `NDSL_LITERAL_PRECISION`.

For mixed precision code, you can specify the "hard coded" precision with type hints and casts, e.g.

```python
with computation(PARALLEL), interval(...):
# Either 32-bit or 64-bit depending on `PACE_FLOAT_PRECISION`
# Either 32-bit or 64-bit depending on `NDSL_LITERAL_PRECISION`
my_int = 42
my_float = 3.1415

Expand Down
2 changes: 1 addition & 1 deletion external/gt4py
Submodule gt4py updated 141 files
7 changes: 3 additions & 4 deletions mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,12 @@ nav:
- "boilerplate": docstrings/top/boilerplate.md
- "buffer": docstrings/top/buffer.md
- "constants": docstrings/top/constants.md
- "exceptions": docstrings/top/exceptions.md
- "filesystem": docstrings/top/filesystem.md
- "io": docstrings/top/io.md
- "logging": docstrings/top/logging.md
- "namelist": docstrings/top/namelist.md
- "optional_imports": docstrings/top/optional_imports.md
- "types": docstrings/top/types.md
- "typing": docstrings/top/typing.md
- "units": docstrings/top/units.md
- "utils": docstrings/top/utils.md
- checkpointer:
- "base": docstrings/checkpointer/base.md
Expand Down Expand Up @@ -106,7 +103,6 @@ nav:
- "tridiag": docstrings/stencils/tridiag.md
- testing:
- "comparison": docstrings/testing/comparison.md
- "dummy_comm": docstrings/testing/dummy_comm.md
- "perturbation": docstrings/testing/perturbation.md
- viz:
- "cube_sphere": docstrings/viz/cube_sphere.md
Expand Down Expand Up @@ -149,6 +145,9 @@ plugins:
paths: [./ndsl] # Adjust this path to where your Python modules are
options:
show_source: false
- exclude:
glob:
- internal/*

watch:
# reload when the glossary file is updated
Expand Down
6 changes: 0 additions & 6 deletions ndsl/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,18 +19,15 @@
from .dsl.ndsl_runtime import NDSLRuntime
from .dsl.stencil import FrozenStencil, GridIndexing, StencilFactory, TimingCollector
from .dsl.stencil_config import CompilationConfig, RunMode, StencilConfig
from .exceptions import OutOfBoundsError
from .halo.data_transformer import HaloExchangeSpec
from .halo.updater import HaloUpdater, HaloUpdateRequest, VectorInterfaceHaloUpdater
from .initialization import GridSizer, QuantityFactory, SubtileGridSizer
from .monitor.netcdf_monitor import NetCDFMonitor
from .namelist import Namelist
from .performance.collector import NullPerformanceCollector, PerformanceCollector
from .performance.profiler import NullProfiler, Profiler
from .performance.report import Experiment, Report, TimeReport
from .quantity import Local, Quantity, State
from .quantity.field_bundle import FieldBundle, FieldBundleType # Break circular import
from .testing.dummy_comm import DummyComm
from .types import Allocator
from .utils import MetaEnumStr

Expand Down Expand Up @@ -62,7 +59,6 @@
"CompilationConfig",
"RunMode",
"StencilConfig",
"OutOfBoundsError",
"HaloExchangeSpec",
"HaloUpdater",
"HaloUpdateRequest",
Expand All @@ -72,7 +68,6 @@
"SubtileGridSizer",
"ndsl_log",
"NetCDFMonitor",
"Namelist",
"NullPerformanceCollector",
"PerformanceCollector",
"NullProfiler",
Expand All @@ -83,7 +78,6 @@
"Quantity",
"FieldBundle",
"FieldBundleType",
"DummyComm",
"Allocator",
"MetaEnumStr",
"State",
Expand Down
13 changes: 10 additions & 3 deletions ndsl/boilerplate.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
DaceConfig,
DaCeOrchestration,
GridIndexing,
NullComm,
MPIComm,
QuantityFactory,
RunMode,
StencilConfig,
Expand Down Expand Up @@ -54,6 +54,13 @@ def _get_factories(
)

if topology == "tile":
mpi_comm = MPIComm()
if mpi_comm.Get_size() != 1:
raise ValueError(
"Single tile topology requested with an MPI communicator of size "
f"{mpi_comm.Get_size()} > 1. Re-configure MPI to run on only one rank."
)

partitioner = TilePartitioner((1, 1))
sizer = SubtileGridSizer.from_tile_params(
nx_tile=nx,
Expand All @@ -63,13 +70,13 @@ def _get_factories(
layout=partitioner.layout,
tile_partitioner=partitioner,
)
comm = TileCommunicator(comm=NullComm(0, 1, 42), partitioner=partitioner)
comm = TileCommunicator(comm=mpi_comm, partitioner=partitioner)
else:
raise NotImplementedError(f"Topology {topology} is not implemented.")

grid_indexing = GridIndexing.from_sizer_and_communicator(sizer, comm)
stencil_factory = StencilFactory(config=stencil_config, grid_indexing=grid_indexing)
quantity_factory = QuantityFactory.from_backend(sizer, backend)
quantity_factory = QuantityFactory(sizer, backend=backend)

return stencil_factory, quantity_factory

Expand Down
3 changes: 2 additions & 1 deletion ndsl/comm/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
CachingRequestReader,
CachingRequestWriter,
)
from .comm_abc import Comm, Request
from .comm_abc import Comm, ReductionOperator, Request


__all__ = [
Expand All @@ -15,5 +15,6 @@
"CachingRequestReader",
"CachingRequestWriter",
"Comm",
"ReductionOperator",
"Request",
]
11 changes: 6 additions & 5 deletions ndsl/comm/communicator.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ def _create_all_reduce_quantity(
units=input_metadata.units,
origin=input_metadata.origin,
extent=input_metadata.extent,
gt4py_backend=input_metadata.gt4py_backend,
backend=input_metadata.backend,
allow_mismatch_float_precision=False,
)
return all_reduce_quantity
Expand Down Expand Up @@ -228,7 +228,7 @@ def _get_gather_recv_quantity(
units=send_metadata.units,
origin=tuple([0 for dim in send_metadata.dims]),
extent=global_extent,
gt4py_backend=send_metadata.gt4py_backend,
backend=send_metadata.backend,
allow_mismatch_float_precision=True,
)
return recv_quantity
Expand All @@ -241,7 +241,7 @@ def _get_scatter_recv_quantity(
send_metadata.np.zeros(shape, dtype=send_metadata.dtype), # type: ignore
dims=send_metadata.dims,
units=send_metadata.units,
gt4py_backend=send_metadata.gt4py_backend,
backend=send_metadata.backend,
allow_mismatch_float_precision=True,
)
return recv_quantity
Expand Down Expand Up @@ -326,6 +326,7 @@ def gather_state(self, send_state=None, recv_state=None, transfer_type=None): #
dims=quantity.dims,
units=quantity.units,
allow_mismatch_float_precision=True,
backend=quantity.backend,
)
if recv_state is not None and name in recv_state:
tile_quantity = self.gather(
Expand Down Expand Up @@ -841,7 +842,7 @@ def _get_gather_recv_quantity(
units=metadata.units,
origin=(0,) + tuple([0 for dim in metadata.dims]),
extent=global_extent,
gt4py_backend=metadata.gt4py_backend,
backend=metadata.backend,
allow_mismatch_float_precision=True,
)
return recv_quantity
Expand All @@ -861,7 +862,7 @@ def _get_scatter_recv_quantity(
metadata.np.zeros(shape, dtype=metadata.dtype), # type: ignore
dims=metadata.dims[1:],
units=metadata.units,
gt4py_backend=metadata.gt4py_backend,
backend=metadata.backend,
allow_mismatch_float_precision=True,
)
return recv_quantity
7 changes: 7 additions & 0 deletions ndsl/comm/null_comm.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import copy
import warnings
from collections.abc import Mapping
from typing import Any, TypeVar, cast

Expand Down Expand Up @@ -33,6 +34,12 @@ def __init__(self, rank: int, total_ranks: int, fill_value: T = default_fill_val
fill_value: fill halos with this value when performing
halo updates.
"""
warnings.warn(
"NullComm is deprecated and will be removed with the next version of NDSL. "
"Use MPIComm or LocalComm instead.",
DeprecationWarning,
stacklevel=2,
)
self.rank = rank
self.total_ranks = total_ranks
self._fill_value = fill_value
Expand Down
Loading