Repository navigation
Release notes for sbmlsim 0.11.0
A release of libroadrunner 2.11 and python 3.15: libroadrunner 2.11 fixes most of the issues sbmlsim reported upstream and is the first release with wheels for python 3.15, so sbmlsim drops the workarounds it no longer needs and compiles its models with LLJIT.
Features
- Python 3.15 (#353). sbmlsim supports and tests python 3.15. h5py publishes no wheels for python 3.15 yet; pip builds it from source, which needs a C compiler and HDF5 (e.g.
libhdf5-devon Debian and Ubuntu,brew install hdf5on macOS). - Models compile three to five times faster (#331, #353). A model is compiled with LLJIT at its optimization level
DEFAULTinstead of MCJIT, e.g. the acetaminophen model of pkdb_models in 1.2 s instead of 5.4 s, with the same results bitwise and about as fast a simulation. libroadrunner 2.11 fixes the crash of LLJIT when the code of a model and its jump tables were more than 2 GiB apart (roadrunner #1368).
Fixes
- An event which the integrator keeps pending does not reach the next simulation (#353). An integration with the steps of the integrator whose last step of CVODE found the root of an event after the end leaves that event pending in the integrator of libroadrunner 2.11, which neither a reset nor the next simulation clears: the next simulation applied it with stale states of the triggers, and an event whose trigger is not persistent missed its next rise (case 01590 of the SBML Test Suite). A run of a model with events applies it after the run (
model_roadrunner.apply_pending_step_event, roadrunner #1381).
Changes
- libroadrunner >= 2.11.0 is required (#353), the cap
<2.11of 0.10.2 is lifted. - The rows of an event are told by markers (roadrunner #1364). libroadrunner reports an event in the steps of the integrator as two rows a little before and after its time; up to 2.10 the first integration of the process fixed that distance and sbmlsim probed it (
sbmlsim.model.roottol), 2.11 computes it per event from a step of CVODE it does not report.sbmlsim.model.event_rowsreplacessbmlsim.model.roottol: a model with events gets parameters which every event changes, a counter and, for an event with a delay whose values are the ones at its trigger, the time of its trigger, which the executor selects and drops from the output and which are no parameters or selections of the model. The probe of roadrunner in every process and worker and its warning are gone. - The messages of SUNDIALS follow the log level of roadrunner (libroadrunner 2.11):
sbmlsim.simulator.worker.quiet_sundialsandSUNDIALS_LOGSare removed, a failing point prints no messages of SUNDIALS in a serial run either. - The last row of the steps of the integrator is roadrunner's (roadrunner #1362): libroadrunner 2.11 interpolates it with the dense output of CVODE and leaves the model at the end, so a model without events is not integrated to the end again.
- A regeneration keeps the vector of absolute tolerances, which libroadrunner 2.11 restores itself.
- A state which a plan keeps is held in memory (
RoadRunner.saveStateS, which keeps no copies since libroadrunner 2.11, roadrunner #1363), not in a temporary file. - The SBML Test Suite seeds the random generator of the model (
seed_event_order(model),RoadRunner.setSeed(seed, False)): libroadrunner 2.11 orders simultaneous events of the same priority with it instead ofstd::rand.
Known issues
- A delayed event fires late in the steps of the integrator (roadrunner #1382, also with libroadrunner 2.10): with
variable_step_sizelibroadrunner applies an event with a delay at the end of the next step of CVODE instead of at its time. A simulation with output times (timesorsteps) is not affected. - Workarounds kept with libroadrunner 2.11, reported upstream: a model is always compiled (
RECOMPILE), since an instance from the cache of roadrunner has no piecewise triggers (roadrunner #1383); a segment of the steps of the integrator whose end is within the root tolerance of an event is integrated again with output times (roadrunner #1384); the targets of initial assignments are set through helper parameters, since roadrunner regenerates the model to set them (roadrunner #1385).