Skip to content

Commit d35a8b2

Browse files
authored
Merge pull request #61 from Element-126/interpolations-v0.9
Support Interpolations v0.9
2 parents 6bf67a1 + fbfb436 commit d35a8b2

File tree

3 files changed

+24
-8
lines changed

3 files changed

+24
-8
lines changed

REQUIRE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ julia 0.7
22
StatsBase
33
Distributions
44
Optim 0.16
5-
Interpolations
5+
Interpolations 0.9 0.10-
66
FFTW

src/interp.jl

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,23 @@ end
1010
function InterpKDE(kde::UnivariateKDE, opts...)
1111
itp_u = interpolate(kde.density, opts...)
1212
itp = scale(itp_u, kde.x)
13-
InterpKDE{typeof(kde),typeof(itp)}(kde, itp)
13+
etp = extrapolate(itp, zero(eltype(kde.density)))
14+
InterpKDE{typeof(kde),typeof(etp)}(kde, etp)
1415
end
15-
InterpKDE(kde::UnivariateKDE) = InterpKDE(kde, BSpline(Quadratic(Line())), OnGrid())
16+
InterpKDE(kde::UnivariateKDE) = InterpKDE(kde, BSpline(Quadratic(Line(OnGrid()))))
1617

1718

1819
function InterpKDE(kde::BivariateKDE, opts...)
1920
itp_u = interpolate(kde.density,opts...)
2021
itp = scale(itp_u, kde.x, kde.y)
21-
InterpKDE{typeof(kde),typeof(itp)}(kde, itp)
22+
etp = extrapolate(itp, zero(eltype(kde.density)))
23+
InterpKDE{typeof(kde),typeof(etp)}(kde, etp)
2224
end
23-
InterpKDE(kde::BivariateKDE) = InterpKDE(kde::BivariateKDE, BSpline(Quadratic(Line())), OnGrid())
25+
InterpKDE(kde::BivariateKDE) = InterpKDE(kde::BivariateKDE, BSpline(Quadratic(Line(OnGrid()))))
2426

25-
pdf(ik::InterpKDE,x::Real...) = ik.itp[x...]
26-
pdf(ik::InterpKDE,xs::AbstractVector) = [ik.itp[x] for x in xs]
27-
pdf(ik::InterpKDE,xs::AbstractVector,ys::AbstractVector) = [ik.itp[x,y] for x in xs, y in ys]
27+
pdf(ik::InterpKDE,x::Real...) = ik.itp(x...)
28+
pdf(ik::InterpKDE,xs::AbstractVector) = [ik.itp(x) for x in xs]
29+
pdf(ik::InterpKDE,xs::AbstractVector,ys::AbstractVector) = [ik.itp(x,y) for x in xs, y in ys]
2830

2931
pdf(k::UnivariateKDE,x) = pdf(InterpKDE(k),x)
3032
pdf(k::BivariateKDE,x,y) = pdf(InterpKDE(k),x,y)

test/interp.jl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,17 @@ k = kde(X)
99

1010
k = kde((X,Y))
1111
@test pdf(k, k.x, k.y) k.density
12+
13+
# Try to evaluate the KDE outside the interpolation domain
14+
# The KDE is allowed to be zero, but it should not be greater than the exact solution
15+
k = kde([0.0], bandwidth=1.0)
16+
@test pdf(k, k.x) k.density
17+
@test pdf(k, -10.0) pdf(Normal(), -10.0)
18+
@test pdf(k, +10.0) pdf(Normal(), +10.0)
19+
20+
k = kde(([0.0],[0.0]), bandwidth=(1.0, 1.0))
21+
@test pdf(k, k.x, k.y) k.density
22+
@test pdf(k, -10.0, 0.0) pdf(MvNormal(2, 1.0), [-10.0, 0.0])
23+
@test pdf(k, +10.0, 0.0) pdf(MvNormal(2, 1.0), [+10.0, 0.0])
24+
@test pdf(k, 0.0, -10.0) pdf(MvNormal(2, 1.0), [0.0, -10.0])
25+
@test pdf(k, 0.0, +10.0) pdf(MvNormal(2, 1.0), [0.0, +10.0])

0 commit comments

Comments
 (0)