Skip to content

Commit fcf4241

Browse files
author
Michael Abbott
committed
cleaner handling of wrappers
1 parent 8ff23fb commit fcf4241

File tree

2 files changed

+37
-8
lines changed

2 files changed

+37
-8
lines changed

src/LazyStack.jl

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -190,10 +190,9 @@ function stack_iter(itr)
190190

191191
w, val = vstack_plus(itr)
192192

193-
z = reshape(w, size(val)..., outsize...)::Array
193+
z = reshape(w, size(val)..., outsize...)
194194

195-
z′ = maybe_add_offsets(z, val)
196-
maybe_add_names(z′, val)
195+
rewrap_like(z, val)
197196
end
198197

199198
vstack(itr) = first(vstack_plus(itr))
@@ -278,8 +277,11 @@ no_offsets(a::OffsetArray) = parent(a)
278277

279278
similar_vector(a::OffsetArray, n::Int) = similar_vector(parent(a), n)
280279

281-
maybe_add_offsets(A, a) = A
282-
maybe_add_offsets(A, a::OffsetArray) = OffsetArray(A, axes(a)..., axes(A, ndims(A)))
280+
rewrap_like(A, a) = A
281+
function rewrap_like(A, a::OffsetArray)
282+
B = rewrap_like(A, parent(a))
283+
OffsetArray(B, axes(a)..., axes(A, ndims(A)))
284+
end
283285

284286
#===== NamedDims =====#
285287

@@ -320,9 +322,12 @@ function stack(xs::Base.Generator{<:Iterators.ProductIterator{<:Tuple{<:NamedDim
320322
ensure_named(w, l)
321323
end
322324

323-
maybe_add_names(A, a) = A
324-
maybe_add_names(A, a::NamedDimsArray{L}) where {L} =
325-
ensure_named(A, (L..., ntuple(_ -> :_, ndims(A) - ndims(a))...))
325+
function rewrap_like(A, a::NamedDimsArray{L}) where {L}
326+
B = rewrap_like(A, parent(a))
327+
ensure_named(B, (L..., ntuple(_ -> :_, ndims(A) - ndims(a))...))
328+
end
329+
330+
no_offsets(a::NamedDimsArray) = no_offsets(parent(a)) # perhaps rename to no_wrap?
326331

327332
"""
328333
stack(name, things...)

test/runtests.jl

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ end
125125

126126
oin = [OffsetArray(ones(3), 3:5) for i in 1:4]
127127
@test axes(stack(oin)) == (3:5, 1:4)
128+
@test axes(stack(oin...)) == (3:5, 1:4)
128129
@test axes(copy(stack(oin))) == (3:5, 1:4)
129130

130131
oout = OffsetArray([ones(3) for i in 1:4], 11:14)
@@ -134,6 +135,29 @@ end
134135
ogen = (OffsetArray([3,4,5], 3:5) for i in 1:4)
135136
@test axes(stack(ogen)) == (3:5, 1:4)
136137

138+
end
139+
@testset "named offset" begin
140+
141+
noin = [NamedDimsArray(OffsetArray(ones(3), 3:5), :a) for i in 1:4]
142+
@test dimnames(stack(noin)) == (:a, :_)
143+
@test dimnames(stack(noin...)) == (:a, :_)
144+
@test dimnames(stack(:b, noin)) == (:a, :b)
145+
@test dimnames(stack(:b, noin...)) == (:a, :b)
146+
@test axes(stack(noin)) == (3:5, 1:4)
147+
@test axes(stack(noin...)) == (3:5, 1:4)
148+
149+
noout = NamedDimsArray(OffsetArray([ones(3) for i in 1:4], 11:14), :b)
150+
@test dimnames(stack(noout)) == (:_, :b)
151+
@test dimnames(stack(:b, noout)) == (:_, :b)
152+
@test_throws Exception stack(:c, noout)
153+
@test axes(stack(noout)) == (1:3, 11:14)
154+
@test axes(copy(stack(noout))) == (1:3, 11:14)
155+
156+
nogen = (NamedDimsArray(OffsetArray([3,4,5], 3:5), :a) for i in 1:4)
157+
@test dimnames(stack(nogen)) == (:a, :_)
158+
@test dimnames(stack(:b, nogen)) == (:a, :b)
159+
@test axes(stack(nogen)) == (3:5, 1:4)
160+
137161
end
138162
@testset "push!" begin
139163

0 commit comments

Comments
 (0)