11# # Pushforward
22
3- DI. prepare_pushforward (f, :: AnyAutoFiniteDiff , x) = NoPushforwardExtras ()
3+ DI. prepare_pushforward (f, :: AutoFiniteDiff , x) = NoPushforwardExtras ()
44
5- function DI. pushforward (f, backend:: AnyAutoFiniteDiff , x, dx, :: NoPushforwardExtras )
5+ function DI. pushforward (f, backend:: AutoFiniteDiff , x, dx, :: NoPushforwardExtras )
66 step (t:: Number ) = f (x .+ t .* dx)
77 new_dy = finite_difference_derivative (step, zero (eltype (x)), fdtype (backend))
88 return new_dy
99end
1010
11- function DI. value_and_pushforward (
12- f, backend:: AnyAutoFiniteDiff , x, dx, :: NoPushforwardExtras
13- )
11+ function DI. value_and_pushforward (f, backend:: AutoFiniteDiff , x, dx, :: NoPushforwardExtras )
1412 y = f (x)
1513 step (t:: Number ) = f (x .+ t .* dx)
1614 new_dy = finite_difference_derivative (
@@ -25,7 +23,7 @@ struct FiniteDiffOneArgDerivativeExtras{C}
2523 cache:: C
2624end
2725
28- function DI. prepare_derivative (f, backend:: AnyAutoFiniteDiff , x)
26+ function DI. prepare_derivative (f, backend:: AutoFiniteDiff , x)
2927 y = f (x)
3028 cache = if y isa Number
3129 nothing
3937# ## Scalar to scalar
4038
4139function DI. derivative (
42- f, backend:: AnyAutoFiniteDiff , x, :: FiniteDiffOneArgDerivativeExtras{Nothing}
40+ f, backend:: AutoFiniteDiff , x, :: FiniteDiffOneArgDerivativeExtras{Nothing}
4341)
4442 return finite_difference_derivative (f, x, fdtype (backend))
4543end
4644
4745function DI. derivative! (
48- f, der, backend:: AnyAutoFiniteDiff , x, extras:: FiniteDiffOneArgDerivativeExtras{Nothing}
46+ f, der, backend:: AutoFiniteDiff , x, extras:: FiniteDiffOneArgDerivativeExtras{Nothing}
4947)
5048 return copyto! (der, DI. derivative (f, backend, x, extras))
5149end
5250
5351function DI. value_and_derivative (
54- f, backend:: AnyAutoFiniteDiff , x, :: FiniteDiffOneArgDerivativeExtras{Nothing}
52+ f, backend:: AutoFiniteDiff , x, :: FiniteDiffOneArgDerivativeExtras{Nothing}
5553)
5654 y = f (x)
5755 return y, finite_difference_derivative (f, x, fdtype (backend), eltype (y), y)
5856end
5957
6058function DI. value_and_derivative! (
61- f, der, backend:: AnyAutoFiniteDiff , x, extras:: FiniteDiffOneArgDerivativeExtras{Nothing}
59+ f, der, backend:: AutoFiniteDiff , x, extras:: FiniteDiffOneArgDerivativeExtras{Nothing}
6260)
6361 y, new_der = DI. value_and_derivative (f, backend, x, extras)
6462 return y, copyto! (der, new_der)
6765# ## Scalar to array
6866
6967function DI. derivative (
70- f, :: AnyAutoFiniteDiff , x, extras:: FiniteDiffOneArgDerivativeExtras{<:GradientCache}
68+ f, :: AutoFiniteDiff , x, extras:: FiniteDiffOneArgDerivativeExtras{<:GradientCache}
7169)
7270 return finite_difference_gradient (f, x, extras. cache)
7371end
7472
7573function DI. derivative! (
76- f,
77- der,
78- :: AnyAutoFiniteDiff ,
79- x,
80- extras:: FiniteDiffOneArgDerivativeExtras{<:GradientCache} ,
74+ f, der, :: AutoFiniteDiff , x, extras:: FiniteDiffOneArgDerivativeExtras{<:GradientCache}
8175)
8276 return finite_difference_gradient! (der, f, x, extras. cache)
8377end
8478
8579function DI. value_and_derivative (
86- f, :: AnyAutoFiniteDiff , x, extras:: FiniteDiffOneArgDerivativeExtras{<:GradientCache}
80+ f, :: AutoFiniteDiff , x, extras:: FiniteDiffOneArgDerivativeExtras{<:GradientCache}
8781)
8882 y = f (x)
8983 return y, finite_difference_gradient (f, x, extras. cache)
9084end
9185
9286function DI. value_and_derivative! (
93- f,
94- der,
95- :: AnyAutoFiniteDiff ,
96- x,
97- extras:: FiniteDiffOneArgDerivativeExtras{<:GradientCache} ,
87+ f, der, :: AutoFiniteDiff , x, extras:: FiniteDiffOneArgDerivativeExtras{<:GradientCache}
9888)
9989 return f (x), finite_difference_gradient! (der, f, x, extras. cache)
10090end
@@ -105,33 +95,33 @@ struct FiniteDiffGradientExtras{C}
10595 cache:: C
10696end
10797
108- function DI. prepare_gradient (f, backend:: AnyAutoFiniteDiff , x)
98+ function DI. prepare_gradient (f, backend:: AutoFiniteDiff , x)
10999 y = f (x)
110100 df = zero (y) .* x
111101 cache = GradientCache (df, x, fdtype (backend))
112102 return FiniteDiffGradientExtras (cache)
113103end
114104
115105function DI. gradient (
116- f, :: AnyAutoFiniteDiff , x:: AbstractArray , extras:: FiniteDiffGradientExtras
106+ f, :: AutoFiniteDiff , x:: AbstractArray , extras:: FiniteDiffGradientExtras
117107)
118108 return finite_difference_gradient (f, x, extras. cache)
119109end
120110
121111function DI. value_and_gradient (
122- f, :: AnyAutoFiniteDiff , x:: AbstractArray , extras:: FiniteDiffGradientExtras
112+ f, :: AutoFiniteDiff , x:: AbstractArray , extras:: FiniteDiffGradientExtras
123113)
124114 return f (x), finite_difference_gradient (f, x, extras. cache)
125115end
126116
127117function DI. gradient! (
128- f, grad, :: AnyAutoFiniteDiff , x:: AbstractArray , extras:: FiniteDiffGradientExtras
118+ f, grad, :: AutoFiniteDiff , x:: AbstractArray , extras:: FiniteDiffGradientExtras
129119)
130120 return finite_difference_gradient! (grad, f, x, extras. cache)
131121end
132122
133123function DI. value_and_gradient! (
134- f, grad, :: AnyAutoFiniteDiff , x:: AbstractArray , extras:: FiniteDiffGradientExtras
124+ f, grad, :: AutoFiniteDiff , x:: AbstractArray , extras:: FiniteDiffGradientExtras
135125)
136126 return f (x), finite_difference_gradient! (grad, f, x, extras. cache)
137127end
@@ -142,7 +132,7 @@ struct FiniteDiffOneArgJacobianExtras{C}
142132 cache:: C
143133end
144134
145- function DI. prepare_jacobian (f, backend:: AnyAutoFiniteDiff , x)
135+ function DI. prepare_jacobian (f, backend:: AutoFiniteDiff , x)
146136 y = f (x)
147137 x1 = similar (x)
148138 fx = similar (y)
@@ -151,25 +141,23 @@ function DI.prepare_jacobian(f, backend::AnyAutoFiniteDiff, x)
151141 return FiniteDiffOneArgJacobianExtras (cache)
152142end
153143
154- function DI. jacobian (f, :: AnyAutoFiniteDiff , x, extras:: FiniteDiffOneArgJacobianExtras )
144+ function DI. jacobian (f, :: AutoFiniteDiff , x, extras:: FiniteDiffOneArgJacobianExtras )
155145 return finite_difference_jacobian (f, x, extras. cache)
156146end
157147
158148function DI. value_and_jacobian (
159- f, :: AnyAutoFiniteDiff , x, extras:: FiniteDiffOneArgJacobianExtras
149+ f, :: AutoFiniteDiff , x, extras:: FiniteDiffOneArgJacobianExtras
160150)
161151 y = f (x)
162152 return y, finite_difference_jacobian (f, x, extras. cache, y)
163153end
164154
165- function DI. jacobian! (
166- f, jac, :: AnyAutoFiniteDiff , x, extras:: FiniteDiffOneArgJacobianExtras
167- )
155+ function DI. jacobian! (f, jac, :: AutoFiniteDiff , x, extras:: FiniteDiffOneArgJacobianExtras )
168156 return copyto! (jac, finite_difference_jacobian (f, x, extras. cache; jac_prototype= jac))
169157end
170158
171159function DI. value_and_jacobian! (
172- f, jac, :: AnyAutoFiniteDiff , x, extras:: FiniteDiffOneArgJacobianExtras
160+ f, jac, :: AutoFiniteDiff , x, extras:: FiniteDiffOneArgJacobianExtras
173161)
174162 y = f (x)
175163 return y,
@@ -182,15 +170,15 @@ struct FiniteDiffHessianExtras{C}
182170 cache:: C
183171end
184172
185- function DI. prepare_hessian (f, backend:: AnyAutoFiniteDiff , x)
173+ function DI. prepare_hessian (f, backend:: AutoFiniteDiff , x)
186174 cache = HessianCache (x, fdhtype (backend))
187175 return FiniteDiffHessianExtras (cache)
188176end
189177
190- function DI. hessian (f, :: AnyAutoFiniteDiff , x, extras:: FiniteDiffHessianExtras )
178+ function DI. hessian (f, :: AutoFiniteDiff , x, extras:: FiniteDiffHessianExtras )
191179 return finite_difference_hessian (f, x, extras. cache)
192180end
193181
194- function DI. hessian! (f, hess, :: AnyAutoFiniteDiff , x, extras:: FiniteDiffHessianExtras )
182+ function DI. hessian! (f, hess, :: AutoFiniteDiff , x, extras:: FiniteDiffHessianExtras )
195183 return finite_difference_hessian! (hess, f, x, extras. cache)
196184end
0 commit comments