Skip to content

Developer notes

Extension points

Add a new input format by writing a parser that returns ODEModel.

flowchart LR
    New[New input format] --> Parser[New parser]
    Parser --> IR[ODEModel]
    IR --> SBML[SBML writer]
    IR --> PEtab[PEtab writer]

Do not make exporters depend on input-specific structures.

Testing strategy

Recommended test layers:

  1. Unit-test ODEModel validation.
  2. Unit-test parser conversion for each convention.
  3. Snapshot-test SBML strings for small models.
  4. Validate generated SBML with libSBML.
  5. Smoke-test PEtab bundle generation.

CI example

name: tests

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: "3.12"
      - run: pip install -e ".[test,docs]"
      - run: pytest
      - run: mkdocs build --strict

Strict docs build

Use mkdocs build --strict in CI so broken links, invalid mkdocstrings references, and malformed Mermaid blocks are caught early.

Release checklist

  • All tests pass.
  • Example models convert to SBML.
  • Generated SBML validates.
  • PEtab example writes expected files.
  • mkdocs build --strict passes.
  • Version and changelog are updated.