Skip to content

Commit 2472d44

Browse files
committed
Use macro with esc instead of eval (slightly less hacky)
1 parent 1973b2f commit 2472d44

File tree

1 file changed

+53
-54
lines changed

1 file changed

+53
-54
lines changed

main.jl

Lines changed: 53 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -57,62 +57,61 @@ definition file:
5757
- Once defined, the model is created using `model = model_name(...)`. The
5858
`model` on the left-hand side is mandatory.
5959
"""
60-
function include_model(model_name::AbstractString)
61-
module_contents = quote
62-
using DynamicPPL: @model, to_submodel
63-
using Distributions
64-
using LinearAlgebra: I
65-
using .Main: @register
66-
include("models/" * $(model_name) * ".jl")
67-
@register model
68-
end
69-
module_name = Symbol("ADTests_", model_name)
70-
# Ideally, this would be a macro. However, defining a module in a macro is
71-
# either incredibly difficult or impossible. See
72-
# https://github.com/TuringLang/ADTests/issues/31
73-
eval(Expr(:module, true, module_name, module_contents))
60+
macro include_model(model_name::AbstractString)
61+
# in principle esc() shouldn't be needed, but see
62+
# https://github.com/JuliaLang/julia/issues/55677
63+
Expr(:toplevel, esc(:(
64+
module $(gensym())
65+
using DynamicPPL: @model, to_submodel
66+
using Distributions
67+
using LinearAlgebra: I
68+
using .Main: @register
69+
include("models/" * $(model_name) * ".jl")
70+
@register model
71+
end
72+
)))
7473
end
7574

76-
include_model("assume_beta")
77-
include_model("assume_dirichlet")
78-
include_model("assume_lkjcholu")
79-
include_model("assume_mvnormal")
80-
include_model("assume_normal")
81-
include_model("assume_submodel")
82-
include_model("assume_wishart")
83-
include_model("broadcast_macro")
84-
include_model("control_flow")
85-
include_model("demo_assume_dot_observe")
86-
include_model("demo_assume_dot_observe_literal")
87-
include_model("demo_assume_index_observe")
88-
include_model("demo_assume_matrix_observe_matrix_index")
89-
include_model("demo_assume_multivariate_observe")
90-
include_model("demo_assume_multivariate_observe_literal")
91-
include_model("demo_assume_observe_literal")
92-
include_model("demo_assume_submodel_observe_index_literal")
93-
include_model("demo_dot_assume_observe")
94-
include_model("demo_dot_assume_observe_index")
95-
include_model("demo_dot_assume_observe_index_literal")
96-
include_model("demo_dot_assume_observe_matrix_index")
97-
include_model("demo_dot_assume_observe_submodel")
98-
include_model("dot_assume")
99-
include_model("dot_observe")
100-
include_model("dynamic_constraint")
101-
include_model("multiple_constraints_same_var")
102-
include_model("multithreaded")
103-
include_model("n010")
104-
include_model("n050")
105-
include_model("n100")
106-
include_model("n500")
107-
include_model("observe_bernoulli")
108-
include_model("observe_categorical")
109-
include_model("observe_index")
110-
include_model("observe_literal")
111-
include_model("observe_multivariate")
112-
include_model("observe_submodel")
113-
include_model("pdb_eight_schools_centered")
114-
include_model("pdb_eight_schools_noncentered")
115-
include_model("von_mises")
75+
@include_model "assume_beta"
76+
@include_model "assume_dirichlet"
77+
@include_model "assume_lkjcholu"
78+
@include_model "assume_mvnormal"
79+
@include_model "assume_normal"
80+
@include_model "assume_submodel"
81+
@include_model "assume_wishart"
82+
@include_model "broadcast_macro"
83+
@include_model "control_flow"
84+
@include_model "demo_assume_dot_observe"
85+
@include_model "demo_assume_dot_observe_literal"
86+
@include_model "demo_assume_index_observe"
87+
@include_model "demo_assume_matrix_observe_matrix_index"
88+
@include_model "demo_assume_multivariate_observe"
89+
@include_model "demo_assume_multivariate_observe_literal"
90+
@include_model "demo_assume_observe_literal"
91+
@include_model "demo_assume_submodel_observe_index_literal"
92+
@include_model "demo_dot_assume_observe"
93+
@include_model "demo_dot_assume_observe_index"
94+
@include_model "demo_dot_assume_observe_index_literal"
95+
@include_model "demo_dot_assume_observe_matrix_index"
96+
@include_model "demo_dot_assume_observe_submodel"
97+
@include_model "dot_assume"
98+
@include_model "dot_observe"
99+
@include_model "dynamic_constraint"
100+
@include_model "multiple_constraints_same_var"
101+
@include_model "multithreaded"
102+
@include_model "n010"
103+
@include_model "n050"
104+
@include_model "n100"
105+
@include_model "n500"
106+
@include_model "observe_bernoulli"
107+
@include_model "observe_categorical"
108+
@include_model "observe_index"
109+
@include_model "observe_literal"
110+
@include_model "observe_multivariate"
111+
@include_model "observe_submodel"
112+
@include_model "pdb_eight_schools_centered"
113+
@include_model "pdb_eight_schools_noncentered"
114+
@include_model "von_mises"
116115

117116
# The entry point to this script itself begins here
118117
if ARGS == ["--list-model-keys"]

0 commit comments

Comments
 (0)