1+ module KernelFunctionsKroneckerExt
2+
3+ using KernelFunctions:
4+ KernelFunctions,
5+ Kernel,
6+ MOKernel,
7+ IndependentMOKernel,
8+ IntrinsicCoregionMOKernel,
9+ IsotopicMOInputsUnion,
10+ MOInputIsotopicByFeatures,
11+ MOInputIsotopicByOutputs,
12+ kernelmatrix,
13+ _mo_output_covariance
14+ using Kronecker: Kronecker
15+
116# Since Kronecker does not implement `TensorCore.:⊗` but instead exports its own function
217# `Kronecker.:⊗`, only the module is imported and Kronecker.:⊗ and Kronecker.kronecker are
318# called explicitly.
4- using . Kronecker: Kronecker
5-
6- export kernelkronmat
7- export kronecker_kernelmatrix
819
920@doc raw """
1021 kernelkronmat(κ::Kernel, X::AbstractVector{<:Real}, dims::Int) -> KroneckerPower
@@ -16,8 +27,8 @@ where `D` is given by `dims`.
1627
1728 Requires `Kronecker.jl` and for `iskroncompatible(κ)` to return `true`.
1829"""
19- function kernelkronmat (κ:: Kernel , X:: AbstractVector{<:Real} , dims:: Int )
20- checkkroncompatible (κ)
30+ function KernelFunctions . kernelkronmat (κ:: Kernel , X:: AbstractVector{<:Real} , dims:: Int )
31+ KernelFunctions . checkkroncompatible (κ)
2132 K = kernelmatrix (κ, X)
2233 return Kronecker. kronecker (K, dims)
2334end
@@ -32,32 +43,12 @@ Returns a `KroneckerProduct` matrix on the grid built with the collection of vec
3243
3344 Requires `Kronecker.jl` and for `iskroncompatible(κ)` to return `true`.
3445"""
35- function kernelkronmat (κ:: Kernel , X:: AbstractVector{<:AbstractVector} )
36- checkkroncompatible (κ)
46+ function KernelFunctions . kernelkronmat (κ:: Kernel , X:: AbstractVector{<:AbstractVector} )
47+ KernelFunctions . checkkroncompatible (κ)
3748 Ks = kernelmatrix .(κ, X)
3849 return reduce (Kronecker.:⊗ , Ks)
3950end
4051
41- @doc raw """
42- iskroncompatible(k::Kernel)
43-
44- Determine whether kernel `k` is compatible with Kronecker constructions such as [`kernelkronmat`](@ref)
45-
46- The function returns `false` by default. If `k` is compatible it must satisfy for all ``x, x' \i n \m athbb{R}^D`:
47- ```math
48- k(x, x') = \p rod_{i=1}^D k(x_i, x'_i).
49- ```
50- """
51- @inline iskroncompatible (κ:: Kernel ) = false # Default return for kernels
52-
53- function checkkroncompatible (κ:: Kernel )
54- return iskroncompatible (κ) || throw (
55- ArgumentError (
56- " The chosen kernel is not compatible for Kronecker matrices (see [`iskroncompatible`](@ref))" ,
57- ),
58- )
59- end
60-
6152function _kernelmatrix_kroneckerjl_helper (
6253 :: Type{<:MOInputIsotopicByFeatures} , Kfeatures, Koutputs
6354)
@@ -79,7 +70,7 @@ Requires Kronecker.jl: Computes the `kernelmatrix` for the `IndependentMOKernel`
7970`IntrinsicCoregionMOKernel`, but returns a lazy kronecker product. This object can be very
8071efficiently inverted or decomposed. See also [`kernelmatrix`](@ref).
8172"""
82- function kronecker_kernelmatrix (
73+ function KernelFunctions . kronecker_kernelmatrix (
8374 k:: Union{IndependentMOKernel,IntrinsicCoregionMOKernel} , x:: MOI , y:: MOI
8475) where {MOI<: IsotopicMOInputsUnion }
8576 x. out_dim == y. out_dim ||
@@ -89,22 +80,24 @@ function kronecker_kernelmatrix(
8980 return _kernelmatrix_kroneckerjl_helper (MOI, Kfeatures, Koutputs)
9081end
9182
92- function kronecker_kernelmatrix (
83+ function KernelFunctions . kronecker_kernelmatrix (
9384 k:: Union{IndependentMOKernel,IntrinsicCoregionMOKernel} , x:: MOI
9485) where {MOI<: IsotopicMOInputsUnion }
9586 Kfeatures = kernelmatrix (k. kernel, x. x)
9687 Koutputs = _mo_output_covariance (k, x. out_dim)
9788 return _kernelmatrix_kroneckerjl_helper (MOI, Kfeatures, Koutputs)
9889end
9990
100- function kronecker_kernelmatrix (
91+ function KernelFunctions . kronecker_kernelmatrix (
10192 k:: MOKernel , x:: IsotopicMOInputsUnion , y:: IsotopicMOInputsUnion
10293)
10394 return throw (
10495 ArgumentError (" This kernel does not support a lazy kronecker kernelmatrix." )
10596 )
10697end
10798
108- function kronecker_kernelmatrix (k:: MOKernel , x:: IsotopicMOInputsUnion )
109- return kronecker_kernelmatrix (k, x, x)
99+ function KernelFunctions. kronecker_kernelmatrix (k:: MOKernel , x:: IsotopicMOInputsUnion )
100+ return KernelFunctions. kronecker_kernelmatrix (k, x, x)
101+ end
102+
110103end
0 commit comments