Skip to main content

Convert Python ODE systems to SBML (Level 3 Version 2) and PEtab bundles

Project description

ode2sbml

Convert Python ODE systems to SBML (Level 3 Version 2) and PEtab bundles.

CI Python 3.10+ License: MIT PyPI

ode2sbml is a Python package that converts ordinary differential equation (ODE) systems written in Python into valid SBML Level 3 Version 2 files and optionally PEtab bundles for parameter estimation.


Installation

pip install ode2sbml

Or install from source:

git clone https://github.com/bibymaths/ode2sbml.git
cd ode2sbml
pip install -e .

Dependencies (installed automatically):

  • python-libsbml >= 5.20
  • sympy >= 1.12
  • sbmlmath >= 0.3
  • petab >= 0.4
  • click >= 8.0
  • rich >= 13.0
  • numpy >= 1.24
  • pydantic >= 2.0

Quick Start

Convention A — scipy-style function

from ode2sbml import from_function, to_sbml

def lotka_volterra(t, y, p):
    x, y_val = y
    alpha, beta, delta, gamma = p
    dx = alpha * x - beta * x * y_val
    dy = -gamma * y_val + delta * x * y_val
    return [dx, dy]

model = from_function(
    func=lotka_volterra,
    state_vars=["x", "y"],
    param_names=["alpha", "beta", "delta", "gamma"],
    initial_conditions={"x": 10.0, "y": 5.0},
    parameter_values={"alpha": 1.1, "beta": 0.4, "delta": 0.1, "gamma": 0.4},
    model_id="lotka_volterra",
    model_name="Lotka-Volterra",
)

to_sbml(model, "lotka_volterra.xml")

Convention B — dict-of-formulas

from ode2sbml import from_dict, to_sbml

model_spec = {
    "species": {"S": 990.0, "I": 10.0, "R": 0.0},
    "parameters": {"beta": 0.3, "gamma": 0.1},
    "odes": {
        "S": "-beta*S*I",
        "I": "beta*S*I - gamma*I",
        "R": "gamma*I",
    },
    "compartments": {"host": 1.0},
}

model = from_dict(model_spec, model_id="sir", model_name="SIR Epidemic Model")
to_sbml(model, "sir_model.xml")

Convention C — SymPy symbolic system

import sympy as sp
from ode2sbml import from_sympy, to_sbml

x, y, z = sp.symbols("x y z")
sigma, rho, b = sp.symbols("sigma rho b")

odes = {
    x: sigma * (y - x),
    y: x * (rho - z) - y,
    z: x * y - b * z,
}
params = {sigma: 10.0, rho: 28.0, b: 8.0 / 3.0}
inits = {x: 0.0, y: 1.0, z: 0.0}

model = from_sympy(odes=odes, params=params, inits=inits,
                   model_id="lorenz", model_name="Lorenz System")
to_sbml(model, "lorenz.xml")

PEtab Export

from ode2sbml import from_dict, to_petab

model = from_dict(model_spec, model_id="sir", model_name="SIR")
yaml_path = to_petab(model, outdir="petab_bundle/", observables={
    "obs_I": {"formula": "I", "noise_formula": "0.1 * I"},
})
print(f"PEtab bundle written. Manifest: {yaml_path}")

CLI

# Convert a Python model file to SBML
ode2sbml convert model.py --output model.xml --format sbml

# Convert to PEtab bundle
ode2sbml convert model.py --output ./bundle/ --format petab

# Validate an SBML file
ode2sbml validate model.xml

Supported SBML Features

Feature Supported
SBML Level 3 Version 2
Compartments
Species (state variables)
Parameters
Rate rules (ODEs)
Assignment rules
Events (with triggers)
Unit definitions
Model notes
MathML via sbmlmath
libsbml consistency check
PEtab bundle export
JSON serialization (IR)
Reactions / stoichiometry ❌ (use RateRules)
Spatial SBML

API Reference

Parsers

  • from_function(func, state_vars, param_names, initial_conditions, parameter_values, ...) — Convention A
  • from_dict(model_dict, ...) — Convention B
  • from_sympy(odes, params, inits, ...) — Convention C

Exporters

  • to_sbml(model, filepath) — Write SBML Level 3 Version 2 XML
  • to_petab(model, outdir, observables, ...) — Write PEtab bundle

Validators

  • validate_sbml_file(filepath) — Validate from file
  • validate_sbml_string(xml_str) — Validate from string
  • validate_sbml_doc(doc) — Validate libsbml document

IR Classes

  • ODEModel, Compartment, Species, Parameter, RateRule, AssignmentRule, EventTrigger

References


License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ode2sbml-0.1.1.tar.gz (27.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ode2sbml-0.1.1-py3-none-any.whl (21.6 kB view details)

Uploaded Python 3

File details

Details for the file ode2sbml-0.1.1.tar.gz.

File metadata

  • Download URL: ode2sbml-0.1.1.tar.gz
  • Upload date:
  • Size: 27.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ode2sbml-0.1.1.tar.gz
Algorithm Hash digest
SHA256 a30f6db47593266a019879524290868aaa11ff83d2c57604a4410f50f28e7669
MD5 4e908066feeb50b56d26d71777a950f5
BLAKE2b-256 8783eb05e03fe1db478ae0c64fa604bc76ee7f417f686ac14a493da35d4f3228

See more details on using hashes here.

Provenance

The following attestation bundles were made for ode2sbml-0.1.1.tar.gz:

Publisher: publish.yml on bibymaths/ode2sbml

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ode2sbml-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: ode2sbml-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 21.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ode2sbml-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 06247408b731eadd22d92536a53d3514990723ca4dd895a7d8a028b57ba2cff5
MD5 df6cd54ce31f5e567bbf25c9166b4fbd
BLAKE2b-256 82fa3f9fccb7cd05e4b814eaf11535e2d8856883ec8df521fb06fd909d338b06

See more details on using hashes here.

Provenance

The following attestation bundles were made for ode2sbml-0.1.1-py3-none-any.whl:

Publisher: publish.yml on bibymaths/ode2sbml

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page