Skip to content

Commit

Permalink
Merge 8cb054b into abda5f7
Browse files Browse the repository at this point in the history
  • Loading branch information
devmotion committed Dec 3, 2020
2 parents abda5f7 + 8cb054b commit 5ebeace
Showing 1 changed file with 0 additions and 185 deletions.
185 changes: 0 additions & 185 deletions test/core/ad.jl
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ const FDM = FiniteDifferences
dir = splitdir(splitdir(pathof(Turing))[1])[1]
include(dir*"/test/test_utils/AllUtils.jl")

_to_cov(B) = B * B' + Matrix(I, size(B)...)
@testset "ad.jl" begin
@turing_testset "adr" begin
ad_test_f = gdemo_default
Expand Down Expand Up @@ -49,20 +48,6 @@ _to_cov(B) = B * B' + Matrix(I, size(B)...)
∇E2 = gradient_logp(ZygoteAD(), x, vi, ad_test_f)[2]
@test sort(∇E2) grad_FWAD atol=1e-9
end
@turing_testset "passing duals to distributions" begin
float1 = 1.1
float2 = 2.3
d1 = Dual(1.1)
d2 = Dual(2.3)

@test logpdf(Normal(0, 1), d1).value logpdf(Normal(0, 1), float1) atol=0.001
@test logpdf(Gamma(2, 3), d2).value logpdf(Gamma(2, 3), float2) atol=0.001
@test logpdf(Beta(2, 3), (d2 - d1) / 2).value logpdf(Beta(2, 3), (float2 - float1) / 2) atol=0.001

@test pdf(Normal(0, 1), d1).value pdf(Normal(0, 1), float1) atol=0.001
@test pdf(Gamma(2, 3), d2).value pdf(Gamma(2, 3), float2) atol=0.001
@test pdf(Beta(2, 3), (d2 - d1) / 2).value pdf(Beta(2, 3), (float2 - float1) / 2) atol=0.001
end
@turing_testset "general AD tests" begin
# Tests gdemo gradient.
function logp1(x::Vector)
Expand Down Expand Up @@ -93,176 +78,6 @@ _to_cov(B) = B * B' + Matrix(I, size(B)...)

test_model_ad(wishart_ad(), logp3, [:v])
end
@turing_testset "Tracker, Zygote and ReverseDiff + logdet" begin
rng, N = MersenneTwister(123456), 7
ȳ, B = randn(rng), randn(rng, N, N)
test_reverse_mode_ad(B->logdet(cholesky(_to_cov(B))), ȳ, B; rtol=1e-8, atol=1e-6)
end
@turing_testset "Tracker & Zygote + fill" begin
rng = MersenneTwister(123456)
test_reverse_mode_ad(x->fill(x, 7), randn(rng, 7), randn(rng))
test_reverse_mode_ad(x->fill(x, 7, 11), randn(rng, 7, 11), randn(rng))
test_reverse_mode_ad(x->fill(x, 7, 11, 13), rand(rng, 7, 11, 13), randn(rng))
end
@turing_testset "Tracker, Zygote and ReverseDiff + MvNormal" begin
rng, N = MersenneTwister(123456), 11
B = randn(rng, N, N)
m, A = randn(rng, N), B' * B + I

# Generate from the TuringDenseMvNormal
d, back = Tracker.forward(TuringDenseMvNormal, m, A)
x = Tracker.data(rand(d))

# Check that the logpdf agrees with MvNormal.
d_ref = MvNormal(m, PDMat(A))
@test logpdf(d, x) logpdf(d_ref, x)

test_reverse_mode_ad((m, B, x)->logpdf(MvNormal(m, _to_cov(B)), x), randn(rng), m, B, x)
end
@turing_testset "Tracker, Zygote and ReverseDiff + Diagonal Normal" begin
rng, N = MersenneTwister(123456), 11
m, σ = randn(rng, N), exp.(0.1 .* randn(rng, N)) .+ 1

d = TuringDiagMvNormal(m, σ)
x = rand(d)

# Check that the logpdf agrees with MvNormal.
d_ref = MvNormal(m, σ)
@test logpdf(d, x) logpdf(d_ref, x)

test_reverse_mode_ad((m, σ, x)->logpdf(MvNormal(m, σ), x), randn(rng), m, σ, x)
end
@turing_testset "Tracker, Zygote and ReverseDiff + MvNormal Interface" begin
# Note that we only test methods where the `MvNormal` ctor actually constructs
# a TuringDenseMvNormal.

rng, N = MersenneTwister(123456), 7
m, b, B, x = randn(rng, N), randn(rng, N), randn(rng, N, N), randn(rng, N)
= randn(rng)

# zero mean, dense covariance
test_reverse_mode_ad((B, x)->logpdf(MvNormal(_to_cov(B)), x), randn(rng), B, x)
test_reverse_mode_ad(B->logpdf(MvNormal(_to_cov(B)), x), randn(rng), B)

# zero mean, diagonal covariance
test_reverse_mode_ad((b, x)->logpdf(MvNormal(exp.(b)), x), randn(rng), b, x)
test_reverse_mode_ad(b->logpdf(MvNormal(exp.(b)), x), randn(rng), b)

# dense mean, dense covariance
test_reverse_mode_ad((m, B, x)->logpdf(MvNormal(m, _to_cov(B)), x),
randn(rng),
randn(rng, N), randn(rng, N, N), randn(rng, N),
)
test_reverse_mode_ad((m, B)->logpdf(MvNormal(m, _to_cov(B)), x),
randn(rng),
randn(rng, N), randn(rng, N, N),
)
test_reverse_mode_ad((m, x)->logpdf(MvNormal(m, _to_cov(B)), x),
randn(rng),
randn(rng, N), randn(rng, N),
)
test_reverse_mode_ad((B, x)->logpdf(MvNormal(m, _to_cov(B)), x),
randn(rng),
randn(rng, N, N), randn(rng, N),
)
test_reverse_mode_ad(m->logpdf(MvNormal(m, _to_cov(B)), x), randn(rng), randn(rng, N))
test_reverse_mode_ad(B->logpdf(MvNormal(m, _to_cov(B)), x), randn(rng), randn(rng, N, N))

# dense mean, diagonal covariance
test_reverse_mode_ad((m, b, x)->logpdf(MvNormal(m, Diagonal(exp.(b))), x),
randn(rng),
randn(rng, N), randn(rng, N), randn(rng, N),
)
test_reverse_mode_ad((m, b)->logpdf(MvNormal(m, Diagonal(exp.(b))), x),
randn(rng),
randn(rng, N), randn(rng, N),
)
test_reverse_mode_ad((m, x)->logpdf(MvNormal(m, Diagonal(exp.(b))), x),
randn(rng),
randn(rng, N), randn(rng, N),
)
test_reverse_mode_ad((b, x)->logpdf(MvNormal(m, Diagonal(exp.(b))), x),
randn(rng),
randn(rng, N), randn(rng, N),
)
test_reverse_mode_ad(m->logpdf(MvNormal(m, Diagonal(exp.(b))), x),
randn(rng),
randn(rng, N),
)
test_reverse_mode_ad(b->logpdf(MvNormal(m, Diagonal(exp.(b))), x),
randn(rng),
randn(rng, N),
)

# dense mean, diagonal variance
test_reverse_mode_ad((m, b, x)->logpdf(MvNormal(m, exp.(b)), x),
randn(rng),
randn(rng, N), randn(rng, N), randn(rng, N),
)
test_reverse_mode_ad((m, b)->logpdf(MvNormal(m, exp.(b)), x),
randn(rng),
randn(rng, N), randn(rng, N),
)
test_reverse_mode_ad((m, x)->logpdf(MvNormal(m, exp.(b)), x),
randn(rng),
randn(rng, N), randn(rng, N),
)
test_reverse_mode_ad((b, x)->logpdf(MvNormal(m, exp.(b)), x),
randn(rng),
randn(rng, N), randn(rng, N),
)
test_reverse_mode_ad(m->logpdf(MvNormal(m, exp.(b)), x), randn(rng), randn(rng, N))
test_reverse_mode_ad(b->logpdf(MvNormal(m, exp.(b)), x), randn(rng), randn(rng, N))

# dense mean, constant covariance
b_s = randn(rng)
test_reverse_mode_ad((m, b, x)->logpdf(MvNormal(m, exp(b)), x),
randn(rng),
randn(rng, N), randn(rng), randn(rng, N),
)
test_reverse_mode_ad((m, b)->logpdf(MvNormal(m, exp(b)), x),
randn(rng),
randn(rng, N), randn(rng),
)
test_reverse_mode_ad((m, x)->logpdf(MvNormal(m, exp(b_s)), x),
randn(rng),
randn(rng, N), randn(rng, N)
)
test_reverse_mode_ad((b, x)->logpdf(MvNormal(m, exp(b)), x),
randn(rng),
randn(rng), randn(rng, N),
)
test_reverse_mode_ad(m->logpdf(MvNormal(m, exp(b_s)), x), randn(rng), randn(rng, N))
test_reverse_mode_ad(b->logpdf(MvNormal(m, exp(b)), x), randn(rng), randn(rng))

# dense mean, constant variance
b_s = randn(rng)
test_reverse_mode_ad((m, b, x)->logpdf(MvNormal(m, exp(b) * I), x),
randn(rng),
randn(rng, N), randn(rng), randn(rng, N),
)
test_reverse_mode_ad((m, b)->logpdf(MvNormal(m, exp(b) * I), x),
randn(rng),
randn(rng, N), randn(rng),
)
test_reverse_mode_ad((m, x)->logpdf(MvNormal(m, exp(b_s) * I), x),
randn(rng),
randn(rng, N), randn(rng, N),
)
test_reverse_mode_ad((b, x)->logpdf(MvNormal(m, exp(b) * I), x),
randn(rng),
randn(rng), randn(rng, N),
)
test_reverse_mode_ad(m->logpdf(MvNormal(m, exp(b_s) * I), x), randn(rng), randn(rng, N))
test_reverse_mode_ad(b->logpdf(MvNormal(m, exp(b) * I), x), randn(rng), randn(rng))

# zero mean, constant variance
test_reverse_mode_ad((b, x)->logpdf(MvNormal(N, exp(b)), x),
randn(rng),
randn(rng), randn(rng, N),
)
test_reverse_mode_ad(b->logpdf(MvNormal(N, exp(b)), x), randn(rng), randn(rng))
end
@testset "Simplex Tracker, Zygote and ReverseDiff (with and without caching) AD" begin
@model dir() = begin
theta ~ Dirichlet(1 ./ fill(4, 4))
Expand Down

0 comments on commit 5ebeace

Please sign in to comment.