Skip to content

Commit 12b8f8d

Browse files
use maplayers in (un)mergedims (#959)
* use maplayers in (un)mergedims * test unmergedims on a dimstack
1 parent b81d002 commit 12b8f8d

2 files changed

Lines changed: 26 additions & 25 deletions

File tree

src/stack/stack.jl

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -251,20 +251,18 @@ function mergedims(st::AbstractDimStack, dim_pairs::Pair...)
251251
end
252252
isempty(dim_pairs) && return st
253253
# Extend missing dimensions in all layers
254-
extended_layers = map(layers(st)) do layer
255-
if all(map((ds...) -> all(hasdim(layer, ds)), map(first, dim_pairs)...))
254+
maplayers(st) do layer
255+
extended_layer = if all(map((ds...) -> all(hasdim(layer, ds)), map(first, dim_pairs)...))
256256
layer
257257
else
258258
DimExtensionArray(layer, dims(st))
259259
end
260+
mergedims(extended_layer, dim_pairs...)
260261
end
261-
262-
vals = map(A -> mergedims(A, dim_pairs...), extended_layers)
263-
return rebuild_from_arrays(st, vals)
264262
end
265263

266264
function unmergedims(s::AbstractDimStack, original_dims)
267-
return map(A -> unmergedims(A, original_dims), s)
265+
return maplayers(A -> unmergedims(A, original_dims), s)
268266
end
269267

270268
@noinline _stack_size_mismatch() = throw(ArgumentError("Arrays must have identical axes. For mixed dimensions, use DimArrays`"))

test/merged.jl

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -66,24 +66,27 @@ end
6666

6767
@testset "unmerge" begin
6868
a = DimArray(rand(32, 32, 3), (X,Y,Dim{:band}))
69-
merged = mergedims(a, (X, Y) => :geometry)
70-
unmerged = unmergedims(merged, dims(a))
71-
perm_unmerged = unmergedims(permutedims(merged, (2,1)), dims(a))
72-
73-
# Test Merge
74-
@test hasdim(merged, Dim{:band})
75-
@test hasdim(merged, Dim{:geometry})
76-
@test !hasdim(merged, X)
77-
@test !hasdim(merged, Y)
78-
@test size(merged) == (3, 32 * 32)
69+
b = DimStack((;a))
70+
for a in (a, b)
71+
merged = mergedims(a, (X, Y) => :geometry)
72+
unmerged = unmergedims(merged, dims(a))
73+
perm_unmerged = unmergedims(permutedims(merged, (2,1)), dims(a))
74+
75+
# Test Merge
76+
@test hasdim(merged, Dim{:band})
77+
@test hasdim(merged, Dim{:geometry})
78+
@test !hasdim(merged, X)
79+
@test !hasdim(merged, Y)
80+
@test size(merged) == (3, 32 * 32)
7981

80-
# Test Unmerge
81-
@test hasdim(unmerged, X)
82-
@test hasdim(unmerged, Y)
83-
@test hasdim(unmerged, Dim{:band})
84-
@test !hasdim(unmerged, Dim{:geometry})
85-
@test dims(unmerged) == dims(a)
86-
@test size(unmerged) == size(a)
87-
@test all(a .== unmerged)
88-
@test all(a .== perm_unmerged)
82+
# Test Unmerge
83+
@test hasdim(unmerged, X)
84+
@test hasdim(unmerged, Y)
85+
@test hasdim(unmerged, Dim{:band})
86+
@test !hasdim(unmerged, Dim{:geometry})
87+
@test dims(unmerged) == dims(a)
88+
@test size(unmerged) == size(a)
89+
@test all(a .== unmerged)
90+
@test all(a .== perm_unmerged)
91+
end
8992
end

0 commit comments

Comments
 (0)