spcl / spcl/dace

Variable corruption when a dictionary is used in subfunction

Open
#2,107 3 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
593
Forks
163
Avg merge
2d 23h
Merged PRs (30d)
60

Description

**Describe the bug**
While running the following code:
```python
import numpy as np
import dace

def sub_fn(x) -> dace.float32[3]:
STATIC_DATA = {
1: 1.06,
2: 0.98,
3: 99.7,
}
stuff = []
for i in x:
stuff.append(STATIC_DATA[i])
stuff = np.array(stuff)
print(x)
return stuff

@dace.program
def run(x):
stuff: dace.float32[3] = sub_fn(x)
return stuff

if __name__ == "__main__":
ret = run([1, 2, 3])
print(ret)
```
the output is the following:
```
[4607452634777659638 4607002274814922588 4636716180731382989]
[ 1.06 0.98 99.7 ]
```
While the final return value is correct, the argument `x` has been corrupted after being read.

**Expected behavior**
I'm new to `dace`, so I might be doing something wrong here. However, I'd expect `x` to not be corrupted as such, since it doesn't make any sense at the Python level.

One thing that I find odd is that `dace` won't run this code if it's all in the same function because of the dictionary (`TypeError: unhashable type: 'collections.OrderedDict'`). I imagine that dictionaries can't be used with `dace` and that subfunctions are just currently not checked? What is the best way to handle complex programs that require this type of branching?

**Desktop (please complete the following information):**
- OS: Linux Mint 22.1
- Python: 3.12.3
- dace: 1.0.2

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.