@@ -189,19 +189,27 @@ function Base.view(
189
189
) where {T,N}
190
190
return viewblock (a, block... )
191
191
end
192
- # Fix ambiguity error with BlockArrays.jl.
192
+
193
+ # Disambiguate between block reindexing of blockwise views
194
+ # (`BlockSliceCollection`) and subblockwise views (`SubBlockSliceCollection`),
195
+ # which both include `Base.Slice`.
193
196
function Base. view (
194
- a:: SubArray {
195
- T,
196
- N,
197
- <: AbstractBlockSparseArray{T,N} ,
198
- <: Tuple {Vararg{Union{Base. Slice,BlockSlice{Union{},<: Integer }},N}},
199
- },
197
+ a:: SubArray{T,N,<:AbstractBlockSparseArray{T,N},<:Tuple{Vararg{Base.Slice,N}}} ,
200
198
block:: Block{N} ,
201
199
) where {T,N}
202
200
return viewblock (a, block)
203
201
end
204
202
203
+ # Block reindexing of blockwise views (`BlockSliceCollection`).
204
+ function viewblock_blockslice (a:: SubArray{<:Any,N} , block:: Vararg{Block{1},N} ) where {N}
205
+ I = CartesianIndex (Int .(block))
206
+ # TODO : Use `eachblockstoredindex`.
207
+ if I ∈ eachstoredindex (blocks (a))
208
+ return blocks (a)[I]
209
+ end
210
+ return BlockView (parent (a), Block .(Base. reindex (parentindices (blocks (a)), Tuple (I))))
211
+ end
212
+
205
213
# XXX : TODO : Distinguish if a sub-view of the block needs to be taken!
206
214
# Define a new `SubBlockSlice` which is used in:
207
215
# `@interface interface(a) to_indices(a, inds, I::Tuple{UnitRange{<:Integer},Vararg{Any}})`
@@ -211,12 +219,17 @@ function BlockArrays.viewblock(
211
219
a:: SubArray{T,N,<:AbstractBlockSparseArray{T,N},<:Tuple{Vararg{BlockSliceCollection,N}}} ,
212
220
block:: Vararg{Block{1},N} ,
213
221
) where {T,N}
214
- I = CartesianIndex (Int .(block))
215
- # TODO : Use `eachblockstoredindex`.
216
- if I ∈ eachstoredindex (blocks (a))
217
- return blocks (a)[I]
218
- end
219
- return BlockView (parent (a), Block .(Base. reindex (parentindices (blocks (a)), Tuple (I))))
222
+ return viewblock_blockslice (a, block... )
223
+ end
224
+
225
+ # Disambiguate between block reindexing of blockwise views
226
+ # (`BlockSliceCollection`) and subblockwise views (`SubBlockSliceCollection`),
227
+ # which both include `Base.Slice`.
228
+ function BlockArrays. viewblock (
229
+ a:: SubArray{T,N,<:AbstractBlockSparseArray{T,N},<:Tuple{Vararg{Base.Slice,N}}} ,
230
+ block:: Vararg{Block{1},N} ,
231
+ ) where {T,N}
232
+ return viewblock_blockslice (a, block... )
220
233
end
221
234
222
235
function to_blockindexrange (
0 commit comments