@@ -2,7 +2,7 @@ module Models
2
2
3
3
using DynamicPPL
4
4
using Distributions
5
- using LinearAlgebra: I
5
+ using LinearAlgebra: I
6
6
7
7
export MODELS
8
8
94
94
end
95
95
add_model! (MODELS, observe_submodel ())
96
96
97
- # This one fails with Enzyme ...
98
-
99
97
@model function dot_assume_observe_index (x= [1.5 , 2.0 , 2.5 ], :: Type{TV} = Vector{Float64}) where {TV}
100
98
a = TV (undef, length (x))
101
99
a .~ Normal ()
@@ -105,46 +103,67 @@ add_model!(MODELS, observe_submodel())
105
103
end
106
104
add_model! (MODELS, dot_assume_observe_index ())
107
105
108
- # Add models with different distributions
109
-
110
- DISTRIBUTIONS = Dict (
111
- # Univariate
112
- :assume_normal => Normal (),
113
- :assume_beta => Beta (2 , 2 ),
114
- # Multivariate
115
- :assume_mvnormal => MvNormal ([0.0 , 0.0 ], [1.0 0.5 ; 0.5 1.0 ]),
116
- :assume_dirichlet => Dirichlet ([1.0 , 5.0 ]),
117
- # Matrixvariate
118
- :assume_wishart => Wishart (7 , [1.0 0.5 ; 0.5 1.0 ]),
119
- :assume_lkjcholu => LKJCholesky (5 , 1.0 , ' U' ),
120
- )
121
-
122
- for (name, distribution) in DISTRIBUTIONS
123
- @eval begin
124
- @model function $name ()
125
- a ~ $ distribution
126
- end
127
- add_model! (MODELS, $ name ())
106
+ @model function assume_normal ()
107
+ a ~ Normal ()
108
+ end
109
+ add_model! (MODELS, assume_normal ())
110
+
111
+ @model function assume_beta ()
112
+ a ~ Beta (2 , 2 )
113
+ end
114
+ add_model! (MODELS, assume_beta ())
115
+
116
+ @model function assume_mvnormal ()
117
+ a ~ MvNormal ([0.0 , 0.0 ], [1.0 0.5 ; 0.5 1.0 ])
118
+ end
119
+ add_model! (MODELS, assume_mvnormal ())
120
+
121
+ @model function assume_dirichlet ()
122
+ a ~ Dirichlet ([1.0 , 5.0 ])
123
+ end
124
+ add_model! (MODELS, assume_dirichlet ())
125
+
126
+ @model function assume_wishart ()
127
+ a ~ Wishart (7 , [1.0 0.5 ; 0.5 1.0 ])
128
+ end
129
+ add_model! (MODELS, assume_wishart ())
130
+
131
+ @model function assume_lkjcholu ()
132
+ a ~ LKJCholesky (5 , 1.0 , ' U' )
133
+ end
134
+ add_model! (MODELS, assume_lkjcholu ())
135
+
136
+ @model function n010 (:: Type{TV} = Vector{Float64}) where {TV}
137
+ a = TV (undef, 10 )
138
+ for i in eachindex (a)
139
+ a[i] ~ Normal ()
128
140
end
129
141
end
142
+ add_model! (MODELS, n010 ())
130
143
131
- # Add models with different sizes
144
+ @model function n050 (:: Type{TV} = Vector{Float64}) where {TV}
145
+ a = TV (undef, 50 )
146
+ for i in eachindex (a)
147
+ a[i] ~ Normal ()
148
+ end
149
+ end
150
+ add_model! (MODELS, n050 ())
132
151
133
- NS = [10 , 50 , 100 , 500 ]
152
+ @model function n100 (:: Type{TV} = Vector{Float64}) where {TV}
153
+ a = TV (undef, 100 )
154
+ for i in eachindex (a)
155
+ a[i] ~ Normal ()
156
+ end
157
+ end
158
+ add_model! (MODELS, n100 ())
134
159
135
- for n in NS
136
- # pad to make sure they sort correctly alphabetically
137
- name = Symbol (" n$(lpad (n, 3 , " 0" )) " )
138
- @eval begin
139
- @model function $name (:: Type{TV} = Vector{Float64}) where {TV}
140
- a = TV (undef, $ n)
141
- for i in eachindex (a)
142
- a[i] ~ Normal ()
143
- end
144
- end
145
- add_model! (MODELS, $ name ())
160
+ @model function n500 (:: Type{TV} = Vector{Float64}) where {TV}
161
+ a = TV (undef, 500 )
162
+ for i in eachindex (a)
163
+ a[i] ~ Normal ()
146
164
end
147
165
end
166
+ add_model! (MODELS, n500 ())
148
167
149
168
@model function multithreaded (x)
150
169
a ~ Normal ()
0 commit comments