Skip to content

Commit

Permalink
feat: updated to Biosimulators-utils 0.1.114: organized options, adde…
Browse files Browse the repository at this point in the history
…d option to control logging; added Python package to specs; added fonts to Docker image
  • Loading branch information
jonrkarr committed Sep 1, 2021
1 parent 5613a78 commit 04040f6
Show file tree
Hide file tree
Showing 7 changed files with 53 additions and 43 deletions.
7 changes: 6 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Base OS
FROM python:3.9-slim-buster

ARG VERSION="0.0.4"
ARG VERSION="0.0.5"
ARG SIMULATOR_VERSION=8.0

# metadata
Expand Down Expand Up @@ -60,6 +60,11 @@ RUN apt-get update -y \
&& apt-get autoremove -y \
&& rm -rf /var/lib/apt/lists/*

# fonts for matplotlib
RUN apt-get update -y \
&& apt-get install -y --no-install-recommends libfreetype6 \
&& rm -rf /var/lib/apt/lists/*

# Copy code for command-line interface into image and install it
COPY . /root/Biosimulators_XPP
RUN pip install /root/Biosimulators_XPP \
Expand Down
10 changes: 9 additions & 1 deletion biosimulators.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@
},
"operatingSystemType": "Linux"
},
"pythonApi": {
"package": "biosimulators-xpp",
"module": "biosimulators_xpp"
},
"authors": [{
"firstName": "G. Bard",
"lastName": "Ermentrout",
Expand All @@ -36,7 +40,11 @@
}]
}],
"references": {
"identifiers": [],
"identifiers": [{
"namespace": "pypi",
"id": "biosimulators-xpp",
"url": "https://pypi.org/project/biosimulators-xpp/"
}],
"citations": [{
"title": "XPPAUT",
"authors": "Bard Ermentrout",
Expand Down
2 changes: 1 addition & 1 deletion biosimulators_xpp/_version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = '0.0.4'
__version__ = '0.0.5'
37 changes: 13 additions & 24 deletions biosimulators_xpp/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

from .utils import validate_variables, apply_model_changes, set_up_simulation, exec_xpp_simulation, get_results_of_sed_variables
from biosimulators_utils.combine.exec import exec_sedml_docs_in_archive
from biosimulators_utils.config import get_config
from biosimulators_utils.config import get_config, Config # noqa: F401
from biosimulators_utils.log.data_model import CombineArchiveLog, TaskLog # noqa: F401
from biosimulators_utils.model_lang.xpp.validation import validate_model
from biosimulators_utils.report.data_model import ReportFormat, SedDocumentResults # noqa: F401
Expand All @@ -24,11 +24,7 @@
__all__ = ['exec_sedml_docs_in_combine_archive', 'exec_sed_task']


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,
raise_exceptions=True):
def exec_sedml_docs_in_combine_archive(archive_filename, out_dir, config=None):
""" Execute the SED tasks defined in a COMBINE/OMEX archive and save the outputs
Args:
Expand All @@ -40,12 +36,7 @@ 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
config (:obj:`Config`, optional): BioSimulators common configuration
Returns:
:obj:`tuple`:
Expand All @@ -56,21 +47,17 @@ def exec_sedml_docs_in_combine_archive(archive_filename, out_dir,
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=False,
return_results=return_results,
report_formats=report_formats,
plot_formats=plot_formats,
bundle_outputs=bundle_outputs,
keep_individual_outputs=keep_individual_outputs,
raise_exceptions=raise_exceptions)
config=config)


def exec_sed_task(task, variables, log=None):
def exec_sed_task(task, variables, log=None, config=None):
""" Execute a task and save its results
Args:
task (:obj:`Task`): task
variables (:obj:`list` of :obj:`Variable`): variables that should be recorded
log (:obj:`TaskLog`, optional): log for the task
config (:obj:`Config`, optional): BioSimulators common configuration
Returns:
:obj:`tuple`:
Expand All @@ -84,9 +71,10 @@ def exec_sed_task(task, variables, log=None):
* Task requires a time course that XPP doesn't support
* Task requires an algorithm that XPP doesn't support
"""
config = get_config()
config = config or get_config()

log = log or TaskLog()
if config.LOG and not log:
log = TaskLog()

# validate task
model = task.model
Expand Down Expand Up @@ -121,7 +109,7 @@ def exec_sed_task(task, variables, log=None):
apply_model_changes(xpp_sim, model.changes)

# setup simulation
exec_kisao_id = set_up_simulation(sim, xpp_sim['simulation_method'])
exec_kisao_id = set_up_simulation(sim, xpp_sim['simulation_method'], config=config)

# run simulation
raw_results = exec_xpp_simulation(model.source, xpp_sim)
Expand All @@ -130,8 +118,9 @@ def exec_sed_task(task, variables, log=None):
variable_results = get_results_of_sed_variables(sim, raw_results, variables)

# log action
log.algorithm = exec_kisao_id
log.simulator_details = xpp_sim['simulation_method']
if config.LOG:
log.algorithm = exec_kisao_id
log.simulator_details = xpp_sim['simulation_method']

############################
# return the result of each variable and log
Expand Down
6 changes: 4 additions & 2 deletions biosimulators_xpp/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
"""

from .data_model import KISAO_ALGORITHM_MAP
from biosimulators_utils.config import Config # noqa: F401
from biosimulators_utils.report.data_model import VariableResults
from biosimulators_utils.sedml.data_model import ModelAttributeChange, UniformTimeCourseSimulation, Symbol, Variable # noqa: F401
from biosimulators_utils.simulator.utils import get_algorithm_substitution_policy
Expand Down Expand Up @@ -123,12 +124,13 @@ def apply_model_changes(xpp_model, sed_changes):
raise ValueError(msg)


def set_up_simulation(sed_sim, xpp_sim):
def set_up_simulation(sed_sim, xpp_sim, config=None):
""" Apply SED simulation settings to the configuration of a XPP simulation
Args:
sed_sim (:obj:`UniformTimeCourseSimulation`): SED simulation
xpp_sim (:obj:`dict`): XPP simulation
config (:obj:`Config`, optional): configuration
Returns:
:obj:`str`: KiSAO id of the algorithm to execute
Expand All @@ -138,7 +140,7 @@ def set_up_simulation(sed_sim, xpp_sim):
xpp_sim['dt'] = str((sed_sim.output_end_time - sed_sim.output_start_time) / sed_sim.number_of_points)
xpp_sim['njmp'] = str(1)

substitution_policy = get_algorithm_substitution_policy()
substitution_policy = get_algorithm_substitution_policy(config=config)
exec_kisao_id = get_preferred_substitute_algorithm_by_ids(
sed_sim.algorithm.kisao_id, KISAO_ALGORITHM_MAP.keys(),
substitution_policy=substitution_policy)
Expand Down
4 changes: 2 additions & 2 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
biosimulators_utils[logging] >= 0.1.105
kisao >= 2.26
biosimulators_utils[logging] >= 0.1.114
kisao >= 2.28
numpy
pandas
30 changes: 18 additions & 12 deletions tests/test_core_main.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,12 +96,15 @@ def test_exec_sedml_docs_in_combine_archive_successfully(self):
doc, archive_filename = self._build_combine_archive()

out_dir = os.path.join(self.dirname, 'out')
core.exec_sedml_docs_in_combine_archive(archive_filename, out_dir,
report_formats=[
report_data_model.ReportFormat.h5,
],
bundle_outputs=True,
keep_individual_outputs=True)

config = get_config()
config.REPORT_FORMATS = [report_data_model.ReportFormat.h5]
config.BUNDLE_OUTPUTS = True
config.KEEP_INDIVIDUAL_OUTPUTS = True

_, log = core.exec_sedml_docs_in_combine_archive(archive_filename, out_dir, config=config)
if log.exception:
raise log.exception

self._assert_combine_archive_outputs(doc, out_dir)

Expand Down Expand Up @@ -236,13 +239,16 @@ def test_exec_sedml_docs_in_combine_archive_with_all_algorithms(self):
for alg in gen_algorithms_from_specs(self.SPECIFICATIONS_FILENAME).values():
doc, archive_filename = self._build_combine_archive(algorithm=alg)
out_dir = os.path.join(self.dirname, alg.kisao_id)

config = get_config()
config.REPORT_FORMATS = [report_data_model.ReportFormat.h5]
config.BUNDLE_OUTPUTS = True
config.KEEP_INDIVIDUAL_OUTPUTS = True

try:
core.exec_sedml_docs_in_combine_archive(archive_filename, out_dir,
report_formats=[
report_data_model.ReportFormat.h5,
],
bundle_outputs=True,
keep_individual_outputs=True)
_, log = core.exec_sedml_docs_in_combine_archive(archive_filename, out_dir, config=config)
if log.exception:
raise log.exception
self._assert_combine_archive_outputs(doc, out_dir)
except:
failures.append(alg.kisao_id)
Expand Down

0 comments on commit 04040f6

Please sign in to comment.