Skip to content

Commit 10a1ad4

Browse files
authored
Revert: Add SelectionRow and SelectionRows (#152)
1 parent 8a225c1 commit 10a1ad4

File tree

2 files changed

+60
-245
lines changed

2 files changed

+60
-245
lines changed

src/tableselection.jl

Lines changed: 0 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,6 @@ end
3737
Tables.istable(::Type{<:TableSelection}) = true
3838
Tables.columnaccess(::Type{<:TableSelection}) = true
3939
Tables.columns(t::TableSelection) = t
40-
Tables.rowaccess(::Type{<:TableSelection}) = true
41-
Tables.rows(t::TableSelection) = SelectionRows(t)
4240
Tables.columnnames(t::TableSelection) = t.names
4341

4442
function Tables.getcolumn(t::TableSelection, i::Int)
@@ -61,100 +59,3 @@ function Tables.schema(t::TableSelection)
6159
inds = indexin(t.onames, collect(names))
6260
Tables.Schema(t.names, types[inds])
6361
end
64-
65-
# SelectionRow
66-
struct SelectionRow{T<:TableSelection}
67-
selection::T
68-
ncols::Int
69-
ind::Int
70-
end
71-
72-
SelectionRow(t::TableSelection, ind::Int) = SelectionRow(t, t.ncols, ind)
73-
74-
function Base.:(==)(a::SelectionRow, b::SelectionRow)
75-
a.ind != b.ind && return false
76-
a.ncols != b.ncols && return false
77-
a.selection == b.selection
78-
end
79-
80-
function Base.show(io::IO, row::SelectionRow)
81-
println(io, "SelectionRow")
82-
names = row.selection.names
83-
vecrow = [Tables.getcolumn(row, nm) for nm in names]
84-
matrow = transpose(vecrow)
85-
pretty_table(io, matrow,
86-
header=names,
87-
vcrop_mode=:middle,
88-
newline_at_end=false
89-
)
90-
end
91-
92-
# Iteration interface
93-
Base.iterate(row::SelectionRow, state::Int=1) =
94-
state > row.ncols ? nothing : (row[state], state + 1)
95-
96-
Base.length(row::SelectionRow) = row.ncols
97-
Base.IteratorSize(::Type{<:SelectionRow}) = Base.HasLength()
98-
Base.IteratorEltype(::Type{<:SelectionRow}) = Base.EltypeUnknown()
99-
100-
# Indexing interface
101-
Base.firstindex(::SelectionRow) = 1
102-
Base.lastindex(row::SelectionRow) = row.ncols
103-
Base.eachindex(row::SelectionRow) = 1:row.ncols
104-
Base.getindex(row::SelectionRow, i::Int) = Tables.getcolumn(row, i)
105-
106-
# Tables.jl row interface
107-
Tables.columnnames(row::SelectionRow) = Tables.columnnames(row.selection)
108-
Tables.getcolumn(row::SelectionRow, i::Int) =
109-
Tables.getcolumn(row.selection, i)[row.ind]
110-
Tables.getcolumn(row::SelectionRow, nm::Symbol) =
111-
Tables.getcolumn(row.selection, nm)[row.ind]
112-
113-
# SelectionRows
114-
struct SelectionRows{T<:TableSelection}
115-
selection::T
116-
nrows::Int
117-
end
118-
119-
SelectionRows(t::TableSelection) = SelectionRows(t, _nrows(t.cols))
120-
121-
function Base.:(==)(a::SelectionRows, b::SelectionRows)
122-
a.nrows != b.nrows && return false
123-
a.selection == b.selection
124-
end
125-
126-
function Base.show(io::IO, s::SelectionRows)
127-
println(io, "SelectionRows")
128-
pretty_table(io, s.selection,
129-
vcrop_mode=:middle,
130-
newline_at_end=false
131-
)
132-
end
133-
134-
# Iteration interface
135-
Base.iterate(s::SelectionRows, state::Int=1) =
136-
state > s.nrows ? nothing : (s[state], state + 1)
137-
138-
Base.length(s::SelectionRows) = s.nrows
139-
Base.eltype(::Type{SelectionRows{T}}) where {T} = SelectionRow{T}
140-
Base.IteratorSize(::Type{<:SelectionRows}) = Base.HasLength()
141-
Base.IteratorEltype(::Type{<:SelectionRows}) = Base.HasEltype()
142-
143-
# Indexing interface
144-
Base.firstindex(::SelectionRows) = 1
145-
Base.lastindex(s::SelectionRows) = s.nrows
146-
Base.eachindex(s::SelectionRows) = 1:s.nrows
147-
Base.getindex(s::SelectionRows, i::Int) = SelectionRow(s.selection, i)
148-
149-
# Tables.jl interface
150-
Tables.isrowtable(::Type{<:SelectionRows}) = true
151-
Tables.columnaccess(::Type{<:SelectionRows}) = true
152-
Tables.columns(s::SelectionRows) = Tables.columns(s.selection)
153-
Tables.columnnames(s::SelectionRows) = Tables.columnnames(s.selection)
154-
Tables.getcolumn(s::SelectionRows, i::Int) = Tables.getcolumn(s.selection, i)
155-
Tables.getcolumn(s::SelectionRows, nm::Symbol) = Tables.getcolumn(s.selection, nm)
156-
Tables.materializer(s::SelectionRows) = Tables.materializer(s.selection)
157-
Tables.schema(s::SelectionRows) = Tables.schema(s.selection)
158-
159-
# utils
160-
_nrows(cols) = length(Tables.getcolumn(cols, 1))

test/tableselection.jl

Lines changed: 60 additions & 146 deletions
Original file line numberDiff line numberDiff line change
@@ -1,147 +1,61 @@
1-
@testset "Selection" begin
2-
@testset "TableSelection" begin
3-
a = rand(10)
4-
b = rand(10)
5-
c = rand(10)
6-
d = rand(10)
7-
e = rand(10)
8-
f = rand(10)
9-
t = Table(; a, b, c, d, e, f)
10-
11-
# Tables.jl interface
12-
select = [:a, :b, :e]
13-
newnames = select
14-
s = TableTransforms.TableSelection(t, newnames, select)
15-
@test Tables.istable(s) == true
16-
@test Tables.columnaccess(s) == true
17-
@test Tables.rowaccess(s) == true
18-
@test Tables.columns(s) === s
19-
@test Tables.rows(s) == TableTransforms.SelectionRows(s)
20-
@test Tables.columnnames(s) == [:a, :b, :e]
21-
@test Tables.schema(s).names == (:a, :b, :e)
22-
@test Tables.schema(s).types == (Float64, Float64, Float64)
23-
@test Tables.materializer(s) == Tables.materializer(t)
24-
25-
# getcolumn
26-
cols = Tables.columns(t)
27-
@test Tables.getcolumn(s, :a) == Tables.getcolumn(cols, :a)
28-
@test Tables.getcolumn(s, 1) == Tables.getcolumn(cols, 1)
29-
@test Tables.getcolumn(s, 3) == Tables.getcolumn(cols, :e)
30-
31-
# selectin with renaming
32-
select = [:c, :d, :f]
33-
newnames = [:x, :y, :z]
34-
s = TableTransforms.TableSelection(t, newnames, select)
35-
@test Tables.columnnames(s) == [:x, :y, :z]
36-
@test Tables.getcolumn(s, :x) == t.c
37-
@test Tables.getcolumn(s, :y) == t.d
38-
@test Tables.getcolumn(s, :z) == t.f
39-
@test Tables.getcolumn(s, 1) == t.c
40-
@test Tables.getcolumn(s, 2) == t.d
41-
@test Tables.getcolumn(s, 3) == t.f
42-
43-
# row table
44-
select = [:a, :b, :e]
45-
newnames = select
46-
rt = Tables.rowtable(t)
47-
s = TableTransforms.TableSelection(rt, newnames, select)
48-
cols = Tables.columns(rt)
49-
@test Tables.getcolumn(s, :a) == Tables.getcolumn(cols, :a)
50-
@test Tables.getcolumn(s, 1) == Tables.getcolumn(cols, 1)
51-
@test Tables.getcolumn(s, 3) == Tables.getcolumn(cols, :e)
52-
53-
# throws
54-
@test_throws AssertionError TableTransforms.TableSelection(t, [:a, :b, :z], [:a, :b, :z])
55-
@test_throws AssertionError TableTransforms.TableSelection(t, [:x, :y, :z], [:c, :d, :k])
56-
s = TableTransforms.TableSelection(t, [:a, :b, :e], [:a, :b, :e])
57-
@test_throws ErrorException Tables.getcolumn(s, :f)
58-
@test_throws ErrorException Tables.getcolumn(s, 4)
59-
s = TableTransforms.TableSelection(t, [:x, :y, :z], [:c, :d, :f])
60-
@test_throws ErrorException Tables.getcolumn(s, :c)
61-
@test_throws ErrorException Tables.getcolumn(s, 4)
62-
@test_throws ErrorException Tables.getcolumn(s, -2)
63-
end
64-
65-
@testset "SelectionRow" begin
66-
x = [2, 1, 7, 5, 2]
67-
y = [7, 6, 8, 1, 3]
68-
z = [3, 4, 6, 4, 7]
69-
table = Table(; x, y, z)
70-
71-
select = [:x, :z]
72-
newnames = select
73-
s = TableTransforms.TableSelection(table, newnames, select)
74-
m = Tables.matrix(s)
75-
76-
# Tables.jl row interface
77-
srow = TableTransforms.SelectionRow(s, 1)
78-
@test Tables.columnnames(srow) == Tables.columnnames(s)
79-
@test Tables.getcolumn(srow, 1) == 2
80-
@test Tables.getcolumn(srow, 2) == 3
81-
@test Tables.getcolumn(srow, :x) == 2
82-
@test Tables.getcolumn(srow, :z) == 3
83-
84-
# Iteration interface
85-
for (i, row) in enumerate(eachrow(m))
86-
srow = TableTransforms.SelectionRow(s, i)
87-
@test length(srow) == length(row)
88-
@test collect(srow) == collect(row)
89-
for (sr, r) in zip(srow, row)
90-
@test sr == r
91-
end
92-
end
93-
94-
# Indexing interface
95-
for (i, row) in enumerate(eachrow(m))
96-
srow = TableTransforms.SelectionRow(s, i)
97-
@test firstindex(srow) == 1
98-
@test lastindex(srow) == lastindex(row)
99-
for j in eachindex(srow)
100-
@test srow[j] == row[j]
101-
end
102-
end
103-
end
104-
105-
@testset "SelectionRows" begin
106-
a = rand(10)
107-
b = rand(10)
108-
c = rand(10)
109-
d = rand(10)
110-
t = Table(; a, b, c, d)
111-
112-
select = [:a, :d]
113-
newnames = select
114-
s = TableTransforms.TableSelection(t, newnames, select)
115-
srows = TableTransforms.SelectionRows(s)
116-
117-
# Tables.jl interface
118-
@test Tables.istable(srows) == true
119-
@test Tables.rowaccess(srows) == true
120-
@test Tables.columnaccess(srows) == true
121-
@test Tables.rows(srows) === srows
122-
@test Tables.columns(srows) === Tables.columns(srows.selection)
123-
@test Tables.columnnames(srows) == Tables.columnnames(srows.selection)
124-
@test Tables.schema(srows) == Tables.schema(srows.selection)
125-
@test Tables.materializer(srows) == Tables.materializer(srows.selection)
126-
127-
# getcolumn
128-
cols = Tables.columns(srows)
129-
@test Tables.getcolumn(srows, :a) == Tables.getcolumn(cols, :a)
130-
@test Tables.getcolumn(srows, 1) == Tables.getcolumn(cols, 1)
131-
@test Tables.getcolumn(srows, 2) == Tables.getcolumn(cols, :d)
132-
133-
# Iteration interface
134-
@test length(srows) == TableTransforms._nrows(s.cols)
135-
@test eltype(srows) == typeof(TableTransforms.SelectionRow(s, 1))
136-
for (i, srow) in enumerate(srows)
137-
@test srow == TableTransforms.SelectionRow(s, i)
138-
end
139-
140-
# Indexing interface
141-
@test firstindex(srows) == 1
142-
@test lastindex(srows) == TableTransforms._nrows(s.cols)
143-
for i in eachindex(srows)
144-
@test srows[i] == TableTransforms.SelectionRow(s, i)
145-
end
146-
end
1+
@testset "TableSelection" begin
2+
a = rand(10)
3+
b = rand(10)
4+
c = rand(10)
5+
d = rand(10)
6+
e = rand(10)
7+
f = rand(10)
8+
t = Table(; a, b, c, d, e, f)
9+
10+
# Tables.jl interface
11+
select = [:a, :b, :e]
12+
newnames = select
13+
s = TableTransforms.TableSelection(t, newnames, select)
14+
@test Tables.istable(s) == true
15+
@test Tables.columnaccess(s) == true
16+
@test Tables.rowaccess(s) == false
17+
@test Tables.columns(s) === s
18+
@test Tables.columnnames(s) == [:a, :b, :e]
19+
@test Tables.schema(s).names == (:a, :b, :e)
20+
@test Tables.schema(s).types == (Float64, Float64, Float64)
21+
@test Tables.materializer(s) == Tables.materializer(t)
22+
23+
# getcolumn
24+
cols = Tables.columns(t)
25+
@test Tables.getcolumn(s, :a) == Tables.getcolumn(cols, :a)
26+
@test Tables.getcolumn(s, 1) == Tables.getcolumn(cols, 1)
27+
@test Tables.getcolumn(s, 3) == Tables.getcolumn(cols, :e)
28+
29+
# selectin with renaming
30+
select = [:c, :d, :f]
31+
newnames = [:x, :y, :z]
32+
s = TableTransforms.TableSelection(t, newnames, select)
33+
@test Tables.columnnames(s) == [:x, :y, :z]
34+
@test Tables.getcolumn(s, :x) == t.c
35+
@test Tables.getcolumn(s, :y) == t.d
36+
@test Tables.getcolumn(s, :z) == t.f
37+
@test Tables.getcolumn(s, 1) == t.c
38+
@test Tables.getcolumn(s, 2) == t.d
39+
@test Tables.getcolumn(s, 3) == t.f
40+
41+
# row table
42+
select = [:a, :b, :e]
43+
newnames = select
44+
rt = Tables.rowtable(t)
45+
s = TableTransforms.TableSelection(rt, newnames, select)
46+
cols = Tables.columns(rt)
47+
@test Tables.getcolumn(s, :a) == Tables.getcolumn(cols, :a)
48+
@test Tables.getcolumn(s, 1) == Tables.getcolumn(cols, 1)
49+
@test Tables.getcolumn(s, 3) == Tables.getcolumn(cols, :e)
50+
51+
# throws
52+
@test_throws AssertionError TableTransforms.TableSelection(t, [:a, :b, :z], [:a, :b, :z])
53+
@test_throws AssertionError TableTransforms.TableSelection(t, [:x, :y, :z], [:c, :d, :k])
54+
s = TableTransforms.TableSelection(t, [:a, :b, :e], [:a, :b, :e])
55+
@test_throws ErrorException Tables.getcolumn(s, :f)
56+
@test_throws ErrorException Tables.getcolumn(s, 4)
57+
s = TableTransforms.TableSelection(t, [:x, :y, :z], [:c, :d, :f])
58+
@test_throws ErrorException Tables.getcolumn(s, :c)
59+
@test_throws ErrorException Tables.getcolumn(s, 4)
60+
@test_throws ErrorException Tables.getcolumn(s, -2)
14761
end

0 commit comments

Comments
 (0)