At the moment, our only optimized decompression is for SparseMatrixCSC in :direct mode: we store a vector of compressed_indices such that nonzeros(A) = vec(B)[compressed_indices].
We can probably find a similar optimization for :substitution mode.
What do we want to do for other matrix types, like:
It would be rather tiring to find optimal decompression methods for each of these. My proposal (as a first step) would be to always have a SparseMatrixCSC buffer into which we decompress, and then copy the A_buffer::SparseMatrixCSC into A::SomeWeirdMatrix.
Essentially, it's easier to implement fast copy from SparseMatrixCSC than fast decompression.
Related:
At the moment, our only optimized decompression is for
SparseMatrixCSCin:directmode: we store a vector ofcompressed_indicessuch thatnonzeros(A) = vec(B)[compressed_indices].We can probably find a similar optimization for
:substitutionmode.What do we want to do for other matrix types, like:
LinearAlgebra:Bidiagonal,Tridiagonal,Symmetric, etc.It would be rather tiring to find optimal decompression methods for each of these. My proposal (as a first step) would be to always have a
SparseMatrixCSCbuffer into which we decompress, and then copy theA_buffer::SparseMatrixCSCintoA::SomeWeirdMatrix.Essentially, it's easier to implement fast copy from
SparseMatrixCSCthan fast decompression.Related:
eltypeof decompression targetA#44