Skip to content

Commit b84de91

Browse files
committed
Fix a hessian with abs
1 parent 8416328 commit b84de91

File tree

3 files changed

+9
-2
lines changed

3 files changed

+9
-2
lines changed

ext/IntervalArithmeticDiffRulesExt.jl

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
module IntervalArithmeticDiffRulesExt
22

3-
using IntervalArithmetic, DiffRules
3+
using IntervalArithmetic
4+
import DiffRules
45

56
function DiffRules._abs_deriv(x::Interval)
67
r = sign(bareinterval(x))

ext/IntervalArithmeticForwardDiffExt.jl

+5
Original file line numberDiff line numberDiff line change
@@ -135,4 +135,9 @@ function (piecewise::Piecewise)(dual::Dual{T,<:Interval}) where {T}
135135
return Dual{T}(primal, tuple(partial...))
136136
end
137137

138+
#
139+
140+
ForwardDiff.DiffRules._abs_deriv(x::Dual{T,<:Interval}) where {T} =
141+
Dual{T}(ForwardDiff.DiffRules._abs_deriv(value(x)), zero(partials(x)))
142+
138143
end

test/interval_tests/forwarddiff.jl

+2-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ end
2121
g(x) = abs(x)^2
2222
@test ForwardDiff.derivative(g, interval(-1, 1)) === interval(convert(Interval{Float64}, -2), convert(Interval{Float64}, 2), trv)
2323
@test all(ForwardDiff.gradient( v -> g(v[1]), [interval(-1, 1)]) .=== [interval(convert(Interval{Float64}, -2), convert(Interval{Float64}, 2), trv)])
24-
@test all(ForwardDiff.hessian( v -> g(v[1]), [interval( 0 )]) .=== [interval(convert(Interval{Float64}, -2), convert(Interval{Float64}, 2), trv)])
24+
@test all(ForwardDiff.hessian( v -> g(v[1]), [interval( 0 )]) .=== [interval(convert(Interval{Float64}, 0.0), trv)])
25+
@test all(ForwardDiff.hessian( v -> g(v[1]), [interval(-1, 1)]) .=== [interval(convert(Interval{Float64}, -2), convert(Interval{Float64}, 2), trv)])
2526
end
2627

2728
@testset "sin" begin

0 commit comments

Comments
 (0)