Is there currently an “official” way to add differentiation rules to be used by ForwardDiff
?
This was discussed a few months ago here:
which pointed to DiffRules.@define_diffrule
.
I managed to get my new rule to work with
using DiffRules: @define_diffrule
using ForwardDiff
@define_diffrule Main.q(s,r) = :(Main.qs($s,$r)), :(Main.qr($s,$r))
ForwardDiff.eval(ForwardDiff.binary_dual_definition(:Main,:q))
but that seems a bit hacky. Is there a better way?
My reason for defining a rule manually is that q
is not auto-differentiable and I have several functions defined in terms of q
that I would like to automatically differentiate using the “manually” computed derivatives of q
.