Kronecker.jl icon indicating copy to clipboard operation
Kronecker.jl copied to clipboard

Work with Distributions.jl and PDMats.jl

Open Wu-Chenyang opened this issue 1 year ago • 1 comments

Currently, the Kronecker can't work with Distributions.jl and PDMats.jl. The following simple code fails.

julia> using Kronecker, Distributions, LinearAlgebra
julia> MvNormal(ones(4), I(2)⊗I(2))
ERROR: MethodError: no method matching PDMats.PDMat(::Kronecker.KroneckerProduct{Bool, Diagonal{…}, Diagonal{…}}, ::CholeskyKronecker{Cholesky{…}, Cholesky{…}})
The type `PDMats.PDMat` exists, but no method is defined for this combination of argument types when trying to construct it.

Closest candidates are:
  PDMats.PDMat(::AbstractMatrix, ::Cholesky{T, S}) where {T, S}
   @ PDMats ~/.julia/packages/PDMats/cAM9h/src/pdmat.jl:11
  PDMats.PDMat(::AbstractMatrix)
   @ PDMats ~/.julia/packages/PDMats/cAM9h/src/pdmat.jl:19
  PDMats.PDMat(::Cholesky)
   @ PDMats ~/.julia/packages/PDMats/cAM9h/src/pdmat.jl:20

Is there a workaround for this? It seems requiring CholeskyKronecker to subtype Cholesky.

Wu-Chenyang avatar Dec 09 '24 12:12 Wu-Chenyang

The issue is that Distributions seems to use PDMmat for the covariance matrix. It would seem useful to be able to use the Matrix normal then.

To avoid type piracy, I think the best option is to copy this issue to PDMats.jl. I'll open an issue there.

MichielStock avatar Jan 03 '25 09:01 MichielStock