-
Notifications
You must be signed in to change notification settings - Fork 41
Expand file tree
/
Copy pathHaar.jl
More file actions
52 lines (37 loc) · 1.11 KB
/
Haar.jl
File metadata and controls
52 lines (37 loc) · 1.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
using RandomMatrices
using LinearAlgebra: I, tr, Diagonal, QRPackedQ
using Test
using Random
@testset "Haar" begin
N=5
A=randn(N,N)
B=randn(N,N)
Q=rand(Haar(1), N)
#Test case where there are no symbolic Haar matrices
@test_broken eval(expectation(:(A*B))) ≈ A*B
#Test case where there is one pair of symbolic Haar matrices
@test_broken tr(eval(expectation(:(A*Q*B*Q')))) ≈ tr(A)*tr(B)/N
println("Case 3")
@test_broken println("E(A*Q*B*Q'*A*Q*B*Q') = ", eval(expectation(N, :Q, :(A*Q*B*Q'*A*Q*B*Q'))))
for T in (Float64, ComplexF64)
A = Stewart(T, N)
@test A'A ≈ Matrix{T}(I, N, N)
A2 = Matrix(A)
@test A2 ≈ QRPackedQ(A.factors, A.τ)*Diagonal(A.signs)
C = randn(T, N, N)
@test A*C ≈ A2*C
@test C*A ≈ C*A2
@test A'*C ≈ A2'*C
@test C*A' ≈ C*A2'
end
@testset "Local RNG reproducibility" begin
rng1 = MersenneTwister(1234)
rng2 = MersenneTwister(1234)
A = rand(rng1, Haar(1), N)
B = rand(rng2, Haar(1), N)
@test A ≈ B
# Confirm that rand still works without passing an RNG
C = rand(Haar(1), N)
@test size(C) == (N, N)
end
end # testset