Hi,
I've been implementing graph transformations in Python and sometimes it is
handy to add annotations to nodes. Now, running these through an ExprMutator
will give me all new nodes and they're gone. But actually, they're gone ealier
than that:
```python
x = tvm.relay.var('x', shape=(1,1))
x.my_annotation = 'something'
y = x * tvm.relay.const(2)
assert y.args[0] == x
y.args[0].my_annotation # AttributeError
```
The underlying reason is that TVM's custom FFI doesn't attach the Python object
to the C object but just returns a new Python object pointing to the same C
object.
I can work around it by keeping a dict `originalizer = {o: o for o in
all_original_objects}` and then do `originalizer[y.args[0]]`, but that seems
clumsy.
For reference, the same thing works better in other frameworks:
```python
x = torch.tensor(1.0, requires_grad=True)
x.my_annotation = 'something'
y = x * 2
y.grad_fn.next_functions[0][0].variable.my_annotation # works!
```
Should TVM do the same?
Best regards
Thomas
---
[Visit
Topic](https://discuss.tvm.apache.org/t/round-tripping-objects-through-the-ffi/8440/1)
to respond.
You are receiving this because you enabled mailing list mode.
To unsubscribe from these emails, [click
here](https://discuss.tvm.apache.org/email/unsubscribe/45bcb3fbc3b7c07a28386db5740a1fbbfda35a6c269e445aa754ff4c7930f78b).