Source code for sbmlsim.test.test_units

"""
Test units.
"""
from pathlib import Path
from typing import List, Tuple

import libsbml
import pytest

from sbmlsim.examples import example_units
from sbmlsim.test import MODEL_DEMO, MODEL_REPRESSILATOR
from sbmlsim.units import UnitRegistry, Units, UnitsInformation


[docs]sbml_paths = [MODEL_DEMO, MODEL_REPRESSILATOR]
[docs]def test_default_ureg() -> None: """Test creation of default unit registry.""" ureg = UnitsInformation._default_ureg() assert ureg assert isinstance(ureg, UnitRegistry)
[docs]def check_uinfo(uinfo: UnitsInformation) -> None: """Check UnitsInformation.""" assert uinfo assert isinstance(uinfo, UnitsInformation) assert uinfo.udict assert isinstance(uinfo.udict, dict) assert uinfo.ureg assert isinstance(uinfo.ureg, UnitRegistry)
@pytest.mark.parametrize("sbml_path", sbml_paths)
[docs]def test_units_from_sbml(sbml_path: Path) -> None: """Test reading units from SBML models.""" uinfo = UnitsInformation.from_sbml_path(sbml_path) check_uinfo(uinfo)
@pytest.mark.parametrize("sbml_path", sbml_paths)
[docs]def test_units_from_doc(sbml_path: Path) -> None: """Test reading units from SBML models.""" doc: libsbml.SBMLDocument = libsbml.readSBMLFromFile(str(sbml_path)) uinfo = UnitsInformation.from_sbml_doc(doc) check_uinfo(uinfo)
[docs]def test_example_units() -> None: example_units.run_demo_example()
[docs]def create_udef_examples() -> List[Tuple[libsbml.UnitDefinition, str]]: """Create example UnitDefinitions for testing.""" udef0 = libsbml.UnitDefinition(3, 1) # s udef1 = libsbml.UnitDefinition(3, 1) u1: libsbml.Unit = udef1.createUnit() u1.setId("u1") u1.setKind(libsbml.UNIT_KIND_SECOND) u1.setMultiplier(1.0) u1.setExponent(1) u1.setScale(0) # 1/mmole udef2 = libsbml.UnitDefinition(3, 1) u2: libsbml.Unit = udef2.createUnit() u2.setId("u2") u2.setKind(libsbml.UNIT_KIND_MOLE) u2.setMultiplier(1.0) u2.setExponent(-1) u2.setScale(-3) return [ (None, "None"), (udef0, ""), (udef1, "s"), (udef2, "1/(10^-3*mole)"),
]
[docs]udef_examples = create_udef_examples()
@pytest.mark.parametrize("udef, s", udef_examples)
[docs]def test_udef_to_str(udef: libsbml.UnitDefinition, s: str) -> None: stest = libsbml.UnitDefinition_printUnits(udef) print(stest) s2 = Units.udef_to_str(udef) assert s2 == s
# def test_normalize_changes() -> None: # Units.normalize_changes()