Skip to content

Commit 3f17853

Browse files
authored
Merge pull request #245 from tmigot/make-subarray
MakeArray compatible with subarray
2 parents 9d1a99b + d814d37 commit 3f17853

File tree

3 files changed

+31
-1
lines changed

3 files changed

+31
-1
lines changed

Project.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9"
1111
DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
1212
IfElse = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173"
1313
LabelledArrays = "2ee39098-c373-598a-b85f-a56591580800"
14+
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
1415
NaNMath = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3"
1516
Setfield = "efcf1570-3423-57d1-acb7-fd33fddbac46"
1617
SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"

src/code.jl

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module Code
22

3-
using StaticArrays, LabelledArrays, SparseArrays
3+
using StaticArrays, LabelledArrays, SparseArrays, LinearAlgebra
44

55
export toexpr, Assignment, (), Let, Func, DestructuredArgs, LiteralExpr,
66
SetArray, MakeArray, MakeSparseArray, MakeTuple, AtIndex,
@@ -394,6 +394,14 @@ end
394394
_create_array(A, T, d, elems...)
395395
end
396396

397+
@inline function create_array(A::Type{<:SubArray{T,N,P,I,L}}, S, d::Val, elems...) where {T,N,P,I,L}
398+
create_array(P, S, d, elems...)
399+
end
400+
401+
@inline function create_array(A::Type{<:PermutedDimsArray{T,N,perm,iperm,P}}, S, d::Val, elems...) where {T,N,perm,iperm,P}
402+
create_array(P, S, d, elems...)
403+
end
404+
397405
## Matrix
398406

399407
@inline function create_array(::Type{<:Matrix}, ::Nothing, ::Val{dims}, elems...) where dims
@@ -404,6 +412,14 @@ end
404412
Base.typed_hvcat(T, dims, elems...)
405413
end
406414

415+
@inline function create_array(A::Type{<:Transpose{T,P}}, S, d::Val, elems...) where {T,P}
416+
create_array(P, S, d, elems...)
417+
end
418+
419+
@inline function create_array(A::Type{<:UpperTriangular{T,P}}, S, d::Val, elems...) where {T,P}
420+
create_array(P, S, d, elems...)
421+
end
422+
407423
## SArray
408424
@inline function create_array(::Type{<:SArray}, ::Nothing, ::Val{dims}, elems...) where dims
409425
SArray{Tuple{dims...}}(elems...)

test/code.jl

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ using SymbolicUtils.Code: LazyState
44
using StaticArrays
55
using LabelledArrays
66
using SparseArrays
7+
using LinearAlgebra
78

89
test_repr(a, b) = @test repr(Base.remove_linenums!(a)) == repr(Base.remove_linenums!(b))
910

@@ -89,6 +90,18 @@ test_repr(a, b) = @test repr(Base.remove_linenums!(a)) == repr(Base.remove_linen
8990
@test eval(toexpr(Let([a 1, b 2, arr [1,2]],
9091
MakeArray([a,b,a+b,a/b], arr)))) == [1, 2, 3, 1/2]
9192

93+
@test eval(toexpr(Let([a 1, b 2, arr [1,2]],
94+
MakeArray(view([a,b,a+b,a/b], :), arr)))) == [1, 2, 3, 1/2]
95+
96+
@test eval(toexpr(Let([a 1, b 2, arr [1,2]],
97+
MakeArray(PermutedDimsArray([a b;a+b a/b], (1,2)), arr)))) == [1 2 ; 3 1/2]
98+
99+
@test eval(toexpr(Let([a 1, b 2, arr [1,2]],
100+
MakeArray(transpose([a b;a+b a/b]), arr)))) == [1 3;2 1/2]
101+
102+
@test eval(toexpr(Let([a 1, b 2, arr [1,2]],
103+
MakeArray(UpperTriangular([a b;a+b a/b]), arr)))) == [1 2;0 1/2]
104+
92105
@test eval(toexpr(Let([a 1, b 2, arr [1,2]],
93106
MakeArray([a b;a+b a/b], arr)))) == [1 2; 3 1/2]
94107

0 commit comments

Comments
 (0)