Skip to content

Commit 9abc286

Browse files
author
Unknown
committed
Update importing to prevent module conflicts, update require (add IntervalArithmetic.jl), add precompilation.
1 parent 73843bb commit 9abc286

File tree

9 files changed

+75
-65
lines changed

9 files changed

+75
-65
lines changed

REQUIRE

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
julia 0.6
2+
IntervalArithmetic 0.9.1

src/EAGOIntervalArithmetic.jl

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
1-
#__precompile__(true)
1+
__precompile__(true)
22

33
module EAGOIntervalArithmetic
44

5+
import IntervalArithmetic: mid, isdisjoint, isinterior, mig, mag, precedes,
6+
strictprecedes, sup, inf, hull, diam, pow, dist,
7+
isthin, isentire, radius
8+
59
import Base:
610
+, -, *, /, //, fma,
711
<, >, ==, !=, , ^, <=,
@@ -22,10 +26,10 @@ import Base:
2226

2327
export
2428
AbstractMCInterval, MCInterval, diam, radius, mid, mag, mig, hull,
25-
emptyinterval, ∅, ∞, isempty, isinterior, isdisjoint, ,
26-
precedes, strictprecedes, , entireinterval, isentire, nai, isnai, isthin,
29+
emptyMCinterval, ∅, ∞, isempty, isinterior, isdisjoint, ,
30+
precedes, strictprecedes, , entireMCinterval, isentire, nai, isnai, isthin,
2731
iscommon, isatomic, widen, inf, sup,parameters, eps, dist,
28-
pi_interval,midpoint_radius, interval_from_midpoint_radius, pow
32+
pi_MCinterval,midpoint_radius, interval_from_midpoint_radius, pow, flttoMCI
2933

3034
include("IntervalArithmetic/intervals.jl")
3135

src/IntervalArithmetic/arithmetic.jl

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -68,20 +68,20 @@ one(::Type{MCInterval{T}}) where T<:AbstractFloat = MCInterval(one(T))
6868
-(a::MCInterval) = MCInterval(-a.hi, -a.lo)
6969

7070
function +(a::MCInterval{T}, b::MCInterval{T}) where T<:AbstractFloat
71-
(isempty(a) || isempty(b)) && return emptyinterval(T)
71+
(isempty(a) || isempty(b)) && return emptyMCinterval(T)
7272
MCInterval{T}(a.lo + b.lo, a.hi + b.hi)
7373
end
7474

7575
function -(a::MCInterval{T}, b::MCInterval{T}) where T<:AbstractFloat
76-
(isempty(a) || isempty(b)) && return emptyinterval(T)
76+
(isempty(a) || isempty(b)) && return emptyMCinterval(T)
7777
MCInterval{T}(a.lo - b.hi, a.hi - b.lo)
7878
end
7979

8080

8181
## Multiplication
8282

8383
function *(a::MCInterval{T}, b::MCInterval{T}) where T<:AbstractFloat
84-
(isempty(a) || isempty(b)) && return emptyinterval(T)
84+
(isempty(a) || isempty(b)) && return emptyMCinterval(T)
8585

8686
(iszero(a) || iszero(b)) && return zero(MCInterval{T})
8787

@@ -104,13 +104,13 @@ end
104104
## Division
105105

106106
function inv(a::MCInterval{T}) where T<:AbstractFloat
107-
isempty(a) && return emptyinterval(T)
107+
isempty(a) && return emptyMCinterval(T)
108108

109109
if zero(T) a
110110
a.lo < zero(T) == a.hi && return MCInterval{T}(-Inf, inv(a.lo))
111111
a.lo == zero(T) < a.hi && return MCInterval{T}((inv(a.hi), Inf))
112-
a.lo < zero(T) < a.hi && return entireinterval(T)
113-
a == zero(a) && return emptyinterval(T)
112+
a.lo < zero(T) < a.hi && return entireMCinterval(T)
113+
a == zero(a) && return emptyMCinterval(T)
114114
end
115115

116116
MCInterval{T}(inv(a.hi), inv(a.lo))
@@ -119,8 +119,8 @@ end
119119
function /(a::MCInterval{T}, b::MCInterval{T}) where T<:AbstractFloat
120120

121121
S = typeof(a.lo / b.lo)
122-
(isempty(a) || isempty(b)) && return emptyinterval(S)
123-
iszero(b) && return emptyinterval(S)
122+
(isempty(a) || isempty(b)) && return emptyMCinterval(S)
123+
iszero(b) && return emptyMCinterval(S)
124124

125125
if b.lo > zero(T) # b strictly positive
126126

@@ -142,17 +142,17 @@ function /(a::MCInterval{T}, b::MCInterval{T}) where T<:AbstractFloat
142142

143143
a.lo >= zero(T) && return MCInterval{T}(a.lo/b.hi, Inf)
144144
a.hi <= zero(T) && return MCInterval{T}(-Inf, a.hi/b.hi)
145-
return entireinterval(S)
145+
return entireMCinterval(S)
146146

147147
elseif iszero(b.hi)
148148

149149
a.lo >= zero(T) && return MCInterval{T}(-Inf, a.lo/b.lo)
150150
a.hi <= zero(T) && return MCInterval{T}(a.hi/b.lo, Inf)
151-
return entireinterval(S)
151+
return entireMCinterval(S)
152152

153153
else
154154

155-
return entireinterval(S)
155+
return entireMCinterval(S)
156156

157157
end
158158
end
@@ -173,15 +173,15 @@ end
173173
function fma(a::MCInterval{T}, b::MCInterval{T}, c::MCInterval{T}) where T
174174
#T = promote_type(eltype(a), eltype(b), eltype(c))
175175

176-
(isempty(a) || isempty(b) || isempty(c)) && return emptyinterval(T)
176+
(isempty(a) || isempty(b) || isempty(c)) && return emptyMCinterval(T)
177177

178178
if isentire(a)
179179
b == zero(b) && return c
180-
return entireinterval(T)
180+
return entireMCinterval(T)
181181

182182
elseif isentire(b)
183183
a == zero(a) && return c
184-
return entireinterval(T)
184+
return entireMCinterval(T)
185185

186186
end
187187

@@ -225,17 +225,17 @@ sup(a::MCInterval) = a.hi
225225
real(a::MCInterval) = a
226226

227227
function abs(a::MCInterval{T}) where {T<:AbstractFloat}
228-
isempty(a) && return emptyinterval(T)
228+
isempty(a) && return emptyMCinterval(T)
229229
MCInterval{T}(mig(a), mag(a))
230230
end
231231

232232
function min(a::MCInterval{T}, b::MCInterval{T}) where {T<:AbstractFloat}
233-
(isempty(a) || isempty(b)) && return emptyinterval(T)
233+
(isempty(a) || isempty(b)) && return emptyMCinterval(T)
234234
MCInterval{T}( min(a.lo, b.lo), min(a.hi, b.hi))
235235
end
236236

237237
function max(a::MCInterval{T}, b::MCInterval{T}) where {T<:AbstractFloat}
238-
(isempty(a) || isempty(b)) && return emptyinterval(T)
238+
(isempty(a) || isempty(b)) && return emptyMCinterval(T)
239239
MCInterval{T}( max(a.lo, b.lo), max(a.hi, b.hi))
240240
end
241241

@@ -244,22 +244,22 @@ eps(a::MCInterval) = max(eps(a.lo), eps(a.hi))
244244

245245
## floor, ceil, trunc, sign, roundTiesToEven, roundTiesToAway
246246
function floor(a::MCInterval{T}) where {T<:AbstractFloat}
247-
isempty(a) && return emptyinterval(a)
247+
isempty(a) && return emptyMCinterval(a)
248248
MCInterval{T}(floor(a.lo), floor(a.hi))
249249
end
250250

251251
function ceil(a::MCInterval{T}) where {T<:AbstractFloat}
252-
isempty(a) && return emptyinterval(T)
252+
isempty(a) && return emptyMCinterval(T)
253253
MCInterval{T}(ceil(a.lo), ceil(a.hi))
254254
end
255255

256256
function trunc(a::MCInterval{T}) where {T<:AbstractFloat}
257-
isempty(a) && return emptyinterval(T)
257+
isempty(a) && return emptyMCinterval(T)
258258
MCInterval{T}(trunc(a.lo), trunc(a.hi))
259259
end
260260

261261
function sign(a::MCInterval{T}) where {T<:AbstractFloat}
262-
isempty(a) && return emptyinterval(T)
262+
isempty(a) && return emptyMCinterval(T)
263263
return MCInterval{T}(sign(a.lo), sign(a.hi))
264264
end
265265

@@ -304,7 +304,7 @@ function radius(a::MCInterval{T}) where {T<:AbstractFloat}
304304
end
305305

306306
function step(x::MCInterval{T}) where {T}
307-
isempty(x) && return emptyinterval(T)
307+
isempty(x) && return emptyMCinterval(T)
308308
xmin::T = ((x.lo)<zero(T)) ? zero(T) : one(T)
309309
xmax::T = ((x.hi)>=zero(T)) ? one(T) : zero(T)
310310
return MCInterval{T}(xmin,xmax)

src/IntervalArithmetic/conversion.jl

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
# multiplication conversion from float to Interval
1919
function *(b::T, a::MCInterval{T}) where {T<:AbstractFloat}
20-
(isempty(a)) && return emptyinterval(T)
20+
(isempty(a)) && return emptyMCinterval(T)
2121
(iszero(a) || iszero(b)) && return MCInterval{T}(zero(T),zero(T))
2222
if b >= zero(T)
2323
a.lo >= zero(T) && return MCInterval{T}(a.lo*b, a.hi*b)
@@ -42,8 +42,8 @@ end
4242
# division conversion from float to Interval
4343
function /(a::T, b::MCInterval{T}) where {T<:AbstractFloat}
4444

45-
(isempty(b)) && return emptyinterval(T)
46-
iszero(b) && return emptyinterval(T)
45+
(isempty(b)) && return emptyMCinterval(T)
46+
iszero(b) && return emptyMCinterval(T)
4747

4848
if b.lo > zero(T) # b strictly positive
4949
a >= zero(T) && return MCInterval{T}(a/b.hi, a/b.lo)
@@ -58,13 +58,13 @@ function /(a::T, b::MCInterval{T}) where {T<:AbstractFloat}
5858
if iszero(b.lo)
5959
a >= zero(T) && return MCInterval{T}(a/b.hi, infty(T))
6060
a <= zero(T) && return MCInterval{T}(ninfty(T), a/b.hi)
61-
return entireinterval(T)
61+
return entireMCinterval(T)
6262
elseif iszero(b.hi)
6363
a >= zero(T) && return MCInterval{T}(ninfty(T), a/b.lo)
6464
a <= zero(T) && return MCInterval{T}(a/b.lo, infty(T))
65-
return entireinterval(T)
65+
return entireMCinterval(T)
6666
else
67-
return entireinterval(T)
67+
return entireMCinterval(T)
6868
end
6969
end
7070
end
@@ -76,7 +76,7 @@ end
7676

7777
# minimization conversion from float to Interval
7878
function min(a::MCInterval{T}, b::T) where {T<:AbstractFloat}
79-
(isempty(a)) && return emptyinterval(T)
79+
(isempty(a)) && return emptyMCinterval(T)
8080
MCInterval{T}( min(a.lo, b), min(a.hi, b))
8181
end
8282
function min(b::T, a::MCInterval{T}) where {T<:AbstractFloat}
@@ -90,14 +90,19 @@ min(b::S, a::MCInterval{T}) where {S,T<:AbstractFloat} = min(convert(T,b),a)
9090

9191
# maximization conversion from float to Interval
9292
function max(a::MCInterval{T}, b::T) where {T<:AbstractFloat}
93-
(isempty(a)) && return emptyinterval(T)
93+
(isempty(a)) && return emptyMCinterval(T)
9494
MCInterval{T}( max(a.lo, b), max(a.hi, b))
9595
end
9696
function max(b::T, a::MCInterval{T}) where {T<:AbstractFloat}
97-
(isempty(a)) && return emptyinterval(T)
97+
(isempty(a)) && return emptyMCinterval(T)
9898
MCInterval{T}( max(a.lo, b), max(a.hi, b))
9999
end
100100
max(a::MCInterval{T}, b::S) where {S<:AbstractFloat,T<:AbstractFloat} = max(a,convert(T,b))
101101
max(b::S, a::MCInterval{T}) where {S<:AbstractFloat,T<:AbstractFloat} = max(convert(T,b),a)
102102
max(a::MCInterval{T}, b::S) where {S,T<:AbstractFloat} = max(a,convert(T,b))
103103
max(b::S, a::MCInterval{T}) where {S,T<:AbstractFloat} = max(convert(T,b),a)
104+
105+
# nonoverloaded conversion
106+
flttoMCI(x::Float64) = MCInterval{Float64}(x,x)
107+
flttoMCI(x::Float32) = MCInterval{Float32}(x,x)
108+
flttoMCI(x::Float16) = MCInterval{Float16}(x,x)

src/IntervalArithmetic/functions.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ function ^(a::MCInterval{T}, n::Integer) where {T<:AbstractFloat}
44
n == 0 && return one(a)
55
n == 1 && return a
66
n == 2 && return sqr(a)
7-
n < 0 && a == zero(a) && return emptyinterval(T)
7+
n < 0 && a == zero(a) && return emptyMCinterval(T)
88

99
if isodd(n) # odd power
1010
isentire(a) && return a
@@ -21,7 +21,7 @@ function ^(a::MCInterval{T}, n::Integer) where {T<:AbstractFloat}
2121
a.hi == 0 && return MCInterval{T}(ninfty(T), a.lo^n)
2222
return MCInterval{T}(a.hi^n, a.lo^n)
2323
else
24-
return entireinterval(T)
24+
return entireMCinterval(T)
2525
end
2626
end
2727

@@ -104,7 +104,7 @@ for f in (:log, :log2, :log10, :log1p)
104104
domain = MCInterval{T}(zero(T), Inf)
105105
a = a domain
106106

107-
(isempty(a) || a.hi zero(T)) && return emptyinterval(a)
107+
(isempty(a) || a.hi zero(T)) && return emptyMCinterval(a)
108108

109109
MCInterval{T}(($f)(a.lo), ($f)(a.hi))
110110

src/IntervalArithmetic/hyperbolic.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ function atanh(a::MCInterval{T}) where T<:AbstractFloat
3939
res_lo = atanh(a.lo)
4040
res_hi = atanh(a.hi)
4141

42-
(res_lo == res_hi == Inf || res_lo == res_hi == -Inf) && return emptyinterval(T)
42+
(res_lo == res_hi == Inf || res_lo == res_hi == -Inf) && return emptyMCinterval(T)
4343

4444
return MCInterval{T}(res_lo, res_hi)
4545
end

src/IntervalArithmetic/set_operations.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ function isdisjoint(a::MCInterval{T}, b::MCInterval{T}) where T<:AbstractFloat
1414
end
1515

1616
function intersect(a::MCInterval{T}, b::MCInterval{T}) where T<:AbstractFloat
17-
isdisjoint(a,b) && return emptyinterval(T)
17+
isdisjoint(a,b) && return emptyMCinterval(T)
1818

1919
MCInterval{T}(max(a.lo, b.lo), min(a.hi, b.hi))
2020
end

src/IntervalArithmetic/special.jl

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
emptyinterval(::Type{T}) where T<:AbstractFloat = MCInterval{T}(Inf, -Inf)
2-
emptyinterval(x::MCInterval{T}) where T<:AbstractFloat = emptyinterval(T)
3-
const= emptyinterval(Float64)
1+
emptyMCinterval(::Type{T}) where T<:AbstractFloat = MCInterval{T}(Inf, -Inf)
2+
emptyMCinterval(x::MCInterval{T}) where T<:AbstractFloat = emptyMCinterval(T)
3+
#const ∅ = emptyMCinterval(Float64)
44
isempty(x::MCInterval) = x.lo == Inf && x.hi == -Inf
55

66
const= Inf
7-
entireinterval(::Type{T}) where T<:AbstractFloat = MCInterval{T}(-Inf, Inf)
8-
entireinterval(x::MCInterval{T}) where T<:AbstractFloat = entireinterval(T)
7+
entireMCinterval(::Type{T}) where T<:AbstractFloat = MCInterval{T}(-Inf, Inf)
8+
entireMCinterval(x::MCInterval{T}) where T<:AbstractFloat = entireMCinterval(T)
99
isentire(x::MCInterval) = x.lo == -Inf && x.hi == Inf
1010
isunbounded(x::MCInterval) = x.lo == -Inf || x.hi == Inf
1111

@@ -16,6 +16,6 @@ Base.iszero(x::MCInterval) = iszero(x.lo) && iszero(x.hi)
1616
const float_interval_pi64 = MCInterval(Float64(pi)) # does not change
1717
const float_interval_pi32 = MCInterval(Float32(pi))
1818
const float_interval_pi16 = MCInterval(Float16(pi))
19-
pi_interval(::Type{Float64}) = float_interval_pi64
20-
pi_interval(::Type{Float32}) = float_interval_pi32
21-
pi_interval(::Type{Float16}) = float_interval_pi16
19+
pi_MCinterval(::Type{Float64}) = float_interval_pi64
20+
pi_MCinterval(::Type{Float32}) = float_interval_pi32
21+
pi_MCinterval(::Type{Float16}) = float_interval_pi16

0 commit comments

Comments
 (0)