Skip to content

Commit df82715

Browse files
authored
Merge pull request #27 from mcabbott/eachslice
Add eachslice
2 parents 8e9aad3 + 9c4bb98 commit df82715

File tree

2 files changed

+18
-0
lines changed

2 files changed

+18
-0
lines changed

src/functions.jl

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,19 @@ function Base.permutedims(A::KeyedArray, perm)
8181
KeyedArray(data, new_keys)#, copy(A.meta))
8282
end
8383

84+
if VERSION >= v"1.1"
85+
# This copies the implementation from Base, except with numerical_dims:
86+
@inline function Base.eachslice(A::KeyedArray; dims)
87+
numerical_dims = hasnames(A) ? NamedDims.dim(dimnames(A), dims) : dims
88+
length(numerical_dims) == 1 || throw(ArgumentError("only single dimensions are supported"))
89+
dim = first(numerical_dims)
90+
dim <= ndims(A) || throw(DimensionMismatch("A doesn't have $dim dimensions"))
91+
inds_before = ntuple(d->(:), dim-1)
92+
inds_after = ntuple(d->(:), ndims(A)-dim)
93+
return (view(A, inds_before..., i, inds_after...) for i in axes(A, dim))
94+
end
95+
end
96+
8497
function Base.mapslices(f, A::KeyedArray; dims)
8598
numerical_dims = hasnames(A) ? NamedDims.dim(dimnames(A), dims) : dims
8699
data = mapslices(f, parent(A); dims=dims)

test/_functions.jl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@ A3 = wrapdims(rand(Int8, 3,4,2), r='a':'c', c=2:5, p=[10.0, 20.0])
4141
axiskeys(V2', 2)[1] = :zed
4242
@test axiskeys(V2,1) == [:zed, :b, :c]
4343

44+
# eachslice
45+
if VERSION >= v"1.1"
46+
@test axiskeys(first(eachslice(M, dims=:r))) === (2:5,)
47+
end
48+
4449
# mapslices
4550
@test axiskeys(mapslices(identity, M, dims=1)) === (Base.OneTo(3), 2:5)
4651
@test axiskeys(mapslices(sum, M, dims=1)) === (Base.OneTo(1), 2:5)

0 commit comments

Comments
 (0)