ITensor / ITensor/BlockSparseArrays.jl
[ENHANCEMENT] Define `BlockSparseArrays.blocktype(randn(2, 2))`
Nobody has claimed this yet.
- Dominant language
- Julia
- Stars
- 3
- Forks
- 3
- Avg merge
- 14m
- Merged PRs (30d)
- 3
Description
Define BlockSparseArrays.blocktype for dense arrays. Currently it outputs:
julia> using BlockSparseArrays: BlockSparseArrays
julia> BlockSparseArrays.blocktype(randn(2, 2))
ERROR: MethodError: no method matching blocktype(::Matrix{Float64})
The function `blocktype` exists, but no method is defined for this combination of argument types.
Closest candidates are:
blocktype(::Type{<:Union{var"#s41", var"#s40"} where {T, N, var"#s41"<:BlockSparseArrays.AbstractBlockSparseArray{T, N}, var"#s40"<:Union{Base.LogicalIndex{T, <:BlockSparseArrays.AbstractBlockSparseArray}, Base.ReinterpretArray{T, N, <:Any, <:Union{SubArray{<:Any, <:Any, var"#s14"}, var"#s14"}} where var"#s14"<:BlockSparseArrays.AbstractBlockSparseArray, Base.ReshapedArray{T, N, <:Union{Base.ReinterpretArray{<:Any, <:Any, <:Any, <:Union{SubArray{<:Any, <:Any, var"#s15"}, var"#s15"}}, SubArray{<:Any, <:Any, var"#s15"}, var"#s15"}} where var"#s15"<:BlockSparseArrays.AbstractBlockSparseArray, SubArray{T, N, <:Union{Base.ReinterpretArray{<:Any, <:Any, <:Any, <:Union{SubArray{<:Any, <:Any, var"#s16"}, var"#s16"}}, Base.ReshapedArray{<:Any, <:Any, <:Union{Base.ReinterpretArray{<:Any, <:Any, <:Any, <:Union{SubArray{<:Any, <:Any, var"#s16"}, var"#s16"}}, SubArray{<:Any, <:Any, var"#s16"}, var"#s16"}}, var"#s16"}} where var"#s16"<:BlockSparseArrays.AbstractBlockSparseArray, LinearAlgebra.Adjoint{T, <:BlockSparseArrays.AbstractBlockSparseArray{T, N}}, LinearAlgebra.Diagonal{T, <:BlockSparseArrays.AbstractBlockSparseArray{T, N}}, LinearAlgebra.LowerTriangular{T, <:BlockSparseArrays.AbstractBlockSparseArray{T, N}}, LinearAlgebra.Symmetric{T, <:BlockSparseArrays.AbstractBlockSparseArray{T, N}}, LinearAlgebra.Transpose{T, <:BlockSparseArrays.AbstractBlockSparseArray{T, N}}, LinearAlgebra.Tridiagonal{T, <:BlockSparseArrays.AbstractBlockSparseArray{T, N}}, LinearAlgebra.UnitLowerTriangular{T, <:BlockSparseArrays.AbstractBlockSparseArray{T, N}}, LinearAlgebra.UnitUpperTriangular{T, <:BlockSparseArrays.AbstractBlockSparseArray{T, N}}, LinearAlgebra.UpperTriangular{T, <:BlockSparseArrays.AbstractBlockSparseArray{T, N}}, PermutedDimsArray{T, N, <:Any, <:Any, <:BlockSparseArrays.AbstractBlockSparseArray}}}})
@ BlockSparseArrays ~/.julia/dev/BlockSparseArrays/src/abstractblocksparsearray/wrappedabstractblocksparsearray.jl:88
blocktype(::Union{BlockSparseArrays.AbstractBlockSparseArray{T, N}, Base.LogicalIndex{T, <:BlockSparseArrays.AbstractBlockSparseArray}, Base.ReinterpretArray{T, N, <:Any, <:Union{SubArray{<:Any, <:Any, var"#s14"}, var"#s14"}} where var"#s14"<:BlockSparseArrays.AbstractBlockSparseArray, Base.ReshapedArray{T, N, <:Union{Base.ReinterpretArray{<:Any, <:Any, <:Any, <:Union{SubArray{<:Any, <:Any, var"#s15"}, var"#s15"}}, SubArray{<:Any, <:Any, var"#s15"}, var"#s15"}} where var"#s15"<:BlockSparseArrays.AbstractBlockSparseArray, SubArray{T, N, <:Union{Base.ReinterpretArray{<:Any, <:Any, <:Any, <:Union{SubArray{<:Any, <:Any, var"#s16"}, var"#s16"}}, Base.ReshapedArray{<:Any, <:Any, <:Union{Base.ReinterpretArray{<:Any, <:Any, <:Any, <:Union{SubArray{<:Any, <:Any, var"#s16"}, var"#s16"}}, SubArray{<:Any, <:Any, var"#s16"}, var"#s16"}}, var"#s16"}} where var"#s16"<:BlockSparseArrays.AbstractBlockSparseArray, LinearAlgebra.Adjoint{T, <:BlockSparseArrays.AbstractBlockSparseArray{T, N}}, LinearAlgebra.Diagonal{T, <:BlockSparseArrays.AbstractBlockSparseArray{T, N}}, LinearAlgebra.LowerTriangular{T, <:BlockSparseArrays.AbstractBlockSparseArray{T, N}}, LinearAlgebra.Symmetric{T, <:BlockSparseArrays.AbstractBlockSparseArray{T, N}}, LinearAlgebra.Transpose{T, <:BlockSparseArrays.AbstractBlockSparseArray{T, N}}, LinearAlgebra.Tridiagonal{T, <:BlockSparseArrays.AbstractBlockSparseArray{T, N}}, LinearAlgebra.UnitLowerTriangular{T, <:BlockSparseArrays.AbstractBlockSparseArray{T, N}}, LinearAlgebra.UnitUpperTriangular{T, <:BlockSparseArrays.AbstractBlockSparseArray{T, N}}, LinearAlgebra.UpperTriangular{T, <:BlockSparseArrays.AbstractBlockSparseArray{T, N}}, PermutedDimsArray{T, N, <:Any, <:Any, <:BlockSparseArrays.AbstractBlockSparseArray}} where {T, N})
@ BlockSparseArrays ~/.julia/dev/BlockSparseArrays/src/abstractblocksparsearray/wrappedabstractblocksparsearray.jl:87
Stacktrace:
[1] top-level scope
@ REPL[34]:1
That will be useful in generic code. Like BlockArrays.jl, we should in general use a convention that non-blocked arrays act like block sparse arrays with a single stored block.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reproducing the BlockSparseArrays.blocktype(randn(2, 2)) error and read the existing methods in src/abstractblocksparsearray/wrappedabstractblocksparsearray.jl, especially around lines 87–88. Compare the current convention with BlockArrays.jl as suggested in the issue, then verify that dense arrays are treated as having one stored block and that generic calls work.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- julia
- Domain
- data
- Issue type
- Feature
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100