Skip to content
This repository has been archived by the owner on May 5, 2019. It is now read-only.

Commit

Permalink
Merge 5e4e8c0 into 42ebbf5
Browse files Browse the repository at this point in the history
  • Loading branch information
cjprybol committed Apr 15, 2017
2 parents 42ebbf5 + 5e4e8c0 commit 96bc68b
Show file tree
Hide file tree
Showing 4 changed files with 99 additions and 27 deletions.
10 changes: 0 additions & 10 deletions src/other/index.jl
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
# an AbstractIndex is a thing that can be used to look up ordered things by name, but that
# will also accept a position or set of positions or range or other things and pass them
# through cleanly.
# an Index is the usual implementation.
# a SimpleIndex only works if the things are integer indexes, which is weird.
@compat abstract type AbstractIndex end

type Index <: AbstractIndex # an OrderedDict would be nice here...
Expand Down Expand Up @@ -122,14 +120,6 @@ Base.getindex(x::AbstractIndex, idx::Range) = [idx;]
Base.getindex{T <: Real}(x::AbstractIndex, idx::AbstractVector{T}) = convert(Vector{Int}, idx)
Base.getindex(x::AbstractIndex, idx::AbstractVector{Symbol}) = [x.lookup[i] for i in idx]

type SimpleIndex <: AbstractIndex
length::Integer
end
SimpleIndex() = SimpleIndex(0)
Base.length(x::SimpleIndex) = x.length
Base.names(x::SimpleIndex) = nothing
_names(x::SimpleIndex) = nothing

# Helpers

function add_names(ind::Index, add_ind::Index)
Expand Down
27 changes: 11 additions & 16 deletions src/subdatatable/subdatatable.jl
Original file line number Diff line number Diff line change
Expand Up @@ -90,36 +90,31 @@ function SubDataTable{T <: AbstractVector{Int}}(parent::DataTable, rows::T)
end

function SubDataTable(parent::DataTable, row::Integer)
return SubDataTable(parent, [row])
return SubDataTable(parent, [Int(row)])
end

function SubDataTable{S <: Integer}(parent::DataTable, rows::AbstractVector{S})
return view(parent, Int(rows))
return SubDataTable(parent, convert(Vector{Int}, rows))
end


function Base.view{S <: Real}(dt::DataTable, rowinds::AbstractVector{S})
return SubDataTable(dt, rowinds)
function SubDataTable(parent::DataTable, rows::AbstractVector{Bool})
return SubDataTable(parent, find(rows))
end

function Base.view{S <: Real}(sdt::SubDataTable, rowinds::AbstractVector{S})
function SubDataTable{T<:Integer}(sdt::SubDataTable, rowinds::Union{T, AbstractVector{T}})
return SubDataTable(sdt.parent, sdt.rows[rowinds])
end

function Base.view(dt::DataTable, rowinds::AbstractVector{Bool})
return view(dt, getindex(SimpleIndex(size(dt, 1)), rowinds))
end

function Base.view(sdt::SubDataTable, rowinds::AbstractVector{Bool})
return view(sdt, getindex(SimpleIndex(size(sdt, 1)), rowinds))
function Base.view{T<:Nullable}(adt::AbstractDataTable, rowinds::AbstractVector{T})
return SubDataTable(adt, dropnull(rowinds))
end

function Base.view(adt::AbstractDataTable, rowinds::Integer)
return view(adt, Int[rowinds])
function Base.view(adt::AbstractDataTable, rowinds::Any)
return SubDataTable(adt, rowinds)
end

function Base.view(adt::AbstractDataTable, rowinds::Any)
return view(adt, getindex(SimpleIndex(size(adt, 1)), rowinds))
function Base.view(adt::AbstractDataTable, rowinds::Any, colinds::AbstractVector)
return view(adt[colinds], rowinds)
end

function Base.view(adt::AbstractDataTable, rowinds::Any, colinds::Any)
Expand Down
3 changes: 2 additions & 1 deletion test/runtests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ my_tests = ["utils.jl",
"join.jl",
"iteration.jl",
"duplicates.jl",
"show.jl"]
"show.jl",
"subdatatable.jl"]

println("Running tests:")

Expand Down
86 changes: 86 additions & 0 deletions test/subdatatable.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
module TestSubDataTable
using Base.Test
using DataTables

@testset "view -- DataTable" begin
dt = DataTable(x = 1:10, y = 1.0:10.0)
@test view(dt, 1) == head(dt, 1)
@test view(dt, UInt(1)) == head(dt, 1)
@test view(dt, BigInt(1)) == head(dt, 1)
@test view(dt, 1:2) == head(dt, 2)
@test view(dt, vcat(trues(2), falses(8))) == head(dt, 2)
@test view(dt, [1, 2]) == head(dt, 2)
@test view(dt, 1, :x) == head(dt[[:x]], 1)
@test view(dt, 1:2, :x) == head(dt[[:x]], 2)
@test view(dt, vcat(trues(2), falses(8)), :x) == head(dt[[:x]], 2)
@test view(dt, [1, 2], :x) == head(dt[[:x]], 2)
@test view(dt, 1, 1) == head(dt[[:x]], 1)
@test view(dt, 1:2, 1) == head(dt[[:x]], 2)
@test view(dt, vcat(trues(2), falses(8)), 1) == head(dt[[:x]], 2)
@test view(dt, [1, 2], 1) == head(dt[[:x]], 2)
@test view(dt, 1, [:x, :y]) == head(dt, 1)
@test view(dt, 1:2, [:x, :y]) == head(dt, 2)
@test view(dt, vcat(trues(2), falses(8)), [:x, :y]) == head(dt, 2)
@test view(dt, [1, 2], [:x, :y]) == head(dt, 2)
@test view(dt, 1, [1, 2]) == head(dt, 1)
@test view(dt, 1:2, [1, 2]) == head(dt, 2)
@test view(dt, vcat(trues(2), falses(8)), [1, 2]) == head(dt, 2)
@test view(dt, [1, 2], [1, 2]) == head(dt, 2)
@test view(dt, 1, trues(2)) == head(dt, 1)
@test view(dt, 1:2, trues(2)) == head(dt, 2)
@test view(dt, vcat(trues(2), falses(8)), trues(2)) == head(dt, 2)
@test view(dt, [1, 2], trues(2)) == head(dt, 2)
@test view(dt, Integer[1, 2]) == head(dt, 2)
@test view(dt, UInt[1, 2]) == head(dt, 2)
@test view(dt, BigInt[1, 2]) == head(dt, 2)
@test view(dt, Nullable{Int}[1, 2]) == head(dt, 2)
@test view(dt, Nullable{Integer}[1, 2]) == head(dt, 2)
@test view(dt, Nullable{UInt}[1, 2]) == head(dt, 2)
@test view(dt, Nullable{BigInt}[1, 2]) == head(dt, 2)
@test view(dt, NullableArray([1, 2])) == head(dt, 2)
@test view(dt, NullableArray{Integer}([1, 2])) == head(dt, 2)
@test view(dt, NullableArray{UInt}([1, 2])) == head(dt, 2)
@test view(dt, NullableArray{BigInt}([1, 2])) == head(dt, 2)
end

@testset "view -- SubDataTable" begin
dt = view(DataTable(x = 1:10, y = 1.0:10.0), 1:10)
@test view(dt, 1) == head(dt, 1)
@test view(dt, UInt(1)) == head(dt, 1)
@test view(dt, BigInt(1)) == head(dt, 1)
@test view(dt, 1:2) == head(dt, 2)
@test view(dt, vcat(trues(2), falses(8))) == head(dt, 2)
@test view(dt, [1, 2]) == head(dt, 2)
@test view(dt, 1, :x) == head(dt[[:x]], 1)
@test view(dt, 1:2, :x) == head(dt[[:x]], 2)
@test view(dt, vcat(trues(2), falses(8)), :x) == head(dt[[:x]], 2)
@test view(dt, [1, 2], :x) == head(dt[[:x]], 2)
@test view(dt, 1, 1) == head(dt[[:x]], 1)
@test view(dt, 1:2, 1) == head(dt[[:x]], 2)
@test view(dt, vcat(trues(2), falses(8)), 1) == head(dt[[:x]], 2)
@test view(dt, [1, 2], 1) == head(dt[[:x]], 2)
@test view(dt, 1, [:x, :y]) == head(dt, 1)
@test view(dt, 1:2, [:x, :y]) == head(dt, 2)
@test view(dt, vcat(trues(2), falses(8)), [:x, :y]) == head(dt, 2)
@test view(dt, [1, 2], [:x, :y]) == head(dt, 2)
@test view(dt, 1, [1, 2]) == head(dt, 1)
@test view(dt, 1:2, [1, 2]) == head(dt, 2)
@test view(dt, vcat(trues(2), falses(8)), [1, 2]) == head(dt, 2)
@test view(dt, [1, 2], [1, 2]) == head(dt, 2)
@test view(dt, 1, trues(2)) == head(dt, 1)
@test view(dt, 1:2, trues(2)) == head(dt, 2)
@test view(dt, vcat(trues(2), falses(8)), trues(2)) == head(dt, 2)
@test view(dt, [1, 2], trues(2)) == head(dt, 2)
@test view(dt, Integer[1, 2]) == head(dt, 2)
@test view(dt, UInt[1, 2]) == head(dt, 2)
@test view(dt, BigInt[1, 2]) == head(dt, 2)
@test view(dt, Nullable{Int}[1, 2]) == head(dt, 2)
@test view(dt, Nullable{Integer}[1, 2]) == head(dt, 2)
@test view(dt, Nullable{UInt}[1, 2]) == head(dt, 2)
@test view(dt, Nullable{BigInt}[1, 2]) == head(dt, 2)
@test view(dt, NullableArray([1, 2])) == head(dt, 2)
@test view(dt, NullableArray{Integer}([1, 2])) == head(dt, 2)
@test view(dt, NullableArray{UInt}([1, 2])) == head(dt, 2)
@test view(dt, NullableArray{BigInt}([1, 2])) == head(dt, 2)
end
end

0 comments on commit 96bc68b

Please sign in to comment.