@@ -30,13 +30,14 @@ using SparseArraysBase:
3030
3131# A return type for `blocks(array)` when `array` isn't blocked.
3232# Represents a vector with just that single block.
33- struct SingleBlockView{T, N,Array<: AbstractArray{T ,N} } <: AbstractArray{T ,N}
33+ struct SingleBlockView{N,Array<: AbstractArray{<:Any ,N} } <: AbstractArray{Array ,N}
3434 array:: Array
3535end
3636Base. parent (a:: SingleBlockView ) = a. array
37+ Base. size (a:: SingleBlockView ) = ntuple (Returns (1 ), ndims (a))
3738blocks_maybe_single (a) = blocks (a)
3839blocks_maybe_single (a:: Array ) = SingleBlockView (a)
39- function Base. getindex (a:: SingleBlockView{<:Any, N} , index:: Vararg{Int,N} ) where {N}
40+ function Base. getindex (a:: SingleBlockView{N} , index:: Vararg{Int,N} ) where {N}
4041 @assert all (isone, index)
4142 return parent (a)
4243end
@@ -289,13 +290,6 @@ function blockrange(axis::AbstractUnitRange, r::Int)
289290 return error (" Slicing with integer values isn't supported." )
290291end
291292
292- function blockrange (axis:: AbstractUnitRange , r:: AbstractVector{<:Block{1}} )
293- for b in r
294- @assert b ∈ blockaxes (axis, 1 )
295- end
296- return r
297- end
298-
299293# This handles changing the blocking, for example:
300294# a = BlockSparseArray{Float64}([2, 2, 2, 2], [2, 2, 2, 2])
301295# I = blockedrange([4, 4])
@@ -314,13 +308,20 @@ end
314308# I = BlockedVector([Block(4), Block(3), Block(2), Block(1)], [2, 2])
315309# I = BlockVector([Block(4), Block(3), Block(2), Block(1)], [2, 2])
316310# a[I, I]
317- function blockrange (axis:: BlockedOneTo{<:Integer} , r:: AbstractBlockVector{<:Block{1}} )
311+ function blockrange (axis:: AbstractUnitRange , r:: AbstractBlockVector{<:Block{1}} )
318312 for b in r
319313 @assert b ∈ blockaxes (axis, 1 )
320314 end
321315 return only (blockaxes (r))
322316end
323317
318+ function blockrange (axis:: AbstractUnitRange , r:: AbstractVector{<:Block{1}} )
319+ for b in r
320+ @assert b ∈ blockaxes (axis, 1 )
321+ end
322+ return r
323+ end
324+
324325using BlockArrays: BlockSlice
325326function blockrange (axis:: AbstractUnitRange , r:: BlockSlice )
326327 return blockrange (axis, r. block)
@@ -357,7 +358,11 @@ function blockrange(axis::AbstractUnitRange, r::Base.Slice)
357358end
358359
359360function blockrange (axis:: AbstractUnitRange , r:: NonBlockedVector )
360- return Block (1 ): Block (1 )
361+ return Block .(Base. OneTo (1 ))
362+ end
363+
364+ function blockrange (axis:: AbstractUnitRange , r:: AbstractVector{<:Integer} )
365+ return Block .(Base. OneTo (1 ))
361366end
362367
363368function blockrange (axis:: AbstractUnitRange , r)
0 commit comments