Suppose I have some function for which I define custom Zygote adjoints, but the gradient for some of the arguments I don’t need yet and I’d like to leave to implement later. Currently, I could define that adjoint to return nothing
for those arguments and this will work, but if I accidentally take a gradient w.r.t. to them, it will silently fail and give me 0
/nothing
. Instead, is there a way to do something kind of like the following?
f(x,y) = x*y
# suppose the gradient w.r.t. x is easy but I haven't coded up y yet
@adjoint f(x,y) = f(x,y), Δ->(Δ*y, error("not implemented yet"))
gradient(x->f(x,1), 1) # should work
gradient(y->f(1,y), 1) # should error "not implemented yet"
The above does not currently work since the error is always evaluated, even we don’t need the gradient w.r.t. to y
, but could something similar to this work?