@@ -98,10 +98,7 @@ Forward-mode evaluation of an expression tree given in `f`.
9898 associate storage with each edge of the DAG.
9999"""
100100function _forward_eval (
101- # !!! warning
102- # This Union depends upon _FunctionStorage and _SubexpressionStorage
103- # having similarly named fields.
104- f:: Union{_FunctionStorage,_SubexpressionStorage} ,
101+ f:: _SubexpressionStorage ,
105102 d:: NLPEvaluator ,
106103 x:: AbstractVector{T} ,
107104):: T where {T}
@@ -289,6 +286,8 @@ function _forward_eval(
289286 return f. forward_storage[1 ]
290287end
291288
289+ _forward_eval (f:: _FunctionStorage , d, x) = _forward_eval (f. expr, d, x)
290+
292291"""
293292 _reverse_eval(f::Union{_FunctionStorage,_SubexpressionStorage})
294293
@@ -297,12 +296,7 @@ Reverse-mode evaluation of an expression tree given in `f`.
297296 * This function assumes `f.partials_storage` is already updated.
298297 * This function assumes that `f.reverse_storage` has been initialized with 0.0.
299298"""
300- function _reverse_eval (
301- # !!! warning
302- # This Union depends upon _FunctionStorage and _SubexpressionStorage
303- # having similarly named fields.
304- f:: Union{_FunctionStorage,_SubexpressionStorage} ,
305- )
299+ function _reverse_eval (f:: _SubexpressionStorage )
306300 @assert length (f. reverse_storage) >= length (f. nodes)
307301 @assert length (f. partials_storage) >= length (f. nodes)
308302 # f.nodes is already in order such that parents always appear before
@@ -328,6 +322,8 @@ function _reverse_eval(
328322 return
329323end
330324
325+ _reverse_eval (f:: _FunctionStorage ) = _reverse_eval (f. expr)
326+
331327"""
332328 _extract_reverse_pass(
333329 g::AbstractVector{T},
361357
362358function _extract_reverse_pass_inner (
363359 output:: AbstractVector{T} ,
364- # !!! warning
365- # This Union depends upon _FunctionStorage and _SubexpressionStorage
366- # having similarly named fields.
360+ f:: _FunctionStorage ,
361+ subexpressions:: AbstractVector{T} ,
362+ scale:: T ,
363+ ) where {T}
364+ return _extract_reverse_pass_inner (
365+ output,
366+ f. expr,
367+ subexpressions,
368+ scale,
369+ )
370+ end
371+
372+ function _extract_reverse_pass_inner (
373+ output:: AbstractVector{T} ,
367374 f:: Union{_FunctionStorage,_SubexpressionStorage} ,
368375 subexpressions:: AbstractVector{T} ,
369376 scale:: T ,
0 commit comments