-
Notifications
You must be signed in to change notification settings - Fork 40
Expand file tree
/
Copy pathoverloads.jl
More file actions
33 lines (28 loc) · 1.12 KB
/
overloads.jl
File metadata and controls
33 lines (28 loc) · 1.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
function ⊕ end
for (M, op, T) in (
(:Base, :+, :KernelSum),
(:Base, :*, :KernelProduct),
(:TensorCore, :tensor, :KernelTensorProduct),
(:KernelFunctions, :⊕, :KernelTensorSum),
)
@eval begin
$M.$op(k1::Kernel, k2::Kernel) = $T(k1, k2)
$M.$op(k1::$T, k2::$T) = $T(k1.kernels..., k2.kernels...)
function $M.$op(
k1::$T{<:AbstractVector{<:Kernel}}, k2::$T{<:AbstractVector{<:Kernel}}
)
return $T(vcat(k1.kernels, k2.kernels))
end
$M.$op(k::Kernel, ks::$T) = $T(k, ks.kernels...)
$M.$op(k::Kernel, ks::$T{<:AbstractVector{<:Kernel}}) = $T(vcat(k, ks.kernels))
$M.$op(ks::$T, k::Kernel) = $T(ks.kernels..., k)
$M.$op(ks::$T{<:AbstractVector{<:Kernel}}, k::Kernel) = $T(vcat(ks.kernels, k))
# Fix method ambiguity issues
function $M.$op(ks1::$T, ks2::$T{<:AbstractVector{<:Kernel}})
return $T(vcat(collect(ks1.kernels), ks2.kernels))
end
function $M.$op(ks1::$T{<:AbstractVector{<:Kernel}}, ks2::$T)
return $T(vcat(ks1.kernels, collect(ks2.kernels)))
end
end
end