diff --git a/Project.toml b/Project.toml index 2830de211..3986c1f59 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "KernelFunctions" uuid = "ec8451be-7e33-11e9-00cf-bbf324bd1392" -version = "0.10.57" +version = "0.10.58" [deps] ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" @@ -25,7 +25,7 @@ ZygoteRules = "700de1a5-db45-46bc-99cf-38207098b444" ChainRulesCore = "1" Compat = "3.7, 4" CompositionsBase = "0.1" -Distances = "0.10" +Distances = "0.10.9" FillArrays = "0.10, 0.11, 0.12, 0.13, 1" Functors = "0.1, 0.2, 0.3, 0.4" IrrationalConstants = "0.1, 0.2" diff --git a/src/basekernels/fbm.jl b/src/basekernels/fbm.jl index 422400ac4..18dbdea14 100644 --- a/src/basekernels/fbm.jl +++ b/src/basekernels/fbm.jl @@ -57,7 +57,7 @@ end function kernelmatrix!(K::AbstractMatrix, κ::FBMKernel, x::AbstractVector) modx = _mod(x) - pairwise!(K, SqEuclidean(), x) + pairwise!(SqEuclidean(), K, x) K .= _fbm.(modx, modx', K, κ.h) return K end @@ -72,7 +72,7 @@ end function kernelmatrix!( K::AbstractMatrix, κ::FBMKernel, x::AbstractVector, y::AbstractVector ) - pairwise!(K, SqEuclidean(), x, y) + pairwise!(SqEuclidean(), K, x, y) K .= _fbm.(_mod(x), _mod(y)', K, κ.h) return K end diff --git a/src/distances/pairwise.jl b/src/distances/pairwise.jl index 8b5cb43e7..ab925fba6 100644 --- a/src/distances/pairwise.jl +++ b/src/distances/pairwise.jl @@ -6,11 +6,11 @@ end pairwise(d::PreMetric, X::AbstractVector) = pairwise(d, X, X) -function pairwise!(out::AbstractMatrix, d::PreMetric, X::AbstractVector, Y::AbstractVector) +function pairwise!(d::PreMetric, out::AbstractMatrix, X::AbstractVector, Y::AbstractVector) return broadcast!(d, out, X, permutedims(Y)) end -pairwise!(out::AbstractMatrix, d::PreMetric, X::AbstractVector) = pairwise!(out, d, X, X) +pairwise!(d::PreMetric, out::AbstractMatrix, X::AbstractVector) = pairwise!(d, out, X, X) function pairwise(d::PreMetric, x::AbstractVector{<:Real}) return Distances_pairwise(d, reshape(x, :, 1); dims=1) @@ -20,14 +20,14 @@ function pairwise(d::PreMetric, x::AbstractVector{<:Real}, y::AbstractVector{<:R return Distances_pairwise(d, reshape(x, :, 1), reshape(y, :, 1); dims=1) end -function pairwise!(out::AbstractMatrix, d::PreMetric, x::AbstractVector{<:Real}) - return Distances.pairwise!(out, d, reshape(x, :, 1); dims=1) +function pairwise!(d::PreMetric, out::AbstractMatrix, x::AbstractVector{<:Real}) + return Distances.pairwise!(d, out, reshape(x, :, 1); dims=1) end function pairwise!( - out::AbstractMatrix, d::PreMetric, x::AbstractVector{<:Real}, y::AbstractVector{<:Real} + d::PreMetric, out::AbstractMatrix, x::AbstractVector{<:Real}, y::AbstractVector{<:Real} ) - return Distances.pairwise!(out, d, reshape(x, :, 1), reshape(y, :, 1); dims=1) + return Distances.pairwise!(d, out, reshape(x, :, 1), reshape(y, :, 1); dims=1) end # Also defines the colwise method for abstractvectors diff --git a/src/matrix/kernelmatrix.jl b/src/matrix/kernelmatrix.jl index e778f79eb..0b0f851d6 100644 --- a/src/matrix/kernelmatrix.jl +++ b/src/matrix/kernelmatrix.jl @@ -134,7 +134,7 @@ kernelmatrix_diag(κ::Kernel, x::AbstractVector, y::AbstractVector) = map(κ, x, function kernelmatrix!(K::AbstractMatrix, κ::SimpleKernel, x::AbstractVector) validate_inplace_dims(K, x) - pairwise!(K, metric(κ), x) + pairwise!(metric(κ), K, x) return map!(x -> kappa(κ, x), K, K) end @@ -142,7 +142,7 @@ function kernelmatrix!( K::AbstractMatrix, κ::SimpleKernel, x::AbstractVector, y::AbstractVector ) validate_inplace_dims(K, x, y) - pairwise!(K, metric(κ), x, y) + pairwise!(metric(κ), K, x, y) return map!(x -> kappa(κ, x), K, K) end diff --git a/src/utils.jl b/src/utils.jl index 0942fa5f7..29087259b 100644 --- a/src/utils.jl +++ b/src/utils.jl @@ -107,11 +107,11 @@ end function pairwise(d::PreMetric, x::ColVecs, y::AbstractVector{<:AbstractVector{<:Real}}) return Distances_pairwise(d, x.X, reduce(hcat, y); dims=2) end -function pairwise!(out::AbstractMatrix, d::PreMetric, x::ColVecs) - return Distances.pairwise!(out, d, x.X; dims=2) +function pairwise!(d::PreMetric, out::AbstractMatrix, x::ColVecs) + return Distances.pairwise!(d, out, x.X; dims=2) end -function pairwise!(out::AbstractMatrix, d::PreMetric, x::ColVecs, y::ColVecs) - return Distances.pairwise!(out, d, x.X, y.X; dims=2) +function pairwise!(d::PreMetric, out::AbstractMatrix, x::ColVecs, y::ColVecs) + return Distances.pairwise!(d, out, x.X, y.X; dims=2) end """ @@ -178,11 +178,11 @@ end function pairwise(d::PreMetric, x::RowVecs, y::AbstractVector{<:AbstractVector{<:Real}}) return Distances_pairwise(d, x.X, permutedims(reduce(hcat, y)); dims=1) end -function pairwise!(out::AbstractMatrix, d::PreMetric, x::RowVecs) - return Distances.pairwise!(out, d, x.X; dims=1) +function pairwise!(d::PreMetric, out::AbstractMatrix, x::RowVecs) + return Distances.pairwise!(d, out, x.X; dims=1) end -function pairwise!(out::AbstractMatrix, d::PreMetric, x::RowVecs, y::RowVecs) - return Distances.pairwise!(out, d, x.X, y.X; dims=1) +function pairwise!(d::PreMetric, out::AbstractMatrix, x::RowVecs, y::RowVecs) + return Distances.pairwise!(d, out, x.X, y.X; dims=1) end # Resolve ambiguity error for ColVecs vs RowVecs. #346 diff --git a/test/distances/pairwise.jl b/test/distances/pairwise.jl index 486097f52..6635579cb 100644 --- a/test/distances/pairwise.jl +++ b/test/distances/pairwise.jl @@ -11,10 +11,10 @@ @test KernelFunctions.pairwise(d, x, y) ≈ pairwise(d, X, Y; dims=2) @test KernelFunctions.pairwise(d, x) ≈ pairwise(d, X; dims=2) - KernelFunctions.pairwise!(K, d, x, y) + KernelFunctions.pairwise!(d, K, x, y) @test K ≈ pairwise(d, X, Y; dims=2) K = zeros(Ns[1], Ns[1]) - KernelFunctions.pairwise!(K, d, x) + KernelFunctions.pairwise!(d, K, x) @test K ≈ pairwise(d, X; dims=2) x = randn(rng, 10) @@ -24,6 +24,6 @@ K = zeros(10, 11) @test KernelFunctions.pairwise(d, x, y) ≈ pairwise(d, X, Y; dims=1) @test KernelFunctions.pairwise(d, x) ≈ pairwise(d, X; dims=1) - KernelFunctions.pairwise!(K, d, x, y) + KernelFunctions.pairwise!(d, K, x, y) @test K ≈ pairwise(d, X, Y; dims=1) end diff --git a/test/utils.jl b/test/utils.jl index 42784548a..a7cabbd05 100644 --- a/test/utils.jl +++ b/test/utils.jl @@ -47,10 +47,10 @@ @test vcat(DX, DY) isa ColVecs @test vcat(DX, DY).X == hcat(X, Y) K = zeros(N, N) - KernelFunctions.pairwise!(K, SqEuclidean(), DX) + KernelFunctions.pairwise!(SqEuclidean(), K, DX) @test K ≈ pairwise(SqEuclidean(), X; dims=2) K = zeros(N, N + 1) - KernelFunctions.pairwise!(K, SqEuclidean(), DX, DY) + KernelFunctions.pairwise!(SqEuclidean(), K, DX, DY) @test K ≈ pairwise(SqEuclidean(), X, Y; dims=2) let @@ -105,10 +105,10 @@ @test vcat(DX, DY) isa RowVecs @test vcat(DX, DY).X == vcat(X, Y) K = zeros(D, D) - KernelFunctions.pairwise!(K, SqEuclidean(), DX) + KernelFunctions.pairwise!(SqEuclidean(), K, DX) @test K ≈ pairwise(SqEuclidean(), X; dims=1) K = zeros(D, D + 1) - KernelFunctions.pairwise!(K, SqEuclidean(), DX, DY) + KernelFunctions.pairwise!(SqEuclidean(), K, DX, DY) @test K ≈ pairwise(SqEuclidean(), X, Y; dims=1) let