11# # Docstrings
22
33"""
4- prepare_derivative(f, backend, x) -> extras
5- prepare_derivative(f!, backend, y , x) -> extras
4+ prepare_derivative(f, backend, x) -> extras
5+ prepare_derivative(f!, y, backend , x) -> extras
66
77Create an `extras` object subtyping [`DerivativeExtras`](@ref) that can be given to derivative operators.
8+
9+ Beware that in the two-argument case, `y` is mutated by `f!` during preparation.
810"""
911function prepare_derivative end
1012
@@ -51,8 +53,8 @@ function prepare_derivative(f, backend::AbstractADType, x)
5153 return PushforwardDerivativeExtras (prepare_pushforward (f, backend, x))
5254end
5355
54- function prepare_derivative (f!, backend:: AbstractADType , y , x)
55- return PushforwardDerivativeExtras (prepare_pushforward (f!, backend, y , x))
56+ function prepare_derivative (f!, y, backend:: AbstractADType , x)
57+ return PushforwardDerivativeExtras (prepare_pushforward (f!, y, backend , x))
5658end
5759
5860# # One argument
@@ -102,7 +104,7 @@ function value_and_derivative(
102104 y,
103105 backend:: AbstractADType ,
104106 x,
105- extras:: DerivativeExtras = prepare_derivative (f!, backend, y , x),
107+ extras:: DerivativeExtras = prepare_derivative (f!, y, backend , x),
106108)
107109 return value_and_pushforward (f!, y, backend, x, one (x), extras. pushforward_extras)
108110end
@@ -113,7 +115,7 @@ function value_and_derivative!(
113115 der,
114116 backend:: AbstractADType ,
115117 x,
116- extras:: DerivativeExtras = prepare_derivative (f!, backend, y , x),
118+ extras:: DerivativeExtras = prepare_derivative (f!, y, backend , x),
117119)
118120 return value_and_pushforward! (f!, y, der, backend, x, one (x), extras. pushforward_extras)
119121end
@@ -123,7 +125,7 @@ function derivative(
123125 y,
124126 backend:: AbstractADType ,
125127 x,
126- extras:: DerivativeExtras = prepare_derivative (f!, backend, y , x),
128+ extras:: DerivativeExtras = prepare_derivative (f!, y, backend , x),
127129)
128130 return pushforward (f!, y, backend, x, one (x), extras. pushforward_extras)
129131end
@@ -134,7 +136,7 @@ function derivative!(
134136 der,
135137 backend:: AbstractADType ,
136138 x,
137- extras:: DerivativeExtras = prepare_derivative (f!, backend, y , x),
139+ extras:: DerivativeExtras = prepare_derivative (f!, y, backend , x),
138140)
139141 return pushforward! (f!, y, der, backend, x, one (x), extras. pushforward_extras)
140142end
0 commit comments