Skip to content

Commit c886707

Browse files
authored
Merge pull request #135 from JuliaArrays/reshapereinterpretdensedims
Add dense_dims support for reinterpret(reshape, ...)
2 parents 614f34d + 721179e commit c886707

File tree

3 files changed

+22
-6
lines changed

3 files changed

+22
-6
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "ArrayInterface"
22
uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9"
3-
version = "3.1.5"
3+
version = "3.1.6"
44

55
[deps]
66
IfElse = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173"

src/stridelayout.jl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,12 @@ end
284284
function dense_dims(::Type{S}) where {N,NP,T,A<:AbstractArray{T,NP},I,S<:SubArray{T,N,A,I}}
285285
return _dense_dims(S, dense_dims(A), Val(stride_rank(A)))
286286
end
287+
if VERSION v"1.6.0-DEV.1581"
288+
@inline function dense_dims(::Type{A}) where {NB, NA, B <: AbstractArray{<:Any,NB},A<: Base.ReinterpretArray{<:Any, NA, <:Any, B, true}}
289+
ddb = dense_dims(B)
290+
IfElse.ifelse(Static.le(StaticInt(NB), StaticInt(NA)), (True(), ddb...), Base.tail(ddb))
291+
end
292+
end
287293

288294
_dense_dims(::Type{S}, ::Nothing, ::Val{R}) where {R,N,NP,T,A<:AbstractArray{T,NP},I,S<:SubArray{T,N,A,I}} = nothing
289295
@generated function _dense_dims(

test/runtests.jl

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -468,10 +468,10 @@ end
468468
M = @MArray zeros(2,3,4); Mp = @view(PermutedDimsArray(M,(3,1,2))[:,2,:])';
469469
Sp2 = @view(PermutedDimsArray(S,(3,2,1))[2:3,:,:]);
470470
Mp2 = @view(PermutedDimsArray(M,(3,1,2))[2:3,:,2])';
471-
D = @view(A[:,2:2:4,:])
472-
R = StaticInt(1):StaticInt(2)
473-
Rnr = reinterpret(Int32, R)
474-
Ar = reinterpret(Float32, A)
471+
D = @view(A[:,2:2:4,:]);
472+
R = StaticInt(1):StaticInt(2);
473+
Rnr = reinterpret(Int32, R);
474+
Ar = reinterpret(Float32, A);
475475

476476
sv5 = @SVector(zeros(5)); v5 = Vector{Float64}(undef, 5);
477477
@test @inferred(ArrayInterface.size(sv5)) === (StaticInt(5),)
@@ -611,15 +611,25 @@ end
611611

612612
colormat = reinterpret(reshape, Float64, colors)
613613
@test @inferred(ArrayInterface.strides(colormat)) === (StaticInt(1), StaticInt(3))
614-
614+
@test @inferred(ArrayInterface.dense_dims(colormat)) === (True(),True())
615+
@test @inferred(ArrayInterface.dense_dims(view(colormat,:,4))) === (True(),)
616+
@test @inferred(ArrayInterface.dense_dims(view(colormat,:,4:7))) === (True(),True())
617+
@test @inferred(ArrayInterface.dense_dims(view(colormat,2:3,:))) === (True(),False())
618+
615619
Rr = reinterpret(reshape, Int32, R)
616620
@test @inferred(ArrayInterface.size(Rr)) === (StaticInt(2),StaticInt(2))
617621
@test @inferred(ArrayInterface.known_size(Rr)) === (2, 2)
618622

623+
619624
Sr = Wrapper(reinterpret(reshape, Complex{Int64}, S))
620625
@test @inferred(ArrayInterface.size(Sr)) == (static(3), static(4))
621626
@test @inferred(ArrayInterface.known_size(Sr)) === (3, 4)
622627
@test @inferred(ArrayInterface.strides(Sr)) === (static(1), static(3))
628+
Sr2 = reinterpret(reshape, Complex{Int64}, S);
629+
@test @inferred(ArrayInterface.dense_dims(Sr2)) === (True(),True())
630+
@test @inferred(ArrayInterface.dense_dims(view(Sr2,:,2))) === (True(),)
631+
@test @inferred(ArrayInterface.dense_dims(view(Sr2,:,2:3))) === (True(),True())
632+
@test @inferred(ArrayInterface.dense_dims(view(Sr2,2:3,:))) === (True(),False())
623633
end
624634
end
625635

0 commit comments

Comments
 (0)