Skip to content

Use SafeTestsets? #75

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,9 @@ Flux = "587475ba-b771-5e3f-ad9e-33799f191a9c"
Kronecker = "2c470bb0-bcc8-11e8-3dad-c9649493f05e"
PDMats = "90014a1f-27ba-587c-ab20-58faa44d9150"
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f"
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f"

[targets]
test = ["Random", "Test", "FiniteDifferences", "Zygote", "PDMats", "Kronecker", "Flux"]
test = ["SafeTestsets", "Random", "Test", "FiniteDifferences", "Zygote", "PDMats", "Kronecker", "Flux"]
20 changes: 12 additions & 8 deletions test/approximations/nystrom.jl
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
@testset "nystrom" begin
dims = [10,5]
X = rand(dims...)
k = SqExponentialKernel()
for obsdim in [1, 2]
@test kernelmatrix(k, X; obsdim=obsdim) ≈ kernelmatrix(nystrom(k, X, 1.0; obsdim=obsdim))
@test kernelmatrix(k, X; obsdim=obsdim) ≈ kernelmatrix(nystrom(k, X, collect(1:dims[obsdim]); obsdim=obsdim))
end
using KernelFunctions

using Test

dims = [10,5]
X = rand(dims...)
k = SqExponentialKernel()
for obsdim in [1, 2]
@test kernelmatrix(k, X; obsdim = obsdim) ≈
kernelmatrix(nystrom(k, X, 1.0; obsdim = obsdim))
@test kernelmatrix(k, X; obsdim = obsdim) ≈
kernelmatrix(nystrom(k, X, collect(1:dims[obsdim]); obsdim = obsdim))
end
24 changes: 14 additions & 10 deletions test/distances/delta.jl
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
@testset "delta" begin
A = rand(10,5)
B = rand(20,5)
d = KernelFunctions.Delta()
@test pairwise(d,A,dims=1) == Matrix(I,size(A,1),size(A,1))
@test pairwise(d,A,B,dims=1) == zeros(size(A,1),size(B,1))
@test d(1,2) == 0
@test d(1,1) == 1
@test_throws DimensionMismatch d(rand(3),rand(4))
end
using KernelFunctions
using Distances

using LinearAlgebra
using Test

A = rand(10, 5)
B = rand(20, 5)
d = KernelFunctions.Delta()
@test pairwise(d, A, dims = 1) == Matrix(I, size(A, 1), size(A, 1))
@test pairwise(d, A, B, dims = 1) == zeros(size(A, 1), size(B, 1))
@test d(1, 2) == 0
@test d(1, 1) == 1
@test_throws DimensionMismatch d(rand(3), rand(4))
20 changes: 12 additions & 8 deletions test/distances/dotproduct.jl
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
@testset "dotproduct" begin
A = rand(10,5)
B = rand(20,5)
d = KernelFunctions.DotProduct()
@test diag(pairwise(d,A,dims=2)) == [dot(A[:,i],A[:,i]) for i in 1:size(A,2)]
@test_throws DimensionMismatch d(rand(3),rand(4))
@test d(3.0,2.0) == 6.0
end
using KernelFunctions
using Distances

using LinearAlgebra
using Test

A = rand(10, 5)
B = rand(20, 5)
d = KernelFunctions.DotProduct()
@test diag(pairwise(d, A, dims = 2)) == [dot(A[:,i], A[:,i]) for i in 1:size(A, 2)]
@test_throws DimensionMismatch d(rand(3), rand(4))
@test d(3.0, 2.0) == 6.0
14 changes: 8 additions & 6 deletions test/generic.jl
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
@testset "generic" begin
k = SqExponentialKernel()
@test length(k) == 1
@test iterate(k) == (k,nothing)
@test iterate(k,1) == nothing
end
using KernelFunctions

using Test

k = SqExponentialKernel()
@test length(k) == 1
@test iterate(k) == (k, nothing)
@test iterate(k, 1) == nothing
51 changes: 27 additions & 24 deletions test/kernels/constant.jl
Original file line number Diff line number Diff line change
@@ -1,25 +1,28 @@
@testset "constant" begin
@testset "ZeroKernel" begin
k = ZeroKernel()
@test eltype(k) == Any
@test kappa(k,2.0) == 0.0
@test KernelFunctions.metric(ZeroKernel()) == KernelFunctions.Delta()
end
@testset "WhiteKernel" begin
k = WhiteKernel()
@test eltype(k) == Any
@test kappa(k,1.0) == 1.0
@test kappa(k,0.0) == 0.0
@test EyeKernel == WhiteKernel
@test metric(WhiteKernel()) == KernelFunctions.Delta()
end
@testset "ConstantKernel" begin
c = 2.0
k = ConstantKernel(c=c)
@test eltype(k) == Any
@test kappa(k,1.0) == c
@test kappa(k,0.5) == c
@test metric(ConstantKernel()) == KernelFunctions.Delta()
@test metric(ConstantKernel(c=2.0)) == KernelFunctions.Delta()
end
using KernelFunctions
using KernelFunctions: metric

using Test

@testset "ZeroKernel" begin
k = ZeroKernel()
@test eltype(k) == Any
@test kappa(k, 2.0) == 0.0
@test KernelFunctions.metric(ZeroKernel()) == KernelFunctions.Delta()
end
@testset "WhiteKernel" begin
k = WhiteKernel()
@test eltype(k) == Any
@test kappa(k, 1.0) == 1.0
@test kappa(k, 0.0) == 0.0
@test EyeKernel == WhiteKernel
@test metric(WhiteKernel()) == KernelFunctions.Delta()
end
@testset "ConstantKernel" begin
c = 2.0
k = ConstantKernel(c = c)
@test eltype(k) == Any
@test kappa(k, 1.0) == c
@test kappa(k, 0.5) == c
@test metric(ConstantKernel()) == KernelFunctions.Delta()
@test metric(ConstantKernel(c = 2.0)) == KernelFunctions.Delta()
end
29 changes: 16 additions & 13 deletions test/kernels/cosine.jl
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
@testset "cosine" begin
rng = MersenneTwister(123456)
x = rand(rng)*2
v1 = rand(rng, 3)
v2 = rand(rng, 3)
using KernelFunctions

k = CosineKernel()
@test eltype(k) == Any
@test kappa(k, 1.0) ≈ -1.0 atol=1e-5
@test kappa(k, 2.0) ≈ 1.0 atol=1e-5
@test kappa(k, 1.5) ≈ 0.0 atol=1e-5
@test kappa(k,x) ≈ cospi(x) atol=1e-5
@test k(v1, v2) ≈ cospi(sqrt(sum(abs2.(v1-v2)))) atol=1e-5
end
using Random
using Test

rng = MersenneTwister(123456)
x = rand(rng) * 2
v1 = rand(rng, 3)
v2 = rand(rng, 3)

k = CosineKernel()
@test eltype(k) == Any
@test kappa(k, 1.0) ≈ -1.0 atol = 1e-5
@test kappa(k, 2.0) ≈ 1.0 atol = 1e-5
@test kappa(k, 1.5) ≈ 0.0 atol = 1e-5
@test kappa(k, x) ≈ cospi(x) atol = 1e-5
@test k(v1, v2) ≈ cospi(sqrt(sum(abs2.(v1 - v2)))) atol = 1e-5
23 changes: 13 additions & 10 deletions test/kernels/custom.jl
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
using KernelFunctions
using Distances

using Test

# minimal definition of a custom kernel
struct MyKernel <: Kernel end

Expand All @@ -9,14 +14,12 @@ KernelFunctions.metric(::MyKernel) = SqEuclidean()
(κ::MyKernel)(X::AbstractMatrix{<:Real}, Y::AbstractMatrix{<:Real}; obsdim = 2) = kernelmatrix(κ, X, Y; obsdim = obsdim)
(κ::MyKernel)(X::AbstractMatrix{<:Real}; obsdim = 2) = kernelmatrix(κ, X; obsdim = obsdim)

@testset "custom" begin
@test kappa(MyKernel(), 3) == kappa(SqExponentialKernel(), 3)
@test kappa(MyKernel(), 1, 3) == kappa(SqExponentialKernel(), 1, 3)
@test kappa(MyKernel(), [1, 2], [3, 4]) == kappa(SqExponentialKernel(), [1, 2], [3, 4])
@test kernelmatrix(MyKernel(), [1 2; 3 4], [5 6; 7 8]) == kernelmatrix(SqExponentialKernel(), [1 2; 3 4], [5 6; 7 8])
@test kernelmatrix(MyKernel(), [1 2; 3 4]) == kernelmatrix(SqExponentialKernel(), [1 2; 3 4])
@test kappa(MyKernel(), 3) == kappa(SqExponentialKernel(), 3)
@test kappa(MyKernel(), 1, 3) == kappa(SqExponentialKernel(), 1, 3)
@test kappa(MyKernel(), [1, 2], [3, 4]) == kappa(SqExponentialKernel(), [1, 2], [3, 4])
@test kernelmatrix(MyKernel(), [1 2; 3 4], [5 6; 7 8]) == kernelmatrix(SqExponentialKernel(), [1 2; 3 4], [5 6; 7 8])
@test kernelmatrix(MyKernel(), [1 2; 3 4]) == kernelmatrix(SqExponentialKernel(), [1 2; 3 4])

@test MyKernel()([1, 2], [3, 4]) == SqExponentialKernel()([1, 2], [3, 4])
@test MyKernel()([1 2; 3 4], [5 6; 7 8]) == SqExponentialKernel()([1 2; 3 4], [5 6; 7 8])
@test MyKernel()([1 2; 3 4]) == SqExponentialKernel()([1 2; 3 4])
end
@test MyKernel()([1, 2], [3, 4]) == SqExponentialKernel()([1, 2], [3, 4])
@test MyKernel()([1 2; 3 4], [5 6; 7 8]) == SqExponentialKernel()([1 2; 3 4], [5 6; 7 8])
@test MyKernel()([1 2; 3 4]) == SqExponentialKernel()([1 2; 3 4])
71 changes: 39 additions & 32 deletions test/kernels/exponential.jl
Original file line number Diff line number Diff line change
@@ -1,34 +1,41 @@
@testset "exponential" begin
rng = MersenneTwister(123456)
x = rand(rng)*2
v1 = rand(rng, 3)
v2 = rand(rng, 3)
@testset "SqExponentialKernel" begin
k = SqExponentialKernel()
@test kappa(k,x) ≈ exp(-x)
@test k(v1,v2) ≈ exp(-norm(v1-v2)^2)
@test kappa(SqExponentialKernel(),x) == kappa(k,x)
@test metric(SqExponentialKernel()) == SqEuclidean()
end
@testset "ExponentialKernel" begin
k = ExponentialKernel()
@test kappa(k,x) ≈ exp(-x)
@test k(v1,v2) ≈ exp(-norm(v1-v2))
@test kappa(ExponentialKernel(),x) == kappa(k,x)
@test metric(ExponentialKernel()) == Euclidean()
end
@testset "GammaExponentialKernel" begin
γ = 2.0
k = GammaExponentialKernel(γ=γ)
@test kappa(k,x) ≈ exp(-(x)^(γ))
@test k(v1,v2) ≈ exp(-norm(v1-v2)^(2γ))
@test kappa(GammaExponentialKernel(),x) == kappa(k,x)
@test GammaExponentialKernel(gamma=γ).γ == [γ]
@test metric(GammaExponentialKernel()) == SqEuclidean()
@test metric(GammaExponentialKernel(γ=2.0)) == SqEuclidean()
using KernelFunctions
using KernelFunctions: metric
using Distances

#Coherence :
@test KernelFunctions._kernel(GammaExponentialKernel(γ=1.0),v1,v2) ≈ KernelFunctions._kernel(SqExponentialKernel(),v1,v2)
@test KernelFunctions._kernel(GammaExponentialKernel(γ=0.5),v1,v2) ≈ KernelFunctions._kernel(ExponentialKernel(),v1,v2)
end
using LinearAlgebra
using Random
using Test

rng = MersenneTwister(123456)
x = rand(rng) * 2
v1 = rand(rng, 3)
v2 = rand(rng, 3)
@testset "SqExponentialKernel" begin
k = SqExponentialKernel()
@test kappa(k, x) ≈ exp(-x)
@test k(v1, v2) ≈ exp(-norm(v1 - v2)^2)
@test kappa(SqExponentialKernel(), x) == kappa(k, x)
@test metric(SqExponentialKernel()) == SqEuclidean()
end
@testset "ExponentialKernel" begin
k = ExponentialKernel()
@test kappa(k, x) ≈ exp(-x)
@test k(v1, v2) ≈ exp(-norm(v1 - v2))
@test kappa(ExponentialKernel(), x) == kappa(k, x)
@test metric(ExponentialKernel()) == Euclidean()
end
@testset "GammaExponentialKernel" begin
γ = 2.0
k = GammaExponentialKernel(γ = γ)
@test kappa(k, x) ≈ exp(-(x)^(γ))
@test k(v1, v2) ≈ exp(-norm(v1 - v2)^(2γ))
@test kappa(GammaExponentialKernel(), x) == kappa(k, x)
@test GammaExponentialKernel(gamma = γ).γ == [γ]
@test metric(GammaExponentialKernel()) == SqEuclidean()
@test metric(GammaExponentialKernel(γ = 2.0)) == SqEuclidean()

# Coherence :
@test KernelFunctions._kernel(GammaExponentialKernel(γ = 1.0), v1, v2) ≈ KernelFunctions._kernel(SqExponentialKernel(), v1, v2)
@test KernelFunctions._kernel(GammaExponentialKernel(γ = 0.5), v1, v2) ≈ KernelFunctions._kernel(ExponentialKernel(), v1, v2)
end

27 changes: 16 additions & 11 deletions test/kernels/exponentiated.jl
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
@testset "exponentiated" begin
rng = MersenneTwister(123456)
x = rand(rng)*2
v1 = rand(rng, 3)
v2 = rand(rng, 3)
using KernelFunctions
using KernelFunctions: metric

k = ExponentiatedKernel()
@test kappa(k,x) ≈ exp(x)
@test kappa(k,-x) ≈ exp(-x)
@test k(v1,v2) ≈ exp(dot(v1,v2))
@test metric(ExponentiatedKernel()) == KernelFunctions.DotProduct()
end
using LinearAlgebra
using Random
using Test

rng = MersenneTwister(123456)
x = rand(rng) * 2
v1 = rand(rng, 3)
v2 = rand(rng, 3)

k = ExponentiatedKernel()
@test kappa(k, x) ≈ exp(x)
@test kappa(k, -x) ≈ exp(-x)
@test k(v1, v2) ≈ exp(dot(v1, v2))
@test metric(ExponentiatedKernel()) == KernelFunctions.DotProduct()
29 changes: 16 additions & 13 deletions test/kernels/fbm.jl
Original file line number Diff line number Diff line change
@@ -1,17 +1,20 @@
@testset "FBM" begin
h = 0.3
k = FBMKernel(h = h)
v1 = rand(3); v2 = rand(3)
@test k(v1,v2) ≈ (sqeuclidean(v1, zero(v1))^h + sqeuclidean(v2, zero(v2))^h - sqeuclidean(v1-v2, zero(v1-v2))^h)/2 atol=1e-5
using KernelFunctions
using Distances

using Test

h = 0.3
k = FBMKernel(h = h)
v1 = rand(3); v2 = rand(3)
@test k(v1, v2) ≈ (sqeuclidean(v1, zero(v1))^h + sqeuclidean(v2, zero(v2))^h - sqeuclidean(v1 - v2, zero(v1 - v2))^h) / 2 atol = 1e-5

# kernelmatrix tests
m1 = rand(3,3)
m2 = rand(3,3)
@test kernelmatrix(k, m1, m1) ≈ kernelmatrix(k, m1) atol=1e-5
@test kernelmatrix(k, m1, m2) ≈ k(m1, m2) atol=1e-5
m1 = rand(3, 3)
m2 = rand(3, 3)
@test kernelmatrix(k, m1, m1) ≈ kernelmatrix(k, m1) atol = 1e-5
@test kernelmatrix(k, m1, m2) ≈ k(m1, m2) atol = 1e-5


x1 = rand()
x2 = rand()
@test kernelmatrix(k, x1*ones(1,1), x2*ones(1,1))[1] ≈ k(x1, x2) atol=1e-5
end
x1 = rand()
x2 = rand()
@test kernelmatrix(k, x1 * ones(1, 1), x2 * ones(1, 1))[1] ≈ k(x1, x2) atol = 1e-5
33 changes: 18 additions & 15 deletions test/kernels/kernelproduct.jl
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
@testset "kernelproduct" begin
rng = MersenneTwister(123456)
v1 = rand(rng, 3)
v2 = rand(rng, 3)

k1 = LinearKernel()
k2 = SqExponentialKernel()
k3 = RationalQuadraticKernel()

k = KernelProduct([k1,k2])
@test length(k) == 2
@test kappa(k,v1,v2) == kappa(k1*k2,v1,v2)
@test kappa(k*k,v1,v2) ≈ kappa(k,v1,v2)^2
@test kappa(k*k3,v1,v2) ≈ kappa(k3*k,v1,v2)
end
using KernelFunctions

using Random
using Test

rng = MersenneTwister(123456)
v1 = rand(rng, 3)
v2 = rand(rng, 3)

k1 = LinearKernel()
k2 = SqExponentialKernel()
k3 = RationalQuadraticKernel()

k = KernelProduct([k1,k2])
@test length(k) == 2
@test kappa(k, v1, v2) == kappa(k1 * k2, v1, v2)
@test kappa(k * k, v1, v2) ≈ kappa(k, v1, v2)^2
@test kappa(k * k3, v1, v2) ≈ kappa(k3 * k, v1, v2)
Loading