From ecf1e5decba39a2b4776dc189a2f7da0bc1efee8 Mon Sep 17 00:00:00 2001 From: Tor Erlend Fjelde Date: Tue, 14 Dec 2021 15:49:27 +0000 Subject: [PATCH 01/12] attempt at fixing error doctest --- src/submodel_macro.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/submodel_macro.jl b/src/submodel_macro.jl index 5ffed3c42..fc673fbcf 100644 --- a/src/submodel_macro.jl +++ b/src/submodel_macro.jl @@ -231,7 +231,7 @@ function submodel(prefix_expr, expr, ctx=esc(:__context__)) ctx = prefix_submodel_context(prefix, L, ctx) catch e error( - "failed to determine prefix from $(L); please specify prefix using the `@submodel prefix=\"your prefix\" ...` syntax", + "failed to determine prefix from $(L); please specify prefix using the `@submodel prefix=\"your prefix\" ...` syntax" ) end quote From 917334bf429343c4b5efee461843d93a4ed10a8e Mon Sep 17 00:00:00 2001 From: Tor Erlend Fjelde Date: Tue, 14 Dec 2021 15:52:39 +0000 Subject: [PATCH 02/12] Update src/submodel_macro.jl Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- src/submodel_macro.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/submodel_macro.jl b/src/submodel_macro.jl index fc673fbcf..5ffed3c42 100644 --- a/src/submodel_macro.jl +++ b/src/submodel_macro.jl @@ -231,7 +231,7 @@ function submodel(prefix_expr, expr, ctx=esc(:__context__)) ctx = prefix_submodel_context(prefix, L, ctx) catch e error( - "failed to determine prefix from $(L); please specify prefix using the `@submodel prefix=\"your prefix\" ...` syntax" + "failed to determine prefix from $(L); please specify prefix using the `@submodel prefix=\"your prefix\" ...` syntax", ) end quote From 29d692a397f8c8dbfd1a2c807e4925891e491577 Mon Sep 17 00:00:00 2001 From: Tor Erlend Fjelde Date: Tue, 14 Dec 2021 16:00:19 +0000 Subject: [PATCH 03/12] capture return-value in submodel --- src/submodel_macro.jl | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/submodel_macro.jl b/src/submodel_macro.jl index fc673fbcf..233174cb7 100644 --- a/src/submodel_macro.jl +++ b/src/submodel_macro.jl @@ -212,17 +212,21 @@ function submodel(prefix_expr, expr, ctx=esc(:__context__)) if prefix_left !== :prefix error("$(prefix_left) is not a valid kwarg") end + + # The user expects `@submodel ...` to return the + # return-value of the `...`, hence we need to capture + # the return-value and handle it correctly. + @gensym retval + # `prefix=false` => don't prefix, i.e. do nothing to `ctx`. # `prefix=true` => automatically determine prefix. # `prefix=...` => use it. args_assign = getargs_assignment(expr) return if args_assign === nothing ctx = prefix_submodel_context(prefix, ctx) - # In this case we only want to get the `__varinfo__`. quote - $(esc(:__varinfo__)) = last( - $(DynamicPPL._evaluate!!)($(esc(expr)), $(esc(:__varinfo__)), $(ctx)) - ) + $retval, $(esc(:__varinfo__)) = $(DynamicPPL._evaluate!!)($(esc(expr)), $(esc(:__varinfo__)), $(ctx)) + $retval end else L, R = args_assign @@ -235,9 +239,10 @@ function submodel(prefix_expr, expr, ctx=esc(:__context__)) ) end quote - $(esc(L)), $(esc(:__varinfo__)) = $(DynamicPPL._evaluate!!)( + $retval, $(esc(:__varinfo__)) = $(DynamicPPL._evaluate!!)( $(esc(R)), $(esc(:__varinfo__)), $(ctx) ) + esc(L) = $retval end end end From 9ee336b965c8ea1c293da2c726ad07a94b527586 Mon Sep 17 00:00:00 2001 From: Tor Erlend Fjelde Date: Tue, 14 Dec 2021 16:05:31 +0000 Subject: [PATCH 04/12] formatting and added test for return-value and submodel --- src/submodel_macro.jl | 4 +++- test/compiler.jl | 10 ++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/submodel_macro.jl b/src/submodel_macro.jl index 5bc73bea1..2309ec748 100644 --- a/src/submodel_macro.jl +++ b/src/submodel_macro.jl @@ -225,7 +225,9 @@ function submodel(prefix_expr, expr, ctx=esc(:__context__)) return if args_assign === nothing ctx = prefix_submodel_context(prefix, ctx) quote - $retval, $(esc(:__varinfo__)) = $(DynamicPPL._evaluate!!)($(esc(expr)), $(esc(:__varinfo__)), $(ctx)) + $retval, $(esc(:__varinfo__)) = $(DynamicPPL._evaluate!!)( + $(esc(expr)), $(esc(:__varinfo__)), $(ctx) + ) $retval end else diff --git a/test/compiler.jl b/test/compiler.jl index 4c76cf1ab..0544bb5f6 100644 --- a/test/compiler.jl +++ b/test/compiler.jl @@ -570,5 +570,15 @@ end @model demo() = x ~ Normal() retval, svi = DynamicPPL.evaluate!!(demo(), SimpleVarInfo(), SamplingContext()) + + # Return-value when using `@submodel` + @model inner() = x ~ Normal() + # Without assignment. + @model outer() = @submodel inner() + @test outer()() isa Real + + # With assignment. + @model outer() = @submodel x = inner() + @test outer()() isa Real end end From ce0a3e8bdd82ce7c0c8a688ce4767423e005b620 Mon Sep 17 00:00:00 2001 From: Tor Erlend Fjelde Date: Tue, 14 Dec 2021 17:01:31 +0000 Subject: [PATCH 05/12] fixed typo --- src/submodel_macro.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/submodel_macro.jl b/src/submodel_macro.jl index 2309ec748..230802def 100644 --- a/src/submodel_macro.jl +++ b/src/submodel_macro.jl @@ -244,7 +244,7 @@ function submodel(prefix_expr, expr, ctx=esc(:__context__)) $retval, $(esc(:__varinfo__)) = $(DynamicPPL._evaluate!!)( $(esc(R)), $(esc(:__varinfo__)), $(ctx) ) - esc(L) = $retval + $(esc(L)) = $retval end end end From 59303d7818427453a9963cb167c2ec6264bb9e58 Mon Sep 17 00:00:00 2001 From: Tor Erlend Fjelde Date: Tue, 14 Dec 2021 19:49:32 +0000 Subject: [PATCH 06/12] fix CI so as to not break poor bors --- .github/workflows/CI.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 84799298f..2cdde32d0 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -16,7 +16,7 @@ jobs: strategy: matrix: version: - # - '1.3' # minimum supported version + - '1.3' # minimum supported version - '1' # current stable version os: - ubuntu-latest From 274aebb5bac013e7d1fcff4d1b12323870b106d9 Mon Sep 17 00:00:00 2001 From: Tor Erlend Fjelde Date: Tue, 14 Dec 2021 21:38:21 +0000 Subject: [PATCH 07/12] added docfilter for nested LoadError --- docs/make.jl | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/make.jl b/docs/make.jl index 3076dc4ff..5600051ef 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -18,6 +18,9 @@ makedocs(; r"(Array{.+,\s?1}|Vector{.+})", # Older versions will show "Array{...,2}" instead of "Matrix{...}". r"(Array{.+,\s?2}|Matrix{.+})", + # Errors from macros sometimes result in `LoadError: LoadError:` + # rather than `LoadError:`, depending on Julia version. + r"ERROR: LoadError: (LoadError:\s)?+" ], ) From ef0faa56c6d5be716195378bb8fc3bd804792e8a Mon Sep 17 00:00:00 2001 From: Tor Erlend Fjelde Date: Tue, 14 Dec 2021 21:40:51 +0000 Subject: [PATCH 08/12] Update docs/make.jl Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- docs/make.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/make.jl b/docs/make.jl index 5600051ef..035a0bc0f 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -20,7 +20,7 @@ makedocs(; r"(Array{.+,\s?2}|Matrix{.+})", # Errors from macros sometimes result in `LoadError: LoadError:` # rather than `LoadError:`, depending on Julia version. - r"ERROR: LoadError: (LoadError:\s)?+" + r"ERROR: LoadError: (LoadError:\s)?+", ], ) From 9ecb9390fe61a2d45f23ffdcab14b8f776cdba94 Mon Sep 17 00:00:00 2001 From: Tor Erlend Fjelde Date: Tue, 14 Dec 2021 22:09:39 +0000 Subject: [PATCH 09/12] fixed doctestfilter --- docs/make.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/make.jl b/docs/make.jl index 035a0bc0f..63a685c95 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -20,7 +20,7 @@ makedocs(; r"(Array{.+,\s?2}|Matrix{.+})", # Errors from macros sometimes result in `LoadError: LoadError:` # rather than `LoadError:`, depending on Julia version. - r"ERROR: LoadError: (LoadError:\s)?+", + r"ERROR: LoadError: (LoadError:\s)?", ], ) From c4e91a0ee476f9b572a5441a685b6f4a77278a8a Mon Sep 17 00:00:00 2001 From: Tor Erlend Fjelde Date: Tue, 14 Dec 2021 22:10:09 +0000 Subject: [PATCH 10/12] added LoadError doctest filter to tests --- test/runtests.jl | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/runtests.jl b/test/runtests.jl index 3372b6371..ba7ed4f71 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -66,6 +66,9 @@ include("test_util.jl") r"(Array{.+,\s?1}|Vector{.+})", # Older versions will show "Array{...,2}" instead of "Matrix{...}". r"(Array{.+,\s?2}|Matrix{.+})", + # Errors from macros sometimes result in `LoadError: LoadError:` + # rather than `LoadError:`, depending on Julia version. + r"ERROR: LoadError: (LoadError:\s)?", ] doctest(DynamicPPL; manual=false, doctestfilters=doctestfilters) end From 9b32797f8091866d1ae7e9d75ef3f2b00831b155 Mon Sep 17 00:00:00 2001 From: Tor Erlend Fjelde Date: Tue, 14 Dec 2021 22:20:42 +0000 Subject: [PATCH 11/12] improved the LoadError filter --- docs/make.jl | 2 +- test/runtests.jl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/make.jl b/docs/make.jl index 63a685c95..f2435dd72 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -20,7 +20,7 @@ makedocs(; r"(Array{.+,\s?2}|Matrix{.+})", # Errors from macros sometimes result in `LoadError: LoadError:` # rather than `LoadError:`, depending on Julia version. - r"ERROR: LoadError: (LoadError:\s)?", + r"ERROR: (LoadError:\s)+", ], ) diff --git a/test/runtests.jl b/test/runtests.jl index ba7ed4f71..dfc8d7acf 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -68,7 +68,7 @@ include("test_util.jl") r"(Array{.+,\s?2}|Matrix{.+})", # Errors from macros sometimes result in `LoadError: LoadError:` # rather than `LoadError:`, depending on Julia version. - r"ERROR: LoadError: (LoadError:\s)?", + r"ERROR: (LoadError:\s)+", ] doctest(DynamicPPL; manual=false, doctestfilters=doctestfilters) end From ad049c20149e1e90cd4063213bfb661f3c7005a1 Mon Sep 17 00:00:00 2001 From: Tor Erlend Fjelde Date: Tue, 14 Dec 2021 22:39:27 +0000 Subject: [PATCH 12/12] updated turing tests compat bound --- test/turing/Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/turing/Project.toml b/test/turing/Project.toml index f8cb2bd63..9c7103841 100644 --- a/test/turing/Project.toml +++ b/test/turing/Project.toml @@ -5,6 +5,6 @@ Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" Turing = "fce5fe82-541a-59a6-adf8-730c64b5f9a0" [compat] -DynamicPPL = "0.16" +DynamicPPL = "0.17" Turing = "0.18, 0.19" julia = "1.3"