1
1
using BlockArrays: Block, BlockArray, BlockedArray, blockedrange, blocksize
2
- using BlockSparseArrays: BlockSparseArray
3
- using SparseArraysBase: densearray
4
2
using TensorAlgebra: contract
5
3
using Random: randn!
6
4
using Test: @test , @test_broken , @testset
7
5
8
6
function randn_blockdiagonal (elt:: Type , axes:: Tuple )
9
- a = BlockSparseArray {elt} ( axes)
7
+ a = zeros (elt, axes)
10
8
blockdiaglength = minimum (blocksize (a))
11
9
for i in 1 : blockdiaglength
12
10
b = Block (ntuple (Returns (i), ndims (a)))
18
16
const elts = (Float32, Float64, Complex{Float32}, Complex{Float64})
19
17
@testset " `contract` blocked arrays (eltype=$elt )" for elt in elts
20
18
d = blockedrange ([2 , 3 ])
21
- a1_sba = randn_blockdiagonal (elt, (d, d, d, d))
22
- a2_sba = randn_blockdiagonal (elt, (d, d, d, d))
23
- a3_sba = randn_blockdiagonal (elt, (d, d))
24
- a1_dense = densearray (a1_sba)
25
- a2_dense = densearray (a2_sba)
26
- a3_dense = densearray (a3_sba)
27
-
28
- @testset " BlockArray" begin
29
- a1 = BlockArray (a1_sba)
30
- a2 = BlockArray (a2_sba)
31
- a3 = BlockArray (a3_sba)
32
-
33
- # matrix matrix
34
- @test_broken a_dest, dimnames_dest = contract (a1, (1 , - 1 , 2 , - 2 ), a2, (2 , - 3 , 1 , - 4 ))
35
- #=
36
- a_dest_dense, dimnames_dest_dense = contract(
37
- a1_dense, (1, -1, 2, -2), a2_dense, (2, -3, 1, -4)
38
- )
39
- @test dimnames_dest == dimnames_dest_dense
40
- @test size(a_dest) == size(a_dest_dense)
41
- @test a_dest isa BlockArray
42
- @test a_dest ≈ a_dest_dense
43
- =#
44
-
45
- # matrix vector
46
- @test_broken a_dest, dimnames_dest = contract (a1, (2 , - 1 , - 2 , 1 ), a3, (1 , 2 ))
47
- #=
48
- a_dest_dense, dimnames_dest_dense = contract(a1_dense, (2, -1, -2, 1), a3_dense, (1, 2))
49
- @test dimnames_dest == dimnames_dest_dense
50
- @test size(a_dest) == size(a_dest_dense)
51
- @test a_dest isa BlockArray
52
- @test a_dest ≈ a_dest_dense
53
- =#
54
-
55
- # vector matrix
56
- @test_broken a_dest, dimnames_dest = contract (a3, (1 , 2 ), a1, (2 , - 1 , - 2 , 1 ))
57
- #=
58
- a_dest_dense, dimnames_dest_dense = contract(a3_dense, (1, 2), a1_dense, (2, -1, -2, 1))
59
- @test dimnames_dest == dimnames_dest_dense
60
- @test size(a_dest) == size(a_dest_dense)
61
- @test a_dest isa BlockArray
62
- @test a_dest ≈ a_dest_dense
63
- =#
64
-
65
- # vector vector
66
- a_dest_dense, dimnames_dest_dense = contract (a3_dense, (1 , 2 ), a3_dense, (2 , 1 ))
67
- a_dest, dimnames_dest = contract (a3, (1 , 2 ), a3, (2 , 1 ))
68
- @test dimnames_dest == dimnames_dest_dense
69
- @test size (a_dest) == size (a_dest_dense)
70
- @test_broken a_dest isa BlockArray # TBD relax to AbstractArray{elt,0}?
71
- @test a_dest ≈ a_dest_dense
72
-
73
- # outer product
74
- @test_broken a_dest, dimnames_dest = contract (a3, (1 , 2 ), a3, (3 , 4 ))
75
- #=
76
- a_dest_dense, dimnames_dest_dense = contract(a3_dense, (1, 2), a3_dense, (3, 4))
77
- @test dimnames_dest == dimnames_dest_dense
78
- @test size(a_dest) == size(a_dest_dense)
79
- @test a_dest isa BlockArray
80
- @test a_dest ≈ a_dest_dense
81
- =#
82
- end
19
+ a1 = randn_blockdiagonal (elt, (d, d, d, d))
20
+ a2 = randn_blockdiagonal (elt, (d, d, d, d))
21
+ a3 = randn_blockdiagonal (elt, (d, d))
22
+ a1_dense = convert (Array, a1)
23
+ a2_dense = convert (Array, a2)
24
+ a3_dense = convert (Array, a3)
83
25
84
26
@testset " BlockedArray" begin
85
- a1 = BlockedArray (a1_sba)
86
- a2 = BlockedArray (a2_sba)
87
- a3 = BlockedArray (a3_sba)
88
-
89
27
# matrix matrix
90
28
a_dest, dimnames_dest = contract (a1, (1 , - 1 , 2 , - 2 ), a2, (2 , - 3 , 1 , - 4 ))
91
29
a_dest_dense, dimnames_dest_dense = contract (
@@ -97,31 +35,27 @@ const elts = (Float32, Float64, Complex{Float32}, Complex{Float64})
97
35
@test a_dest ≈ a_dest_dense
98
36
99
37
# matrix vector
100
- @test_broken a_dest, dimnames_dest = contract (a1, (2 , - 1 , - 2 , 1 ), a3, (1 , 2 ))
101
- #=
38
+ a_dest, dimnames_dest = contract (a1, (2 , - 1 , - 2 , 1 ), a3, (1 , 2 ))
102
39
a_dest_dense, dimnames_dest_dense = contract (a1_dense, (2 , - 1 , - 2 , 1 ), a3_dense, (1 , 2 ))
103
40
@test dimnames_dest == dimnames_dest_dense
104
41
@test size (a_dest) == size (a_dest_dense)
105
42
@test a_dest isa BlockedArray
106
43
@test a_dest ≈ a_dest_dense
107
- =#
108
44
109
45
# vector matrix
110
- @test_broken a_dest, dimnames_dest = contract (a3, (1 , 2 ), a1, (2 , - 1 , - 2 , 1 ))
111
- #=
46
+ a_dest, dimnames_dest = contract (a3, (1 , 2 ), a1, (2 , - 1 , - 2 , 1 ))
112
47
a_dest_dense, dimnames_dest_dense = contract (a3_dense, (1 , 2 ), a1_dense, (2 , - 1 , - 2 , 1 ))
113
48
@test dimnames_dest == dimnames_dest_dense
114
49
@test size (a_dest) == size (a_dest_dense)
115
50
@test a_dest isa BlockedArray
116
51
@test a_dest ≈ a_dest_dense
117
- =#
118
52
119
53
# vector vector
120
54
a_dest, dimnames_dest = contract (a3, (1 , 2 ), a3, (2 , 1 ))
121
55
a_dest_dense, dimnames_dest_dense = contract (a3_dense, (1 , 2 ), a3_dense, (2 , 1 ))
122
56
@test dimnames_dest == dimnames_dest_dense
123
57
@test size (a_dest) == size (a_dest_dense)
124
- @test_broken a_dest isa BlockedArray # TBD relax to AbstractArray {elt,0}?
58
+ @test_broken a_dest isa BlockedArray{elt,0 }
125
59
@test a_dest ≈ a_dest_dense
126
60
127
61
# outer product
@@ -133,8 +67,8 @@ const elts = (Float32, Float64, Complex{Float32}, Complex{Float64})
133
67
@test a_dest ≈ a_dest_dense
134
68
end
135
69
136
- @testset " BlockSparseArray " begin
137
- a1, a2 , a3 = a1_sba, a2_sba, a3_sba
70
+ @testset " BlockArray " begin
71
+ a1, a3 , a3 = BlockArray .((a1, a2, a3))
138
72
139
73
# matrix matrix
140
74
a_dest, dimnames_dest = contract (a1, (1 , - 1 , 2 , - 2 ), a2, (2 , - 3 , 1 , - 4 ))
@@ -143,41 +77,39 @@ const elts = (Float32, Float64, Complex{Float32}, Complex{Float64})
143
77
)
144
78
@test dimnames_dest == dimnames_dest_dense
145
79
@test size (a_dest) == size (a_dest_dense)
146
- @test a_dest isa BlockSparseArray
80
+ @test a_dest isa BlockArray
147
81
@test a_dest ≈ a_dest_dense
148
82
149
83
# matrix vector
150
- @test_broken a_dest, dimnames_dest = contract (a1, (2 , - 1 , - 2 , 1 ), a3, (1 , 2 ))
151
- #=
84
+ a_dest, dimnames_dest = contract (a1, (2 , - 1 , - 2 , 1 ), a3, (1 , 2 ))
152
85
a_dest_dense, dimnames_dest_dense = contract (a1_dense, (2 , - 1 , - 2 , 1 ), a3_dense, (1 , 2 ))
153
86
@test dimnames_dest == dimnames_dest_dense
154
87
@test size (a_dest) == size (a_dest_dense)
155
- @test a_dest isa BlockSparseArray
88
+ @test a_dest isa BlockArray
156
89
@test a_dest ≈ a_dest_dense
157
- =#
158
90
159
91
# vector matrix
160
92
a_dest, dimnames_dest = contract (a3, (1 , 2 ), a1, (2 , - 1 , - 2 , 1 ))
161
93
a_dest_dense, dimnames_dest_dense = contract (a3_dense, (1 , 2 ), a1_dense, (2 , - 1 , - 2 , 1 ))
162
94
@test dimnames_dest == dimnames_dest_dense
163
95
@test size (a_dest) == size (a_dest_dense)
164
- @test a_dest isa BlockSparseArray
96
+ @test a_dest isa BlockArray
165
97
@test a_dest ≈ a_dest_dense
166
98
167
99
# vector vector
168
100
a_dest_dense, dimnames_dest_dense = contract (a3_dense, (1 , 2 ), a3_dense, (2 , 1 ))
169
101
a_dest, dimnames_dest = contract (a3, (1 , 2 ), a3, (2 , 1 ))
170
102
@test dimnames_dest == dimnames_dest_dense
171
103
@test size (a_dest) == size (a_dest_dense)
172
- @test a_dest isa BlockSparseArray
104
+ @test_broken a_dest isa BlockArray{elt, 0 }
173
105
@test a_dest ≈ a_dest_dense
174
106
175
107
# outer product
176
- a_dest_dense, dimnames_dest_dense = contract (a3_dense, (1 , 2 ), a3_dense, (3 , 4 ))
177
108
a_dest, dimnames_dest = contract (a3, (1 , 2 ), a3, (3 , 4 ))
109
+ a_dest_dense, dimnames_dest_dense = contract (a3_dense, (1 , 2 ), a3_dense, (3 , 4 ))
178
110
@test dimnames_dest == dimnames_dest_dense
179
111
@test size (a_dest) == size (a_dest_dense)
180
- @test a_dest isa BlockSparseArray
112
+ @test a_dest isa BlockArray
181
113
@test a_dest ≈ a_dest_dense
182
114
end
183
115
end
0 commit comments