@@ -128,13 +128,9 @@ function _hessian_slice_inner(d, ex, ::Type{T}) where {T}
128128 _reinterpret_unsafe (T, d. subexpression_forward_values_ϵ)
129129 for i in ex. dependent_subexpressions
130130 subexpr = d. subexpressions[i]
131- subexpr_forward_values_ϵ[i] = _forward_eval_ϵ (
132- d,
133- subexpr,
134- _reinterpret_unsafe (T, subexpr. partials_storage_ϵ),
135- )
131+ subexpr_forward_values_ϵ[i] = _forward_eval_ϵ (d, subexpr, T)
136132 end
137- _forward_eval_ϵ (d, ex, _reinterpret_unsafe (T, d . partials_storage_ϵ) )
133+ _forward_eval_ϵ (d, ex. expr, T )
138134 # do a reverse pass
139135 subexpr_reverse_values_ϵ =
140136 _reinterpret_unsafe (T, d. subexpression_reverse_values_ϵ)
@@ -144,9 +140,8 @@ function _hessian_slice_inner(d, ex, ::Type{T}) where {T}
144140 end
145141 _reverse_eval_ϵ (
146142 output_ϵ,
147- ex,
143+ ex. expr ,
148144 _reinterpret_unsafe (T, d. storage_ϵ),
149- _reinterpret_unsafe (T, d. partials_storage_ϵ),
150145 d. subexpression_reverse_values,
151146 subexpr_reverse_values_ϵ,
152147 1.0 ,
@@ -159,7 +154,6 @@ function _hessian_slice_inner(d, ex, ::Type{T}) where {T}
159154 output_ϵ,
160155 subexpr,
161156 _reinterpret_unsafe (T, d. storage_ϵ),
162- _reinterpret_unsafe (T, subexpr. partials_storage_ϵ),
163157 d. subexpression_reverse_values,
164158 subexpr_reverse_values_ϵ,
165159 d. subexpression_reverse_values[j],
173167 _forward_eval_ϵ(
174168 d::NLPEvaluator,
175169 ex::Union{_FunctionStorage,_SubexpressionStorage},
176- partials_storage_ϵ::AbstractVector{ForwardDiff.Partials{N,T} },
177- ) where {N,T}
170+ ::Type{P },
171+ ) where {N,T,P<:ForwardDiff.Partials{N,T} }
178172
179173Evaluate the directional derivatives of the expression tree in `ex`.
180174
@@ -186,10 +180,11 @@ This assumes that `_reverse_model(d, x)` has already been called.
186180"""
187181function _forward_eval_ϵ (
188182 d:: NLPEvaluator ,
189- ex:: Union{_FunctionStorage, _SubexpressionStorage} ,
190- partials_storage_ϵ :: AbstractVector {P} ,
183+ ex:: _SubexpressionStorage ,
184+ :: Type {P} ,
191185) where {N,T,P<: ForwardDiff.Partials{N,T} }
192186 storage_ϵ = _reinterpret_unsafe (P, d. storage_ϵ)
187+ partials_storage_ϵ = _reinterpret_unsafe (P, ex. partials_storage_ϵ)
193188 x_values_ϵ = _reinterpret_unsafe (P, d. input_ϵ)
194189 subexpression_values_ϵ =
195190 _reinterpret_unsafe (P, d. subexpression_forward_values_ϵ)
@@ -370,14 +365,17 @@ end
370365# to compute hessian-vector products.
371366function _reverse_eval_ϵ (
372367 output_ϵ:: AbstractVector{ForwardDiff.Partials{N,T}} ,
373- ex:: Union{_FunctionStorage, _SubexpressionStorage} ,
368+ ex:: _SubexpressionStorage ,
374369 reverse_storage_ϵ,
375- partials_storage_ϵ,
376370 subexpression_output,
377371 subexpression_output_ϵ,
378372 scale:: T ,
379373 scale_ϵ:: ForwardDiff.Partials{N,T} ,
380374) where {N,T}
375+ partials_storage_ϵ = _reinterpret_unsafe (
376+ ForwardDiff. Partials{N,T},
377+ ex. partials_storage_ϵ,
378+ )
381379 @assert length (reverse_storage_ϵ) >= length (ex. nodes)
382380 @assert length (partials_storage_ϵ) >= length (ex. nodes)
383381 if ex. nodes[1 ]. type == Nonlinear. NODE_VARIABLE
0 commit comments