Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
175 commits
Select commit Hold shift + click to select a range
5928fe8
Add validation check for empty SDFGs
tbennun Dec 3, 2023
0d84cec
Add explicit stree root node and SDFG conversion method
tbennun Dec 3, 2023
91d2bc6
Initial conversion function and test
tbennun Dec 3, 2023
33910d1
Structure conversion process and add tests
tbennun Dec 4, 2023
f74be2f
Non-data-dependency state boundary insertion
tbennun Dec 4, 2023
8863fbf
Merge branch 'master' into stree-to-sdfg
tbennun Dec 7, 2023
a0ca8e6
Merge branch 'master' into stree-to-sdfg
tbennun Jan 1, 2024
25a72b9
More test cases and design
tbennun Jan 1, 2024
2bf1da1
Implement memory-dependency state boundary pass, input/output memlet …
tbennun Jan 2, 2024
bb58e80
More tests
tbennun Jan 2, 2024
649b216
Copyright year
tbennun Jan 2, 2024
438683b
Copyright year
tbennun Jan 2, 2024
7569304
Use memlet sets
tbennun Jan 2, 2024
3c1a786
Implement stree scope memlet analysis, memlet propagation now accepts…
tbennun Jan 2, 2024
62527d0
Fix deprecation warning
tbennun Jan 3, 2024
2baa73c
Implement union-set of memlets
tbennun Jan 3, 2024
c00f8dc
Implement memlet dictionary
tbennun Jan 4, 2024
6fe9787
Minor fixes and adding tests
tbennun Jan 4, 2024
5eac791
Fix memlet propagation for undefined symbols, add stree tests
tbennun Jan 4, 2024
5a97334
Fix test
tbennun Jan 5, 2024
68237c9
Merge branch 'main' into stree-to-sdfg
tbennun Nov 18, 2024
553d430
Update test
tbennun Nov 20, 2024
00f05e6
Make sure CI runs for v1 maintenance branch PRs (#1810)
phschaad Dec 5, 2024
3466973
Unused imports backport (successor to #1808) (#1816)
phschaad Dec 7, 2024
41e64d4
Cherry pick regression fix from PR #1837
tbennun Jan 14, 2025
bb5fd17
scal2sym: Fix incorrect dimensionality in indirection removal (#1871)
tbennun Jan 14, 2025
03c9222
Fix Ubuntu version for maintenance branch
tbennun Jan 14, 2025
a3cd17b
Bump version to 1.0.1
tbennun Jan 23, 2025
117dc3a
Fix typos (backport) (#1918)
romanc Feb 2, 2025
56ab279
Fix typo (#1945)
romanc Feb 20, 2025
6e2585b
Fix: DDE removing read from access_set in read/write nodes (#1955)
romanc Mar 5, 2025
11d0e33
`StateFusion` misses read-write conflict due to early return (#1954)
FlorianDeconinck Mar 5, 2025
34f081a
Merge branch 'v1/maintenance' into romanc/stree-to-sdfg
romanc Mar 18, 2025
fff6010
Generate two states from state boundary node
romanc Mar 18, 2025
efdf839
WIP: use visitor to generate SDFG
romanc Mar 19, 2025
13402cb
Bump version to 1.0.2
tbennun Mar 20, 2025
45b4125
WIP: visit_ForScope done
romanc Mar 20, 2025
35cfd2b
WIP: visit_WhileScope done
romanc Mar 21, 2025
c1330d8
WIP: started working on conditional blocks
romanc Mar 21, 2025
e33a5d9
WIP: conditional blocks done
romanc Mar 24, 2025
937dc79
WIP: visit_AssignNode done
romanc Mar 24, 2025
38e4bf7
WIP: Add stub for MapScopes and the remaining nodes
romanc Mar 24, 2025
aae267e
unrelated: format schedule_tree/treenodes.py
romanc Mar 25, 2025
0477cc7
WIP: visit_MapScope done
romanc Mar 25, 2025
b6a5958
WIP: use nested sdfg inside map for state machine
romanc Mar 26, 2025
a623583
Add options to simplify/validate generated SDFG
romanc Mar 28, 2025
9ec3221
Unrelated: fix typo
romanc Apr 9, 2025
214eef1
Fix reading twice from the same memlet in map scope
romanc Apr 9, 2025
a864245
Fix: don't duplicate data descriptors
romanc Apr 9, 2025
c31c420
Fix: find if scope in parent's children with is operator
romanc Apr 9, 2025
c0a9db5
Fix: symbol assignment on edges
romanc Apr 9, 2025
8588a42
Fix passthrough connectors for multiple reads
romanc Apr 9, 2025
3d3f9c4
WIP (not working): iterating on map creation
romanc Apr 10, 2025
5b6c1b6
WIP: maps without state boundaries are now good again
romanc Apr 11, 2025
4922784
WIP: working map scopes with state boundaries
romanc Apr 11, 2025
e85c97a
WIP: fixed isssue with edge assignments
romanc Apr 11, 2025
1bae7fa
Unrelated: fix typos
romanc Apr 15, 2025
7d46d2d
WIP: memlet propagation seems to work like this (doesn't validate)
romanc Apr 15, 2025
ed5e48e
WIP: delete unreachable/commented code
romanc Apr 15, 2025
6570682
XPPM test generates an SDFG that validates \o/
romanc Apr 16, 2025
45d43c6
fixup: minor cleanups after passing xxpm test
romanc Apr 16, 2025
dab3fa7
Avoid "passthrough write nodes"
romanc Apr 23, 2025
bf5b9e1
Allow nested SDFGs inside other. Add CopyNode translation
romanc Apr 23, 2025
aa613dd
[to be reverted] test_delnflux_tmp
romanc Apr 24, 2025
9014752
Fix syntax issue (unexpected keyword arg "memlet")
romanc Apr 24, 2025
f775b17
Todo: write Nview visitor (for Fillz, Ray_Fast)
romanc Apr 25, 2025
be05ba5
"back propagate" state boundaries from nested SDFGs through maps
romanc May 5, 2025
c2e53c3
WIP: This seems to fix DelnFlux
romanc May 6, 2025
4accdb9
WIP: This seems to fix FvTp2d
romanc May 6, 2025
98071f7
WIP: force boundary after assigns, timings
romanc May 7, 2025
b4a9ecd
Perf: cache if one subset is contained in another
romanc May 8, 2025
4c60fdd
tmp: just added a couple roundtrip tests
romanc May 8, 2025
a14103d
Remove unnecessary symbols from the schedule tree descriptor repository
tbennun May 12, 2025
806aa5e
WIP: AssignNode array access inside nested SDFG
romanc May 12, 2025
40c00ea
Unrelated: Fixing typos in comments
romanc May 14, 2025
45e5d04
Go back to just simplify. Can't repo the problem anymore.
romanc May 15, 2025
04d442b
Unrelated: return empty set, not dict
romanc May 15, 2025
3ae906f
Backport: Memlet propagation: return set - as promised (#2008)
romanc May 16, 2025
954c088
[florian] fix type of symbols directory
romanc Jun 6, 2025
8d710cd
unrelated: memlet propagation with indices
romanc Jun 6, 2025
13ff3ec
Unrelated: subset intersection between ranges and indices
romanc Jun 6, 2025
f78ea5d
Stree to SDFG: allow to configure simplify()
romanc Jun 13, 2025
8a76ed8
Fixup: simplify sdfg, not stree
romanc Jun 13, 2025
89efd9a
Nested SDFGs inside maps inherit their schedule
romanc Jun 17, 2025
b9bcc3d
Don't loose symbols in tswds
romanc Jun 18, 2025
b29a263
Only report cycles if we actually find them
romanc Jun 18, 2025
a0d9125
Only report cycles if we found some (#2055)
romanc Jun 19, 2025
439b929
Avoid losing symbols in `traverse_sdfg_with_defined_symbols` (#2054)
romanc Jun 25, 2025
1bf8411
Move main visitor out and remove print statements
romanc Jul 8, 2025
3a38524
Fix networkx state space explosion for cycle detection in state propa…
phschaad Jul 9, 2025
6b26c1a
Merge branch 'v1/maintenance' into romanc/stree-to-sdfg
FlorianDeconinck Jul 10, 2025
a180a7e
Testing per scope access cache
romanc Jul 14, 2025
f014559
Cache per state & scope. Special case for write after read after write
romanc Jul 14, 2025
3af927f
WIP: revert special case for cached node is input
romanc Jul 15, 2025
37c5696
Fix write access caching (hopefully)
romanc Jul 15, 2025
6ed3890
Patch: DeadDataflowElimination can't inline pointers into Tasklets
romanc Jul 16, 2025
82541a9
Add support for NView nodes (+ minimal cleanup)
romanc Jul 22, 2025
bd9a047
NView support: second half
romanc Jul 25, 2025
7882153
Backport of #2098 for v1/maintenance (#2099)
phschaad Jul 26, 2025
74333ac
Re-add support for CopyNodes
romanc Aug 6, 2025
eb160ce
Mitigation: don't inline nested SDFG without unique connector names
romanc Aug 19, 2025
77dc937
fix: support de-aliasing SDFGs with in/out conns of the same name
romanc Aug 19, 2025
54c669e
fix: de-allocate arrays that are move from stack to heap
romanc Aug 20, 2025
830ffa5
Fix: delete array moved to heap (backport to `v1/maintenance`) (#2135)
romanc Sep 3, 2025
1810f49
Backport Disabling Failing FPGA tests (#2171)
phschaad Oct 9, 2025
c2e952f
Backport of #2165 (#2166)
phschaad Oct 10, 2025
77faa3d
Merge remote-tracking branch 'origin/v1/maintenance' into romanc/stre…
romanc Oct 14, 2025
1033dfc
Unrelated: fix a bunch of typos
romanc Oct 14, 2025
4c042ee
Backport fix from #1853 and support `dace.map` syntax for struct fiel…
tbennun Oct 29, 2025
976a8f1
Merge remote-tracking branch 'origin/v1/maintenance' into romanc/stre…
romanc Nov 3, 2025
22f9a30
limit networkx version <= 3.5
edopao Nov 25, 2025
4a9f460
Merge pull request #13 from GridTools/cartesian-networkx_version
FlorianDeconinck Nov 25, 2025
aa5f8b5
[v1 Maintenance] `networkx` under 3.6 (#2258)
FlorianDeconinck Dec 23, 2025
c7b5a10
[v1 Maintenance] Back port `MapExpansion` fixes from v2 (#2257)
FlorianDeconinck Dec 25, 2025
2ef9437
Merge remote-tracking branch 'origin/v1/maintenance' into romanc/stre…
romanc Jan 8, 2026
35144d9
Merge branch 'main' into romanc/stree-v2
romanc Jan 8, 2026
e85315c
cleanup after merging main
romanc Jan 8, 2026
163f7fd
running pre-commit
romanc Jan 8, 2026
32201be
fix import errors in tests
romanc Jan 9, 2026
e9ecf5c
remove duplicate code
romanc Jan 9, 2026
4631de6
fixup: fixing bad merge in sdfg_to_stree.py
romanc Jan 9, 2026
8cf485f
Merge remote-tracking branch 'origin/main' into romanc/stree-v2
romanc Jan 12, 2026
14b8fc0
WIP: re-introduce ForScope, WhileScope and DoWhileScope
romanc Jan 12, 2026
d3e615f
WIP: more work understanding LoopRegions and how to work with them
romanc Jan 13, 2026
abbac85
WIP: memlet propagation for simple cases
romanc Jan 14, 2026
509da80
wip: work in progress towards building a valid stree
romanc Jan 15, 2026
db1c1b8
WIP: fix parent/children relationship in scope nodes
romanc Jan 19, 2026
d817afe
fix memlet propagation for indices
romanc Jan 19, 2026
ecd0c2d
Merge remote-tracking branch 'origin/main' into romanc/stree-v2
romanc Jan 19, 2026
1729ddd
easy fix for some tests
romanc Jan 19, 2026
ee96f67
Explicit constructors for treenodes / simple test for children of scopes
romanc Jan 22, 2026
f81abc9
WIP: a bit of cleanup and the first new-style tests
romanc Jan 22, 2026
8e3cc90
WIP: use ConditionalBlock for if/else scopes
romanc Jan 23, 2026
6bba45c
WIP: Add support for basic ForScopes
romanc Jan 26, 2026
32d66d9
WIP: support for simple while-loops
romanc Jan 26, 2026
513038c
WIP: fix issues with nested SDFGs
romanc Jan 26, 2026
cd474d2
WIP: fix tests
romanc Jan 26, 2026
492061f
fix: add loops to sdfg
romanc Jan 27, 2026
0da5e3a
Fix nested if statements inside (triple) loop
romanc Jan 27, 2026
cff050a
fix broken sdfg.array access in loops
romanc Jan 28, 2026
96f747f
Merge remote-tracking branch 'origin/main' into romanc/stree-v2
Jan 28, 2026
aa1e4f4
propagate sdfg name into stree name (and back)
romanc Jan 29, 2026
f5d3ce4
Merge remote-tracking branch 'origin/main' into romanc/stree-v2
Feb 2, 2026
491d746
fix symbol replacement for FvTp2d
Feb 2, 2026
e701af6
skip memlet propagation tests
Feb 4, 2026
970e7dc
Merge remote-tracking branch 'origin/main' into romanc/stree-v2
Feb 4, 2026
40b424c
trivial changes to trigger a CI run
Feb 4, 2026
77359fd
WIP: cleanup from code review
Feb 4, 2026
f6cb184
update tests: LoopScop -> ForScope
Feb 4, 2026
78b3305
keep track of skipped tests
Feb 4, 2026
68d91ac
Merge remote-tracking branch 'origin/main' into romanc/stree-v2
Feb 7, 2026
052ff1d
simple tests for MemletSet and MemletDict
Feb 9, 2026
23afc43
cleanup: self-review
Feb 9, 2026
9ac05dd
Merge remote-tracking branch 'origin/main' into romanc/stree-v2
Feb 9, 2026
0cbc4ff
Merge remote-tracking branch 'origin/main' into romanc/stree-v2
Feb 10, 2026
73aa794
cleanup: sdfg.simplify() can now `skip` passes
Feb 11, 2026
7af43e3
to be evaluated: cached closures for cf reachability
Feb 12, 2026
852c4bf
Merge remote-tracking branch 'origin/main' into romanc/stree-v2
Feb 16, 2026
c532bea
Save (and load) compressed SDFGs by default
Feb 19, 2026
20887da
don't serialize whitespace to save diskspace
Feb 19, 2026
8f7601b
Remove replication in `ConditionalBlock` serialization
tbennun Feb 20, 2026
4320edb
fixup: bad merge in DDE
romanc Mar 5, 2026
2d2607c
pref: avoid calls to getdebuginfo() in stree -> sdfg
romanc Mar 10, 2026
1fb3978
code review: rename tests
romanc Mar 10, 2026
2f2abcf
Merge remote-tracking branch 'origin/main' into romanc/stree-v2
romanc Mar 16, 2026
0f11102
ci: re-enable pyFV3 CI hook
romanc Mar 16, 2026
d9de064
Merge remote-tracking branch 'origin/main' into romanc/stree-v2
romanc Mar 16, 2026
891c381
ci: run pyFV3 regresssions from matrix config
romanc Mar 16, 2026
6d915f7
fixup: restore checkout from NOAA-GFDL/pyFV3
romanc Mar 16, 2026
fe4539e
minor fixes like typos
romanc Mar 23, 2026
45e482f
fix: reorder tile sizes when reordering ranges (#2327)
romanc Mar 18, 2026
0d9f3b4
Merge remote-tracking branch 'origin/main' into romanc/stree-v2
romanc Mar 27, 2026
62a25c4
refactor: some simple review comments
romanc Apr 17, 2026
aeb5743
refactor: modern type hints in tree_to_sdfg & treenodes
romanc Apr 17, 2026
0b32786
update copyright year of all changed files
romanc Apr 17, 2026
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
163 changes: 76 additions & 87 deletions .github/workflows/pyFV3-ci.yml
Original file line number Diff line number Diff line change
@@ -1,17 +1,12 @@
name: NASA/NOAA pyFV3 repository build test

# Temporarily disabled for main, and instead applied to a specific DaCe v1 maintenance branch (v1/maintenance). Once
# the FV3 bridge has been adapted to DaCe v1, this will need to be reverted back to apply to main.
on:
push:
#branches: [ main, ci-fix ]
branches: [ v1/maintenance, ci-fix ]
branches: [ main, ci-fix, romanc/stree-v2 ]
pull_request:
#branches: [ main, ci-fix ]
branches: [ v1/maintenance, ci-fix ]
branches: [ main, ci-fix, romanc/stree-v2 ]
merge_group:
#branches: [ main, ci-fix ]
branches: [ v1/maintenance, ci-fix ]
branches: [ main, ci-fix, romanc/stree-v2 ]

defaults:
run:
Expand All @@ -22,84 +17,78 @@ concurrency:
cancel-in-progress: true

jobs:
build_and_validate_pyFV3:
if: "!contains(github.event.pull_request.labels.*.name, 'no-ci')"
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [3.11.7]
configure:
runs-on: ubuntu-latest
if: "!contains(github.event.pull_request.labels.*.name, 'no-ci')"
name: "Read test configuration"
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- name: Checkout to repository
uses: actions/checkout@v6
- name: Set matrix data
id: set-matrix
run: echo "matrix={\"include\":$(jq -c . < .github/workflows/pyFV3-regression-matrix.json)}" >> $GITHUB_OUTPUT

steps:
- uses: actions/checkout@v6
with:
repository: 'NOAA-GFDL/PyFV3'
ref: 'ci/DaCe'
submodules: 'recursive'
path: 'pyFV3'
- uses: actions/checkout@v6
with:
path: 'dace'
build_and_validate_pyFV3:
runs-on: ubuntu-latest
needs: configure
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.configure.outputs.matrix) }}
name: "${{ matrix.module }} regression test"

steps:
- name: Checkout pyFV3
uses: actions/checkout@v6
with:
repository: 'NOAA-GFDL/pyFV3'
submodules: 'recursive'
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
- name: Install library dependencies
run: |
sudo apt-get update
sudo apt-get install -y libopenmpi-dev libboost-all-dev
gcc --version
# Because Github doesn't allow us to do a git checkout in code
# we use a trick to checkout DaCe first (not using the external submodule)
# install the full suite via requirements_dev, then re-install the correct DaCe
- name: Install Python packages
run: |
python -m pip install --upgrade pip wheel setuptools
pip install -e ./pyFV3[develop]
pip install -e ./dace
- name: Download data
run: |
cd pyFV3
mkdir -p test_data
cd test_data
wget --retry-connrefused https://portal.nccs.nasa.gov/datashare/astg/smt/pace-regression-data/8.1.3_c12_6ranks_standard.D_SW.tar.gz
tar -xzvf 8.1.3_c12_6ranks_standard.D_SW.tar.gz
wget --retry-connrefused https://portal.nccs.nasa.gov/datashare/astg/smt/pace-regression-data/8.1.3_c12_6ranks_standard.RiemSolver3.tar.gz
tar -xzvf 8.1.3_c12_6ranks_standard.RiemSolver3.tar.gz
wget --retry-connrefused https://portal.nccs.nasa.gov/datashare/astg/smt/pace-regression-data/8.1.3_c12_6ranks_standard.Remapping.tar.gz
tar -xzvf 8.1.3_c12_6ranks_standard.Remapping.tar.gz
cd ../..
# Clean up caches between run for stale un-expanded SDFG to trip the build system (NDSL side issue)
- name: "Regression test: Riemman Solver on D-grid (RiemSolver3)"
env:
FV3_DACEMODE: BuildAndRun
PACE_CONSTANTS: GFS
PACE_LOGLEVEL: Debug
run: |
pytest -v -s --data_path=./pyFV3/test_data/8.1.3/c12_6ranks_standard/dycore \
--backend=dace:cpu --which_modules=Riem_Solver3 \
--threshold_overrides_file=./pyFV3/tests/savepoint/translate/overrides/standard.yaml \
./pyFV3/tests/savepoint
rm -r ./.gt_cache_FV3_A
- name: "Regression test: Shallow water lagrangian dynamics on D-grid (D_SW) (on rank 0 only)"
env:
FV3_DACEMODE: BuildAndRun
PACE_CONSTANTS: GFS
PACE_LOGLEVEL: Debug
run: |
pytest -v -s --data_path=./pyFV3/test_data/8.1.3/c12_6ranks_standard/dycore \
--backend=dace:cpu --which_modules=D_SW --which_rank=0 \
--threshold_overrides_file=./pyFV3/tests/savepoint/translate/overrides/standard.yaml \
./pyFV3/tests/savepoint
rm -r ./.gt_cache_FV3_A
- name: "Regression test: Remapping (on rank 0 only)"
env:
FV3_DACEMODE: BuildAndRun
PACE_CONSTANTS: GFS
PACE_LOGLEVEL: Debug
run: |
pytest -v -s --data_path=./pyFV3/test_data/8.1.3/c12_6ranks_standard/dycore \
--backend=dace:cpu --which_modules=Remapping --which_rank=0 \
--threshold_overrides_file=./pyFV3/tests/savepoint/translate/overrides/standard.yaml \
./pyFV3/tests/savepoint
rm -r ./.gt_cache_FV3_A
path: 'pyFV3'

- name: Checkout dace
uses: actions/checkout@v6
with:
path: 'dace'
submodules: 'recursive'

- name: Set up Python 3.12
uses: actions/setup-python@v6
with:
python-version: 3.12

- name: Install OpenMPI
run: pip install openmpi

# We install `dace` after `pyFV3` to build pyFV3 with the current version of DaCe
- name: Install pyFV3 and dace
run: |
pip install ./pyFV3[ndsl,test]
pip install ./dace

- name: Print versions
run: |
gcc --version
python --version
pip --version
pip list

- name: Download data
run: |
cd pyFV3
mkdir -p test_data
cd test_data
wget --retry-connrefused https://portal.nccs.nasa.gov/datashare/astg/smt/pace-regression-data/${{ matrix.archive }}
tar -xzvf ${{ matrix.archive }}
cd ../..

- name: "Regression test: ${{ matrix.name }}"
env:
FV3_DACEMODE: BuildAndRun
NDSL_LOGLEVEL: Debug
run: |
pytest -v -s --data_path=./pyFV3/test_data/8.1.3/c12_6ranks_standard/dycore \
--backend=orch:dace:cpu:KIJ --which_modules=${{ matrix.module }} \
${{ matrix.extra_args }} \
--threshold_overrides_file=./pyFV3/tests/savepoint/translate/overrides/standard.yaml \
./pyFV3/tests/savepoint
20 changes: 20 additions & 0 deletions .github/workflows/pyFV3-regression-matrix.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
[
{
"name":"Shallow water lagrangian dynamics on D-grid (D_SW) (on rank 0 only)",
"archive":"8.1.3_c12_6ranks_standard.D_SW.tar.gz",
"module":"D_SW",
"extra_args":"--which_rank=0"
},
{
"name":"Riemann Solver on D-grid (RiemSolver3)",
"archive":"8.1.3_c12_6ranks_standard.RiemSolver3.tar.gz",
"module":"Riem_Solver3",
"extra_args":"--which_rank=0"
},
{
"name":"Remapping (on rank 0 only)",
"archive":"8.1.3_c12_6ranks_standard.Remapping.tar.gz",
"module":"Remapping",
"extra_args":"--which_rank=0"
}
]
Loading
Loading