sppl icon indicating copy to clipboard operation
sppl copied to clipboard

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

Open Schaechtle opened this issue 3 years ago • 1 comments

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

Schaechtle avatar Sep 08 '22 20:09 Schaechtle

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

fsaad avatar Sep 09 '22 13:09 fsaad