|
1 |
| -using Test: @test_skip |
2 |
| -# TODO: Add this back once `BlockSparseArrays` is set up. |
3 |
| -@test_skip begin |
4 |
| - using BlockArrays: Block, blocksize |
5 |
| - using BlockSparseArrays: BlockSparseArray |
6 |
| - using GradedUnitRanges: gradedrange |
7 |
| - using SparseArraysBase: densearray |
8 |
| - using SymmetrySectors: U1 |
9 |
| - using TensorAlgebra: contract |
10 |
| - using Random: randn! |
11 |
| - using Test: @test, @testset |
| 1 | +using BlockArrays: Block, blocksize |
| 2 | +using BlockSparseArrays: BlockSparseArray |
| 3 | +using GradedUnitRanges: dual, gradedrange |
| 4 | +using SparseArraysBase: densearray |
| 5 | +using SymmetrySectors: U1 |
| 6 | +using TensorAlgebra: contract |
| 7 | +using Random: randn! |
| 8 | +using Test: @test, @testset |
12 | 9 |
|
13 |
| - function randn_blockdiagonal(elt::Type, axes::Tuple) |
14 |
| - a = BlockSparseArray{elt}(axes) |
15 |
| - blockdiaglength = minimum(blocksize(a)) |
16 |
| - for i in 1:blockdiaglength |
17 |
| - b = Block(ntuple(Returns(i), ndims(a))) |
18 |
| - a[b] = randn!(a[b]) |
19 |
| - end |
20 |
| - return a |
| 10 | +function randn_blockdiagonal(elt::Type, axes::Tuple) |
| 11 | + a = BlockSparseArray{elt}(axes) |
| 12 | + blockdiaglength = minimum(blocksize(a)) |
| 13 | + for i in 1:blockdiaglength |
| 14 | + b = Block(ntuple(Returns(i), ndims(a))) |
| 15 | + a[b] = randn!(a[b]) |
21 | 16 | end
|
| 17 | + return a |
| 18 | +end |
22 | 19 |
|
23 |
| - const elts = (Float32, Float64, Complex{Float32}, Complex{Float64}) |
24 |
| - @testset "`contract` `BlockSparseArray` (eltype=$elt)" for elt in elts |
25 |
| - d = gradedrange([U1(0) => 2, U1(1) => 3]) |
26 |
| - a1 = randn_blockdiagonal(elt, (d, d, d)) |
27 |
| - a2 = randn_blockdiagonal(elt, (d, d, d)) |
28 |
| - a_dest, dimnames_dest = contract(a1, (-1, 1, -2), a2, (-1, -2, 2)) |
29 |
| - a1_dense = densearray(a1) |
30 |
| - a2_dense = densearray(a2) |
31 |
| - a_dest_dense, dimnames_dest_dense = contract( |
32 |
| - a1_dense, (-1, 1, -2), a2_dense, (-1, -2, 2) |
33 |
| - ) |
34 |
| - @test dimnames_dest == dimnames_dest_dense |
35 |
| - @test a_dest ≈ a_dest_dense |
36 |
| - end |
| 20 | +const elts = (Float32, Float64, Complex{Float32}, Complex{Float64}) |
| 21 | +@testset "`contract` `BlockSparseArray` (eltype=$elt)" for elt in elts |
| 22 | + d = gradedrange([U1(0) => 2, U1(1) => 3]) |
| 23 | + a1 = randn_blockdiagonal(elt, (d, d, dual(d), dual(d))) |
| 24 | + a2 = randn_blockdiagonal(elt, (d, d, dual(d), dual(d))) |
| 25 | + a_dest, dimnames_dest = contract(a1, (1, -1, 2, -2), a2, (2, -3, 1, -4)) |
| 26 | + a1_dense = densearray(a1) |
| 27 | + a2_dense = densearray(a2) |
| 28 | + a_dest_dense, dimnames_dest_dense = contract( |
| 29 | + a1_dense, (1, -1, 2, -2), a2_dense, (2, -3, 1, -4) |
| 30 | + ) |
| 31 | + @test dimnames_dest == dimnames_dest_dense |
| 32 | + @test a_dest ≈ a_dest_dense |
37 | 33 | end
|
0 commit comments