Description
For example:
julia> using BlockSparseArrays: BlockSparseArray
julia> b = BlockSparseArray{Float64}([2, 2], [2, 2])
2×2-blocked 4×4 BlockSparseArray{Float64, 2, Matrix{Float64}, SparseArraysBase.SparseMatrixDOK{Matrix{Float64}, BlockSparseArrays.GetUnstoredBlock{Tuple{BlockArrays.BlockedOneTo{Int64, Vector{Int64}}, BlockArrays.BlockedOneTo{Int64, Vector{Int64}}}}}, Tuple{BlockArrays.BlockedOneTo{Int64, Vector{Int64}}, BlockArrays.BlockedOneTo{Int64, Vector{Int64}}}}:
. . │ . .
. . │ . .
──────┼──────
. . │ . .
. . │ . .
julia> b[1, 3] = 13
13
julia> b
2×2-blocked 4×4 BlockSparseArray{Float64, 2, Matrix{Float64}, SparseArraysBase.SparseMatrixDOK{Matrix{Float64}, BlockSparseArrays.GetUnstoredBlock{Tuple{BlockArrays.BlockedOneTo{Int64, Vector{Int64}}, BlockArrays.BlockedOneTo{Int64, Vector{Int64}}}}}, Tuple{BlockArrays.BlockedOneTo{Int64, Vector{Int64}}, BlockArrays.BlockedOneTo{Int64, Vector{Int64}}}}:
. . │ 13.0 0.0
. . │ 0.0 0.0
──────┼───────────
. . │ . .
. . │ . .
julia> b * b'
2×2-blocked 4×4 BlockSparseArray{Float64, 2, Matrix{Float64}, SparseArraysBase.SparseMatrixDOK{Matrix{Float64}, BlockSparseArrays.GetUnstoredBlock{Tuple{BlockArrays.BlockedOneTo{Int64, Vector{Int64}}, BlockArrays.BlockedOneTo{Int64, Vector{Int64}}}}}, Tuple{BlockArrays.BlockedOneTo{Int64, Vector{Int64}}, BlockArrays.BlockedOneTo{Int64, Vector{Int64}}}}:
169.0 0.0 │ 0.0 0.0
0.0 0.0 │ 0.0 0.0
────────────┼──────────
0.0 0.0 │ 0.0 0.0
0.0 0.0 │ 0.0 0.0
julia> b * transpose(b)
2×2-blocked 4×4 BlockSparseArray{Float64, 2, Matrix{Float64}, SparseArraysBase.SparseMatrixDOK{Matrix{Float64}, BlockSparseArrays.GetUnstoredBlock{Tuple{BlockArrays.BlockedOneTo{Int64, Vector{Int64}}, BlockArrays.BlockedOneTo{Int64, Vector{Int64}}}}}, Tuple{BlockArrays.BlockedOneTo{Int64, Vector{Int64}}, BlockArrays.BlockedOneTo{Int64, Vector{Int64}}}}:
169.0 0.0 │ 0.0 0.0
0.0 0.0 │ 0.0 0.0
────────────┼──────────
0.0 0.0 │ 0.0 0.0
0.0 0.0 │ 0.0 0.0
julia> b * copy(b')
2×2-blocked 4×4 BlockSparseArray{Float64, 2, Matrix{Float64}, SparseArraysBase.SparseMatrixDOK{Matrix{Float64}, BlockSparseArrays.GetUnstoredBlock{Tuple{BlockArrays.BlockedOneTo{Int64, Vector{Int64}}, BlockArrays.BlockedOneTo{Int64, Vector{Int64}}}}}, Tuple{BlockArrays.BlockedOneTo{Int64, Vector{Int64}}, BlockArrays.BlockedOneTo{Int64, Vector{Int64}}}}:
169.0 0.0 │ . .
0.0 0.0 │ . .
────────────┼──────
. . │ . .
. . │ . .
julia> import Pkg; Pkg.status()
Status `/private/var/folders/qz/q22pzwm144z9fq57mpf1hfp40000gq/T/jl_EIrZHM/Project.toml`
[2c9a651f] BlockSparseArrays v0.2.5
Interestingly, lazy permutation works fine:
julia> b * PermutedDimsArray(b, (2, 1))
2×2-blocked 4×4 BlockSparseArray{Float64, 2, Matrix{Float64}, SparseArraysBase.SparseMatrixDOK{Matrix{Float64}, BlockSparseArrays.GetUnstoredBlock{Tuple{BlockArrays.BlockedOneTo{Int64, Vector{Int64}}, BlockArrays.BlockedOneTo{Int64, Vector{Int64}}}}}, Tuple{BlockArrays.BlockedOneTo{Int64, Vector{Int64}}, BlockArrays.BlockedOneTo{Int64, Vector{Int64}}}}:
169.0 0.0 │ . .
0.0 0.0 │ . .
────────────┼──────
. . │ . .
. . │ . .
@lkdvos @ogauthe (note the new printing I added which shows if values aren't stored).