Skip to content

Commit 26ecdbe

Browse files
authored
Merge pull request #38 from jw3126/named_axiskeys
add named_axiskeys
2 parents ec293e1 + 2695012 commit 26ecdbe

File tree

3 files changed

+37
-3
lines changed

3 files changed

+37
-3
lines changed

src/AxisKeys.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ export KeyedArray, axiskeys
66
include("lookup.jl")
77

88
include("names.jl")
9-
export NamedDimsArray, dimnames
9+
export NamedDimsArray, dimnames, named_axiskeys
1010

1111
include("wrap.jl")
1212
export wrapdims

src/names.jl

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,9 @@ end
6363
# getproperty: it's useful to say for `(i,t) in enumerate(A.time)` etc.
6464
# This will make saying ".data" slow (by 30ns), fixed in NamedDims.jl#78
6565

66-
Base.propertynames(A::NdaKa{L}, private=false) where {L} =
66+
Base.propertynames(A::NdaKa{L}, private::Bool=false) where {L} =
6767
private ? (L..., fieldnames(typeof(A))...) : L
68-
Base.propertynames(A::KaNda{L}, private=false) where {L} =
68+
Base.propertynames(A::KaNda{L}, private::Bool=false) where {L} =
6969
private ? (L..., fieldnames(typeof(A))...) : L
7070

7171
Base.getproperty(A::NdaKa{L}, s::Symbol) where {L} =
@@ -130,3 +130,23 @@ function NamedDims.NamedDimsArray(A::AbstractArray; kw...)
130130
map(x -> axes(x, 1), R) == axes(A) || throw(ArgumentError("axes of keys must match axes of array"))
131131
NamedDimsArray(KeyedArray(A, R), L)
132132
end
133+
134+
"""
135+
named_axiskeys(arr)::NamedTuple
136+
137+
Return the [`axiskeys`](@ref) along with their names.
138+
If there are duplicate names or unnamed axes, an error is thrown.
139+
140+
```jldoctest
141+
julia> using AxisKeys
142+
143+
julia> arr = KeyedArray([1 2], x=[1], y=[2,3]);
144+
145+
julia> named_axiskeys(arr)
146+
(x = [1], y = [2, 3])
147+
```
148+
"""
149+
function named_axiskeys(arr)::NamedTuple
150+
NT = NamedTuple{dimnames(arr)}
151+
return NT(axiskeys(arr))
152+
end

test/_basic.jl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,21 @@ using Test, AxisKeys
6363
@test_throws Exception wrapdims(rand(5), ['a','b','c'])
6464
@test_throws Exception KeyedArray(rand(5), ['a','b','c'])
6565

66+
@testset "named_axiskeys" begin
67+
arr = KeyedArray(randn(2,3), a=1:2, b=1:3)
68+
@inferred named_axiskeys(arr)
69+
@test named_axiskeys(arr) === (a=1:2, b=1:3)
70+
@test Tuple(named_axiskeys(arr)) === axiskeys(arr)
71+
72+
nonames = KeyedArray(randn(2,3), (1:2, 1:3))
73+
@test_throws ErrorException named_axiskeys(nonames)
74+
75+
v = KeyedArray(randn(3), x=1:3)
76+
dupnames = v .+ v'
77+
@test_throws ErrorException named_axiskeys(dupnames)
78+
end
6679
end
80+
6781
@testset "selectors" begin
6882

6983
V = wrapdims(rand(Int8, 11), 0:0.1:1)

0 commit comments

Comments
 (0)