Skip to content

ode2sbml.converters.sbml_writer

sbml_writer

SBML writer: ODEModel IR → libsbml → .xml (SBML Level 3 Version 2).

SBMLWriteError

Bases: Exception

Raised when a libsbml write operation fails.

Source code in ode2sbml/converters/sbml_writer.py
class SBMLWriteError(Exception):
    """Raised when a libsbml write operation fails."""

model_to_sbml_doc(ir)

Convert an :class:~ode2sbml.model.ODEModel to a libsbml SBMLDocument.

Returns:

Type Description
SBMLDocument

A fully populated SBML Level 3 Version 2 document.

Source code in ode2sbml/converters/sbml_writer.py
def model_to_sbml_doc(ir: ODEModel) -> libsbml.SBMLDocument:
    """
    Convert an :class:`~ode2sbml.model.ODEModel` to a libsbml SBMLDocument.

    Returns
    -------
    libsbml.SBMLDocument
        A fully populated SBML Level 3 Version 2 document.
    """
    doc = libsbml.SBMLDocument(3, 2)
    model = doc.createModel()

    _check(model.setId(ir.id), f"setId({ir.id})")
    _check(model.setName(ir.name), f"setName({ir.name})")
    _check(model.setTimeUnits("time"), "setTimeUnits")
    _check(model.setSubstanceUnits("substance"), "setSubstanceUnits")
    _check(model.setVolumeUnits("volume"), "setVolumeUnits")
    _check(model.setExtentUnits("substance"), "setExtentUnits")
    _check(model.setLengthUnits("metre"), "setLengthUnits")
    _check(model.setAreaUnits("dimensionless"), "setAreaUnits")

    _add_unit_definitions(model)
    _set_notes(model, ir.notes)

    for comp in ir.compartments:
        _add_compartment(model, comp)

    for sp_ir in ir.species:
        _add_species(model, sp_ir)

    for param in ir.parameters:
        _add_parameter(model, param)

    for rr in ir.rate_rules:
        _add_rate_rule(model, rr)

    for ar in ir.assignment_rules:
        _add_assignment_rule(model, ar)

    for ev in ir.events:
        _add_event(model, ev)

    return doc

write_sbml(ir, filepath)

Write an :class:~ode2sbml.model.ODEModel to an SBML XML file.

Parameters:

Name Type Description Default
ir ODEModel

The ODE model intermediate representation.

required
filepath str

Output path for the SBML file.

required
Source code in ode2sbml/converters/sbml_writer.py
def write_sbml(ir: ODEModel, filepath: str) -> None:
    """
    Write an :class:`~ode2sbml.model.ODEModel` to an SBML XML file.

    Parameters
    ----------
    ir:
        The ODE model intermediate representation.
    filepath:
        Output path for the SBML file.
    """
    doc = model_to_sbml_doc(ir)
    os.makedirs(os.path.dirname(os.path.abspath(filepath)), exist_ok=True)
    result = libsbml.writeSBMLToFile(doc, filepath)
    if result != 1:
        raise SBMLWriteError(f"libsbml failed to write SBML to '{filepath}'.")

model_to_sbml_string(ir)

Return the SBML XML as a string (for testing / in-memory use).

Source code in ode2sbml/converters/sbml_writer.py
def model_to_sbml_string(ir: ODEModel) -> str:
    """Return the SBML XML as a string (for testing / in-memory use)."""
    doc = model_to_sbml_doc(ir)
    writer = libsbml.SBMLWriter()
    return writer.writeSBMLToString(doc)