-
Notifications
You must be signed in to change notification settings - Fork 18
/
Copy pathutils.jl
143 lines (120 loc) · 5.45 KB
/
utils.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
using Test, InMemoryDatasets, PooledArrays, Random, CategoricalArrays
@testset "make_unique - from DataFrames" begin
@test IMD.make_unique([:x, :x, :x_1, :x2], makeunique=true) == [:x, :x_2, :x_1, :x2]
@test_throws ArgumentError IMD.make_unique([:x, :x, :x_1, :x2], makeunique=false)
@test IMD.make_unique([:x, :x_1, :x2], makeunique=false) == [:x, :x_1, :x2]
@test IMD.make_unique([:x, :x, :x_3, :x, :y, :x, :y, :x_1], makeunique=true) == [:x, :x_2, :x_3, :x_4, :y, :x_5, :y_1, :x_1]
end
@testset "repeat count- from DataFrames" begin
ds = Dataset(a=1:2, b=3:4)
ref = Dataset(a=repeat(1:2, 2),
b=repeat(3:4, 2))
@test repeat(ds, 2) == ref
@test repeat(view(ds, 1:2, :), 2) == ref
@test_throws ArgumentError repeat(ds, 0)
@test_throws ArgumentError repeat(ds, -1)
end
@testset "repeat inner_outer- from DataFrames" begin
ds = Dataset(a=1:2, b=3:4)
ref = Dataset(a=repeat(1:2, inner=2, outer=3),
b=repeat(3:4, inner=2, outer=3))
@test repeat(ds, inner=2, outer=3) == ref
@test repeat(view(ds, 1:2, :), inner=2, outer=3) == ref
@test_throws ArgumentError repeat(ds, inner=2, outer=0)
@test_throws ArgumentError repeat(ds, inner=0, outer=3)
@test_throws ArgumentError repeat(ds, inner=2, outer=false)
@test_throws ArgumentError repeat(ds, inner=false, outer=3)
@test_throws ArgumentError repeat(ds, inner=2, outer=-1)
@test_throws ArgumentError repeat(ds, inner=-1, outer=3)
end
@testset "repeat! count- from DataFrames" begin
ds = Dataset(a=1:2, b=3:4)
ref = Dataset(a=repeat(1:2, 2),
b=repeat(3:4, 2))
a = ds.a
b = ds.b
repeat!(ds, 2)
@test ds == ref
@test a == 1:2
@test b == 3:4
for v in (0, false)
ds = Dataset(a=1:2, b=3:4)
@test_throws ArgumentError repeat!(ds, v)
end
ds = Dataset(a=1:2, b=3:4)
@test_throws ArgumentError repeat(ds, -1)
@test ds == Dataset(a=1:2, b=3:4)
@test_throws MethodError repeat!(view(ds, 1:2, :), 2)
end
@testset "repeat! inner_outer- from DataFrames" begin
ds = Dataset(a=1:2, b=3:4)
ref = Dataset(a=repeat(1:2, inner=2, outer=3),
b=repeat(3:4, inner=2, outer=3))
a = ds.a
b = ds.b
repeat!(ds, inner=2, outer=3)
@test ds == ref
@test a == 1:2
@test b == 3:4
for v in (0, false)
ds = Dataset(a=1:2, b=3:4)
@test_throws ArgumentError repeat!(ds, inner=2, outer=v)
ds = Dataset(a=1:2, b=3:4)
@test_throws ArgumentError repeat!(ds, inner=v, outer=3)
end
ds = Dataset(a=1:2, b=3:4)
@test_throws ArgumentError repeat(ds, inner=2, outer=-1)
@test_throws ArgumentError repeat(ds, inner=-1, outer=3)
@test ds == Dataset(a=1:2, b=3:4)
@test_throws MethodError repeat!(view(ds, 1:2, :), inner=2, outer=3)
end
@testset "funname- from DataFrames" begin
@test IMD.funname(sum ∘ skipmissing ∘ Base.div12) ==
:sum_skipmissing_div12
end
@testset "repeat - passing `freq`" begin
ds = Dataset(x1=[1, 2, missing, 0], x2=PooledArray([1, 3, 1, 2]), x3=[1.2, 1.2, 1.1, -10.0], x4=[2, 1, 1, 1])
@test repeat(ds, freq=2) == ds[[1, 2, 2, 2, 3, 4, 4], :]
@test repeat(ds, freq=:x2) == ds[[1, 2, 2, 2, 3, 4, 4], :]
@test repeat(ds, freq=:x4) == ds[[1, 1, 2, 3, 4], :]
@test repeat(ds, freq=ds[!, :x4]) == ds[[1, 1, 2, 3, 4], :]
@test repeat(view(ds, :, :), freq=:x4) == ds[[1, 1, 2, 3, 4], :]
@test repeat(view(ds, :, :), freq=4) == ds[[1, 1, 2, 3, 4], :]
@test_throws ArgumentError repeat(ds, freq=:x1)
@test_throws ArgumentError repeat(ds, freq=3)
repeat!(ds, 1000)
@test repeat(ds, freq=2) == ds[repeat([1, 2, 2, 2, 3, 4, 4], 1000), :]
@test repeat(ds, freq=:x2) == ds[repeat([1, 2, 2, 2, 3, 4, 4], 1000), :]
@test repeat(ds, freq=:x4) == ds[repeat([1, 1, 2, 3, 4], 1000), :]
@test repeat(ds, freq=ds[!, :x4]) == ds[repeat([1, 1, 2, 3, 4], 1000), :]
ds = Dataset(a=0:2, b=2:4)
@test repeat(ds, freq=:a) == Dataset(a=[1, 2, 2], b=[3, 4, 4])
@test repeat(ds, freq=[2, 0, 2]) == Dataset(a=[0, 0, 2, 2], b=[2, 2, 4, 4])
@test repeat(ds, freq=[1000, 1000, 0]) == Dataset(a=[fill(0, 1000); fill(1, 1000)], b=[fill(2, 1000); fill(3, 1000)])
@test repeat(view(ds, [1, 2, 3], [1, 2]), freq=[1000, 1000, 0]) == Dataset(a=[fill(0, 1000); fill(1, 1000)], b=[fill(2, 1000); fill(3, 1000)])
@test repeat(view(ds, [1, 2, 3], [1, 2]), freq=[1000, 1000, 0], view=true) == Dataset(a=[fill(0, 1000); fill(1, 1000)], b=[fill(2, 1000); fill(3, 1000)])
end
@testset "IMD.hcat! with formats" begin
ds = Dataset(x=[1, 2, 3], x2=[1, 8, -9])
ds2 = Dataset(y=[1, 1, 1], y2=[1.4, -5, 2.4])
setformat!(ds, 2 => isodd)
setformat!(ds2, 2 => abs)
resds = IMD.hcat(ds, ds2)
@test resds == Dataset(x=[1, 2, 3], x2=[1, 8, -9], y=[1, 1, 1], y2=[1.4, -5, 2.4])
@test getformat(resds, 1) == identity
@test getformat(resds, 2) == isodd
@test getformat(resds, 3) == identity
@test getformat(resds, 4) == abs
resds = IMD.hcat(ds, view(ds2, :, [2, 1]))
@test resds == Dataset(x=[1, 2, 3], x2=[1, 8, -9], y2=[1.4, -5, 2.4], y=[1, 1, 1])
@test getformat(resds, 1) == identity
@test getformat(resds, 2) == isodd
@test getformat(resds, 4) == identity
@test getformat(resds, 3) == abs
IMD.hcat!(ds, view(ds2, :, [2, 1]))
@test ds == Dataset(x=[1, 2, 3], x2=[1, 8, -9], y2=[1.4, -5, 2.4], y=[1, 1, 1])
@test getformat(ds, 1) == identity
@test getformat(ds, 2) == isodd
@test getformat(ds, 4) == identity
@test getformat(ds, 3) == abs
end