1- struct SimpleNonlinearSolveTag end
2-
3- function ForwardDiff. checktag (:: Type{<:ForwardDiff.Tag{<:SimpleNonlinearSolveTag, <:T}} ,
4- f:: F , x:: AbstractArray{T} ) where {T, F}
5- return true
6- end
7-
81"""
92 __prevfloat_tdir(x, x0, x1)
103
@@ -26,9 +19,9 @@ Return the maximum of `a` and `b` if `x1 > x0`, otherwise return the minimum.
2619"""
2720__max_tdir (a, b, x0, x1) = ifelse (x1 > x0, max (a, b), min (a, b))
2821
29- __standard_tag (:: Nothing , x) = ForwardDiff. Tag (SimpleNonlinearSolveTag (), eltype (x) )
30- __standard_tag (tag:: ForwardDiff.Tag , _) = tag
31- __standard_tag (tag, x) = ForwardDiff. Tag (tag, eltype (x) )
22+ __standard_tag (:: Nothing , f :: F , x :: AbstractArray{T} ) where {F, T} = ForwardDiff. Tag (f, T )
23+ __standard_tag (tag:: ForwardDiff.Tag , f :: F , x :: AbstractArray{T} ) where {F, T} = tag
24+ __standard_tag (tag, f :: F , x :: AbstractArray{T} ) where {F, T} = ForwardDiff. Tag (tag, T )
3225
3326__pick_forwarddiff_chunk (x) = ForwardDiff. Chunk (length (x))
3427function __pick_forwarddiff_chunk (x:: StaticArray )
4235
4336function __get_jacobian_config (ad:: AutoForwardDiff{CS} , f:: F , x) where {F, CS}
4437 ck = (CS === nothing || CS ≤ 0 ) ? __pick_forwarddiff_chunk (x) : ForwardDiff. Chunk {CS} ()
45- tag = __standard_tag (ad. tag, x)
38+ tag = __standard_tag (ad. tag, f, x)
4639 return __forwarddiff_jacobian_config (f, x, ck, tag)
4740end
4841function __get_jacobian_config (ad:: AutoForwardDiff{CS} , f!:: F , y, x) where {F, CS}
4942 ck = (CS === nothing || CS ≤ 0 ) ? __pick_forwarddiff_chunk (x) : ForwardDiff. Chunk {CS} ()
50- tag = __standard_tag (ad. tag, x)
43+ tag = __standard_tag (ad. tag, f, x)
5144 return ForwardDiff. JacobianConfig (f!, y, x, ck, tag)
5245end
5346
@@ -127,12 +120,12 @@ function value_and_jacobian(ad, f::F, y, x::Number, p, cache; J = nothing) where
127120 if DiffEqBase. has_jac (f)
128121 return f (x, p), f. jac (x, p)
129122 elseif ad isa AutoForwardDiff
130- T = typeof (__standard_tag (ad. tag, x))
123+ T = typeof (__standard_tag (ad. tag, f, x))
131124 out = f (ForwardDiff. Dual {T} (x, one (x)), p)
132125 return ForwardDiff. value (out), ForwardDiff. extract_derivative (T, out)
133126 elseif ad isa AutoPolyesterForwardDiff
134127 # Just use ForwardDiff
135- T = typeof (__standard_tag (nothing , x))
128+ T = typeof (__standard_tag (nothing , f, x))
136129 out = f (ForwardDiff. Dual {T} (x, one (x)), p)
137130 return ForwardDiff. value (out), ForwardDiff. extract_derivative (T, out)
138131 elseif ad isa AutoFiniteDiff
0 commit comments