@@ -295,32 +295,28 @@ function generate_tilde(left, right, model_info)
295
295
sampler = model_info[:main_body_names ][:sampler ]
296
296
297
297
@gensym tmpright
298
- expr = quote
299
- $ tmpright = $ right
300
- $ (DynamicPPL. assert_dist)($ tmpright, msg = $ (wrong_dist_errormsg (@__LINE__ )))
301
- end
298
+ top = [:($ tmpright = $ right),
299
+ :($ (DynamicPPL. assert_dist)($ tmpright, msg = $ (wrong_dist_errormsg (@__LINE__ ))))]
302
300
303
301
if left isa Symbol || left isa Expr
304
302
@gensym out vn inds
305
- push! (expr. args,
306
- :($ vn = $ (varname (left))),
307
- :($ inds = $ (vinds (left))))
308
-
309
- assumption = quote
310
- $ out = $ (DynamicPPL. tilde_assume)($ ctx, $ sampler, $ tmpright, $ vn, $ inds,
311
- $ vi)
312
- $ left = $ out[1 ]
313
- $ (DynamicPPL. acclogp!)($ vi, $ out[2 ])
314
- end
303
+ push! (top, :($ vn = $ (varname (left))), :($ inds = $ (vinds (left))))
304
+
305
+ assumption = [
306
+ :($ out = $ (DynamicPPL. tilde_assume)($ ctx, $ sampler, $ tmpright, $ vn, $ inds,
307
+ $ vi)),
308
+ :($ left = $ out[1 ]),
309
+ :($ (DynamicPPL. acclogp!)($ vi, $ out[2 ]))
310
+ ]
315
311
316
312
# It can only be an observation if the LHS is an argument of the model
317
313
if vsym (left) in model_info[:args ]
318
314
@gensym isassumption
319
315
return quote
320
- $ expr
316
+ $ (top ... )
321
317
$ isassumption = $ (DynamicPPL. isassumption (model, left))
322
318
if $ isassumption
323
- $ assumption
319
+ $ ( assumption... )
324
320
else
325
321
$ (DynamicPPL. acclogp!)(
326
322
$ vi,
@@ -332,14 +328,14 @@ function generate_tilde(left, right, model_info)
332
328
end
333
329
334
330
return quote
335
- $ expr
336
- $ assumption
331
+ $ (top ... )
332
+ $ ( assumption... )
337
333
end
338
334
end
339
335
340
336
# If the LHS is a literal, it is always an observation
341
337
return quote
342
- $ expr
338
+ $ (top ... )
343
339
$ (DynamicPPL. acclogp!)(
344
340
$ vi,
345
341
$ (DynamicPPL. tilde_observe)($ ctx, $ sampler, $ tmpright, $ left, $ vi)
@@ -361,32 +357,28 @@ function generate_dot_tilde(left, right, model_info)
361
357
sampler = model_info[:main_body_names ][:sampler ]
362
358
363
359
@gensym tmpright
364
- expr = quote
365
- $ tmpright = $ right
366
- $ (DynamicPPL. assert_dist)($ tmpright, msg = $ (wrong_dist_errormsg (@__LINE__ )))
367
- end
360
+ top = [:($ tmpright = $ right),
361
+ :($ (DynamicPPL. assert_dist)($ tmpright, msg = $ (wrong_dist_errormsg (@__LINE__ ))))]
368
362
369
363
if left isa Symbol || left isa Expr
370
364
@gensym out vn inds
371
- push! (expr. args,
372
- :($ vn = $ (varname (left))),
373
- :($ inds = $ (vinds (left))))
374
-
375
- assumption = quote
376
- $ out = $ (DynamicPPL. dot_tilde_assume)($ ctx, $ sampler, $ tmpright, $ left,
377
- $ vn, $ inds, $ vi)
378
- $ left .= $ out[1 ]
379
- $ (DynamicPPL. acclogp!)($ vi, $ out[2 ])
380
- end
365
+ push! (top, :($ vn = $ (varname (left))), :($ inds = $ (vinds (left))))
366
+
367
+ assumption = [
368
+ :($ out = $ (DynamicPPL. dot_tilde_assume)($ ctx, $ sampler, $ tmpright, $ left,
369
+ $ vn, $ inds, $ vi)),
370
+ :($ left .= $ out[1 ]),
371
+ :($ (DynamicPPL. acclogp!)($ vi, $ out[2 ]))
372
+ ]
381
373
382
374
# It can only be an observation if the LHS is an argument of the model
383
375
if vsym (left) in model_info[:args ]
384
376
@gensym isassumption
385
377
return quote
386
- $ expr
378
+ $ (top ... )
387
379
$ isassumption = $ (DynamicPPL. isassumption (model, left))
388
380
if $ isassumption
389
- $ assumption
381
+ $ ( assumption... )
390
382
else
391
383
$ (DynamicPPL. acclogp!)(
392
384
$ vi,
@@ -398,14 +390,14 @@ function generate_dot_tilde(left, right, model_info)
398
390
end
399
391
400
392
return quote
401
- $ expr
402
- $ assumption
393
+ $ (top ... )
394
+ $ ( assumption... )
403
395
end
404
396
end
405
397
406
398
# If the LHS is a literal, it is always an observation
407
399
return quote
408
- $ expr
400
+ $ (top ... )
409
401
$ (DynamicPPL. acclogp!)(
410
402
$ vi,
411
403
$ (DynamicPPL. dot_tilde_observe)($ ctx, $ sampler, $ tmpright, $ left, $ vi)
0 commit comments