Skip to content

Latest commit

 

History

History
78 lines (59 loc) · 3 KB

README.md

File metadata and controls

78 lines (59 loc) · 3 KB

symident

wheels docs License: MIT

Structural identifiability of ODE models by Lie symmetries over finite fields.

symident finds the non-identifiable directions of an ODE model with observables, conditions and events, returns them as exact generators where possible, and reduces the model to identifiable parameters. The observability rank is computed modulo primes in a C++ kernel; closed forms are reconstructed by sparse interpolation and proven over Q or verified at fresh primes.

Installation

pip install symident

Wheels are built for Linux (x86_64, aarch64, glibc 2.28 or newer; tested on Ubuntu, Debian and Fedora), macOS (x86_64, arm64) and Windows (x86_64), for Python 3.10 to 3.14. Elsewhere pip builds from source, which needs a C++17 compiler and CMake; with OpenMP the kernel runs on several threads. The development version installs with pip install git+https://github.com/dModverse/symident.

Steady-state analyses (equilibrate=True) whose resting state is a coupled nonlinear polynomial system use msolve. On Linux and macOS

import symident
symident.install_msolve()

builds it with GMP, MPFR and FLINT into a per-user cache (needs a C compiler, make, m4 and curl or wget), where symident finds it. Alternatively point SYMIDENT_MSOLVE at an msolve executable; on Windows that is the only way.

Example

import symident as si

m = si.Model({"A": "-k1*A", "B": "k1*A - k2*B"}, {"y": "s*B"})
res = si.detect(m, reconstruct=True)
print(res)
#> Result:  rank 4 / 5  |  1 non-identifiable direction
res.symmetries[0].generator
#> {'A': 'A', 'B': 'B', 's': '-s'}
print(res.reduce())
#> Reduced 1 of 1 direction.
#> Trafo (non-identity entries)
#>   A = 1

Interface

Model(odes, observables, ...) ODEs or a reaction network, observables, trafo, conditions, events, inputs, fixed
detect(model, ...) rank, identifiability and the non-identifiable directions (Symmetries)
reduce(result, ...), result.reduce() reparametrization that removes the directions (Reduction)
reconst_control(...) settings of the saturation and the reconstruction
switches(...) diagnostic and route switches for a with block

Both results print a report; summary() adds the computation details and to_dict() returns the raw result.

Contact

Simon Beyer, simon.beyer@fdm.uni-freiburg.de. Requests for further functions in model equations, questions and bug reports are welcome by e-mail or as an issue; the supported functions are listed in the user guide.

License

MIT