Skip to content

Commit 1dd0378

Browse files
authored
Outer Constructors (#289)
* Use outer constructors * Bump patch * Fix typo
1 parent a827302 commit 1dd0378

File tree

7 files changed

+30
-26
lines changed

7 files changed

+30
-26
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "KernelFunctions"
22
uuid = "ec8451be-7e33-11e9-00cf-bbf324bd1392"
3-
version = "0.10.0"
3+
version = "0.10.1"
44

55
[deps]
66
ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"

src/basekernels/cosine.jl

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,10 @@ By default, ``d`` is the Euclidean metric ``d(x, x') = \\|x - x'\\|_2``.
1313
"""
1414
struct CosineKernel{M} <: SimpleKernel
1515
metric::M
16-
17-
function CosineKernel(; metric=Euclidean())
18-
return new{typeof(metric)}(metric)
19-
end
2016
end
2117

18+
CosineKernel(; metric=Euclidean()) = CosineKernel(metric)
19+
2220
kappa(::CosineKernel, d::Real) = cospi(d)
2321

2422
metric(k::CosineKernel) = k.metric

src/basekernels/exponential.jl

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,10 @@ See also: [`GammaExponentialKernel`](@ref)
1616
"""
1717
struct SqExponentialKernel{M} <: SimpleKernel
1818
metric::M
19-
20-
function SqExponentialKernel(; metric=Euclidean())
21-
return new{typeof(metric)}(metric)
22-
end
2319
end
2420

21+
SqExponentialKernel(; metric=Euclidean()) = SqExponentialKernel(metric)
22+
2523
kappa(::SqExponentialKernel, d::Real) = exp(-d^2 / 2)
2624
kappa(::SqExponentialKernel{<:Euclidean}, d²::Real) = exp(-/ 2)
2725

@@ -74,12 +72,10 @@ See also: [`GammaExponentialKernel`](@ref)
7472
"""
7573
struct ExponentialKernel{M} <: SimpleKernel
7674
metric::M
77-
78-
function ExponentialKernel(; metric=Euclidean())
79-
return new{typeof(metric)}(metric)
80-
end
8175
end
8276

77+
ExponentialKernel(; metric=Euclidean()) = ExponentialKernel(metric)
78+
8379
kappa(::ExponentialKernel, d::Real) = exp(-d)
8480

8581
metric(k::ExponentialKernel) = k.metric
@@ -129,12 +125,16 @@ struct GammaExponentialKernel{Tγ<:Real,M} <: SimpleKernel
129125
γ::Vector{Tγ}
130126
metric::M
131127

132-
function GammaExponentialKernel(; gamma::Real=1.0, γ::Real=gamma, metric=Euclidean())
128+
function GammaExponentialKernel::Real, metric)
133129
@check_args(GammaExponentialKernel, γ, zero(γ) < γ 2, "γ ∈ (0, 2]")
134130
return new{typeof(γ),typeof(metric)}([γ], metric)
135131
end
136132
end
137133

134+
function GammaExponentialKernel(; gamma::Real=1.0, γ::Real=gamma, metric=Euclidean())
135+
return GammaExponentialKernel(γ, metric)
136+
end
137+
138138
@functor GammaExponentialKernel
139139

140140
kappa::GammaExponentialKernel, d::Real) = exp(-d^first.γ))

src/basekernels/fbm.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,14 @@ k(x, x'; h) = \\frac{\\|x\\|_2^{2h} + \\|x'\\|_2^{2h} - \\|x - x'\\|^{2h}}{2}.
1414
"""
1515
struct FBMKernel{T<:Real} <: Kernel
1616
h::Vector{T}
17-
function FBMKernel(; h::Real=0.5)
17+
function FBMKernel(h::Real)
1818
@check_args(FBMKernel, h, zero(h) h one(h), "h ∈ [0, 1]")
1919
return new{typeof(h)}([h])
2020
end
2121
end
2222

23+
FBMKernel(; h::Real=0.5) = FBMKernel(h)
24+
2325
@functor FBMKernel
2426

2527
function::FBMKernel)(x::AbstractVector{<:Real}, y::AbstractVector{<:Real})

src/basekernels/matern.jl

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,14 @@ struct MaternKernel{Tν<:Real,M} <: SimpleKernel
2323
ν::Vector{Tν}
2424
metric::M
2525

26-
function MaternKernel(; nu::Real=1.5, ν::Real=nu, metric=Euclidean())
26+
function MaternKernel::Real, metric)
2727
@check_args(MaternKernel, ν, ν > zero(ν), "ν > 0")
2828
return new{typeof(ν),typeof(metric)}([ν], metric)
2929
end
3030
end
3131

32+
MaternKernel(; nu::Real=1.5, ν::Real=nu, metric=Euclidean()) = MaternKernel(ν, metric)
33+
3234
@functor MaternKernel
3335

3436
@inline function kappa::MaternKernel, d::Real)
@@ -67,12 +69,10 @@ See also: [`MaternKernel`](@ref)
6769
"""
6870
struct Matern32Kernel{M} <: SimpleKernel
6971
metric::M
70-
71-
function Matern32Kernel(; metric=Euclidean())
72-
return new{typeof(metric)}(metric)
73-
end
7472
end
7573

74+
Matern32Kernel(; metric=Euclidean()) = Matern32Kernel(metric)
75+
7676
kappa(::Matern32Kernel, d::Real) = (1 + sqrt(3) * d) * exp(-sqrt(3) * d)
7777

7878
metric(k::Matern32Kernel) = k.metric
@@ -100,12 +100,10 @@ See also: [`MaternKernel`](@ref)
100100
"""
101101
struct Matern52Kernel{M} <: SimpleKernel
102102
metric::M
103-
104-
function Matern52Kernel(; metric=Euclidean())
105-
return new{typeof(metric)}(metric)
106-
end
107103
end
108104

105+
Matern52Kernel(; metric=Euclidean()) = Matern52Kernel(metric)
106+
109107
kappa(::Matern52Kernel, d::Real) = (1 + sqrt(5) * d + 5 * d^2 / 3) * exp(-sqrt(5) * d)
110108

111109
metric(k::Matern52Kernel) = k.metric

src/basekernels/polynomial.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,14 @@ See also: [`PolynomialKernel`](@ref)
1616
struct LinearKernel{Tc<:Real} <: SimpleKernel
1717
c::Vector{Tc}
1818

19-
function LinearKernel(; c::Real=0.0)
19+
function LinearKernel(c::Real)
2020
@check_args(LinearKernel, c, c >= zero(c), "c ≥ 0")
2121
return new{typeof(c)}([c])
2222
end
2323
end
2424

25+
LinearKernel(; c::Real=0.0) = LinearKernel(c)
26+
2527
@functor LinearKernel
2628

2729
kappa::LinearKernel, xᵀy::Real) = xᵀy + first.c)

src/basekernels/rational.jl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,16 @@ struct RationalKernel{Tα<:Real,M} <: SimpleKernel
1919
α::Vector{Tα}
2020
metric::M
2121

22-
function RationalKernel(; alpha::Real=2.0, α::Real=alpha, metric=Euclidean())
22+
function RationalKernel::Real, metric)
2323
@check_args(RationalKernel, α, α > zero(α), "α > 0")
2424
return new{typeof(α),typeof(metric)}([α], metric)
2525
end
2626
end
2727

28+
function RationalKernel(; alpha::Real=2.0, α::Real=alpha, metric=Euclidean())
29+
return RationalKernel(α, metric)
30+
end
31+
2832
@functor RationalKernel
2933

3034
function kappa::RationalKernel, d::Real)

0 commit comments

Comments
 (0)