@@ -8,7 +8,6 @@ days = DateTime(2000):Day(1):DateTime(2000, 12, 31)
88A = DimArray ((1 : 6 ) * (1 : 366 )' , (X (1 : 0.2 : 2 ), Ti (days)))
99st = DimStack ((a= A, b= A, c= A[X= 1 ]))
1010
11-
1211@testset " group eltype matches indexed values" begin
1312 da = rand (X (1 : 10 ), Y (1 : 10 ))
1413 grps = groupby (da, X => isodd)
2221 mean (A[Ti= dayofyear (m): dayofyear (m)+ daysinmonth (m)- 1 ])
2322 end
2423 @test mean .(groupby (A, Ti=> month)) == manualmeans
24+ combinedmeans = combine (mean, groupby (A, Ti=> month))
25+ @test combinedmeans isa DimArray
26+ @test combinedmeans == manualmeans
2527 manualmeans_st = map (months) do m
2628 mean (st[Ti= dayofyear (m): dayofyear (m)+ daysinmonth (m)- 1 ])
2729 end
2830 @test mean .(groupby (st, Ti=> month)) == manualmeans_st
31+ combinedmeans_st = combine (mean, groupby (st, Ti=> month))
32+ @test combinedmeans_st isa DimStack{(:a , :b , :c ), @NamedTuple {a:: Float64 , b:: Float64 , c:: Float64 }}
33+ @test collect (combinedmeans_st) == manualmeans_st
2934
3035 manualsums = mapreduce (hcat, months) do m
3136 vcat (sum (A[Ti= dayofyear (m): dayofyear (m)+ daysinmonth (m)- 1 , X= 1 .. 1.5 ]),
3641 @test dims (gb_sum, Ti) == Ti (Sampled ([1 : 12 ... ], ForwardOrdered (), Irregular ((nothing , nothing )), Points (), NoMetadata ()))
3742 @test typeof (dims (gb_sum, X)) == typeof (X (Sampled (BitVector ([false , true ]), ForwardOrdered (), Irregular ((nothing , nothing )), Points (), NoMetadata ())))
3843 @test gb_sum == manualsums
44+ combined_sum = combine (sum, groupby (A, Ti=> month, X => > (1.5 )))
45+ @test collect (combined_sum) == manualsums
3946
4047 manualsums_st = mapreduce (hcat, months) do m
4148 vcat (sum (st[Ti= dayofyear (m): dayofyear (m)+ daysinmonth (m)- 1 , X= 1 .. 1.5 ]),
4653 @test dims (gb_sum_st, Ti) == Ti (Sampled ([1 : 12 ... ], ForwardOrdered (), Irregular ((nothing , nothing )), Points (), NoMetadata ()))
4754 @test typeof (dims (gb_sum_st, X)) == typeof (X (Sampled (BitVector ([false , true ]), ForwardOrdered (), Irregular ((nothing , nothing )), Points (), NoMetadata ())))
4855 @test gb_sum_st == manualsums_st
56+ combined_sum_st = combine (sum, groupby (st, Ti=> month, X => > (1.5 )))
57+ @test collect (combined_sum_st) == manualsums_st
4958
5059 @test_throws ArgumentError groupby (st, Ti=> month, Y=> isodd)
5160end
5261
62+ @testset " partial reductions in combine" begin
63+ months = DateTime (2000 ): Month (1 ): DateTime (2000 , 12 , 31 )
64+ using BenchmarkTools
65+ manualmeans = cat (map (months) do m
66+ mean (A[Ti= dayofyear (m): dayofyear (m)+ daysinmonth (m)- 1 ]; dims= Ti)
67+ end ... ; dims= Ti (collect (1 : 12 )))
68+ combinedmeans = combine (mean, groupby (A, Ti ()=> month); dims= Ti ())
69+ @test combinedmeans == manualmeans
70+ end
71+
5372@testset " bins" begin
5473 seasons = DateTime (2000 ): Month (3 ): DateTime (2000 , 12 , 31 )
5574 manualmeans = map (seasons) do s
5978 @test mean .(groupby (A, Ti=> Bins (month, ranges (1 : 3 : 12 )))) == manualmeans
6079 @test mean .(groupby (A, Ti=> Bins (month, intervals (1 : 3 : 12 )))) == manualmeans
6180 @test mean .(groupby (A, Ti=> Bins (month, 4 ))) == manualmeans
81+ @test combine (mean, groupby (A, Ti=> Bins (month, ranges (1 : 3 : 12 )))) == manualmeans
6282end
6383
6484@testset " dimension matching groupby" begin
7595 end
7696 @test all (collect (mean .(gb)) .=== manualmeans)
7797 @test all (mean .(gb) .=== manualmeans)
98+ @test all (combine (mean, gb) .=== manualmeans)
7899end
79100
80- @testset " broadcastdims runs after groupby" begin
101+ @testset " broadcast_dims runs after groupby" begin
81102 dimlist = (
82103 Ti (Date (" 2021-12-01" ): Day (1 ): Date (" 2022-12-31" )),
83104 X (range (1 , 10 , length= 10 )),
87108 data = rand (396 , 10 , 15 , 2 )
88109 A = DimArray (data, dimlist)
89110 month_length = DimArray (daysinmonth, dims (A, Ti))
90- g_tempo = DimensionalData. groupby (month_length, Ti=> seasons (; start= December))
111+ g_tempo = DimensionalData. groupby (month_length, Ti => seasons (; start= December))
91112 sum_days = sum .(g_tempo, dims= Ti)
92113 @test sum_days isa DimArray
93114 weights = map (./ , g_tempo, sum_days)
0 commit comments