We are happy to announce DaCe version 1.0!
It is a major release milestone, and we went over many of the known issues over the years to ensure that this is the most stable version we can release without making fundamental changes to the framework. The Stateful DataFlow multiGraph (SDFG) intermediate representation used in this version is faithful to the original paper, which was published in 2019.
On a fundamental level, this release is no different from a minor version release (this version could have been DaCe 0.17), so there are no breaking changes from v0.x.
We would like to thank [everyone](https://github.com/spcl/dace/graphs/contributors) who contributed to DaCe over the years and helped reach this milestone! It would not have been possible without you.
Release Notes
In addition to many issues and bugfixes courtesy of acalotoiu, tim0s, htorst, tbennun, phschaad, BenWeber42, philip-paul-mueller, luigifusco, ThrudPrimrose, FlorianDeconinck, pratyai, edopao, kotsaloscv, and iBug, several new features for quality of life and future development were added.
New features introduced into the SDFG IR and builder API:
* Add GUIDs to SDFG elements and SDFG diff support (by phschaad)
* Added `can_be_applied_to()` to Transformation API (by philip-paul-mueller)
* `SDFG.auto_optimize`, `SDFG.regenerate_code`, and `SDFG.as_schedule_tree` are now easily accessible as API methods and fields
New Python frontend features
* You can now specify the storage location of expressions inline using the `` operator or type hints. Examples:
* `a = np.ones(M) dace.StorageType.CPU_ThreadLocal`
* `b: dace.float64[M, N] dace.StorageType.GPU_Global = np.zeros(...)`
New transformations
* `WCRToAugAssign` transformation (by alexnick83)
New code generation features
* `clang-format` can now be configured to be called on generated code (by ThrudPrimrose)
Experimental features
* Control flow (loop, conditional, named) regions (by phschaad and luca-patrignani). Stay tuned for more updates in the next development releases!
Other changes and bugfix highlights
* Support for SymPy 1.13 (by BenWeber42)
* Rename misleading topological_sort to bfs_nodes by BenWeber42 in https://github.com/spcl/dace/pull/1590
* Add multidimensional maps to GPU docs by tbennun in https://github.com/spcl/dace/pull/1608
* Improve SDFG work-depth analysis and add SDFG simulated operational intensity analysis by phschaad in https://github.com/spcl/dace/pull/1607
* Scalar return values are now disallowed by philip-paul-mueller in https://github.com/spcl/dace/pull/1609
* Fixed `RedundantArray`'s handling of "reshaping" Memlets by philip-paul-mueller in https://github.com/spcl/dace/pull/1603
* Loop Region Code Generation by phschaad in https://github.com/spcl/dace/pull/1597
* Bump certifi from 2023.7.22 to 2024.7.4 by dependabot in https://github.com/spcl/dace/pull/1614
* Fix incorrect input/output of nested dace programs by phschaad in https://github.com/spcl/dace/pull/1615
* Return correct state in `nest_sdfg_subgraph` by tbennun in https://github.com/spcl/dace/pull/1627
* Made `TransientReuse` Less Verbose by philip-paul-mueller in https://github.com/spcl/dace/pull/1622
* Improving the Usage of `pragma unroll` by philip-paul-mueller in https://github.com/spcl/dace/pull/1621
* Added `PatternNode` to `dace.transformation` imports. by philip-paul-mueller in https://github.com/spcl/dace/pull/1618
* Implement user regions and function call regions by luca-patrignani in https://github.com/spcl/dace/pull/1623
* Add UUIDs to SDFG elements by phschaad in https://github.com/spcl/dace/pull/1631
* framecode: Fix missing BasicCFBlock argument by iBug in https://github.com/spcl/dace/pull/1630
* Specified behaviour of `Subset.covers()` for different dimensionality by philip-paul-mueller in https://github.com/spcl/dace/pull/1637
* More robust loop detection by tbennun in https://github.com/spcl/dace/pull/1646
* Fix missed exploration of edges in constant propagation by luigifusco in https://github.com/spcl/dace/pull/1635
* Fix infinite loop with control flow blocks by tbennun in https://github.com/spcl/dace/pull/1634
* Print out exception on parsing fail early by FlorianDeconinck in https://github.com/spcl/dace/pull/1651
* Reworked Optional Serializing by philip-paul-mueller in https://github.com/spcl/dace/pull/1647
* Modified `SetProperty` by philip-paul-mueller in https://github.com/spcl/dace/pull/1653
* Made `CompiledSDFG` in the main namespace available. by philip-paul-mueller in https://github.com/spcl/dace/pull/1567
* SDFG Diff Tool by phschaad in https://github.com/spcl/dace/pull/1632
* Made the `SDFGState.add_mapped_tasklet()` more convenient by philip-paul-mueller in https://github.com/spcl/dace/pull/1655
* Maps With Zero Parameters by philip-paul-mueller in https://github.com/spcl/dace/pull/1649
* Bug in constant propagation with multiple constants by tbennun in https://github.com/spcl/dace/pull/1658
* Fixed `PruneConnectors` by philip-paul-mueller in https://github.com/spcl/dace/pull/1660
* Fix array indirection to memlet subset promotion by BenWeber42 in https://github.com/spcl/dace/pull/1406
* Renamed `graph.bfs_edges` to `edge_bfs` by BenWeber42 in https://github.com/spcl/dace/pull/1604
* Inter-state edge assignment race test by tbennun in https://github.com/spcl/dace/pull/1672
* Fix race conditions in Constant Propagation and Reference-To-View by tbennun in https://github.com/spcl/dace/pull/1679
* Improve memlet label and string initialization by tbennun in https://github.com/spcl/dace/pull/1680
* Control Flow Raising by phschaad in https://github.com/spcl/dace/pull/1657
* Updated `InlineMultistateSDFG` by philip-paul-mueller in https://github.com/spcl/dace/pull/1689
* Extend TrivialTaskletElimination for map scope by edopao in https://github.com/spcl/dace/pull/1650
* Fix to Read and Write Sets by philip-paul-mueller in https://github.com/spcl/dace/pull/1678
* Make `is_empty()` and `propagate_subset()` not unnecessarily rely on the `src` and `dst` by pratyai in https://github.com/spcl/dace/pull/1699
* fix(codegen/prettycode): Use base_indentation as intended by iBug in https://github.com/spcl/dace/pull/1697
* Warn on potential data races by phschaad in https://github.com/spcl/dace/pull/1712
* Python frontend stability and inline storage specification by tbennun in https://github.com/spcl/dace/pull/1711
* infer_symbols_from_datadescriptor : modification to infer offset by kotsaloscv in https://github.com/spcl/dace/pull/1525
* Add CFG to generate_scope in tutorials by ThrudPrimrose in https://github.com/spcl/dace/pull/1706
* Better `CopyToMap` by philip-paul-mueller in https://github.com/spcl/dace/pull/1675
* More NumPy operation implementations by tbennun in https://github.com/spcl/dace/pull/1498
* Fix jupyter's version of SDFV by phschaad in https://github.com/spcl/dace/pull/1714
* Fix broken codegen tutorial by romanc in https://github.com/spcl/dace/pull/1720
* CI: Update checkout and setup-python actions by romanc in https://github.com/spcl/dace/pull/1718
* Bump version and update dependencies by tbennun in https://github.com/spcl/dace/pull/1722
* Various Cutout Fixes by phschaad in https://github.com/spcl/dace/pull/1662
* Various stability improvements and convenience APIs by tbennun in https://github.com/spcl/dace/pull/1724
* Rename FORTRAN frontend tests by pratyai in https://github.com/spcl/dace/pull/1729
* Add back clang-format support by ThrudPrimrose in https://github.com/spcl/dace/pull/1732
* Fix problem with struct reads on interstate edges by phschaad in https://github.com/spcl/dace/pull/1512
* Quality of life: Improved error messages by romanc in https://github.com/spcl/dace/pull/1731
* Cherry-picked a handful of intrinsic related commits out of `multi_sdfg` branch. by pratyai in https://github.com/spcl/dace/pull/1728
* Used valid FORTRAN test program for a couple frontend tests + Made `floatlit2string()` convert the FORTRAN real literal strings into python floats. by pratyai in https://github.com/spcl/dace/pull/1733
* Fix pure reduce expansion for squeezed output memlets. by pratyai in https://github.com/spcl/dace/pull/1709
* Make the import of `typing.Literal` portable between python versions 3.7 and 3.12 by pratyai in https://github.com/spcl/dace/pull/1700
* Fix type inference and code generation for typeclasses and numpy types by tbennun in https://github.com/spcl/dace/pull/1725
* SDFG API additions for version 1.0 by tbennun in https://github.com/spcl/dace/pull/1740
* Replace another FORTRAN test program with `gfortran -Wall` certified test program. by pratyai in https://github.com/spcl/dace/pull/1736
* Unskip unit tests and provide reasons for skipped tests by tbennun in https://github.com/spcl/dace/pull/1742
* Fix OpenMP dynamic loop bounds that use persistent memory by tbennun in https://github.com/spcl/dace/pull/1746
* Fixes for `SDFGState._read_and_write_sets()` by philip-paul-mueller in https://github.com/spcl/dace/pull/1747
* Fix temporary transient counter during Python parsing of nested calls by tbennun in https://github.com/spcl/dace/pull/1745
* Fix `pystr_to_symbolic` not correctly interpreting constants as boolean values in boolean comparisons by phschaad in https://github.com/spcl/dace/pull/1756
* Fixed `dace::math::pi` and `dace::math::nan` on GPU by philip-paul-mueller in https://github.com/spcl/dace/pull/1759
* Make scalar to symbol promotion robust to node order in state by tbennun in https://github.com/spcl/dace/pull/1766
**Full Changelog**: https://github.com/spcl/dace/compare/v0.16.1...v1.0.0