Skip to content

Commit fc6da2c

Browse files
authored
Merge pull request #95 from invenia/axistrait-types
Make axistrait operate on types
2 parents 784e3d4 + 6e1b294 commit fc6da2c

File tree

3 files changed

+14
-6
lines changed

3 files changed

+14
-6
lines changed

src/core.jl

+9-5
Original file line numberDiff line numberDiff line change
@@ -516,6 +516,7 @@ immutable Unsupported <: AxisTrait end
516516

517517
"""
518518
axistrait(ax::Axis) -> Type{<:AxisTrait}
519+
axistrait{T}(::Type{T}) -> Type{<:AxisTrait}
519520
520521
Returns the indexing type of an `Axis`, any subtype of `AxisTrait`.
521522
The default is `Unsupported`, meaning there is no special indexing behaviour for this axis
@@ -528,13 +529,16 @@ User-defined axis types can be added along with custom indexing behaviors by def
528529
methods of this function. Here is the example of adding a custom Dimensional axis:
529530
530531
```julia
531-
AxisArrays.axistrait(v::MyCustomAxis) = AxisArrays.Dimensional
532+
AxisArrays.axistrait(::Type{MyCustomAxis}) = AxisArrays.Dimensional
532533
```
533534
"""
534-
axistrait(::Any) = Unsupported
535-
axistrait(ax::Axis) = axistrait(ax.val)
536-
axistrait{T<:Union{Number, Dates.AbstractTime}}(::AbstractVector{T}) = Dimensional
537-
axistrait{T<:Union{Symbol, AbstractString}}(::AbstractVector{T}) = Categorical
535+
axistrait{T}(::T) = axistrait(T)
536+
axistrait{T}(::Type{T}) = Unsupported
537+
axistrait{name, T}(::Type{Axis{name, T}}) = axistrait(T)
538+
axistrait{T<:AbstractVector}(::Type{T}) = _axistrait_el(eltype(T))
539+
_axistrait_el{T<:Union{Number, Dates.AbstractTime}}(::Type{T}) = Dimensional
540+
_axistrait_el{T<:Union{Symbol, AbstractString}}(::Type{T}) = Categorical
541+
_axistrait_el{T}(::Type{T}) = Unsupported
538542

539543
checkaxis(ax::Axis) = checkaxis(ax.val)
540544
checkaxis(ax) = checkaxis(axistrait(ax), ax)

src/sortedvector.jl

+1-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ Base.size(v::SortedVector) = size(v.data)
6565
Base.size(v::SortedVector, i) = size(v.data, i)
6666
Base.indices(v::SortedVector) = indices(v.data)
6767

68-
axistrait(::SortedVector) = Dimensional
68+
axistrait{T}(::Type{SortedVector{T}}) = Dimensional
6969
checkaxis(::SortedVector) = nothing
7070

7171

test/core.jl

+4
Original file line numberDiff line numberDiff line change
@@ -187,9 +187,13 @@ A = @inferred(AxisArray(vals, Axis{:Timestamp}(dt-Dates.Hour(2):Dates.Hour(1):dt
187187
@test A[dt, :].data == vals[3, :]
188188

189189
@test AxisArrays.axistrait(A.axes[1]) == AxisArrays.Dimensional
190+
@test AxisArrays.axistrait(typeof(A.axes[1])) == AxisArrays.Dimensional
190191
@test AxisArrays.axistrait(A.axes[1].val) == AxisArrays.Dimensional
192+
@test AxisArrays.axistrait(typeof(A.axes[1].val)) == AxisArrays.Dimensional
191193
@test AxisArrays.axistrait(A.axes[2]) == AxisArrays.Categorical
194+
@test AxisArrays.axistrait(typeof(A.axes[2])) == AxisArrays.Categorical
192195
@test AxisArrays.axistrait(A.axes[2].val) == AxisArrays.Categorical
196+
@test AxisArrays.axistrait(typeof(A.axes[2].val)) == AxisArrays.Categorical
193197

194198
@test_throws ArgumentError AxisArrays.checkaxis(Axis{:x}(10:-1:1))
195199
@test_throws ArgumentError AxisArrays.checkaxis(10:-1:1)

0 commit comments

Comments
 (0)