@@ -8,208 +8,185 @@ using MeasureBase
8
8
using Aqua
9
9
Aqua. test_all (MeasureBase; ambiguities= false , unbound_args= false )
10
10
11
- function draw2 (μ)
12
- x = rand (μ)
13
- y = rand (μ)
14
- while x == y
15
- y = rand (μ)
16
- end
17
- return (x,y)
18
- end
19
-
20
- function test_measure (μ)
21
- logdensity (μ, testvalue (μ)) isa AbstractFloat
22
- end
23
-
24
- test_measures = [
25
- # Chain(x -> Normal(μ=x), Normal(μ=0.0))
26
- For (3 ) do j Normal (σ= j) end
27
- For (2 ,3 ) do i,j Normal (i,j) end
28
- Lebesgue (ℝ) ^ 3
29
- Lebesgue (ℝ) ^ (2 ,3 )
30
- 3 * Lebesgue (ℝ)
31
- Dirac (π)
32
- Lebesgue (ℝ)
33
- # Normal() ⊙ Cauchy()
34
- ]
35
-
36
- testbroken_measures = [
37
- Pushforward (as𝕀, Normal ())
38
- SpikeMixture (Normal (), 2 )
39
- # InverseGamma(2) # Not defined yet
40
- # MvNormal(I(3)) # Entirely broken for now
41
- CountingMeasure (Float64)
42
- Likelihood
43
- Dirac (0.0 ) + Lebesgue (ℝ)
44
-
45
- TrivialMeasure ()
46
- ]
47
-
48
- @testset " testvalue" begin
49
- for μ in test_measures
50
- @test test_measure (μ)
51
- end
52
-
53
- for μ in testbroken_measures
54
- @test_broken test_measure (μ)
55
- end
11
+ # function draw2(μ)
12
+ # x = rand(μ)
13
+ # y = rand(μ)
14
+ # while x == y
15
+ # y = rand(μ)
16
+ # end
17
+ # return (x,y)
18
+ # end
19
+
20
+ # function test_measure(μ)
21
+ # logdensity(μ, testvalue(μ)) isa AbstractFloat
22
+ # end
23
+
24
+ # test_measures = [
25
+ # # Chain(x -> Normal(μ=x), Normal(μ=0.0))
26
+ # For(3) do j Normal(σ=j) end
27
+ # For(2,3) do i,j Normal(i,j) end
28
+ # Lebesgue(ℝ) ^ 3
29
+ # Lebesgue(ℝ) ^ (2,3)
30
+ # 3 * Lebesgue(ℝ)
31
+ # Dirac(π)
32
+ # Lebesgue(ℝ)
33
+ # # Normal() ⊙ Cauchy()
34
+ # ]
35
+
36
+ # testbroken_measures = [
37
+ # Pushforward(as𝕀, Normal())
38
+ # SpikeMixture(Normal(), 2)
39
+ # # InverseGamma(2) # Not defined yet
40
+ # # MvNormal(I(3)) # Entirely broken for now
41
+ # CountingMeasure(Float64)
42
+ # Likelihood
43
+ # Dirac(0.0) + Lebesgue(ℝ)
44
+
45
+ # TrivialMeasure()
46
+ # ]
47
+
48
+ # @testset "testvalue" begin
49
+ # for μ in test_measures
50
+ # @test test_measure(μ)
51
+ # end
52
+
53
+ # for μ in testbroken_measures
54
+ # @test_broken test_measure(μ)
55
+ # end
56
56
57
- @testset " testvalue(::Chain)" begin
58
- mc = Chain (x -> Normal (μ= x), Normal (μ= 0.0 ))
59
- r = testvalue (mc)
60
- @test logdensity (mc, Iterators. take (r, 10 )) isa AbstractFloat
61
- end
62
- end
63
-
64
-
65
- @testset " Kernel" begin
66
- κ = MeasureBase. kernel (MeasureBase. Dirac, identity)
67
- @test rand (κ (1.1 )) == 1.1
68
- end
69
-
70
- @testset " SpikeMixture" begin
71
- @test rand (SpikeMixture (Dirac (0 ), 0.5 )) == 0
72
- @test rand (SpikeMixture (Dirac (1 ), 1.0 )) == 1
73
- w = 1 / 3
74
- m = SpikeMixture (Normal (), w)
75
- bm = basemeasure (m)
76
- @test (bm. s* bm. w)* bm. m == 1.0 * basemeasure (Normal ())
77
- @test density (m, 1.0 )* (bm. s* bm. w) == w* density (Normal (),1.0 )
78
- @test density (m, 0 )* (bm. s* (1 - bm. w)) ≈ (1 - w)
79
- end
80
-
81
- @testset " Dirac" begin
82
- @test rand (Dirac (0.2 )) == 0.2
83
- @test logdensity (Dirac (0.3 ), 0.3 ) == 0.0
84
- @test logdensity (Dirac (0.3 ), 0.4 ) == - Inf
85
- end
86
-
87
- @testset " For" begin
88
- FORDISTS = [
89
- For (1 : 10 ) do j Normal (μ= j) end
90
- For (4 ,3 ) do μ,σ Normal (μ,σ) end
91
- For (1 : 4 , 1 : 4 ) do μ,σ Normal (μ,σ) end
92
- For (eachrow (rand (4 ,2 ))) do x Normal (x[1 ], x[2 ]) end
93
- For (rand (4 ), rand (4 )) do μ,σ Normal (μ,σ) end
94
- ]
95
-
96
- for d in FORDISTS
97
- @test logdensity (d, rand (d)) isa Float64
98
- end
99
- end
100
-
101
- import MeasureBase.:⋅
102
- function ⋅ (μ:: Normal , kernel)
103
- m = kernel (μ)
104
- Normal (μ = m. μ. μ, σ = sqrt (m. μ. σ^ 2 + m. σ^ 2 ))
105
- end
106
- struct AffineMap{S,T}
107
- B:: S
108
- β:: T
109
- end
110
- (a:: AffineMap )(x) = a. B* x + a. β
111
- (a:: AffineMap )(p:: Normal ) = Normal (μ = a. B* mean (p) + a. β, σ = sqrt (a. B* p. σ^ 2 * a. B' ))
112
-
113
- @testset " DynamicFor" begin
114
- mc = Chain (Normal (μ= 0.0 )) do x Normal (μ= x) end
115
- r = rand (mc)
57
+ # @testset "testvalue(::Chain)" begin
58
+ # mc = Chain(x -> Normal(μ=x), Normal(μ=0.0))
59
+ # r = testvalue(mc)
60
+ # @test logdensity(mc, Iterators.take(r, 10)) isa AbstractFloat
61
+ # end
62
+ # end
63
+
64
+
65
+ # @testset "Kernel" begin
66
+ # κ = MeasureBase.kernel(MeasureBase.Dirac, identity)
67
+ # @test rand(κ(1.1)) == 1.1
68
+ # end
69
+
70
+ # @testset "SpikeMixture" begin
71
+ # @test rand(SpikeMixture(Dirac(0), 0.5)) == 0
72
+ # @test rand(SpikeMixture(Dirac(1), 1.0)) == 1
73
+ # w = 1/3
74
+ # m = SpikeMixture(Normal(), w)
75
+ # bm = basemeasure(m)
76
+ # @test (bm.s*bm.w)*bm.m == 1.0*basemeasure(Normal())
77
+ # @test density(m, 1.0)*(bm.s*bm.w) == w*density(Normal(),1.0)
78
+ # @test density(m, 0)*(bm.s*(1-bm.w)) ≈ (1-w)
79
+ # end
80
+
81
+ # @testset "Dirac" begin
82
+ # @test rand(Dirac(0.2)) == 0.2
83
+ # @test logdensity(Dirac(0.3), 0.3) == 0.0
84
+ # @test logdensity(Dirac(0.3), 0.4) == -Inf
85
+ # end
86
+
87
+ # @testset "For" begin
88
+ # FORDISTS = [
89
+ # For(1:10) do j Normal(μ=j) end
90
+ # For(4,3) do μ,σ Normal(μ,σ) end
91
+ # For(1:4, 1:4) do μ,σ Normal(μ,σ) end
92
+ # For(eachrow(rand(4,2))) do x Normal(x[1], x[2]) end
93
+ # For(rand(4), rand(4)) do μ,σ Normal(μ,σ) end
94
+ # ]
95
+
96
+ # for d in FORDISTS
97
+ # @test logdensity(d, rand(d)) isa Float64
98
+ # end
99
+ # end
100
+
101
+ # import MeasureBase.:⋅
102
+ # function ⋅(μ::Normal, kernel)
103
+ # m = kernel(μ)
104
+ # Normal(μ = m.μ.μ, σ = sqrt(m.μ.σ^2 + m.σ^2))
105
+ # end
106
+ # struct AffineMap{S,T}
107
+ # B::S
108
+ # β::T
109
+ # end
110
+ # (a::AffineMap)(x) = a.B*x + a.β
111
+ # (a::AffineMap)(p::Normal) = Normal(μ = a.B*mean(p) + a.β, σ = sqrt(a.B*p.σ^2*a.B'))
112
+
113
+ # @testset "DynamicFor" begin
114
+ # mc = Chain(Normal(μ=0.0)) do x Normal(μ=x) end
115
+ # r = rand(mc)
116
116
117
- # Check that `r` is now deterministic
118
- @test logdensity (mc, take (r, 100 )) == logdensity (mc, take (r, 100 ))
117
+ # # Check that `r` is now deterministic
118
+ # @test logdensity(mc, take(r, 100)) == logdensity(mc, take(r, 100))
119
119
120
- d2 = For (r) do x Normal (μ= x) end
121
-
122
- @test_broken let r2 = rand (d2)
123
- logdensity (d2, take (r2, 100 )) == logdensity (d2, take (r2, 100 ))
124
- end
125
- end
126
-
127
- @testset " Univariate chain" begin
128
- ξ0 = 1.
129
- x = 1.2
130
- P0 = 1.0
131
-
132
- Φ = 0.8
133
- β = 0.1
134
- Q = 0.2
135
-
136
- μ = Normal (μ= ξ0, σ= sqrt (P0))
137
- kernel = MeasureBase. kernel (Normal; μ= AffineMap (Φ, β), σ= Const (Q))
138
-
139
- @test (μ ⋅ kernel). μ == Normal (μ = 0.9 , σ = 0.824621 ). μ
140
-
141
- chain = Chain (kernel, μ)
142
-
143
-
144
- dyniterate (iter:: TimeLift , :: Nothing ) = dyniterate (iter, 0 => nothing )
145
- tr1 = trace (TimeLift (chain), nothing , u -> u[1 ] > 15 )
146
- tr2 = trace (TimeLift (rand (Random. GLOBAL_RNG, chain)), nothing , u -> u[1 ] > 15 )
147
- collect (Iterators. take (chain, 10 ))
148
- collect (Iterators. take (rand (Random. GLOBAL_RNG, chain), 10 ))
149
- end
150
-
151
- @testset " Likelihood" begin
152
- dps = [
153
- (Normal () , 2.0 )
154
- # (Pushforward(as((μ=asℝ,)), Normal()^1), (μ=2.0,))
155
- ]
156
-
157
- ℓs = [
158
- Likelihood (Normal{(:μ ,)}, 3.0 )
159
- Likelihood (kernel (Normal, x -> (μ= x, σ= 2.0 )), 3.0 )
160
- ]
161
-
162
- for (d,p) in dps
163
- for ℓ in ℓs
164
- @test logdensity (d ⊙ ℓ, p) == logdensity (d, p) + logdensity (ℓ, p)
165
- end
166
- end
167
- end
168
-
169
-
170
- @testset " ProductMeasure" begin
171
- d = For (1 : 10 ) do j Poisson (exp (j)) end
172
- x = Vector {Int16} (undef, 10 )
173
- @test rand! (d,x) isa Vector
174
- @test rand (d) isa Vector
175
-
176
- @testset " Indexed by Generator" begin
177
- d = For ((j^ 2 for j in 1 : 10 )) do i Poisson (i) end
178
- x = Vector {Int16} (undef, 10 )
179
- @test rand! (d,x) isa Vector
180
- @test_broken rand (d) isa Base. Generator
181
- end
182
-
183
- @testset " Indexed by multiple Ints" begin
184
- d = For (2 ,3 ) do μ,σ Normal (μ,σ) end
185
- x = Matrix {Float16} (undef, 2 , 3 )
186
- @test rand! (d, x) isa Matrix
187
- @test_broken rand (d) isa Matrix{Float16}
188
- end
189
- end
190
-
191
- @testset " Show methods" begin
192
- @testset " PowerMeasure" begin
193
- @test repr (Lebesgue (ℝ) ^ 5 ) == " Lebesgue(ℝ) ^ 5"
194
- @test repr (Lebesgue (ℝ) ^ (3 , 2 )) == " Lebesgue(ℝ) ^ (3, 2)"
195
- end
196
- end
197
-
198
- @testset " Density measures and Radon-Nikodym" begin
199
- x = randn ()
200
- let d = ∫ (𝒹 (Cauchy (), Normal ()), Normal ())
201
- @test logdensity (d, x) ≈ logdensity (Cauchy (), x)
202
- end
203
-
204
- let f = 𝒹 (∫ (x -> x^ 2 , Normal ()), Normal ())
205
- @test f (x) ≈ x^ 2
206
- end
207
-
208
- let d = ∫exp (log𝒹 (Cauchy (), Normal ()), Normal ())
209
- @test logdensity (d, x) ≈ logdensity (Cauchy (), x)
210
- end
211
-
212
- let f = log𝒹 (∫exp (x -> x^ 2 , Normal ()), Normal ())
213
- @test f (x) ≈ x^ 2
214
- end
215
- end
120
+ # d2 = For(r) do x Normal(μ=x) end
121
+
122
+ # @test_broken let r2 = rand(d2)
123
+ # logdensity(d2, take(r2, 100)) == logdensity(d2, take(r2, 100))
124
+ # end
125
+ # end
126
+
127
+
128
+ # @testset "Likelihood" begin
129
+ # dps = [
130
+ # (Normal() , 2.0 )
131
+ # # (Pushforward(as((μ=asℝ,)), Normal()^1), (μ=2.0,))
132
+ # ]
133
+
134
+ # ℓs = [
135
+ # Likelihood(Normal{(:μ,)}, 3.0)
136
+ # Likelihood(kernel(Normal, x -> (μ=x, σ=2.0)), 3.0)
137
+ # ]
138
+
139
+ # for (d,p) in dps
140
+ # for ℓ in ℓs
141
+ # @test logdensity(d ⊙ ℓ, p) == logdensity(d, p) + logdensity(ℓ, p)
142
+ # end
143
+ # end
144
+ # end
145
+
146
+
147
+ # @testset "ProductMeasure" begin
148
+ # d = For(1:10) do j Poisson(exp(j)) end
149
+ # x = Vector{Int16}(undef, 10)
150
+ # @test rand!(d,x) isa Vector
151
+ # @test rand(d) isa Vector
152
+
153
+ # @testset "Indexed by Generator" begin
154
+ # d = For((j^2 for j in 1:10)) do i Poisson(i) end
155
+ # x = Vector{Int16}(undef, 10)
156
+ # @test rand!(d,x) isa Vector
157
+ # @test_broken rand(d) isa Base.Generator
158
+ # end
159
+
160
+ # @testset "Indexed by multiple Ints" begin
161
+ # d = For(2,3) do μ,σ Normal(μ,σ) end
162
+ # x = Matrix{Float16}(undef, 2, 3)
163
+ # @test rand!(d, x) isa Matrix
164
+ # @test_broken rand(d) isa Matrix{Float16}
165
+ # end
166
+ # end
167
+
168
+ # @testset "Show methods" begin
169
+ # @testset "PowerMeasure" begin
170
+ # @test repr(Lebesgue(ℝ) ^ 5) == "Lebesgue(ℝ) ^ 5"
171
+ # @test repr(Lebesgue(ℝ) ^ (3, 2)) == "Lebesgue(ℝ) ^ (3, 2)"
172
+ # end
173
+ # end
174
+
175
+ # @testset "Density measures and Radon-Nikodym" begin
176
+ # x = randn()
177
+ # let d = ∫(𝒹(Cauchy(), Normal()), Normal())
178
+ # @test logdensity(d, x) ≈ logdensity(Cauchy(), x)
179
+ # end
180
+
181
+ # let f = 𝒹(∫(x -> x^2, Normal()), Normal())
182
+ # @test f(x) ≈ x^2
183
+ # end
184
+
185
+ # let d = ∫exp(log𝒹(Cauchy(), Normal()), Normal())
186
+ # @test logdensity(d, x) ≈ logdensity(Cauchy(), x)
187
+ # end
188
+
189
+ # let f = log𝒹(∫exp(x -> x^2, Normal()), Normal())
190
+ # @test f(x) ≈ x^2
191
+ # end
192
+ # end
0 commit comments