@@ -409,7 +409,7 @@ module Issue537 end
409
409
return x ~ Normal ()
410
410
end
411
411
@model function demo2 (x, y)
412
- @submodel demo1 (x)
412
+ _ignore ~ to_submodel ( demo1 (x), false )
413
413
return y ~ Uniform ()
414
414
end
415
415
# No observation.
@@ -441,7 +441,7 @@ module Issue537 end
441
441
442
442
# Check values makes sense.
443
443
@model function demo3 (x, y)
444
- @submodel demo1 (x)
444
+ _ignore ~ to_submodel ( demo1 (x), false )
445
445
return y ~ Normal (x)
446
446
end
447
447
m = demo3 (1000.0 , missing )
@@ -453,12 +453,10 @@ module Issue537 end
453
453
x ~ Normal ()
454
454
return x
455
455
end
456
-
457
456
@model function demo_useval (x, y)
458
- @submodel prefix = " sub1" x1 = demo_return (x)
459
- @submodel prefix = " sub2" x2 = demo_return (y)
460
-
461
- return z ~ Normal (x1 + x2 + 100 , 1.0 )
457
+ sub1 ~ to_submodel (demo_return (x))
458
+ sub2 ~ to_submodel (demo_return (y))
459
+ return z ~ Normal (sub1 + sub2 + 100 , 1.0 )
462
460
end
463
461
m = demo_useval (missing , missing )
464
462
vi = VarInfo (m)
@@ -472,21 +470,18 @@ module Issue537 end
472
470
@model function AR1 (num_steps, α, μ, σ, :: Type{TV} = Vector{Float64}) where {TV}
473
471
η ~ MvNormal (zeros (num_steps), I)
474
472
δ = sqrt (1 - α^ 2 )
475
-
476
473
x = TV (undef, num_steps)
477
474
x[1 ] = η[1 ]
478
475
@inbounds for t in 2 : num_steps
479
476
x[t] = @. α * x[t - 1 ] + δ * η[t]
480
477
end
481
-
482
478
return @. μ + σ * x
483
479
end
484
480
485
481
@model function demo (y)
486
482
α ~ Uniform ()
487
483
μ ~ Normal ()
488
484
σ ~ truncated (Normal (), 0 , Inf )
489
-
490
485
num_steps = length (y[1 ])
491
486
num_obs = length (y)
492
487
@inbounds for i in 1 : num_obs
@@ -613,14 +608,11 @@ module Issue537 end
613
608
@model demo () = x ~ Normal ()
614
609
retval, svi = DynamicPPL. evaluate!! (demo (), SimpleVarInfo (), SamplingContext ())
615
610
616
- # Return-value when using `@submodel `
611
+ # Return-value when using `to_submodel `
617
612
@model inner () = x ~ Normal ()
618
- # Without assignment.
619
- @model outer () = @submodel inner ()
620
- @test outer ()() isa Real
621
-
622
- # With assignment.
623
- @model outer () = @submodel x = inner ()
613
+ @model function outer ()
614
+ _ignore ~ to_submodel (inner ())
615
+ end
624
616
@test outer ()() isa Real
625
617
626
618
# Edge-cases.
@@ -720,8 +712,7 @@ module Issue537 end
720
712
return (; x, y)
721
713
end
722
714
@model function demo_tracked_submodel ()
723
- @submodel (x, y) = demo_tracked ()
724
- return (; x, y)
715
+ vals ~ to_submodel (demo_tracked (), false )
725
716
end
726
717
for model in [demo_tracked (), demo_tracked_submodel ()]
727
718
# Make sure it's runnable and `y` is present in the return-value.
0 commit comments