Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ jobs:
run: |
python -m pip install --upgrade pip
pip install -r .ci_pip_reqs.txt
pip install .[reports,combine]
pip install .[reports,combine,tests]

- name: Run flake8
run: |
Expand Down
7 changes: 6 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,15 @@ def absolute_links(txt):
'jsonschema',
],
include_package_data=True,
tests_require=['flake8', 'pytest', 'python-libcombine'],
python_requires='>=3.7.1',
entry_points=ENTRY_POINTS,
extras_require={
'tests': [
'flake8',
'pytest',
'python-libcombine',
'simplesbml'
],
'reports': ['Jinja2'],
'combine': ['python-libcombine>=0.2.6'],
'doc': [
Expand Down
7 changes: 4 additions & 3 deletions tests/test_combine.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,12 @@
]


def test_combine_archive(minimal_sbml_model):
def test_combine_archive():
"""Test `create_combine_archive` and `Problem.from_combine`"""

# Create test files
document, _ = minimal_sbml_model
import simplesbml
ss_model = simplesbml.SbmlModel()

# Create tables with arbitrary content
measurement_df = pd.DataFrame(data={
Expand Down Expand Up @@ -69,7 +70,7 @@ def test_combine_archive(minimal_sbml_model):
as tempdir:
# Write test data
outdir = Path(tempdir)
petab.write_sbml(document, outdir / sbml_file_name)
petab.write_sbml(ss_model.document, outdir / sbml_file_name)
petab.write_measurement_df(
measurement_df, outdir / measurement_file_name)
petab.write_parameter_df(
Expand Down
58 changes: 27 additions & 31 deletions tests/test_lint.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,11 @@
from math import nan
from unittest.mock import patch

import libsbml
import pandas as pd
import pytest

import petab
from petab import (lint, sbml) # noqa: E402
from petab import lint
from petab.C import *

# import fixtures
Expand All @@ -17,7 +16,7 @@
]


def test_assert_measured_observables_present_in_model():
def test_assert_measured_observables_present():
# create test model

measurement_df = pd.DataFrame(data={
Expand Down Expand Up @@ -211,35 +210,32 @@ def test_assert_no_leading_trailing_whitespace():


def test_assert_model_parameters_in_condition_or_parameter_table():
document = libsbml.SBMLDocument(3, 1)
model = document.createModel()
model.setTimeUnits("second")
model.setExtentUnits("mole")
model.setSubstanceUnits('mole')
sbml.add_global_parameter(model, 'parameter1')
sbml.add_global_parameter(model, 'noiseParameter1_')
sbml.add_global_parameter(model, 'observableParameter1_')
import simplesbml
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Move to header? Currently imported multiple times.

Also imported within test cases in other files.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The idea was not importing bulky libsbml everywhere, that when running non-sbml only, they will complete slightly faster (e.g., convenient when using auto-rerun).

ss_model = simplesbml.SbmlModel()
ss_model.addParameter('parameter1', 0.0)
ss_model.addParameter('noiseParameter1_', 0.0)
ss_model.addParameter('observableParameter1_', 0.0)
sbml_model = ss_model.model

lint.assert_model_parameters_in_condition_or_parameter_table(
model, pd.DataFrame(columns=['parameter1']), pd.DataFrame()
sbml_model, pd.DataFrame(columns=['parameter1']), pd.DataFrame()
)

lint.assert_model_parameters_in_condition_or_parameter_table(
model, pd.DataFrame(), pd.DataFrame(index=['parameter1']))
sbml_model, pd.DataFrame(), pd.DataFrame(index=['parameter1']))

with pytest.raises(AssertionError):
lint.assert_model_parameters_in_condition_or_parameter_table(
model,
sbml_model,
pd.DataFrame(columns=['parameter1']),
pd.DataFrame(index=['parameter1']))

lint.assert_model_parameters_in_condition_or_parameter_table(
model, pd.DataFrame(), pd.DataFrame())
sbml_model, pd.DataFrame(), pd.DataFrame())

sbml.create_assigment_rule(model, assignee_id='parameter1',
formula='parameter2')
ss_model.addAssignmentRule('parameter1', 'parameter2')
lint.assert_model_parameters_in_condition_or_parameter_table(
model, pd.DataFrame(), pd.DataFrame())
sbml_model, pd.DataFrame(), pd.DataFrame())


def test_assert_noise_distributions_valid():
Expand Down Expand Up @@ -406,10 +402,10 @@ def test_assert_measurement_conditions_present_in_condition_table():
measurement_df=measurement_df, condition_df=condition_df)


def test_check_condition_df(minimal_sbml_model):
def test_check_condition_df():
"""Check that we correctly detect errors in condition table"""

_, sbml_model = minimal_sbml_model
import simplesbml
ss_model = simplesbml.SbmlModel()

condition_df = pd.DataFrame(data={
CONDITION_ID: ['condition1'],
Expand All @@ -419,29 +415,29 @@ def test_check_condition_df(minimal_sbml_model):

# parameter missing in model
with pytest.raises(AssertionError):
lint.check_condition_df(condition_df, sbml_model)
lint.check_condition_df(condition_df, ss_model.model)

# fix:
sbml_model.createParameter().setId('p1')
lint.check_condition_df(condition_df, sbml_model)
ss_model.addParameter('p1', 1.0)
lint.check_condition_df(condition_df, ss_model.model)

# species missing in model
condition_df['s1'] = [3.0]
with pytest.raises(AssertionError):
lint.check_condition_df(condition_df, sbml_model)
lint.check_condition_df(condition_df, ss_model.model)

# fix:
sbml_model.createSpecies().setId('s1')
lint.check_condition_df(condition_df, sbml_model)
ss_model.addSpecies("[s1]", 1.0)
lint.check_condition_df(condition_df, ss_model.model)

# compartment missing in model
condition_df['c1'] = [4.0]
condition_df['c2'] = [4.0]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Compartment name changed? Is it that the default compartment in a simplesbml.SbmlModel is already 'c1'?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, exactly.

with pytest.raises(AssertionError):
lint.check_condition_df(condition_df, sbml_model)
lint.check_condition_df(condition_df, ss_model.model)

# fix:
sbml_model.createCompartment().setId('c1')
lint.check_condition_df(condition_df, sbml_model)
ss_model.addCompartment(comp_id='c2', vol=1.0)
lint.check_condition_df(condition_df, ss_model.model)


def test_check_ids():
Expand Down
18 changes: 7 additions & 11 deletions tests/test_observables.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,18 +61,13 @@ def test_write_observable_df():
assert (observable_df == re_df).all().all()


def test_get_output_parameters(minimal_sbml_model):
def test_get_output_parameters():
"""Test measurements.get_output_parameters."""
# sbml model
_, model = minimal_sbml_model

p = model.createParameter()
p.setId('fixedParameter1')
p.setName('FixedParameter1')

p = model.createParameter()
p.setId('observable_1')
p.setName('Observable 1')
import simplesbml
ss_model = simplesbml.SbmlModel()
ss_model.addParameter('fixedParameter1', 1.0)
ss_model.addParameter('observable_1', 1.0)

# observable file
observable_df = pd.DataFrame(data={
Expand All @@ -82,7 +77,8 @@ def test_get_output_parameters(minimal_sbml_model):
NOISE_FORMULA: [1],
}).set_index(OBSERVABLE_ID)

output_parameters = petab.get_output_parameters(observable_df, model)
output_parameters = petab.get_output_parameters(
observable_df, ss_model.model)

assert output_parameters == ['offset', 'scaling']

Expand Down
Loading