@@ -130,101 +130,6 @@ macro parameterized(expr)
130
130
_parameterized (__module__, expr)
131
131
end
132
132
133
-
134
- # (@macroexpand @parameterized Normal(μ,σ) ≃ (1/sqrt2π) * Lebesgue(X)) |> MacroTools.prettify
135
-
136
-
137
- using MLStyle
138
-
139
- macro μσ_methods (ex)
140
- _μσ_methods (__module__, ex)
141
- end
142
-
143
- function _μσ_methods (__module__, ex)
144
- @match ex begin
145
- :($ dist ($ (args... ))) => begin
146
-
147
- argnames = QuoteNode .(args)
148
-
149
- d_args = (:(d.$ arg) for arg in args)
150
-
151
- method_μσ = KeywordCalls. _kwstruct (__module__, :($ dist ($ (args... ), μ, σ)))
152
- method_μ = KeywordCalls. _kwstruct (__module__, :($ dist ($ (args... ), μ)))
153
- method_σ = KeywordCalls. _kwstruct (__module__, :($ dist ($ (args... ), σ)))
154
- C = constructorof (getproperty (__module__, dist))
155
- dist = esc (dist)
156
- q = quote
157
-
158
- $ method_μσ
159
- $ method_μ
160
- $ method_σ
161
-
162
- function Base. rand (rng:: AbstractRNG , T:: Type , d:: $dist{($(argnames...), :μ, :σ)} )
163
- d. σ * rand (rng, T, $ dist ($ (d_args... ))) + d. μ
164
- end
165
-
166
- function MeasureBase. logdensity (d:: $dist{($(argnames...), :μ, :σ)} , x)
167
- z = (x - d. μ) / d. σ
168
- return logdensity ($ dist ($ (d_args... )), z) - log (d. σ)
169
- end
170
-
171
- function Base. rand (rng:: AbstractRNG , T:: Type , d:: $dist{($(argnames...), :σ)} )
172
- d. σ * rand (rng, T, $ dist ($ (d_args... )))
173
- end
174
-
175
- function MeasureBase. logdensity (d:: $dist{($(argnames...), :σ)} , x)
176
- z = x / d. σ
177
- return logdensity ($ dist ($ (d_args... )), z) - log (d. σ)
178
- end
179
-
180
- function Base. rand (rng:: AbstractRNG , T:: Type , d:: $dist{($(argnames...), :μ)} )
181
- rand (rng, T, $ dist ($ (d_args... ))) + d. μ
182
- end
183
-
184
- function MeasureBase. logdensity (d:: $dist{($(argnames...), :μ)} , x)
185
- z = x - d. μ
186
- return logdensity ($ dist ($ (d_args... )), z)
187
- end
188
- end
189
-
190
- return q
191
- end
192
- end
193
- end
194
-
195
-
196
- macro σ_methods (ex)
197
- _σ_methods (__module__, ex)
198
- end
199
-
200
- function _σ_methods (__module__, ex)
201
- @match ex begin
202
- :($ dist ($ (args... ))) => begin
203
- argnames = QuoteNode .(args)
204
-
205
- d_args = (:(d.$ arg) for arg in args)
206
-
207
- method_σ = KeywordCalls. _kwstruct (__module__, :($ dist ($ (args... ), σ)))
208
-
209
- dist = esc (dist)
210
- q = quote
211
- $ method_σ
212
-
213
- function Base. rand (rng:: AbstractRNG , T:: Type , d:: $dist{($(argnames...), :σ)} )
214
- d. σ * rand (rng, T, $ dist ($ (d_args... )))
215
- end
216
-
217
- function MeasureBase. logdensity (d:: $dist{($(argnames...), :σ)} , x)
218
- z = x / d. σ
219
- return logdensity ($ dist ($ (d_args... )), z) - log (d. σ)
220
- end
221
- end
222
-
223
- return q
224
- end
225
- end
226
- end
227
-
228
133
"""
229
134
@half dist([paramnames])
230
135
0 commit comments