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 petab/problem.py
Original file line number Diff line number Diff line change
Expand Up @@ -411,7 +411,7 @@ def to_files(
visualization tables, they will be merged and written to a single file.

Arguments:
sbml_file: SBML model destination
sbml_file: SBML model destination (deprecated)
model_file: Model destination
condition_file: Condition table destination
measurement_file: Measurement table destination
Expand Down
58 changes: 58 additions & 0 deletions tests/test_deprecated.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
"""Check that deprecated functionality raises but still works."""
import pytest
import tempfile
from pathlib import Path

import petab

from .test_sbml import create_test_data, check_model
from .test_petab import petab_problem # noqa: F401


def test_problem_with_sbml_model():
"""Test that a problem can be correctly created from sbml model."""
# retrieve test data
ss_model, condition_df, observable_df, measurement_df, parameter_df = \
create_test_data()

with pytest.deprecated_call():
petab_problem = petab.Problem( # noqa: F811
sbml_model=ss_model.model,
condition_df=condition_df,
measurement_df=measurement_df,
parameter_df=parameter_df,
)

_, condition_model = petab.get_model_for_condition(
petab_problem, "condition_1")

check_model(condition_model)


def test_to_files_with_sbml_model(petab_problem): # noqa: F811
"""Test problem.to_files."""
with tempfile.TemporaryDirectory() as outdir:
# create target files
sbml_file = Path(outdir, "model.xml")
condition_file = Path(outdir, "conditions.tsv")
measurement_file = Path(outdir, "measurements.tsv")
parameter_file = Path(outdir, "parameters.tsv")
observable_file = Path(outdir, "observables.tsv")

# write contents to files
with pytest.deprecated_call():
petab_problem.to_files(
sbml_file=sbml_file,
condition_file=condition_file,
measurement_file=measurement_file,
parameter_file=parameter_file,
visualization_file=None,
observable_file=observable_file,
yaml_file=None,
)

# exemplarily load some
parameter_df = petab.get_parameter_df(parameter_file)
same_nans = parameter_df.isna() == petab_problem.parameter_df.isna()
assert ((parameter_df == petab_problem.parameter_df) | same_nans) \
.all().all()
14 changes: 8 additions & 6 deletions tests/test_parameter_mapping.py
Original file line number Diff line number Diff line change
Expand Up @@ -351,7 +351,8 @@ def test_partial_override(condition_df_2_conditions):
actual = petab.get_optimization_to_simulation_parameter_mapping(
measurement_df=measurement_df,
condition_df=condition_df,
sbml_model=ss_model.model, parameter_df=parameter_df
model=petab.models.sbml_model.SbmlModel(ss_model.model),
parameter_df=parameter_df
)

# Comparison with NaN containing expected results fails after pickling!
Expand Down Expand Up @@ -399,7 +400,7 @@ def test_parameterized_condition_table():
measurement_df=measurement_df,
condition_df=condition_df,
parameter_df=parameter_df,
sbml_model=ss_model.model
model=petab.models.sbml_model.SbmlModel(ss_model.model),
)

expected = [({}, {'dynamicParameter1': 'dynamicOverride1_1'},
Expand Down Expand Up @@ -467,7 +468,7 @@ def test_parameterized_condition_table_changed_scale():
measurement_df=measurement_df,
condition_df=condition_df,
parameter_df=parameter_df,
sbml_model=ss_model.model
model=petab.models.sbml_model.SbmlModel(ss_model.model)
)

expected = [
Expand All @@ -487,8 +488,8 @@ def test_parameterized_condition_table_changed_scale():
measurement_df=measurement_df,
condition_df=condition_df,
parameter_df=parameter_df,
sbml_model=ss_model.model,
scaled_parameters=True
model=petab.models.sbml_model.SbmlModel(ss_model.model),
scaled_parameters=True,
)

expected = [
Expand All @@ -510,7 +511,8 @@ def test_parameterized_condition_table_changed_scale():
measurement_df=measurement_df,
condition_df=condition_df,
parameter_df=parameter_df,
sbml_model=ss_model.model)
model=petab.models.sbml_model.SbmlModel(ss_model.model),
)

expected = [
({overridee_id: 'dynamicOverrideLog10'},
Expand Down
32 changes: 18 additions & 14 deletions tests/test_petab.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
from io import StringIO
from math import nan
from pathlib import Path
from tempfile import TemporaryDirectory

import libsbml
import numpy as np
Expand Down Expand Up @@ -78,12 +77,13 @@ def petab_problem():
observable_file_name = Path(temp_dir, "observables.tsv")
petab.write_observable_df(observable_df, observable_file_name)

yield petab.Problem.from_files(
sbml_file=sbml_file_name,
measurement_file=measurement_file_name,
condition_file=condition_file_name,
parameter_file=parameter_file_name,
observable_files=observable_file_name)
with pytest.deprecated_call():
yield petab.Problem.from_files(
sbml_file=sbml_file_name,
measurement_file=measurement_file_name,
condition_file=condition_file_name,
parameter_file=parameter_file_name,
observable_files=observable_file_name)


@pytest.fixture
Expand All @@ -95,10 +95,13 @@ def fujita_model_scaling():
measurement_file = path / 'Fujita_measurementData.tsv'
parameter_file = path / 'Fujita_parameters_scaling.tsv'

return petab.Problem.from_files(sbml_file=sbml_file,
condition_file=condition_file,
measurement_file=measurement_file,
parameter_file=parameter_file)
with pytest.deprecated_call():
return petab.Problem.from_files(
sbml_file=sbml_file,
condition_file=condition_file,
measurement_file=measurement_file,
parameter_file=parameter_file,
)


def test_split_parameter_replacement_list():
Expand Down Expand Up @@ -570,13 +573,14 @@ def test_to_files(petab_problem): # pylint: disable=W0621

# write contents to files
petab_problem.to_files(
sbml_file=sbml_file,
model_file=sbml_file,
condition_file=condition_file,
measurement_file=measurement_file,
parameter_file=parameter_file,
visualization_file=None,
observable_file=observable_file,
yaml_file=None)
yaml_file=None,
)

# exemplarily load some
parameter_df = petab.get_parameter_df(parameter_file)
Expand Down Expand Up @@ -625,7 +629,7 @@ def test_problem_from_yaml_v1_multiple_files():
sbml_files: []
"""

with TemporaryDirectory() as tmpdir:
with tempfile.TemporaryDirectory() as tmpdir:
yaml_path = Path(tmpdir, "problem.yaml")
with open(yaml_path, 'w') as f:
f.write(yaml_config)
Expand Down
37 changes: 25 additions & 12 deletions tests/test_sbml.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@
import petab # noqa: E402


def test_get_condition_specific_models():
"""Test for petab.sbml.get_condition_specific_models"""
def create_test_data():
# Create test model and data files
import simplesbml

ss_model = simplesbml.SbmlModel()
ss_model.addCompartment(comp_id="compartment_1", vol=1)
for i in range(1, 4):
Expand Down Expand Up @@ -51,18 +51,10 @@ def test_get_condition_specific_models():
})
parameter_df.set_index([petab.PARAMETER_ID], inplace=True)

petab_problem = petab.Problem(
sbml_model=ss_model.model,
condition_df=condition_df,
observable_df=observable_df,
measurement_df=measurement_df,
parameter_df=parameter_df
)
return ss_model, condition_df, observable_df, measurement_df, parameter_df

# Actual test
condition_doc, condition_model = petab.get_model_for_condition(
petab_problem, "condition_1")

def check_model(condition_model):
assert condition_model.getSpecies(
"species_1").getInitialConcentration() == 15
assert condition_model.getSpecies(
Expand All @@ -75,3 +67,24 @@ def test_get_condition_specific_models():
assert condition_model.getParameter("parameter_1").getValue() == 1.25
assert condition_model.getParameter("parameter_2").getValue() == 2.25
assert condition_model.getParameter("parameter_3").getValue() == 2.25


def test_get_condition_specific_models():
"""Test for petab.sbml.get_condition_specific_models"""
# retrieve test data
ss_model, condition_df, observable_df, measurement_df, parameter_df = \
create_test_data()

petab_problem = petab.Problem(
model=petab.models.sbml_model.SbmlModel(ss_model.model),
condition_df=condition_df,
observable_df=observable_df,
measurement_df=measurement_df,
parameter_df=parameter_df
)

# create SBML model for condition with parameters updated from problem
_, condition_model = petab.get_model_for_condition(
petab_problem, "condition_1")

check_model(condition_model)