Skip to content
Merged
Show file tree
Hide file tree
Changes from 137 commits
Commits
Show all changes
159 commits
Select commit Hold shift + click to select a range
a7b6bbf
WIP: skeleton of new oir -> stree -> sdfg workflow
romanc Jun 3, 2025
47fe7e9
WIP: basic skeleton for mapping i, j, and k loops
romanc Jun 4, 2025
8dddcd5
WIP: move tasklet generation into its own visitor
romanc Jun 4, 2025
1f41d90
WIP: passing fields to tree descriptor repo
romanc Jun 5, 2025
ec5b16b
WIP: First version of memlet genration
romanc Jun 5, 2025
db6493c
WIP: use symbols where symbols should be used
romanc Jun 5, 2025
3f7cfeb
Flip `symbols` to be a mapping between type and symbol name.
FlorianDeconinck Jun 5, 2025
4094e32
Cast / BinaryOp / Literal
FlorianDeconinck Jun 5, 2025
cb50076
Fix in tasklet field name for negative offset
FlorianDeconinck Jun 5, 2025
a9c4086
Fix scoping of intervals/vertical loop
FlorianDeconinck Jun 5, 2025
06b8070
(WIP) Adding FORWARD/BACKWARD serial loop (interval range badly compu…
FlorianDeconinck Jun 5, 2025
8f78f1d
Raise in all visitor in `oir_to_tasklet`
FlorianDeconinck Jun 5, 2025
73b3d3d
Update dace with correct symbol dict type
romanc Jun 6, 2025
c25e9dc
Fix sequential vertical loops
romanc Jun 6, 2025
ab4e884
Add support for passing parameters
romanc Jun 6, 2025
bf93566
WIP: Support for variable K offset (reads)
romanc Jun 6, 2025
6f59f9e
UnaryOp & remaining visitor clean up pass
FlorianDeconinck Jun 6, 2025
481e6ca
Add scalar inputs & unary operation example stencils
FlorianDeconinck Jun 6, 2025
ec9ecc6
Native Functions + LocalScalar
FlorianDeconinck Jun 6, 2025
bd252ae
Fix glue code (tm) for Temporary using magic function to swap strides…
FlorianDeconinck Jun 6, 2025
2af4531
If/Else in `stree` (WIP SDFG)
FlorianDeconinck Jun 6, 2025
4559ab8
Clean `TreeIR` of redudant `children` when using `TreeScope`
FlorianDeconinck Jun 6, 2025
750dd4f
While (tree + SDFG)
FlorianDeconinck Jun 7, 2025
f78dba2
Refactor ScopeManager -> ContextPushPop to match oir_to_treeir
FlorianDeconinck Jun 7, 2025
52e57a7
Regions
FlorianDeconinck Jun 7, 2025
39b68c5
Use proper symbol from `dcir.Axis`
FlorianDeconinck Jun 7, 2025
fe66b5a
Ternary op & cast on expression for OirToTreeIR
FlorianDeconinck Jun 9, 2025
195014f
Lint
FlorianDeconinck Jun 9, 2025
9355633
Clean up Mask visitation with generic visit
FlorianDeconinck Jun 9, 2025
c31ca1c
Revert test generation only dace:cpu
romanc Jun 10, 2025
dc42e65
Fix: don't try to specialize transient strides for scalars
romanc Jun 10, 2025
910dc2e
tmp: run ci with stree branch
romanc Jun 10, 2025
d691e11
tmp ci: skip gt4py/next tests
romanc Jun 10, 2025
1f2c53b
fix offset calculation in oir -> treeir
romanc Jun 10, 2025
a3945ff
fix translate unary operations from oir -> treeir
romanc Jun 10, 2025
7230997
Fix built-in literals (true/false) in tasklet code
romanc Jun 10, 2025
31a0f1e
fix: ctx is an expected keyword arg
romanc Jun 10, 2025
7c111e6
Fix: translate built-in literals in oir -> treeir step
romanc Jun 10, 2025
ad4dfc4
Support for 2d field access in if/while condition
romanc Jun 10, 2025
634afd8
keep dimensionality information in treeir
romanc Jun 10, 2025
d9719e5
Merge remote-tracking branch 'origin/main' into oir-to-stree
romanc Jun 10, 2025
0135576
trying to square uv.lock file again
romanc Jun 10, 2025
d34c7c7
Notes on how to update the duck-tape uv.lock file
romanc Jun 10, 2025
71385a0
Preserve order of operations oir -> treeir
romanc Jun 11, 2025
f90374d
Fix: store dimensions of temporary arrays
romanc Jun 11, 2025
140e922
Fix array shape and horizontal domain shift
romanc Jun 11, 2025
90f2397
Fix: pass on all kwargs to lower visitors
romanc Jun 11, 2025
a237e89
Fix: variable K offset memlet max size, allow casts
romanc Jun 11, 2025
0d13b4d
Duck-tape version of k-extent analysis
romanc Jun 11, 2025
6b515e5
Merge remote-tracking branch 'origin/main' into oir-to-stree
romanc Jun 12, 2025
c6f278d
Fix: test_negative_origin_i
romanc Jun 12, 2025
ba9c979
Fix: Variable offset K are relative indices
romanc Jun 12, 2025
fc102ba
Fix: add k-shift in variable offset K
romanc Jun 12, 2025
6fe86db
support for data dimensions in tasklet codegen
romanc Jun 12, 2025
6afb779
Merge remote-tracking branch 'origin/main' into oir-to-stree
romanc Jun 12, 2025
6abad8a
While conditions are handled as a separate tasklet that outputs into …
FlorianDeconinck Jun 12, 2025
4214697
Fix native @dace.program usage with stencils
FlorianDeconinck Jun 12, 2025
bd48520
Add `scalar` to wrapper
FlorianDeconinck Jun 12, 2025
220f214
Fix types (and add some)
romanc Jun 13, 2025
02efcd3
Guard against using code that will be torched soon
romanc Jun 13, 2025
26f711e
General if statement with evaluation tasklet
romanc Jun 13, 2025
fd751aa
Fixed horizontal mask conditions
romanc Jun 13, 2025
7ffd955
fix lazy stencil tests
romanc Jun 13, 2025
d0447c8
Merge remote-tracking branch 'origin/main' into oir-to-stree
romanc Jun 13, 2025
093c4eb
GPU residency: don't flip scalar to Global device array, because, you…
FlorianDeconinck Jun 13, 2025
dd20834
Flag more code for later deletion
FlorianDeconinck Jun 13, 2025
aee933a
Fix frozen SDFG caching bug - orchestration now specializes bounds co…
FlorianDeconinck Jun 13, 2025
e7b5e89
Lint
FlorianDeconinck Jun 13, 2025
601d332
context manager for just tree ir
romanc Jun 13, 2025
2452776
cleanly separate dace-cartesian and dace-next dependencies
romanc Jun 16, 2025
592eaf5
Fixup: fix noxfile (and update docs)
romanc Jun 16, 2025
e1b2194
Specialize transient strides for wrapper SDFG
FlorianDeconinck Jun 16, 2025
3ac83ca
Apply correct residency to arrays
FlorianDeconinck Jun 16, 2025
8ee7849
Revert "Apply correct residency to arrays"
FlorianDeconinck Jun 16, 2025
1a36cf3
Cleanup types
romanc Jun 17, 2025
cf1963f
Specialize transients in all levels of nested SDFGs
romanc Jun 17, 2025
7e56965
Reapply "Apply correct residency to arrays"
romanc Jun 17, 2025
50f851b
Test: Also move transients to the GPU
romanc Jun 17, 2025
ace4547
Set cpu/gpu map schedule
romanc Jun 17, 2025
9ca5a5a
Docs
FlorianDeconinck Jun 17, 2025
8271b38
Keep vertical loop schedule on the Host
FlorianDeconinck Jun 17, 2025
4911689
Fix previous commit... GPU should be sequential
FlorianDeconinck Jun 17, 2025
b939046
Fix Cache opt skipping
FlorianDeconinck Jun 17, 2025
8400f80
GPU tests running locally
romanc Jun 17, 2025
409b5ae
Updated DaCe version (only report cycles if we find them)
romanc Jun 18, 2025
db55422
More protection aginst stuff we sholdn't run anymore
romanc Jun 18, 2025
cb179ed
Do not call tests of things that are about to be torched.
romanc Jun 18, 2025
383e568
Fix wrapper edge/memlet to inner_sdfg need
FlorianDeconinck Jun 18, 2025
0fb8dec
Merge remote-tracking branch 'romanc/oir-to-stree' into oir-to-stree
FlorianDeconinck Jun 18, 2025
1c75fe3
Minor cleanup: just moving some code around
romanc Jun 19, 2025
6a7632a
Remove dcir from new code by copying Axis from daceir to treeir
romanc Jun 19, 2025
00623d8
The purge: delete old bridge
romanc Jun 19, 2025
be29182
Fix caching system by _not_ trashing the build_options deep downstrea…
FlorianDeconinck Jun 20, 2025
e3557f9
Merge remote-tracking branch 'origin/main' into oir-to-stree
romanc Jun 23, 2025
aabd6e5
Fix typo
romanc Jun 23, 2025
55e14be
Shape `dace.Array` properly
FlorianDeconinck Jun 23, 2025
658b266
Merge remote-tracking branch 'romanc/oir-to-stree' into oir-to-stree
FlorianDeconinck Jun 23, 2025
525378d
Merge branch 'main' into oir-to-stree
FlorianDeconinck Jun 23, 2025
027f7a9
Fix missing scalar in OIR parameter list by comparing it to the origi…
FlorianDeconinck Jun 23, 2025
785c1af
Merge remote-tracking branch 'romanc/oir-to-stree' into oir-to-stree
FlorianDeconinck Jun 23, 2025
bd6d188
Merge remote-tracking branch 'origin/main' into oir-to-stree
romanc Jun 24, 2025
c294575
Undo changes to github workflows
romanc Jun 24, 2025
378268a
Undo changes to top-level README
romanc Jun 24, 2025
54c48c4
Update comments in pyproject toml
romanc Jun 24, 2025
bab881e
Undo debug changes
romanc Jun 24, 2025
68c2db9
cleanups loading/saving sdfgs
romanc Jun 24, 2025
cb4a1dd
WIP: ADRs for the schedule tree feature
romanc Jun 24, 2025
fd6c1ab
Temporary fields are shaped ignoring regions
FlorianDeconinck Jun 24, 2025
0282e1d
Merge remote-tracking branch 'romanc/oir-to-stree' into oir-to-stree
FlorianDeconinck Jun 24, 2025
3c0beaa
Revert "Temporary fields are shaped ignoring regions"
FlorianDeconinck Jun 24, 2025
3272330
Fix typo in template
romanc Jun 24, 2025
bb96e1f
first draft of schedule tree adr
romanc Jun 24, 2025
6095ec0
Merge branch 'oir-to-stree' of github.com:romanc/gt4py into oir-to-stree
romanc Jun 24, 2025
a3765f8
Don't cache frozen_sdfg in cwd
romanc Jun 25, 2025
2c16934
Update dace ADRS, add one for cuda backend
romanc Jun 25, 2025
75186e9
Last pass on the ADRs (for now)
romanc Jun 25, 2025
cee91eb
Merge remote-tracking branch 'origin/main' into oir-to-stree
romanc Jun 26, 2025
03ab3db
Fixup: fix bad merge
romanc Jun 26, 2025
b073e3e
Type hints in dace_backend
romanc Jun 26, 2025
c979a73
Merge dace/symbol_utils into dace/utils
romanc Jun 26, 2025
08365dd
Merge remote-tracking branch 'origin/main' into oir-to-stree
romanc Jun 26, 2025
9f250cf
Cleanup OIR -> TreeIR visitor init
romanc Jun 26, 2025
1eda341
cleanups in oir_to_tasklet
romanc Jun 26, 2025
95850e2
Merge remote-tracking branch 'origin/main' into oir-to-stree
romanc Jun 27, 2025
2b28cdd
Minor cleanup refactors
romanc Jun 27, 2025
eae0d09
When adding `scalar` to wrapper SDFG, properly flag transientness
FlorianDeconinck Jul 2, 2025
f958944
Merge remote-tracking branch 'romanc/oir-to-stree' into oir-to-stree
FlorianDeconinck Jul 2, 2025
14daecc
Merge remote-tracking branch 'origin/main' into oir-to-stree
romanc Jul 7, 2025
a61ebdd
Merge branch 'main' into oir-to-stree
FlorianDeconinck Jul 7, 2025
c1a075f
Update DaCe version (remove debug print statements)
romanc Jul 8, 2025
fddd114
Block caching in SDFGManager in case of no-caching policy on the builder
romanc Jul 9, 2025
06cd753
Fixup: caching
romanc Jul 9, 2025
036589e
Change dace cpu layout to match loop structure
romanc Jul 10, 2025
11ce4b6
Update Dace version (merge v1/maintenance)
romanc Jul 10, 2025
5113142
No need to pass transients of the inner_sdfg into the inner_sdfg
romanc Jul 10, 2025
ceb90e0
Philips code review, part 2
romanc Jul 11, 2025
34670b2
Fix the bugs introduced in the review commit
romanc Jul 11, 2025
7069b7f
Use default allocation lifetime since we don't have infinite memory
romanc Jul 11, 2025
9354fb3
Fixing typos in ADRs
romanc Jul 11, 2025
eaeaf1c
Save stree next to unspecialized sdfg
romanc Jul 14, 2025
5c5414e
Fixup allocation lifetime of temporaries needs to be global
romanc Jul 14, 2025
58352a4
Only save stree if configured. Allow a previous stree to exist
romanc Jul 14, 2025
f27c491
Fix SDFG wrapping for GlobalTables (no cartesian axis, only data dims)
FlorianDeconinck Jul 14, 2025
5217ba9
Normalize field arguments, escape non fields
FlorianDeconinck Jul 14, 2025
b201f0a
Merge remote-tracking branch 'origin/main' into oir-to-stree
romanc Jul 15, 2025
4691619
Merge branch 'oir-to-stree' of github.com:romanc/gt4py into oir-to-stree
romanc Jul 15, 2025
339d708
Fix linting issues
romanc Jul 15, 2025
b7677e9
Fix gt4py tests again
romanc Jul 15, 2025
3aed349
Re-enable DaCe's DDE by patching it
romanc Jul 16, 2025
bf2be21
Merge remote-tracking branch 'origin/main' into oir-to-stree
romanc Jul 16, 2025
66ded75
Move dace/stree branch to GridTools/dace fork
romanc Jul 16, 2025
69a5673
Revert tempoary to Lifetime.Persistent to fix memory leak (temporary …
FlorianDeconinck Jul 16, 2025
c34ccc2
"one last" code review commit
romanc Jul 17, 2025
3b5702e
Revert: dace_backend: get ranges only for defined axes
romanc Jul 17, 2025
f17fd7c
Append data dimensions index in the same tuple for Absolute Indexing
FlorianDeconinck Jul 22, 2025
6ec132a
Revert "Append data dimensions index in the same tuple for Absolute I…
FlorianDeconinck Jul 22, 2025
62e3361
Preliminary support for NView nodes
romanc Jul 24, 2025
5a6ccfc
Merge remote-tracking branch 'origin/main' into oir-to-stree
romanc Jul 24, 2025
a2a7cd7
Merge remote-tracking branch 'origin/main' into oir-to-stree
romanc Jul 25, 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
17 changes: 17 additions & 0 deletions docs/development/ADRs/cartesian/backend-cuda-feature-freeze.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Cuda backend: Feature freeze

In the context of (backend) feature development, facing maintainability/duplication concerns, we decided to put a feature freeze on the `cuda` backend and focus on the `dace:gpu` backends instead to keep the number of backends manageable.

## Context

The introduction of the [`dace:*`](./backend-dace.md) backends brought up the question of backend redundancy. In particular, it seems that `cuda` and `dace:gpu` backends serve similar purposes.

`dace:gpu` backends not only generate code for different graphics cards, they also share substantial code paths with the `dace:cpu` backend. This simplifies (backend) feature development.

## Decision

We decided to put a feature freeze on the `cuda` backend, focusing on the `dace:*` backends instead. While we don't drop the backend, new DSL features won't be able in the `cuda` backend. New features will error out cleanly and suggest to use the `dace:gpu` backend instead.

## Consequences

While the `cuda` backend only targets NVIDIA cards, the `dace:*` backends allow to generate code for NVIDIA and AMD graphics cards. Furthermore, `dace:cpu` and `dace:gpu` backends share large parts of the transpilation layers because code generation is deferred to DaCe and only depending on the SDFG. This allows us to develop many (backend) features for the `dace:*` backends in one place.
73 changes: 73 additions & 0 deletions docs/development/ADRs/cartesian/backend-dace-schedule-tree.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# DaCe backends: Schedule tree

In the context of [DaCe backends](./backend-dace.md), facing tech-debt, a lack of understanding of the current stack, and under performing map- & state fusion, we decided to rewrite substantial parts of the DaCe backends with so called "Schedule Trees" to achieve hardware dependent macro-level optimizations (e.g. loop merging and loop re-ordering) at a new IR level before going down to SDFGs. We considered writing custom SDFG fusion passes and accept that we have to contribute a conversion from Schedule Tree to SDFG in DaCe.

## Context

Basically three forces were driving this drastic change:

1. We were unhappy with the performance of the DaCe backends, especially on CPU.
2. We had little understanding of the previous GT4Py-DaCe bridge.
3. The previous GT4Py-DaCe bridge accumulated a lot of tech debt, making it clumsy to work with and hard to inject major changes.

## Decision

We chose to directly translate GT4Py's optimization IR (OIR) to DaCe's schedule tree (and from there to SDFG and code generation) because this allows to separate macro-level and data-specific optimizations. DaCe's schedule tree is ideally suited for schedule-level optimizations like loop re-ordering or loop merges with over-computation. The (simplified) pipeline looks like this:

```mermaid
flowchart LR
oir["
OIR
(GT4Py)
"]
treeir["
Tree IR
(GT4Py)
"]
stree["
Schedule tree
(DaCe)
"]
sdfg["
SDFG
(DaCe)
"]
codegen["
Code generation
(per target)
"]

oir --> treeir --> stree --> sdfg --> codegen
```

OIR to Tree IR conversion has two visitors in separate files:

1. `dace/oir_to_treeir.py` transpiles control flow elements
2. `dace/oir_to_tasklet.py` transpiles computations (i.e. bodies of control flow elements)

While this incurs a bit of code duplications (e.g. resolving index accesses), it allows for separation of concerns: Everything that is related to the schedule is handled in `oir_to_treeir.py`. Note, for example, that we keep the distinction between horizontal mask and general `if` statements. This distinction is kept because horizontal regions might influence scheduling decisions, while general `if` statements do not.

The subsequent conversion from Tree IR to schedule tree is a straight forward visitor located in `dace/treeir_to_stree.py`. Notice the simplicity of that visitor.

## Consequences

The schedule tree introduces a transpilation layer ideally suited for macro-level optimizations, which are targeting the program's execution schedule. This is particularly interesting for the DaCe backends because we use the same backend pipeline to generate code for CPU and GPU targets.

In particular, the schedule tree allows to easily re-order/modify/change the loop structure. This not only allows us to generate hardware-specific loop order and tile-sizes, but also gives us fine grained control over loop merges and/or which loops to generate in the first place. For example, going directly from OIR to Tree IR allows us to translate horizontal regions to either `if` statements inside a bigger horizontal loop (for small regions) or break them out into separate loops (for bigger regions) if that makes sense for the target architecture.

## Alternatives considered

### OIR -> SDFG -> schedule tree -> SDFG

- Seems smart because it allows to keep the current OIR -> SDFG bridge, i.e. no need to write and OIR -> schedule tree bridge,
- but the first SDFG is unnecessary and translation times are a real problem
- and we were unhappy with the OIR -> SDFG bridge anyway
- and ,in addition, we loose some context between OIR and schedule tree (e.g. horizontal regions).

### Improve the existing SDFG map fusion

GT4Py next has gone this route and an improved version is merged in the mainline version of DaCe. We think we'll need a custom map fusion pass which lets us decide low-level things like under which circumstances over-computation is desirable. A general map fusion pass will never be able to allow this.

### Write custom map fusion based on SDFG syntax

Possible, but a lot more cumbersome than writing the same transformation based on the schedule tree syntax.
26 changes: 26 additions & 0 deletions docs/development/ADRs/cartesian/backend-dace-version.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# DaCe backends: DaCe version

In the context of the [DaCe backend](./backend-dace.md) and the [schedule tree](./backend-dace-schedule-tree.md), facing time pressure, we decided to stay at the `v1.x` branch of DaCe to minimize up-front cost and deliver CPU performance as fast as possible. We considered updating to the mainline version of DaCe and accept follow-up cost of partial rewrites once DaCe `v2` releases.

## Context

The currently released version of DaCe is on the `v1.x` branch. However, the mainline branch moved on (with breaking changes) to what is supposed to be DaCe `v2`. All feature development is supposed to be merged against mainline. Only bug fixes are allowed on the `v1.x` branch.

The [schedule tree](./backend-dace-schedule-tree.md) feature will need changes in DaCe, in particular to translate schedule trees into SDFG. We are unfamiliar with the breaking changes in DaCe.

## Decision

We decided to build a first version of the schedule tree feature against the `v1.x` version of DaCe.

## Consequences

- We'll be able to code against familiar API (e.g. same as the previous GT4Py-DaCe bridge).
- In DaCe, we won't be able to merge changes into `v1.x`. We'll work on a branch and later refactor the schedule tree -> SDFG transformation to code flow regions in DaCe `v2`.

## Alternatives considered

### Update to DaCe mainline first

- Good because mainline DaCe is accepting new features while `v1.x` is closed for new feature development.
- Bad because it incurs an up-front cost, which we are trying to minimize to get results fast.
- Bad because we aren't trained to use the new control flow regions.
25 changes: 25 additions & 0 deletions docs/development/ADRs/cartesian/backend-dace.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# DaCe backends

In the context of performance optimization, facing the fragmentedness of NWP code, we decided to implemented a backend based on DaCe to unlock full-program optimization. We accept the downside of having to maintain that (additional) performance backend.

## Context

NWP codes aren't like your typical optimization problem homework where 80% of runtime is spent within a single stencil which you can then optimize to oblivion. Instead, computations in NWP codes are fragmented and scattered all over the place with parts in-between that move memory around. Stencil-only optimizations don't cut through this. DaCe allows us to do (data-flow) optimization on the full program, not only inside stencils. As a nice side-effect, DaCe offers code generation to CPU and GPU targets.

## Decision

We chose to add DaCe backends,`dace:cpu` and `dace:gpu`, for CPU and GPU targets because we need full-program optimization to get the best possible performance.

## Consequences

We will need to maintain the `dace:*` backends. If we keep adding more and more backends, maintainability will be a question down the road. We thus decided to put a [feature freeze](./backend-cuda-feature-freeze.md) on the `cuda` backend, focussing on `dace:*` backends instead.

Compared to the [`cuda` backend](./backend-cuda-feature-freeze.md), which only targets NVIDIA cards, we get support for both, NVIDIA and AMD cards, with the `dace:gpu` backends.

## Alternatives considered

@Florian: Did we consider alternatives (back then)?

## References

[DaCe Promo Website](http://dace.is/fast) | [DaCe GitHub](https://github.com/spcl/dace) | [DaCe Documentation](https://spcldace.readthedocs.io/en/latest/)
2 changes: 1 addition & 1 deletion noxfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@
)
CodeGenTestSettings: Final[dict[str, dict[str, list[str]]]] = {
"internal": {"extras": [], "markers": ["not requires_dace"]},
"dace": {"extras": ["dace"], "markers": ["requires_dace"]},
"dace": {"extras": ["dace-cartesian"], "markers": ["requires_dace"]},
}
# Use dace-next for GT4Py-next, to install a different dace version than in cartesian
CodeGenNextTestSettings = CodeGenTestSettings | {
Expand Down
10 changes: 7 additions & 3 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ all = ['gt4py[dace,formatting,jax,performance,testing]']
cuda11 = ['cupy-cuda11x>=12.0']
cuda12 = ['cupy-cuda12x>=12.0']
# features
dace = ['dace>=1.0.2,<1.1.0'] # v1.x will contain breaking changes, see https://github.com/spcl/dace/milestone/4
dace-cartesian = ['dace'] # pull dace version with support for schedule trees
dace-next = ['dace'] # pull dace latest version from the git repository
formatting = ['clang-format>=9.0']
jax = ['jax>=0.4.26']
Expand Down Expand Up @@ -421,11 +421,12 @@ conflicts = [
{extra = 'rocm5_0'}
],
[
{extra = 'dace'},
{extra = 'dace-cartesian'},
{extra = 'dace-next'}
],
[
{extra = 'all'},
{extra = 'dace-cartesian'},
{extra = 'dace-next'}
]
]
Expand All @@ -438,7 +439,10 @@ url = 'https://test.pypi.org/simple/'

[tool.uv.sources]
atlas4py = {index = "test.pypi"}
dace = {git = "https://github.com/GridTools/dace", tag = "__gt4py-next-integration_2025_07_03", extra = "dace-next"}
dace = [
{git = "https://github.com/romanc/dace", branch = "romanc/stree-to-sdfg", extra = "dace-cartesian"},
{git = "https://github.com/GridTools/dace", tag = "__gt4py-next-integration_2025_07_03", extra = "dace-next"}
]

# -- versioningit --
[tool.versioningit]
Expand Down
Loading