Skip to content

Commit

Permalink
Update petab test suite code (#1768)
Browse files Browse the repository at this point in the history
Adapt to separate sbml and pysb test suite (PEtab-dev/petab_test_suite#47)
  • Loading branch information
dweindl committed Apr 7, 2022
1 parent 6f778dd commit f6ee397
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 29 deletions.
17 changes: 9 additions & 8 deletions python/amici/petab_import_pysb.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,17 @@
import logging
import os
from itertools import chain
from typing import List, Dict, Union, Optional, Tuple, Iterable
from pathlib import Path
from typing import Dict, Iterable, List, Optional, Tuple, Union

import libsbml
import petab
import pysb
import sympy as sp
from petab.C import (CONDITION_NAME, OBSERVABLE_TRANSFORMATION, LIN,
OBSERVABLE_FORMULA, NOISE_FORMULA, FORMAT_VERSION,
PARAMETER_FILE, SBML_FILES, CONDITION_FILES,
MEASUREMENT_FILES, VISUALIZATION_FILES, OBSERVABLE_FILES)
from petab.C import (CONDITION_FILES, CONDITION_NAME, FORMAT_VERSION,
MEASUREMENT_FILES, NOISE_FORMULA, OBSERVABLE_FILES,
OBSERVABLE_FORMULA, PARAMETER_FILE, SBML_FILES,
VISUALIZATION_FILES)

from . import petab_import
from .logging import get_logger, log_execution_time, set_log_level
Expand Down Expand Up @@ -194,7 +195,7 @@ def from_yaml(yaml_config: Union[Dict, str],
"""
from petab.yaml import (load_yaml, is_composite_problem,
assert_single_condition_and_sbml_file)
if isinstance(yaml_config, str):
if isinstance(yaml_config, (str, Path)):
path_prefix = os.path.dirname(yaml_config)
yaml_config = load_yaml(yaml_config)
else:
Expand Down Expand Up @@ -328,7 +329,7 @@ def import_model_pysb(

set_log_level(logger, verbose)

logger.info(f"Importing model ...")
logger.info("Importing model ...")

observable_table = petab_problem.observable_df
pysb_model = petab_problem.pysb_model
Expand All @@ -355,6 +356,7 @@ def import_model_pysb(
if observable_table is None:
observables = None
sigmas = None
noise_distrs = None
else:
observables = [expr.name for expr in pysb_model.expressions
if expr.name in observable_table.index]
Expand All @@ -364,7 +366,6 @@ def import_model_pysb(
noise_distrs = petab_import.petab_noise_distributions_to_amici(
observable_table)


from amici.pysb_import import pysb2amici
pysb2amici(pysb_model, model_output_dir, verbose=True,
observables=observables,
Expand Down
2 changes: 1 addition & 1 deletion python/tests/test_petab_simulate.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
def petab_problem() -> petab.Problem:
"""Create a PEtab problem for use in tests."""
test_case = '0001'
test_case_dir = Path(petabtests.SBML_DIR) / petabtests.CASES_LIST[0]
test_case_dir = Path(petabtests.SBML_DIR) / test_case
petab_yaml_path = test_case_dir / petabtests.problem_yaml_name(test_case)
return petab.Problem.from_yaml(str(petab_yaml_path))

Expand Down
20 changes: 13 additions & 7 deletions tests/petab_test_suite/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from typing import List
import re
import sys
import petabtests
from petabtests.core import get_cases


def parse_selection(selection_str: str) -> List[int]:
Expand Down Expand Up @@ -43,22 +43,28 @@ def pytest_generate_tests(metafunc):
# Run for all PEtab test suite cases
if "case" in metafunc.fixturenames \
and "model_type" in metafunc.fixturenames:

# Get CLI option
cases = metafunc.config.getoption("--petab-cases")
if cases:
# Run selected tests
test_numbers = parse_selection(cases)
else:
# Run all tests
test_numbers = petabtests.CASES_LIST
test_numbers = None

if metafunc.config.getoption("--only-sbml"):
model_types = ['sbml']
test_numbers = test_numbers if test_numbers else get_cases("sbml")
argvalues = [(case, 'sbml') for case in test_numbers]

elif metafunc.config.getoption("--only-pysb"):
model_types = ['pysb']
test_numbers = test_numbers if test_numbers else get_cases("pysb")
argvalues = [(case, 'pysb') for case in test_numbers]
else:
model_types = ['sbml', 'pysb']
argvalues = []
for format in ('sbml', 'pysb'):
test_numbers = test_numbers if test_numbers else get_cases(
format)
argvalues += [(case, format) for case in test_numbers]

argvalues = [(case, model_type) for model_type in model_types
for case in test_numbers]
metafunc.parametrize("case,model_type", argvalues)
26 changes: 13 additions & 13 deletions tests/petab_test_suite/test_petab_suite.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,19 @@
"""Run PEtab test suite (https:/PEtab-dev/petab_test_suite)"""

import logging
import os
import sys

import amici
import petab
import petabtests
import pytest
from _pytest.outcomes import Skipped
from amici import SteadyStateSensitivityMode
from amici.gradient_check import check_derivatives as amici_check_derivatives
from amici.logging import get_logger, set_log_level
from amici.petab_import import import_petab_problem, PysbPetabProblem
from amici.petab_objective import (
simulate_petab, rdatas_to_measurement_df, create_parameterized_edatas)
from amici import SteadyStateSensitivityMode
from amici.petab_import import PysbPetabProblem, import_petab_problem
from amici.petab_objective import (create_parameterized_edatas,
rdatas_to_measurement_df, simulate_petab)

logger = get_logger(__name__, logging.DEBUG)
set_log_level(get_logger("amici.petab_import"), logging.DEBUG)
Expand Down Expand Up @@ -46,17 +45,17 @@ def _test_case(case, model_type):

# load
if model_type == "sbml":
case_dir = os.path.join(petabtests.SBML_DIR, case)
case_dir = petabtests.SBML_DIR / case
# import petab problem
yaml_file = os.path.join(case_dir, petabtests.problem_yaml_name(case))
yaml_file = case_dir / petabtests.problem_yaml_name(case)
problem = petab.Problem.from_yaml(yaml_file)
elif model_type == "pysb":
import pysb
pysb.SelfExporter.cleanup()
pysb.SelfExporter.do_export = True
case_dir = os.path.join(petabtests.PYSB_DIR, case)
case_dir = petabtests.PYSB_DIR / case
# import petab problem
yaml_file = os.path.join(case_dir, petabtests.problem_yaml_name(case))
yaml_file = case_dir / petabtests.problem_yaml_name(case)
problem = PysbPetabProblem.from_yaml(yaml_file,
flatten=case.startswith('0006'))
else:
Expand Down Expand Up @@ -152,9 +151,10 @@ def run():

n_success = 0
n_skipped = 0
for case in petabtests.CASES_LIST:
cases = petabtests.get_cases('sbml')
for case in cases:
try:
test_case(case)
test_case(case, 'sbml')
n_success += 1
except Skipped:
n_skipped += 1
Expand All @@ -163,9 +163,9 @@ def run():
logger.error(f"Case {case} failed.")
logger.error(e)

logger.info(f"{n_success} / {len(petabtests.CASES_LIST)} successful, "
logger.info(f"{n_success} / {len(cases)} successful, "
f"{n_skipped} skipped")
if n_success != len(petabtests.CASES_LIST):
if n_success != len(cases):
sys.exit(1)


Expand Down

0 comments on commit f6ee397

Please sign in to comment.