|
27 | 27 | """ |
28 | 28 | @inline iskroncompatible(κ::Kernel) = false # Default return for kernels |
29 | 29 |
|
30 | | -function _kernelmatrix_kroneckerjl_helper(::MOInputIsotopicByFeatures, Kfeatures, Koutputs) |
| 30 | +function _kernelmatrix_kroneckerjl_helper( |
| 31 | + ::Type{<:MOInputIsotopicByFeatures}, Kfeatures, Koutputs |
| 32 | +) |
31 | 33 | return Kronecker.kronecker(Kfeatures, Koutputs) |
32 | 34 | end |
33 | 35 |
|
34 | | -function _kernelmatrix_kroneckerjl_helper(::MOInputIsotopicByOutputs, Kfeatures, Koutputs) |
| 36 | +function _kernelmatrix_kroneckerjl_helper( |
| 37 | + ::Type{<:MOInputIsotopicByOutputs}, Kfeatures, Koutputs |
| 38 | +) |
35 | 39 | return Kronecker.kronecker(Koutputs, Kfeatures) |
36 | 40 | end |
37 | 41 |
|
| 42 | +""" |
| 43 | + kronecker_kernelmatrix( |
| 44 | + k::Union{IndependentMOKernel,IntrinsicCoregionMOKernel}, x::MOI, y::MOI |
| 45 | + ) where {MOI<:IsotopicMOInputsUnion} |
| 46 | +
|
| 47 | +Requires Kronecker.jl: Computes the `kernelmatrix` for the `IndependentMOKernel` and the |
| 48 | +`IntrinsicCoregionMOKernel`, but returns a lazy kronecker product. This object can be very |
| 49 | +efficiently inverted or decomposed. See also [`kernelmatrix`](@ref). |
| 50 | +""" |
38 | 51 | function kronecker_kernelmatrix( |
39 | | - k::Union{IndependentMOKernel,IntrinsicCoregionMOKernel}, |
40 | | - x::IsotopicMOInputsUnion, |
41 | | - y::IsotopicMOInputsUnion, |
42 | | -) |
43 | | - @assert x.out_dim == y.out_dim |
| 52 | + k::Union{IndependentMOKernel,IntrinsicCoregionMOKernel}, x::MOI, y::MOI |
| 53 | +) where {MOI<:IsotopicMOInputsUnion} |
| 54 | + x.out_dim == y.out_dim || |
| 55 | + throw(DimensionMismatch("`x` and `y` must have the same `out_dim`")) |
44 | 56 | Kfeatures = kernelmatrix(k.kernel, x.x, y.x) |
45 | 57 | Koutputs = _mo_output_covariance(k, x.out_dim) |
46 | | - return _kernelmatrix_kroneckerjl_helper(x, Kfeatures, Koutputs) |
| 58 | + return _kernelmatrix_kroneckerjl_helper(MOI, Kfeatures, Koutputs) |
47 | 59 | end |
48 | 60 |
|
49 | 61 | function kronecker_kernelmatrix( |
50 | | - k::Union{IndependentMOKernel,IntrinsicCoregionMOKernel}, x::IsotopicMOInputsUnion |
51 | | -) |
| 62 | + k::Union{IndependentMOKernel,IntrinsicCoregionMOKernel}, x::MOI |
| 63 | +) where {MOI<:IsotopicMOInputsUnion} |
52 | 64 | Kfeatures = kernelmatrix(k.kernel, x.x) |
53 | 65 | Koutputs = _mo_output_covariance(k, x.out_dim) |
54 | | - return _kernelmatrix_kroneckerjl_helper(x, Kfeatures, Koutputs) |
| 66 | + return _kernelmatrix_kroneckerjl_helper(MOI, Kfeatures, Koutputs) |
55 | 67 | end |
56 | 68 |
|
57 | 69 | function kronecker_kernelmatrix( |
|
0 commit comments