Skip to content

Commit 78fb34c

Browse files
authored
Rename Map12 -> IfElse (#16)
1 parent dcd31e4 commit 78fb34c

File tree

3 files changed

+31
-29
lines changed

3 files changed

+31
-29
lines changed

src/ImageBase.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ using ImageCore.OffsetArrays
2626

2727
include("diff.jl")
2828
include("restrict.jl")
29+
include("utils.jl")
2930
include("statistics.jl")
3031
include("compat.jl")
3132
include("deprecated.jl")

src/statistics.jl

Lines changed: 11 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,11 @@
1-
"""
2-
Map12(condition, f1, f2)
3-
4-
Creates a function mapping `x -> condition(x) ? f1(x) : f2(x)`.
5-
"""
6-
struct Map12{C,F1,F2}
7-
condition::C
8-
f1::F1
9-
f2::F2
10-
end
11-
(m::Map12)(x) = m.condition(x) ? m.f1(x) : m.f2(x)
12-
13-
minc(x, y) = min(x, y)
14-
minc(x::Color, y::Color) = mapc(min, x, y)
15-
maxc(x, y) = max(x, y)
16-
maxc(x::Color, y::Color) = mapc(max, x, y)
17-
181
"""
192
minfinite(A; kwargs...)
203
214
Calculate the minimum value in `A`, ignoring any values that are not finite (Inf or NaN).
225
236
The supported `kwargs` are those of `minimum(f, A; kwargs...)`.
247
"""
25-
minfinite(A; kwargs...) = mapreduce(Map12(isfinite, identity, typemax), minc, A; kwargs...)
8+
minfinite(A; kwargs...) = mapreduce(IfElse(isfinite, identity, typemax), minc, A; kwargs...)
269

2710
"""
2811
maxfinite(A; kwargs...)
@@ -31,7 +14,7 @@ Calculate the maximum value in `A`, ignoring any values that are not finite (Inf
3114
3215
The supported `kwargs` are those of `maximum(f, A; kwargs...)`.
3316
"""
34-
maxfinite(A; kwargs...) = mapreduce(Map12(isfinite, identity, typemin), maxc, A; kwargs...)
17+
maxfinite(A; kwargs...) = mapreduce(IfElse(isfinite, identity, typemin), maxc, A; kwargs...)
3518

3619
"""
3720
maxabsfinite(A; kwargs...)
@@ -40,7 +23,7 @@ Calculate the maximum absolute value in `A`, ignoring any values that are not fi
4023
4124
The supported `kwargs` are those of `maximum(f, A; kwargs...)`.
4225
"""
43-
maxabsfinite(A; kwargs...) = mapreduce(Map12(isfinite, abs, typemin), maxc, A; kwargs...)
26+
maxabsfinite(A; kwargs...) = mapreduce(IfElse(isfinite, abs, typemin), maxc, A; kwargs...)
4427

4528
"""
4629
meanfinite(A; kwargs...)
@@ -53,14 +36,14 @@ function meanfinite end
5336

5437
if Base.VERSION >= v"1.1"
5538
function meanfinite(A; kwargs...)
56-
s = sum(Map12(isfinite, identity, zero), A; kwargs...)
57-
n = sum(Map12(isfinite, x->true, x->false), A; kwargs...) # TODO: replace with `Returns`
39+
s = sum(IfElse(isfinite, identity, zero), A; kwargs...)
40+
n = sum(IfElse(isfinite, x->true, x->false), A; kwargs...) # TODO: replace with `Returns`
5841
return s./n
5942
end
6043
else
6144
function meanfinite(A; kwargs...)
62-
s = sum(Map12(isfinite, identity, zero).(A); kwargs...)
63-
n = sum(Map12(isfinite, x->true, x->false).(A); kwargs...)
45+
s = sum(IfElse(isfinite, identity, zero).(A); kwargs...)
46+
n = sum(IfElse(isfinite, x->true, x->false).(A); kwargs...)
6447
return s./n
6548
end
6649
end
@@ -77,16 +60,15 @@ function varfinite end
7760
if Base.VERSION >= v"1.1"
7861
function varfinite(A; kwargs...)
7962
m = meanfinite(A; kwargs...)
80-
n = sum(Map12(isfinite, x->true, x->false), A; kwargs...) # TODO: replace with `Returns`
81-
s = sum(Map12(isfinite, identity, zero), (A .- m).^2; kwargs...)
63+
n = sum(IfElse(isfinite, x->true, x->false), A; kwargs...) # TODO: replace with `Returns`
64+
s = sum(IfElse(isfinite, identity, zero), (A .- m).^2; kwargs...)
8265
return s ./ max.(0, (n .- 1))
8366
end
8467
else
8568
function varfinite(A; kwargs...)
8669
m = meanfinite(A; kwargs...)
87-
n = sum(Map12(isfinite, x->true, x->false).(A); kwargs...)
88-
s = sum(Map12(isfinite, identity, zero).((A .- m).^2); kwargs...)
70+
n = sum(IfElse(isfinite, x->true, x->false).(A); kwargs...)
71+
s = sum(IfElse(isfinite, identity, zero).((A .- m).^2); kwargs...)
8972
return s ./ max.(0, (n .- 1))
9073
end
9174
end
92-

src/utils.jl

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
"""
2+
IfElse(condition, f1, f2)
3+
4+
Create a function mapping `x -> condition(x) ? f1(x) : f2(x)`.
5+
6+
This is essentially the same as the anonymous function, but more
7+
interpretable in stacktraces and more amenable to precompilation.
8+
"""
9+
struct IfElse{C,F1,F2}
10+
condition::C
11+
f1::F1
12+
f2::F2
13+
end
14+
(m::IfElse)(x) = m.condition(x) ? m.f1(x) : m.f2(x)
15+
16+
minc(x, y) = min(x, y)
17+
minc(x::Color, y::Color) = mapc(min, x, y)
18+
maxc(x, y) = max(x, y)
19+
maxc(x::Color, y::Color) = mapc(max, x, y)

0 commit comments

Comments
 (0)