Source code for tellurium.tests.sedml.test_data

"""
Testing of SED-ML data support, i.e., DataDescription.
"""
from __future__ import print_function, absolute_import

import os
import pytest
import matplotlib

from tellurium.tests.testdata import TESTDATA_DIR

from tellurium.sedml.data import DataDescriptionParser
from tellurium.sedml.tesedml import SEDMLTools

try:
    import libsedml
except ImportError:
    import tesedml as libsedml

from tellurium.sedml import tesedml

# ---------------------------------------------------------------------------------
BASE_DIR = os.path.join(TESTDATA_DIR, 'sedml', 'data')

SOURCE_CSV = os.path.join(BASE_DIR, "oscli.csv")
SOURCE_TSV = os.path.join(BASE_DIR, "oscli.tsv")
SOURCE_NUML = os.path.join(BASE_DIR, "./oscli.xml")
SOURCE_NUML_1D = os.path.join(BASE_DIR, "./numlData1D.xml")
SOURCE_NUML_2D = os.path.join(BASE_DIR, "./numlData2D.xml")
SOURCE_NUML_2DRC = os.path.join(BASE_DIR, "./numlData2DRC.xml")

SEDML_READ_CSV = os.path.join(BASE_DIR, "reading-oscli-csv.xml")
SEDML_READ_TSV = os.path.join(BASE_DIR, "reading-oscli-tsv.xml")
SEDML_READ_NUML = os.path.join(BASE_DIR, "reading-oscli-numl.xml")
SEDML_READ_NUML_1D = os.path.join(BASE_DIR, "reading-numlData1D.xml")
SEDML_READ_NUML_2D = os.path.join(BASE_DIR, "reading-numlData2D.xml")
SEDML_READ_NUML_2DRC = os.path.join(BASE_DIR, "reading-numlData2DRC.xml")

OMEX_PLOT_CSV = os.path.join(BASE_DIR, 'omex', "plot_csv.omex")
OMEX_PLOT_CSV_WITH_MODEL = os.path.join(BASE_DIR, 'omex', "plot_csv_with_model.omex")
OMEX_PLOT_NUML = os.path.join(BASE_DIR, 'omex', "plot_numl.omex")
OMEX_PLOT_NUML_WITH_MODEL = os.path.join(BASE_DIR, 'omex', "plot_numl_with_model.omex")

SOURCE_CSV_PARAMETERS = os.path.join(BASE_DIR, "parameters.csv")
SEDML_CSV_PARAMETERS = os.path.join(BASE_DIR, "parameter-from-data-csv.xml")
OMEX_CSV_PARAMETERS = os.path.join(BASE_DIR, 'omex', "parameter_from_data_csv.omex")

OMEX_CSV_JWS_ADLUNG2017_FIG2G = os.path.join(BASE_DIR, 'omex', "jws_adlung2017_fig2g.omex")


# ---------------------------------------------------------------------------------
MPL_BACKEND = None


[docs]def setup_module(module): """ setup any state specific to the execution of the given module.""" global MPL_BACKEND # Create a temporary directory MPL_BACKEND = matplotlib.rcParams['backend'] matplotlib.pyplot.switch_backend("Agg")
[docs]def teardown_module(module): """ teardown any state that was previously setup with a setup_module method. """ matplotlib.pyplot.switch_backend(MPL_BACKEND) matplotlib.pyplot.close('all')
[docs]def test_load_csv(): data = DataDescriptionParser._load_csv(SOURCE_CSV) assert data is not None assert data.shape[0] == 200 assert data.shape[1] == 3
[docs]def test_load_tsv(): data = DataDescriptionParser._load_tsv(SOURCE_TSV) assert data is not None assert data.shape[0] == 200 assert data.shape[1] == 3
[docs]def test_load_numl(): data = DataDescriptionParser._load_numl(SOURCE_NUML) assert data is not None
[docs]def test_load_csv_parameters(): data = DataDescriptionParser._load_csv(SOURCE_CSV_PARAMETERS) assert data is not None assert data.shape[0] == 10 assert data.shape[1] == 1
[docs]def test_load_numl_1D(): data = DataDescriptionParser._load_numl(SOURCE_NUML_1D) assert data is not None
[docs]def test_load_numl_2D(): data = DataDescriptionParser._load_numl(SOURCE_NUML_2D) assert data is not None
[docs]def test_load_numl_2DRC(): data = DataDescriptionParser._load_numl(SOURCE_NUML_2D) assert data is not None
[docs]def parseDataDescriptions(sedml_path): """ Test helper functions. Tries to parse all DataDescriptions in the SED-ML file. """ print('parseDataDescriptions:', sedml_path) # load sedml document assert os.path.exists(sedml_path) doc_sedml = libsedml.readSedMLFromFile(sedml_path) SEDMLTools.checkSEDMLDocument(doc_sedml) # parse DataDescriptions list_dd = doc_sedml.getListOfDataDescriptions() # print(list_dd) # print(len(list_dd)) assert len(list_dd) > 0 for dd in list_dd: data_sources = DataDescriptionParser.parse(dd, workingDir=BASE_DIR) assert data_sources is not None assert type(data_sources) == dict assert len(data_sources) > 0 return data_sources
[docs]def test_parse_csv(): data_sources = parseDataDescriptions(SEDML_READ_CSV) assert "dataTime" in data_sources assert "dataS1" in data_sources assert len(data_sources["dataTime"]) == 200 assert len(data_sources["dataS1"]) == 200
[docs]def test_parse_csv_parameters(): data_sources = parseDataDescriptions(SEDML_CSV_PARAMETERS) assert "dataIndex" in data_sources assert "dataMu" in data_sources assert len(data_sources["dataIndex"]) == 10 assert len(data_sources["dataMu"]) == 10
[docs]def test_parse_tsv(): data_sources = parseDataDescriptions(SEDML_READ_TSV) assert "dataTime" in data_sources assert "dataS1" in data_sources assert len(data_sources["dataTime"]) == 200 assert len(data_sources["dataS1"]) == 200
[docs]def test_parse_numl(): data_sources = parseDataDescriptions(SEDML_READ_NUML) assert "dataTime" in data_sources assert "dataS1" in data_sources assert len(data_sources["dataTime"]) == 200 assert len(data_sources["dataS1"]) == 200
[docs]def test_parse_numl_1D(): data_sources = parseDataDescriptions(SEDML_READ_NUML_1D) assert data_sources is not None assert len(data_sources) == 6 assert 'data_s_glu' in data_sources assert 'data_s_pyr' in data_sources assert 'data_s_acetate' in data_sources assert 'data_s_acetald' in data_sources assert 'data_s_EtOH' in data_sources assert 'data_x' in data_sources assert len(data_sources['data_s_glu']) == 1
[docs]def test_parse_numl_2D(): data_sources = parseDataDescriptions(SEDML_READ_NUML_2D) assert data_sources is not None assert len(data_sources) == 4 assert 'dataBL' in data_sources assert 'dataB' in data_sources assert 'dataS1' in data_sources assert 'dataTime' in data_sources assert len(data_sources['dataB']) == 6
[docs]def test_parse_numl_2DRC(): data_sources = parseDataDescriptions(SEDML_READ_NUML_2DRC) assert data_sources is not None assert len(data_sources) == 4 assert 'dataBL' in data_sources assert 'dataB' in data_sources assert 'dataS1' in data_sources assert 'dataTime' in data_sources assert len(data_sources['dataB']) == 6
[docs]def test_omex_plot_csv(tmpdir): results = tesedml.executeCombineArchive(OMEX_PLOT_CSV, workingDir=str(tmpdir)) result = list(results.values())[0] dg_dict = result['dataGenerators'] assert len(dg_dict) == 2 assert "dgDataS1" in dg_dict assert "dgDataTime" in dg_dict assert len(dg_dict["dgDataS1"]) == 200 assert len(dg_dict["dgDataTime"]) == 200
[docs]def test_omex_plot_csv_with_model(tmpdir): results = tesedml.executeCombineArchive(OMEX_PLOT_CSV_WITH_MODEL, workingDir=str(tmpdir)) result = list(results.values())[0] dg_dict = result['dataGenerators'] assert len(dg_dict) == 5 assert "dgDataS1" in dg_dict assert "dgDataTime" in dg_dict assert len(dg_dict["dgDataS1"]) == 200 assert len(dg_dict["dgDataTime"]) == 200
[docs]def test_omex_plot_numl(tmpdir): results = tesedml.executeCombineArchive(OMEX_PLOT_NUML, workingDir=str(tmpdir)) result = list(results.values())[0] dg_dict = result['dataGenerators'] assert len(dg_dict) == 2 assert "dgDataS1" in dg_dict assert "dgDataTime" in dg_dict assert len(dg_dict["dgDataS1"]) == 200 assert len(dg_dict["dgDataTime"]) == 200
[docs]def test_omex_plot_numl_with_model(tmpdir): results = tesedml.executeCombineArchive(OMEX_PLOT_NUML_WITH_MODEL, workingDir=str(tmpdir)) result = list(results.values())[0] dg_dict = result['dataGenerators'] assert len(dg_dict) == 5 assert "dgDataS1" in dg_dict assert "dgDataTime" in dg_dict assert len(dg_dict["dgDataS1"]) == 200 assert len(dg_dict["dgDataTime"]) == 200
[docs]def test_omex_jws_adlung2017_fig2gl(tmpdir): results = tesedml.executeCombineArchive(OMEX_CSV_JWS_ADLUNG2017_FIG2G, workingDir=str(tmpdir)) result = list(results.values())[0] dg_dict = result['dataGenerators'] assert len(dg_dict) == 40
[docs]@pytest.mark.skip("Not supported in L1V3, will be part of L1V4") def test_omex_csv_parameters(tmpdir): results = tesedml.executeCombineArchive(OMEX_CSV_PARAMETERS, workingDir=str(tmpdir)) result = list(results.values())[0] dgs = result['dataGenerators'] dg_dict = list(dgs.values())[0] assert len(dg_dict) == 2 assert "dgDataIndex" in dg_dict assert "dgDataMu" in dg_dict assert len(dg_dict["dgDataIndex"]) == 10 assert len(dg_dict["dgDataMu"]) == 10