Skip to content

Commit 2a5d029

Browse files
authored
Merge branch 'master' into release-1.0
2 parents ae29f50 + f462624 commit 2a5d029

File tree

3 files changed

+7
-5
lines changed

3 files changed

+7
-5
lines changed

Project.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ IntervalArithmeticSparseArraysExt = "SparseArrays"
2929
[compat]
3030
CRlibm = "1.0.2"
3131
DiffRules = "1"
32-
ForwardDiff = "0.10"
32+
ForwardDiff = "0.10, 1"
3333
IntervalSets = "0.7"
3434
LinearAlgebra = "1.10"
3535
MacroTools = "0.5"

ext/IntervalArithmeticDiffRulesExt.jl

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ module IntervalArithmeticDiffRulesExt
33
using IntervalArithmetic
44
import DiffRules
55

6-
function DiffRules._abs_deriv(x::Interval)
7-
r = sign(bareinterval(x))
6+
function DiffRules._abs_deriv(x::Interval{T}) where {T<:IntervalArithmetic.NumTypes}
7+
r = ifelse(isthinzero(x), bareinterval(-one(T), one(T)), sign(bareinterval(x)))
88
d = decoration(x)
99
d = min(d, ifelse(in_interval(0, x), trv, d)) # if `x` contains 0, then `trv` decoration
1010
return IntervalArithmetic._unsafe_interval(r, d, isguaranteed(x))

test/interval_tests/forwarddiff.jl

+4-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ end
1010
@testset "abs" begin
1111
@test ForwardDiff.derivative(abs, interval(-2, -1)) === interval(-1, -1, com)
1212
@test ForwardDiff.derivative(abs, interval( 1, 2)) === interval( 1, 1, com)
13-
@test ForwardDiff.derivative(abs, interval( 0 )) === interval( 0 , trv)
13+
@test ForwardDiff.derivative(abs, interval( 0 )) === interval(-1, 1, trv)
1414
@test ForwardDiff.derivative(abs, interval(-1, 0)) === interval(-1, 0, trv)
1515
@test ForwardDiff.derivative(abs, interval( 0, 1)) === interval( 0, 1, trv)
1616
@test ForwardDiff.derivative(abs, interval(-2, 2)) === interval(-1, 1, trv)
@@ -21,8 +21,10 @@ 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}, 0.0), trv)])
24+
@test all(ForwardDiff.hessian( v -> g(v[1]), [interval( 1 )]) .=== [interval(convert(Interval{Float64}, 2), trv)])
25+
@test all(ForwardDiff.hessian( v -> g(v[1]), [interval( -1 )]) .=== [interval(convert(Interval{Float64}, 2), trv)])
2526
@test all(ForwardDiff.hessian( v -> g(v[1]), [interval(-1, 1)]) .=== [interval(convert(Interval{Float64}, -2), convert(Interval{Float64}, 2), trv)])
27+
@test all(ForwardDiff.hessian( v -> g(v[1]), [interval( 0 )]) .=== [interval(convert(Interval{Float64}, -2), convert(Interval{Float64}, 2), trv)])
2628
end
2729

2830
@testset "sin" begin

0 commit comments

Comments
 (0)