Skip to content

Commit

Permalink
feat: updated to Biosimulators-utils 0.1.104; added pytest configurat…
Browse files Browse the repository at this point in the history
…ion to ignore BioSimulators utils warnings
  • Loading branch information
jonrkarr committed Aug 17, 2021
1 parent 65a72c1 commit b982a0b
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 22 deletions.
9 changes: 8 additions & 1 deletion biosimulators_amici/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,14 @@
from ._version import __version__ # noqa: F401
# :obj:`str`: version

# from .core import exec_sedml_docs_in_combine_archive # noqa: F401
from .core import exec_sed_task, exec_sedml_docs_in_combine_archive # noqa: F401

__all__ = [
'__version__',
'get_simulator_version',
'exec_sed_task',
'exec_sedml_docs_in_combine_archive',
]


def get_simulator_version():
Expand Down
48 changes: 32 additions & 16 deletions biosimulators_amici/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

from .data_model import KISAO_ALGORITHMS_MAP, KISAO_PARAMETERS_MAP
from biosimulators_utils.combine.exec import exec_sedml_docs_in_archive
from biosimulators_utils.config import get_config
from biosimulators_utils.log.data_model import CombineArchiveLog, TaskLog # noqa: F401
from biosimulators_utils.viz.data_model import VizFormat # noqa: F401
from biosimulators_utils.report.data_model import ReportFormat, VariableResults # noqa: F401
Expand All @@ -29,6 +30,11 @@
import sys
import tempfile

# libSBML seems to need to be reloaded in some environments
import importlib
import libsbml # noqa: F401
importlib.reload(libsbml)


__all__ = [
'exec_sedml_docs_in_combine_archive',
Expand All @@ -43,8 +49,10 @@


def exec_sedml_docs_in_combine_archive(archive_filename, out_dir,
return_results=False,
report_formats=None, plot_formats=None,
bundle_outputs=None, keep_individual_outputs=None):
bundle_outputs=None, keep_individual_outputs=None,
raise_exceptions=True):
""" Execute the SED tasks defined in a COMBINE/OMEX archive and save the outputs
Args:
Expand All @@ -56,21 +64,25 @@ def exec_sedml_docs_in_combine_archive(archive_filename, out_dir,
* HDF5: directory in which to save a single HDF5 file (``{ out_dir }/reports.h5``),
with reports at keys ``{ relative-path-to-SED-ML-file-within-archive }/{ report.id }`` within the HDF5 file
return_results (:obj:`bool`, optional): whether to return the result of each output of each SED-ML file
report_formats (:obj:`list` of :obj:`ReportFormat`, optional): report format (e.g., csv or h5)
plot_formats (:obj:`list` of :obj:`VizFormat`, optional): report format (e.g., pdf)
bundle_outputs (:obj:`bool`, optional): if :obj:`True`, bundle outputs into archives for reports and plots
keep_individual_outputs (:obj:`bool`, optional): if :obj:`True`, keep individual output files
raise_exceptions (:obj:`bool`, optional): whether to raise exceptions
Returns:
:obj:`CombineArchiveLog`: log
"""
sed_doc_executer = functools.partial(exec_sed_doc, exec_sed_task)
return exec_sedml_docs_in_archive(sed_doc_executer, archive_filename, out_dir,
apply_xml_model_changes=True,
return_results=return_results,
report_formats=report_formats,
plot_formats=plot_formats,
bundle_outputs=bundle_outputs,
keep_individual_outputs=keep_individual_outputs)
keep_individual_outputs=keep_individual_outputs,
raise_exceptions=raise_exceptions)


def exec_sed_task(task, variables, log=None):
Expand Down Expand Up @@ -132,23 +144,27 @@ def validate_sed_task(task, variables):
:obj:`dict` of :obj:`str` to :obj:`str`: dictionary that maps each XPath to the
value of the attribute of the object in the XML file that matches the XPath
"""
config = get_config()

model = task.model
sim = task.simulation

raise_errors_warnings(validation.validate_task(task),
error_summary='Task `{}` is invalid.'.format(task.id))
raise_errors_warnings(validation.validate_model_language(task.model.language, ModelLanguage.SBML),
error_summary='Language for model `{}` is not supported.'.format(model.id))
raise_errors_warnings(validation.validate_model_change_types(task.model.changes, ()),
error_summary='Changes for model `{}` are not supported.'.format(model.id))
raise_errors_warnings(*validation.validate_model_changes(task.model),
error_summary='Changes for model `{}` are invalid.'.format(model.id))
raise_errors_warnings(validation.validate_simulation_type(task.simulation, (UniformTimeCourseSimulation, )),
error_summary='{} `{}` is not supported.'.format(sim.__class__.__name__, sim.id))
raise_errors_warnings(*validation.validate_simulation(task.simulation),
error_summary='Simulation `{}` is invalid.'.format(sim.id))
raise_errors_warnings(*validation.validate_data_generator_variables(variables),
error_summary='Data generator variables for task `{}` are invalid.'.format(task.id))
if config.VALIDATE_SEDML:
raise_errors_warnings(validation.validate_task(task),
error_summary='Task `{}` is invalid.'.format(task.id))
raise_errors_warnings(validation.validate_model_language(task.model.language, ModelLanguage.SBML),
error_summary='Language for model `{}` is not supported.'.format(model.id))
raise_errors_warnings(validation.validate_model_change_types(task.model.changes, ()),
error_summary='Changes for model `{}` are not supported.'.format(model.id))
raise_errors_warnings(*validation.validate_model_changes(task.model),
error_summary='Changes for model `{}` are invalid.'.format(model.id))
raise_errors_warnings(validation.validate_simulation_type(task.simulation, (UniformTimeCourseSimulation, )),
error_summary='{} `{}` is not supported.'.format(sim.__class__.__name__, sim.id))
raise_errors_warnings(*validation.validate_simulation(task.simulation),
error_summary='Simulation `{}` is invalid.'.format(sim.id))
raise_errors_warnings(*validation.validate_data_generator_variables(variables),
error_summary='Data generator variables for task `{}` are invalid.'.format(task.id))

return validation.validate_variable_xpaths(variables, task.model.source, attr='id')


Expand Down
3 changes: 3 additions & 0 deletions pytest.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[pytest]
filterwarnings =
ignore::biosimulators_utils.warnings.BioSimulatorsWarning
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
amici >= 0.11.17
biosimulators_utils[logging] >= 0.1.96
biosimulators_utils[logging] >= 0.1.104
kisao
numpy
sympy >= 1.7
10 changes: 6 additions & 4 deletions tests/test_utils.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from biosimulators_amici import core as utils
from biosimulators_amici import core
import amici
import os.path
import unittest
Expand All @@ -7,15 +7,17 @@
class UtilsTestCase(unittest.TestCase):
def test_import_successful(self):
model_filename = os.path.join(os.path.dirname(__file__), 'fixtures', 'biomd0000000002.xml')
model, sbml_model, model_name, model_dir = utils.import_model_from_sbml(
self.assertTrue(os.path.isfile(model_filename))

model, sbml_model, model_name, model_dir = core.import_model_from_sbml(
model_filename, ['BLL', 'IL', 'AL'])

self.assertTrue(os.path.isdir(model_dir))
self.assertIsInstance(model, amici.amici.ModelPtr)

utils.cleanup_model(model_name, model_dir)
core.cleanup_model(model_name, model_dir)
self.assertFalse(os.path.isdir(model_dir))

def test_import_models_with_events(self):
model_filename = os.path.join(os.path.dirname(__file__), 'fixtures', 'BIOMD0000000297_url.xml')
utils.import_model_from_sbml(model_filename, [])
core.import_model_from_sbml(model_filename, [])

0 comments on commit b982a0b

Please sign in to comment.