Cannot use set_value_at2 when block is a dynamically allocated integer?
Opened this issue · 0 comments
Here is a sample trace, noting that y
has dynamic integer scope and string block, whereas z
has string scope and dynamic integer block.
$ cat case.vnts
assume x = mem((i) -> tag(i, "x", normal(0, 1)));
assume y = mem((i) -> tag(i, "y", normal(x(i), 1)));
assume z = mem((i) -> tag("z", i, normal(x(i), 1)));
predict y(1);
predict z(1);
Load up the trace, and try set_value_at2
on the random choices in 1:"y"
and "z";1
(both of which exist due to the predict
statements in case.vnts
.
$ venture -if case.vnts
probcomp-1:/scratch/fsaad/cgpm% venture -if case.vnts
Tracing models with the Lite backend
Initial random seed is 139951036 (to reproduce run, use -s 139951036)
Venture Script, version 0.5.1a20170816.post69+g9304f69.dirty http://probcomp.csail.mit.edu/venture/ `help' for help
Venture is *alpha quality* software.
Expect occasional crashes that wipe out your console session.
venture[script] case.vnts > set_value_at2(1, "y", 10)
-62.5691647371
venture[script] case.vnts > sample y(1);
10.0
venture[script] case.vnts > set_value_at2("z", 1, 10)
Warning: skipping annotating did 24, assumed to be from the inference prelude
Warning: skipping annotating did 24, assumed to be from the inference prelude
Warning: skipping annotating did 23, assumed to be from the inference prelude
Warning: skipping annotating did 10, assumed to be from the inference prelude
Warning: skipping annotating did 10, assumed to be from the inference prelude
Warning: skipping annotating did 11, assumed to be from the inference prelude
Warning: skipping annotating did 11, assumed to be from the inference prelude
*** evaluation: Tried to propose 1 values, but subproblem accepts 2 values
(autorun (set_value_at2 "z" 1 10))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Caused by
Tried to propose 1 values, but subproblem accepts 2 values
venture[script] case.vnts >
Hypothesis: The set_value_at2(<scope>, <block>, <value>)
procedure will fail if the scope:block
identifies more than one random choice. In the test case both 1:"y"
and "z";1
actually have two random choices since the invocation of x(i)
simulates a normal(0,1)
, so the semantics imply that set_value_at2
should crash in both cases.
However, set_value_at2
seems to work just fine for the case 1:"y"
by setting the "last" random choice, but it fails (as expected, perhaps?) for "z":1
.