Release notes for sbmlsim 0.25.0
The panels of a model run without a server. python -m sbmlsim.serve --export DIR writes the panels and the app of a model as a static bundle, and a page answers the routes of the service from it with the simulations in the browser of its reader, on the WebAssembly engine of sbmlsim-core and the components of sbmlsim-web. The first app built this way is the glimepiride app of pkdb_models.
Results which change: the curves of a panel. A panel is now integrated to its output times instead of being interpolated between the steps of the integrator onto them, so its curves move by up to about 1e-5 of their peak, towards the solution at their times.
Features
- The static bundle of the panels of a model (#526).
python -m sbmlsim.serve --model id=module:attribute --export DIRwritesDIR/<model>/bundle.json(the contractpanelbundle/1) and the SBML of its models, and exits instead of serving. The bundle carries what the service answers without simulating, built by the code of the routes: the app, the declarations and the study data of every panel per queryvariant, and per panel the recipe of a run, the targets of the knobs with their unit factors, the factors of the curves, the delivered output times and the tolerances and settings of the project. The formulas of the derived targets are compiled into the SBML as initial assignments over a parameter per knob, so an engine which simulates the bundle evaluates no formula of its own.sbmlsim.serve.exportneeds no extraweb;docs/serve.mddocuments the bundle. - The MathML of a PEtab formula (#526).
formula_mathmlofsbmlsim.simulator.formulawrites a formula of PEtab math as MathML of SBML from the parse treecompile_formulacompiles, the operations as written and the numbers as doubles, so roadrunner evaluates it ascompile_formuladoes.
Fixes
- A panel is integrated to its output times (#526). The service interpolated the steps of the integrator onto the
points + 1output times of a panel, which put the curves of the glimepiride page up to 1.2e-5 of their peak (2.6e-4 relative in the first minutes) off the solution at those times; the simulation of a panel now outputs its times. arcsec,arccscandarccotof a sum (#526).compile_formulacompiledarcsec(x + 1)asarccos(1 / x + 1), without the parentheses of the argument; the functions of a reciprocal now take the reciprocal of their whole argument.- Two panels of one id are refused by the writer of the annotation (#520), which wrote both and read one back; the documentation of the service links the web components.