5 template<
typename this_t,
11 typename _data_t=std::vector<_datum_t>,
12 typename _VirtualMachineState_t=
typename _Grammar_t::VirtualMachineState_t
38 if constexpr (std::is_same<typename VirtualMachineState_t::input_t, input_t>::value and
39 std::is_same<typename VirtualMachineState_t::output_t, output_t>::value) {
40 assert(not this->
program.empty());
56 const auto out = pool.run();
64 }
else {
UNUSED(x);
UNUSED(err); assert(
false &&
"*** Cannot use call when VirtualMachineState_t has different input_t or output_t."); }
void UNUSED(const T &x)
Definition: Miscellaneous.h:38
S input_t
Definition: LOTHypothesis.h:50
typename MyGrammar ::VirtualMachineState_t VirtualMachineState_t
Definition: LOTHypothesis.h:52
virtual DiscreteDistribution< output_t > call(const input_t x, const output_t &err=output_t{})
Run the virtual machine on input x, and marginalize over execution paths to return a distribution on ...
Definition: StochasticLOTHypothesis.h:34
Program< VirtualMachineState_t > program
Definition: LOTHypothesis.h:68
Definition: DiscreteDistribution.h:25
unsigned long total_vms_steps
Definition: LOTHypothesis.h:65
S output_t
Definition: LOTHypothesis.h:51
_VirtualMachineState_t VirtualMachineState_t
Definition: StochasticLOTHypothesis.h:23
Definition: LOTHypothesis.h:40
A LOTHypothesis is the basic unit for doing LOT models. It store a Node as its value, and handles all of the proposing and computing priors, likelihoods, etc. It compiles this Node into a "program" which is used to make function calls, which means that the value should only be changed via LOTHypothesis::set_value.
unsigned long total_instruction_count_last_call
Definition: LOTHypothesis.h:64
Definition: MyGrammar.h:72
Definition: StochasticLOTHypothesis.h:14
bool was_called
Definition: Program.h:23
Definition: VirtualMachinePool.h:42