From 2f65df1e68d68020214553aaa1dc11880c4456bb Mon Sep 17 00:00:00 2001 From: Tor Erlend Fjelde Date: Fri, 6 Oct 2023 18:09:39 +0100 Subject: [PATCH 01/16] preserve context from model in `rand` --- src/model.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/model.jl b/src/model.jl index 29c42f947..c0cc2f26f 100644 --- a/src/model.jl +++ b/src/model.jl @@ -1037,7 +1037,7 @@ function Base.rand(rng::Random.AbstractRNG, ::Type{T}, model::Model) where {T} evaluate!!( model, SimpleVarInfo{Float64}(OrderedDict()), - SamplingContext(rng, SampleFromPrior(), DefaultContext()), + SamplingContext(rng, SampleFromPrior(), model.context), ), ) return values_as(x, T) From 96bac6633e53df8d1f97d81745f6d923db7a0042 Mon Sep 17 00:00:00 2001 From: Tor Erlend Fjelde Date: Fri, 6 Oct 2023 18:13:01 +0100 Subject: [PATCH 02/16] replace rand overloads in TestUtils with definitions of rand_prior_true so we can properly test rand --- src/test_utils.jl | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/test_utils.jl b/src/test_utils.jl index 14da79afa..c9ad793b0 100644 --- a/src/test_utils.jl +++ b/src/test_utils.jl @@ -252,7 +252,7 @@ function logprior_true_with_logabsdet_jacobian( return (x=x_unconstrained,), logprior_true(model, x) - Δlogp end -function Random.rand( +function rand_prior_true( rng::Random.AbstractRNG, ::Type{NamedTuple}, model::Model{typeof(demo_one_variable_multiple_constraints)}, @@ -299,7 +299,7 @@ function logprior_true_with_logabsdet_jacobian(model::Model{typeof(demo_lkjchol) return (x=x_unconstrained,), logprior_true(model, x) - Δlogp end -function Random.rand( +function rand_prior_true( rng::Random.AbstractRNG, ::Type{NamedTuple}, model::Model{typeof(demo_lkjchol)} ) x = rand(rng, LKJCholesky(model.args.d, 1.0)) @@ -715,7 +715,7 @@ const DemoModels = Union{ # We require demo models to have explict impleentations of `rand` since we want # these to be considered as ground truth. -function Random.rand(rng::Random.AbstractRNG, ::Type{NamedTuple}, model::DemoModels) +function rand_prior_true(rng::Random.AbstractRNG, ::Type{NamedTuple}, model::DemoModels) return error("demo models requires explicit implementation of rand") end @@ -732,7 +732,7 @@ function posterior_optima(::UnivariateAssumeDemoModels) # TODO: Figure out exact for `s`. return (s=0.907407, m=7 / 6) end -function Random.rand( +function rand_prior_true( rng::Random.AbstractRNG, ::Type{NamedTuple}, model::UnivariateAssumeDemoModels ) s = rand(rng, InverseGamma(2, 3)) @@ -755,7 +755,7 @@ const MultivariateAssumeDemoModels = Union{ } function posterior_mean(model::MultivariateAssumeDemoModels) # Get some containers to fill. - vals = Random.rand(model) + vals = rand_prior_true(model) vals.s[1] = 19 / 8 vals.m[1] = 3 / 4 @@ -767,7 +767,7 @@ function posterior_mean(model::MultivariateAssumeDemoModels) end function likelihood_optima(model::MultivariateAssumeDemoModels) # Get some containers to fill. - vals = Random.rand(model) + vals = rand_prior_true(model) # NOTE: These are "as close to zero as we can get". vals.s[1] = 1e-32 @@ -780,7 +780,7 @@ function likelihood_optima(model::MultivariateAssumeDemoModels) end function posterior_optima(model::MultivariateAssumeDemoModels) # Get some containers to fill. - vals = Random.rand(model) + vals = rand_prior_true(model) # TODO: Figure out exact for `s[1]`. vals.s[1] = 0.890625 @@ -790,7 +790,7 @@ function posterior_optima(model::MultivariateAssumeDemoModels) return vals end -function Random.rand( +function rand_prior_true( rng::Random.AbstractRNG, ::Type{NamedTuple}, model::MultivariateAssumeDemoModels ) # Get template values from `model`. @@ -810,7 +810,7 @@ const MatrixvariateAssumeDemoModels = Union{ } function posterior_mean(model::MatrixvariateAssumeDemoModels) # Get some containers to fill. - vals = Random.rand(model) + vals = rand_prior_true(model) vals.s[1, 1] = 19 / 8 vals.m[1] = 3 / 4 @@ -822,7 +822,7 @@ function posterior_mean(model::MatrixvariateAssumeDemoModels) end function likelihood_optima(model::MatrixvariateAssumeDemoModels) # Get some containers to fill. - vals = Random.rand(model) + vals = rand_prior_true(model) # NOTE: These are "as close to zero as we can get". vals.s[1, 1] = 1e-32 @@ -835,7 +835,7 @@ function likelihood_optima(model::MatrixvariateAssumeDemoModels) end function posterior_optima(model::MatrixvariateAssumeDemoModels) # Get some containers to fill. - vals = Random.rand(model) + vals = rand_prior_true(model) # TODO: Figure out exact for `s[1]`. vals.s[1, 1] = 0.890625 @@ -845,7 +845,7 @@ function posterior_optima(model::MatrixvariateAssumeDemoModels) return vals end -function Base.rand( +function rand_prior_true( rng::Random.AbstractRNG, ::Type{NamedTuple}, model::MatrixvariateAssumeDemoModels ) # Get template values from `model`. From 979b747405da7f9925f5d9a576aa3b952cff33ca Mon Sep 17 00:00:00 2001 From: Tor Erlend Fjelde Date: Fri, 6 Oct 2023 18:27:38 +0100 Subject: [PATCH 03/16] removed NamedTuple from signature of TestUtils.rand_prior_true --- src/test_utils.jl | 19 ++++++++++++++----- test/model.jl | 6 +++--- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/test_utils.jl b/src/test_utils.jl index c9ad793b0..cc0f859ec 100644 --- a/src/test_utils.jl +++ b/src/test_utils.jl @@ -168,6 +168,15 @@ corresponding value using `get`, e.g. `get(posterior_mean(model), varname)`. """ function posterior_mean end +""" + rand_prior_true([rng::AbstractRNG, ]model::DynamicPPL.Model) + +Return a `NamedTuple` of realizations from the prior of `model` compatible with `varnames(model)`. +""" +function rand_prior_true(model::DynamicPPL.Model) + return rand_prior_true(Random.default_rng(), model) +end + """ demo_dynamic_constraint() @@ -300,7 +309,7 @@ function logprior_true_with_logabsdet_jacobian(model::Model{typeof(demo_lkjchol) end function rand_prior_true( - rng::Random.AbstractRNG, ::Type{NamedTuple}, model::Model{typeof(demo_lkjchol)} + rng::Random.AbstractRNG, model::Model{typeof(demo_lkjchol)} ) x = rand(rng, LKJCholesky(model.args.d, 1.0)) return (x=x,) @@ -715,7 +724,7 @@ const DemoModels = Union{ # We require demo models to have explict impleentations of `rand` since we want # these to be considered as ground truth. -function rand_prior_true(rng::Random.AbstractRNG, ::Type{NamedTuple}, model::DemoModels) +function rand_prior_true(rng::Random.AbstractRNG, model::DemoModels) return error("demo models requires explicit implementation of rand") end @@ -733,7 +742,7 @@ function posterior_optima(::UnivariateAssumeDemoModels) return (s=0.907407, m=7 / 6) end function rand_prior_true( - rng::Random.AbstractRNG, ::Type{NamedTuple}, model::UnivariateAssumeDemoModels + rng::Random.AbstractRNG, model::UnivariateAssumeDemoModels ) s = rand(rng, InverseGamma(2, 3)) m = rand(rng, Normal(0, sqrt(s))) @@ -791,7 +800,7 @@ function posterior_optima(model::MultivariateAssumeDemoModels) return vals end function rand_prior_true( - rng::Random.AbstractRNG, ::Type{NamedTuple}, model::MultivariateAssumeDemoModels + rng::Random.AbstractRNG, model::MultivariateAssumeDemoModels ) # Get template values from `model`. retval = model(rng) @@ -846,7 +855,7 @@ function posterior_optima(model::MatrixvariateAssumeDemoModels) return vals end function rand_prior_true( - rng::Random.AbstractRNG, ::Type{NamedTuple}, model::MatrixvariateAssumeDemoModels + rng::Random.AbstractRNG, model::MatrixvariateAssumeDemoModels ) # Get template values from `model`. retval = model(rng) diff --git a/test/model.jl b/test/model.jl index fa7f5de47..09a125104 100644 --- a/test/model.jl +++ b/test/model.jl @@ -218,7 +218,7 @@ end Random.seed!(1776) s, m = model() sample_namedtuple = (; s=s, m=m) - sample_dict = Dict(@varname(s) => s, @varname(m) => m) + sample_dict = OrderedDict(@varname(s) => s, @varname(m) => m) # With explicit RNG @test rand(Random.seed!(1776), model) == sample_namedtuple @@ -231,7 +231,7 @@ end Random.seed!(1776) @test rand(NamedTuple, model) == sample_namedtuple Random.seed!(1776) - @test rand(Dict, model) == sample_dict + @test rand(OrderedDict, model) == sample_dict end @testset "default arguments" begin @@ -259,7 +259,7 @@ end @testset "TestUtils" begin @testset "$(model.f)" for model in DynamicPPL.TestUtils.DEMO_MODELS - x = rand(model) + x = DynamicPPL.TestUtils.rand_prior_true(model) # Ensure log-probability computations are implemented. @test logprior(model, x) ≈ DynamicPPL.TestUtils.logprior_true(model, x...) @test loglikelihood(model, x) ≈ From 54d48fd154e93088dbf86ec526829652aff2759f Mon Sep 17 00:00:00 2001 From: Tor Erlend Fjelde Date: Fri, 6 Oct 2023 20:43:54 +0100 Subject: [PATCH 04/16] updated references to previous overloads of rand to now use rand_prior_true --- test/linking.jl | 8 +++++--- test/logdensityfunction.jl | 2 +- test/loglikelihoods.jl | 2 +- test/simple_varinfo.jl | 10 +++++----- test/varinfo.jl | 4 ++-- 5 files changed, 14 insertions(+), 12 deletions(-) diff --git a/test/linking.jl b/test/linking.jl index 493a0d2b0..6f5b348d6 100644 --- a/test/linking.jl +++ b/test/linking.jl @@ -72,7 +72,8 @@ end @model demo() = m ~ dist model = demo() - vis = DynamicPPL.TestUtils.setup_varinfos(model, rand(model), (@varname(m),)) + example_values = DynamicPPL.TestUtils.rand_prior_true(model) + vis = DynamicPPL.TestUtils.setup_varinfos(model, example_values, (@varname(m),)) @testset "$(short_varinfo_name(vi))" for vi in vis # Evaluate once to ensure we have `logp` value. vi = last(DynamicPPL.evaluate!!(model, vi, DefaultContext())) @@ -105,7 +106,7 @@ end @testset "d=$d" for d in [2, 3, 5] model = demo_lkj(d) dist = LKJCholesky(d, 1.0, uplo) - values_original = rand(model) + values_original = DynamicPPL.TestUtils.rand_prior_true(model) vis = DynamicPPL.TestUtils.setup_varinfos( model, values_original, (@varname(x),) ) @@ -146,7 +147,8 @@ end @model demo_dirichlet(d::Int) = x ~ Dirichlet(d, 1.0) @testset "d=$d" for d in [2, 3, 5] model = demo_dirichlet(d) - vis = DynamicPPL.TestUtils.setup_varinfos(model, rand(model), (@varname(x),)) + example_values = DynamicPPL.TestUtils.rand_prior_true(model) + vis = DynamicPPL.TestUtils.setup_varinfos(model, example_values, (@varname(x),)) @testset "$(short_varinfo_name(vi))" for vi in vis lp = logpdf(Dirichlet(d, 1.0), vi[:]) @test length(vi[:]) == d diff --git a/test/logdensityfunction.jl b/test/logdensityfunction.jl index 6eddd8ec6..ea70ace29 100644 --- a/test/logdensityfunction.jl +++ b/test/logdensityfunction.jl @@ -2,7 +2,7 @@ using Test, DynamicPPL, LogDensityProblems @testset "LogDensityFunction" begin @testset "$(nameof(model))" for model in DynamicPPL.TestUtils.DEMO_MODELS - example_values = rand(NamedTuple, model) + example_values = DynamicPPL.TestUtils.rand_prior_true(model) vns = DynamicPPL.TestUtils.varnames(model) varinfos = DynamicPPL.TestUtils.setup_varinfos(model, example_values, vns) diff --git a/test/loglikelihoods.jl b/test/loglikelihoods.jl index b390997af..1075ce333 100644 --- a/test/loglikelihoods.jl +++ b/test/loglikelihoods.jl @@ -1,6 +1,6 @@ @testset "loglikelihoods.jl" begin @testset "$(m.f)" for m in DynamicPPL.TestUtils.DEMO_MODELS - example_values = rand(NamedTuple, m) + example_values = DynamicPPL.TestUtils.rand_prior_true(m) # Instantiate a `VarInfo` with the example values. vi = VarInfo(m) diff --git a/test/simple_varinfo.jl b/test/simple_varinfo.jl index 9a18c439d..869fb82b3 100644 --- a/test/simple_varinfo.jl +++ b/test/simple_varinfo.jl @@ -60,7 +60,7 @@ @testset "link!! & invlink!! on $(nameof(model))" for model in DynamicPPL.TestUtils.DEMO_MODELS - values_constrained = rand(NamedTuple, model) + values_constrained = DynamicPPL.TestUtils.rand_prior_true(model) @testset "$(typeof(vi))" for vi in ( SimpleVarInfo(Dict()), SimpleVarInfo(values_constrained), VarInfo(model) ) @@ -112,7 +112,7 @@ # We might need to pre-allocate for the variable `m`, so we need # to see whether this is the case. - svi_nt = SimpleVarInfo(rand(NamedTuple, model)) + svi_nt = SimpleVarInfo(DynamicPPL.TestUtils.rand_prior_true(model)) svi_dict = SimpleVarInfo(VarInfo(model), Dict) @testset "$(nameof(typeof(DynamicPPL.values_as(svi))))" for svi in ( @@ -121,7 +121,7 @@ DynamicPPL.settrans!!(svi_nt, true), DynamicPPL.settrans!!(svi_dict, true), ) - # Random seed is set in each `@testset`, so we need to sample + # RandOM seed is set in each `@testset`, so we need to sample # a new realization for `m` here. retval = model() @@ -138,7 +138,7 @@ @test getlogp(svi_new) != 0 ### Evaluation ### - values_eval_constrained = rand(NamedTuple, model) + values_eval_constrained = DynamicPPL.TestUtils.rand_prior_true(model) if DynamicPPL.istrans(svi) _values_prior, logpri_true = DynamicPPL.TestUtils.logprior_true_with_logabsdet_jacobian( model, values_eval_constrained... @@ -225,7 +225,7 @@ model = DynamicPPL.TestUtils.demo_static_transformation() varinfos = DynamicPPL.TestUtils.setup_varinfos( - model, rand(NamedTuple, model), [@varname(s), @varname(m)] + model, DynamicPPL.TestUtils.rand_prior_true(model), [@varname(s), @varname(m)] ) @testset "$(short_varinfo_name(vi))" for vi in varinfos # Initialize varinfo and link. diff --git a/test/varinfo.jl b/test/varinfo.jl index 598ea7814..07d2391e6 100644 --- a/test/varinfo.jl +++ b/test/varinfo.jl @@ -318,7 +318,7 @@ @testset "values_as" begin @testset "$(nameof(model))" for model in DynamicPPL.TestUtils.DEMO_MODELS - example_values = rand(NamedTuple, model) + example_values = DynamicPPL.TestUtils.rand_prior_true(model) vns = DynamicPPL.TestUtils.varnames(model) # Set up the different instances of `AbstractVarInfo` with the desired values. @@ -363,7 +363,7 @@ DynamicPPL.TestUtils.demo_lkjchol(), ] @testset "mutating=$mutating" for mutating in [false, true] - value_true = rand(model) + value_true = DynamicPPL.TestUtils.rand_prior_true(model) varnames = DynamicPPL.TestUtils.varnames(model) varinfos = DynamicPPL.TestUtils.setup_varinfos(model, value_true, varnames) @testset "$(short_varinfo_name(varinfo))" for varinfo in varinfos From 73ff6411f1989db1f1420925dd46e0fe4364ac83 Mon Sep 17 00:00:00 2001 From: Tor Erlend Fjelde Date: Fri, 6 Oct 2023 20:52:35 +0100 Subject: [PATCH 05/16] test rand for DEMO_MODELS --- test/model.jl | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/model.jl b/test/model.jl index 09a125104..654a9722b 100644 --- a/test/model.jl +++ b/test/model.jl @@ -260,6 +260,10 @@ end @testset "TestUtils" begin @testset "$(model.f)" for model in DynamicPPL.TestUtils.DEMO_MODELS x = DynamicPPL.TestUtils.rand_prior_true(model) + + # Ensure `rand` is correct. + @test rand(model) == x + # Ensure log-probability computations are implemented. @test logprior(model, x) ≈ DynamicPPL.TestUtils.logprior_true(model, x...) @test loglikelihood(model, x) ≈ From e92c4bf9a28244dc2e47f344fdefa9c53a59cb17 Mon Sep 17 00:00:00 2001 From: Tor Erlend Fjelde Date: Sat, 7 Oct 2023 01:42:30 +0100 Subject: [PATCH 06/16] formatting --- src/test_utils.jl | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/src/test_utils.jl b/src/test_utils.jl index cc0f859ec..f22ef1c7c 100644 --- a/src/test_utils.jl +++ b/src/test_utils.jl @@ -308,9 +308,7 @@ function logprior_true_with_logabsdet_jacobian(model::Model{typeof(demo_lkjchol) return (x=x_unconstrained,), logprior_true(model, x) - Δlogp end -function rand_prior_true( - rng::Random.AbstractRNG, model::Model{typeof(demo_lkjchol)} -) +function rand_prior_true(rng::Random.AbstractRNG, model::Model{typeof(demo_lkjchol)}) x = rand(rng, LKJCholesky(model.args.d, 1.0)) return (x=x,) end @@ -741,9 +739,7 @@ function posterior_optima(::UnivariateAssumeDemoModels) # TODO: Figure out exact for `s`. return (s=0.907407, m=7 / 6) end -function rand_prior_true( - rng::Random.AbstractRNG, model::UnivariateAssumeDemoModels -) +function rand_prior_true(rng::Random.AbstractRNG, model::UnivariateAssumeDemoModels) s = rand(rng, InverseGamma(2, 3)) m = rand(rng, Normal(0, sqrt(s))) @@ -799,9 +795,7 @@ function posterior_optima(model::MultivariateAssumeDemoModels) return vals end -function rand_prior_true( - rng::Random.AbstractRNG, model::MultivariateAssumeDemoModels -) +function rand_prior_true(rng::Random.AbstractRNG, model::MultivariateAssumeDemoModels) # Get template values from `model`. retval = model(rng) vals = (s=retval.s, m=retval.m) @@ -854,9 +848,7 @@ function posterior_optima(model::MatrixvariateAssumeDemoModels) return vals end -function rand_prior_true( - rng::Random.AbstractRNG, model::MatrixvariateAssumeDemoModels -) +function rand_prior_true(rng::Random.AbstractRNG, model::MatrixvariateAssumeDemoModels) # Get template values from `model`. retval = model(rng) vals = (s=retval.s, m=retval.m) From b88c2ea68de3214f7b31dd46ed192bdb9e753a7a Mon Sep 17 00:00:00 2001 From: Tor Erlend Fjelde Date: Sat, 7 Oct 2023 01:50:51 +0100 Subject: [PATCH 07/16] fixed tests for rand for DEMO_MODELS --- test/model.jl | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/test/model.jl b/test/model.jl index 654a9722b..ae0bd0aed 100644 --- a/test/model.jl +++ b/test/model.jl @@ -260,9 +260,19 @@ end @testset "TestUtils" begin @testset "$(model.f)" for model in DynamicPPL.TestUtils.DEMO_MODELS x = DynamicPPL.TestUtils.rand_prior_true(model) + # `rand_prior_true` should return a `NamedTuple`. + @test x isa NamedTuple - # Ensure `rand` is correct. - @test rand(model) == x + # `rand` with a `AbstractDict` should have `varnames` as keys. + x_rand_dict = rand(OrderedDict, model) + for vn in DynamicPPL.TestUtils.varnames(model) + @test haskey(x_rand_dict, vn) + end + # `rand` with a `NamedTuple` should have `map(Symbol, varnames)` as keys. + x_rand_nt = rand(NamedTuple, model) + for vn in DynamicPPL.TestUtils.varnames(model) + @test haskey(x_rand_nt, Symbol(vn)) + end # Ensure log-probability computations are implemented. @test logprior(model, x) ≈ DynamicPPL.TestUtils.logprior_true(model, x...) From be7a4b1ec8b044c2927d7447c5cd9038dfe3a8f3 Mon Sep 17 00:00:00 2001 From: Tor Erlend Fjelde Date: Sat, 7 Oct 2023 16:09:06 +0100 Subject: [PATCH 08/16] fixed linkning tests --- test/linking.jl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/linking.jl b/test/linking.jl index 6f5b348d6..9103fff67 100644 --- a/test/linking.jl +++ b/test/linking.jl @@ -72,7 +72,7 @@ end @model demo() = m ~ dist model = demo() - example_values = DynamicPPL.TestUtils.rand_prior_true(model) + example_values = rand(NamedTuple, model) vis = DynamicPPL.TestUtils.setup_varinfos(model, example_values, (@varname(m),)) @testset "$(short_varinfo_name(vi))" for vi in vis # Evaluate once to ensure we have `logp` value. @@ -106,7 +106,7 @@ end @testset "d=$d" for d in [2, 3, 5] model = demo_lkj(d) dist = LKJCholesky(d, 1.0, uplo) - values_original = DynamicPPL.TestUtils.rand_prior_true(model) + values_original = rand(NamedTuple, model) vis = DynamicPPL.TestUtils.setup_varinfos( model, values_original, (@varname(x),) ) @@ -147,7 +147,7 @@ end @model demo_dirichlet(d::Int) = x ~ Dirichlet(d, 1.0) @testset "d=$d" for d in [2, 3, 5] model = demo_dirichlet(d) - example_values = DynamicPPL.TestUtils.rand_prior_true(model) + example_values = rand(NamedTuple, model) vis = DynamicPPL.TestUtils.setup_varinfos(model, example_values, (@varname(x),)) @testset "$(short_varinfo_name(vi))" for vi in vis lp = logpdf(Dirichlet(d, 1.0), vi[:]) From e2fec3d1322acffe70f87419a92f704ede80be50 Mon Sep 17 00:00:00 2001 From: Tor Erlend Fjelde Date: Sat, 7 Oct 2023 19:44:43 +0100 Subject: [PATCH 09/16] added missing impl of rand_prior_true for demo_static_transformation --- src/test_utils.jl | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/test_utils.jl b/src/test_utils.jl index f22ef1c7c..ddcb12f12 100644 --- a/src/test_utils.jl +++ b/src/test_utils.jl @@ -263,7 +263,6 @@ end function rand_prior_true( rng::Random.AbstractRNG, - ::Type{NamedTuple}, model::Model{typeof(demo_one_variable_multiple_constraints)}, ) x = Vector{Float64}(undef, 5) @@ -720,12 +719,6 @@ const DemoModels = Union{ Model{typeof(demo_assume_matrix_dot_observe_matrix)}, } -# We require demo models to have explict impleentations of `rand` since we want -# these to be considered as ground truth. -function rand_prior_true(rng::Random.AbstractRNG, model::DemoModels) - return error("demo models requires explicit implementation of rand") -end - const UnivariateAssumeDemoModels = Union{ Model{typeof(demo_assume_dot_observe)},Model{typeof(demo_assume_literal_dot_observe)} } @@ -944,6 +937,13 @@ function logprior_true_with_logabsdet_jacobian( return _demo_logprior_true_with_logabsdet_jacobian(model, s, m) end +function rand_prior_true( + rng::Random.AbstractRNG, + model::Model{typeof(demo_static_transformation)}, +) + return (s = rand(rng, InverseGamma(2, 3)), m = rand(rng, Normal(0, sqrt(s)))) +end + """ marginal_mean_of_samples(chain, varname) From 9bbd05c5e665bebaa4906a116f399041777b7a40 Mon Sep 17 00:00:00 2001 From: Tor Erlend Fjelde Date: Sat, 7 Oct 2023 19:50:30 +0100 Subject: [PATCH 10/16] formatting --- src/test_utils.jl | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/test_utils.jl b/src/test_utils.jl index ddcb12f12..47d66769e 100644 --- a/src/test_utils.jl +++ b/src/test_utils.jl @@ -262,8 +262,7 @@ function logprior_true_with_logabsdet_jacobian( end function rand_prior_true( - rng::Random.AbstractRNG, - model::Model{typeof(demo_one_variable_multiple_constraints)}, + rng::Random.AbstractRNG, model::Model{typeof(demo_one_variable_multiple_constraints)} ) x = Vector{Float64}(undef, 5) x[1] = rand(rng, Normal()) @@ -938,10 +937,9 @@ function logprior_true_with_logabsdet_jacobian( end function rand_prior_true( - rng::Random.AbstractRNG, - model::Model{typeof(demo_static_transformation)}, + rng::Random.AbstractRNG, model::Model{typeof(demo_static_transformation)} ) - return (s = rand(rng, InverseGamma(2, 3)), m = rand(rng, Normal(0, sqrt(s)))) + return (s=rand(rng, InverseGamma(2, 3)), m=rand(rng, Normal(0, sqrt(s)))) end """ From 05e7a0a7995eec479fc55a690244c3d7eeaeb5c3 Mon Sep 17 00:00:00 2001 From: Tor Erlend Fjelde Date: Sun, 8 Oct 2023 00:49:48 +0100 Subject: [PATCH 11/16] fixed rand_prior_true for demo_static_transformation --- src/test_utils.jl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/test_utils.jl b/src/test_utils.jl index 47d66769e..df80adc76 100644 --- a/src/test_utils.jl +++ b/src/test_utils.jl @@ -939,7 +939,9 @@ end function rand_prior_true( rng::Random.AbstractRNG, model::Model{typeof(demo_static_transformation)} ) - return (s=rand(rng, InverseGamma(2, 3)), m=rand(rng, Normal(0, sqrt(s)))) + s = rand(rng, InverseGamma(2, 3)) + m = rand(rng, Normal(0, sqrt(s))) + return (s=s, m=m) end """ From de75531e5cf6599e40aed9332fa26846c629dc8f Mon Sep 17 00:00:00 2001 From: Tor Erlend Fjelde Date: Sun, 8 Oct 2023 11:13:03 +0100 Subject: [PATCH 12/16] bump minor version as this will be breaking --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 08ca184bf..cd1029d7c 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "DynamicPPL" uuid = "366bfd00-2699-11ea-058f-f148b4cae6d8" -version = "0.23.18" +version = "0.24.0" [deps] AbstractMCMC = "80f14c24-f653-4e6a-9b94-39d6b0f70001" From e987cd924fbb9a3e403fc4e53e219ab5adb62724 Mon Sep 17 00:00:00 2001 From: Tor Erlend Fjelde Date: Tue, 24 Oct 2023 15:19:41 +0100 Subject: [PATCH 13/16] bump patch version --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 5657b153e..47246ce11 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "DynamicPPL" uuid = "366bfd00-2699-11ea-058f-f148b4cae6d8" -version = "0.23.20" +version = "0.23.21" [deps] AbstractMCMC = "80f14c24-f653-4e6a-9b94-39d6b0f70001" From ad5f2b8b367eb2ae509c073d1e8a553212715c61 Mon Sep 17 00:00:00 2001 From: Tor Erlend Fjelde Date: Tue, 24 Oct 2023 16:31:33 +0100 Subject: [PATCH 14/16] fixed old usage of rand --- test/varinfo.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/varinfo.jl b/test/varinfo.jl index 7c06b2417..db7943080 100644 --- a/test/varinfo.jl +++ b/test/varinfo.jl @@ -541,7 +541,7 @@ DynamicPPL.getspace(::DynamicPPL.Sampler{MySAlg}) = (:s,) @testset "$(model.f)" for model in DynamicPPL.TestUtils.DEMO_MODELS vns = DynamicPPL.TestUtils.varnames(model) varinfos = DynamicPPL.TestUtils.setup_varinfos( - model, rand(model), vns; include_threadsafe=true + model, DynamicPPL.TestUtils.rand_prior_true(model), vns; include_threadsafe=true ) @testset "$(short_varinfo_name(varinfo))" for varinfo in varinfos @testset "with itself" begin From 23486bc9425be3568f7035d56624fb6106a46e41 Mon Sep 17 00:00:00 2001 From: Tor Erlend Fjelde Date: Tue, 24 Oct 2023 16:35:56 +0100 Subject: [PATCH 15/16] Update test/varinfo.jl Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- test/varinfo.jl | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/varinfo.jl b/test/varinfo.jl index db7943080..ce20958fd 100644 --- a/test/varinfo.jl +++ b/test/varinfo.jl @@ -541,7 +541,10 @@ DynamicPPL.getspace(::DynamicPPL.Sampler{MySAlg}) = (:s,) @testset "$(model.f)" for model in DynamicPPL.TestUtils.DEMO_MODELS vns = DynamicPPL.TestUtils.varnames(model) varinfos = DynamicPPL.TestUtils.setup_varinfos( - model, DynamicPPL.TestUtils.rand_prior_true(model), vns; include_threadsafe=true + model, + DynamicPPL.TestUtils.rand_prior_true(model), + vns; + include_threadsafe=true, ) @testset "$(short_varinfo_name(varinfo))" for varinfo in varinfos @testset "with itself" begin From a7cbee84543aa9a7ed61f3ae477f6aa6b5801147 Mon Sep 17 00:00:00 2001 From: Tor Erlend Fjelde Date: Tue, 24 Oct 2023 17:01:17 +0100 Subject: [PATCH 16/16] fixed another usage of rand --- test/varinfo.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/varinfo.jl b/test/varinfo.jl index db7943080..da0372079 100644 --- a/test/varinfo.jl +++ b/test/varinfo.jl @@ -581,7 +581,7 @@ DynamicPPL.getspace(::DynamicPPL.Sampler{MySAlg}) = (:s,) end @testset "with different value" begin - x = DynamicPPL.TestUtils.rand(model) + x = DynamicPPL.TestUtils.rand_prior_true(model) varinfo_changed = DynamicPPL.TestUtils.update_values!!( deepcopy(varinfo), x, vns )