Inspecting the Zygote code, I can see that aside from @adjoint
there is also @adjoint!
that is used to declare the adjoints of some mutating functions (like push!
etc). I can’t find any doc strings or documentation when and how this can be used. I suspect, there are some limitations as Zygote generally forbids mutating. Can somebody explain @adjoint!
to me or send me a link where it is explained?
More directly, I was wondering if I can define adjoints for some functions where I pre-allocate memory for the result, like a pre-allocated FFT or matrix multiplication.