@@ -16,7 +16,7 @@ using BlockArrays:
16
16
mortar
17
17
using Compat: @compat
18
18
using GPUArraysCore: @allowscalar
19
- using LinearAlgebra: Adjoint, dot, mul!, norm
19
+ using LinearAlgebra: Adjoint, Transpose, dot, mul!, norm
20
20
using NDTensors. BlockSparseArrays:
21
21
@view! ,
22
22
BlockSparseArray,
@@ -33,7 +33,7 @@ using NDTensors.GPUArraysCoreExtensions: cpu
33
33
using NDTensors. SparseArrayInterface: stored_length
34
34
using NDTensors. SparseArrayDOKs: SparseArrayDOK, SparseMatrixDOK, SparseVectorDOK
35
35
using NDTensors. TensorAlgebra: contract
36
- using Test: @test , @test_broken , @test_throws , @testset
36
+ using Test: @test , @test_broken , @test_throws , @testset , @inferred
37
37
include (" TestBlockSparseArraysUtils.jl" )
38
38
39
39
using NDTensors: NDTensors
@@ -70,12 +70,6 @@ using .NDTensorsTestUtils: devices_list, is_supported_eltype
70
70
@test adjoint (a) isa Adjoint{elt,<: BlockSparseArray }
71
71
@test_broken adjoint (a)[Block (1 ), :] isa Adjoint{elt,<: BlockSparseArray }
72
72
# could also be directly a BlockSparseArray
73
-
74
- a = dev (BlockSparseArray {elt} ([1 ], [1 , 1 ]))
75
- @allowscalar a[1 , 2 ] = 1
76
- @test [a[Block (Tuple (it))] for it in eachindex (block_stored_indices (a))] isa Vector
77
- ah = adjoint (a)
78
- @test_broken [ah[Block (Tuple (it))] for it in eachindex (block_stored_indices (ah))] isa Vector
79
73
end
80
74
@testset " Constructors" begin
81
75
# BlockSparseMatrix
@@ -210,6 +204,54 @@ using .NDTensorsTestUtils: devices_list, is_supported_eltype
210
204
# # @test b[Block()[]] == 2
211
205
end
212
206
end
207
+
208
+ @testset " Transpose" begin
209
+ a = dev (BlockSparseArray {elt} ([2 , 2 ], [3 , 3 , 1 ]))
210
+ a[Block (1 , 1 )] = dev (randn (elt, 2 , 3 ))
211
+ a[Block (2 , 3 )] = dev (randn (elt, 2 , 1 ))
212
+
213
+ at = @inferred transpose (a)
214
+ @test at isa Transpose
215
+ @test size (at) == reverse (size (a))
216
+ @test blocksize (at) == reverse (blocksize (a))
217
+ @test stored_length (at) == stored_length (a)
218
+ @test block_stored_length (at) == block_stored_length (a)
219
+ for bind in block_stored_indices (a)
220
+ bindt = Block (reverse (Int .(Tuple (bind))))
221
+ @test bindt in block_stored_indices (at)
222
+ end
223
+
224
+ @test @views (at[Block (1 , 1 )]) == transpose (a[Block (1 , 1 )])
225
+ @test @views (at[Block (1 , 1 )]) isa Transpose
226
+ @test @views (at[Block (3 , 2 )]) == transpose (a[Block (2 , 3 )])
227
+ # TODO : BlockView == AbstractArray calls scalar code
228
+ @test @allowscalar @views (at[Block (1 , 2 )]) == transpose (a[Block (2 , 1 )])
229
+ @test @views (at[Block (1 , 2 )]) isa Transpose
230
+ end
231
+
232
+ @testset " Adjoint" begin
233
+ a = dev (BlockSparseArray {elt} ([2 , 2 ], [3 , 3 , 1 ]))
234
+ a[Block (1 , 1 )] = dev (randn (elt, 2 , 3 ))
235
+ a[Block (2 , 3 )] = dev (randn (elt, 2 , 1 ))
236
+
237
+ at = @inferred adjoint (a)
238
+ @test at isa Adjoint
239
+ @test size (at) == reverse (size (a))
240
+ @test blocksize (at) == reverse (blocksize (a))
241
+ @test stored_length (at) == stored_length (a)
242
+ @test block_stored_length (at) == block_stored_length (a)
243
+ for bind in block_stored_indices (a)
244
+ bindt = Block (reverse (Int .(Tuple (bind))))
245
+ @test bindt in block_stored_indices (at)
246
+ end
247
+
248
+ @test @views (at[Block (1 , 1 )]) == adjoint (a[Block (1 , 1 )])
249
+ @test @views (at[Block (1 , 1 )]) isa Adjoint
250
+ @test @views (at[Block (3 , 2 )]) == adjoint (a[Block (2 , 3 )])
251
+ # TODO : BlockView == AbstractArray calls scalar code
252
+ @test @allowscalar @views (at[Block (1 , 2 )]) == adjoint (a[Block (2 , 1 )])
253
+ @test @views (at[Block (1 , 2 )]) isa Adjoint
254
+ end
213
255
end
214
256
@testset " Tensor algebra" begin
215
257
a = dev (BlockSparseArray {elt} (undef, ([2 , 3 ], [3 , 4 ])))
0 commit comments