probsys / sppl

Probabilistic programming system for fast and exact symbolic inference
Apache License 2.0
76 stars 10 forks source link

Question/feature-request: combining model source code with pre-existing SPE-models #126

Open Schaechtle opened 2 years ago

Schaechtle commented 2 years ago

Is there a good way to execute SPPL model source code while having it rely on a previously existing model? For example, assume I have an SPPL model m (of type ProductSPE) which models variables a and b. I have this source code source in form of a string:

if a < 17 
    c ~= bernoulli(p=0.1)

else:
    c ~= bernoulli(p=0.9)

which relies on a being defined but which would otherwise compile fine if I run:

SPPL_Compiler(source).execute_module().model

Obviously, without knowing about m it won't compile because the compiler doesn't know about a. Is there a good way to tell the compiler about a model (like m) as a starting point? i.e. something like this:

SPPL_Compiler(m, source).execute_module().model
fsaad commented 2 years ago

Try to use the reverse compiler from the compiled SPE m to an SPPL program source with equivalent semantics and then append it to the original program. Below is a sketch

m =  ...

from sppl.compilers import spe_to_sppl
source_m = spe_to_sppl(m) # return type is io.StringIO
source_m_str = source_m.getvalue()

source_joint = '%s\n\n%s' % (source_m_str, source)
model = SPPL_compiler(source_joint).execute_module().model