From cdf333a5fb34b424c07c1e12886d2581fabd094b Mon Sep 17 00:00:00 2001 From: mtfishman Date: Sat, 16 Aug 2025 19:59:37 -0400 Subject: [PATCH 1/2] More robust blockreshape --- Project.toml | 2 +- src/BlockArraysExtensions/BlockArraysExtensions.jl | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Project.toml b/Project.toml index 0ca7f6c7..37f25439 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "BlockSparseArrays" uuid = "2c9a651f-6452-4ace-a6ac-809f4280fbb4" authors = ["ITensor developers and contributors"] -version = "0.9.1" +version = "0.9.2" [deps] Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" diff --git a/src/BlockArraysExtensions/BlockArraysExtensions.jl b/src/BlockArraysExtensions/BlockArraysExtensions.jl index 4a86a980..26f8c27b 100644 --- a/src/BlockArraysExtensions/BlockArraysExtensions.jl +++ b/src/BlockArraysExtensions/BlockArraysExtensions.jl @@ -277,7 +277,13 @@ function _blockreshape(a::AbstractArray, axes::Tuple{Vararg{AbstractUnitRange}}) # TODO: Better converter here. return reshape(reshaped_blocks_a[I], block_axes_I) end - bs = Dict(Block(Tuple(I)) => f(I) for I in eachstoredindex(reshaped_blocks_a)) + bs = if iszero(storedlength(reshaped_blocks_a)) + # This branch only seems to be required in Julia 1.10, not Julia 1.11. + # TODO: Remove this branch once Julia 1.10 support is dropped. + Dict{Block{length(axes),Int},AbstractArray{eltype(a),length(axes)}}() + else + Dict(Block(Tuple(I)) => f(I) for I in eachstoredindex(reshaped_blocks_a)) + end return blocksparse(bs, axes) end From 484e347ea3f842369a3cefa0cfd2a11f59a7dab9 Mon Sep 17 00:00:00 2001 From: mtfishman Date: Sat, 16 Aug 2025 20:10:21 -0400 Subject: [PATCH 2/2] More general fix --- src/BlockArraysExtensions/BlockArraysExtensions.jl | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/BlockArraysExtensions/BlockArraysExtensions.jl b/src/BlockArraysExtensions/BlockArraysExtensions.jl index 26f8c27b..e690beef 100644 --- a/src/BlockArraysExtensions/BlockArraysExtensions.jl +++ b/src/BlockArraysExtensions/BlockArraysExtensions.jl @@ -277,12 +277,11 @@ function _blockreshape(a::AbstractArray, axes::Tuple{Vararg{AbstractUnitRange}}) # TODO: Better converter here. return reshape(reshaped_blocks_a[I], block_axes_I) end - bs = if iszero(storedlength(reshaped_blocks_a)) + bs = Dict(Block(Tuple(I)) => f(I) for I in eachstoredindex(reshaped_blocks_a)) + if !isconcretetype(eltype(bs)) # This branch only seems to be required in Julia 1.10, not Julia 1.11. # TODO: Remove this branch once Julia 1.10 support is dropped. - Dict{Block{length(axes),Int},AbstractArray{eltype(a),length(axes)}}() - else - Dict(Block(Tuple(I)) => f(I) for I in eachstoredindex(reshaped_blocks_a)) + bs = Dict{Block{length(axes),Int},AbstractArray{eltype(a),length(axes)}}() end return blocksparse(bs, axes) end