@@ -128,3 +128,137 @@ end
128
128
end
129
129
end
130
130
end
131
+
132
+
133
+
134
+ @testset " Planar flow" begin
135
+ Random. seed! (123 )
136
+
137
+ dim = 5
138
+ nlayers = 10
139
+ for T in [Float32, Float64]
140
+ # Create a nsf
141
+ q₀ = MvNormal (zeros (T, dim), I)
142
+ @leaf MvNormal
143
+
144
+ flow = NormalizingFlows. planarflow (q₀, nlayers; paramtype= T)
145
+
146
+ @testset " Sampling and density estimation for type: $T " begin
147
+ ys = rand (flow, 100 )
148
+ ℓs = logpdf (flow, ys)
149
+
150
+ @test size (ys) == (dim, 100 )
151
+ @test length (ℓs) == 100
152
+
153
+ @test eltype (ys) == T
154
+ @test eltype (ℓs) == T
155
+ end
156
+
157
+
158
+ @testset " Inverse compatibility for type: $T " begin
159
+ x = rand (q₀)
160
+ y, lj_fwd = Bijectors. with_logabsdet_jacobian (flow. transform, x)
161
+ x_reconstructed, lj_bwd = Bijectors. with_logabsdet_jacobian (inverse (flow. transform), y)
162
+
163
+ @test x ≈ x_reconstructed rtol= 1e-4
164
+ @test lj_fwd ≈ - lj_bwd rtol= 1e-4
165
+
166
+ x_batch = rand (q₀, 10 )
167
+ y_batch, ljs_fwd = Bijectors. with_logabsdet_jacobian (flow. transform, x_batch)
168
+ x_batch_reconstructed, ljs_bwd = Bijectors. with_logabsdet_jacobian (inverse (flow. transform), y_batch)
169
+
170
+ @test x_batch ≈ x_batch_reconstructed rtol= 1e-4
171
+ @test ljs_fwd ≈ - ljs_bwd rtol= 1e-4
172
+ end
173
+
174
+
175
+ @testset " ELBO test for type: $T " begin
176
+ μ = randn (T, dim)
177
+ Σ = Diagonal (rand (T, dim) .+ T (1e-3 ))
178
+ target = MvNormal (μ, Σ)
179
+ logp (z) = logpdf (target, z)
180
+
181
+ # Compute ELBO
182
+ batchsize = 64
183
+ elbo_value = elbo (Random. default_rng (), flow, logp, batchsize)
184
+ elbo_batch_value = elbo_batch (Random. default_rng (), flow, logp, batchsize)
185
+
186
+ # test when batchsize == 1
187
+ batchsize_single = 1
188
+ elbo_value_single = elbo (Random. default_rng (), flow, logp, batchsize_single)
189
+
190
+ # test elbo_value is not NaN and not Inf
191
+ @test isfinite (elbo_value)
192
+ @test isfinite (elbo_batch_value)
193
+ @test isfinite (elbo_value_single)
194
+ end
195
+ end
196
+ end
197
+
198
+
199
+
200
+ @testset " Radial flow" begin
201
+ Random. seed! (123 )
202
+
203
+ dim = 5
204
+ nlayers = 10
205
+ for T in [Float32, Float64]
206
+ # Create a nsf
207
+ q₀ = MvNormal (zeros (T, dim), I)
208
+ @leaf MvNormal
209
+
210
+ flow = NormalizingFlows. radialflow (q₀, nlayers; paramtype= T)
211
+
212
+ @testset " Sampling and density estimation for type: $T " begin
213
+ ys = rand (flow, 100 )
214
+ ℓs = logpdf (flow, ys)
215
+
216
+ @test size (ys) == (dim, 100 )
217
+ @test length (ℓs) == 100
218
+
219
+ @test eltype (ys) == T
220
+ @test eltype (ℓs) == T
221
+ end
222
+
223
+
224
+ @testset " Inverse compatibility for type: $T " begin
225
+ x = rand (q₀)
226
+ y, lj_fwd = Bijectors. with_logabsdet_jacobian (flow. transform, x)
227
+ x_reconstructed, lj_bwd = Bijectors. with_logabsdet_jacobian (inverse (flow. transform), y)
228
+
229
+ @test x ≈ x_reconstructed rtol= 1e-4
230
+ @test lj_fwd ≈ - lj_bwd rtol= 1e-4
231
+
232
+ x_batch = rand (q₀, 10 )
233
+ y_batch, ljs_fwd = Bijectors. with_logabsdet_jacobian (flow. transform, x_batch)
234
+ x_batch_reconstructed, ljs_bwd = Bijectors. with_logabsdet_jacobian (inverse (flow. transform), y_batch)
235
+
236
+ @test x_batch ≈ x_batch_reconstructed rtol= 1e-4
237
+ @test ljs_fwd ≈ - ljs_bwd rtol= 1e-4
238
+ end
239
+
240
+
241
+ @testset " ELBO test for type: $T " begin
242
+ μ = randn (T, dim)
243
+ Σ = Diagonal (rand (T, dim) .+ T (1e-3 ))
244
+ target = MvNormal (μ, Σ)
245
+ logp (z) = logpdf (target, z)
246
+
247
+ # Compute ELBO
248
+ batchsize = 64
249
+ elbo_value = elbo (Random. default_rng (), flow, logp, batchsize)
250
+ elbo_batch_value = elbo_batch (Random. default_rng (), flow, logp, batchsize)
251
+
252
+ # test when batchsize == 1
253
+ batchsize_single = 1
254
+ elbo_value_single = elbo (Random. default_rng (), flow, logp, batchsize_single)
255
+
256
+ # test elbo_value is not NaN and not Inf
257
+ @test isfinite (elbo_value)
258
+ @test isfinite (elbo_batch_value)
259
+ @test isfinite (elbo_value_single)
260
+ end
261
+ end
262
+ end
263
+
264
+
0 commit comments