diff --git a/src/PyramidScheme.jl b/src/PyramidScheme.jl index 3021faa..d0457e8 100644 --- a/src/PyramidScheme.jl +++ b/src/PyramidScheme.jl @@ -124,10 +124,10 @@ end Pyramid(newbase, newlevels, DD.metadata(A)) end -function Base.map(f, A::Pyramid) - newbase = map(f, parent(A)) - newlevels = [map(f, levels(A,i)) for i in 1:nlevels(A)] - Pyramid(newbase, newlevels, DD.metadata(A)) # This should handle metadata better. +function Base.map(f, A1::Pyramid, As::Pyramid...) + newbase = map(f, parent(A1), parent.(As)...) + newlevels = [map(f, levels(A1,i), levels.(As, i)...) for i in 1:nlevels(A1)] + Pyramid(newbase, newlevels, DD.metadata(A1)) # This should handle metadata better. end function DD.show_after(io::IO, mime, A::Pyramid) diff --git a/test/runtests.jl b/test/runtests.jl index 4adad5b..30cf63a 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -140,6 +140,21 @@ end end end +@testitem "Map of pyramids" begin + using DimensionalData + pyr1 = Pyramid(fill(1,X(1:128),Y(1:128)), tilesize=16) + pyr2 = Pyramid(fill(1, X(1:128),Y(1:128)), tilesize=16, resampling_method=sum) + pyr1_neg = map(x-> x-1, pyr1) + @test all(all.(iszero, pyr1_neg.levels)) + @test iszero(pyr1_neg.base) + pyr2_neg = map(x-> x-1, pyr2) + @test pyr2_neg.levels[1][1,1] == 3 + + pyrsum = map((x,y) -> x + y, pyr1, pyr2) + @test pyrsum[100,30] == 2 + @test pyrsum.levels[1][10,10] == 5 + @test pyrsum.levels[2][10,10] == 17 +end #=