• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

iitis / QuantumInformation.jl / 20861084561

09 Jan 2026 06:07PM UTC coverage: 75.516% (-0.6%) from 76.078%
20861084561

Pull #107

github

lpawela
rmeove old julia versions in CI
Pull Request #107: SCS compat problems solution

3 of 4 new or added lines in 1 file covered. (75.0%)

15 existing lines in 7 files now uncovered.

549 of 727 relevant lines covered (75.52%)

139.16 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

100.0
/src/randomqobjects.jl
1
export HaarKet, HilbertSchmidtStates, ChoiJamiolkowskiMatrices,
2
    HaarPOVM, WishartPOVM, VonNeumannPOVM
3

4

5
struct HaarKet{β} <: QIContinuousMatrixDistribution
6
    d::Int
9✔
7
end
8

9
HaarKet(d::Int) = HaarKet{2}(d)
3✔
10

11
function rand(rng::AbstractRNG, h::HaarKet{1})
3✔
12
    ψ = randn(rng, h.d)
13✔
13
    renormalize!(ψ)
21✔
UNCOV
14
    ψ
2✔
15
 end
16

17
 function rand(rng::AbstractRNG, h::HaarKet{2})
6✔
18
     ψ = randn(rng, h.d) + 1im * randn(rng, h.d)
26✔
19
     renormalize!(ψ)
42✔
UNCOV
20
     ψ
4✔
21
  end
22

23
# Random mixed states
24
struct HilbertSchmidtStates{β, K} <: QIContinuousMatrixDistribution
25
    w::WishartEnsemble
26
    d::Int
27

28
    function HilbertSchmidtStates{β, K}(d::Int) where {β, K}
16✔
29
        w = WishartEnsemble{β, K}(d)
18✔
30
        new(w, w.d)
18✔
31
    end
32
end
33
HilbertSchmidtStates{β}(d::Int) where β = HilbertSchmidtStates{β, 1}(d)
3✔
34
HilbertSchmidtStates(d::Int) = HilbertSchmidtStates{2, 1}(d)
3✔
35

36
function rand(rng::AbstractRNG, hs::HilbertSchmidtStates{β, K}) where {β, K}
6✔
37
    ρ = rand(rng, hs.w)
6✔
38
    renormalize!(ρ)
6✔
UNCOV
39
    ρ
4✔
40
end
41

42
#Random channels
43
struct ChoiJamiolkowskiMatrices{β, K} <: QIContinuousMatrixDistribution
44
    w::WishartEnsemble
45
    idim::Int
46
    odim::Int
47

48
    function ChoiJamiolkowskiMatrices{β, K}(idim::Int, odim::Int)  where {β, K}
30✔
49
        w = WishartEnsemble{β, K}(idim * odim)
36✔
50
        new(w, idim, odim)
36✔
51
    end
52
end
53

54
function ChoiJamiolkowskiMatrices{β}(idim::Int, odim::Int) where β
13✔
55
    ChoiJamiolkowskiMatrices{β, 1}(idim, odim)
18✔
56
end
57

58
function ChoiJamiolkowskiMatrices{β}(d::Int) where β
3✔
59
    ChoiJamiolkowskiMatrices{β}(d, d)
3✔
60
end
61

62
function ChoiJamiolkowskiMatrices(idim::Int, odim::Int)
11✔
63
    ChoiJamiolkowskiMatrices{2}(idim, odim)
12✔
64
end
65

66
function ChoiJamiolkowskiMatrices(d::Int)
3✔
67
    ChoiJamiolkowskiMatrices(d, d)
3✔
68
end
69

70
function rand(rng::AbstractRNG, c::ChoiJamiolkowskiMatrices{β, K}) where {β, K}
12✔
71
    z = rand(rng, c.w)
12✔
72
    y = ptrace(z, [c.odim, c.idim], [1])
24✔
73
    sy = funcmh!(x -> 1 / sqrt(x), y)
60✔
74
    onesy = Matrix(I, c.odim, c.odim) ⊗ sy # onesy = eye(c.odim) ⊗ sy
12✔
75
    DynamicalMatrix(onesy * z * onesy, c.idim, c.odim)
12✔
76
end
77

78
# Random POVMs implemented according to
79
# https://arxiv.org/pdf/1902.04751.pdf
80
abstract type AbstractHaarPOVM <: QIContinuousMatrixDistribution
81
end
82

83
struct HaarPOVM{N} <: AbstractHaarPOVM
84
    idim::Int
85
    odim::Int
86
    c::HaarIsometry
87

88
    function HaarPOVM{N}(idim::Int, odim::Int) where N
4✔
89
        c = HaarIsometry(idim::Int, N*odim::Int)
9✔
90
        new(idim, odim, c)
3✔
91
    end
92
end
93
# N controls the rank (mixedness) of the effects, N=1 gives rank-one effects
94
HaarPOVM(idim::Int, odim::Int) = HaarPOVM{1}(idim, odim)
6✔
95

96
#this should use slicing of V
97
function rand(rng::AbstractRNG, c::HaarPOVM{N}) where N
2✔
98
    V = rand(rng, c.c)
3✔
99
    POVMMeasurement([V'*(ketbra(i, i, c.odim) ⊗ 𝕀(N))*V for i=1:c.odim])
3✔
100
end
101

102
struct VonNeumannPOVM <: AbstractHaarPOVM
103
    d::Int
104
    c::CUE
105

106
    function VonNeumannPOVM(d::Int)
3✔
107
        c = CUE(d)
3✔
108
        new(d, c)
3✔
109
    end
110
end
111

112
function rand(rng::AbstractRNG, c::VonNeumannPOVM)
2✔
113
    V = rand(rng, c.c)
3✔
114
    POVMMeasurement([proj(V[:, i]) for i=1:c.d])
3✔
115
end
116

117
struct WishartPOVM{V} <: QIContinuousMatrixDistribution
118
    idim::Int
119
    odim::Int
120
    c::Vector{WishartEnsemble}
121

122
    function WishartPOVM{V}(idim::Int) where V
3✔
123
        odim = length(V)
3✔
124
        c = [WishartEnsemble{2, v}(idim) for v=V]
3✔
125
        new(idim, odim, c)
3✔
126
    end
127
end
128

129
function WishartPOVM(idim::Int, odim::Int, K::Real=1)
6✔
130
    V = Tuple(round.(Int, K .* ones(odim)))
6✔
131
    WishartPOVM{V}(idim)
3✔
132
end
133

134
function rand(rng::AbstractRNG, c::WishartPOVM)
3✔
135
    Ws = map(x->rand(rng, x), c.c)
12✔
136
    S = sum(Ws)
3✔
137
    Ssq = funcmh!(x->1/sqrt(x), S)
9✔
138
    POVMMeasurement([Ssq * W * Ssq for W=Ws])
3✔
139
end
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc