Skip to content

Commit 3ca6cc7

Browse files
authored
Merge pull request #95 from SciML/densedimsubarrayfix
Added SubArrays indexed by vector support.
2 parents 361de11 + ac44fd1 commit 3ca6cc7

File tree

3 files changed

+8
-4
lines changed

3 files changed

+8
-4
lines changed

src/ArrayInterface.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -760,6 +760,7 @@ function __init__()
760760
end
761761
t
762762
end
763+
parent_type(::Type{<:StaticArrays.SizedArray{S, T, M, N, A}}) where {S,T,M,N,A} = A
763764
@require Adapt="79e6a3ab-5dfb-504d-930d-738a2a938a0e" begin
764765
function Adapt.adapt_storage(::Type{<:StaticArrays.SArray{S}},xs::Array) where S
765766
StaticArrays.SArray{S}(xs)

src/stridelayout.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -231,11 +231,11 @@ _dense_dims(::Any, ::Any) = nothing
231231
end
232232
dense_tup = Expr(:tuple)
233233
for np in 1:NP
234-
spₙ = sp[np]
235-
if I.parameters[np] <: Base.Slice
236-
push!(dense_tup.args, densev[np])
237-
elseif I.parameters[np] <: AbstractUnitRange
234+
Iₙₚ = I.parameters[np]
235+
if Iₙₚ <: AbstractUnitRange
238236
push!(dense_tup.args, densev[np])
237+
elseif Iₙₚ <: AbstractVector
238+
push!(dense_tup.args, false)
239239
end
240240
end
241241
# If n != N, then an axis was indexed by something other than an integer or `AbstractUnitRange`, so we return `nothing`.

test/runtests.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,9 @@ Base.getindex(::DummyZeros{T}, inds...) where {T} = zero(T)
351351
@test @inferred(dense_dims(@view(PermutedDimsArray(A,(3,1,2))[2:3,2,:]))) === ArrayInterface.DenseDims((false,false))
352352
@test @inferred(dense_dims(@view(PermutedDimsArray(A,(3,1,2))[2:3,2,:])')) === ArrayInterface.DenseDims((false,false))
353353
@test @inferred(dense_dims(@view(PermutedDimsArray(A,(3,1,2))[:,1:2,1])')) === ArrayInterface.DenseDims((true,false))
354+
@test @inferred(dense_dims(@view(PermutedDimsArray(A,(3,1,2))[2:3,:,[1,2]]))) === ArrayInterface.DenseDims((false,true,false))
355+
@test @inferred(dense_dims(@view(PermutedDimsArray(A,(3,1,2))[2:3,[1,2,3],:]))) === ArrayInterface.DenseDims((false,false,false))
356+
354357

355358
B = Array{Int8}(undef, 2,2,2,2);
356359
doubleperm = PermutedDimsArray(PermutedDimsArray(B,(4,2,3,1)), (4,2,1,3));

0 commit comments

Comments
 (0)