Skip to content

Commit 182ce2b

Browse files
committed
Merge pull request #14 from PalladiumConsulting/sg/tuple
update to v0.4 tuple syntax using @compat macro
2 parents b2c9f7d + 14a95ce commit 182ce2b

File tree

6 files changed

+35
-26
lines changed

6 files changed

+35
-26
lines changed

REQUIRE

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ StatsBase
33
Distributions 0.4.6
44
Optim
55
Grid
6+
Compat

src/KernelDensity.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ using StatsBase
44
using Distributions
55
using Optim
66
using Grid
7+
using Compat
78

89
import Base: conv
910
import StatsBase: RealVector, RealMatrix

src/bivariate.jl

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,26 @@ type BivariateKDE{Rx<:Range,Ry<:Range}
55
density::Matrix{Float64}
66
end
77

8-
function kernel_dist{D<:UnivariateDistribution}(::Type{D},w::(Real,Real))
8+
function kernel_dist{D<:UnivariateDistribution}(::Type{D},w::(@compat Tuple{Real,Real}))
99
kernel_dist(D,w[1]), kernel_dist(D,w[2])
1010
end
11-
function kernel_dist{Dx<:UnivariateDistribution,Dy<:UnivariateDistribution}(::Type{(Dx,Dy)},w::(Real,Real))
11+
function kernel_dist{Dx<:UnivariateDistribution,Dy<:UnivariateDistribution}(::Type{(@compat Tuple{Dx, Dy})},w::(@compat Tuple{Real,Real}))
1212
kernel_dist(Dx,w[1]), kernel_dist(Dy,w[2])
1313
end
1414

15+
# this function provided for backwards compatibility, though it doesn't have the type restrictions
16+
# to ensure that the given tuple only contains univariate distributions
17+
function kernel_dist(d::(@compat Tuple{DataType, DataType}),w::(@compat Tuple{Real,Real}))
18+
kernel_dist(d[1],w[1]), kernel_dist(d[2],w[2])
19+
end
20+
1521
# TODO: there are probably better choices.
16-
function default_bandwidth(data::(RealVector,RealVector))
22+
function default_bandwidth(data::(@compat Tuple{RealVector,RealVector}))
1723
default_bandwidth(data[1]), default_bandwidth(data[2])
1824
end
1925

2026
# tabulate data for kde
21-
function tabulate(data::(RealVector, RealVector), midpoints::(Range, Range))
27+
function tabulate(data::(@compat Tuple{RealVector, RealVector}), midpoints::(@compat Tuple{Range, Range}))
2228
xdata, ydata = data
2329
ndata = length(xdata)
2430
length(ydata) == ndata || error("data vectors must be of same length")
@@ -48,7 +54,7 @@ function tabulate(data::(RealVector, RealVector), midpoints::(Range, Range))
4854
end
4955

5056
# convolution with product distribution of two univariates distributions
51-
function conv(k::BivariateKDE, dist::(UnivariateDistribution,UnivariateDistribution) )
57+
function conv(k::BivariateKDE, dist::(@compat Tuple{UnivariateDistribution,UnivariateDistribution}) )
5258
# Transform to Fourier basis
5359
Kx, Ky = size(k.density)
5460
ft = rfft(k.density)
@@ -73,37 +79,37 @@ function conv(k::BivariateKDE, dist::(UnivariateDistribution,UnivariateDistribut
7379
BivariateKDE(k.x, k.y, dens)
7480
end
7581

76-
typealias BivariateDistribution Union(MultivariateDistribution,(UnivariateDistribution,UnivariateDistribution))
82+
typealias BivariateDistribution Union(MultivariateDistribution,(@compat Tuple{UnivariateDistribution,UnivariateDistribution}))
7783

78-
function kde(data::(RealVector, RealVector), midpoints::(Range, Range), dist::BivariateDistribution)
84+
function kde(data::(@compat Tuple{RealVector, RealVector}), midpoints::(@compat Tuple{Range, Range}), dist::BivariateDistribution)
7985
k = tabulate(data,midpoints)
8086
conv(k,dist)
8187
end
8288

83-
function kde(data::(RealVector, RealVector), dist::BivariateDistribution;
84-
boundary::((Real,Real),(Real,Real)) = (kde_boundary(data[1],std(dist[1])),
89+
function kde(data::(@compat Tuple{RealVector, RealVector}), dist::BivariateDistribution;
90+
boundary::(@compat Tuple{(@compat Tuple{Real,Real}),(@compat Tuple{Real,Real})}) = (kde_boundary(data[1],std(dist[1])),
8591
kde_boundary(data[2],std(dist[2]))),
86-
npoints::(Int,Int)=(256,256))
92+
npoints::(@compat Tuple{Int,Int})=(256,256))
8793

8894
xmid = kde_range(boundary[1],npoints[1])
8995
ymid = kde_range(boundary[2],npoints[2])
9096

9197
kde(data,(xmid,ymid),dist)
9298
end
9399

94-
function kde(data::(RealVector, RealVector), midpoints::(Range, Range);
100+
function kde(data::(@compat Tuple{RealVector, RealVector}), midpoints::(@compat Tuple{Range, Range});
95101
bandwidth=default_bandwidth(data), kernel=Normal)
96102

97103
dist = kernel_dist(kernel,bandwidth)
98104
kde(data,midpoints,dist)
99105
end
100106

101-
function kde(data::(RealVector, RealVector);
107+
function kde(data::(@compat Tuple{RealVector, RealVector});
102108
bandwidth=default_bandwidth(data),
103109
kernel=Normal,
104-
boundary::((Real,Real),(Real,Real)) = (kde_boundary(data[1],bandwidth[1]),
110+
boundary::(@compat Tuple{(@compat Tuple{Real,Real}),(@compat Tuple{Real,Real})}) = (kde_boundary(data[1],bandwidth[1]),
105111
kde_boundary(data[2],bandwidth[2])),
106-
npoints::(Int,Int)=(256,256))
112+
npoints::(@compat Tuple{Int,Int})=(256,256))
107113

108114
dist = kernel_dist(kernel,bandwidth)
109115
xmid = kde_range(boundary[1],npoints[1])

src/univariate.jl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ function kde_boundary(data::RealVector, bandwidth::Real)
5858
end
5959

6060
# convert boundary and npoints to Range object
61-
function kde_range(boundary::(Real,Real), npoints::Int)
61+
function kde_range(boundary::(@compat Tuple{Real,Real}), npoints::Int)
6262
lo, hi = boundary
6363
lo < hi || error("boundary (a,b) must have a < b")
6464

@@ -125,7 +125,7 @@ function kde(data::RealVector, midpoints::Range, dist::UnivariateDistribution)
125125
end
126126

127127
function kde(data::RealVector, dist::UnivariateDistribution;
128-
boundary::(Real,Real)=kde_boundary(data,std(dist)), npoints::Int=2048)
128+
boundary::(@compat Tuple{Real,Real})=kde_boundary(data,std(dist)), npoints::Int=2048)
129129

130130
midpoints = kde_range(boundary,npoints)
131131
kde(data,midpoints,dist)
@@ -139,7 +139,7 @@ function kde(data::RealVector, midpoints::Range;
139139
end
140140

141141
function kde(data::RealVector; bandwidth=default_bandwidth(data), kernel=Normal,
142-
npoints::Int=2048, boundary::(Real,Real)=kde_boundary(data,bandwidth))
142+
npoints::Int=2048, boundary::(@compat Tuple{Real,Real})=kde_boundary(data,bandwidth))
143143
bandwidth > 0.0 || error("Bandwidth must be positive")
144144
dist = kernel_dist(kernel,bandwidth)
145145
kde(data,dist;boundary=boundary,npoints=npoints)
@@ -152,7 +152,7 @@ end
152152

153153
function kde_lscv(data::RealVector, midpoints::Range;
154154
kernel=Normal,
155-
bandwidth_range::(Real,Real)=(h=default_bandwidth(data); (0.25*h,1.5*h)))
155+
bandwidth_range::(@compat Tuple{Real,Real})=(h=default_bandwidth(data); (0.25*h,1.5*h)))
156156

157157
ndata = length(data)
158158
k = tabulate(data, midpoints)
@@ -191,10 +191,10 @@ function kde_lscv(data::RealVector, midpoints::Range;
191191
end
192192

193193
function kde_lscv(data::RealVector;
194-
boundary::(Real,Real)=kde_boundary(data,default_bandwidth(data)),
194+
boundary::(@compat Tuple{Real,Real})=kde_boundary(data,default_bandwidth(data)),
195195
npoints::Int=2048,
196196
kernel=Normal,
197-
bandwidth_range::(Real,Real)=(h=default_bandwidth(data); (0.25*h,1.5*h)))
197+
bandwidth_range::(@compat Tuple{Real,Real})=(h=default_bandwidth(data); (0.25*h,1.5*h)))
198198

199199
midpoints = kde_range(boundary,npoints)
200200
kde_lscv(data,midpoints; kernel=kernel, bandwidth_range=bandwidth_range)

test/bivariate.jl

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
using Base.Test
22
using Distributions
33
using KernelDensity
4+
using Compat
45

56
import KernelDensity: kernel_dist, default_bandwidth, kde_boundary, kde_range, tabulate
67

7-
for D in [(Normal,Normal),(Uniform,Uniform),(Logistic,Logistic)]
8-
d = kernel_dist(D,(0.5,0.5))
9-
@test isa(d,D)
8+
for D in [(@compat Tuple{Normal,Normal}),(@compat Tuple{Uniform,Uniform}),(@compat Tuple{Logistic,Logistic}),
9+
(Normal, Normal), (Uniform, Uniform), (Logistic, Logistic)]
10+
d = KernelDensity.kernel_dist(D,(0.5,0.5))
1011
dx,dy = d
1112
@test mean(dx) == 0.0
1213
@test mean(dy) == 0.0
@@ -17,7 +18,7 @@ end
1718
r = kde_range((-2.0,2.0), 128)
1819
@test step(r) > 0
1920

20-
for X in ([0.0], [0.0,0.0], [0.0,0.5], [-0.5:0.1:0.5])
21+
for X in ([0.0], [0.0,0.0], [0.0,0.5], [-0.5:0.1:0.5;])
2122
w = default_bandwidth(X)
2223
@test w > 0
2324
lo, hi = kde_boundary(X,w)
@@ -32,7 +33,7 @@ for X in ([0.0], [0.0,0.0], [0.0,0.5], [-0.5:0.1:0.5])
3233
@test all(k1.density .>= 0.0)
3334
@test_approx_eq sum(k1.density)*step(k1.x)*step(k1.y) 1.0
3435

35-
k2 = conv(k1,kernel_dist((D,D),(0.1,0.1)))
36+
k2 = conv(k1,kernel_dist((@compat Tuple{D,D}),(0.1,0.1)))
3637
@test isa(k2,BivariateKDE)
3738
@test size(k2.density) == (length(k2.x), length(k2.y))
3839
@test all(k2.density .>= 0.0)

test/univariate.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ end
1414
r = kde_range((-2.0,2.0), 128)
1515
@test step(r) > 0
1616

17-
for X in ([0.0], [0.0,0.0], [0.0,0.5], [-0.5:0.1:0.5])
17+
for X in ([0.0], [0.0,0.0], [0.0,0.5], [-0.5:0.1:0.5;])
1818
w = default_bandwidth(X)
1919
@test w > 0
2020
lo, hi = kde_boundary(X,w)

0 commit comments

Comments
 (0)