@@ -12,6 +12,7 @@ safe_sum(A::Array{T}, region) where {T} = safe_mapslices(sum, A, region)
12
12
safe_prod (A:: Array{T} , region) where {T} = safe_mapslices (prod, A, region)
13
13
safe_maximum (A:: Array{T} , region) where {T} = safe_mapslices (maximum, A, region)
14
14
safe_minimum (A:: Array{T} , region) where {T} = safe_mapslices (minimum, A, region)
15
+ safe_count (A:: AbstractArray{T} , region) where {T} = safe_mapslices (count, A, region)
15
16
safe_sumabs (A:: Array{T} , region) where {T} = safe_mapslices (sum, abs .(A), region)
16
17
safe_sumabs2 (A:: Array{T} , region) where {T} = safe_mapslices (sum, abs2 .(A), region)
17
18
safe_maxabs (A:: Array{T} , region) where {T} = safe_mapslices (maximum, abs .(A), region)
@@ -21,15 +22,21 @@ safe_minabs(A::Array{T}, region) where {T} = safe_mapslices(minimum, abs.(A), re
21
22
1 , 2 , 3 , 4 , 5 , (1 , 2 ), (1 , 3 ), (1 , 4 ), (2 , 3 ), (2 , 4 ), (3 , 4 ),
22
23
(1 , 2 , 3 ), (1 , 3 , 4 ), (2 , 3 , 4 ), (1 , 2 , 3 , 4 )]
23
24
Areduc = rand (3 , 4 , 5 , 6 )
25
+ Breduc = rand (Bool, 3 , 4 , 5 , 6 )
26
+ @assert axes (Areduc) == axes (Breduc)
27
+
24
28
r = fill (NaN , map (length, Base. reduced_indices (axes (Areduc), region)))
25
29
@test sum! (r, Areduc) ≈ safe_sum (Areduc, region)
26
30
@test prod! (r, Areduc) ≈ safe_prod (Areduc, region)
27
31
@test maximum! (r, Areduc) ≈ safe_maximum (Areduc, region)
28
32
@test minimum! (r, Areduc) ≈ safe_minimum (Areduc, region)
33
+ @test count! (r, Breduc) ≈ safe_count (Breduc, region)
34
+
29
35
@test sum! (abs, r, Areduc) ≈ safe_sumabs (Areduc, region)
30
36
@test sum! (abs2, r, Areduc) ≈ safe_sumabs2 (Areduc, region)
31
37
@test maximum! (abs, r, Areduc) ≈ safe_maxabs (Areduc, region)
32
38
@test minimum! (abs, r, Areduc) ≈ safe_minabs (Areduc, region)
39
+ @test count! (! , r, Breduc) ≈ safe_count (.! Breduc, region)
33
40
34
41
# With init=false
35
42
r2 = similar (r)
@@ -41,6 +48,9 @@ safe_minabs(A::Array{T}, region) where {T} = safe_mapslices(minimum, abs.(A), re
41
48
@test maximum! (r, Areduc, init= false ) ≈ fill! (r2, 1.8 )
42
49
fill! (r, - 0.2 )
43
50
@test minimum! (r, Areduc, init= false ) ≈ fill! (r2, - 0.2 )
51
+ fill! (r, 1 )
52
+ @test count! (r, Breduc, init= false ) ≈ safe_count (Breduc, region) .+ 1
53
+
44
54
fill! (r, 8.1 )
45
55
@test sum! (abs, r, Areduc, init= false ) ≈ safe_sumabs (Areduc, region) .+ 8.1
46
56
fill! (r, 8.1 )
@@ -49,15 +59,20 @@ safe_minabs(A::Array{T}, region) where {T} = safe_mapslices(minimum, abs.(A), re
49
59
@test maximum! (abs, r, Areduc, init= false ) ≈ fill! (r2, 1.5 )
50
60
fill! (r, - 1.5 )
51
61
@test minimum! (abs, r, Areduc, init= false ) ≈ fill! (r2, - 1.5 )
62
+ fill! (r, 1 )
63
+ @test count! (! , r, Breduc, init= false ) ≈ safe_count (.! Breduc, region) .+ 1
52
64
53
65
@test @inferred (sum (Areduc, dims= region)) ≈ safe_sum (Areduc, region)
54
66
@test @inferred (prod (Areduc, dims= region)) ≈ safe_prod (Areduc, region)
55
67
@test @inferred (maximum (Areduc, dims= region)) ≈ safe_maximum (Areduc, region)
56
68
@test @inferred (minimum (Areduc, dims= region)) ≈ safe_minimum (Areduc, region)
69
+ @test @inferred (count (Breduc, dims= region)) ≈ safe_count (Breduc, region)
70
+
57
71
@test @inferred (sum (abs, Areduc, dims= region)) ≈ safe_sumabs (Areduc, region)
58
72
@test @inferred (sum (abs2, Areduc, dims= region)) ≈ safe_sumabs2 (Areduc, region)
59
73
@test @inferred (maximum (abs, Areduc, dims= region)) ≈ safe_maxabs (Areduc, region)
60
74
@test @inferred (minimum (abs, Areduc, dims= region)) ≈ safe_minabs (Areduc, region)
75
+ @test @inferred (count (! , Breduc, dims= region)) ≈ safe_count (.! Breduc, region)
61
76
end
62
77
63
78
# Test reduction along first dimension; this is special-cased for
416
431
417
432
@test sum ([Variable (:x ), Variable (:y )], dims= 1 ) == [AffExpr ([Variable (:x ), Variable (:y )])]
418
433
end
434
+
435
+ # count
436
+ @testset " count: throw on non-bool types" begin
437
+ @test_throws TypeError count ([1 ], dims= 1 )
438
+ @test_throws TypeError count! ([1 ], [1 ])
439
+ end
0 commit comments