Skip to content

Commit bd356a9

Browse files
committed
Override Base.getproperty for Gabor kernel
1 parent 128623e commit bd356a9

File tree

2 files changed

+26
-6
lines changed

2 files changed

+26
-6
lines changed

src/kernels/gabor.jl

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import Base.getproperty
2+
13
"""
24
GaborKernel(; ell::Real=1.0, p::Real=1.0)
35
@@ -8,14 +10,12 @@ Gabor kernel with length scale ell and period p. Given by
810
911
"""
1012
struct GaborKernel{T<:Real, K<:Kernel} <: BaseKernel
11-
ell::T
12-
p::T
1313
κ::K
1414
function GaborKernel(;ell=nothing, p=nothing)
1515
k = _gabor(ell=ell, p=p)
16-
if ell==nothing ell=1.0 end
17-
if p==nothing p=1.0 end
18-
new{Union{typeof(ell),typeof(p)}, typeof(k)}(ell, p, k)
16+
if ell == nothing ell=1.0 end
17+
if p == nothing p=1.0 end
18+
new{Union{typeof(ell),typeof(p)}, typeof(k)}(k)
1919
end
2020
end
2121

@@ -33,6 +33,22 @@ function _gabor(; ell = nothing, p = nothing)
3333
end
3434
end
3535

36+
function Base.getproperty(k::GaborKernel, v::Symbol)
37+
if v ==
38+
return getfield(k, v)
39+
elseif v == :ell && typeof(k.κ.kernels[1]) <: SqExponentialKernel
40+
return 1.0
41+
elseif v == :ell && typeof(k.κ.kernels[1]) <: TransformedKernel
42+
return 1 ./ k.κ.kernels[1].transform.s[1]
43+
elseif v == :p && typeof(k.κ.kernels[2]) <: CosineKernel
44+
return 1.0
45+
elseif v == :p && typeof(k.κ.kernels[2]) <: TransformedKernel
46+
return 1 ./ k.κ.kernels[2].transform.s[1]
47+
else
48+
error("Invalid Property")
49+
end
50+
end
51+
3652
kappa::GaborKernel, x, y) where {T<:Real} = kappa.κ, x ,y)
3753

3854
function kernelmatrix(

test/test_kernels.jl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,11 @@ x = rand()*2; v1 = rand(3); v2 = rand(3); id = IdentityTransform()
6969
end
7070
end
7171
@testset "Gabor" begin
72-
k = GaborKernel(ell=abs(rand()), p=abs(rand()))
72+
ell = abs(rand())
73+
p = abs(rand())
74+
k = GaborKernel(ell=ell, p=p)
75+
@test k.ell == ell
76+
@test k.p == p
7377
@test kappa(k,v1,v2) exp(-sqeuclidean(v1,v2) ./(k.ell.^2))*cospi(euclidean(v1,v2)./ k.p) atol=1e-5
7478
@test kappa(k,v1,v2) kappa(transform(SqExponentialKernel(), 1/k.ell),v1,v2)*kappa(transform(CosineKernel(), 1/k.p), v1,v2) atol=1e-5
7579
end

0 commit comments

Comments
 (0)