diff --git a/petabtests/cases/v1.0.0/sbml/0001/0001.py b/petabtests/cases/v1.0.0/sbml/0001/0001.py index 0b6b582..fca2891 100644 --- a/petabtests/cases/v1.0.0/sbml/0001/0001.py +++ b/petabtests/cases/v1.0.0/sbml/0001/0001.py @@ -3,7 +3,7 @@ import pandas as pd from petab.v1.C import * -from petabtests import DEFAULT_SBML_FILE, PetabTestCase, analytical_a +from petabtests import DEFAULT_SBML_FILE, PetabV1TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -63,7 +63,7 @@ ] -case = PetabTestCase( +case = PetabV1TestCase( id=1, brief="Simulation. Nothing special.", description=DESCRIPTION, diff --git a/petabtests/cases/v1.0.0/sbml/0002/0002.py b/petabtests/cases/v1.0.0/sbml/0002/0002.py index 6e8e57d..16343a8 100644 --- a/petabtests/cases/v1.0.0/sbml/0002/0002.py +++ b/petabtests/cases/v1.0.0/sbml/0002/0002.py @@ -4,7 +4,7 @@ import pandas as pd from petab.v1.C import * -from petabtests import DEFAULT_SBML_FILE, PetabTestCase, analytical_a +from petabtests import DEFAULT_SBML_FILE, PetabV1TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -71,7 +71,7 @@ *[analytical_a(t, 0.9, 1, 0.8, 0.6) for t in [0, 10]], ] -case = PetabTestCase( +case = PetabV1TestCase( id=2, brief="Simulation. Two conditions. Numeric parameter override.", description=DESCRIPTION, diff --git a/petabtests/cases/v1.0.0/sbml/0003/0003.py b/petabtests/cases/v1.0.0/sbml/0003/0003.py index 13f4e58..3f5d373 100644 --- a/petabtests/cases/v1.0.0/sbml/0003/0003.py +++ b/petabtests/cases/v1.0.0/sbml/0003/0003.py @@ -3,7 +3,7 @@ import pandas as pd from petab.v1.C import * -from petabtests import DEFAULT_SBML_FILE, PetabTestCase, analytical_a +from petabtests import DEFAULT_SBML_FILE, PetabV1TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -71,7 +71,7 @@ 0.5 * analytical_a(t, 1, 0, 0.8, 0.6) + 2 for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV1TestCase( id=3, brief="Simulation. Numeric observable parameter overrides in measurement " "table.", diff --git a/petabtests/cases/v1.0.0/sbml/0004/0004.py b/petabtests/cases/v1.0.0/sbml/0004/0004.py index e0202cd..2bc8015 100644 --- a/petabtests/cases/v1.0.0/sbml/0004/0004.py +++ b/petabtests/cases/v1.0.0/sbml/0004/0004.py @@ -3,7 +3,7 @@ import pandas as pd from petab.v1.C import * -from petabtests import DEFAULT_SBML_FILE, PetabTestCase, analytical_a +from petabtests import DEFAULT_SBML_FILE, PetabV1TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -68,7 +68,7 @@ 0.5 * analytical_a(t, 1, 0, 0.8, 0.6) + 2 for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV1TestCase( id=4, brief="Simulation. Observable parameters only defined in parameter table.", description=DESCRIPTION, diff --git a/petabtests/cases/v1.0.0/sbml/0005/0005.py b/petabtests/cases/v1.0.0/sbml/0005/0005.py index 08164ec..c6a2ed5 100644 --- a/petabtests/cases/v1.0.0/sbml/0005/0005.py +++ b/petabtests/cases/v1.0.0/sbml/0005/0005.py @@ -4,7 +4,7 @@ import pandas as pd from petab.v1.C import * -from petabtests import PetabTestCase, analytical_a, antimony_to_sbml_str +from petabtests import PetabV1TestCase, analytical_a, antimony_to_sbml_str DESCRIPTION = cleandoc(""" ## Objective @@ -88,7 +88,7 @@ *(analytical_a(10, 1, 0, 0.8, 0.6) + offset for offset in [2, 3]), ] -case = PetabTestCase( +case = PetabV1TestCase( id=5, brief="Simulation. Condition-specific parameters only defined in " "parameter table.", diff --git a/petabtests/cases/v1.0.0/sbml/0005/_model.xml b/petabtests/cases/v1.0.0/sbml/0005/_model.xml index 0c56134..a6d4fba 100644 --- a/petabtests/cases/v1.0.0/sbml/0005/_model.xml +++ b/petabtests/cases/v1.0.0/sbml/0005/_model.xml @@ -1,5 +1,5 @@ - + diff --git a/petabtests/cases/v1.0.0/sbml/0006/0006.py b/petabtests/cases/v1.0.0/sbml/0006/0006.py index 1cae88b..7294a41 100644 --- a/petabtests/cases/v1.0.0/sbml/0006/0006.py +++ b/petabtests/cases/v1.0.0/sbml/0006/0006.py @@ -3,7 +3,7 @@ import pandas as pd from petab.v1.C import * -from petabtests import DEFAULT_SBML_FILE, PetabTestCase, analytical_a +from petabtests import DEFAULT_SBML_FILE, PetabV1TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -67,7 +67,7 @@ 15 * analytical_a(10, 1, 0, 0.8, 0.6), ] -case = PetabTestCase( +case = PetabV1TestCase( id=6, brief="Simulation. Time-point specific numeric observable parameter " "overrides.", diff --git a/petabtests/cases/v1.0.0/sbml/0007/0007.py b/petabtests/cases/v1.0.0/sbml/0007/0007.py index d052c14..1eac0e9 100644 --- a/petabtests/cases/v1.0.0/sbml/0007/0007.py +++ b/petabtests/cases/v1.0.0/sbml/0007/0007.py @@ -5,7 +5,7 @@ from petabtests import ( DEFAULT_SBML_FILE, - PetabTestCase, + PetabV1TestCase, analytical_a, analytical_b, ) @@ -72,7 +72,7 @@ analytical_b(10, 1, 0, 0.8, 0.6), ] -case = PetabTestCase( +case = PetabV1TestCase( id=7, brief="Simulation. Observable transformation log10.", description=DESCRIPTION, diff --git a/petabtests/cases/v1.0.0/sbml/0008/0008.py b/petabtests/cases/v1.0.0/sbml/0008/0008.py index bafdb4c..73bb085 100644 --- a/petabtests/cases/v1.0.0/sbml/0008/0008.py +++ b/petabtests/cases/v1.0.0/sbml/0008/0008.py @@ -3,7 +3,7 @@ import pandas as pd from petab.v1.C import * -from petabtests import DEFAULT_SBML_FILE, PetabTestCase, analytical_a +from petabtests import DEFAULT_SBML_FILE, PetabV1TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -64,7 +64,7 @@ analytical_a(t, 1, 0, 0.8, 0.6) for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV1TestCase( id=8, brief="Simulation. Replicate measurements.", description=DESCRIPTION, diff --git a/petabtests/cases/v1.0.0/sbml/0009/0009.py b/petabtests/cases/v1.0.0/sbml/0009/0009.py index 7a03f5c..73efbc9 100644 --- a/petabtests/cases/v1.0.0/sbml/0009/0009.py +++ b/petabtests/cases/v1.0.0/sbml/0009/0009.py @@ -5,7 +5,7 @@ from petabtests import ( DEFAULT_SBML_FILE, - PetabTestCase, + PetabV1TestCase, analytical_a, analytical_b, ) @@ -76,7 +76,7 @@ for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV1TestCase( id=9, brief="Simulation. Preequilibration.", description=DESCRIPTION, diff --git a/petabtests/cases/v1.0.0/sbml/0010/0010.py b/petabtests/cases/v1.0.0/sbml/0010/0010.py index 1d6e305..142d360 100644 --- a/petabtests/cases/v1.0.0/sbml/0010/0010.py +++ b/petabtests/cases/v1.0.0/sbml/0010/0010.py @@ -3,7 +3,7 @@ import pandas as pd from petab.v1.C import * -from petabtests import DEFAULT_SBML_FILE, PetabTestCase, analytical_a +from petabtests import DEFAULT_SBML_FILE, PetabV1TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -72,7 +72,7 @@ analytical_a(t, steady_state_a, 1, 0.8, 0.6) for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV1TestCase( id=10, brief="Simulation. Preequilibration. One species reinitialized, one not. " "InitialAssignment to species overridden.", diff --git a/petabtests/cases/v1.0.0/sbml/0011/0011.py b/petabtests/cases/v1.0.0/sbml/0011/0011.py index 1613dd4..e87037d 100644 --- a/petabtests/cases/v1.0.0/sbml/0011/0011.py +++ b/petabtests/cases/v1.0.0/sbml/0011/0011.py @@ -3,7 +3,7 @@ import pandas as pd from petab.v1.C import * from pathlib import Path -from petabtests import PetabTestCase, analytical_a, antimony_to_sbml_str +from petabtests import PetabV1TestCase, analytical_a, antimony_to_sbml_str DESCRIPTION = cleandoc(""" ## Objective @@ -79,7 +79,7 @@ analytical_a(t, 1, 2, 0.8, 0.6) for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV1TestCase( id=11, brief="Simulation. InitialAssignment to species overridden.", description=DESCRIPTION, diff --git a/petabtests/cases/v1.0.0/sbml/0011/_model.xml b/petabtests/cases/v1.0.0/sbml/0011/_model.xml index 3da37e6..20d64bd 100644 --- a/petabtests/cases/v1.0.0/sbml/0011/_model.xml +++ b/petabtests/cases/v1.0.0/sbml/0011/_model.xml @@ -1,5 +1,5 @@ - + diff --git a/petabtests/cases/v1.0.0/sbml/0012/0012.py b/petabtests/cases/v1.0.0/sbml/0012/0012.py index 9c14959..0f8e7d2 100644 --- a/petabtests/cases/v1.0.0/sbml/0012/0012.py +++ b/petabtests/cases/v1.0.0/sbml/0012/0012.py @@ -3,7 +3,7 @@ import pandas as pd from petab.v1.C import * -from petabtests import DEFAULT_SBML_FILE, PetabTestCase, analytical_a +from petabtests import DEFAULT_SBML_FILE, PetabV1TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -64,7 +64,7 @@ analytical_a(t, 1, 1, 0.8, 0.6) for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV1TestCase( id=12, brief="Simulation. Initial compartment size in condition table.", description=DESCRIPTION, diff --git a/petabtests/cases/v1.0.0/sbml/0013/0013.py b/petabtests/cases/v1.0.0/sbml/0013/0013.py index 3147574..1d5bfaf 100644 --- a/petabtests/cases/v1.0.0/sbml/0013/0013.py +++ b/petabtests/cases/v1.0.0/sbml/0013/0013.py @@ -3,7 +3,7 @@ import pandas as pd from petab.v1.C import * -from petabtests import PetabTestCase, analytical_a +from petabtests import PetabV1TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -64,7 +64,7 @@ analytical_a(t, 1, 7, 0.8, 0.6) for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV1TestCase( id=13, brief="Simulation. Species with InitialAssignment overridden by " "parameter.", diff --git a/petabtests/cases/v1.0.0/sbml/0014/0014.py b/petabtests/cases/v1.0.0/sbml/0014/0014.py index 58ea315..f0e25d8 100644 --- a/petabtests/cases/v1.0.0/sbml/0014/0014.py +++ b/petabtests/cases/v1.0.0/sbml/0014/0014.py @@ -3,7 +3,7 @@ import pandas as pd from petab.v1.C import * -from petabtests import DEFAULT_SBML_FILE, PetabTestCase, analytical_a +from petabtests import DEFAULT_SBML_FILE, PetabV1TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -62,7 +62,7 @@ analytical_a(t, 1, 0, 0.8, 0.6) for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV1TestCase( id=14, brief="Simulation. Multiple numeric noise parameter overrides.", description=DESCRIPTION, diff --git a/petabtests/cases/v1.0.0/sbml/0015/0015.py b/petabtests/cases/v1.0.0/sbml/0015/0015.py index e06d169..08d7e18 100644 --- a/petabtests/cases/v1.0.0/sbml/0015/0015.py +++ b/petabtests/cases/v1.0.0/sbml/0015/0015.py @@ -3,7 +3,7 @@ import pandas as pd from petab.v1.C import * -from petabtests import DEFAULT_SBML_FILE, PetabTestCase, analytical_a +from petabtests import DEFAULT_SBML_FILE, PetabV1TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -62,7 +62,7 @@ analytical_a(t, 1, 0, 0.8, 0.6) for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV1TestCase( id=15, brief="Simulation. Single parametric noise parameter override.", description=DESCRIPTION, diff --git a/petabtests/cases/v1.0.0/sbml/0016/0016.py b/petabtests/cases/v1.0.0/sbml/0016/0016.py index b386406..72cb430 100644 --- a/petabtests/cases/v1.0.0/sbml/0016/0016.py +++ b/petabtests/cases/v1.0.0/sbml/0016/0016.py @@ -5,7 +5,7 @@ from petabtests import ( DEFAULT_SBML_FILE, - PetabTestCase, + PetabV1TestCase, analytical_a, analytical_b, ) @@ -71,7 +71,7 @@ analytical_b(10, 1, 0, 0.8, 0.6), ] -case = PetabTestCase( +case = PetabV1TestCase( id=16, brief="Simulation. Observable transformation log.", description=DESCRIPTION, diff --git a/petabtests/cases/v1.0.0/sbml/0017/0017.py b/petabtests/cases/v1.0.0/sbml/0017/0017.py index b82773b..b223d9b 100644 --- a/petabtests/cases/v1.0.0/sbml/0017/0017.py +++ b/petabtests/cases/v1.0.0/sbml/0017/0017.py @@ -5,7 +5,7 @@ from petabtests import ( DEFAULT_SBML_FILE, - PetabTestCase, + PetabV1TestCase, analytical_a, analytical_b, ) @@ -83,7 +83,7 @@ analytical_a(t, 1, steady_state_b, 0.8, 0.6) for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV1TestCase( id=17, brief="Simulation. Preequilibration. One species reinitialized, one not " "(NaN in condition table). InitialAssignment to species overridden.", diff --git a/petabtests/cases/v1.0.0/sbml/0018/0018.py b/petabtests/cases/v1.0.0/sbml/0018/0018.py index 853a30f..e3083ae 100644 --- a/petabtests/cases/v1.0.0/sbml/0018/0018.py +++ b/petabtests/cases/v1.0.0/sbml/0018/0018.py @@ -4,7 +4,7 @@ from petab.v1.C import * from pathlib import Path from petabtests import ( - PetabTestCase, + PetabV1TestCase, analytical_a, analytical_b, antimony_to_sbml_str, @@ -106,7 +106,7 @@ ][3:] -case = PetabTestCase( +case = PetabV1TestCase( id=18, brief="Simulation. Preequilibration and RateRules. One state " "reinitialized, one not (NaN in condition table). InitialAssignment " diff --git a/petabtests/cases/v1.0.0/sbml/0018/_model.xml b/petabtests/cases/v1.0.0/sbml/0018/_model.xml index c3df580..30ffc31 100644 --- a/petabtests/cases/v1.0.0/sbml/0018/_model.xml +++ b/petabtests/cases/v1.0.0/sbml/0018/_model.xml @@ -1,5 +1,5 @@ - + diff --git a/petabtests/cases/v1.0.0/sbml/0018/model.xml b/petabtests/cases/v1.0.0/sbml/0018/model.xml index c3df580..30ffc31 100644 --- a/petabtests/cases/v1.0.0/sbml/0018/model.xml +++ b/petabtests/cases/v1.0.0/sbml/0018/model.xml @@ -1,5 +1,5 @@ - + diff --git a/petabtests/cases/v1.0.0/sbml/0019/0019.py b/petabtests/cases/v1.0.0/sbml/0019/0019.py index 5b7fba1..fa476af 100644 --- a/petabtests/cases/v1.0.0/sbml/0019/0019.py +++ b/petabtests/cases/v1.0.0/sbml/0019/0019.py @@ -3,7 +3,7 @@ import pandas as pd from petab.v1.C import * -from petabtests import PetabTestCase, analytical_a, antimony_to_sbml_str +from petabtests import PetabV1TestCase, analytical_a, antimony_to_sbml_str from pathlib import Path DESCRIPTION = cleandoc(""" @@ -84,7 +84,7 @@ analytical_a(t, 2, 3, 0.8, 0.6) for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV1TestCase( id=19, brief="Simulation. Estimated initial value via conditions table.", description=DESCRIPTION, diff --git a/petabtests/cases/v1.0.0/sbml/0019/_model.xml b/petabtests/cases/v1.0.0/sbml/0019/_model.xml index 3da37e6..20d64bd 100644 --- a/petabtests/cases/v1.0.0/sbml/0019/_model.xml +++ b/petabtests/cases/v1.0.0/sbml/0019/_model.xml @@ -1,5 +1,5 @@ - + diff --git a/petabtests/cases/v2.0.0/pysb/0001/0001.py b/petabtests/cases/v2.0.0/pysb/0001/0001.py index e7024ea..caef74b 100644 --- a/petabtests/cases/v2.0.0/pysb/0001/0001.py +++ b/petabtests/cases/v2.0.0/pysb/0001/0001.py @@ -1,9 +1,8 @@ from inspect import cleandoc -import pandas as pd -from petab.v1.C import * - -from petabtests import DEFAULT_PYSB_FILE, PetabTestCase, analytical_a +from petabtests import DEFAULT_PYSB_FILE, PetabV2TestCase, analytical_a +from petab.v2 import Problem +from petab.v2.C import * DESCRIPTION = cleandoc(""" ## Objective @@ -19,43 +18,21 @@ # problem -------------------------------------------------------------------- -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["c0"], - } -).set_index([CONDITION_ID]) +problem = Problem() -measurement_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a", "obs_a"], - SIMULATION_CONDITION_ID: ["c0", "c0"], - TIME: [0, 10], - MEASUREMENT: [0.7, 0.1], - } -) +problem.add_observable("obs_a", "A", noise_formula=0.5) -observable_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a"], - OBSERVABLE_FORMULA: ["A"], - NOISE_FORMULA: [0.5], - } -).set_index([OBSERVABLE_ID]) +problem.add_measurement("obs_a", "", time=0, measurement=0.7) +problem.add_measurement("obs_a", "", time=10, measurement=0.1) -parameter_df = pd.DataFrame( - data={ - PARAMETER_ID: ["a0", "b0", "k1", "k2"], - PARAMETER_SCALE: [LIN] * 4, - LOWER_BOUND: [0] * 4, - UPPER_BOUND: [10] * 4, - NOMINAL_VALUE: [1, 0, 0.8, 0.6], - ESTIMATE: [1] * 4, - } -).set_index(PARAMETER_ID) +problem.add_parameter("a0", lb=0, ub=10, nominal_value=1) +problem.add_parameter("b0", lb=0, ub=10, nominal_value=0) +problem.add_parameter("k1", lb=0, ub=10, nominal_value=0.8) +problem.add_parameter("k2", lb=0, ub=10, nominal_value=0.6) # solutions ------------------------------------------------------------------ -simulation_df = measurement_df.copy(deep=True).rename( +simulation_df = problem.measurement_df.copy(deep=True).rename( columns={MEASUREMENT: SIMULATION} ) simulation_df[SIMULATION] = [ @@ -63,14 +40,14 @@ ] -case = PetabTestCase( +case = PetabV2TestCase( id=1, brief="Simulation. Nothing special.", description=DESCRIPTION, model=DEFAULT_PYSB_FILE, - condition_dfs=[condition_df], - observable_dfs=[observable_df], - measurement_dfs=[measurement_df], + condition_dfs=[problem.condition_df], + observable_dfs=[problem.observable_df], + measurement_dfs=[problem.measurement_df], simulation_dfs=[simulation_df], - parameter_df=parameter_df, + parameter_df=problem.parameter_df, ) diff --git a/petabtests/cases/v2.0.0/pysb/0001/_0001.yaml b/petabtests/cases/v2.0.0/pysb/0001/_0001.yaml index 493b4f8..df06036 100644 --- a/petabtests/cases/v2.0.0/pysb/0001/_0001.yaml +++ b/petabtests/cases/v2.0.0/pysb/0001/_0001.yaml @@ -3,6 +3,7 @@ parameter_file: _parameters.tsv problems: - condition_files: - _conditions.tsv + experiment_files: [] measurement_files: - _measurements.tsv model_files: diff --git a/petabtests/cases/v2.0.0/pysb/0001/_conditions.tsv b/petabtests/cases/v2.0.0/pysb/0001/_conditions.tsv index f15e327..730c58d 100644 --- a/petabtests/cases/v2.0.0/pysb/0001/_conditions.tsv +++ b/petabtests/cases/v2.0.0/pysb/0001/_conditions.tsv @@ -1,2 +1 @@ -conditionId -c0 +conditionId targetId targetValue diff --git a/petabtests/cases/v2.0.0/pysb/0001/_measurements.tsv b/petabtests/cases/v2.0.0/pysb/0001/_measurements.tsv index a497632..e190344 100644 --- a/petabtests/cases/v2.0.0/pysb/0001/_measurements.tsv +++ b/petabtests/cases/v2.0.0/pysb/0001/_measurements.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time measurement -obs_a c0 0 0.7 -obs_a c0 10 0.1 +observableId experimentId time measurement observableParameters noiseParameters +obs_a 0.0 0.7 +obs_a 10.0 0.1 diff --git a/petabtests/cases/v2.0.0/pysb/0001/_observables.tsv b/petabtests/cases/v2.0.0/pysb/0001/_observables.tsv index 0b78dd1..bc320b2 100644 --- a/petabtests/cases/v2.0.0/pysb/0001/_observables.tsv +++ b/petabtests/cases/v2.0.0/pysb/0001/_observables.tsv @@ -1,2 +1,2 @@ -observableId observableFormula noiseFormula -obs_a A 0.5 +observableId observableName observableFormula noiseFormula noiseDistribution +obs_a A 0.500000000000000 normal diff --git a/petabtests/cases/v2.0.0/pysb/0001/_parameters.tsv b/petabtests/cases/v2.0.0/pysb/0001/_parameters.tsv index 8c1e5cb..368a25c 100644 --- a/petabtests/cases/v2.0.0/pysb/0001/_parameters.tsv +++ b/petabtests/cases/v2.0.0/pysb/0001/_parameters.tsv @@ -1,5 +1,5 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -a0 lin 0 10 1.0 1 -b0 lin 0 10 0.0 1 -k1 lin 0 10 0.8 1 -k2 lin 0 10 0.6 1 +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +a0 0.0 10.0 1.0 true +b0 0.0 10.0 0.0 true +k1 0.0 10.0 0.8 true +k2 0.0 10.0 0.6 true diff --git a/petabtests/cases/v2.0.0/pysb/0001/_simulations.tsv b/petabtests/cases/v2.0.0/pysb/0001/_simulations.tsv index c1339e4..f9fa417 100644 --- a/petabtests/cases/v2.0.0/pysb/0001/_simulations.tsv +++ b/petabtests/cases/v2.0.0/pysb/0001/_simulations.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time simulation -obs_a c0 0 1.0 -obs_a c0 10 0.42857190373069665 +observableId experimentId time simulation observableParameters noiseParameters +obs_a 0.0 1.0 +obs_a 10.0 0.42857190373069665 diff --git a/petabtests/cases/v2.0.0/pysb/0002/0002.py b/petabtests/cases/v2.0.0/pysb/0002/0002.py index a273e9d..e1ac71a 100644 --- a/petabtests/cases/v2.0.0/pysb/0002/0002.py +++ b/petabtests/cases/v2.0.0/pysb/0002/0002.py @@ -1,10 +1,9 @@ from inspect import cleandoc -from math import nan -import pandas as pd -from petab.v1.C import * +from petab.v2 import Problem +from petab.v2.C import * -from petabtests import DEFAULT_PYSB_FILE, PetabTestCase, analytical_a +from petabtests import DEFAULT_PYSB_FILE, PetabV2TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -24,61 +23,42 @@ """) # problem -------------------------------------------------------------------- +problem = Problem() -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["c0", "c1"], - "a0": [0.8, 0.9], - "b0": [nan, nan], - } -).set_index([CONDITION_ID]) - -measurement_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a"] * 4, - SIMULATION_CONDITION_ID: ["c0", "c0", "c1", "c1"], - TIME: [0, 10, 0, 10], - MEASUREMENT: [0.7, 0.1, 0.8, 0.2], - } -) +problem.add_condition("c0", a0=0.8) +problem.add_condition("c1", a0=0.9) + +problem.add_experiment("e0", 0, "c0") +problem.add_experiment("e1", 0, "c1") + +problem.add_observable("obs_a", "A", noise_formula=1) -observable_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a"], - OBSERVABLE_FORMULA: ["A"], - NOISE_FORMULA: [1], - } -).set_index([OBSERVABLE_ID]) - -parameter_df = pd.DataFrame( - data={ - PARAMETER_ID: ["k1", "k2"], - PARAMETER_SCALE: [LIN] * 2, - LOWER_BOUND: [0] * 2, - UPPER_BOUND: [10] * 2, - NOMINAL_VALUE: [0.8, 0.6], - ESTIMATE: [1] * 2, - } -).set_index(PARAMETER_ID) +problem.add_measurement("obs_a", "e0", time=0, measurement=0.7) +problem.add_measurement("obs_a", "e0", time=10, measurement=0.1) +problem.add_measurement("obs_a", "e1", time=0, measurement=0.8) +problem.add_measurement("obs_a", "e1", time=10, measurement=0.2) + +problem.add_parameter("k1", lb=0, ub=10, nominal_value=0.8, estimate=True) +problem.add_parameter("k2", lb=0, ub=10, nominal_value=0.6, estimate=True) # solutions ------------------------------------------------------------------ -simulation_df = measurement_df.copy(deep=True).rename( +simulation_df = problem.measurement_df.copy(deep=True).rename( columns={MEASUREMENT: SIMULATION} ) simulation_df[SIMULATION] = [ *[analytical_a(t, 0.8, 1, 0.8, 0.6) for t in [0, 10]], *[analytical_a(t, 0.9, 1, 0.8, 0.6) for t in [0, 10]], ] - -case = PetabTestCase( +case = PetabV2TestCase( id=2, brief="Simulation. Two conditions. Numeric parameter override.", description=DESCRIPTION, model=DEFAULT_PYSB_FILE, - condition_dfs=[condition_df], - observable_dfs=[observable_df], - measurement_dfs=[measurement_df], + condition_dfs=[problem.condition_df], + observable_dfs=[problem.observable_df], + measurement_dfs=[problem.measurement_df], simulation_dfs=[simulation_df], - parameter_df=parameter_df, + experiment_dfs=[problem.experiment_df], + parameter_df=problem.parameter_df, ) diff --git a/petabtests/cases/v2.0.0/pysb/0002/_0002.yaml b/petabtests/cases/v2.0.0/pysb/0002/_0002.yaml index 493b4f8..4e0d35b 100644 --- a/petabtests/cases/v2.0.0/pysb/0002/_0002.yaml +++ b/petabtests/cases/v2.0.0/pysb/0002/_0002.yaml @@ -3,6 +3,8 @@ parameter_file: _parameters.tsv problems: - condition_files: - _conditions.tsv + experiment_files: + - _experiments.tsv measurement_files: - _measurements.tsv model_files: diff --git a/petabtests/cases/v2.0.0/pysb/0002/_conditions.tsv b/petabtests/cases/v2.0.0/pysb/0002/_conditions.tsv index 6524332..87fe9a2 100644 --- a/petabtests/cases/v2.0.0/pysb/0002/_conditions.tsv +++ b/petabtests/cases/v2.0.0/pysb/0002/_conditions.tsv @@ -1,3 +1,3 @@ -conditionId a0 b0 -c0 0.8 -c1 0.9 +conditionId targetId targetValue +c0 a0 0.8 +c1 a0 0.9 diff --git a/petabtests/cases/v2.0.0/pysb/0002/_experiments.tsv b/petabtests/cases/v2.0.0/pysb/0002/_experiments.tsv new file mode 100644 index 0000000..1269b14 --- /dev/null +++ b/petabtests/cases/v2.0.0/pysb/0002/_experiments.tsv @@ -0,0 +1,3 @@ +experimentId time conditionId +e0 0.0 c0 +e1 0.0 c1 diff --git a/petabtests/cases/v2.0.0/pysb/0002/_measurements.tsv b/petabtests/cases/v2.0.0/pysb/0002/_measurements.tsv index 9dbc71c..7cac0a3 100644 --- a/petabtests/cases/v2.0.0/pysb/0002/_measurements.tsv +++ b/petabtests/cases/v2.0.0/pysb/0002/_measurements.tsv @@ -1,5 +1,5 @@ -observableId simulationConditionId time measurement -obs_a c0 0 0.7 -obs_a c0 10 0.1 -obs_a c1 0 0.8 -obs_a c1 10 0.2 +observableId experimentId time measurement observableParameters noiseParameters +obs_a e0 0.0 0.7 +obs_a e0 10.0 0.1 +obs_a e1 0.0 0.8 +obs_a e1 10.0 0.2 diff --git a/petabtests/cases/v2.0.0/pysb/0002/_observables.tsv b/petabtests/cases/v2.0.0/pysb/0002/_observables.tsv index 726b3b0..2c48100 100644 --- a/petabtests/cases/v2.0.0/pysb/0002/_observables.tsv +++ b/petabtests/cases/v2.0.0/pysb/0002/_observables.tsv @@ -1,2 +1,2 @@ -observableId observableFormula noiseFormula -obs_a A 1 +observableId observableName observableFormula noiseFormula noiseDistribution +obs_a A 1 normal diff --git a/petabtests/cases/v2.0.0/pysb/0002/_parameters.tsv b/petabtests/cases/v2.0.0/pysb/0002/_parameters.tsv index bf45aa8..852192d 100644 --- a/petabtests/cases/v2.0.0/pysb/0002/_parameters.tsv +++ b/petabtests/cases/v2.0.0/pysb/0002/_parameters.tsv @@ -1,3 +1,3 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -k1 lin 0 10 0.8 1 -k2 lin 0 10 0.6 1 +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +k1 0.0 10.0 0.8 true +k2 0.0 10.0 0.6 true diff --git a/petabtests/cases/v2.0.0/pysb/0002/_simulations.tsv b/petabtests/cases/v2.0.0/pysb/0002/_simulations.tsv index f9dbb59..b6a554d 100644 --- a/petabtests/cases/v2.0.0/pysb/0002/_simulations.tsv +++ b/petabtests/cases/v2.0.0/pysb/0002/_simulations.tsv @@ -1,5 +1,5 @@ -observableId simulationConditionId time simulation -obs_a c0 0 0.8 -obs_a c0 10 0.771428595186535 -obs_a c1 0 0.9 -obs_a c1 10 0.8142857855596045 +observableId experimentId time simulation observableParameters noiseParameters +obs_a e0 0.0 0.8 +obs_a e0 10.0 0.771428595186535 +obs_a e1 0.0 0.9 +obs_a e1 10.0 0.8142857855596045 diff --git a/petabtests/cases/v2.0.0/pysb/0003/0003.py b/petabtests/cases/v2.0.0/pysb/0003/0003.py index d0fde50..2f9df10 100644 --- a/petabtests/cases/v2.0.0/pysb/0003/0003.py +++ b/petabtests/cases/v2.0.0/pysb/0003/0003.py @@ -1,9 +1,9 @@ from inspect import cleandoc -import pandas as pd -from petab.v1.C import * +from petab.v2 import Problem +from petab.v2.C import * -from petabtests import DEFAULT_PYSB_FILE, PetabTestCase, analytical_a +from petabtests import DEFAULT_PYSB_FILE, PetabV2TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -24,62 +24,44 @@ """) # problem -------------------------------------------------------------------- +problem = Problem() -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["c0"], - } -).set_index([CONDITION_ID]) - -measurement_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a", "obs_a"], - SIMULATION_CONDITION_ID: ["c0", "c0"], - TIME: [0, 10], - MEASUREMENT: [0.7, 0.1], - OBSERVABLE_PARAMETERS: ["0.5;2", "0.5;2"], - } +problem.add_observable( + "obs_a", + "observableParameter1_obs_a * A + observableParameter2_obs_a", + noise_formula=0.5, ) -observable_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a"], - OBSERVABLE_FORMULA: [ - "observableParameter1_obs_a * A + " "observableParameter2_obs_a" - ], - NOISE_FORMULA: [0.5], - } -).set_index([OBSERVABLE_ID]) +problem.add_measurement( + "obs_a", "", time=0, measurement=0.7, observable_parameters=(0.5, 2) +) +problem.add_measurement( + "obs_a", "", time=10, measurement=0.1, observable_parameters=(0.5, 2) +) -parameter_df = pd.DataFrame( - data={ - PARAMETER_ID: ["a0", "b0", "k1", "k2"], - PARAMETER_SCALE: [LIN] * 4, - LOWER_BOUND: [0] * 4, - UPPER_BOUND: [10] * 4, - NOMINAL_VALUE: [1, 0, 0.8, 0.6], - ESTIMATE: [1] * 4, - } -).set_index(PARAMETER_ID) +problem.add_parameter("a0", lb=0, ub=10, nominal_value=1) +problem.add_parameter("b0", lb=0, ub=10, nominal_value=0) +problem.add_parameter("k1", lb=0, ub=10, nominal_value=0.8) +problem.add_parameter("k2", lb=0, ub=10, nominal_value=0.6) # solutions ------------------------------------------------------------------ -simulation_df = measurement_df.copy(deep=True).rename( +simulation_df = problem.measurement_df.copy(deep=True).rename( columns={MEASUREMENT: SIMULATION} ) simulation_df[SIMULATION] = [ 0.5 * analytical_a(t, 1, 0, 0.8, 0.6) + 2 for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV2TestCase( id=3, brief="Simulation. Numeric observable parameter overrides in measurement " "table.", description=DESCRIPTION, model=DEFAULT_PYSB_FILE, - condition_dfs=[condition_df], - observable_dfs=[observable_df], - measurement_dfs=[measurement_df], + condition_dfs=[problem.condition_df], + observable_dfs=[problem.observable_df], + measurement_dfs=[problem.measurement_df], simulation_dfs=[simulation_df], - parameter_df=parameter_df, + parameter_df=problem.parameter_df, ) diff --git a/petabtests/cases/v2.0.0/pysb/0003/_0003.yaml b/petabtests/cases/v2.0.0/pysb/0003/_0003.yaml index 493b4f8..df06036 100644 --- a/petabtests/cases/v2.0.0/pysb/0003/_0003.yaml +++ b/petabtests/cases/v2.0.0/pysb/0003/_0003.yaml @@ -3,6 +3,7 @@ parameter_file: _parameters.tsv problems: - condition_files: - _conditions.tsv + experiment_files: [] measurement_files: - _measurements.tsv model_files: diff --git a/petabtests/cases/v2.0.0/pysb/0003/_conditions.tsv b/petabtests/cases/v2.0.0/pysb/0003/_conditions.tsv index f15e327..730c58d 100644 --- a/petabtests/cases/v2.0.0/pysb/0003/_conditions.tsv +++ b/petabtests/cases/v2.0.0/pysb/0003/_conditions.tsv @@ -1,2 +1 @@ -conditionId -c0 +conditionId targetId targetValue diff --git a/petabtests/cases/v2.0.0/pysb/0003/_measurements.tsv b/petabtests/cases/v2.0.0/pysb/0003/_measurements.tsv index 2078ec7..51256ea 100644 --- a/petabtests/cases/v2.0.0/pysb/0003/_measurements.tsv +++ b/petabtests/cases/v2.0.0/pysb/0003/_measurements.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time measurement observableParameters -obs_a c0 0 0.7 0.5;2 -obs_a c0 10 0.1 0.5;2 +observableId experimentId time measurement observableParameters noiseParameters +obs_a 0.0 0.7 0.500000000000000;2 +obs_a 10.0 0.1 0.500000000000000;2 diff --git a/petabtests/cases/v2.0.0/pysb/0003/_observables.tsv b/petabtests/cases/v2.0.0/pysb/0003/_observables.tsv index dc2a127..2b4ecf7 100644 --- a/petabtests/cases/v2.0.0/pysb/0003/_observables.tsv +++ b/petabtests/cases/v2.0.0/pysb/0003/_observables.tsv @@ -1,2 +1,2 @@ -observableId observableFormula noiseFormula -obs_a observableParameter1_obs_a * A + observableParameter2_obs_a 0.5 +observableId observableName observableFormula noiseFormula noiseDistribution +obs_a A*observableParameter1_obs_a + observableParameter2_obs_a 0.500000000000000 normal diff --git a/petabtests/cases/v2.0.0/pysb/0003/_parameters.tsv b/petabtests/cases/v2.0.0/pysb/0003/_parameters.tsv index 8c1e5cb..368a25c 100644 --- a/petabtests/cases/v2.0.0/pysb/0003/_parameters.tsv +++ b/petabtests/cases/v2.0.0/pysb/0003/_parameters.tsv @@ -1,5 +1,5 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -a0 lin 0 10 1.0 1 -b0 lin 0 10 0.0 1 -k1 lin 0 10 0.8 1 -k2 lin 0 10 0.6 1 +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +a0 0.0 10.0 1.0 true +b0 0.0 10.0 0.0 true +k1 0.0 10.0 0.8 true +k2 0.0 10.0 0.6 true diff --git a/petabtests/cases/v2.0.0/pysb/0003/_simulations.tsv b/petabtests/cases/v2.0.0/pysb/0003/_simulations.tsv index 79750a3..1f254bf 100644 --- a/petabtests/cases/v2.0.0/pysb/0003/_simulations.tsv +++ b/petabtests/cases/v2.0.0/pysb/0003/_simulations.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time simulation observableParameters -obs_a c0 0 2.5 0.5;2 -obs_a c0 10 2.214285951865348 0.5;2 +observableId experimentId time simulation observableParameters noiseParameters +obs_a 0.0 2.5 0.500000000000000;2 +obs_a 10.0 2.214285951865348 0.500000000000000;2 diff --git a/petabtests/cases/v2.0.0/pysb/0004/0004.py b/petabtests/cases/v2.0.0/pysb/0004/0004.py index 41d8184..0916c49 100644 --- a/petabtests/cases/v2.0.0/pysb/0004/0004.py +++ b/petabtests/cases/v2.0.0/pysb/0004/0004.py @@ -1,9 +1,9 @@ from inspect import cleandoc -import pandas as pd -from petab.v1.C import * +from petab.v2 import Problem +from petab.v2.C import * -from petabtests import DEFAULT_PYSB_FILE, PetabTestCase, analytical_a +from petabtests import DEFAULT_PYSB_FILE, PetabV2TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -24,58 +24,88 @@ """) # problem -------------------------------------------------------------------- +problem = Problem() -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["c0"], - } -).set_index([CONDITION_ID]) +problem.add_observable( + "obs_a", + "scaling_A * A + offset_A", + noise_formula=1, +) -measurement_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a", "obs_a"], - SIMULATION_CONDITION_ID: ["c0", "c0"], - TIME: [0, 10], - MEASUREMENT: [0.7, 0.1], - } +problem.add_measurement( + "obs_a", + "", + time=0, + measurement=0.7, +) +problem.add_measurement( + "obs_a", + "", + time=10, + measurement=0.1, ) -observable_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a"], - OBSERVABLE_FORMULA: ["scaling_A * A + offset_A"], - NOISE_FORMULA: [1], - } -).set_index([OBSERVABLE_ID]) +problem.add_parameter( + "scaling_A", + lb=0, + ub=10, + nominal_value=0.5, + estimate=False, +) +problem.add_parameter( + "offset_A", + lb=0, + ub=10, + nominal_value=2, + estimate=False, +) +problem.add_parameter( + "a0", + lb=0, + ub=10, + nominal_value=1, + estimate=True, +) +problem.add_parameter( + "b0", + lb=0, + ub=10, + nominal_value=0, + estimate=True, +) +problem.add_parameter( + "k1", + lb=0, + ub=10, + nominal_value=0.8, + estimate=True, +) +problem.add_parameter( + "k2", + lb=0, + ub=10, + nominal_value=0.6, + estimate=True, +) -parameter_df = pd.DataFrame( - data={ - PARAMETER_ID: ["a0", "b0", "k1", "k2", "scaling_A", "offset_A"], - PARAMETER_SCALE: [LIN] * 6, - LOWER_BOUND: [0] * 6, - UPPER_BOUND: [10] * 6, - NOMINAL_VALUE: [1, 0, 0.8, 0.6, 0.5, 2], - ESTIMATE: [1] * 6, - } -).set_index(PARAMETER_ID) # solutions ------------------------------------------------------------------ -simulation_df = measurement_df.copy(deep=True).rename( +simulation_df = problem.measurement_df.copy(deep=True).rename( columns={MEASUREMENT: SIMULATION} ) simulation_df[SIMULATION] = [ 0.5 * analytical_a(t, 1, 0, 0.8, 0.6) + 2 for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV2TestCase( id=4, brief="Simulation. Observable parameters only defined in parameter table.", description=DESCRIPTION, model=DEFAULT_PYSB_FILE, - condition_dfs=[condition_df], - observable_dfs=[observable_df], - measurement_dfs=[measurement_df], + condition_dfs=[problem.condition_df], + observable_dfs=[problem.observable_df], + measurement_dfs=[problem.measurement_df], simulation_dfs=[simulation_df], - parameter_df=parameter_df, + parameter_df=problem.parameter_df, ) diff --git a/petabtests/cases/v2.0.0/pysb/0004/_0004.yaml b/petabtests/cases/v2.0.0/pysb/0004/_0004.yaml index 493b4f8..df06036 100644 --- a/petabtests/cases/v2.0.0/pysb/0004/_0004.yaml +++ b/petabtests/cases/v2.0.0/pysb/0004/_0004.yaml @@ -3,6 +3,7 @@ parameter_file: _parameters.tsv problems: - condition_files: - _conditions.tsv + experiment_files: [] measurement_files: - _measurements.tsv model_files: diff --git a/petabtests/cases/v2.0.0/pysb/0004/_conditions.tsv b/petabtests/cases/v2.0.0/pysb/0004/_conditions.tsv index f15e327..730c58d 100644 --- a/petabtests/cases/v2.0.0/pysb/0004/_conditions.tsv +++ b/petabtests/cases/v2.0.0/pysb/0004/_conditions.tsv @@ -1,2 +1 @@ -conditionId -c0 +conditionId targetId targetValue diff --git a/petabtests/cases/v2.0.0/pysb/0004/_measurements.tsv b/petabtests/cases/v2.0.0/pysb/0004/_measurements.tsv index a497632..e190344 100644 --- a/petabtests/cases/v2.0.0/pysb/0004/_measurements.tsv +++ b/petabtests/cases/v2.0.0/pysb/0004/_measurements.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time measurement -obs_a c0 0 0.7 -obs_a c0 10 0.1 +observableId experimentId time measurement observableParameters noiseParameters +obs_a 0.0 0.7 +obs_a 10.0 0.1 diff --git a/petabtests/cases/v2.0.0/pysb/0004/_observables.tsv b/petabtests/cases/v2.0.0/pysb/0004/_observables.tsv index 6861074..934b4d4 100644 --- a/petabtests/cases/v2.0.0/pysb/0004/_observables.tsv +++ b/petabtests/cases/v2.0.0/pysb/0004/_observables.tsv @@ -1,2 +1,2 @@ -observableId observableFormula noiseFormula -obs_a scaling_A * A + offset_A 1 +observableId observableName observableFormula noiseFormula noiseDistribution +obs_a A*scaling_A + offset_A 1 normal diff --git a/petabtests/cases/v2.0.0/pysb/0004/_parameters.tsv b/petabtests/cases/v2.0.0/pysb/0004/_parameters.tsv index 6d40b89..751da04 100644 --- a/petabtests/cases/v2.0.0/pysb/0004/_parameters.tsv +++ b/petabtests/cases/v2.0.0/pysb/0004/_parameters.tsv @@ -1,7 +1,7 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -a0 lin 0 10 1.0 1 -b0 lin 0 10 0.0 1 -k1 lin 0 10 0.8 1 -k2 lin 0 10 0.6 1 -scaling_A lin 0 10 0.5 1 -offset_A lin 0 10 2.0 1 +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +scaling_A 0.0 10.0 0.5 false +offset_A 0.0 10.0 2.0 false +a0 0.0 10.0 1.0 true +b0 0.0 10.0 0.0 true +k1 0.0 10.0 0.8 true +k2 0.0 10.0 0.6 true diff --git a/petabtests/cases/v2.0.0/pysb/0004/_simulations.tsv b/petabtests/cases/v2.0.0/pysb/0004/_simulations.tsv index 94e0e2f..800caa9 100644 --- a/petabtests/cases/v2.0.0/pysb/0004/_simulations.tsv +++ b/petabtests/cases/v2.0.0/pysb/0004/_simulations.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time simulation -obs_a c0 0 2.5 -obs_a c0 10 2.214285951865348 +observableId experimentId time simulation observableParameters noiseParameters +obs_a 0.0 2.5 +obs_a 10.0 2.214285951865348 diff --git a/petabtests/cases/v2.0.0/pysb/0005/0005.py b/petabtests/cases/v2.0.0/pysb/0005/0005.py index 2b21823..8549be1 100644 --- a/petabtests/cases/v2.0.0/pysb/0005/0005.py +++ b/petabtests/cases/v2.0.0/pysb/0005/0005.py @@ -1,9 +1,9 @@ from inspect import cleandoc -import pandas as pd -from petab.v1.C import * - -from petabtests import PetabTestCase, analytical_a +from petab.v2 import Problem +from petab.v2.C import * +from pathlib import Path +from petabtests import PetabV2TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -23,59 +23,95 @@ # problem -------------------------------------------------------------------- -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["c0", "c1"], - "offset_A": ["offset_A_c0", "offset_A_c1"], - } -).set_index([CONDITION_ID]) - -measurement_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a", "obs_a"], - SIMULATION_CONDITION_ID: ["c0", "c1"], - TIME: [10, 10], - MEASUREMENT: [2.1, 3.2], - } +problem = Problem() + +problem.add_condition("c0", offset_A="offset_A_c0") +problem.add_condition("c1", offset_A="offset_A_c1") + +problem.add_experiment("e0", 0, "c0") +problem.add_experiment("e1", 0, "c1") + +problem.add_observable( + "obs_a", + "A + offset_A", + noise_formula=1, +) + +problem.add_measurement( + "obs_a", + "e0", + time=10, + measurement=2.1, +) +problem.add_measurement( + "obs_a", + "e1", + time=10, + measurement=3.2, ) -observable_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a"], - OBSERVABLE_FORMULA: ["A + offset_A"], - NOISE_FORMULA: [1], - } -).set_index([OBSERVABLE_ID]) - -parameter_df = pd.DataFrame( - data={ - PARAMETER_ID: ["a0", "b0", "k1", "k2", "offset_A_c0", "offset_A_c1"], - PARAMETER_SCALE: [LIN] * 6, - LOWER_BOUND: [0] * 6, - UPPER_BOUND: [10] * 6, - NOMINAL_VALUE: [1, 0, 0.8, 0.6, 2, 3], - ESTIMATE: [1] * 6, - } -).set_index(PARAMETER_ID) +problem.add_parameter( + "a0", + lb=0, + ub=10, + nominal_value=1, + estimate=True, +) +problem.add_parameter( + "b0", + lb=0, + ub=10, + nominal_value=0, + estimate=True, +) +problem.add_parameter( + "k1", + lb=0, + ub=10, + nominal_value=0.8, + estimate=True, +) +problem.add_parameter( + "k2", + lb=0, + ub=10, + nominal_value=0.6, + estimate=True, +) +problem.add_parameter( + "offset_A_c0", + lb=0, + ub=10, + nominal_value=2, + estimate=False, +) +problem.add_parameter( + "offset_A_c1", + lb=0, + ub=10, + nominal_value=3, + estimate=False, +) # solutions ------------------------------------------------------------------ -simulation_df = measurement_df.copy(deep=True).rename( +simulation_df = problem.measurement_df.copy(deep=True).rename( columns={MEASUREMENT: SIMULATION} ) simulation_df[SIMULATION] = [ analytical_a(10, 1, 0, 0.8, 0.6) + offset for offset in [2, 3] ] -case = PetabTestCase( +case = PetabV2TestCase( id=5, brief="Simulation. Condition-specific parameters only defined in " "parameter table.", description=DESCRIPTION, - model="conversion_modified_pysb.py", - condition_dfs=[condition_df], - observable_dfs=[observable_df], - measurement_dfs=[measurement_df], + model=Path("conversion_modified_pysb.py"), + condition_dfs=[problem.condition_df], + observable_dfs=[problem.observable_df], + measurement_dfs=[problem.measurement_df], simulation_dfs=[simulation_df], - parameter_df=parameter_df, + parameter_df=problem.parameter_df, + experiment_dfs=[problem.experiment_df], ) diff --git a/petabtests/cases/v2.0.0/pysb/0005/_0005.yaml b/petabtests/cases/v2.0.0/pysb/0005/_0005.yaml index 493b4f8..4e0d35b 100644 --- a/petabtests/cases/v2.0.0/pysb/0005/_0005.yaml +++ b/petabtests/cases/v2.0.0/pysb/0005/_0005.yaml @@ -3,6 +3,8 @@ parameter_file: _parameters.tsv problems: - condition_files: - _conditions.tsv + experiment_files: + - _experiments.tsv measurement_files: - _measurements.tsv model_files: diff --git a/petabtests/cases/v2.0.0/pysb/0005/_conditions.tsv b/petabtests/cases/v2.0.0/pysb/0005/_conditions.tsv index db79bf4..a2aa64a 100644 --- a/petabtests/cases/v2.0.0/pysb/0005/_conditions.tsv +++ b/petabtests/cases/v2.0.0/pysb/0005/_conditions.tsv @@ -1,3 +1,3 @@ -conditionId offset_A -c0 offset_A_c0 -c1 offset_A_c1 +conditionId targetId targetValue +c0 offset_A offset_A_c0 +c1 offset_A offset_A_c1 diff --git a/petabtests/cases/v2.0.0/pysb/0005/_experiments.tsv b/petabtests/cases/v2.0.0/pysb/0005/_experiments.tsv new file mode 100644 index 0000000..1269b14 --- /dev/null +++ b/petabtests/cases/v2.0.0/pysb/0005/_experiments.tsv @@ -0,0 +1,3 @@ +experimentId time conditionId +e0 0.0 c0 +e1 0.0 c1 diff --git a/petabtests/cases/v2.0.0/pysb/0005/_measurements.tsv b/petabtests/cases/v2.0.0/pysb/0005/_measurements.tsv index 6016b73..561d5f8 100644 --- a/petabtests/cases/v2.0.0/pysb/0005/_measurements.tsv +++ b/petabtests/cases/v2.0.0/pysb/0005/_measurements.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time measurement -obs_a c0 10 2.1 -obs_a c1 10 3.2 +observableId experimentId time measurement observableParameters noiseParameters +obs_a e0 10.0 2.1 +obs_a e1 10.0 3.2 diff --git a/petabtests/cases/v2.0.0/pysb/0005/_observables.tsv b/petabtests/cases/v2.0.0/pysb/0005/_observables.tsv index 5411c51..bc24af5 100644 --- a/petabtests/cases/v2.0.0/pysb/0005/_observables.tsv +++ b/petabtests/cases/v2.0.0/pysb/0005/_observables.tsv @@ -1,2 +1,2 @@ -observableId observableFormula noiseFormula -obs_a A + offset_A 1 +observableId observableName observableFormula noiseFormula noiseDistribution +obs_a A + offset_A 1 normal diff --git a/petabtests/cases/v2.0.0/pysb/0005/_parameters.tsv b/petabtests/cases/v2.0.0/pysb/0005/_parameters.tsv index 2676343..adc56aa 100644 --- a/petabtests/cases/v2.0.0/pysb/0005/_parameters.tsv +++ b/petabtests/cases/v2.0.0/pysb/0005/_parameters.tsv @@ -1,7 +1,7 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -a0 lin 0 10 1.0 1 -b0 lin 0 10 0.0 1 -k1 lin 0 10 0.8 1 -k2 lin 0 10 0.6 1 -offset_A_c0 lin 0 10 2.0 1 -offset_A_c1 lin 0 10 3.0 1 +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +a0 0.0 10.0 1.0 true +b0 0.0 10.0 0.0 true +k1 0.0 10.0 0.8 true +k2 0.0 10.0 0.6 true +offset_A_c0 0.0 10.0 2.0 false +offset_A_c1 0.0 10.0 3.0 false diff --git a/petabtests/cases/v2.0.0/pysb/0005/_simulations.tsv b/petabtests/cases/v2.0.0/pysb/0005/_simulations.tsv index 3fb757b..5c74e35 100644 --- a/petabtests/cases/v2.0.0/pysb/0005/_simulations.tsv +++ b/petabtests/cases/v2.0.0/pysb/0005/_simulations.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time simulation -obs_a c0 10 2.4285719037306968 -obs_a c1 10 3.4285719037306968 +observableId experimentId time simulation observableParameters noiseParameters +obs_a e0 10.0 2.4285719037306968 +obs_a e1 10.0 3.4285719037306968 diff --git a/petabtests/cases/v2.0.0/pysb/0006/0006.py b/petabtests/cases/v2.0.0/pysb/0006/0006.py index 79400ca..36c1596 100644 --- a/petabtests/cases/v2.0.0/pysb/0006/0006.py +++ b/petabtests/cases/v2.0.0/pysb/0006/0006.py @@ -1,9 +1,8 @@ from inspect import cleandoc -import pandas as pd -from petab.v1.C import * - -from petabtests import DEFAULT_PYSB_FILE, PetabTestCase, analytical_a +from petabtests import DEFAULT_PYSB_FILE, PetabV2TestCase, analytical_a +from petab.v2 import Problem +from petab.v2.C import * DESCRIPTION = cleandoc(""" ## Objective @@ -21,45 +20,26 @@ """) # problem -------------------------------------------------------------------- +problem = Problem() -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["c0"], - } -).set_index([CONDITION_ID]) - -measurement_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a", "obs_a"], - SIMULATION_CONDITION_ID: ["c0", "c0"], - TIME: [0, 10], - MEASUREMENT: [0.7, 0.1], - OBSERVABLE_PARAMETERS: [10, 15], - } +problem.add_observable( + "obs_a", "observableParameter1_obs_a * A", noise_formula=1 ) -observable_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a"], - OBSERVABLE_FORMULA: ["observableParameter1_obs_a * A"], - NOISE_FORMULA: [1], - } -).set_index([OBSERVABLE_ID]) - -parameter_df = pd.DataFrame( - data={ - PARAMETER_ID: ["a0", "b0", "k1", "k2"], - PARAMETER_SCALE: [LIN] * 4, - LOWER_BOUND: [0] * 4, - UPPER_BOUND: [10] * 4, - NOMINAL_VALUE: [1, 0, 0.8, 0.6], - ESTIMATE: [1] * 4, - } -).set_index(PARAMETER_ID) +problem.add_measurement( + "obs_a", "", time=0, measurement=0.7, observable_parameters=(10,) +) +problem.add_measurement( + "obs_a", "", time=10, measurement=0.1, observable_parameters=(15,) +) +problem.add_parameter("a0", lb=0, ub=10, nominal_value=1, estimate=True) +problem.add_parameter("b0", lb=0, ub=10, nominal_value=0, estimate=True) +problem.add_parameter("k1", lb=0, ub=10, nominal_value=0.8, estimate=True) +problem.add_parameter("k2", lb=0, ub=10, nominal_value=0.6, estimate=True) # solutions ------------------------------------------------------------------ -simulation_df = measurement_df.copy(deep=True).rename( +simulation_df = problem.measurement_df.copy(deep=True).rename( columns={MEASUREMENT: SIMULATION} ) simulation_df[SIMULATION] = [ @@ -67,15 +47,15 @@ 15 * analytical_a(10, 1, 0, 0.8, 0.6), ] -case = PetabTestCase( +case = PetabV2TestCase( id=6, brief="Simulation. Time-point specific numeric observable parameter " "overrides.", description=DESCRIPTION, model=DEFAULT_PYSB_FILE, - condition_dfs=[condition_df], - observable_dfs=[observable_df], - measurement_dfs=[measurement_df], + condition_dfs=[problem.condition_df], + observable_dfs=[problem.observable_df], + measurement_dfs=[problem.measurement_df], simulation_dfs=[simulation_df], - parameter_df=parameter_df, + parameter_df=problem.parameter_df, ) diff --git a/petabtests/cases/v2.0.0/pysb/0006/_0006.yaml b/petabtests/cases/v2.0.0/pysb/0006/_0006.yaml index 493b4f8..df06036 100644 --- a/petabtests/cases/v2.0.0/pysb/0006/_0006.yaml +++ b/petabtests/cases/v2.0.0/pysb/0006/_0006.yaml @@ -3,6 +3,7 @@ parameter_file: _parameters.tsv problems: - condition_files: - _conditions.tsv + experiment_files: [] measurement_files: - _measurements.tsv model_files: diff --git a/petabtests/cases/v2.0.0/pysb/0006/_conditions.tsv b/petabtests/cases/v2.0.0/pysb/0006/_conditions.tsv index f15e327..730c58d 100644 --- a/petabtests/cases/v2.0.0/pysb/0006/_conditions.tsv +++ b/petabtests/cases/v2.0.0/pysb/0006/_conditions.tsv @@ -1,2 +1 @@ -conditionId -c0 +conditionId targetId targetValue diff --git a/petabtests/cases/v2.0.0/pysb/0006/_measurements.tsv b/petabtests/cases/v2.0.0/pysb/0006/_measurements.tsv index 8ed279b..b51ddb2 100644 --- a/petabtests/cases/v2.0.0/pysb/0006/_measurements.tsv +++ b/petabtests/cases/v2.0.0/pysb/0006/_measurements.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time measurement observableParameters -obs_a c0 0 0.7 10 -obs_a c0 10 0.1 15 +observableId experimentId time measurement observableParameters noiseParameters +obs_a 0.0 0.7 10 +obs_a 10.0 0.1 15 diff --git a/petabtests/cases/v2.0.0/pysb/0006/_observables.tsv b/petabtests/cases/v2.0.0/pysb/0006/_observables.tsv index 07a0173..bc2c2f4 100644 --- a/petabtests/cases/v2.0.0/pysb/0006/_observables.tsv +++ b/petabtests/cases/v2.0.0/pysb/0006/_observables.tsv @@ -1,2 +1,2 @@ -observableId observableFormula noiseFormula -obs_a observableParameter1_obs_a * A 1 +observableId observableName observableFormula noiseFormula noiseDistribution +obs_a A*observableParameter1_obs_a 1 normal diff --git a/petabtests/cases/v2.0.0/pysb/0006/_parameters.tsv b/petabtests/cases/v2.0.0/pysb/0006/_parameters.tsv index 8c1e5cb..368a25c 100644 --- a/petabtests/cases/v2.0.0/pysb/0006/_parameters.tsv +++ b/petabtests/cases/v2.0.0/pysb/0006/_parameters.tsv @@ -1,5 +1,5 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -a0 lin 0 10 1.0 1 -b0 lin 0 10 0.0 1 -k1 lin 0 10 0.8 1 -k2 lin 0 10 0.6 1 +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +a0 0.0 10.0 1.0 true +b0 0.0 10.0 0.0 true +k1 0.0 10.0 0.8 true +k2 0.0 10.0 0.6 true diff --git a/petabtests/cases/v2.0.0/pysb/0006/_simulations.tsv b/petabtests/cases/v2.0.0/pysb/0006/_simulations.tsv index 7d219fa..f4f246e 100644 --- a/petabtests/cases/v2.0.0/pysb/0006/_simulations.tsv +++ b/petabtests/cases/v2.0.0/pysb/0006/_simulations.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time simulation observableParameters -obs_a c0 0 10.0 10 -obs_a c0 10 6.42857855596045 15 +observableId experimentId time simulation observableParameters noiseParameters +obs_a 0.0 10.0 10 +obs_a 10.0 6.42857855596045 15 diff --git a/petabtests/cases/v2.0.0/pysb/0007/0007.py b/petabtests/cases/v2.0.0/pysb/0007/0007.py index 1dc033e..b85124e 100644 --- a/petabtests/cases/v2.0.0/pysb/0007/0007.py +++ b/petabtests/cases/v2.0.0/pysb/0007/0007.py @@ -1,11 +1,11 @@ from inspect import cleandoc -import pandas as pd -from petab.v1.C import * +from petab.v2 import Problem +from petab.v2.C import * from petabtests import ( DEFAULT_PYSB_FILE, - PetabTestCase, + PetabV2TestCase, analytical_a, analytical_b, ) @@ -26,45 +26,23 @@ """) # problem -------------------------------------------------------------------- +problem = Problem() -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["c0"], - } -).set_index([CONDITION_ID]) +problem.add_observable("obs_a", "A", noise_formula=0.5) +problem.add_observable("obs_b", "B", noise_formula=0.6) -measurement_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a", "obs_b"], - SIMULATION_CONDITION_ID: ["c0", "c0"], - TIME: [10, 10], - MEASUREMENT: [0.2, 0.8], - } -) +problem.add_measurement("obs_a", "", time=10, measurement=0.2) +problem.add_measurement("obs_b", "", time=10, measurement=0.8) -observable_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a", "obs_b"], - OBSERVABLE_FORMULA: ["A", "B"], - OBSERVABLE_TRANSFORMATION: [LIN, LOG10], - NOISE_FORMULA: [0.5, 0.6], - } -).set_index([OBSERVABLE_ID]) +problem.add_parameter("a0", lb=0, ub=10, nominal_value=1, estimate=True) +problem.add_parameter("b0", lb=0, ub=10, nominal_value=0, estimate=True) +problem.add_parameter("k1", lb=0, ub=10, nominal_value=0.8, estimate=True) +problem.add_parameter("k2", lb=0, ub=10, nominal_value=0.6, estimate=True) -parameter_df = pd.DataFrame( - data={ - PARAMETER_ID: ["a0", "b0", "k1", "k2"], - PARAMETER_SCALE: [LIN] * 4, - LOWER_BOUND: [0] * 4, - UPPER_BOUND: [10] * 4, - NOMINAL_VALUE: [1, 0, 0.8, 0.6], - ESTIMATE: [1] * 4, - } -).set_index(PARAMETER_ID) # solutions ------------------------------------------------------------------ -simulation_df = measurement_df.copy(deep=True).rename( +simulation_df = problem.measurement_df.copy(deep=True).rename( columns={MEASUREMENT: SIMULATION} ) simulation_df[SIMULATION] = [ @@ -72,14 +50,14 @@ analytical_b(10, 1, 0, 0.8, 0.6), ] -case = PetabTestCase( +case = PetabV2TestCase( id=7, brief="Simulation. Observable transformation log10.", description=DESCRIPTION, model=DEFAULT_PYSB_FILE, - condition_dfs=[condition_df], - observable_dfs=[observable_df], - measurement_dfs=[measurement_df], + condition_dfs=[problem.condition_df], + observable_dfs=[problem.observable_df], + measurement_dfs=[problem.measurement_df], simulation_dfs=[simulation_df], - parameter_df=parameter_df, + parameter_df=problem.parameter_df, ) diff --git a/petabtests/cases/v2.0.0/pysb/0007/_0007.yaml b/petabtests/cases/v2.0.0/pysb/0007/_0007.yaml index 493b4f8..df06036 100644 --- a/petabtests/cases/v2.0.0/pysb/0007/_0007.yaml +++ b/petabtests/cases/v2.0.0/pysb/0007/_0007.yaml @@ -3,6 +3,7 @@ parameter_file: _parameters.tsv problems: - condition_files: - _conditions.tsv + experiment_files: [] measurement_files: - _measurements.tsv model_files: diff --git a/petabtests/cases/v2.0.0/pysb/0007/_0007_solution.yaml b/petabtests/cases/v2.0.0/pysb/0007/_0007_solution.yaml index 6025b5e..649e4cc 100644 --- a/petabtests/cases/v2.0.0/pysb/0007/_0007_solution.yaml +++ b/petabtests/cases/v2.0.0/pysb/0007/_0007_solution.yaml @@ -1,5 +1,5 @@ -chi2: 0.2682957616817 -llh: -1.378941036858 +chi2: 0.35410578063106 +llh: -0.81095715239894 simulation_files: - _simulations.tsv tol_chi2: 0.001 diff --git a/petabtests/cases/v2.0.0/pysb/0007/_conditions.tsv b/petabtests/cases/v2.0.0/pysb/0007/_conditions.tsv index f15e327..730c58d 100644 --- a/petabtests/cases/v2.0.0/pysb/0007/_conditions.tsv +++ b/petabtests/cases/v2.0.0/pysb/0007/_conditions.tsv @@ -1,2 +1 @@ -conditionId -c0 +conditionId targetId targetValue diff --git a/petabtests/cases/v2.0.0/pysb/0007/_measurements.tsv b/petabtests/cases/v2.0.0/pysb/0007/_measurements.tsv index 00c596e..6196e74 100644 --- a/petabtests/cases/v2.0.0/pysb/0007/_measurements.tsv +++ b/petabtests/cases/v2.0.0/pysb/0007/_measurements.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time measurement -obs_a c0 10 0.2 -obs_b c0 10 0.8 +observableId experimentId time measurement observableParameters noiseParameters +obs_a 10.0 0.2 +obs_b 10.0 0.8 diff --git a/petabtests/cases/v2.0.0/pysb/0007/_observables.tsv b/petabtests/cases/v2.0.0/pysb/0007/_observables.tsv index c966bde..8b0ae5a 100644 --- a/petabtests/cases/v2.0.0/pysb/0007/_observables.tsv +++ b/petabtests/cases/v2.0.0/pysb/0007/_observables.tsv @@ -1,3 +1,3 @@ -observableId observableFormula observableTransformation noiseFormula -obs_a A lin 0.5 -obs_b B log10 0.6 +observableId observableName observableFormula noiseFormula noiseDistribution +obs_a A 0.500000000000000 normal +obs_b B 0.600000000000000 normal diff --git a/petabtests/cases/v2.0.0/pysb/0007/_parameters.tsv b/petabtests/cases/v2.0.0/pysb/0007/_parameters.tsv index 8c1e5cb..368a25c 100644 --- a/petabtests/cases/v2.0.0/pysb/0007/_parameters.tsv +++ b/petabtests/cases/v2.0.0/pysb/0007/_parameters.tsv @@ -1,5 +1,5 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -a0 lin 0 10 1.0 1 -b0 lin 0 10 0.0 1 -k1 lin 0 10 0.8 1 -k2 lin 0 10 0.6 1 +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +a0 0.0 10.0 1.0 true +b0 0.0 10.0 0.0 true +k1 0.0 10.0 0.8 true +k2 0.0 10.0 0.6 true diff --git a/petabtests/cases/v2.0.0/pysb/0007/_simulations.tsv b/petabtests/cases/v2.0.0/pysb/0007/_simulations.tsv index a054455..4f681b5 100644 --- a/petabtests/cases/v2.0.0/pysb/0007/_simulations.tsv +++ b/petabtests/cases/v2.0.0/pysb/0007/_simulations.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time simulation -obs_a c0 10 0.42857190373069665 -obs_b c0 10 0.5714280962693035 +observableId experimentId time simulation observableParameters noiseParameters +obs_a 10.0 0.42857190373069665 +obs_b 10.0 0.5714280962693035 diff --git a/petabtests/cases/v2.0.0/pysb/0008/0008.py b/petabtests/cases/v2.0.0/pysb/0008/0008.py index 9132eec..df94314 100644 --- a/petabtests/cases/v2.0.0/pysb/0008/0008.py +++ b/petabtests/cases/v2.0.0/pysb/0008/0008.py @@ -1,9 +1,9 @@ from inspect import cleandoc -import pandas as pd -from petab.v1.C import * +from petab.v2 import Problem +from petab.v2.C import * -from petabtests import DEFAULT_PYSB_FILE, PetabTestCase, analytical_a +from petabtests import DEFAULT_PYSB_FILE, PetabV2TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -20,58 +20,36 @@ """) # problem -------------------------------------------------------------------- +problem = Problem() -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["c0"], - } -).set_index([CONDITION_ID]) +problem.add_observable("obs_a", "A", noise_formula=0.5) -measurement_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a", "obs_a", "obs_a"], - SIMULATION_CONDITION_ID: ["c0", "c0", "c0"], - TIME: [0, 10, 10], - MEASUREMENT: [0.7, 0.1, 0.2], - } -) - -observable_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a"], - OBSERVABLE_FORMULA: ["A"], - NOISE_FORMULA: [0.5], - } -).set_index([OBSERVABLE_ID]) +problem.add_measurement("obs_a", "", time=0, measurement=0.7) +problem.add_measurement("obs_a", "", time=10, measurement=0.1) +problem.add_measurement("obs_a", "", time=10, measurement=0.2) -parameter_df = pd.DataFrame( - data={ - PARAMETER_ID: ["a0", "b0", "k1", "k2"], - PARAMETER_SCALE: [LIN] * 4, - LOWER_BOUND: [0] * 4, - UPPER_BOUND: [10] * 4, - NOMINAL_VALUE: [1, 0, 0.8, 0.6], - ESTIMATE: [1] * 4, - } -).set_index(PARAMETER_ID) +problem.add_parameter("a0", lb=0, ub=10, nominal_value=1, estimate=True) +problem.add_parameter("b0", lb=0, ub=10, nominal_value=0, estimate=True) +problem.add_parameter("k1", lb=0, ub=10, nominal_value=0.8, estimate=True) +problem.add_parameter("k2", lb=0, ub=10, nominal_value=0.6, estimate=True) # solutions ------------------------------------------------------------------ -simulation_df = measurement_df.copy(deep=True).rename( +simulation_df = problem.measurement_df.copy(deep=True).rename( columns={MEASUREMENT: SIMULATION} ) simulation_df[SIMULATION] = [ analytical_a(t, 1, 0, 0.8, 0.6) for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV2TestCase( id=8, brief="Simulation. Replicate measurements.", description=DESCRIPTION, model=DEFAULT_PYSB_FILE, - condition_dfs=[condition_df], - observable_dfs=[observable_df], - measurement_dfs=[measurement_df], + condition_dfs=[problem.condition_df], + observable_dfs=[problem.observable_df], + measurement_dfs=[problem.measurement_df], simulation_dfs=[simulation_df], - parameter_df=parameter_df, + parameter_df=problem.parameter_df, ) diff --git a/petabtests/cases/v2.0.0/pysb/0008/_0008.yaml b/petabtests/cases/v2.0.0/pysb/0008/_0008.yaml index 493b4f8..df06036 100644 --- a/petabtests/cases/v2.0.0/pysb/0008/_0008.yaml +++ b/petabtests/cases/v2.0.0/pysb/0008/_0008.yaml @@ -3,6 +3,7 @@ parameter_file: _parameters.tsv problems: - condition_files: - _conditions.tsv + experiment_files: [] measurement_files: - _measurements.tsv model_files: diff --git a/petabtests/cases/v2.0.0/pysb/0008/_conditions.tsv b/petabtests/cases/v2.0.0/pysb/0008/_conditions.tsv index f15e327..730c58d 100644 --- a/petabtests/cases/v2.0.0/pysb/0008/_conditions.tsv +++ b/petabtests/cases/v2.0.0/pysb/0008/_conditions.tsv @@ -1,2 +1 @@ -conditionId -c0 +conditionId targetId targetValue diff --git a/petabtests/cases/v2.0.0/pysb/0008/_measurements.tsv b/petabtests/cases/v2.0.0/pysb/0008/_measurements.tsv index b17d732..68af922 100644 --- a/petabtests/cases/v2.0.0/pysb/0008/_measurements.tsv +++ b/petabtests/cases/v2.0.0/pysb/0008/_measurements.tsv @@ -1,4 +1,4 @@ -observableId simulationConditionId time measurement -obs_a c0 0 0.7 -obs_a c0 10 0.1 -obs_a c0 10 0.2 +observableId experimentId time measurement observableParameters noiseParameters +obs_a 0.0 0.7 +obs_a 10.0 0.1 +obs_a 10.0 0.2 diff --git a/petabtests/cases/v2.0.0/pysb/0008/_observables.tsv b/petabtests/cases/v2.0.0/pysb/0008/_observables.tsv index 0b78dd1..bc320b2 100644 --- a/petabtests/cases/v2.0.0/pysb/0008/_observables.tsv +++ b/petabtests/cases/v2.0.0/pysb/0008/_observables.tsv @@ -1,2 +1,2 @@ -observableId observableFormula noiseFormula -obs_a A 0.5 +observableId observableName observableFormula noiseFormula noiseDistribution +obs_a A 0.500000000000000 normal diff --git a/petabtests/cases/v2.0.0/pysb/0008/_parameters.tsv b/petabtests/cases/v2.0.0/pysb/0008/_parameters.tsv index 8c1e5cb..368a25c 100644 --- a/petabtests/cases/v2.0.0/pysb/0008/_parameters.tsv +++ b/petabtests/cases/v2.0.0/pysb/0008/_parameters.tsv @@ -1,5 +1,5 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -a0 lin 0 10 1.0 1 -b0 lin 0 10 0.0 1 -k1 lin 0 10 0.8 1 -k2 lin 0 10 0.6 1 +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +a0 0.0 10.0 1.0 true +b0 0.0 10.0 0.0 true +k1 0.0 10.0 0.8 true +k2 0.0 10.0 0.6 true diff --git a/petabtests/cases/v2.0.0/pysb/0008/_simulations.tsv b/petabtests/cases/v2.0.0/pysb/0008/_simulations.tsv index 05743ad..14744be 100644 --- a/petabtests/cases/v2.0.0/pysb/0008/_simulations.tsv +++ b/petabtests/cases/v2.0.0/pysb/0008/_simulations.tsv @@ -1,4 +1,4 @@ -observableId simulationConditionId time simulation -obs_a c0 0 1.0 -obs_a c0 10 0.42857190373069665 -obs_a c0 10 0.42857190373069665 +observableId experimentId time simulation observableParameters noiseParameters +obs_a 0.0 1.0 +obs_a 10.0 0.42857190373069665 +obs_a 10.0 0.42857190373069665 diff --git a/petabtests/cases/v2.0.0/pysb/0009/0009.py b/petabtests/cases/v2.0.0/pysb/0009/0009.py index 9c02a58..e7861e6 100644 --- a/petabtests/cases/v2.0.0/pysb/0009/0009.py +++ b/petabtests/cases/v2.0.0/pysb/0009/0009.py @@ -1,11 +1,11 @@ from inspect import cleandoc -import pandas as pd -from petab.v1.C import * +from petab.v2 import Problem +from petab.v2.C import * from petabtests import ( DEFAULT_PYSB_FILE, - PetabTestCase, + PetabV2TestCase, analytical_a, analytical_b, ) @@ -25,46 +25,26 @@ """) # problem -------------------------------------------------------------------- +problem = Problem() -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["preeq_c0", "c0"], - "k1": [0.3, 0.8], - } -).set_index([CONDITION_ID]) - -measurement_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a", "obs_a"], - PREEQUILIBRATION_CONDITION_ID: ["preeq_c0", "preeq_c0"], - SIMULATION_CONDITION_ID: ["c0", "c0"], - TIME: [1, 10], - MEASUREMENT: [0.7, 0.1], - } -) +problem.add_condition("preeq_c0", k1=0.3) +problem.add_condition("c0", k1=0.8) + +problem.add_experiment("e0", TIME_PREEQUILIBRATION, "preeq_c0", 0, "c0") + +problem.add_observable("obs_a", "A", noise_formula=0.5) + +problem.add_measurement("obs_a", "e0", time=1, measurement=0.7) +problem.add_measurement("obs_a", "e0", time=10, measurement=0.1) + +problem.add_parameter("a0", lb=0, ub=10, nominal_value=1, estimate=True) +problem.add_parameter("b0", lb=0, ub=10, nominal_value=0, estimate=True) +problem.add_parameter("k2", lb=0, ub=10, nominal_value=0.6, estimate=True) -observable_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a"], - OBSERVABLE_FORMULA: ["A"], - NOISE_FORMULA: [0.5], - } -).set_index([OBSERVABLE_ID]) - -parameter_df = pd.DataFrame( - data={ - PARAMETER_ID: ["a0", "b0", "k2"], - PARAMETER_SCALE: [LIN] * 3, - LOWER_BOUND: [0] * 3, - UPPER_BOUND: [10] * 3, - NOMINAL_VALUE: [1, 0, 0.6], - ESTIMATE: [1] * 3, - } -).set_index(PARAMETER_ID) # solutions ------------------------------------------------------------------ -simulation_df = measurement_df.copy(deep=True).rename( +simulation_df = problem.measurement_df.copy(deep=True).rename( columns={MEASUREMENT: SIMULATION} ) # simulate for far time point as steady state @@ -76,14 +56,15 @@ for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV2TestCase( id=9, brief="Simulation. Preequilibration.", description=DESCRIPTION, model=DEFAULT_PYSB_FILE, - condition_dfs=[condition_df], - observable_dfs=[observable_df], - measurement_dfs=[measurement_df], + condition_dfs=[problem.condition_df], + observable_dfs=[problem.observable_df], + measurement_dfs=[problem.measurement_df], simulation_dfs=[simulation_df], - parameter_df=parameter_df, + parameter_df=problem.parameter_df, + experiment_dfs=[problem.experiment_df], ) diff --git a/petabtests/cases/v2.0.0/pysb/0009/_0009.yaml b/petabtests/cases/v2.0.0/pysb/0009/_0009.yaml index 493b4f8..4e0d35b 100644 --- a/petabtests/cases/v2.0.0/pysb/0009/_0009.yaml +++ b/petabtests/cases/v2.0.0/pysb/0009/_0009.yaml @@ -3,6 +3,8 @@ parameter_file: _parameters.tsv problems: - condition_files: - _conditions.tsv + experiment_files: + - _experiments.tsv measurement_files: - _measurements.tsv model_files: diff --git a/petabtests/cases/v2.0.0/pysb/0009/_conditions.tsv b/petabtests/cases/v2.0.0/pysb/0009/_conditions.tsv index 834fafc..f9015bc 100644 --- a/petabtests/cases/v2.0.0/pysb/0009/_conditions.tsv +++ b/petabtests/cases/v2.0.0/pysb/0009/_conditions.tsv @@ -1,3 +1,3 @@ -conditionId k1 -preeq_c0 0.3 -c0 0.8 +conditionId targetId targetValue +preeq_c0 k1 0.3 +c0 k1 0.8 diff --git a/petabtests/cases/v2.0.0/pysb/0009/_experiments.tsv b/petabtests/cases/v2.0.0/pysb/0009/_experiments.tsv new file mode 100644 index 0000000..430d0ee --- /dev/null +++ b/petabtests/cases/v2.0.0/pysb/0009/_experiments.tsv @@ -0,0 +1,3 @@ +experimentId time conditionId +e0 -inf preeq_c0 +e0 0.0 c0 diff --git a/petabtests/cases/v2.0.0/pysb/0009/_measurements.tsv b/petabtests/cases/v2.0.0/pysb/0009/_measurements.tsv index a9a1cb0..04fe53f 100644 --- a/petabtests/cases/v2.0.0/pysb/0009/_measurements.tsv +++ b/petabtests/cases/v2.0.0/pysb/0009/_measurements.tsv @@ -1,3 +1,3 @@ -observableId preequilibrationConditionId simulationConditionId time measurement -obs_a preeq_c0 c0 1 0.7 -obs_a preeq_c0 c0 10 0.1 +observableId experimentId time measurement observableParameters noiseParameters +obs_a e0 1.0 0.7 +obs_a e0 10.0 0.1 diff --git a/petabtests/cases/v2.0.0/pysb/0009/_observables.tsv b/petabtests/cases/v2.0.0/pysb/0009/_observables.tsv index 0b78dd1..bc320b2 100644 --- a/petabtests/cases/v2.0.0/pysb/0009/_observables.tsv +++ b/petabtests/cases/v2.0.0/pysb/0009/_observables.tsv @@ -1,2 +1,2 @@ -observableId observableFormula noiseFormula -obs_a A 0.5 +observableId observableName observableFormula noiseFormula noiseDistribution +obs_a A 0.500000000000000 normal diff --git a/petabtests/cases/v2.0.0/pysb/0009/_parameters.tsv b/petabtests/cases/v2.0.0/pysb/0009/_parameters.tsv index 69c6ade..f949bf6 100644 --- a/petabtests/cases/v2.0.0/pysb/0009/_parameters.tsv +++ b/petabtests/cases/v2.0.0/pysb/0009/_parameters.tsv @@ -1,4 +1,4 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -a0 lin 0 10 1.0 1 -b0 lin 0 10 0.0 1 -k2 lin 0 10 0.6 1 +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +a0 0.0 10.0 1.0 true +b0 0.0 10.0 0.0 true +k2 0.0 10.0 0.6 true diff --git a/petabtests/cases/v2.0.0/pysb/0009/_simulations.tsv b/petabtests/cases/v2.0.0/pysb/0009/_simulations.tsv index 0b86e24..40a61b3 100644 --- a/petabtests/cases/v2.0.0/pysb/0009/_simulations.tsv +++ b/petabtests/cases/v2.0.0/pysb/0009/_simulations.tsv @@ -1,3 +1,3 @@ -observableId preequilibrationConditionId simulationConditionId time simulation -obs_a preeq_c0 c0 1 0.48728499141466824 -obs_a preeq_c0 c0 10 0.42857162655445696 +observableId experimentId time simulation observableParameters noiseParameters +obs_a e0 1.0 0.48728499141466824 +obs_a e0 10.0 0.42857162655445696 diff --git a/petabtests/cases/v2.0.0/pysb/0010/0010.py b/petabtests/cases/v2.0.0/pysb/0010/0010.py index bf97fc9..611b875 100644 --- a/petabtests/cases/v2.0.0/pysb/0010/0010.py +++ b/petabtests/cases/v2.0.0/pysb/0010/0010.py @@ -1,9 +1,9 @@ from inspect import cleandoc -import pandas as pd -from petab.v1.C import * +from petab.v2 import Problem +from petab.v2.C import * -from petabtests import DEFAULT_PYSB_FILE, PetabTestCase, analytical_a +from petabtests import DEFAULT_PYSB_FILE, PetabV2TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -22,54 +22,26 @@ """) # problem -------------------------------------------------------------------- +problem = Problem() -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["preeq_c0", "c0"], - "k1": [0.3, 0.8], - "B": [0, 1], - } -).set_index([CONDITION_ID]) - -measurement_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a", "obs_a"], - PREEQUILIBRATION_CONDITION_ID: ["preeq_c0", "preeq_c0"], - SIMULATION_CONDITION_ID: ["c0", "c0"], - TIME: [1, 10], - MEASUREMENT: [0.7, 0.1], - } -) +problem.add_condition("preeq_c0", k1=0.3, B=0) +problem.add_condition("c0", k1=0.8, B=1) + +problem.add_experiment("e0", TIME_PREEQUILIBRATION, "preeq_c0", 0, "c0") + +problem.add_observable("obs_a", "A", noise_formula=0.5) + +problem.add_measurement("obs_a", "e0", time=1, measurement=0.7) +problem.add_measurement("obs_a", "e0", time=10, measurement=0.1) + +problem.add_parameter("k2", lb=0, ub=10, nominal_value=0.6, estimate=True) +problem.add_mapping("A", "A_() ** compartment") +problem.add_mapping("B", "B_() ** compartment") -observable_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a"], - OBSERVABLE_FORMULA: ["A"], - NOISE_FORMULA: [0.5], - } -).set_index([OBSERVABLE_ID]) - -parameter_df = pd.DataFrame( - data={ - PARAMETER_ID: ["k2"], - PARAMETER_SCALE: [LIN], - LOWER_BOUND: [0], - UPPER_BOUND: [10], - NOMINAL_VALUE: [0.6], - ESTIMATE: [1], - } -).set_index(PARAMETER_ID) - -mapping_df = pd.DataFrame( - data={ - PETAB_ENTITY_ID: ["A", "B"], - MODEL_ENTITY_ID: ["A_() ** compartment", "B_() ** compartment"], - } -).set_index(PETAB_ENTITY_ID) # solutions ------------------------------------------------------------------ -simulation_df = measurement_df.copy(deep=True).rename( +simulation_df = problem.measurement_df.copy(deep=True).rename( columns={MEASUREMENT: SIMULATION} ) # simulate for far time point as steady state @@ -79,16 +51,17 @@ analytical_a(t, steady_state_a, 1, 0.8, 0.6) for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV2TestCase( id=10, brief="Simulation. Preequilibration. One species reinitialized, one not. " "InitialAssignment to species overridden.", description=DESCRIPTION, model=DEFAULT_PYSB_FILE, - condition_dfs=[condition_df], - observable_dfs=[observable_df], - measurement_dfs=[measurement_df], + condition_dfs=[problem.condition_df], + observable_dfs=[problem.observable_df], + measurement_dfs=[problem.measurement_df], simulation_dfs=[simulation_df], - parameter_df=parameter_df, - mapping_df=mapping_df, + parameter_df=problem.parameter_df, + mapping_df=problem.mapping_df, + experiment_dfs=[problem.experiment_df], ) diff --git a/petabtests/cases/v2.0.0/pysb/0010/_0010.yaml b/petabtests/cases/v2.0.0/pysb/0010/_0010.yaml index 0048e7e..5232ade 100644 --- a/petabtests/cases/v2.0.0/pysb/0010/_0010.yaml +++ b/petabtests/cases/v2.0.0/pysb/0010/_0010.yaml @@ -3,6 +3,8 @@ parameter_file: _parameters.tsv problems: - condition_files: - _conditions.tsv + experiment_files: + - _experiments.tsv mapping_files: - _mapping.tsv measurement_files: diff --git a/petabtests/cases/v2.0.0/pysb/0010/_conditions.tsv b/petabtests/cases/v2.0.0/pysb/0010/_conditions.tsv index 96cbc94..01d5b3d 100644 --- a/petabtests/cases/v2.0.0/pysb/0010/_conditions.tsv +++ b/petabtests/cases/v2.0.0/pysb/0010/_conditions.tsv @@ -1,3 +1,5 @@ -conditionId k1 B -preeq_c0 0.3 0 -c0 0.8 1 +conditionId targetId targetValue +preeq_c0 k1 0.3 +preeq_c0 B 0.0 +c0 k1 0.8 +c0 B 1.0 diff --git a/petabtests/cases/v2.0.0/pysb/0010/_experiments.tsv b/petabtests/cases/v2.0.0/pysb/0010/_experiments.tsv new file mode 100644 index 0000000..430d0ee --- /dev/null +++ b/petabtests/cases/v2.0.0/pysb/0010/_experiments.tsv @@ -0,0 +1,3 @@ +experimentId time conditionId +e0 -inf preeq_c0 +e0 0.0 c0 diff --git a/petabtests/cases/v2.0.0/pysb/0010/_mapping.tsv b/petabtests/cases/v2.0.0/pysb/0010/_mapping.tsv index 18782a0..2fee7f7 100644 --- a/petabtests/cases/v2.0.0/pysb/0010/_mapping.tsv +++ b/petabtests/cases/v2.0.0/pysb/0010/_mapping.tsv @@ -1,3 +1,3 @@ -petabEntityId modelEntityId -A A_() ** compartment -B B_() ** compartment +petabEntityId modelEntityId name +A A_() ** compartment +B B_() ** compartment diff --git a/petabtests/cases/v2.0.0/pysb/0010/_measurements.tsv b/petabtests/cases/v2.0.0/pysb/0010/_measurements.tsv index a9a1cb0..04fe53f 100644 --- a/petabtests/cases/v2.0.0/pysb/0010/_measurements.tsv +++ b/petabtests/cases/v2.0.0/pysb/0010/_measurements.tsv @@ -1,3 +1,3 @@ -observableId preequilibrationConditionId simulationConditionId time measurement -obs_a preeq_c0 c0 1 0.7 -obs_a preeq_c0 c0 10 0.1 +observableId experimentId time measurement observableParameters noiseParameters +obs_a e0 1.0 0.7 +obs_a e0 10.0 0.1 diff --git a/petabtests/cases/v2.0.0/pysb/0010/_observables.tsv b/petabtests/cases/v2.0.0/pysb/0010/_observables.tsv index 0b78dd1..bc320b2 100644 --- a/petabtests/cases/v2.0.0/pysb/0010/_observables.tsv +++ b/petabtests/cases/v2.0.0/pysb/0010/_observables.tsv @@ -1,2 +1,2 @@ -observableId observableFormula noiseFormula -obs_a A 0.5 +observableId observableName observableFormula noiseFormula noiseDistribution +obs_a A 0.500000000000000 normal diff --git a/petabtests/cases/v2.0.0/pysb/0010/_parameters.tsv b/petabtests/cases/v2.0.0/pysb/0010/_parameters.tsv index 72b88de..ddd6a62 100644 --- a/petabtests/cases/v2.0.0/pysb/0010/_parameters.tsv +++ b/petabtests/cases/v2.0.0/pysb/0010/_parameters.tsv @@ -1,2 +1,2 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -k2 lin 0 10 0.6 1 +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +k2 0.0 10.0 0.6 true diff --git a/petabtests/cases/v2.0.0/pysb/0010/_simulations.tsv b/petabtests/cases/v2.0.0/pysb/0010/_simulations.tsv index c467087..c1c0571 100644 --- a/petabtests/cases/v2.0.0/pysb/0010/_simulations.tsv +++ b/petabtests/cases/v2.0.0/pysb/0010/_simulations.tsv @@ -1,3 +1,3 @@ -observableId preequilibrationConditionId simulationConditionId time simulation -obs_a preeq_c0 c0 1 0.7025430017170664 -obs_a preeq_c0 c0 10 0.7142856746891086 +observableId experimentId time simulation observableParameters noiseParameters +obs_a e0 1.0 0.7025430017170664 +obs_a e0 10.0 0.7142856746891086 diff --git a/petabtests/cases/v2.0.0/pysb/0011/0011.py b/petabtests/cases/v2.0.0/pysb/0011/0011.py index 264f2bc..9959007 100644 --- a/petabtests/cases/v2.0.0/pysb/0011/0011.py +++ b/petabtests/cases/v2.0.0/pysb/0011/0011.py @@ -1,9 +1,9 @@ from inspect import cleandoc -import pandas as pd -from petab.v1.C import * - -from petabtests import PetabTestCase, analytical_a +from petab.v2 import Problem +from petab.v2.C import * +from pathlib import Path +from petabtests import PetabV2TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -19,64 +19,42 @@ """) # problem -------------------------------------------------------------------- +problem = Problem() -condition_df = pd.DataFrame(data={CONDITION_ID: ["c0"], "B": [2]}).set_index( - [CONDITION_ID] -) +problem.add_condition("c0", B=2) -measurement_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a", "obs_a"], - SIMULATION_CONDITION_ID: ["c0", "c0"], - TIME: [0, 10], - MEASUREMENT: [0.7, 0.1], - } -) +problem.add_experiment("e0", 0, "c0") + +problem.add_observable("obs_a", "A", noise_formula=0.5) -observable_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a"], - OBSERVABLE_FORMULA: ["A"], - NOISE_FORMULA: [0.5], - } -).set_index([OBSERVABLE_ID]) +problem.add_measurement("obs_a", "e0", time=0, measurement=0.7) +problem.add_measurement("obs_a", "e0", time=10, measurement=0.1) -parameter_df = pd.DataFrame( - data={ - PARAMETER_ID: ["k1", "k2"], - PARAMETER_SCALE: [LIN] * 2, - LOWER_BOUND: [0] * 2, - UPPER_BOUND: [10] * 2, - NOMINAL_VALUE: [0.8, 0.6], - ESTIMATE: [1] * 2, - } -).set_index(PARAMETER_ID) +problem.add_parameter("k1", lb=0, ub=10, nominal_value=0.8, estimate=True) +problem.add_parameter("k2", lb=0, ub=10, nominal_value=0.6, estimate=True) -mapping_df = pd.DataFrame( - data={ - PETAB_ENTITY_ID: ["A", "B"], - MODEL_ENTITY_ID: ["A_() ** compartment", "B_() ** compartment"], - } -).set_index(PETAB_ENTITY_ID) +problem.add_mapping("A", "A_() ** compartment") +problem.add_mapping("B", "B_() ** compartment") # solutions ------------------------------------------------------------------ -simulation_df = measurement_df.copy(deep=True).rename( +simulation_df = problem.measurement_df.copy(deep=True).rename( columns={MEASUREMENT: SIMULATION} ) simulation_df[SIMULATION] = [ analytical_a(t, 1, 2, 0.8, 0.6) for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV2TestCase( id=11, brief="Simulation. InitialAssignment to species overridden.", description=DESCRIPTION, - model="conversion_modified_pysb.py", - condition_dfs=[condition_df], - observable_dfs=[observable_df], - measurement_dfs=[measurement_df], + model=Path("conversion_modified_pysb.py"), + condition_dfs=[problem.condition_df], + observable_dfs=[problem.observable_df], + measurement_dfs=[problem.measurement_df], simulation_dfs=[simulation_df], - parameter_df=parameter_df, - mapping_df=mapping_df, + parameter_df=problem.parameter_df, + mapping_df=problem.mapping_df, + experiment_dfs=[problem.experiment_df], ) diff --git a/petabtests/cases/v2.0.0/pysb/0011/_0011.yaml b/petabtests/cases/v2.0.0/pysb/0011/_0011.yaml index 0048e7e..5232ade 100644 --- a/petabtests/cases/v2.0.0/pysb/0011/_0011.yaml +++ b/petabtests/cases/v2.0.0/pysb/0011/_0011.yaml @@ -3,6 +3,8 @@ parameter_file: _parameters.tsv problems: - condition_files: - _conditions.tsv + experiment_files: + - _experiments.tsv mapping_files: - _mapping.tsv measurement_files: diff --git a/petabtests/cases/v2.0.0/pysb/0011/_conditions.tsv b/petabtests/cases/v2.0.0/pysb/0011/_conditions.tsv index e765b36..5d968f9 100644 --- a/petabtests/cases/v2.0.0/pysb/0011/_conditions.tsv +++ b/petabtests/cases/v2.0.0/pysb/0011/_conditions.tsv @@ -1,2 +1,2 @@ -conditionId B -c0 2 +conditionId targetId targetValue +c0 B 2.0 diff --git a/petabtests/cases/v2.0.0/pysb/0011/_experiments.tsv b/petabtests/cases/v2.0.0/pysb/0011/_experiments.tsv new file mode 100644 index 0000000..767b390 --- /dev/null +++ b/petabtests/cases/v2.0.0/pysb/0011/_experiments.tsv @@ -0,0 +1,2 @@ +experimentId time conditionId +e0 0.0 c0 diff --git a/petabtests/cases/v2.0.0/pysb/0011/_mapping.tsv b/petabtests/cases/v2.0.0/pysb/0011/_mapping.tsv index 18782a0..2fee7f7 100644 --- a/petabtests/cases/v2.0.0/pysb/0011/_mapping.tsv +++ b/petabtests/cases/v2.0.0/pysb/0011/_mapping.tsv @@ -1,3 +1,3 @@ -petabEntityId modelEntityId -A A_() ** compartment -B B_() ** compartment +petabEntityId modelEntityId name +A A_() ** compartment +B B_() ** compartment diff --git a/petabtests/cases/v2.0.0/pysb/0011/_measurements.tsv b/petabtests/cases/v2.0.0/pysb/0011/_measurements.tsv index a497632..5d04578 100644 --- a/petabtests/cases/v2.0.0/pysb/0011/_measurements.tsv +++ b/petabtests/cases/v2.0.0/pysb/0011/_measurements.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time measurement -obs_a c0 0 0.7 -obs_a c0 10 0.1 +observableId experimentId time measurement observableParameters noiseParameters +obs_a e0 0.0 0.7 +obs_a e0 10.0 0.1 diff --git a/petabtests/cases/v2.0.0/pysb/0011/_observables.tsv b/petabtests/cases/v2.0.0/pysb/0011/_observables.tsv index 0b78dd1..bc320b2 100644 --- a/petabtests/cases/v2.0.0/pysb/0011/_observables.tsv +++ b/petabtests/cases/v2.0.0/pysb/0011/_observables.tsv @@ -1,2 +1,2 @@ -observableId observableFormula noiseFormula -obs_a A 0.5 +observableId observableName observableFormula noiseFormula noiseDistribution +obs_a A 0.500000000000000 normal diff --git a/petabtests/cases/v2.0.0/pysb/0011/_parameters.tsv b/petabtests/cases/v2.0.0/pysb/0011/_parameters.tsv index bf45aa8..852192d 100644 --- a/petabtests/cases/v2.0.0/pysb/0011/_parameters.tsv +++ b/petabtests/cases/v2.0.0/pysb/0011/_parameters.tsv @@ -1,3 +1,3 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -k1 lin 0 10 0.8 1 -k2 lin 0 10 0.6 1 +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +k1 0.0 10.0 0.8 true +k2 0.0 10.0 0.6 true diff --git a/petabtests/cases/v2.0.0/pysb/0011/_simulations.tsv b/petabtests/cases/v2.0.0/pysb/0011/_simulations.tsv index b57949d..0658e20 100644 --- a/petabtests/cases/v2.0.0/pysb/0011/_simulations.tsv +++ b/petabtests/cases/v2.0.0/pysb/0011/_simulations.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time simulation -obs_a c0 0 1.0 -obs_a c0 10 1.2857140481346516 +observableId experimentId time simulation observableParameters noiseParameters +obs_a e0 0.0 1.0 +obs_a e0 10.0 1.2857140481346516 diff --git a/petabtests/cases/v2.0.0/pysb/0012/0012.py b/petabtests/cases/v2.0.0/pysb/0012/0012.py index 7e99eee..deb8140 100644 --- a/petabtests/cases/v2.0.0/pysb/0012/0012.py +++ b/petabtests/cases/v2.0.0/pysb/0012/0012.py @@ -1,9 +1,9 @@ from inspect import cleandoc -import pandas as pd -from petab.v1.C import * +from petab.v2 import Problem +from petab.v2.C import * -from petabtests import DEFAULT_PYSB_FILE, PetabTestCase, analytical_a +from petabtests import DEFAULT_PYSB_FILE, PetabV2TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -17,45 +17,20 @@ """) # problem -------------------------------------------------------------------- +problem = Problem() -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["c0"], - "compartment": [3], - } -).set_index([CONDITION_ID]) +problem.add_condition("c0", compartment=3) +problem.add_experiment("e0", 0, "c0") +problem.add_observable("obs_a", "A", noise_formula=0.5) -measurement_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a", "obs_a"], - SIMULATION_CONDITION_ID: ["c0", "c0"], - TIME: [0, 10], - MEASUREMENT: [0.7, 0.1], - } -) - -observable_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a"], - OBSERVABLE_FORMULA: ["A"], - NOISE_FORMULA: [0.5], - } -).set_index([OBSERVABLE_ID]) - -parameter_df = pd.DataFrame( - data={ - PARAMETER_ID: ["k1", "k2"], - PARAMETER_SCALE: [LIN] * 2, - LOWER_BOUND: [0] * 2, - UPPER_BOUND: [10] * 2, - NOMINAL_VALUE: [0.8, 0.6], - ESTIMATE: [1] * 2, - } -).set_index(PARAMETER_ID) +problem.add_measurement("obs_a", "e0", time=0, measurement=0.7) +problem.add_measurement("obs_a", "e0", time=10, measurement=0.1) +problem.add_parameter("k1", lb=0, ub=10, nominal_value=0.8, estimate=True) +problem.add_parameter("k2", lb=0, ub=10, nominal_value=0.6, estimate=True) # solutions ------------------------------------------------------------------ -simulation_df = measurement_df.copy(deep=True).rename( +simulation_df = problem.measurement_df.copy(deep=True).rename( columns={MEASUREMENT: SIMULATION} ) # in the model, concentrations are used, which do not depend on the @@ -64,14 +39,15 @@ analytical_a(t, 1, 1, 0.8, 0.6) for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV2TestCase( id=12, brief="Simulation. Initial compartment size in condition table.", description=DESCRIPTION, model=DEFAULT_PYSB_FILE, - condition_dfs=[condition_df], - observable_dfs=[observable_df], - measurement_dfs=[measurement_df], + condition_dfs=[problem.condition_df], + observable_dfs=[problem.observable_df], + measurement_dfs=[problem.measurement_df], simulation_dfs=[simulation_df], - parameter_df=parameter_df, + parameter_df=problem.parameter_df, + experiment_dfs=[problem.experiment_df], ) diff --git a/petabtests/cases/v2.0.0/pysb/0012/_0012.yaml b/petabtests/cases/v2.0.0/pysb/0012/_0012.yaml index 493b4f8..4e0d35b 100644 --- a/petabtests/cases/v2.0.0/pysb/0012/_0012.yaml +++ b/petabtests/cases/v2.0.0/pysb/0012/_0012.yaml @@ -3,6 +3,8 @@ parameter_file: _parameters.tsv problems: - condition_files: - _conditions.tsv + experiment_files: + - _experiments.tsv measurement_files: - _measurements.tsv model_files: diff --git a/petabtests/cases/v2.0.0/pysb/0012/_conditions.tsv b/petabtests/cases/v2.0.0/pysb/0012/_conditions.tsv index 13666c2..2feb7bc 100644 --- a/petabtests/cases/v2.0.0/pysb/0012/_conditions.tsv +++ b/petabtests/cases/v2.0.0/pysb/0012/_conditions.tsv @@ -1,2 +1,2 @@ -conditionId compartment -c0 3 +conditionId targetId targetValue +c0 compartment 3.0 diff --git a/petabtests/cases/v2.0.0/pysb/0012/_experiments.tsv b/petabtests/cases/v2.0.0/pysb/0012/_experiments.tsv new file mode 100644 index 0000000..767b390 --- /dev/null +++ b/petabtests/cases/v2.0.0/pysb/0012/_experiments.tsv @@ -0,0 +1,2 @@ +experimentId time conditionId +e0 0.0 c0 diff --git a/petabtests/cases/v2.0.0/pysb/0012/_measurements.tsv b/petabtests/cases/v2.0.0/pysb/0012/_measurements.tsv index a497632..5d04578 100644 --- a/petabtests/cases/v2.0.0/pysb/0012/_measurements.tsv +++ b/petabtests/cases/v2.0.0/pysb/0012/_measurements.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time measurement -obs_a c0 0 0.7 -obs_a c0 10 0.1 +observableId experimentId time measurement observableParameters noiseParameters +obs_a e0 0.0 0.7 +obs_a e0 10.0 0.1 diff --git a/petabtests/cases/v2.0.0/pysb/0012/_observables.tsv b/petabtests/cases/v2.0.0/pysb/0012/_observables.tsv index 0b78dd1..bc320b2 100644 --- a/petabtests/cases/v2.0.0/pysb/0012/_observables.tsv +++ b/petabtests/cases/v2.0.0/pysb/0012/_observables.tsv @@ -1,2 +1,2 @@ -observableId observableFormula noiseFormula -obs_a A 0.5 +observableId observableName observableFormula noiseFormula noiseDistribution +obs_a A 0.500000000000000 normal diff --git a/petabtests/cases/v2.0.0/pysb/0012/_parameters.tsv b/petabtests/cases/v2.0.0/pysb/0012/_parameters.tsv index bf45aa8..852192d 100644 --- a/petabtests/cases/v2.0.0/pysb/0012/_parameters.tsv +++ b/petabtests/cases/v2.0.0/pysb/0012/_parameters.tsv @@ -1,3 +1,3 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -k1 lin 0 10 0.8 1 -k2 lin 0 10 0.6 1 +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +k1 0.0 10.0 0.8 true +k2 0.0 10.0 0.6 true diff --git a/petabtests/cases/v2.0.0/pysb/0012/_simulations.tsv b/petabtests/cases/v2.0.0/pysb/0012/_simulations.tsv index d9cb2f9..c2c8616 100644 --- a/petabtests/cases/v2.0.0/pysb/0012/_simulations.tsv +++ b/petabtests/cases/v2.0.0/pysb/0012/_simulations.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time simulation -obs_a c0 0 1.0 -obs_a c0 10 0.8571429759326742 +observableId experimentId time simulation observableParameters noiseParameters +obs_a e0 0.0 1.0 +obs_a e0 10.0 0.8571429759326742 diff --git a/petabtests/cases/v2.0.0/pysb/0013/0013.py b/petabtests/cases/v2.0.0/pysb/0013/0013.py index 1ac9e04..dcec4fc 100644 --- a/petabtests/cases/v2.0.0/pysb/0013/0013.py +++ b/petabtests/cases/v2.0.0/pysb/0013/0013.py @@ -1,9 +1,9 @@ from inspect import cleandoc -import pandas as pd -from petab.v1.C import * - -from petabtests import PetabTestCase, analytical_a +from petab.v2 import Problem +from petab.v2.C import * +from pathlib import Path +from petabtests import PetabV2TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -17,52 +17,25 @@ """) # problem -------------------------------------------------------------------- +problem = Problem() -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["c0"], - "B": ["par"], - } -).set_index([CONDITION_ID]) - -measurement_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a", "obs_a"], - SIMULATION_CONDITION_ID: ["c0", "c0"], - TIME: [0, 10], - MEASUREMENT: [0.7, 0.1], - } -) +problem.add_condition("c0", B="par") +problem.add_experiment("e0", 0, "c0") +problem.add_observable("obs_a", "A", noise_formula=0.5) -observable_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a"], - OBSERVABLE_FORMULA: ["A"], - NOISE_FORMULA: [0.5], - } -).set_index([OBSERVABLE_ID]) +problem.add_measurement("obs_a", "e0", time=0, measurement=0.7) +problem.add_measurement("obs_a", "e0", time=10, measurement=0.1) -parameter_df = pd.DataFrame( - data={ - PARAMETER_ID: ["k1", "k2", "par"], - PARAMETER_SCALE: [LIN] * 3, - LOWER_BOUND: [0] * 3, - UPPER_BOUND: [10] * 3, - NOMINAL_VALUE: [0.8, 0.6, 7], - ESTIMATE: [1] * 3, - } -).set_index(PARAMETER_ID) +problem.add_parameter("k1", lb=0, ub=10, nominal_value=0.8, estimate=True) +problem.add_parameter("k2", lb=0, ub=10, nominal_value=0.6, estimate=True) +problem.add_parameter("par", lb=0, ub=10, nominal_value=7, estimate=True) -mapping_df = pd.DataFrame( - data={ - PETAB_ENTITY_ID: ["A", "B"], - MODEL_ENTITY_ID: ["A_() ** compartment", "B_() ** compartment"], - } -).set_index(PETAB_ENTITY_ID) +problem.add_mapping("A", "A_() ** compartment") +problem.add_mapping("B", "B_() ** compartment") # solutions ------------------------------------------------------------------ -simulation_df = measurement_df.copy(deep=True).rename( +simulation_df = problem.measurement_df.copy(deep=True).rename( columns={MEASUREMENT: SIMULATION} ) # in the model, concentrations are used, which do not depend on the @@ -71,16 +44,17 @@ analytical_a(t, 1, 7, 0.8, 0.6) for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV2TestCase( id=13, brief="Simulation. Species with InitialAssignment overridden by " "parameter.", description=DESCRIPTION, - model="conversion_modified_pysb.py", - condition_dfs=[condition_df], - observable_dfs=[observable_df], - measurement_dfs=[measurement_df], + model=Path("conversion_modified_pysb.py"), + condition_dfs=[problem.condition_df], + observable_dfs=[problem.observable_df], + measurement_dfs=[problem.measurement_df], simulation_dfs=[simulation_df], - parameter_df=parameter_df, - mapping_df=mapping_df, + parameter_df=problem.parameter_df, + mapping_df=problem.mapping_df, + experiment_dfs=[problem.experiment_df], ) diff --git a/petabtests/cases/v2.0.0/pysb/0013/_0013.yaml b/petabtests/cases/v2.0.0/pysb/0013/_0013.yaml index 0048e7e..5232ade 100644 --- a/petabtests/cases/v2.0.0/pysb/0013/_0013.yaml +++ b/petabtests/cases/v2.0.0/pysb/0013/_0013.yaml @@ -3,6 +3,8 @@ parameter_file: _parameters.tsv problems: - condition_files: - _conditions.tsv + experiment_files: + - _experiments.tsv mapping_files: - _mapping.tsv measurement_files: diff --git a/petabtests/cases/v2.0.0/pysb/0013/_conditions.tsv b/petabtests/cases/v2.0.0/pysb/0013/_conditions.tsv index a26fa5d..d2e474f 100644 --- a/petabtests/cases/v2.0.0/pysb/0013/_conditions.tsv +++ b/petabtests/cases/v2.0.0/pysb/0013/_conditions.tsv @@ -1,2 +1,2 @@ -conditionId B -c0 par +conditionId targetId targetValue +c0 B par diff --git a/petabtests/cases/v2.0.0/pysb/0013/_experiments.tsv b/petabtests/cases/v2.0.0/pysb/0013/_experiments.tsv new file mode 100644 index 0000000..767b390 --- /dev/null +++ b/petabtests/cases/v2.0.0/pysb/0013/_experiments.tsv @@ -0,0 +1,2 @@ +experimentId time conditionId +e0 0.0 c0 diff --git a/petabtests/cases/v2.0.0/pysb/0013/_mapping.tsv b/petabtests/cases/v2.0.0/pysb/0013/_mapping.tsv index 18782a0..2fee7f7 100644 --- a/petabtests/cases/v2.0.0/pysb/0013/_mapping.tsv +++ b/petabtests/cases/v2.0.0/pysb/0013/_mapping.tsv @@ -1,3 +1,3 @@ -petabEntityId modelEntityId -A A_() ** compartment -B B_() ** compartment +petabEntityId modelEntityId name +A A_() ** compartment +B B_() ** compartment diff --git a/petabtests/cases/v2.0.0/pysb/0013/_measurements.tsv b/petabtests/cases/v2.0.0/pysb/0013/_measurements.tsv index a497632..5d04578 100644 --- a/petabtests/cases/v2.0.0/pysb/0013/_measurements.tsv +++ b/petabtests/cases/v2.0.0/pysb/0013/_measurements.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time measurement -obs_a c0 0 0.7 -obs_a c0 10 0.1 +observableId experimentId time measurement observableParameters noiseParameters +obs_a e0 0.0 0.7 +obs_a e0 10.0 0.1 diff --git a/petabtests/cases/v2.0.0/pysb/0013/_observables.tsv b/petabtests/cases/v2.0.0/pysb/0013/_observables.tsv index 0b78dd1..bc320b2 100644 --- a/petabtests/cases/v2.0.0/pysb/0013/_observables.tsv +++ b/petabtests/cases/v2.0.0/pysb/0013/_observables.tsv @@ -1,2 +1,2 @@ -observableId observableFormula noiseFormula -obs_a A 0.5 +observableId observableName observableFormula noiseFormula noiseDistribution +obs_a A 0.500000000000000 normal diff --git a/petabtests/cases/v2.0.0/pysb/0013/_parameters.tsv b/petabtests/cases/v2.0.0/pysb/0013/_parameters.tsv index bd50c04..cda282f 100644 --- a/petabtests/cases/v2.0.0/pysb/0013/_parameters.tsv +++ b/petabtests/cases/v2.0.0/pysb/0013/_parameters.tsv @@ -1,4 +1,4 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -k1 lin 0 10 0.8 1 -k2 lin 0 10 0.6 1 -par lin 0 10 7.0 1 +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +k1 0.0 10.0 0.8 true +k2 0.0 10.0 0.6 true +par 0.0 10.0 7.0 true diff --git a/petabtests/cases/v2.0.0/pysb/0013/_simulations.tsv b/petabtests/cases/v2.0.0/pysb/0013/_simulations.tsv index 172fa2b..181b66e 100644 --- a/petabtests/cases/v2.0.0/pysb/0013/_simulations.tsv +++ b/petabtests/cases/v2.0.0/pysb/0013/_simulations.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time simulation -obs_a c0 0 1.0 -obs_a c0 10 3.4285694091445396 +observableId experimentId time simulation observableParameters noiseParameters +obs_a e0 0.0 1.0 +obs_a e0 10.0 3.4285694091445396 diff --git a/petabtests/cases/v2.0.0/pysb/0014/0014.py b/petabtests/cases/v2.0.0/pysb/0014/0014.py index 7350532..2a3b7d3 100644 --- a/petabtests/cases/v2.0.0/pysb/0014/0014.py +++ b/petabtests/cases/v2.0.0/pysb/0014/0014.py @@ -1,9 +1,9 @@ from inspect import cleandoc -import pandas as pd -from petab.v1.C import * +from petab.v2 import Problem +from petab.v2.C import * -from petabtests import DEFAULT_PYSB_FILE, PetabTestCase, analytical_a +from petabtests import DEFAULT_PYSB_FILE, PetabV2TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -17,59 +17,38 @@ """) # problem -------------------------------------------------------------------- - -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["c0"], - } -).set_index([CONDITION_ID]) - -measurement_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a", "obs_a"], - SIMULATION_CONDITION_ID: ["c0", "c0"], - TIME: [0, 10], - MEASUREMENT: [0.7, 0.1], - NOISE_PARAMETERS: ["0.5;2", "0.5;2"], - } +problem = Problem() +problem.add_observable( + "obs_a", "A", noise_formula="noiseParameter1_obs_a + noiseParameter2_obs_a" ) - -observable_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a"], - OBSERVABLE_FORMULA: ["A"], - NOISE_FORMULA: ["noiseParameter1_obs_a + noiseParameter2_obs_a"], - } -).set_index([OBSERVABLE_ID]) - -parameter_df = pd.DataFrame( - data={ - PARAMETER_ID: ["a0", "b0", "k1", "k2"], - PARAMETER_SCALE: [LIN] * 4, - LOWER_BOUND: [0] * 4, - UPPER_BOUND: [10] * 4, - NOMINAL_VALUE: [1, 0, 0.8, 0.6], - ESTIMATE: [1] * 4, - } -).set_index(PARAMETER_ID) +problem.add_measurement( + "obs_a", "", time=0, measurement=0.7, noise_parameters=(0.5, 2) +) +problem.add_measurement( + "obs_a", "", time=10, measurement=0.1, noise_parameters=(0.5, 2) +) +problem.add_parameter("a0", lb=0, ub=10, nominal_value=1, estimate=True) +problem.add_parameter("b0", lb=0, ub=10, nominal_value=0, estimate=True) +problem.add_parameter("k1", lb=0, ub=10, nominal_value=0.8, estimate=True) +problem.add_parameter("k2", lb=0, ub=10, nominal_value=0.6, estimate=True) # solutions ------------------------------------------------------------------ -simulation_df = measurement_df.copy(deep=True).rename( +simulation_df = problem.measurement_df.copy(deep=True).rename( columns={MEASUREMENT: SIMULATION} ) simulation_df[SIMULATION] = [ analytical_a(t, 1, 0, 0.8, 0.6) for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV2TestCase( id=14, brief="Simulation. Multiple numeric noise parameter overrides.", description=DESCRIPTION, model=DEFAULT_PYSB_FILE, - condition_dfs=[condition_df], - observable_dfs=[observable_df], - measurement_dfs=[measurement_df], + condition_dfs=[problem.condition_df], + observable_dfs=[problem.observable_df], + measurement_dfs=[problem.measurement_df], simulation_dfs=[simulation_df], - parameter_df=parameter_df, + parameter_df=problem.parameter_df, ) diff --git a/petabtests/cases/v2.0.0/pysb/0014/_0014.yaml b/petabtests/cases/v2.0.0/pysb/0014/_0014.yaml index 493b4f8..df06036 100644 --- a/petabtests/cases/v2.0.0/pysb/0014/_0014.yaml +++ b/petabtests/cases/v2.0.0/pysb/0014/_0014.yaml @@ -3,6 +3,7 @@ parameter_file: _parameters.tsv problems: - condition_files: - _conditions.tsv + experiment_files: [] measurement_files: - _measurements.tsv model_files: diff --git a/petabtests/cases/v2.0.0/pysb/0014/_conditions.tsv b/petabtests/cases/v2.0.0/pysb/0014/_conditions.tsv index f15e327..730c58d 100644 --- a/petabtests/cases/v2.0.0/pysb/0014/_conditions.tsv +++ b/petabtests/cases/v2.0.0/pysb/0014/_conditions.tsv @@ -1,2 +1 @@ -conditionId -c0 +conditionId targetId targetValue diff --git a/petabtests/cases/v2.0.0/pysb/0014/_measurements.tsv b/petabtests/cases/v2.0.0/pysb/0014/_measurements.tsv index 980766d..08a435a 100644 --- a/petabtests/cases/v2.0.0/pysb/0014/_measurements.tsv +++ b/petabtests/cases/v2.0.0/pysb/0014/_measurements.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time measurement noiseParameters -obs_a c0 0 0.7 0.5;2 -obs_a c0 10 0.1 0.5;2 +observableId experimentId time measurement observableParameters noiseParameters +obs_a 0.0 0.7 0.500000000000000;2 +obs_a 10.0 0.1 0.500000000000000;2 diff --git a/petabtests/cases/v2.0.0/pysb/0014/_observables.tsv b/petabtests/cases/v2.0.0/pysb/0014/_observables.tsv index e230cc4..ca42ead 100644 --- a/petabtests/cases/v2.0.0/pysb/0014/_observables.tsv +++ b/petabtests/cases/v2.0.0/pysb/0014/_observables.tsv @@ -1,2 +1,2 @@ -observableId observableFormula noiseFormula -obs_a A noiseParameter1_obs_a + noiseParameter2_obs_a +observableId observableName observableFormula noiseFormula noiseDistribution +obs_a A noiseParameter1_obs_a + noiseParameter2_obs_a normal diff --git a/petabtests/cases/v2.0.0/pysb/0014/_parameters.tsv b/petabtests/cases/v2.0.0/pysb/0014/_parameters.tsv index 8c1e5cb..368a25c 100644 --- a/petabtests/cases/v2.0.0/pysb/0014/_parameters.tsv +++ b/petabtests/cases/v2.0.0/pysb/0014/_parameters.tsv @@ -1,5 +1,5 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -a0 lin 0 10 1.0 1 -b0 lin 0 10 0.0 1 -k1 lin 0 10 0.8 1 -k2 lin 0 10 0.6 1 +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +a0 0.0 10.0 1.0 true +b0 0.0 10.0 0.0 true +k1 0.0 10.0 0.8 true +k2 0.0 10.0 0.6 true diff --git a/petabtests/cases/v2.0.0/pysb/0014/_simulations.tsv b/petabtests/cases/v2.0.0/pysb/0014/_simulations.tsv index be85c82..b22efbf 100644 --- a/petabtests/cases/v2.0.0/pysb/0014/_simulations.tsv +++ b/petabtests/cases/v2.0.0/pysb/0014/_simulations.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time simulation noiseParameters -obs_a c0 0 1.0 0.5;2 -obs_a c0 10 0.42857190373069665 0.5;2 +observableId experimentId time simulation observableParameters noiseParameters +obs_a 0.0 1.0 0.500000000000000;2 +obs_a 10.0 0.42857190373069665 0.500000000000000;2 diff --git a/petabtests/cases/v2.0.0/pysb/0015/0015.py b/petabtests/cases/v2.0.0/pysb/0015/0015.py index 78bd6d2..9bd4f92 100644 --- a/petabtests/cases/v2.0.0/pysb/0015/0015.py +++ b/petabtests/cases/v2.0.0/pysb/0015/0015.py @@ -1,9 +1,9 @@ from inspect import cleandoc -import pandas as pd -from petab.v1.C import * +from petab.v2 import Problem +from petab.v2.C import * -from petabtests import DEFAULT_PYSB_FILE, PetabTestCase, analytical_a +from petabtests import DEFAULT_PYSB_FILE, PetabV2TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -17,59 +17,37 @@ """) # problem -------------------------------------------------------------------- - -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["c0"], - } -).set_index([CONDITION_ID]) - -measurement_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a", "obs_a"], - SIMULATION_CONDITION_ID: ["c0", "c0"], - TIME: [0, 10], - MEASUREMENT: [0.7, 0.1], - NOISE_PARAMETERS: ["noise", "noise"], - } +problem = Problem() +problem.add_observable("obs_a", "A", noise_formula="noiseParameter1_obs_a") +problem.add_measurement( + "obs_a", "", time=0, measurement=0.7, noise_parameters=("noise",) ) - -observable_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a"], - OBSERVABLE_FORMULA: ["A"], - NOISE_FORMULA: ["noiseParameter1_obs_a"], - } -).set_index([OBSERVABLE_ID]) - -parameter_df = pd.DataFrame( - data={ - PARAMETER_ID: ["a0", "b0", "k1", "k2", "noise"], - PARAMETER_SCALE: [LIN] * 5, - LOWER_BOUND: [0] * 5, - UPPER_BOUND: [10] * 5, - NOMINAL_VALUE: [1, 0, 0.8, 0.6, 5], - ESTIMATE: [1] * 5, - } -).set_index(PARAMETER_ID) +problem.add_measurement( + "obs_a", "", time=10, measurement=0.1, noise_parameters=("noise",) +) +problem.add_parameter("a0", lb=0, ub=10, nominal_value=1, estimate=True) +problem.add_parameter("b0", lb=0, ub=10, nominal_value=0, estimate=True) +problem.add_parameter("k1", lb=0, ub=10, nominal_value=0.8, estimate=True) +problem.add_parameter("k2", lb=0, ub=10, nominal_value=0.6, estimate=True) +problem.add_parameter("noise", lb=0, ub=10, nominal_value=5, estimate=True) # solutions ------------------------------------------------------------------ -simulation_df = measurement_df.copy(deep=True).rename( +simulation_df = problem.measurement_df.copy(deep=True).rename( columns={MEASUREMENT: SIMULATION} ) simulation_df[SIMULATION] = [ analytical_a(t, 1, 0, 0.8, 0.6) for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV2TestCase( id=15, brief="Simulation. Single parametric noise parameter override.", description=DESCRIPTION, model=DEFAULT_PYSB_FILE, - condition_dfs=[condition_df], - observable_dfs=[observable_df], - measurement_dfs=[measurement_df], + condition_dfs=[problem.condition_df], + observable_dfs=[problem.observable_df], + measurement_dfs=[problem.measurement_df], simulation_dfs=[simulation_df], - parameter_df=parameter_df, + parameter_df=problem.parameter_df, ) diff --git a/petabtests/cases/v2.0.0/pysb/0015/_0015.yaml b/petabtests/cases/v2.0.0/pysb/0015/_0015.yaml index 493b4f8..df06036 100644 --- a/petabtests/cases/v2.0.0/pysb/0015/_0015.yaml +++ b/petabtests/cases/v2.0.0/pysb/0015/_0015.yaml @@ -3,6 +3,7 @@ parameter_file: _parameters.tsv problems: - condition_files: - _conditions.tsv + experiment_files: [] measurement_files: - _measurements.tsv model_files: diff --git a/petabtests/cases/v2.0.0/pysb/0015/_conditions.tsv b/petabtests/cases/v2.0.0/pysb/0015/_conditions.tsv index f15e327..730c58d 100644 --- a/petabtests/cases/v2.0.0/pysb/0015/_conditions.tsv +++ b/petabtests/cases/v2.0.0/pysb/0015/_conditions.tsv @@ -1,2 +1 @@ -conditionId -c0 +conditionId targetId targetValue diff --git a/petabtests/cases/v2.0.0/pysb/0015/_measurements.tsv b/petabtests/cases/v2.0.0/pysb/0015/_measurements.tsv index 687cf08..53c76e2 100644 --- a/petabtests/cases/v2.0.0/pysb/0015/_measurements.tsv +++ b/petabtests/cases/v2.0.0/pysb/0015/_measurements.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time measurement noiseParameters -obs_a c0 0 0.7 noise -obs_a c0 10 0.1 noise +observableId experimentId time measurement observableParameters noiseParameters +obs_a 0.0 0.7 noise +obs_a 10.0 0.1 noise diff --git a/petabtests/cases/v2.0.0/pysb/0015/_observables.tsv b/petabtests/cases/v2.0.0/pysb/0015/_observables.tsv index 1f529dc..34394ce 100644 --- a/petabtests/cases/v2.0.0/pysb/0015/_observables.tsv +++ b/petabtests/cases/v2.0.0/pysb/0015/_observables.tsv @@ -1,2 +1,2 @@ -observableId observableFormula noiseFormula -obs_a A noiseParameter1_obs_a +observableId observableName observableFormula noiseFormula noiseDistribution +obs_a A noiseParameter1_obs_a normal diff --git a/petabtests/cases/v2.0.0/pysb/0015/_parameters.tsv b/petabtests/cases/v2.0.0/pysb/0015/_parameters.tsv index 46c9b55..c51fe47 100644 --- a/petabtests/cases/v2.0.0/pysb/0015/_parameters.tsv +++ b/petabtests/cases/v2.0.0/pysb/0015/_parameters.tsv @@ -1,6 +1,6 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -a0 lin 0 10 1.0 1 -b0 lin 0 10 0.0 1 -k1 lin 0 10 0.8 1 -k2 lin 0 10 0.6 1 -noise lin 0 10 5.0 1 +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +a0 0.0 10.0 1.0 true +b0 0.0 10.0 0.0 true +k1 0.0 10.0 0.8 true +k2 0.0 10.0 0.6 true +noise 0.0 10.0 5.0 true diff --git a/petabtests/cases/v2.0.0/pysb/0015/_simulations.tsv b/petabtests/cases/v2.0.0/pysb/0015/_simulations.tsv index 1bb82af..9e8d316 100644 --- a/petabtests/cases/v2.0.0/pysb/0015/_simulations.tsv +++ b/petabtests/cases/v2.0.0/pysb/0015/_simulations.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time simulation noiseParameters -obs_a c0 0 1.0 noise -obs_a c0 10 0.42857190373069665 noise +observableId experimentId time simulation observableParameters noiseParameters +obs_a 0.0 1.0 noise +obs_a 10.0 0.42857190373069665 noise diff --git a/petabtests/cases/v2.0.0/pysb/0016/0016.py b/petabtests/cases/v2.0.0/pysb/0016/0016.py index 76b561c..ba074ff 100644 --- a/petabtests/cases/v2.0.0/pysb/0016/0016.py +++ b/petabtests/cases/v2.0.0/pysb/0016/0016.py @@ -1,11 +1,11 @@ from inspect import cleandoc -import pandas as pd -from petab.v1.C import * +from petab.v2 import Problem +from petab.v2.C import * from petabtests import ( DEFAULT_PYSB_FILE, - PetabTestCase, + PetabV2TestCase, analytical_a, analytical_b, ) @@ -25,45 +25,19 @@ mass action kinetics. """) # problem -------------------------------------------------------------------- - -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["c0"], - } -).set_index([CONDITION_ID]) - -measurement_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a", "obs_b"], - SIMULATION_CONDITION_ID: ["c0", "c0"], - TIME: [10, 10], - MEASUREMENT: [0.2, 0.8], - } -) - -observable_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a", "obs_b"], - OBSERVABLE_FORMULA: ["A", "B"], - OBSERVABLE_TRANSFORMATION: [LIN, LOG], - NOISE_FORMULA: [0.5, 0.7], - } -).set_index([OBSERVABLE_ID]) - -parameter_df = pd.DataFrame( - data={ - PARAMETER_ID: ["a0", "b0", "k1", "k2"], - PARAMETER_SCALE: [LIN] * 4, - LOWER_BOUND: [0] * 4, - UPPER_BOUND: [10] * 4, - NOMINAL_VALUE: [1, 0, 0.8, 0.6], - ESTIMATE: [1] * 4, - } -).set_index(PARAMETER_ID) +problem = Problem() +problem.add_observable("obs_a", "A", noise_formula=0.5, transform=LIN) +problem.add_observable("obs_b", "B", noise_formula=0.7, transform=LOG) +problem.add_measurement("obs_a", "", time=10, measurement=0.2) +problem.add_measurement("obs_b", "", time=10, measurement=0.8) +problem.add_parameter("a0", lb=0, ub=10, nominal_value=1, estimate=True) +problem.add_parameter("b0", lb=0, ub=10, nominal_value=0, estimate=True) +problem.add_parameter("k1", lb=0, ub=10, nominal_value=0.8, estimate=True) +problem.add_parameter("k2", lb=0, ub=10, nominal_value=0.6, estimate=True) # solutions ------------------------------------------------------------------ -simulation_df = measurement_df.copy(deep=True).rename( +simulation_df = problem.measurement_df.copy(deep=True).rename( columns={MEASUREMENT: SIMULATION} ) simulation_df[SIMULATION] = [ @@ -71,14 +45,14 @@ analytical_b(10, 1, 0, 0.8, 0.6), ] -case = PetabTestCase( +case = PetabV2TestCase( id=16, brief="Simulation. Observable transformation log.", description=DESCRIPTION, model=DEFAULT_PYSB_FILE, - condition_dfs=[condition_df], - observable_dfs=[observable_df], - measurement_dfs=[measurement_df], + condition_dfs=[problem.condition_df], + observable_dfs=[problem.observable_df], + measurement_dfs=[problem.measurement_df], simulation_dfs=[simulation_df], - parameter_df=parameter_df, + parameter_df=problem.parameter_df, ) diff --git a/petabtests/cases/v2.0.0/pysb/0016/_0016.yaml b/petabtests/cases/v2.0.0/pysb/0016/_0016.yaml index 493b4f8..df06036 100644 --- a/petabtests/cases/v2.0.0/pysb/0016/_0016.yaml +++ b/petabtests/cases/v2.0.0/pysb/0016/_0016.yaml @@ -3,6 +3,7 @@ parameter_file: _parameters.tsv problems: - condition_files: - _conditions.tsv + experiment_files: [] measurement_files: - _measurements.tsv model_files: diff --git a/petabtests/cases/v2.0.0/pysb/0016/_0016_solution.yaml b/petabtests/cases/v2.0.0/pysb/0016/_0016_solution.yaml index 3b04b55..ce7e5e0 100644 --- a/petabtests/cases/v2.0.0/pysb/0016/_0016_solution.yaml +++ b/petabtests/cases/v2.0.0/pysb/0016/_0016_solution.yaml @@ -1,5 +1,5 @@ -chi2: 0.4400296965992 -llh: -0.78492623889606 +chi2: 0.31560314473106 +llh: -0.9458565142762 simulation_files: - _simulations.tsv tol_chi2: 0.001 diff --git a/petabtests/cases/v2.0.0/pysb/0016/_conditions.tsv b/petabtests/cases/v2.0.0/pysb/0016/_conditions.tsv index f15e327..730c58d 100644 --- a/petabtests/cases/v2.0.0/pysb/0016/_conditions.tsv +++ b/petabtests/cases/v2.0.0/pysb/0016/_conditions.tsv @@ -1,2 +1 @@ -conditionId -c0 +conditionId targetId targetValue diff --git a/petabtests/cases/v2.0.0/pysb/0016/_measurements.tsv b/petabtests/cases/v2.0.0/pysb/0016/_measurements.tsv index 00c596e..6196e74 100644 --- a/petabtests/cases/v2.0.0/pysb/0016/_measurements.tsv +++ b/petabtests/cases/v2.0.0/pysb/0016/_measurements.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time measurement -obs_a c0 10 0.2 -obs_b c0 10 0.8 +observableId experimentId time measurement observableParameters noiseParameters +obs_a 10.0 0.2 +obs_b 10.0 0.8 diff --git a/petabtests/cases/v2.0.0/pysb/0016/_observables.tsv b/petabtests/cases/v2.0.0/pysb/0016/_observables.tsv index 6d90598..5fc54be 100644 --- a/petabtests/cases/v2.0.0/pysb/0016/_observables.tsv +++ b/petabtests/cases/v2.0.0/pysb/0016/_observables.tsv @@ -1,3 +1,3 @@ -observableId observableFormula observableTransformation noiseFormula -obs_a A lin 0.5 -obs_b B log 0.7 +observableId observableName observableFormula noiseFormula noiseDistribution transform +obs_a A 0.500000000000000 normal lin +obs_b B 0.700000000000000 normal log diff --git a/petabtests/cases/v2.0.0/pysb/0016/_parameters.tsv b/petabtests/cases/v2.0.0/pysb/0016/_parameters.tsv index 8c1e5cb..368a25c 100644 --- a/petabtests/cases/v2.0.0/pysb/0016/_parameters.tsv +++ b/petabtests/cases/v2.0.0/pysb/0016/_parameters.tsv @@ -1,5 +1,5 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -a0 lin 0 10 1.0 1 -b0 lin 0 10 0.0 1 -k1 lin 0 10 0.8 1 -k2 lin 0 10 0.6 1 +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +a0 0.0 10.0 1.0 true +b0 0.0 10.0 0.0 true +k1 0.0 10.0 0.8 true +k2 0.0 10.0 0.6 true diff --git a/petabtests/cases/v2.0.0/pysb/0016/_simulations.tsv b/petabtests/cases/v2.0.0/pysb/0016/_simulations.tsv index a054455..4f681b5 100644 --- a/petabtests/cases/v2.0.0/pysb/0016/_simulations.tsv +++ b/petabtests/cases/v2.0.0/pysb/0016/_simulations.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time simulation -obs_a c0 10 0.42857190373069665 -obs_b c0 10 0.5714280962693035 +observableId experimentId time simulation observableParameters noiseParameters +obs_a 10.0 0.42857190373069665 +obs_b 10.0 0.5714280962693035 diff --git a/petabtests/cases/v2.0.0/pysb/0017/0017.py b/petabtests/cases/v2.0.0/pysb/0017/0017.py index a465be7..e3808e5 100644 --- a/petabtests/cases/v2.0.0/pysb/0017/0017.py +++ b/petabtests/cases/v2.0.0/pysb/0017/0017.py @@ -1,11 +1,11 @@ from inspect import cleandoc -import pandas as pd -from petab.v1.C import * +from petab.v2 import Problem +from petab.v2.C import * from petabtests import ( DEFAULT_PYSB_FILE, - PetabTestCase, + PetabV2TestCase, analytical_a, analytical_b, ) @@ -31,56 +31,22 @@ """) # problem -------------------------------------------------------------------- - - -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["preeq_c0", "c0"], - "k1": [0.3, 0.8], - "B": [2.0, "NaN"], - "A": [0, 1], - } -).set_index([CONDITION_ID]) - -measurement_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a", "obs_a"], - PREEQUILIBRATION_CONDITION_ID: ["preeq_c0", "preeq_c0"], - SIMULATION_CONDITION_ID: ["c0", "c0"], - TIME: [1, 10], - MEASUREMENT: [0.7, 0.1], - } +problem = Problem() +problem.add_condition("preeq_c0", k1=0.3, B=2.0, A=0) +problem.add_condition("c0", k1=0.8, A=1) +problem.add_experiment("e0", TIME_PREEQUILIBRATION, "preeq_c0", 0, "c0") +problem.add_observable("obs_a", "A", noise_formula=0.5) +problem.add_measurement("obs_a", "e0", time=1, measurement=0.7) +problem.add_measurement("obs_a", "e0", time=10, measurement=0.1) +problem.add_parameter( + "k2", lb=0, ub=10, nominal_value=0.6, scale=LIN, estimate=True ) - -observable_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a"], - OBSERVABLE_FORMULA: ["A"], - NOISE_FORMULA: [0.5], - } -).set_index([OBSERVABLE_ID]) - -parameter_df = pd.DataFrame( - data={ - PARAMETER_ID: ["k2"], - PARAMETER_SCALE: [LIN], - LOWER_BOUND: [0], - UPPER_BOUND: [10], - NOMINAL_VALUE: [0.6], - ESTIMATE: [1], - } -).set_index(PARAMETER_ID) - -mapping_df = pd.DataFrame( - data={ - PETAB_ENTITY_ID: ["A", "B"], - MODEL_ENTITY_ID: ["A_() ** compartment", "B_() ** compartment"], - } -).set_index(PETAB_ENTITY_ID) +problem.add_mapping("A", "A_() ** compartment") +problem.add_mapping("B", "B_() ** compartment") # solutions ------------------------------------------------------------------ -simulation_df = measurement_df.copy(deep=True).rename( +simulation_df = problem.measurement_df.copy(deep=True).rename( columns={MEASUREMENT: SIMULATION} ) # simulate for far time point as steady state @@ -90,16 +56,17 @@ analytical_a(t, 1, steady_state_b, 0.8, 0.6) for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV2TestCase( id=17, brief="Simulation. Preequilibration. One species reinitialized, one not " "(NaN in condition table). InitialAssignment to species overridden.", description=DESCRIPTION, model=DEFAULT_PYSB_FILE, - condition_dfs=[condition_df], - observable_dfs=[observable_df], - measurement_dfs=[measurement_df], + condition_dfs=[problem.condition_df], + observable_dfs=[problem.observable_df], + measurement_dfs=[problem.measurement_df], simulation_dfs=[simulation_df], - parameter_df=parameter_df, - mapping_df=mapping_df, + parameter_df=problem.parameter_df, + mapping_df=problem.mapping_df, + experiment_dfs=[problem.experiment_df], ) diff --git a/petabtests/cases/v2.0.0/pysb/0017/_0017.yaml b/petabtests/cases/v2.0.0/pysb/0017/_0017.yaml index 0048e7e..5232ade 100644 --- a/petabtests/cases/v2.0.0/pysb/0017/_0017.yaml +++ b/petabtests/cases/v2.0.0/pysb/0017/_0017.yaml @@ -3,6 +3,8 @@ parameter_file: _parameters.tsv problems: - condition_files: - _conditions.tsv + experiment_files: + - _experiments.tsv mapping_files: - _mapping.tsv measurement_files: diff --git a/petabtests/cases/v2.0.0/pysb/0017/_conditions.tsv b/petabtests/cases/v2.0.0/pysb/0017/_conditions.tsv index 18cccad..934e234 100644 --- a/petabtests/cases/v2.0.0/pysb/0017/_conditions.tsv +++ b/petabtests/cases/v2.0.0/pysb/0017/_conditions.tsv @@ -1,3 +1,6 @@ -conditionId k1 B A -preeq_c0 0.3 2.0 0 -c0 0.8 NaN 1 +conditionId targetId targetValue +preeq_c0 k1 0.3 +preeq_c0 B 2.0 +preeq_c0 A 0.0 +c0 k1 0.8 +c0 A 1.0 diff --git a/petabtests/cases/v2.0.0/pysb/0017/_experiments.tsv b/petabtests/cases/v2.0.0/pysb/0017/_experiments.tsv new file mode 100644 index 0000000..430d0ee --- /dev/null +++ b/petabtests/cases/v2.0.0/pysb/0017/_experiments.tsv @@ -0,0 +1,3 @@ +experimentId time conditionId +e0 -inf preeq_c0 +e0 0.0 c0 diff --git a/petabtests/cases/v2.0.0/pysb/0017/_mapping.tsv b/petabtests/cases/v2.0.0/pysb/0017/_mapping.tsv index 18782a0..2fee7f7 100644 --- a/petabtests/cases/v2.0.0/pysb/0017/_mapping.tsv +++ b/petabtests/cases/v2.0.0/pysb/0017/_mapping.tsv @@ -1,3 +1,3 @@ -petabEntityId modelEntityId -A A_() ** compartment -B B_() ** compartment +petabEntityId modelEntityId name +A A_() ** compartment +B B_() ** compartment diff --git a/petabtests/cases/v2.0.0/pysb/0017/_measurements.tsv b/petabtests/cases/v2.0.0/pysb/0017/_measurements.tsv index a9a1cb0..04fe53f 100644 --- a/petabtests/cases/v2.0.0/pysb/0017/_measurements.tsv +++ b/petabtests/cases/v2.0.0/pysb/0017/_measurements.tsv @@ -1,3 +1,3 @@ -observableId preequilibrationConditionId simulationConditionId time measurement -obs_a preeq_c0 c0 1 0.7 -obs_a preeq_c0 c0 10 0.1 +observableId experimentId time measurement observableParameters noiseParameters +obs_a e0 1.0 0.7 +obs_a e0 10.0 0.1 diff --git a/petabtests/cases/v2.0.0/pysb/0017/_observables.tsv b/petabtests/cases/v2.0.0/pysb/0017/_observables.tsv index 0b78dd1..bc320b2 100644 --- a/petabtests/cases/v2.0.0/pysb/0017/_observables.tsv +++ b/petabtests/cases/v2.0.0/pysb/0017/_observables.tsv @@ -1,2 +1,2 @@ -observableId observableFormula noiseFormula -obs_a A 0.5 +observableId observableName observableFormula noiseFormula noiseDistribution +obs_a A 0.500000000000000 normal diff --git a/petabtests/cases/v2.0.0/pysb/0017/_parameters.tsv b/petabtests/cases/v2.0.0/pysb/0017/_parameters.tsv index 72b88de..46522bb 100644 --- a/petabtests/cases/v2.0.0/pysb/0017/_parameters.tsv +++ b/petabtests/cases/v2.0.0/pysb/0017/_parameters.tsv @@ -1,2 +1,2 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -k2 lin 0 10 0.6 1 +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters parameterScale +k2 0.0 10.0 0.6 true lin diff --git a/petabtests/cases/v2.0.0/pysb/0017/_simulations.tsv b/petabtests/cases/v2.0.0/pysb/0017/_simulations.tsv index 8155bb8..f48802b 100644 --- a/petabtests/cases/v2.0.0/pysb/0017/_simulations.tsv +++ b/petabtests/cases/v2.0.0/pysb/0017/_simulations.tsv @@ -1,3 +1,3 @@ -observableId preequilibrationConditionId simulationConditionId time simulation -obs_a preeq_c0 c0 1 0.7847419896976019 -obs_a preeq_c0 c0 10 0.7142859518653484 +observableId experimentId time simulation observableParameters noiseParameters +obs_a e0 1.0 0.7847419896976019 +obs_a e0 10.0 0.7142859518653484 diff --git a/petabtests/cases/v2.0.0/pysb/0018/0018.py b/petabtests/cases/v2.0.0/pysb/0018/0018.py index ee32ec7..2707fdf 100644 --- a/petabtests/cases/v2.0.0/pysb/0018/0018.py +++ b/petabtests/cases/v2.0.0/pysb/0018/0018.py @@ -1,9 +1,9 @@ from inspect import cleandoc -import pandas as pd -from petab.v1.C import * +from petab.v2 import Problem +from petab.v2.C import * -from petabtests import DEFAULT_PYSB_FILE, PetabTestCase, analytical_a +from petabtests import DEFAULT_PYSB_FILE, PetabV2TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -17,73 +17,42 @@ """) # problem -------------------------------------------------------------------- - -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["c0"], - } -).set_index([CONDITION_ID]) - -measurement_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a", "obs_a"], - SIMULATION_CONDITION_ID: ["c0", "c0"], - TIME: [0, 10], - MEASUREMENT: [0.7, 0.1], - } +problem = Problem() +problem.add_observable("obs_a", "A", noise_formula=0.5) +problem.add_measurement("obs_a", "", time=0, measurement=0.7) +problem.add_measurement("obs_a", "", time=10, measurement=0.1) +problem.add_parameter( + "maps_to_a0", lb=0, ub=10, nominal_value=1, estimate=True ) +problem.add_parameter("b0", lb=0, ub=10, nominal_value=0, estimate=True) +problem.add_parameter( + "maps_to_k1", lb=0, ub=10, nominal_value=0.8, estimate=True +) +problem.add_parameter("k2", lb=0, ub=10, nominal_value=0.6, estimate=True) -observable_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a"], - OBSERVABLE_FORMULA: ["A"], - NOISE_FORMULA: [0.5], - } -).set_index([OBSERVABLE_ID]) - -parameter_df = pd.DataFrame( - data={ - PARAMETER_ID: ["maps_to_a0", "b0", "maps_to_k1", "k2"], - PARAMETER_SCALE: [LIN] * 4, - LOWER_BOUND: [0] * 4, - UPPER_BOUND: [10] * 4, - NOMINAL_VALUE: [1, 0, 0.8, 0.6], - ESTIMATE: [1] * 4, - } -).set_index(PARAMETER_ID) - -mapping_df = pd.DataFrame( - data={ - PETAB_ENTITY_ID: [ - "maps_to_a0", - "maps_to_b0", - "maps_to_k1", - "maps_to_k2", - ], - MODEL_ENTITY_ID: ["a0", "b0", "k1", "k2"], - } -).set_index(PETAB_ENTITY_ID) - +problem.add_mapping("maps_to_a0", "a0") +problem.add_mapping("maps_to_b0", "b0") +problem.add_mapping("maps_to_k1", "k1") +problem.add_mapping("maps_to_k2", "k2") # solutions ------------------------------------------------------------------ -simulation_df = measurement_df.copy(deep=True).rename( +simulation_df = problem.measurement_df.copy(deep=True).rename( columns={MEASUREMENT: SIMULATION} ) simulation_df[SIMULATION] = [ analytical_a(t, 1, 0, 0.8, 0.6) for t in simulation_df[TIME] ] - -case = PetabTestCase( +case = PetabV2TestCase( id=18, brief="Parameters in mapping table.", description=DESCRIPTION, model=DEFAULT_PYSB_FILE, - condition_dfs=[condition_df], - observable_dfs=[observable_df], - measurement_dfs=[measurement_df], + condition_dfs=[problem.condition_df], + observable_dfs=[problem.observable_df], + measurement_dfs=[problem.measurement_df], simulation_dfs=[simulation_df], - parameter_df=parameter_df, - mapping_df=mapping_df, + parameter_df=problem.parameter_df, + mapping_df=problem.mapping_df, ) diff --git a/petabtests/cases/v2.0.0/pysb/0018/_0018.yaml b/petabtests/cases/v2.0.0/pysb/0018/_0018.yaml index 0048e7e..0230253 100644 --- a/petabtests/cases/v2.0.0/pysb/0018/_0018.yaml +++ b/petabtests/cases/v2.0.0/pysb/0018/_0018.yaml @@ -3,6 +3,7 @@ parameter_file: _parameters.tsv problems: - condition_files: - _conditions.tsv + experiment_files: [] mapping_files: - _mapping.tsv measurement_files: diff --git a/petabtests/cases/v2.0.0/pysb/0018/_conditions.tsv b/petabtests/cases/v2.0.0/pysb/0018/_conditions.tsv index f15e327..730c58d 100644 --- a/petabtests/cases/v2.0.0/pysb/0018/_conditions.tsv +++ b/petabtests/cases/v2.0.0/pysb/0018/_conditions.tsv @@ -1,2 +1 @@ -conditionId -c0 +conditionId targetId targetValue diff --git a/petabtests/cases/v2.0.0/pysb/0018/_mapping.tsv b/petabtests/cases/v2.0.0/pysb/0018/_mapping.tsv index 9f761f2..7f258ff 100644 --- a/petabtests/cases/v2.0.0/pysb/0018/_mapping.tsv +++ b/petabtests/cases/v2.0.0/pysb/0018/_mapping.tsv @@ -1,5 +1,5 @@ -petabEntityId modelEntityId -maps_to_a0 a0 -maps_to_b0 b0 -maps_to_k1 k1 -maps_to_k2 k2 +petabEntityId modelEntityId name +maps_to_a0 a0 +maps_to_b0 b0 +maps_to_k1 k1 +maps_to_k2 k2 diff --git a/petabtests/cases/v2.0.0/pysb/0018/_measurements.tsv b/petabtests/cases/v2.0.0/pysb/0018/_measurements.tsv index a497632..e190344 100644 --- a/petabtests/cases/v2.0.0/pysb/0018/_measurements.tsv +++ b/petabtests/cases/v2.0.0/pysb/0018/_measurements.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time measurement -obs_a c0 0 0.7 -obs_a c0 10 0.1 +observableId experimentId time measurement observableParameters noiseParameters +obs_a 0.0 0.7 +obs_a 10.0 0.1 diff --git a/petabtests/cases/v2.0.0/pysb/0018/_observables.tsv b/petabtests/cases/v2.0.0/pysb/0018/_observables.tsv index 0b78dd1..bc320b2 100644 --- a/petabtests/cases/v2.0.0/pysb/0018/_observables.tsv +++ b/petabtests/cases/v2.0.0/pysb/0018/_observables.tsv @@ -1,2 +1,2 @@ -observableId observableFormula noiseFormula -obs_a A 0.5 +observableId observableName observableFormula noiseFormula noiseDistribution +obs_a A 0.500000000000000 normal diff --git a/petabtests/cases/v2.0.0/pysb/0018/_parameters.tsv b/petabtests/cases/v2.0.0/pysb/0018/_parameters.tsv index ed47cec..7fc80c0 100644 --- a/petabtests/cases/v2.0.0/pysb/0018/_parameters.tsv +++ b/petabtests/cases/v2.0.0/pysb/0018/_parameters.tsv @@ -1,5 +1,5 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -maps_to_a0 lin 0 10 1.0 1 -b0 lin 0 10 0.0 1 -maps_to_k1 lin 0 10 0.8 1 -k2 lin 0 10 0.6 1 +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +maps_to_a0 0.0 10.0 1.0 true +b0 0.0 10.0 0.0 true +maps_to_k1 0.0 10.0 0.8 true +k2 0.0 10.0 0.6 true diff --git a/petabtests/cases/v2.0.0/pysb/0018/_simulations.tsv b/petabtests/cases/v2.0.0/pysb/0018/_simulations.tsv index c1339e4..f9fa417 100644 --- a/petabtests/cases/v2.0.0/pysb/0018/_simulations.tsv +++ b/petabtests/cases/v2.0.0/pysb/0018/_simulations.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time simulation -obs_a c0 0 1.0 -obs_a c0 10 0.42857190373069665 +observableId experimentId time simulation observableParameters noiseParameters +obs_a 0.0 1.0 +obs_a 10.0 0.42857190373069665 diff --git a/petabtests/cases/v2.0.0/sbml/0001/0001.py b/petabtests/cases/v2.0.0/sbml/0001/0001.py index 0b6b582..eb6e308 100644 --- a/petabtests/cases/v2.0.0/sbml/0001/0001.py +++ b/petabtests/cases/v2.0.0/sbml/0001/0001.py @@ -1,9 +1,9 @@ from inspect import cleandoc -import pandas as pd -from petab.v1.C import * - -from petabtests import DEFAULT_SBML_FILE, PetabTestCase, analytical_a +from petab.v2.C import * +from petab.v2.core import * +from petab.v2 import Problem +from petabtests import DEFAULT_SBML_FILE, PetabV2TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -19,43 +19,18 @@ # problem -------------------------------------------------------------------- -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["c0"], - } -).set_index([CONDITION_ID]) - -measurement_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a", "obs_a"], - SIMULATION_CONDITION_ID: ["c0", "c0"], - TIME: [0, 10], - MEASUREMENT: [0.7, 0.1], - } -) - -observable_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a"], - OBSERVABLE_FORMULA: ["A"], - NOISE_FORMULA: [0.5], - } -).set_index([OBSERVABLE_ID]) - -parameter_df = pd.DataFrame( - data={ - PARAMETER_ID: ["a0", "b0", "k1", "k2"], - PARAMETER_SCALE: [LIN] * 4, - LOWER_BOUND: [0] * 4, - UPPER_BOUND: [10] * 4, - NOMINAL_VALUE: [1, 0, 0.8, 0.6], - ESTIMATE: [1] * 4, - } -).set_index(PARAMETER_ID) +problem = Problem() +problem += Observable(id="obs_a", formula="A", noise_formula=0.5) +problem += Measurement(observable_id="obs_a", time=0, measurement=0.7) +problem += Measurement(observable_id="obs_a", time=10, measurement=0.1) +problem += Parameter(id="a0", lb=0, ub=10, nominal_value=1) +problem += Parameter(id="b0", lb=0, ub=10, nominal_value=0) +problem += Parameter(id="k1", lb=0, ub=10, nominal_value=0.8) +problem += Parameter(id="k2", lb=0, ub=10, nominal_value=0.6) # solutions ------------------------------------------------------------------ -simulation_df = measurement_df.copy(deep=True).rename( +simulation_df = problem.measurement_df.copy(deep=True).rename( columns={MEASUREMENT: SIMULATION} ) simulation_df[SIMULATION] = [ @@ -63,14 +38,11 @@ ] -case = PetabTestCase( +case = PetabV2TestCase.from_problem( id=1, + problem=problem, brief="Simulation. Nothing special.", description=DESCRIPTION, model=DEFAULT_SBML_FILE, - condition_dfs=[condition_df], - observable_dfs=[observable_df], - measurement_dfs=[measurement_df], - simulation_dfs=[simulation_df], - parameter_df=parameter_df, + simulation_df=simulation_df, ) diff --git a/petabtests/cases/v2.0.0/sbml/0001/_0001.yaml b/petabtests/cases/v2.0.0/sbml/0001/_0001.yaml index b1337e7..681b3f0 100644 --- a/petabtests/cases/v2.0.0/sbml/0001/_0001.yaml +++ b/petabtests/cases/v2.0.0/sbml/0001/_0001.yaml @@ -1,8 +1,8 @@ format_version: 2.0.0 parameter_file: _parameters.tsv problems: -- condition_files: - - _conditions.tsv +- condition_files: [] + experiment_files: [] measurement_files: - _measurements.tsv model_files: diff --git a/petabtests/cases/v2.0.0/sbml/0001/_conditions.tsv b/petabtests/cases/v2.0.0/sbml/0001/_conditions.tsv deleted file mode 100644 index f15e327..0000000 --- a/petabtests/cases/v2.0.0/sbml/0001/_conditions.tsv +++ /dev/null @@ -1,2 +0,0 @@ -conditionId -c0 diff --git a/petabtests/cases/v2.0.0/sbml/0001/_measurements.tsv b/petabtests/cases/v2.0.0/sbml/0001/_measurements.tsv index a497632..e190344 100644 --- a/petabtests/cases/v2.0.0/sbml/0001/_measurements.tsv +++ b/petabtests/cases/v2.0.0/sbml/0001/_measurements.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time measurement -obs_a c0 0 0.7 -obs_a c0 10 0.1 +observableId experimentId time measurement observableParameters noiseParameters +obs_a 0.0 0.7 +obs_a 10.0 0.1 diff --git a/petabtests/cases/v2.0.0/sbml/0001/_observables.tsv b/petabtests/cases/v2.0.0/sbml/0001/_observables.tsv index 0b78dd1..bc320b2 100644 --- a/petabtests/cases/v2.0.0/sbml/0001/_observables.tsv +++ b/petabtests/cases/v2.0.0/sbml/0001/_observables.tsv @@ -1,2 +1,2 @@ -observableId observableFormula noiseFormula -obs_a A 0.5 +observableId observableName observableFormula noiseFormula noiseDistribution +obs_a A 0.500000000000000 normal diff --git a/petabtests/cases/v2.0.0/sbml/0001/_parameters.tsv b/petabtests/cases/v2.0.0/sbml/0001/_parameters.tsv index 8c1e5cb..368a25c 100644 --- a/petabtests/cases/v2.0.0/sbml/0001/_parameters.tsv +++ b/petabtests/cases/v2.0.0/sbml/0001/_parameters.tsv @@ -1,5 +1,5 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -a0 lin 0 10 1.0 1 -b0 lin 0 10 0.0 1 -k1 lin 0 10 0.8 1 -k2 lin 0 10 0.6 1 +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +a0 0.0 10.0 1.0 true +b0 0.0 10.0 0.0 true +k1 0.0 10.0 0.8 true +k2 0.0 10.0 0.6 true diff --git a/petabtests/cases/v2.0.0/sbml/0001/_simulations.tsv b/petabtests/cases/v2.0.0/sbml/0001/_simulations.tsv index c1339e4..f9fa417 100644 --- a/petabtests/cases/v2.0.0/sbml/0001/_simulations.tsv +++ b/petabtests/cases/v2.0.0/sbml/0001/_simulations.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time simulation -obs_a c0 0 1.0 -obs_a c0 10 0.42857190373069665 +observableId experimentId time simulation observableParameters noiseParameters +obs_a 0.0 1.0 +obs_a 10.0 0.42857190373069665 diff --git a/petabtests/cases/v2.0.0/sbml/0002/0002.py b/petabtests/cases/v2.0.0/sbml/0002/0002.py index 3a8fa51..b7a1f54 100644 --- a/petabtests/cases/v2.0.0/sbml/0002/0002.py +++ b/petabtests/cases/v2.0.0/sbml/0002/0002.py @@ -1,9 +1,8 @@ from inspect import cleandoc -from math import nan -import pandas as pd -from petab.v1.C import * -from petabtests import DEFAULT_SBML_FILE, PetabTestCase, analytical_a +from petab.v2.C import * +from petab.v2 import Problem +from petabtests import DEFAULT_SBML_FILE, PetabV2TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -13,8 +12,7 @@ The model is to be simulated for two different experimental conditions (here: different initial concentrations). -For `b0`, `nan` is used in the condition table, indicating that the default -model values for `b0` should be used for either condition. +Some values are overridden in the parameter table by numeric values. ## Model @@ -24,45 +22,27 @@ # problem -------------------------------------------------------------------- -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["c0", "c1"], - "a0": [0.8, 0.9], - "b0": [nan, nan], - } -).set_index([CONDITION_ID]) - -measurement_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a"] * 4, - SIMULATION_CONDITION_ID: ["c0", "c0", "c1", "c1"], - TIME: [0, 10, 0, 10], - MEASUREMENT: [0.7, 0.1, 0.8, 0.2], - } -) +problem = Problem() +problem.add_condition("c0", A=0.8) +problem.add_condition("c1", A=0.9) + +problem.add_experiment("e1", 0, "c0") +problem.add_experiment("e2", 0, "c1") + +problem.add_observable("obs_a", "A", noise_formula="1") + +problem.add_measurement("obs_a", "e1", 0, 0.7) +problem.add_measurement("obs_a", "e1", 10, 0.1) +problem.add_measurement("obs_a", "e2", 0, 0.8) +problem.add_measurement("obs_a", "e2", 10, 0.2) + +problem.add_parameter("k1", lb=0, ub=10, nominal_value=0.8, estimate=True) +problem.add_parameter("k2", lb=0, ub=10, nominal_value=0.6, estimate=True) -observable_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a"], - OBSERVABLE_FORMULA: ["A"], - NOISE_FORMULA: [1], - } -).set_index([OBSERVABLE_ID]) - -parameter_df = pd.DataFrame( - data={ - PARAMETER_ID: ["k1", "k2"], - PARAMETER_SCALE: [LIN] * 2, - LOWER_BOUND: [0] * 2, - UPPER_BOUND: [10] * 2, - NOMINAL_VALUE: [0.8, 0.6], - ESTIMATE: [1] * 2, - } -).set_index(PARAMETER_ID) # solutions ------------------------------------------------------------------ -simulation_df = measurement_df.copy(deep=True).rename( +simulation_df = problem.measurement_df.copy(deep=True).rename( columns={MEASUREMENT: SIMULATION} ) simulation_df[SIMULATION] = [ @@ -70,14 +50,11 @@ *[analytical_a(t, 0.9, 1, 0.8, 0.6) for t in [0, 10]], ] -case = PetabTestCase( +case = PetabV2TestCase.from_problem( id=2, brief="Simulation. Two conditions. Numeric parameter override.", description=DESCRIPTION, model=DEFAULT_SBML_FILE, - condition_dfs=[condition_df], - observable_dfs=[observable_df], - measurement_dfs=[measurement_df], - simulation_dfs=[simulation_df], - parameter_df=parameter_df, + problem=problem, + simulation_df=simulation_df, ) diff --git a/petabtests/cases/v2.0.0/sbml/0002/README.md b/petabtests/cases/v2.0.0/sbml/0002/README.md index 213ad92..6b31a4b 100644 --- a/petabtests/cases/v2.0.0/sbml/0002/README.md +++ b/petabtests/cases/v2.0.0/sbml/0002/README.md @@ -7,8 +7,7 @@ This case tests support for multiple simulation conditions The model is to be simulated for two different experimental conditions (here: different initial concentrations). -For `b0`, `nan` is used in the condition table, indicating that the default -model values for `b0` should be used for either condition. +Some values are overridden in the parameter table by numeric values. ## Model diff --git a/petabtests/cases/v2.0.0/sbml/0002/_0002.yaml b/petabtests/cases/v2.0.0/sbml/0002/_0002.yaml index b1337e7..60f4298 100644 --- a/petabtests/cases/v2.0.0/sbml/0002/_0002.yaml +++ b/petabtests/cases/v2.0.0/sbml/0002/_0002.yaml @@ -3,6 +3,8 @@ parameter_file: _parameters.tsv problems: - condition_files: - _conditions.tsv + experiment_files: + - _experiments.tsv measurement_files: - _measurements.tsv model_files: diff --git a/petabtests/cases/v2.0.0/sbml/0002/_conditions.tsv b/petabtests/cases/v2.0.0/sbml/0002/_conditions.tsv index 6524332..ff9914a 100644 --- a/petabtests/cases/v2.0.0/sbml/0002/_conditions.tsv +++ b/petabtests/cases/v2.0.0/sbml/0002/_conditions.tsv @@ -1,3 +1,3 @@ -conditionId a0 b0 -c0 0.8 -c1 0.9 +conditionId targetId targetValue +c0 A 0.8 +c1 A 0.9 diff --git a/petabtests/cases/v2.0.0/sbml/0002/_experiments.tsv b/petabtests/cases/v2.0.0/sbml/0002/_experiments.tsv new file mode 100644 index 0000000..7c2a6e8 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0002/_experiments.tsv @@ -0,0 +1,3 @@ +experimentId time conditionId +e1 0.0 c0 +e2 0.0 c1 diff --git a/petabtests/cases/v2.0.0/sbml/0002/_measurements.tsv b/petabtests/cases/v2.0.0/sbml/0002/_measurements.tsv index 9dbc71c..9b6ee26 100644 --- a/petabtests/cases/v2.0.0/sbml/0002/_measurements.tsv +++ b/petabtests/cases/v2.0.0/sbml/0002/_measurements.tsv @@ -1,5 +1,5 @@ -observableId simulationConditionId time measurement -obs_a c0 0 0.7 -obs_a c0 10 0.1 -obs_a c1 0 0.8 -obs_a c1 10 0.2 +observableId experimentId time measurement observableParameters noiseParameters +obs_a e1 0.0 0.7 +obs_a e1 10.0 0.1 +obs_a e2 0.0 0.8 +obs_a e2 10.0 0.2 diff --git a/petabtests/cases/v2.0.0/sbml/0002/_observables.tsv b/petabtests/cases/v2.0.0/sbml/0002/_observables.tsv index 726b3b0..a756a97 100644 --- a/petabtests/cases/v2.0.0/sbml/0002/_observables.tsv +++ b/petabtests/cases/v2.0.0/sbml/0002/_observables.tsv @@ -1,2 +1,2 @@ -observableId observableFormula noiseFormula -obs_a A 1 +observableId observableName observableFormula noiseFormula noiseDistribution +obs_a A 1.00000000000000 normal diff --git a/petabtests/cases/v2.0.0/sbml/0002/_parameters.tsv b/petabtests/cases/v2.0.0/sbml/0002/_parameters.tsv index bf45aa8..852192d 100644 --- a/petabtests/cases/v2.0.0/sbml/0002/_parameters.tsv +++ b/petabtests/cases/v2.0.0/sbml/0002/_parameters.tsv @@ -1,3 +1,3 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -k1 lin 0 10 0.8 1 -k2 lin 0 10 0.6 1 +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +k1 0.0 10.0 0.8 true +k2 0.0 10.0 0.6 true diff --git a/petabtests/cases/v2.0.0/sbml/0002/_simulations.tsv b/petabtests/cases/v2.0.0/sbml/0002/_simulations.tsv index f9dbb59..ea3a9b4 100644 --- a/petabtests/cases/v2.0.0/sbml/0002/_simulations.tsv +++ b/petabtests/cases/v2.0.0/sbml/0002/_simulations.tsv @@ -1,5 +1,5 @@ -observableId simulationConditionId time simulation -obs_a c0 0 0.8 -obs_a c0 10 0.771428595186535 -obs_a c1 0 0.9 -obs_a c1 10 0.8142857855596045 +observableId experimentId time simulation observableParameters noiseParameters +obs_a e1 0.0 0.8 +obs_a e1 10.0 0.771428595186535 +obs_a e2 0.0 0.9 +obs_a e2 10.0 0.8142857855596045 diff --git a/petabtests/cases/v2.0.0/sbml/0003/0003.py b/petabtests/cases/v2.0.0/sbml/0003/0003.py index 13f4e58..c206d56 100644 --- a/petabtests/cases/v2.0.0/sbml/0003/0003.py +++ b/petabtests/cases/v2.0.0/sbml/0003/0003.py @@ -1,9 +1,9 @@ from inspect import cleandoc import pandas as pd -from petab.v1.C import * +from petab.v2.C import * -from petabtests import DEFAULT_SBML_FILE, PetabTestCase, analytical_a +from petabtests import DEFAULT_SBML_FILE, PetabV2TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -25,16 +25,10 @@ # problem -------------------------------------------------------------------- -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["c0"], - } -).set_index([CONDITION_ID]) - measurement_df = pd.DataFrame( data={ OBSERVABLE_ID: ["obs_a", "obs_a"], - SIMULATION_CONDITION_ID: ["c0", "c0"], + EXPERIMENT_ID: ["", ""], TIME: [0, 10], MEASUREMENT: [0.7, 0.1], OBSERVABLE_PARAMETERS: ["0.5;2", "0.5;2"], @@ -54,11 +48,10 @@ parameter_df = pd.DataFrame( data={ PARAMETER_ID: ["a0", "b0", "k1", "k2"], - PARAMETER_SCALE: [LIN] * 4, LOWER_BOUND: [0] * 4, UPPER_BOUND: [10] * 4, NOMINAL_VALUE: [1, 0, 0.8, 0.6], - ESTIMATE: [1] * 4, + ESTIMATE: ["true"] * 4, } ).set_index(PARAMETER_ID) @@ -71,13 +64,13 @@ 0.5 * analytical_a(t, 1, 0, 0.8, 0.6) + 2 for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV2TestCase( id=3, brief="Simulation. Numeric observable parameter overrides in measurement " "table.", description=DESCRIPTION, model=DEFAULT_SBML_FILE, - condition_dfs=[condition_df], + condition_dfs=[], observable_dfs=[observable_df], measurement_dfs=[measurement_df], simulation_dfs=[simulation_df], diff --git a/petabtests/cases/v2.0.0/sbml/0003/_0003.yaml b/petabtests/cases/v2.0.0/sbml/0003/_0003.yaml index b1337e7..681b3f0 100644 --- a/petabtests/cases/v2.0.0/sbml/0003/_0003.yaml +++ b/petabtests/cases/v2.0.0/sbml/0003/_0003.yaml @@ -1,8 +1,8 @@ format_version: 2.0.0 parameter_file: _parameters.tsv problems: -- condition_files: - - _conditions.tsv +- condition_files: [] + experiment_files: [] measurement_files: - _measurements.tsv model_files: diff --git a/petabtests/cases/v2.0.0/sbml/0003/_conditions.tsv b/petabtests/cases/v2.0.0/sbml/0003/_conditions.tsv deleted file mode 100644 index f15e327..0000000 --- a/petabtests/cases/v2.0.0/sbml/0003/_conditions.tsv +++ /dev/null @@ -1,2 +0,0 @@ -conditionId -c0 diff --git a/petabtests/cases/v2.0.0/sbml/0003/_measurements.tsv b/petabtests/cases/v2.0.0/sbml/0003/_measurements.tsv index 2078ec7..c8a4604 100644 --- a/petabtests/cases/v2.0.0/sbml/0003/_measurements.tsv +++ b/petabtests/cases/v2.0.0/sbml/0003/_measurements.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time measurement observableParameters -obs_a c0 0 0.7 0.5;2 -obs_a c0 10 0.1 0.5;2 +observableId experimentId time measurement observableParameters +obs_a 0 0.7 0.5;2 +obs_a 10 0.1 0.5;2 diff --git a/petabtests/cases/v2.0.0/sbml/0003/_parameters.tsv b/petabtests/cases/v2.0.0/sbml/0003/_parameters.tsv index 8c1e5cb..86547bc 100644 --- a/petabtests/cases/v2.0.0/sbml/0003/_parameters.tsv +++ b/petabtests/cases/v2.0.0/sbml/0003/_parameters.tsv @@ -1,5 +1,5 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -a0 lin 0 10 1.0 1 -b0 lin 0 10 0.0 1 -k1 lin 0 10 0.8 1 -k2 lin 0 10 0.6 1 +parameterId lowerBound upperBound nominalValue estimate +a0 0 10 1.0 true +b0 0 10 0.0 true +k1 0 10 0.8 true +k2 0 10 0.6 true diff --git a/petabtests/cases/v2.0.0/sbml/0003/_simulations.tsv b/petabtests/cases/v2.0.0/sbml/0003/_simulations.tsv index 79750a3..740f13a 100644 --- a/petabtests/cases/v2.0.0/sbml/0003/_simulations.tsv +++ b/petabtests/cases/v2.0.0/sbml/0003/_simulations.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time simulation observableParameters -obs_a c0 0 2.5 0.5;2 -obs_a c0 10 2.214285951865348 0.5;2 +observableId experimentId time simulation observableParameters +obs_a 0 2.5 0.5;2 +obs_a 10 2.214285951865348 0.5;2 diff --git a/petabtests/cases/v2.0.0/sbml/0004/0004.py b/petabtests/cases/v2.0.0/sbml/0004/0004.py index e0202cd..805189d 100644 --- a/petabtests/cases/v2.0.0/sbml/0004/0004.py +++ b/petabtests/cases/v2.0.0/sbml/0004/0004.py @@ -3,7 +3,7 @@ import pandas as pd from petab.v1.C import * -from petabtests import DEFAULT_SBML_FILE, PetabTestCase, analytical_a +from petabtests import DEFAULT_SBML_FILE, PetabV2TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -25,12 +25,6 @@ # problem -------------------------------------------------------------------- -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["c0"], - } -).set_index([CONDITION_ID]) - measurement_df = pd.DataFrame( data={ OBSERVABLE_ID: ["obs_a", "obs_a"], @@ -51,11 +45,10 @@ parameter_df = pd.DataFrame( data={ PARAMETER_ID: ["a0", "b0", "k1", "k2", "scaling_A", "offset_A"], - PARAMETER_SCALE: [LIN] * 6, LOWER_BOUND: [0] * 6, UPPER_BOUND: [10] * 6, NOMINAL_VALUE: [1, 0, 0.8, 0.6, 0.5, 2], - ESTIMATE: [1] * 6, + ESTIMATE: ["true"] * 6, } ).set_index(PARAMETER_ID) @@ -68,12 +61,12 @@ 0.5 * analytical_a(t, 1, 0, 0.8, 0.6) + 2 for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV2TestCase( id=4, brief="Simulation. Observable parameters only defined in parameter table.", description=DESCRIPTION, model=DEFAULT_SBML_FILE, - condition_dfs=[condition_df], + condition_dfs=[], observable_dfs=[observable_df], measurement_dfs=[measurement_df], simulation_dfs=[simulation_df], diff --git a/petabtests/cases/v2.0.0/sbml/0004/_0004.yaml b/petabtests/cases/v2.0.0/sbml/0004/_0004.yaml index b1337e7..681b3f0 100644 --- a/petabtests/cases/v2.0.0/sbml/0004/_0004.yaml +++ b/petabtests/cases/v2.0.0/sbml/0004/_0004.yaml @@ -1,8 +1,8 @@ format_version: 2.0.0 parameter_file: _parameters.tsv problems: -- condition_files: - - _conditions.tsv +- condition_files: [] + experiment_files: [] measurement_files: - _measurements.tsv model_files: diff --git a/petabtests/cases/v2.0.0/sbml/0004/_conditions.tsv b/petabtests/cases/v2.0.0/sbml/0004/_conditions.tsv deleted file mode 100644 index f15e327..0000000 --- a/petabtests/cases/v2.0.0/sbml/0004/_conditions.tsv +++ /dev/null @@ -1,2 +0,0 @@ -conditionId -c0 diff --git a/petabtests/cases/v2.0.0/sbml/0004/_parameters.tsv b/petabtests/cases/v2.0.0/sbml/0004/_parameters.tsv index 6d40b89..5ce8fd5 100644 --- a/petabtests/cases/v2.0.0/sbml/0004/_parameters.tsv +++ b/petabtests/cases/v2.0.0/sbml/0004/_parameters.tsv @@ -1,7 +1,7 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -a0 lin 0 10 1.0 1 -b0 lin 0 10 0.0 1 -k1 lin 0 10 0.8 1 -k2 lin 0 10 0.6 1 -scaling_A lin 0 10 0.5 1 -offset_A lin 0 10 2.0 1 +parameterId lowerBound upperBound nominalValue estimate +a0 0 10 1.0 true +b0 0 10 0.0 true +k1 0 10 0.8 true +k2 0 10 0.6 true +scaling_A 0 10 0.5 true +offset_A 0 10 2.0 true diff --git a/petabtests/cases/v2.0.0/sbml/0005/0005.py b/petabtests/cases/v2.0.0/sbml/0005/0005.py index 1a90353..0536077 100644 --- a/petabtests/cases/v2.0.0/sbml/0005/0005.py +++ b/petabtests/cases/v2.0.0/sbml/0005/0005.py @@ -1,10 +1,9 @@ from inspect import cleandoc from pathlib import Path -import pandas as pd -from petab.v1.C import * - -from petabtests import PetabTestCase, analytical_a, antimony_to_sbml_str +from petab.v2.C import * +from petab.v2 import Problem +from petabtests import PetabV2TestCase, analytical_a, antimony_to_sbml_str DESCRIPTION = cleandoc(""" ## Objective @@ -43,59 +42,45 @@ model_file = Path(__file__).parent / "_model.xml" model_file.write_text(antimony_to_sbml_str(ant_model)) -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["c0", "c1"], - "offset_A": ["offset_A_c0", "offset_A_c1"], - } -).set_index([CONDITION_ID]) - -measurement_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a", "obs_a"], - SIMULATION_CONDITION_ID: ["c0", "c1"], - TIME: [10, 10], - MEASUREMENT: [2.1, 3.2], - } +problem = Problem() +problem.add_condition("c0", offset_A="offset_A_c0") +problem.add_condition("c1", offset_A="offset_A_c1") + +problem.add_experiment("e1", 0, "c0") +problem.add_experiment("e2", 0, "c1") + +problem.add_observable("obs_a", "A + offset_A", noise_formula="1") + +problem.add_measurement("obs_a", "e1", 10, 2.1) +problem.add_measurement("obs_a", "e2", 10, 3.2) + +problem.add_parameter("a0", lb=0, ub=10, nominal_value=1, estimate=True) +problem.add_parameter("b0", lb=0, ub=10, nominal_value=0, estimate=True) +problem.add_parameter("k1", lb=0, ub=10, nominal_value=0.8, estimate=True) +problem.add_parameter("k2", lb=0, ub=10, nominal_value=0.6, estimate=True) +problem.add_parameter( + "offset_A_c0", lb=0, ub=10, nominal_value=2, estimate=True +) +problem.add_parameter( + "offset_A_c1", lb=0, ub=10, nominal_value=3, estimate=True ) -observable_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a"], - OBSERVABLE_FORMULA: ["A + offset_A"], - NOISE_FORMULA: [1], - } -).set_index([OBSERVABLE_ID]) - -parameter_df = pd.DataFrame( - data={ - PARAMETER_ID: ["a0", "b0", "k1", "k2", "offset_A_c0", "offset_A_c1"], - PARAMETER_SCALE: [LIN] * 6, - LOWER_BOUND: [0] * 6, - UPPER_BOUND: [10] * 6, - NOMINAL_VALUE: [1, 0, 0.8, 0.6, 2, 3], - ESTIMATE: [1] * 6, - } -).set_index(PARAMETER_ID) # solutions ------------------------------------------------------------------ -simulation_df = measurement_df.copy(deep=True).rename( +simulation_df = problem.measurement_df.copy(deep=True).rename( columns={MEASUREMENT: SIMULATION} ) simulation_df[SIMULATION] = [ analytical_a(10, 1, 0, 0.8, 0.6) + offset for offset in [2, 3] ] -case = PetabTestCase( +case = PetabV2TestCase.from_problem( id=5, brief="Simulation. Condition-specific parameters only defined in " "parameter table.", description=DESCRIPTION, model=model_file, - condition_dfs=[condition_df], - observable_dfs=[observable_df], - measurement_dfs=[measurement_df], - simulation_dfs=[simulation_df], - parameter_df=parameter_df, + problem=problem, + simulation_df=simulation_df, ) diff --git a/petabtests/cases/v2.0.0/sbml/0005/_0005.yaml b/petabtests/cases/v2.0.0/sbml/0005/_0005.yaml index b1337e7..60f4298 100644 --- a/petabtests/cases/v2.0.0/sbml/0005/_0005.yaml +++ b/petabtests/cases/v2.0.0/sbml/0005/_0005.yaml @@ -3,6 +3,8 @@ parameter_file: _parameters.tsv problems: - condition_files: - _conditions.tsv + experiment_files: + - _experiments.tsv measurement_files: - _measurements.tsv model_files: diff --git a/petabtests/cases/v2.0.0/sbml/0005/_conditions.tsv b/petabtests/cases/v2.0.0/sbml/0005/_conditions.tsv index db79bf4..a2aa64a 100644 --- a/petabtests/cases/v2.0.0/sbml/0005/_conditions.tsv +++ b/petabtests/cases/v2.0.0/sbml/0005/_conditions.tsv @@ -1,3 +1,3 @@ -conditionId offset_A -c0 offset_A_c0 -c1 offset_A_c1 +conditionId targetId targetValue +c0 offset_A offset_A_c0 +c1 offset_A offset_A_c1 diff --git a/petabtests/cases/v2.0.0/sbml/0005/_experiments.tsv b/petabtests/cases/v2.0.0/sbml/0005/_experiments.tsv new file mode 100644 index 0000000..7c2a6e8 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0005/_experiments.tsv @@ -0,0 +1,3 @@ +experimentId time conditionId +e1 0.0 c0 +e2 0.0 c1 diff --git a/petabtests/cases/v2.0.0/sbml/0005/_measurements.tsv b/petabtests/cases/v2.0.0/sbml/0005/_measurements.tsv index 6016b73..bd3d2e2 100644 --- a/petabtests/cases/v2.0.0/sbml/0005/_measurements.tsv +++ b/petabtests/cases/v2.0.0/sbml/0005/_measurements.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time measurement -obs_a c0 10 2.1 -obs_a c1 10 3.2 +observableId experimentId time measurement observableParameters noiseParameters +obs_a e1 10.0 2.1 +obs_a e2 10.0 3.2 diff --git a/petabtests/cases/v2.0.0/sbml/0005/_model.xml b/petabtests/cases/v2.0.0/sbml/0005/_model.xml index adf0666..67df968 100644 --- a/petabtests/cases/v2.0.0/sbml/0005/_model.xml +++ b/petabtests/cases/v2.0.0/sbml/0005/_model.xml @@ -1,5 +1,5 @@ - + diff --git a/petabtests/cases/v2.0.0/sbml/0005/_observables.tsv b/petabtests/cases/v2.0.0/sbml/0005/_observables.tsv index 5411c51..5284720 100644 --- a/petabtests/cases/v2.0.0/sbml/0005/_observables.tsv +++ b/petabtests/cases/v2.0.0/sbml/0005/_observables.tsv @@ -1,2 +1,2 @@ -observableId observableFormula noiseFormula -obs_a A + offset_A 1 +observableId observableName observableFormula noiseFormula noiseDistribution +obs_a A + offset_A 1.00000000000000 normal diff --git a/petabtests/cases/v2.0.0/sbml/0005/_parameters.tsv b/petabtests/cases/v2.0.0/sbml/0005/_parameters.tsv index 2676343..0cc6d90 100644 --- a/petabtests/cases/v2.0.0/sbml/0005/_parameters.tsv +++ b/petabtests/cases/v2.0.0/sbml/0005/_parameters.tsv @@ -1,7 +1,7 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -a0 lin 0 10 1.0 1 -b0 lin 0 10 0.0 1 -k1 lin 0 10 0.8 1 -k2 lin 0 10 0.6 1 -offset_A_c0 lin 0 10 2.0 1 -offset_A_c1 lin 0 10 3.0 1 +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +a0 0.0 10.0 1.0 true +b0 0.0 10.0 0.0 true +k1 0.0 10.0 0.8 true +k2 0.0 10.0 0.6 true +offset_A_c0 0.0 10.0 2.0 true +offset_A_c1 0.0 10.0 3.0 true diff --git a/petabtests/cases/v2.0.0/sbml/0005/_simulations.tsv b/petabtests/cases/v2.0.0/sbml/0005/_simulations.tsv index 3fb757b..987b677 100644 --- a/petabtests/cases/v2.0.0/sbml/0005/_simulations.tsv +++ b/petabtests/cases/v2.0.0/sbml/0005/_simulations.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time simulation -obs_a c0 10 2.4285719037306968 -obs_a c1 10 3.4285719037306968 +observableId experimentId time simulation observableParameters noiseParameters +obs_a e1 10.0 2.4285719037306968 +obs_a e2 10.0 3.4285719037306968 diff --git a/petabtests/cases/v2.0.0/sbml/0006/0006.py b/petabtests/cases/v2.0.0/sbml/0006/0006.py index 1cae88b..f1a22b7 100644 --- a/petabtests/cases/v2.0.0/sbml/0006/0006.py +++ b/petabtests/cases/v2.0.0/sbml/0006/0006.py @@ -3,7 +3,7 @@ import pandas as pd from petab.v1.C import * -from petabtests import DEFAULT_SBML_FILE, PetabTestCase, analytical_a +from petabtests import DEFAULT_SBML_FILE, PetabV2TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -22,12 +22,6 @@ # problem -------------------------------------------------------------------- -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["c0"], - } -).set_index([CONDITION_ID]) - measurement_df = pd.DataFrame( data={ OBSERVABLE_ID: ["obs_a", "obs_a"], @@ -49,11 +43,10 @@ parameter_df = pd.DataFrame( data={ PARAMETER_ID: ["a0", "b0", "k1", "k2"], - PARAMETER_SCALE: [LIN] * 4, LOWER_BOUND: [0] * 4, UPPER_BOUND: [10] * 4, NOMINAL_VALUE: [1, 0, 0.8, 0.6], - ESTIMATE: [1] * 4, + ESTIMATE: ["true"] * 4, } ).set_index(PARAMETER_ID) @@ -67,13 +60,13 @@ 15 * analytical_a(10, 1, 0, 0.8, 0.6), ] -case = PetabTestCase( +case = PetabV2TestCase( id=6, brief="Simulation. Time-point specific numeric observable parameter " "overrides.", description=DESCRIPTION, model=DEFAULT_SBML_FILE, - condition_dfs=[condition_df], + condition_dfs=[], observable_dfs=[observable_df], measurement_dfs=[measurement_df], simulation_dfs=[simulation_df], diff --git a/petabtests/cases/v2.0.0/sbml/0006/_0006.yaml b/petabtests/cases/v2.0.0/sbml/0006/_0006.yaml index b1337e7..681b3f0 100644 --- a/petabtests/cases/v2.0.0/sbml/0006/_0006.yaml +++ b/petabtests/cases/v2.0.0/sbml/0006/_0006.yaml @@ -1,8 +1,8 @@ format_version: 2.0.0 parameter_file: _parameters.tsv problems: -- condition_files: - - _conditions.tsv +- condition_files: [] + experiment_files: [] measurement_files: - _measurements.tsv model_files: diff --git a/petabtests/cases/v2.0.0/sbml/0006/_conditions.tsv b/petabtests/cases/v2.0.0/sbml/0006/_conditions.tsv deleted file mode 100644 index f15e327..0000000 --- a/petabtests/cases/v2.0.0/sbml/0006/_conditions.tsv +++ /dev/null @@ -1,2 +0,0 @@ -conditionId -c0 diff --git a/petabtests/cases/v2.0.0/sbml/0006/_parameters.tsv b/petabtests/cases/v2.0.0/sbml/0006/_parameters.tsv index 8c1e5cb..86547bc 100644 --- a/petabtests/cases/v2.0.0/sbml/0006/_parameters.tsv +++ b/petabtests/cases/v2.0.0/sbml/0006/_parameters.tsv @@ -1,5 +1,5 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -a0 lin 0 10 1.0 1 -b0 lin 0 10 0.0 1 -k1 lin 0 10 0.8 1 -k2 lin 0 10 0.6 1 +parameterId lowerBound upperBound nominalValue estimate +a0 0 10 1.0 true +b0 0 10 0.0 true +k1 0 10 0.8 true +k2 0 10 0.6 true diff --git a/petabtests/cases/v2.0.0/sbml/0007/0007.py b/petabtests/cases/v2.0.0/sbml/0007/0007.py index d052c14..9aa3a3b 100644 --- a/petabtests/cases/v2.0.0/sbml/0007/0007.py +++ b/petabtests/cases/v2.0.0/sbml/0007/0007.py @@ -5,7 +5,7 @@ from petabtests import ( DEFAULT_SBML_FILE, - PetabTestCase, + PetabV2TestCase, analytical_a, analytical_b, ) @@ -27,12 +27,6 @@ # problem -------------------------------------------------------------------- -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["c0"], - } -).set_index([CONDITION_ID]) - measurement_df = pd.DataFrame( data={ OBSERVABLE_ID: ["obs_a", "obs_b"], @@ -54,11 +48,10 @@ parameter_df = pd.DataFrame( data={ PARAMETER_ID: ["a0", "b0", "k1", "k2"], - PARAMETER_SCALE: [LIN] * 4, LOWER_BOUND: [0] * 4, UPPER_BOUND: [10] * 4, NOMINAL_VALUE: [1, 0, 0.8, 0.6], - ESTIMATE: [1] * 4, + ESTIMATE: ["true"] * 4, } ).set_index(PARAMETER_ID) @@ -72,12 +65,12 @@ analytical_b(10, 1, 0, 0.8, 0.6), ] -case = PetabTestCase( +case = PetabV2TestCase( id=7, brief="Simulation. Observable transformation log10.", description=DESCRIPTION, model=DEFAULT_SBML_FILE, - condition_dfs=[condition_df], + condition_dfs=[], observable_dfs=[observable_df], measurement_dfs=[measurement_df], simulation_dfs=[simulation_df], diff --git a/petabtests/cases/v2.0.0/sbml/0007/_0007.yaml b/petabtests/cases/v2.0.0/sbml/0007/_0007.yaml index b1337e7..681b3f0 100644 --- a/petabtests/cases/v2.0.0/sbml/0007/_0007.yaml +++ b/petabtests/cases/v2.0.0/sbml/0007/_0007.yaml @@ -1,8 +1,8 @@ format_version: 2.0.0 parameter_file: _parameters.tsv problems: -- condition_files: - - _conditions.tsv +- condition_files: [] + experiment_files: [] measurement_files: - _measurements.tsv model_files: diff --git a/petabtests/cases/v2.0.0/sbml/0007/_conditions.tsv b/petabtests/cases/v2.0.0/sbml/0007/_conditions.tsv deleted file mode 100644 index f15e327..0000000 --- a/petabtests/cases/v2.0.0/sbml/0007/_conditions.tsv +++ /dev/null @@ -1,2 +0,0 @@ -conditionId -c0 diff --git a/petabtests/cases/v2.0.0/sbml/0007/_parameters.tsv b/petabtests/cases/v2.0.0/sbml/0007/_parameters.tsv index 8c1e5cb..86547bc 100644 --- a/petabtests/cases/v2.0.0/sbml/0007/_parameters.tsv +++ b/petabtests/cases/v2.0.0/sbml/0007/_parameters.tsv @@ -1,5 +1,5 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -a0 lin 0 10 1.0 1 -b0 lin 0 10 0.0 1 -k1 lin 0 10 0.8 1 -k2 lin 0 10 0.6 1 +parameterId lowerBound upperBound nominalValue estimate +a0 0 10 1.0 true +b0 0 10 0.0 true +k1 0 10 0.8 true +k2 0 10 0.6 true diff --git a/petabtests/cases/v2.0.0/sbml/0008/0008.py b/petabtests/cases/v2.0.0/sbml/0008/0008.py index bafdb4c..960bf5b 100644 --- a/petabtests/cases/v2.0.0/sbml/0008/0008.py +++ b/petabtests/cases/v2.0.0/sbml/0008/0008.py @@ -3,7 +3,7 @@ import pandas as pd from petab.v1.C import * -from petabtests import DEFAULT_SBML_FILE, PetabTestCase, analytical_a +from petabtests import DEFAULT_SBML_FILE, PetabV2TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -21,11 +21,6 @@ # problem -------------------------------------------------------------------- -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["c0"], - } -).set_index([CONDITION_ID]) measurement_df = pd.DataFrame( data={ @@ -47,11 +42,10 @@ parameter_df = pd.DataFrame( data={ PARAMETER_ID: ["a0", "b0", "k1", "k2"], - PARAMETER_SCALE: [LIN] * 4, LOWER_BOUND: [0] * 4, UPPER_BOUND: [10] * 4, NOMINAL_VALUE: [1, 0, 0.8, 0.6], - ESTIMATE: [1] * 4, + ESTIMATE: ["true"] * 4, } ).set_index(PARAMETER_ID) @@ -64,12 +58,12 @@ analytical_a(t, 1, 0, 0.8, 0.6) for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV2TestCase( id=8, brief="Simulation. Replicate measurements.", description=DESCRIPTION, model=DEFAULT_SBML_FILE, - condition_dfs=[condition_df], + condition_dfs=[], observable_dfs=[observable_df], measurement_dfs=[measurement_df], simulation_dfs=[simulation_df], diff --git a/petabtests/cases/v2.0.0/sbml/0008/_0008.yaml b/petabtests/cases/v2.0.0/sbml/0008/_0008.yaml index b1337e7..681b3f0 100644 --- a/petabtests/cases/v2.0.0/sbml/0008/_0008.yaml +++ b/petabtests/cases/v2.0.0/sbml/0008/_0008.yaml @@ -1,8 +1,8 @@ format_version: 2.0.0 parameter_file: _parameters.tsv problems: -- condition_files: - - _conditions.tsv +- condition_files: [] + experiment_files: [] measurement_files: - _measurements.tsv model_files: diff --git a/petabtests/cases/v2.0.0/sbml/0008/_conditions.tsv b/petabtests/cases/v2.0.0/sbml/0008/_conditions.tsv deleted file mode 100644 index f15e327..0000000 --- a/petabtests/cases/v2.0.0/sbml/0008/_conditions.tsv +++ /dev/null @@ -1,2 +0,0 @@ -conditionId -c0 diff --git a/petabtests/cases/v2.0.0/sbml/0008/_parameters.tsv b/petabtests/cases/v2.0.0/sbml/0008/_parameters.tsv index 8c1e5cb..86547bc 100644 --- a/petabtests/cases/v2.0.0/sbml/0008/_parameters.tsv +++ b/petabtests/cases/v2.0.0/sbml/0008/_parameters.tsv @@ -1,5 +1,5 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -a0 lin 0 10 1.0 1 -b0 lin 0 10 0.0 1 -k1 lin 0 10 0.8 1 -k2 lin 0 10 0.6 1 +parameterId lowerBound upperBound nominalValue estimate +a0 0 10 1.0 true +b0 0 10 0.0 true +k1 0 10 0.8 true +k2 0 10 0.6 true diff --git a/petabtests/cases/v2.0.0/sbml/0009/0009.py b/petabtests/cases/v2.0.0/sbml/0009/0009.py index 7a03f5c..8d0c9d7 100644 --- a/petabtests/cases/v2.0.0/sbml/0009/0009.py +++ b/petabtests/cases/v2.0.0/sbml/0009/0009.py @@ -1,11 +1,10 @@ from inspect import cleandoc -import pandas as pd -from petab.v1.C import * - +from petab.v2.C import * +from petab.v2 import Problem from petabtests import ( DEFAULT_SBML_FILE, - PetabTestCase, + PetabV2TestCase, analytical_a, analytical_b, ) @@ -26,45 +25,24 @@ # problem -------------------------------------------------------------------- -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["preeq_c0", "c0"], - "k1": [0.3, 0.8], - } -).set_index([CONDITION_ID]) +problem = Problem() +problem.add_condition("preeq_c0", k1=0.3) +problem.add_condition("c0", k1=0.8) -measurement_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a", "obs_a"], - PREEQUILIBRATION_CONDITION_ID: ["preeq_c0", "preeq_c0"], - SIMULATION_CONDITION_ID: ["c0", "c0"], - TIME: [1, 10], - MEASUREMENT: [0.7, 0.1], - } -) +problem.add_experiment("e0", "-inf", "preeq_c0", 0, "c0") + +problem.add_observable("obs_a", "A", noise_formula="0.5") -observable_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a"], - OBSERVABLE_FORMULA: ["A"], - NOISE_FORMULA: [0.5], - } -).set_index([OBSERVABLE_ID]) +problem.add_measurement("obs_a", "e0", 1, 0.7) +problem.add_measurement("obs_a", "e0", 10, 0.1) -parameter_df = pd.DataFrame( - data={ - PARAMETER_ID: ["a0", "b0", "k2"], - PARAMETER_SCALE: [LIN] * 3, - LOWER_BOUND: [0] * 3, - UPPER_BOUND: [10] * 3, - NOMINAL_VALUE: [1, 0, 0.6], - ESTIMATE: [1] * 3, - } -).set_index(PARAMETER_ID) +problem.add_parameter("a0", lb=0, ub=10, nominal_value=1, estimate=True) +problem.add_parameter("b0", lb=0, ub=10, nominal_value=0, estimate=True) +problem.add_parameter("k2", lb=0, ub=10, nominal_value=0.6, estimate=True) # solutions ------------------------------------------------------------------ -simulation_df = measurement_df.copy(deep=True).rename( +simulation_df = problem.measurement_df.copy(deep=True).rename( columns={MEASUREMENT: SIMULATION} ) # simulate for far time point as steady state @@ -76,14 +54,11 @@ for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV2TestCase.from_problem( id=9, brief="Simulation. Preequilibration.", description=DESCRIPTION, model=DEFAULT_SBML_FILE, - condition_dfs=[condition_df], - observable_dfs=[observable_df], - measurement_dfs=[measurement_df], - simulation_dfs=[simulation_df], - parameter_df=parameter_df, + problem=problem, + simulation_df=simulation_df, ) diff --git a/petabtests/cases/v2.0.0/sbml/0009/_0009.yaml b/petabtests/cases/v2.0.0/sbml/0009/_0009.yaml index b1337e7..60f4298 100644 --- a/petabtests/cases/v2.0.0/sbml/0009/_0009.yaml +++ b/petabtests/cases/v2.0.0/sbml/0009/_0009.yaml @@ -3,6 +3,8 @@ parameter_file: _parameters.tsv problems: - condition_files: - _conditions.tsv + experiment_files: + - _experiments.tsv measurement_files: - _measurements.tsv model_files: diff --git a/petabtests/cases/v2.0.0/sbml/0009/_conditions.tsv b/petabtests/cases/v2.0.0/sbml/0009/_conditions.tsv index 834fafc..f9015bc 100644 --- a/petabtests/cases/v2.0.0/sbml/0009/_conditions.tsv +++ b/petabtests/cases/v2.0.0/sbml/0009/_conditions.tsv @@ -1,3 +1,3 @@ -conditionId k1 -preeq_c0 0.3 -c0 0.8 +conditionId targetId targetValue +preeq_c0 k1 0.3 +c0 k1 0.8 diff --git a/petabtests/cases/v2.0.0/sbml/0009/_experiments.tsv b/petabtests/cases/v2.0.0/sbml/0009/_experiments.tsv new file mode 100644 index 0000000..430d0ee --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0009/_experiments.tsv @@ -0,0 +1,3 @@ +experimentId time conditionId +e0 -inf preeq_c0 +e0 0.0 c0 diff --git a/petabtests/cases/v2.0.0/sbml/0009/_measurements.tsv b/petabtests/cases/v2.0.0/sbml/0009/_measurements.tsv index a9a1cb0..04fe53f 100644 --- a/petabtests/cases/v2.0.0/sbml/0009/_measurements.tsv +++ b/petabtests/cases/v2.0.0/sbml/0009/_measurements.tsv @@ -1,3 +1,3 @@ -observableId preequilibrationConditionId simulationConditionId time measurement -obs_a preeq_c0 c0 1 0.7 -obs_a preeq_c0 c0 10 0.1 +observableId experimentId time measurement observableParameters noiseParameters +obs_a e0 1.0 0.7 +obs_a e0 10.0 0.1 diff --git a/petabtests/cases/v2.0.0/sbml/0009/_observables.tsv b/petabtests/cases/v2.0.0/sbml/0009/_observables.tsv index 0b78dd1..bc320b2 100644 --- a/petabtests/cases/v2.0.0/sbml/0009/_observables.tsv +++ b/petabtests/cases/v2.0.0/sbml/0009/_observables.tsv @@ -1,2 +1,2 @@ -observableId observableFormula noiseFormula -obs_a A 0.5 +observableId observableName observableFormula noiseFormula noiseDistribution +obs_a A 0.500000000000000 normal diff --git a/petabtests/cases/v2.0.0/sbml/0009/_parameters.tsv b/petabtests/cases/v2.0.0/sbml/0009/_parameters.tsv index 69c6ade..f949bf6 100644 --- a/petabtests/cases/v2.0.0/sbml/0009/_parameters.tsv +++ b/petabtests/cases/v2.0.0/sbml/0009/_parameters.tsv @@ -1,4 +1,4 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -a0 lin 0 10 1.0 1 -b0 lin 0 10 0.0 1 -k2 lin 0 10 0.6 1 +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +a0 0.0 10.0 1.0 true +b0 0.0 10.0 0.0 true +k2 0.0 10.0 0.6 true diff --git a/petabtests/cases/v2.0.0/sbml/0009/_simulations.tsv b/petabtests/cases/v2.0.0/sbml/0009/_simulations.tsv index 0b86e24..40a61b3 100644 --- a/petabtests/cases/v2.0.0/sbml/0009/_simulations.tsv +++ b/petabtests/cases/v2.0.0/sbml/0009/_simulations.tsv @@ -1,3 +1,3 @@ -observableId preequilibrationConditionId simulationConditionId time simulation -obs_a preeq_c0 c0 1 0.48728499141466824 -obs_a preeq_c0 c0 10 0.42857162655445696 +observableId experimentId time simulation observableParameters noiseParameters +obs_a e0 1.0 0.48728499141466824 +obs_a e0 10.0 0.42857162655445696 diff --git a/petabtests/cases/v2.0.0/sbml/0010/0010.py b/petabtests/cases/v2.0.0/sbml/0010/0010.py index 1d6e305..1e9c02c 100644 --- a/petabtests/cases/v2.0.0/sbml/0010/0010.py +++ b/petabtests/cases/v2.0.0/sbml/0010/0010.py @@ -1,9 +1,9 @@ from inspect import cleandoc -import pandas as pd -from petab.v1.C import * +from petab.v2.C import * +from petab.v2 import Problem -from petabtests import DEFAULT_SBML_FILE, PetabTestCase, analytical_a +from petabtests import DEFAULT_SBML_FILE, PetabV2TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -22,47 +22,29 @@ """) # problem -------------------------------------------------------------------- +problem = Problem() -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["preeq_c0", "c0"], - "k1": [0.3, 0.8], - "B": [0, 1], - } -).set_index([CONDITION_ID]) - -measurement_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a", "obs_a"], - PREEQUILIBRATION_CONDITION_ID: ["preeq_c0", "preeq_c0"], - SIMULATION_CONDITION_ID: ["c0", "c0"], - TIME: [1, 10], - MEASUREMENT: [0.7, 0.1], - } -) +problem.add_condition("preeq_c0", k1=0.3, B=0) +problem.add_condition("c0", k1=0.8, B=1) + +problem.add_experiment("e0", "-inf", "preeq_c0", 0, "c0") + +problem.add_observable("obs_a", "A", noise_formula="0.5") -observable_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a"], - OBSERVABLE_FORMULA: ["A"], - NOISE_FORMULA: [0.5], - } -).set_index([OBSERVABLE_ID]) - -parameter_df = pd.DataFrame( - data={ - PARAMETER_ID: ["k2"], - PARAMETER_SCALE: [LIN], - LOWER_BOUND: [0], - UPPER_BOUND: [10], - NOMINAL_VALUE: [0.6], - ESTIMATE: [1], - } -).set_index(PARAMETER_ID) +problem.add_measurement("obs_a", "e0", 1, 0.7) +problem.add_measurement("obs_a", "e0", 10, 0.1) + +problem.add_parameter( + "k2", + lb=0, + ub=10, + nominal_value=0.6, + estimate=True, +) # solutions ------------------------------------------------------------------ -simulation_df = measurement_df.copy(deep=True).rename( +simulation_df = problem.measurement_df.copy(deep=True).rename( columns={MEASUREMENT: SIMULATION} ) # simulate for far time point as steady state @@ -72,15 +54,12 @@ analytical_a(t, steady_state_a, 1, 0.8, 0.6) for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV2TestCase.from_problem( id=10, brief="Simulation. Preequilibration. One species reinitialized, one not. " "InitialAssignment to species overridden.", description=DESCRIPTION, model=DEFAULT_SBML_FILE, - condition_dfs=[condition_df], - observable_dfs=[observable_df], - measurement_dfs=[measurement_df], - simulation_dfs=[simulation_df], - parameter_df=parameter_df, + problem=problem, + simulation_df=simulation_df, ) diff --git a/petabtests/cases/v2.0.0/sbml/0010/_0010.yaml b/petabtests/cases/v2.0.0/sbml/0010/_0010.yaml index b1337e7..60f4298 100644 --- a/petabtests/cases/v2.0.0/sbml/0010/_0010.yaml +++ b/petabtests/cases/v2.0.0/sbml/0010/_0010.yaml @@ -3,6 +3,8 @@ parameter_file: _parameters.tsv problems: - condition_files: - _conditions.tsv + experiment_files: + - _experiments.tsv measurement_files: - _measurements.tsv model_files: diff --git a/petabtests/cases/v2.0.0/sbml/0010/_conditions.tsv b/petabtests/cases/v2.0.0/sbml/0010/_conditions.tsv index 96cbc94..01d5b3d 100644 --- a/petabtests/cases/v2.0.0/sbml/0010/_conditions.tsv +++ b/petabtests/cases/v2.0.0/sbml/0010/_conditions.tsv @@ -1,3 +1,5 @@ -conditionId k1 B -preeq_c0 0.3 0 -c0 0.8 1 +conditionId targetId targetValue +preeq_c0 k1 0.3 +preeq_c0 B 0.0 +c0 k1 0.8 +c0 B 1.0 diff --git a/petabtests/cases/v2.0.0/sbml/0010/_experiments.tsv b/petabtests/cases/v2.0.0/sbml/0010/_experiments.tsv new file mode 100644 index 0000000..430d0ee --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0010/_experiments.tsv @@ -0,0 +1,3 @@ +experimentId time conditionId +e0 -inf preeq_c0 +e0 0.0 c0 diff --git a/petabtests/cases/v2.0.0/sbml/0010/_measurements.tsv b/petabtests/cases/v2.0.0/sbml/0010/_measurements.tsv index a9a1cb0..04fe53f 100644 --- a/petabtests/cases/v2.0.0/sbml/0010/_measurements.tsv +++ b/petabtests/cases/v2.0.0/sbml/0010/_measurements.tsv @@ -1,3 +1,3 @@ -observableId preequilibrationConditionId simulationConditionId time measurement -obs_a preeq_c0 c0 1 0.7 -obs_a preeq_c0 c0 10 0.1 +observableId experimentId time measurement observableParameters noiseParameters +obs_a e0 1.0 0.7 +obs_a e0 10.0 0.1 diff --git a/petabtests/cases/v2.0.0/sbml/0010/_observables.tsv b/petabtests/cases/v2.0.0/sbml/0010/_observables.tsv index 0b78dd1..bc320b2 100644 --- a/petabtests/cases/v2.0.0/sbml/0010/_observables.tsv +++ b/petabtests/cases/v2.0.0/sbml/0010/_observables.tsv @@ -1,2 +1,2 @@ -observableId observableFormula noiseFormula -obs_a A 0.5 +observableId observableName observableFormula noiseFormula noiseDistribution +obs_a A 0.500000000000000 normal diff --git a/petabtests/cases/v2.0.0/sbml/0010/_parameters.tsv b/petabtests/cases/v2.0.0/sbml/0010/_parameters.tsv index 72b88de..ddd6a62 100644 --- a/petabtests/cases/v2.0.0/sbml/0010/_parameters.tsv +++ b/petabtests/cases/v2.0.0/sbml/0010/_parameters.tsv @@ -1,2 +1,2 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -k2 lin 0 10 0.6 1 +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +k2 0.0 10.0 0.6 true diff --git a/petabtests/cases/v2.0.0/sbml/0010/_simulations.tsv b/petabtests/cases/v2.0.0/sbml/0010/_simulations.tsv index c467087..c1c0571 100644 --- a/petabtests/cases/v2.0.0/sbml/0010/_simulations.tsv +++ b/petabtests/cases/v2.0.0/sbml/0010/_simulations.tsv @@ -1,3 +1,3 @@ -observableId preequilibrationConditionId simulationConditionId time simulation -obs_a preeq_c0 c0 1 0.7025430017170664 -obs_a preeq_c0 c0 10 0.7142856746891086 +observableId experimentId time simulation observableParameters noiseParameters +obs_a e0 1.0 0.7025430017170664 +obs_a e0 10.0 0.7142856746891086 diff --git a/petabtests/cases/v2.0.0/sbml/0011/0011.py b/petabtests/cases/v2.0.0/sbml/0011/0011.py index a004193..7090918 100644 --- a/petabtests/cases/v2.0.0/sbml/0011/0011.py +++ b/petabtests/cases/v2.0.0/sbml/0011/0011.py @@ -1,9 +1,9 @@ from inspect import cleandoc -import pandas as pd -from petab.v1.C import * +from petab.v2.C import * +from petab.v2 import Problem -from petabtests import PetabTestCase, analytical_a, antimony_to_sbml_str +from petabtests import PetabV2TestCase, analytical_a, antimony_to_sbml_str from pathlib import Path DESCRIPTION = cleandoc(""" @@ -38,55 +38,35 @@ model_file = Path(__file__).parent / "_model.xml" model_file.write_text(antimony_to_sbml_str(ant_model)) -condition_df = pd.DataFrame(data={CONDITION_ID: ["c0"], "B": [2]}).set_index( - [CONDITION_ID] -) +problem = Problem() -measurement_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a", "obs_a"], - SIMULATION_CONDITION_ID: ["c0", "c0"], - TIME: [0, 10], - MEASUREMENT: [0.7, 0.1], - } -) +problem.add_condition("c0", B=2) + +problem.add_experiment("e1", 0, "c0") + +problem.add_observable("obs_a", "A", noise_formula="0.5") + +problem.add_measurement("obs_a", "e1", 0, 0.7) +problem.add_measurement("obs_a", "e1", 10, 0.1) + +problem.add_parameter("k1", lb=0, ub=10, nominal_value=0.8, estimate=True) +problem.add_parameter("k2", lb=0, ub=10, nominal_value=0.6, estimate=True) -observable_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a"], - OBSERVABLE_FORMULA: ["A"], - NOISE_FORMULA: [0.5], - } -).set_index([OBSERVABLE_ID]) - -parameter_df = pd.DataFrame( - data={ - PARAMETER_ID: ["k1", "k2"], - PARAMETER_SCALE: [LIN] * 2, - LOWER_BOUND: [0] * 2, - UPPER_BOUND: [10] * 2, - NOMINAL_VALUE: [0.8, 0.6], - ESTIMATE: [1] * 2, - } -).set_index(PARAMETER_ID) # solutions ------------------------------------------------------------------ -simulation_df = measurement_df.copy(deep=True).rename( +simulation_df = problem.measurement_df.copy(deep=True).rename( columns={MEASUREMENT: SIMULATION} ) simulation_df[SIMULATION] = [ analytical_a(t, 1, 2, 0.8, 0.6) for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV2TestCase.from_problem( id=11, brief="Simulation. InitialAssignment to species overridden.", description=DESCRIPTION, model=model_file, - condition_dfs=[condition_df], - observable_dfs=[observable_df], - measurement_dfs=[measurement_df], - simulation_dfs=[simulation_df], - parameter_df=parameter_df, + problem=problem, + simulation_df=simulation_df, ) diff --git a/petabtests/cases/v2.0.0/sbml/0011/_0011.yaml b/petabtests/cases/v2.0.0/sbml/0011/_0011.yaml index b1337e7..60f4298 100644 --- a/petabtests/cases/v2.0.0/sbml/0011/_0011.yaml +++ b/petabtests/cases/v2.0.0/sbml/0011/_0011.yaml @@ -3,6 +3,8 @@ parameter_file: _parameters.tsv problems: - condition_files: - _conditions.tsv + experiment_files: + - _experiments.tsv measurement_files: - _measurements.tsv model_files: diff --git a/petabtests/cases/v2.0.0/sbml/0011/_conditions.tsv b/petabtests/cases/v2.0.0/sbml/0011/_conditions.tsv index e765b36..5d968f9 100644 --- a/petabtests/cases/v2.0.0/sbml/0011/_conditions.tsv +++ b/petabtests/cases/v2.0.0/sbml/0011/_conditions.tsv @@ -1,2 +1,2 @@ -conditionId B -c0 2 +conditionId targetId targetValue +c0 B 2.0 diff --git a/petabtests/cases/v2.0.0/sbml/0011/_experiments.tsv b/petabtests/cases/v2.0.0/sbml/0011/_experiments.tsv new file mode 100644 index 0000000..5d8c1e0 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0011/_experiments.tsv @@ -0,0 +1,2 @@ +experimentId time conditionId +e1 0.0 c0 diff --git a/petabtests/cases/v2.0.0/sbml/0011/_measurements.tsv b/petabtests/cases/v2.0.0/sbml/0011/_measurements.tsv index a497632..841e0ee 100644 --- a/petabtests/cases/v2.0.0/sbml/0011/_measurements.tsv +++ b/petabtests/cases/v2.0.0/sbml/0011/_measurements.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time measurement -obs_a c0 0 0.7 -obs_a c0 10 0.1 +observableId experimentId time measurement observableParameters noiseParameters +obs_a e1 0.0 0.7 +obs_a e1 10.0 0.1 diff --git a/petabtests/cases/v2.0.0/sbml/0011/_model.xml b/petabtests/cases/v2.0.0/sbml/0011/_model.xml index 3da37e6..20d64bd 100644 --- a/petabtests/cases/v2.0.0/sbml/0011/_model.xml +++ b/petabtests/cases/v2.0.0/sbml/0011/_model.xml @@ -1,5 +1,5 @@ - + diff --git a/petabtests/cases/v2.0.0/sbml/0011/_observables.tsv b/petabtests/cases/v2.0.0/sbml/0011/_observables.tsv index 0b78dd1..bc320b2 100644 --- a/petabtests/cases/v2.0.0/sbml/0011/_observables.tsv +++ b/petabtests/cases/v2.0.0/sbml/0011/_observables.tsv @@ -1,2 +1,2 @@ -observableId observableFormula noiseFormula -obs_a A 0.5 +observableId observableName observableFormula noiseFormula noiseDistribution +obs_a A 0.500000000000000 normal diff --git a/petabtests/cases/v2.0.0/sbml/0011/_parameters.tsv b/petabtests/cases/v2.0.0/sbml/0011/_parameters.tsv index bf45aa8..852192d 100644 --- a/petabtests/cases/v2.0.0/sbml/0011/_parameters.tsv +++ b/petabtests/cases/v2.0.0/sbml/0011/_parameters.tsv @@ -1,3 +1,3 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -k1 lin 0 10 0.8 1 -k2 lin 0 10 0.6 1 +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +k1 0.0 10.0 0.8 true +k2 0.0 10.0 0.6 true diff --git a/petabtests/cases/v2.0.0/sbml/0011/_simulations.tsv b/petabtests/cases/v2.0.0/sbml/0011/_simulations.tsv index b57949d..8ecb598 100644 --- a/petabtests/cases/v2.0.0/sbml/0011/_simulations.tsv +++ b/petabtests/cases/v2.0.0/sbml/0011/_simulations.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time simulation -obs_a c0 0 1.0 -obs_a c0 10 1.2857140481346516 +observableId experimentId time simulation observableParameters noiseParameters +obs_a e1 0.0 1.0 +obs_a e1 10.0 1.2857140481346516 diff --git a/petabtests/cases/v2.0.0/sbml/0012/0012.py b/petabtests/cases/v2.0.0/sbml/0012/0012.py index 9c14959..fbc73b5 100644 --- a/petabtests/cases/v2.0.0/sbml/0012/0012.py +++ b/petabtests/cases/v2.0.0/sbml/0012/0012.py @@ -1,9 +1,9 @@ from inspect import cleandoc -import pandas as pd -from petab.v1.C import * +from petab.v2.C import * +from petab.v2 import Problem -from petabtests import DEFAULT_SBML_FILE, PetabTestCase, analytical_a +from petabtests import DEFAULT_SBML_FILE, PetabV2TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -18,44 +18,23 @@ # problem -------------------------------------------------------------------- -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["c0"], - "compartment": [3], - } -).set_index([CONDITION_ID]) - -measurement_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a", "obs_a"], - SIMULATION_CONDITION_ID: ["c0", "c0"], - TIME: [0, 10], - MEASUREMENT: [0.7, 0.1], - } -) +problem = Problem() + +problem.add_condition("c0", compartment=3) + +problem.add_experiment("e0", 0, "c0") + +problem.add_observable("obs_a", "A", noise_formula="0.5") + +problem.add_measurement("obs_a", "e0", 0, 0.7) +problem.add_measurement("obs_a", "e0", 10, 0.1) -observable_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a"], - OBSERVABLE_FORMULA: ["A"], - NOISE_FORMULA: [0.5], - } -).set_index([OBSERVABLE_ID]) - -parameter_df = pd.DataFrame( - data={ - PARAMETER_ID: ["k1", "k2"], - PARAMETER_SCALE: [LIN] * 2, - LOWER_BOUND: [0] * 2, - UPPER_BOUND: [10] * 2, - NOMINAL_VALUE: [0.8, 0.6], - ESTIMATE: [1] * 2, - } -).set_index(PARAMETER_ID) +problem.add_parameter("k1", lb=0, ub=10, nominal_value=0.8, estimate=True) +problem.add_parameter("k2", lb=0, ub=10, nominal_value=0.6, estimate=True) # solutions ------------------------------------------------------------------ -simulation_df = measurement_df.copy(deep=True).rename( +simulation_df = problem.measurement_df.copy(deep=True).rename( columns={MEASUREMENT: SIMULATION} ) # in the model, concentrations are used, which do not depend on the @@ -64,14 +43,11 @@ analytical_a(t, 1, 1, 0.8, 0.6) for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV2TestCase.from_problem( id=12, brief="Simulation. Initial compartment size in condition table.", description=DESCRIPTION, model=DEFAULT_SBML_FILE, - condition_dfs=[condition_df], - observable_dfs=[observable_df], - measurement_dfs=[measurement_df], - simulation_dfs=[simulation_df], - parameter_df=parameter_df, + problem=problem, + simulation_df=simulation_df, ) diff --git a/petabtests/cases/v2.0.0/sbml/0012/_0012.yaml b/petabtests/cases/v2.0.0/sbml/0012/_0012.yaml index b1337e7..60f4298 100644 --- a/petabtests/cases/v2.0.0/sbml/0012/_0012.yaml +++ b/petabtests/cases/v2.0.0/sbml/0012/_0012.yaml @@ -3,6 +3,8 @@ parameter_file: _parameters.tsv problems: - condition_files: - _conditions.tsv + experiment_files: + - _experiments.tsv measurement_files: - _measurements.tsv model_files: diff --git a/petabtests/cases/v2.0.0/sbml/0012/_conditions.tsv b/petabtests/cases/v2.0.0/sbml/0012/_conditions.tsv index 13666c2..2feb7bc 100644 --- a/petabtests/cases/v2.0.0/sbml/0012/_conditions.tsv +++ b/petabtests/cases/v2.0.0/sbml/0012/_conditions.tsv @@ -1,2 +1,2 @@ -conditionId compartment -c0 3 +conditionId targetId targetValue +c0 compartment 3.0 diff --git a/petabtests/cases/v2.0.0/sbml/0012/_experiments.tsv b/petabtests/cases/v2.0.0/sbml/0012/_experiments.tsv new file mode 100644 index 0000000..767b390 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0012/_experiments.tsv @@ -0,0 +1,2 @@ +experimentId time conditionId +e0 0.0 c0 diff --git a/petabtests/cases/v2.0.0/sbml/0012/_measurements.tsv b/petabtests/cases/v2.0.0/sbml/0012/_measurements.tsv index a497632..5d04578 100644 --- a/petabtests/cases/v2.0.0/sbml/0012/_measurements.tsv +++ b/petabtests/cases/v2.0.0/sbml/0012/_measurements.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time measurement -obs_a c0 0 0.7 -obs_a c0 10 0.1 +observableId experimentId time measurement observableParameters noiseParameters +obs_a e0 0.0 0.7 +obs_a e0 10.0 0.1 diff --git a/petabtests/cases/v2.0.0/sbml/0012/_observables.tsv b/petabtests/cases/v2.0.0/sbml/0012/_observables.tsv index 0b78dd1..bc320b2 100644 --- a/petabtests/cases/v2.0.0/sbml/0012/_observables.tsv +++ b/petabtests/cases/v2.0.0/sbml/0012/_observables.tsv @@ -1,2 +1,2 @@ -observableId observableFormula noiseFormula -obs_a A 0.5 +observableId observableName observableFormula noiseFormula noiseDistribution +obs_a A 0.500000000000000 normal diff --git a/petabtests/cases/v2.0.0/sbml/0012/_parameters.tsv b/petabtests/cases/v2.0.0/sbml/0012/_parameters.tsv index bf45aa8..852192d 100644 --- a/petabtests/cases/v2.0.0/sbml/0012/_parameters.tsv +++ b/petabtests/cases/v2.0.0/sbml/0012/_parameters.tsv @@ -1,3 +1,3 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -k1 lin 0 10 0.8 1 -k2 lin 0 10 0.6 1 +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +k1 0.0 10.0 0.8 true +k2 0.0 10.0 0.6 true diff --git a/petabtests/cases/v2.0.0/sbml/0012/_simulations.tsv b/petabtests/cases/v2.0.0/sbml/0012/_simulations.tsv index d9cb2f9..c2c8616 100644 --- a/petabtests/cases/v2.0.0/sbml/0012/_simulations.tsv +++ b/petabtests/cases/v2.0.0/sbml/0012/_simulations.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time simulation -obs_a c0 0 1.0 -obs_a c0 10 0.8571429759326742 +observableId experimentId time simulation observableParameters noiseParameters +obs_a e0 0.0 1.0 +obs_a e0 10.0 0.8571429759326742 diff --git a/petabtests/cases/v2.0.0/sbml/0013/0013.py b/petabtests/cases/v2.0.0/sbml/0013/0013.py index b83d81f..d853d44 100644 --- a/petabtests/cases/v2.0.0/sbml/0013/0013.py +++ b/petabtests/cases/v2.0.0/sbml/0013/0013.py @@ -1,9 +1,8 @@ from inspect import cleandoc -import pandas as pd -from petab.v1.C import * - -from petabtests import PetabTestCase, analytical_a, antimony_to_sbml_str +from petab.v2.C import * +from petab.v2 import Problem +from petabtests import PetabV2TestCase, analytical_a, antimony_to_sbml_str from pathlib import Path DESCRIPTION = cleandoc(""" @@ -36,44 +35,23 @@ model_file = Path(__file__).parent / "_model.xml" model_file.write_text(antimony_to_sbml_str(ant_model)) -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["c0"], - "B": ["par"], - } -).set_index([CONDITION_ID]) - -measurement_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a", "obs_a"], - SIMULATION_CONDITION_ID: ["c0", "c0"], - TIME: [0, 10], - MEASUREMENT: [0.7, 0.1], - } -) +problem = Problem() + +problem.add_condition("c0", B="par") +problem.add_experiment("e1", 0, "c0") + +problem.add_observable("obs_a", "A", noise_formula="0.5") +problem.add_measurement("obs_a", "e1", 0, 0.7) +problem.add_measurement("obs_a", "e1", 10, 0.1) + +problem.add_parameter("k1", lb=0, ub=10, nominal_value=0.8, estimate=True) +problem.add_parameter("k2", lb=0, ub=10, nominal_value=0.6, estimate=True) +problem.add_parameter("par", lb=0, ub=10, nominal_value=7, estimate=True) -observable_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a"], - OBSERVABLE_FORMULA: ["A"], - NOISE_FORMULA: [0.5], - } -).set_index([OBSERVABLE_ID]) - -parameter_df = pd.DataFrame( - data={ - PARAMETER_ID: ["k1", "k2", "par"], - PARAMETER_SCALE: [LIN] * 3, - LOWER_BOUND: [0] * 3, - UPPER_BOUND: [10] * 3, - NOMINAL_VALUE: [0.8, 0.6, 7], - ESTIMATE: [1] * 3, - } -).set_index(PARAMETER_ID) # solutions ------------------------------------------------------------------ -simulation_df = measurement_df.copy(deep=True).rename( +simulation_df = problem.measurement_df.copy(deep=True).rename( columns={MEASUREMENT: SIMULATION} ) # in the model, concentrations are used, which do not depend on the @@ -82,15 +60,12 @@ analytical_a(t, 1, 7, 0.8, 0.6) for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV2TestCase.from_problem( id=13, brief="Simulation. Species with InitialAssignment overridden by " "parameter.", description=DESCRIPTION, model=model_file, - condition_dfs=[condition_df], - observable_dfs=[observable_df], - measurement_dfs=[measurement_df], - simulation_dfs=[simulation_df], - parameter_df=parameter_df, + problem=problem, + simulation_df=simulation_df, ) diff --git a/petabtests/cases/v2.0.0/sbml/0013/_0013.yaml b/petabtests/cases/v2.0.0/sbml/0013/_0013.yaml index b1337e7..60f4298 100644 --- a/petabtests/cases/v2.0.0/sbml/0013/_0013.yaml +++ b/petabtests/cases/v2.0.0/sbml/0013/_0013.yaml @@ -3,6 +3,8 @@ parameter_file: _parameters.tsv problems: - condition_files: - _conditions.tsv + experiment_files: + - _experiments.tsv measurement_files: - _measurements.tsv model_files: diff --git a/petabtests/cases/v2.0.0/sbml/0013/_conditions.tsv b/petabtests/cases/v2.0.0/sbml/0013/_conditions.tsv index a26fa5d..d2e474f 100644 --- a/petabtests/cases/v2.0.0/sbml/0013/_conditions.tsv +++ b/petabtests/cases/v2.0.0/sbml/0013/_conditions.tsv @@ -1,2 +1,2 @@ -conditionId B -c0 par +conditionId targetId targetValue +c0 B par diff --git a/petabtests/cases/v2.0.0/sbml/0013/_experiments.tsv b/petabtests/cases/v2.0.0/sbml/0013/_experiments.tsv new file mode 100644 index 0000000..5d8c1e0 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0013/_experiments.tsv @@ -0,0 +1,2 @@ +experimentId time conditionId +e1 0.0 c0 diff --git a/petabtests/cases/v2.0.0/sbml/0013/_measurements.tsv b/petabtests/cases/v2.0.0/sbml/0013/_measurements.tsv index a497632..841e0ee 100644 --- a/petabtests/cases/v2.0.0/sbml/0013/_measurements.tsv +++ b/petabtests/cases/v2.0.0/sbml/0013/_measurements.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time measurement -obs_a c0 0 0.7 -obs_a c0 10 0.1 +observableId experimentId time measurement observableParameters noiseParameters +obs_a e1 0.0 0.7 +obs_a e1 10.0 0.1 diff --git a/petabtests/cases/v2.0.0/sbml/0013/_model.xml b/petabtests/cases/v2.0.0/sbml/0013/_model.xml index 3da37e6..20d64bd 100644 --- a/petabtests/cases/v2.0.0/sbml/0013/_model.xml +++ b/petabtests/cases/v2.0.0/sbml/0013/_model.xml @@ -1,5 +1,5 @@ - + diff --git a/petabtests/cases/v2.0.0/sbml/0013/_observables.tsv b/petabtests/cases/v2.0.0/sbml/0013/_observables.tsv index 0b78dd1..bc320b2 100644 --- a/petabtests/cases/v2.0.0/sbml/0013/_observables.tsv +++ b/petabtests/cases/v2.0.0/sbml/0013/_observables.tsv @@ -1,2 +1,2 @@ -observableId observableFormula noiseFormula -obs_a A 0.5 +observableId observableName observableFormula noiseFormula noiseDistribution +obs_a A 0.500000000000000 normal diff --git a/petabtests/cases/v2.0.0/sbml/0013/_parameters.tsv b/petabtests/cases/v2.0.0/sbml/0013/_parameters.tsv index bd50c04..cda282f 100644 --- a/petabtests/cases/v2.0.0/sbml/0013/_parameters.tsv +++ b/petabtests/cases/v2.0.0/sbml/0013/_parameters.tsv @@ -1,4 +1,4 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -k1 lin 0 10 0.8 1 -k2 lin 0 10 0.6 1 -par lin 0 10 7.0 1 +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +k1 0.0 10.0 0.8 true +k2 0.0 10.0 0.6 true +par 0.0 10.0 7.0 true diff --git a/petabtests/cases/v2.0.0/sbml/0013/_simulations.tsv b/petabtests/cases/v2.0.0/sbml/0013/_simulations.tsv index 172fa2b..712d4a1 100644 --- a/petabtests/cases/v2.0.0/sbml/0013/_simulations.tsv +++ b/petabtests/cases/v2.0.0/sbml/0013/_simulations.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time simulation -obs_a c0 0 1.0 -obs_a c0 10 3.4285694091445396 +observableId experimentId time simulation observableParameters noiseParameters +obs_a e1 0.0 1.0 +obs_a e1 10.0 3.4285694091445396 diff --git a/petabtests/cases/v2.0.0/sbml/0014/0014.py b/petabtests/cases/v2.0.0/sbml/0014/0014.py index 58ea315..c9e0a90 100644 --- a/petabtests/cases/v2.0.0/sbml/0014/0014.py +++ b/petabtests/cases/v2.0.0/sbml/0014/0014.py @@ -2,8 +2,9 @@ import pandas as pd from petab.v1.C import * +from petab.v2.C import * -from petabtests import DEFAULT_SBML_FILE, PetabTestCase, analytical_a +from petabtests import DEFAULT_SBML_FILE, PetabV2TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -18,12 +19,6 @@ # problem -------------------------------------------------------------------- -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["c0"], - } -).set_index([CONDITION_ID]) - measurement_df = pd.DataFrame( data={ OBSERVABLE_ID: ["obs_a", "obs_a"], @@ -45,11 +40,10 @@ parameter_df = pd.DataFrame( data={ PARAMETER_ID: ["a0", "b0", "k1", "k2"], - PARAMETER_SCALE: [LIN] * 4, LOWER_BOUND: [0] * 4, UPPER_BOUND: [10] * 4, NOMINAL_VALUE: [1, 0, 0.8, 0.6], - ESTIMATE: [1] * 4, + ESTIMATE: ["true"] * 4, } ).set_index(PARAMETER_ID) @@ -62,12 +56,12 @@ analytical_a(t, 1, 0, 0.8, 0.6) for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV2TestCase( id=14, brief="Simulation. Multiple numeric noise parameter overrides.", description=DESCRIPTION, model=DEFAULT_SBML_FILE, - condition_dfs=[condition_df], + condition_dfs=[], observable_dfs=[observable_df], measurement_dfs=[measurement_df], simulation_dfs=[simulation_df], diff --git a/petabtests/cases/v2.0.0/sbml/0014/_0014.yaml b/petabtests/cases/v2.0.0/sbml/0014/_0014.yaml index b1337e7..681b3f0 100644 --- a/petabtests/cases/v2.0.0/sbml/0014/_0014.yaml +++ b/petabtests/cases/v2.0.0/sbml/0014/_0014.yaml @@ -1,8 +1,8 @@ format_version: 2.0.0 parameter_file: _parameters.tsv problems: -- condition_files: - - _conditions.tsv +- condition_files: [] + experiment_files: [] measurement_files: - _measurements.tsv model_files: diff --git a/petabtests/cases/v2.0.0/sbml/0014/_conditions.tsv b/petabtests/cases/v2.0.0/sbml/0014/_conditions.tsv deleted file mode 100644 index f15e327..0000000 --- a/petabtests/cases/v2.0.0/sbml/0014/_conditions.tsv +++ /dev/null @@ -1,2 +0,0 @@ -conditionId -c0 diff --git a/petabtests/cases/v2.0.0/sbml/0014/_parameters.tsv b/petabtests/cases/v2.0.0/sbml/0014/_parameters.tsv index 8c1e5cb..86547bc 100644 --- a/petabtests/cases/v2.0.0/sbml/0014/_parameters.tsv +++ b/petabtests/cases/v2.0.0/sbml/0014/_parameters.tsv @@ -1,5 +1,5 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -a0 lin 0 10 1.0 1 -b0 lin 0 10 0.0 1 -k1 lin 0 10 0.8 1 -k2 lin 0 10 0.6 1 +parameterId lowerBound upperBound nominalValue estimate +a0 0 10 1.0 true +b0 0 10 0.0 true +k1 0 10 0.8 true +k2 0 10 0.6 true diff --git a/petabtests/cases/v2.0.0/sbml/0015/0015.py b/petabtests/cases/v2.0.0/sbml/0015/0015.py index e06d169..9421a38 100644 --- a/petabtests/cases/v2.0.0/sbml/0015/0015.py +++ b/petabtests/cases/v2.0.0/sbml/0015/0015.py @@ -3,7 +3,7 @@ import pandas as pd from petab.v1.C import * -from petabtests import DEFAULT_SBML_FILE, PetabTestCase, analytical_a +from petabtests import DEFAULT_SBML_FILE, PetabV2TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -18,11 +18,6 @@ # problem -------------------------------------------------------------------- -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["c0"], - } -).set_index([CONDITION_ID]) measurement_df = pd.DataFrame( data={ @@ -45,11 +40,10 @@ parameter_df = pd.DataFrame( data={ PARAMETER_ID: ["a0", "b0", "k1", "k2", "noise"], - PARAMETER_SCALE: [LIN] * 5, LOWER_BOUND: [0] * 5, UPPER_BOUND: [10] * 5, NOMINAL_VALUE: [1, 0, 0.8, 0.6, 5], - ESTIMATE: [1] * 5, + ESTIMATE: ["true"] * 5, } ).set_index(PARAMETER_ID) @@ -62,12 +56,12 @@ analytical_a(t, 1, 0, 0.8, 0.6) for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV2TestCase( id=15, brief="Simulation. Single parametric noise parameter override.", description=DESCRIPTION, model=DEFAULT_SBML_FILE, - condition_dfs=[condition_df], + condition_dfs=[], observable_dfs=[observable_df], measurement_dfs=[measurement_df], simulation_dfs=[simulation_df], diff --git a/petabtests/cases/v2.0.0/sbml/0015/_0015.yaml b/petabtests/cases/v2.0.0/sbml/0015/_0015.yaml index b1337e7..681b3f0 100644 --- a/petabtests/cases/v2.0.0/sbml/0015/_0015.yaml +++ b/petabtests/cases/v2.0.0/sbml/0015/_0015.yaml @@ -1,8 +1,8 @@ format_version: 2.0.0 parameter_file: _parameters.tsv problems: -- condition_files: - - _conditions.tsv +- condition_files: [] + experiment_files: [] measurement_files: - _measurements.tsv model_files: diff --git a/petabtests/cases/v2.0.0/sbml/0015/_conditions.tsv b/petabtests/cases/v2.0.0/sbml/0015/_conditions.tsv deleted file mode 100644 index f15e327..0000000 --- a/petabtests/cases/v2.0.0/sbml/0015/_conditions.tsv +++ /dev/null @@ -1,2 +0,0 @@ -conditionId -c0 diff --git a/petabtests/cases/v2.0.0/sbml/0015/_parameters.tsv b/petabtests/cases/v2.0.0/sbml/0015/_parameters.tsv index 46c9b55..5196435 100644 --- a/petabtests/cases/v2.0.0/sbml/0015/_parameters.tsv +++ b/petabtests/cases/v2.0.0/sbml/0015/_parameters.tsv @@ -1,6 +1,6 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -a0 lin 0 10 1.0 1 -b0 lin 0 10 0.0 1 -k1 lin 0 10 0.8 1 -k2 lin 0 10 0.6 1 -noise lin 0 10 5.0 1 +parameterId lowerBound upperBound nominalValue estimate +a0 0 10 1.0 true +b0 0 10 0.0 true +k1 0 10 0.8 true +k2 0 10 0.6 true +noise 0 10 5.0 true diff --git a/petabtests/cases/v2.0.0/sbml/0016/0016.py b/petabtests/cases/v2.0.0/sbml/0016/0016.py index b386406..1e17ba7 100644 --- a/petabtests/cases/v2.0.0/sbml/0016/0016.py +++ b/petabtests/cases/v2.0.0/sbml/0016/0016.py @@ -5,7 +5,7 @@ from petabtests import ( DEFAULT_SBML_FILE, - PetabTestCase, + PetabV2TestCase, analytical_a, analytical_b, ) @@ -26,11 +26,6 @@ """) # problem -------------------------------------------------------------------- -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["c0"], - } -).set_index([CONDITION_ID]) measurement_df = pd.DataFrame( data={ @@ -53,11 +48,10 @@ parameter_df = pd.DataFrame( data={ PARAMETER_ID: ["a0", "b0", "k1", "k2"], - PARAMETER_SCALE: [LIN] * 4, LOWER_BOUND: [0] * 4, UPPER_BOUND: [10] * 4, NOMINAL_VALUE: [1, 0, 0.8, 0.6], - ESTIMATE: [1] * 4, + ESTIMATE: ["true"] * 4, } ).set_index(PARAMETER_ID) @@ -71,12 +65,12 @@ analytical_b(10, 1, 0, 0.8, 0.6), ] -case = PetabTestCase( +case = PetabV2TestCase( id=16, brief="Simulation. Observable transformation log.", description=DESCRIPTION, model=DEFAULT_SBML_FILE, - condition_dfs=[condition_df], + condition_dfs=[], observable_dfs=[observable_df], measurement_dfs=[measurement_df], simulation_dfs=[simulation_df], diff --git a/petabtests/cases/v2.0.0/sbml/0016/_0016.yaml b/petabtests/cases/v2.0.0/sbml/0016/_0016.yaml index b1337e7..681b3f0 100644 --- a/petabtests/cases/v2.0.0/sbml/0016/_0016.yaml +++ b/petabtests/cases/v2.0.0/sbml/0016/_0016.yaml @@ -1,8 +1,8 @@ format_version: 2.0.0 parameter_file: _parameters.tsv problems: -- condition_files: - - _conditions.tsv +- condition_files: [] + experiment_files: [] measurement_files: - _measurements.tsv model_files: diff --git a/petabtests/cases/v2.0.0/sbml/0016/_conditions.tsv b/petabtests/cases/v2.0.0/sbml/0016/_conditions.tsv deleted file mode 100644 index f15e327..0000000 --- a/petabtests/cases/v2.0.0/sbml/0016/_conditions.tsv +++ /dev/null @@ -1,2 +0,0 @@ -conditionId -c0 diff --git a/petabtests/cases/v2.0.0/sbml/0016/_parameters.tsv b/petabtests/cases/v2.0.0/sbml/0016/_parameters.tsv index 8c1e5cb..86547bc 100644 --- a/petabtests/cases/v2.0.0/sbml/0016/_parameters.tsv +++ b/petabtests/cases/v2.0.0/sbml/0016/_parameters.tsv @@ -1,5 +1,5 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -a0 lin 0 10 1.0 1 -b0 lin 0 10 0.0 1 -k1 lin 0 10 0.8 1 -k2 lin 0 10 0.6 1 +parameterId lowerBound upperBound nominalValue estimate +a0 0 10 1.0 true +b0 0 10 0.0 true +k1 0 10 0.8 true +k2 0 10 0.6 true diff --git a/petabtests/cases/v2.0.0/sbml/0017/0017.py b/petabtests/cases/v2.0.0/sbml/0017/0017.py index b82773b..a9edb98 100644 --- a/petabtests/cases/v2.0.0/sbml/0017/0017.py +++ b/petabtests/cases/v2.0.0/sbml/0017/0017.py @@ -1,11 +1,11 @@ from inspect import cleandoc -import pandas as pd -from petab.v1.C import * +from petab.v2.C import * +from petab.v2 import Problem from petabtests import ( DEFAULT_SBML_FILE, - PetabTestCase, + PetabV2TestCase, analytical_a, analytical_b, ) @@ -31,49 +31,25 @@ """) # problem -------------------------------------------------------------------- +problem = Problem() +problem.add_condition("preeq_c0", k1=0.3, B=2.0, A=0) +problem.add_condition("c0", k1=0.8, A=1) -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["preeq_c0", "c0"], - "k1": [0.3, 0.8], - "B": [2.0, "NaN"], - "A": [0, 1], - } -).set_index([CONDITION_ID]) - -measurement_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a", "obs_a"], - PREEQUILIBRATION_CONDITION_ID: ["preeq_c0", "preeq_c0"], - SIMULATION_CONDITION_ID: ["c0", "c0"], - TIME: [1, 10], - MEASUREMENT: [0.7, 0.1], - } -) +problem.add_experiment("e0", "-inf", "preeq_c0", 0, "c0") + +problem.add_observable("obs_a", "A", noise_formula="0.5") -observable_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a"], - OBSERVABLE_FORMULA: ["A"], - NOISE_FORMULA: [0.5], - } -).set_index([OBSERVABLE_ID]) - -parameter_df = pd.DataFrame( - data={ - PARAMETER_ID: ["k2"], - PARAMETER_SCALE: [LIN], - LOWER_BOUND: [0], - UPPER_BOUND: [10], - NOMINAL_VALUE: [0.6], - ESTIMATE: [1], - } -).set_index(PARAMETER_ID) +problem.add_measurement("obs_a", "e0", 1, 0.7) +problem.add_measurement("obs_a", "e0", 10, 0.1) + +problem.add_parameter( + "k2", lb=0, ub=10, nominal_value=0.6, estimate=True, scale=LIN +) # solutions ------------------------------------------------------------------ -simulation_df = measurement_df.copy(deep=True).rename( +simulation_df = problem.measurement_df.copy(deep=True).rename( columns={MEASUREMENT: SIMULATION} ) # simulate for far time point as steady state @@ -83,15 +59,12 @@ analytical_a(t, 1, steady_state_b, 0.8, 0.6) for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV2TestCase.from_problem( id=17, brief="Simulation. Preequilibration. One species reinitialized, one not " "(NaN in condition table). InitialAssignment to species overridden.", description=DESCRIPTION, model=DEFAULT_SBML_FILE, - condition_dfs=[condition_df], - observable_dfs=[observable_df], - measurement_dfs=[measurement_df], - simulation_dfs=[simulation_df], - parameter_df=parameter_df, + problem=problem, + simulation_df=simulation_df, ) diff --git a/petabtests/cases/v2.0.0/sbml/0017/_0017.yaml b/petabtests/cases/v2.0.0/sbml/0017/_0017.yaml index b1337e7..60f4298 100644 --- a/petabtests/cases/v2.0.0/sbml/0017/_0017.yaml +++ b/petabtests/cases/v2.0.0/sbml/0017/_0017.yaml @@ -3,6 +3,8 @@ parameter_file: _parameters.tsv problems: - condition_files: - _conditions.tsv + experiment_files: + - _experiments.tsv measurement_files: - _measurements.tsv model_files: diff --git a/petabtests/cases/v2.0.0/sbml/0017/_conditions.tsv b/petabtests/cases/v2.0.0/sbml/0017/_conditions.tsv index 18cccad..934e234 100644 --- a/petabtests/cases/v2.0.0/sbml/0017/_conditions.tsv +++ b/petabtests/cases/v2.0.0/sbml/0017/_conditions.tsv @@ -1,3 +1,6 @@ -conditionId k1 B A -preeq_c0 0.3 2.0 0 -c0 0.8 NaN 1 +conditionId targetId targetValue +preeq_c0 k1 0.3 +preeq_c0 B 2.0 +preeq_c0 A 0.0 +c0 k1 0.8 +c0 A 1.0 diff --git a/petabtests/cases/v2.0.0/sbml/0017/_experiments.tsv b/petabtests/cases/v2.0.0/sbml/0017/_experiments.tsv new file mode 100644 index 0000000..430d0ee --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0017/_experiments.tsv @@ -0,0 +1,3 @@ +experimentId time conditionId +e0 -inf preeq_c0 +e0 0.0 c0 diff --git a/petabtests/cases/v2.0.0/sbml/0017/_measurements.tsv b/petabtests/cases/v2.0.0/sbml/0017/_measurements.tsv index a9a1cb0..04fe53f 100644 --- a/petabtests/cases/v2.0.0/sbml/0017/_measurements.tsv +++ b/petabtests/cases/v2.0.0/sbml/0017/_measurements.tsv @@ -1,3 +1,3 @@ -observableId preequilibrationConditionId simulationConditionId time measurement -obs_a preeq_c0 c0 1 0.7 -obs_a preeq_c0 c0 10 0.1 +observableId experimentId time measurement observableParameters noiseParameters +obs_a e0 1.0 0.7 +obs_a e0 10.0 0.1 diff --git a/petabtests/cases/v2.0.0/sbml/0017/_observables.tsv b/petabtests/cases/v2.0.0/sbml/0017/_observables.tsv index 0b78dd1..bc320b2 100644 --- a/petabtests/cases/v2.0.0/sbml/0017/_observables.tsv +++ b/petabtests/cases/v2.0.0/sbml/0017/_observables.tsv @@ -1,2 +1,2 @@ -observableId observableFormula noiseFormula -obs_a A 0.5 +observableId observableName observableFormula noiseFormula noiseDistribution +obs_a A 0.500000000000000 normal diff --git a/petabtests/cases/v2.0.0/sbml/0017/_parameters.tsv b/petabtests/cases/v2.0.0/sbml/0017/_parameters.tsv index 72b88de..46522bb 100644 --- a/petabtests/cases/v2.0.0/sbml/0017/_parameters.tsv +++ b/petabtests/cases/v2.0.0/sbml/0017/_parameters.tsv @@ -1,2 +1,2 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -k2 lin 0 10 0.6 1 +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters parameterScale +k2 0.0 10.0 0.6 true lin diff --git a/petabtests/cases/v2.0.0/sbml/0017/_simulations.tsv b/petabtests/cases/v2.0.0/sbml/0017/_simulations.tsv index 8155bb8..f48802b 100644 --- a/petabtests/cases/v2.0.0/sbml/0017/_simulations.tsv +++ b/petabtests/cases/v2.0.0/sbml/0017/_simulations.tsv @@ -1,3 +1,3 @@ -observableId preequilibrationConditionId simulationConditionId time simulation -obs_a preeq_c0 c0 1 0.7847419896976019 -obs_a preeq_c0 c0 10 0.7142859518653484 +observableId experimentId time simulation observableParameters noiseParameters +obs_a e0 1.0 0.7847419896976019 +obs_a e0 10.0 0.7142859518653484 diff --git a/petabtests/cases/v2.0.0/sbml/0018/0018.py b/petabtests/cases/v2.0.0/sbml/0018/0018.py index 2b3586f..15ab124 100644 --- a/petabtests/cases/v2.0.0/sbml/0018/0018.py +++ b/petabtests/cases/v2.0.0/sbml/0018/0018.py @@ -1,10 +1,10 @@ from inspect import cleandoc -import pandas as pd -from petab.v1.C import * +from petab.v2.C import * +from petab.v2 import Problem from pathlib import Path from petabtests import ( - PetabTestCase, + PetabV2TestCase, analytical_a, analytical_b, antimony_to_sbml_str, @@ -50,48 +50,27 @@ """ sbml_file.write_text(antimony_to_sbml_str(ant_model)) -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["preeq_c0", "c0"], - "k1": [0.3, 0.8], - "B": [2.0, "NaN"], - "A": [0, 1], - } -).set_index([CONDITION_ID]) - -measurement_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a"] * 3 + ["obs_b"], - PREEQUILIBRATION_CONDITION_ID: ["preeq_c0"] * 4, - SIMULATION_CONDITION_ID: ["c0"] * 4, - TIME: [0, 1, 10, 0], - MEASUREMENT: [0.1, 0.7, 0.1, 0.1], - } -) +problem = Problem() + +problem.add_condition("preeq_c0", k1=0.3, B=2.0, A=0) +problem.add_condition("c0", k1=0.8, A=1) + +problem.add_experiment("e0", "-inf", "preeq_c0", 0, "c0") + +problem.add_observable("obs_a", "A", noise_formula="0.5") +problem.add_observable("obs_b", "B", noise_formula="0.2") + +problem.add_measurement("obs_a", "e0", 0, 0.1) +problem.add_measurement("obs_a", "e0", 1, 0.7) +problem.add_measurement("obs_a", "e0", 10, 0.1) +problem.add_measurement("obs_b", "e0", 0, 0.1) -observable_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a", "obs_b"], - OBSERVABLE_FORMULA: ["A", "B"], - NOISE_FORMULA: [0.5, 0.2], - } -).set_index([OBSERVABLE_ID]) - -parameter_df = pd.DataFrame( - data={ - PARAMETER_ID: ["k2"], - PARAMETER_SCALE: [LIN], - LOWER_BOUND: [0], - UPPER_BOUND: [10], - NOMINAL_VALUE: [0.6], - ESTIMATE: [1], - } -).set_index(PARAMETER_ID) +problem.add_parameter("k2", lb=0, ub=10, nominal_value=0.6, estimate=True) # solutions ------------------------------------------------------------------ -simulation_df = measurement_df.copy(deep=True).rename( +simulation_df = problem.measurement_df.copy(deep=True).rename( columns={MEASUREMENT: SIMULATION} ) # simulate for far time point as steady state @@ -105,16 +84,13 @@ ][3:] -case = PetabTestCase( +case = PetabV2TestCase.from_problem( id=18, brief="Simulation. Preequilibration and RateRules. One state " "reinitialized, one not (NaN in condition table). InitialAssignment " "to species overridden.", description=DESCRIPTION, model=sbml_file, - condition_dfs=[condition_df], - observable_dfs=[observable_df], - measurement_dfs=[measurement_df], - simulation_dfs=[simulation_df], - parameter_df=parameter_df, + problem=problem, + simulation_df=simulation_df, ) diff --git a/petabtests/cases/v2.0.0/sbml/0018/_0018.yaml b/petabtests/cases/v2.0.0/sbml/0018/_0018.yaml index b1337e7..60f4298 100644 --- a/petabtests/cases/v2.0.0/sbml/0018/_0018.yaml +++ b/petabtests/cases/v2.0.0/sbml/0018/_0018.yaml @@ -3,6 +3,8 @@ parameter_file: _parameters.tsv problems: - condition_files: - _conditions.tsv + experiment_files: + - _experiments.tsv measurement_files: - _measurements.tsv model_files: diff --git a/petabtests/cases/v2.0.0/sbml/0018/_conditions.tsv b/petabtests/cases/v2.0.0/sbml/0018/_conditions.tsv index 18cccad..934e234 100644 --- a/petabtests/cases/v2.0.0/sbml/0018/_conditions.tsv +++ b/petabtests/cases/v2.0.0/sbml/0018/_conditions.tsv @@ -1,3 +1,6 @@ -conditionId k1 B A -preeq_c0 0.3 2.0 0 -c0 0.8 NaN 1 +conditionId targetId targetValue +preeq_c0 k1 0.3 +preeq_c0 B 2.0 +preeq_c0 A 0.0 +c0 k1 0.8 +c0 A 1.0 diff --git a/petabtests/cases/v2.0.0/sbml/0018/_experiments.tsv b/petabtests/cases/v2.0.0/sbml/0018/_experiments.tsv new file mode 100644 index 0000000..430d0ee --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0018/_experiments.tsv @@ -0,0 +1,3 @@ +experimentId time conditionId +e0 -inf preeq_c0 +e0 0.0 c0 diff --git a/petabtests/cases/v2.0.0/sbml/0018/_measurements.tsv b/petabtests/cases/v2.0.0/sbml/0018/_measurements.tsv index b3885d3..8cc934c 100644 --- a/petabtests/cases/v2.0.0/sbml/0018/_measurements.tsv +++ b/petabtests/cases/v2.0.0/sbml/0018/_measurements.tsv @@ -1,5 +1,5 @@ -observableId preequilibrationConditionId simulationConditionId time measurement -obs_a preeq_c0 c0 0 0.1 -obs_a preeq_c0 c0 1 0.7 -obs_a preeq_c0 c0 10 0.1 -obs_b preeq_c0 c0 0 0.1 +observableId experimentId time measurement observableParameters noiseParameters +obs_a e0 0.0 0.1 +obs_a e0 1.0 0.7 +obs_a e0 10.0 0.1 +obs_b e0 0.0 0.1 diff --git a/petabtests/cases/v2.0.0/sbml/0018/_model.xml b/petabtests/cases/v2.0.0/sbml/0018/_model.xml index c3df580..30ffc31 100644 --- a/petabtests/cases/v2.0.0/sbml/0018/_model.xml +++ b/petabtests/cases/v2.0.0/sbml/0018/_model.xml @@ -1,5 +1,5 @@ - + diff --git a/petabtests/cases/v2.0.0/sbml/0018/_observables.tsv b/petabtests/cases/v2.0.0/sbml/0018/_observables.tsv index 944a47c..4d2b3a6 100644 --- a/petabtests/cases/v2.0.0/sbml/0018/_observables.tsv +++ b/petabtests/cases/v2.0.0/sbml/0018/_observables.tsv @@ -1,3 +1,3 @@ -observableId observableFormula noiseFormula -obs_a A 0.5 -obs_b B 0.2 +observableId observableName observableFormula noiseFormula noiseDistribution +obs_a A 0.500000000000000 normal +obs_b B 0.200000000000000 normal diff --git a/petabtests/cases/v2.0.0/sbml/0018/_parameters.tsv b/petabtests/cases/v2.0.0/sbml/0018/_parameters.tsv index 72b88de..ddd6a62 100644 --- a/petabtests/cases/v2.0.0/sbml/0018/_parameters.tsv +++ b/petabtests/cases/v2.0.0/sbml/0018/_parameters.tsv @@ -1,2 +1,2 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -k2 lin 0 10 0.6 1 +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +k2 0.0 10.0 0.6 true diff --git a/petabtests/cases/v2.0.0/sbml/0018/_simulations.tsv b/petabtests/cases/v2.0.0/sbml/0018/_simulations.tsv index 2e2dd01..49c2f7d 100644 --- a/petabtests/cases/v2.0.0/sbml/0018/_simulations.tsv +++ b/petabtests/cases/v2.0.0/sbml/0018/_simulations.tsv @@ -1,5 +1,5 @@ -observableId preequilibrationConditionId simulationConditionId time simulation -obs_a preeq_c0 c0 0 1.0 -obs_a preeq_c0 c0 1 0.7847419896976019 -obs_a preeq_c0 c0 10 0.7142859518653484 -obs_b preeq_c0 c0 0 0.6666666666666667 +observableId experimentId time simulation observableParameters noiseParameters +obs_a e0 0.0 1.0 +obs_a e0 1.0 0.7847419896976019 +obs_a e0 10.0 0.7142859518653484 +obs_b e0 0.0 0.6666666666666667 diff --git a/petabtests/cases/v2.0.0/sbml/0018/model.xml b/petabtests/cases/v2.0.0/sbml/0018/model.xml index c3df580..30ffc31 100644 --- a/petabtests/cases/v2.0.0/sbml/0018/model.xml +++ b/petabtests/cases/v2.0.0/sbml/0018/model.xml @@ -1,5 +1,5 @@ - + diff --git a/petabtests/cases/v2.0.0/sbml/0019/0019.py b/petabtests/cases/v2.0.0/sbml/0019/0019.py index 55a9921..0dff8d6 100644 --- a/petabtests/cases/v2.0.0/sbml/0019/0019.py +++ b/petabtests/cases/v2.0.0/sbml/0019/0019.py @@ -1,9 +1,8 @@ from inspect import cleandoc -import pandas as pd -from petab.v1.C import * - -from petabtests import DEFAULT_SBML_FILE, PetabTestCase, analytical_a +from petab.v2.C import * +from petab.v2 import Problem +from petabtests import DEFAULT_SBML_FILE, PetabV2TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -17,74 +16,40 @@ """) # problem -------------------------------------------------------------------- +problem = Problem() # TODO use mapping here -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["c0"], - } -).set_index([CONDITION_ID]) - -measurement_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a", "obs_a"], - SIMULATION_CONDITION_ID: ["c0", "c0"], - TIME: [0, 10], - MEASUREMENT: [0.7, 0.1], - } -) - -observable_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a"], - OBSERVABLE_FORMULA: ["maps_to_A"], - NOISE_FORMULA: [0.5], - } -).set_index([OBSERVABLE_ID]) - -parameter_df = pd.DataFrame( - data={ - PARAMETER_ID: ["a0", "maps_to_b0", "k1", "maps_to_k2"], - PARAMETER_SCALE: [LIN] * 4, - LOWER_BOUND: [0] * 4, - UPPER_BOUND: [10] * 4, - NOMINAL_VALUE: [1, 0, 0.8, 0.6], - ESTIMATE: [1] * 4, - } -).set_index(PARAMETER_ID) +problem.add_measurement("obs_a", "", 0, 0.7) +problem.add_measurement("obs_a", "", 10, 0.1) +problem.add_observable("obs_a", "maps_to_A", 0.5) +problem.add_parameter("a0", lb=0, ub=10, nominal_value=1) +problem.add_parameter("maps_to_b0", lb=0, ub=10, nominal_value=0) +problem.add_parameter("k1", lb=0, ub=10, nominal_value=0.8) +problem.add_parameter("maps_to_k2", lb=0, ub=10, nominal_value=0.6) +problem.add_mapping("maps_to_a0", "a0") +problem.add_mapping("maps_to_b0", "b0") +problem.add_mapping("maps_to_k1", "k1") +problem.add_mapping("maps_to_k2", "k2") +problem.add_mapping("maps_to_A", "A") +problem.add_mapping("maps_to_B", "B") # solutions ------------------------------------------------------------------ -simulation_df = measurement_df.copy(deep=True).rename( +simulation_df = problem.measurement_df.copy(deep=True).rename( columns={MEASUREMENT: SIMULATION} ) simulation_df[SIMULATION] = [ analytical_a(t, 1, 0, 0.8, 0.6) for t in simulation_df[TIME] ] - -mapping_df = pd.DataFrame( - data={ - PETAB_ENTITY_ID: [ - "maps_to_a0", - "maps_to_b0", - "maps_to_k1", - "maps_to_k2", - "maps_to_A", - "maps_to_B", - ], - MODEL_ENTITY_ID: ["a0", "b0", "k1", "k2", "A", "B"], - } -).set_index(PETAB_ENTITY_ID) - -case = PetabTestCase( +case = PetabV2TestCase( id=19, brief="Mapping table.", description=DESCRIPTION, # TODO add local parameter and use in mapping table model=DEFAULT_SBML_FILE, - condition_dfs=[condition_df], - observable_dfs=[observable_df], - measurement_dfs=[measurement_df], + condition_dfs=[], + observable_dfs=[problem.observable_df], + measurement_dfs=[problem.measurement_df], simulation_dfs=[simulation_df], - parameter_df=parameter_df, - mapping_df=mapping_df, + parameter_df=problem.parameter_df, + mapping_df=problem.mapping_df, ) diff --git a/petabtests/cases/v2.0.0/sbml/0019/_0019.yaml b/petabtests/cases/v2.0.0/sbml/0019/_0019.yaml index c87fb5a..86402e6 100644 --- a/petabtests/cases/v2.0.0/sbml/0019/_0019.yaml +++ b/petabtests/cases/v2.0.0/sbml/0019/_0019.yaml @@ -1,8 +1,8 @@ format_version: 2.0.0 parameter_file: _parameters.tsv problems: -- condition_files: - - _conditions.tsv +- condition_files: [] + experiment_files: [] mapping_files: - _mapping.tsv measurement_files: diff --git a/petabtests/cases/v2.0.0/sbml/0019/_conditions.tsv b/petabtests/cases/v2.0.0/sbml/0019/_conditions.tsv deleted file mode 100644 index f15e327..0000000 --- a/petabtests/cases/v2.0.0/sbml/0019/_conditions.tsv +++ /dev/null @@ -1,2 +0,0 @@ -conditionId -c0 diff --git a/petabtests/cases/v2.0.0/sbml/0019/_mapping.tsv b/petabtests/cases/v2.0.0/sbml/0019/_mapping.tsv index d4cd013..7dad4f7 100644 --- a/petabtests/cases/v2.0.0/sbml/0019/_mapping.tsv +++ b/petabtests/cases/v2.0.0/sbml/0019/_mapping.tsv @@ -1,7 +1,7 @@ -petabEntityId modelEntityId -maps_to_a0 a0 -maps_to_b0 b0 -maps_to_k1 k1 -maps_to_k2 k2 -maps_to_A A -maps_to_B B +petabEntityId modelEntityId name +maps_to_a0 a0 +maps_to_b0 b0 +maps_to_k1 k1 +maps_to_k2 k2 +maps_to_A A +maps_to_B B diff --git a/petabtests/cases/v2.0.0/sbml/0019/_measurements.tsv b/petabtests/cases/v2.0.0/sbml/0019/_measurements.tsv index a497632..e190344 100644 --- a/petabtests/cases/v2.0.0/sbml/0019/_measurements.tsv +++ b/petabtests/cases/v2.0.0/sbml/0019/_measurements.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time measurement -obs_a c0 0 0.7 -obs_a c0 10 0.1 +observableId experimentId time measurement observableParameters noiseParameters +obs_a 0.0 0.7 +obs_a 10.0 0.1 diff --git a/petabtests/cases/v2.0.0/sbml/0019/_observables.tsv b/petabtests/cases/v2.0.0/sbml/0019/_observables.tsv index b86c5b9..376a77d 100644 --- a/petabtests/cases/v2.0.0/sbml/0019/_observables.tsv +++ b/petabtests/cases/v2.0.0/sbml/0019/_observables.tsv @@ -1,2 +1,2 @@ -observableId observableFormula noiseFormula -obs_a maps_to_A 0.5 +observableId observableName observableFormula noiseFormula noiseDistribution +obs_a maps_to_A 0.500000000000000 normal diff --git a/petabtests/cases/v2.0.0/sbml/0019/_parameters.tsv b/petabtests/cases/v2.0.0/sbml/0019/_parameters.tsv index 797509b..b144e20 100644 --- a/petabtests/cases/v2.0.0/sbml/0019/_parameters.tsv +++ b/petabtests/cases/v2.0.0/sbml/0019/_parameters.tsv @@ -1,5 +1,5 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -a0 lin 0 10 1.0 1 -maps_to_b0 lin 0 10 0.0 1 -k1 lin 0 10 0.8 1 -maps_to_k2 lin 0 10 0.6 1 +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +a0 0.0 10.0 1.0 true +maps_to_b0 0.0 10.0 0.0 true +k1 0.0 10.0 0.8 true +maps_to_k2 0.0 10.0 0.6 true diff --git a/petabtests/cases/v2.0.0/sbml/0019/_simulations.tsv b/petabtests/cases/v2.0.0/sbml/0019/_simulations.tsv index c1339e4..f9fa417 100644 --- a/petabtests/cases/v2.0.0/sbml/0019/_simulations.tsv +++ b/petabtests/cases/v2.0.0/sbml/0019/_simulations.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time simulation -obs_a c0 0 1.0 -obs_a c0 10 0.42857190373069665 +observableId experimentId time simulation observableParameters noiseParameters +obs_a 0.0 1.0 +obs_a 10.0 0.42857190373069665 diff --git a/petabtests/cases/v2.0.0/sbml/0020/0020.py b/petabtests/cases/v2.0.0/sbml/0020/0020.py index 788068e..1336f17 100644 --- a/petabtests/cases/v2.0.0/sbml/0020/0020.py +++ b/petabtests/cases/v2.0.0/sbml/0020/0020.py @@ -1,9 +1,9 @@ from inspect import cleandoc -import pandas as pd -from petab.v1.C import * +from petab.v2.C import * +from petab.v2 import Problem -from petabtests import PetabTestCase, analytical_a, antimony_to_sbml_str +from petabtests import PetabV2TestCase, analytical_a, antimony_to_sbml_str from pathlib import Path DESCRIPTION = cleandoc(""" @@ -39,59 +39,37 @@ model_file = Path(__file__).parent / "_model.xml" model_file.write_text(antimony_to_sbml_str(ant_model)) -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["c0"], - "A": ["initial_A"], - "B": ["initial_B"], - } -).set_index([CONDITION_ID]) - -measurement_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a", "obs_a"], - SIMULATION_CONDITION_ID: ["c0", "c0"], - TIME: [0, 10], - MEASUREMENT: [0.7, 0.1], - } +problem = Problem() + +problem.add_condition("c0", A="initial_A", B="initial_B") +problem.add_experiment("e1", 0, "c0") + +problem.add_observable("obs_a", "A", noise_formula="0.5") +problem.add_measurement("obs_a", "e1", 0, 0.7) +problem.add_measurement("obs_a", "e1", 10, 0.1) + +problem.add_parameter("k1", lb=0, ub=10, nominal_value=0.8, estimate=True) +problem.add_parameter("k2", lb=0, ub=10, nominal_value=0.6, estimate=True) +problem.add_parameter("initial_A", lb=1, ub=10, nominal_value=2, estimate=True) +problem.add_parameter( + "initial_B", lb=0, ub=10, nominal_value=3, estimate=False ) -observable_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a"], - OBSERVABLE_FORMULA: ["A"], - NOISE_FORMULA: [0.5], - } -).set_index([OBSERVABLE_ID]) - -parameter_df = pd.DataFrame( - data={ - PARAMETER_ID: ["k1", "k2", "initial_A", "initial_B"], - PARAMETER_SCALE: [LIN, LIN, LOG10, LIN], - LOWER_BOUND: [0, 0, 1, 0], - UPPER_BOUND: [10] * 4, - NOMINAL_VALUE: [0.8, 0.6, 2, 3], - ESTIMATE: [1] * 3 + [0], - } -).set_index(PARAMETER_ID) # solutions ------------------------------------------------------------------ -simulation_df = measurement_df.copy(deep=True).rename( +simulation_df = problem.measurement_df.copy(deep=True).rename( columns={MEASUREMENT: SIMULATION} ) simulation_df[SIMULATION] = [ analytical_a(t, 2, 3, 0.8, 0.6) for t in simulation_df[TIME] ] -case = PetabTestCase( +case = PetabV2TestCase.from_problem( id=20, brief="Simulation. Estimated initial value via conditions table.", description=DESCRIPTION, model=model_file, - condition_dfs=[condition_df], - observable_dfs=[observable_df], - measurement_dfs=[measurement_df], - simulation_dfs=[simulation_df], - parameter_df=parameter_df, + problem=problem, + simulation_df=simulation_df, ) diff --git a/petabtests/cases/v2.0.0/sbml/0020/_0020.yaml b/petabtests/cases/v2.0.0/sbml/0020/_0020.yaml index b1337e7..60f4298 100644 --- a/petabtests/cases/v2.0.0/sbml/0020/_0020.yaml +++ b/petabtests/cases/v2.0.0/sbml/0020/_0020.yaml @@ -3,6 +3,8 @@ parameter_file: _parameters.tsv problems: - condition_files: - _conditions.tsv + experiment_files: + - _experiments.tsv measurement_files: - _measurements.tsv model_files: diff --git a/petabtests/cases/v2.0.0/sbml/0020/_conditions.tsv b/petabtests/cases/v2.0.0/sbml/0020/_conditions.tsv index 1297d08..4c79dbf 100644 --- a/petabtests/cases/v2.0.0/sbml/0020/_conditions.tsv +++ b/petabtests/cases/v2.0.0/sbml/0020/_conditions.tsv @@ -1,2 +1,3 @@ -conditionId A B -c0 initial_A initial_B +conditionId targetId targetValue +c0 A initial_A +c0 B initial_B diff --git a/petabtests/cases/v2.0.0/sbml/0020/_experiments.tsv b/petabtests/cases/v2.0.0/sbml/0020/_experiments.tsv new file mode 100644 index 0000000..5d8c1e0 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0020/_experiments.tsv @@ -0,0 +1,2 @@ +experimentId time conditionId +e1 0.0 c0 diff --git a/petabtests/cases/v2.0.0/sbml/0020/_measurements.tsv b/petabtests/cases/v2.0.0/sbml/0020/_measurements.tsv index a497632..841e0ee 100644 --- a/petabtests/cases/v2.0.0/sbml/0020/_measurements.tsv +++ b/petabtests/cases/v2.0.0/sbml/0020/_measurements.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time measurement -obs_a c0 0 0.7 -obs_a c0 10 0.1 +observableId experimentId time measurement observableParameters noiseParameters +obs_a e1 0.0 0.7 +obs_a e1 10.0 0.1 diff --git a/petabtests/cases/v2.0.0/sbml/0020/_model.xml b/petabtests/cases/v2.0.0/sbml/0020/_model.xml index 3da37e6..20d64bd 100644 --- a/petabtests/cases/v2.0.0/sbml/0020/_model.xml +++ b/petabtests/cases/v2.0.0/sbml/0020/_model.xml @@ -1,5 +1,5 @@ - + diff --git a/petabtests/cases/v2.0.0/sbml/0020/_observables.tsv b/petabtests/cases/v2.0.0/sbml/0020/_observables.tsv index 0b78dd1..bc320b2 100644 --- a/petabtests/cases/v2.0.0/sbml/0020/_observables.tsv +++ b/petabtests/cases/v2.0.0/sbml/0020/_observables.tsv @@ -1,2 +1,2 @@ -observableId observableFormula noiseFormula -obs_a A 0.5 +observableId observableName observableFormula noiseFormula noiseDistribution +obs_a A 0.500000000000000 normal diff --git a/petabtests/cases/v2.0.0/sbml/0020/_parameters.tsv b/petabtests/cases/v2.0.0/sbml/0020/_parameters.tsv index 07a1f72..639c2ab 100644 --- a/petabtests/cases/v2.0.0/sbml/0020/_parameters.tsv +++ b/petabtests/cases/v2.0.0/sbml/0020/_parameters.tsv @@ -1,5 +1,5 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -k1 lin 0 10 0.8 1 -k2 lin 0 10 0.6 1 -initial_A log10 1 10 2.0 1 -initial_B lin 0 10 3.0 0 +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +k1 0.0 10.0 0.8 true +k2 0.0 10.0 0.6 true +initial_A 1.0 10.0 2.0 true +initial_B 0.0 10.0 3.0 false diff --git a/petabtests/cases/v2.0.0/sbml/0020/_simulations.tsv b/petabtests/cases/v2.0.0/sbml/0020/_simulations.tsv index ccac85f..bb3149b 100644 --- a/petabtests/cases/v2.0.0/sbml/0020/_simulations.tsv +++ b/petabtests/cases/v2.0.0/sbml/0020/_simulations.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time simulation -obs_a c0 0 2.0 -obs_a c0 10 2.1428570240673257 +observableId experimentId time simulation observableParameters noiseParameters +obs_a e1 0.0 2.0 +obs_a e1 10.0 2.1428570240673257 diff --git a/petabtests/cases/v2.0.0/sbml/0021/0021.py b/petabtests/cases/v2.0.0/sbml/0021/0021.py index 1586a4b..e216f17 100644 --- a/petabtests/cases/v2.0.0/sbml/0021/0021.py +++ b/petabtests/cases/v2.0.0/sbml/0021/0021.py @@ -1,9 +1,8 @@ from inspect import cleandoc -import pandas as pd -from petab.v1.C import * - -from petabtests import DEFAULT_SBML_FILE, PetabTestCase, analytical_a +from petab.v2.C import * +from petab.v2 import Problem +from petabtests import DEFAULT_SBML_FILE, PetabV2TestCase, analytical_a DESCRIPTION = cleandoc(""" ## Objective @@ -19,44 +18,22 @@ # problem -------------------------------------------------------------------- -condition_df = pd.DataFrame( - data={ - CONDITION_ID: ["c0"], - } -).set_index([CONDITION_ID]) - -measurement_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a", "obs_a"], - SIMULATION_CONDITION_ID: ["c0", "c0"], - TIME: [0, 10], - MEASUREMENT: [0.7, 0.1], - NOISE_PARAMETERS: ["noise", "noise"], - } +problem = Problem() +problem.add_measurement("obs_a", "", 0, 0.7, noise_parameters=["noise"]) +problem.add_measurement("obs_a", "", 10, 0.1, noise_parameters=["noise"]) +problem.add_observable( + "obs_a", "A", noise_formula="noiseParameter1_obs_a * obs_a" ) +problem.add_parameter("a0", lb=0, ub=10, nominal_value=1) +problem.add_parameter("b0", lb=0, ub=10, nominal_value=0) +problem.add_parameter("k1", lb=0, ub=10, nominal_value=0.8) +problem.add_parameter("k2", lb=0, ub=10, nominal_value=0.6) +problem.add_parameter("noise", lb=0, ub=10, nominal_value=5) -observable_df = pd.DataFrame( - data={ - OBSERVABLE_ID: ["obs_a"], - OBSERVABLE_FORMULA: ["A"], - NOISE_FORMULA: ["noiseParameter1_obs_a * obs_a"], - } -).set_index([OBSERVABLE_ID]) - -parameter_df = pd.DataFrame( - data={ - PARAMETER_ID: ["a0", "b0", "k1", "k2", "noise"], - PARAMETER_SCALE: [LIN] * 5, - LOWER_BOUND: [0] * 5, - UPPER_BOUND: [10] * 5, - NOMINAL_VALUE: [1, 0, 0.8, 0.6, 5], - ESTIMATE: [1] * 5, - } -).set_index(PARAMETER_ID) # solutions ------------------------------------------------------------------ -simulation_df = measurement_df.copy(deep=True).rename( +simulation_df = problem.measurement_df.copy(deep=True).rename( columns={MEASUREMENT: SIMULATION} ) simulation_df[SIMULATION] = [ @@ -64,14 +41,14 @@ ] -case = PetabTestCase( +case = PetabV2TestCase( id=21, - brief="Simulation. Nothing special.", + brief="Observable-dependent noise formula.", description=DESCRIPTION, model=DEFAULT_SBML_FILE, - condition_dfs=[condition_df], - observable_dfs=[observable_df], - measurement_dfs=[measurement_df], + condition_dfs=[], + observable_dfs=[problem.observable_df], + measurement_dfs=[problem.measurement_df], simulation_dfs=[simulation_df], - parameter_df=parameter_df, + parameter_df=problem.parameter_df, ) diff --git a/petabtests/cases/v2.0.0/sbml/0021/_0021.yaml b/petabtests/cases/v2.0.0/sbml/0021/_0021.yaml index b1337e7..681b3f0 100644 --- a/petabtests/cases/v2.0.0/sbml/0021/_0021.yaml +++ b/petabtests/cases/v2.0.0/sbml/0021/_0021.yaml @@ -1,8 +1,8 @@ format_version: 2.0.0 parameter_file: _parameters.tsv problems: -- condition_files: - - _conditions.tsv +- condition_files: [] + experiment_files: [] measurement_files: - _measurements.tsv model_files: diff --git a/petabtests/cases/v2.0.0/sbml/0021/_conditions.tsv b/petabtests/cases/v2.0.0/sbml/0021/_conditions.tsv deleted file mode 100644 index f15e327..0000000 --- a/petabtests/cases/v2.0.0/sbml/0021/_conditions.tsv +++ /dev/null @@ -1,2 +0,0 @@ -conditionId -c0 diff --git a/petabtests/cases/v2.0.0/sbml/0021/_measurements.tsv b/petabtests/cases/v2.0.0/sbml/0021/_measurements.tsv index 687cf08..53c76e2 100644 --- a/petabtests/cases/v2.0.0/sbml/0021/_measurements.tsv +++ b/petabtests/cases/v2.0.0/sbml/0021/_measurements.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time measurement noiseParameters -obs_a c0 0 0.7 noise -obs_a c0 10 0.1 noise +observableId experimentId time measurement observableParameters noiseParameters +obs_a 0.0 0.7 noise +obs_a 10.0 0.1 noise diff --git a/petabtests/cases/v2.0.0/sbml/0021/_observables.tsv b/petabtests/cases/v2.0.0/sbml/0021/_observables.tsv index 72d22e1..32974bc 100644 --- a/petabtests/cases/v2.0.0/sbml/0021/_observables.tsv +++ b/petabtests/cases/v2.0.0/sbml/0021/_observables.tsv @@ -1,2 +1,2 @@ -observableId observableFormula noiseFormula -obs_a A noiseParameter1_obs_a * obs_a +observableId observableName observableFormula noiseFormula noiseDistribution +obs_a A noiseParameter1_obs_a*obs_a normal diff --git a/petabtests/cases/v2.0.0/sbml/0021/_parameters.tsv b/petabtests/cases/v2.0.0/sbml/0021/_parameters.tsv index 46c9b55..c51fe47 100644 --- a/petabtests/cases/v2.0.0/sbml/0021/_parameters.tsv +++ b/petabtests/cases/v2.0.0/sbml/0021/_parameters.tsv @@ -1,6 +1,6 @@ -parameterId parameterScale lowerBound upperBound nominalValue estimate -a0 lin 0 10 1.0 1 -b0 lin 0 10 0.0 1 -k1 lin 0 10 0.8 1 -k2 lin 0 10 0.6 1 -noise lin 0 10 5.0 1 +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +a0 0.0 10.0 1.0 true +b0 0.0 10.0 0.0 true +k1 0.0 10.0 0.8 true +k2 0.0 10.0 0.6 true +noise 0.0 10.0 5.0 true diff --git a/petabtests/cases/v2.0.0/sbml/0021/_simulations.tsv b/petabtests/cases/v2.0.0/sbml/0021/_simulations.tsv index 1bb82af..9e8d316 100644 --- a/petabtests/cases/v2.0.0/sbml/0021/_simulations.tsv +++ b/petabtests/cases/v2.0.0/sbml/0021/_simulations.tsv @@ -1,3 +1,3 @@ -observableId simulationConditionId time simulation noiseParameters -obs_a c0 0 1.0 noise -obs_a c0 10 0.42857190373069665 noise +observableId experimentId time simulation observableParameters noiseParameters +obs_a 0.0 1.0 noise +obs_a 10.0 0.42857190373069665 noise diff --git a/petabtests/cases/v2.0.0/sbml/0022/0022.py b/petabtests/cases/v2.0.0/sbml/0022/0022.py new file mode 100644 index 0000000..613c71d --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0022/0022.py @@ -0,0 +1,156 @@ +from inspect import cleandoc + +from petab.v2.C import * +from petab.v2 import Problem +from petabtests import ( + PetabV2TestCase, + analytical_a, + antimony_to_sbml_str, + analytical_b, +) +from pathlib import Path + +DESCRIPTION = cleandoc(""" +## Objective + +This case tests simultaneous re-initialization of compartment size and +contained species. + +## Model + +Two simple conversion reactions `A <=> B`, `a <=> b` in a single compartment, +following mass action kinetics. + +`A` and `B` are species defined in terms of concentrations, `a` and `b` are +`hasOnlySubstanceUnits=True` species defined in terms of amounts. + +The compartment size and the species amounts/concentrations are re-initialized +at time 10. The assigned values are independent of the model state. + +At time 10, the conditions table changes: +* The compartment size from 2 to 4. +* The concentration of `A` to `5`. This implies that the amount of + `A` is changed to `5 * 2 = 10` (concentration * compartment size). +* The amount of `a` to `10`. + +This leads to the following model state at time 10: +* The concentration of `A` is `10 / 4 = 2.5` + (new amount divided by new volume). +* The amount of `a` is `10`, unaffected by the compartment size change. +* The concentration of `B` is `(2 * 2) / 4 = 1` + (previous amount / new volume + = previous concentration * previous volume / new volume). +* The amount of `b` remains at `4`, unaffected by the compartment size change. +""") + +# problem -------------------------------------------------------------------- + +sbml_file = Path(__file__).parent / "model.xml" + +# kinetic parameters +k1 = 2 +k2 = 1 +# Initial values +# [A], [B], compartment volume +a_c0 = 2 +b_c0 = 1 +vol0 = 2 +# Condition table values +a_update = 5 +vol_update = 4 +# Values after re-initialization +# [A], [B], compartment volume +a_c10 = 2.5 +b_c10 = 1 +vol_10 = vol_update + +ant_model = f""" +model petab_test_0022 + compartment default_compartment = {vol0} + initial_conc_A = {a_c0} + initial_conc_B = {b_c0} + + species A in default_compartment = initial_conc_A + substanceOnly species a in default_compartment = initial_conc_A * default_compartment + + species B in default_compartment = initial_conc_B + substanceOnly species b in default_compartment = initial_conc_B * default_compartment + + k1 = {k1} + k2 = {k2} + + A' = k2 * B - k1 * A + B' = - k2 * B + k1 * A + a' = k2 * b - k1 * a + b' = - k2 * b + k1 * a + + # the result of the PEtab reinitialization should be the same as with + # the following event and no reinitialization: + # + # at time >= 10: A = {a_update}, a = {a_update} * default_compartment, default_compartment = {vol_10} +end +""" +sbml_file.write_text(antimony_to_sbml_str(ant_model)) + + +problem = Problem() +problem.add_observable("obs_a", "a", noise_formula="1") +problem.add_observable("obs_A", "A", noise_formula="1") +problem.add_observable("obs_b", "b", noise_formula="1") +problem.add_observable("obs_B", "B", noise_formula="1") + +problem.add_parameter("k1", lb=0, ub=10, nominal_value=k1) +problem.add_experiment("experiment1", 0, "", 10, "condition2") +problem.add_condition( + "condition2", + "condition2", + a=a_update * vol0, + A=a_update, + default_compartment=vol_10, +) + + +ts = [0, 5, 10, 15] +for t in ts: + problem.add_measurement("obs_a", "experiment1", t, 2) + problem.add_measurement("obs_A", "experiment1", t, 2) + problem.add_measurement("obs_b", "experiment1", t, 1) + problem.add_measurement("obs_B", "experiment1", t, 1) + +# solutions ------------------------------------------------------------------ + +simulation_df = problem.measurement_df.copy(deep=True).rename( + columns={MEASUREMENT: SIMULATION} +) +simulation_df[SIMULATION] = [ + # a, A, b, B + # t=0 + a_c0 * vol0, + a_c0, + b_c0 * vol0, + b_c0, + # t=5 + analytical_a(5, a_c0, b_c0, k1, k2) * vol0, + analytical_a(5, a_c0, b_c0, k1, k2), + analytical_b(5, a_c0, b_c0, k1, k2) * vol0, + analytical_b(5, a_c0, b_c0, k1, k2), + # t=10, re-initialize compartment size and contained species + a_c10 * vol_10, + a_c10, + b_c10 * vol_10, + b_c10, + # t=15 (5s after re-initialization) + analytical_a(5, a_c10, b_c10, k1, k2) * vol_10, + analytical_a(5, a_c10, b_c10, k1, k2), + analytical_b(5, a_c10, b_c10, k1, k2) * vol_10, + analytical_b(5, a_c10, b_c10, k1, k2), +] + +case = PetabV2TestCase.from_problem( + id=22, + brief="Simultaneous re-initialization of compartment size and contained species.", + description=DESCRIPTION, + model=sbml_file, + problem=problem, + simulation_df=simulation_df, +) diff --git a/petabtests/cases/v2.0.0/sbml/0022/README.md b/petabtests/cases/v2.0.0/sbml/0022/README.md new file mode 100644 index 0000000..2472d29 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0022/README.md @@ -0,0 +1,32 @@ +# PEtab test case 0022 + +## Objective + +This case tests simultaneous re-initialization of compartment size and +contained species. + +## Model + +Two simple conversion reactions `A <=> B`, `a <=> b` in a single compartment, +following mass action kinetics. + +`A` and `B` are species defined in terms of concentrations, `a` and `b` are +`hasOnlySubstanceUnits=True` species defined in terms of amounts. + +The compartment size and the species amounts/concentrations are re-initialized +at time 10. The assigned values are independent of the model state. + +At time 10, the conditions table changes: +* The compartment size from 2 to 4. +* The concentration of `A` to `5`. This implies that the amount of + `A` is changed to `5 * 2 = 10` (concentration * compartment size). +* The amount of `a` to `10`. + +This leads to the following model state at time 10: +* The concentration of `A` is `10 / 4 = 2.5` + (new amount divided by new volume). +* The amount of `a` is `10`, unaffected by the compartment size change. +* The concentration of `B` is `(2 * 2) / 4 = 1` + (previous amount / new volume + = previous concentration * previous volume / new volume). +* The amount of `b` remains at `4`, unaffected by the compartment size change. diff --git a/petabtests/cases/v2.0.0/sbml/0022/_0022.yaml b/petabtests/cases/v2.0.0/sbml/0022/_0022.yaml new file mode 100644 index 0000000..e9e7b6b --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0022/_0022.yaml @@ -0,0 +1,17 @@ +format_version: 2.0.0 +parameter_file: _parameters.tsv +problems: +- condition_files: + - _conditions.tsv + experiment_files: + - _experiments.tsv + mapping_files: + - _mapping.tsv + measurement_files: + - _measurements.tsv + model_files: + model_0: + language: sbml + location: _model.xml + observable_files: + - _observables.tsv diff --git a/petabtests/cases/v2.0.0/sbml/0022/_0022_solution.yaml b/petabtests/cases/v2.0.0/sbml/0022/_0022_solution.yaml new file mode 100644 index 0000000..82ad273 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0022/_0022_solution.yaml @@ -0,0 +1,7 @@ +chi2: 168.27775262581582 +llh: -98.84189284418267 +simulation_files: +- _simulations.tsv +tol_chi2: 0.001 +tol_llh: 0.001 +tol_simulations: 0.001 diff --git a/petabtests/cases/v2.0.0/sbml/0022/_conditions.tsv b/petabtests/cases/v2.0.0/sbml/0022/_conditions.tsv new file mode 100644 index 0000000..8346b90 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0022/_conditions.tsv @@ -0,0 +1,4 @@ +conditionId targetId targetValue +condition2 a 10.0 +condition2 A 5.0 +condition2 default_compartment 4.0 diff --git a/petabtests/cases/v2.0.0/sbml/0022/_experiments.tsv b/petabtests/cases/v2.0.0/sbml/0022/_experiments.tsv new file mode 100644 index 0000000..5c9d619 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0022/_experiments.tsv @@ -0,0 +1,3 @@ +experimentId time conditionId +experiment1 0.0 +experiment1 10.0 condition2 diff --git a/petabtests/cases/v2.0.0/sbml/0022/_mapping.tsv b/petabtests/cases/v2.0.0/sbml/0022/_mapping.tsv new file mode 100644 index 0000000..b3f62ef --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0022/_mapping.tsv @@ -0,0 +1,2 @@ +petabEntityId modelEntityId name +condition2 condition2 diff --git a/petabtests/cases/v2.0.0/sbml/0022/_measurements.tsv b/petabtests/cases/v2.0.0/sbml/0022/_measurements.tsv new file mode 100644 index 0000000..ec1bc0b --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0022/_measurements.tsv @@ -0,0 +1,17 @@ +observableId experimentId time measurement observableParameters noiseParameters +obs_a experiment1 0.0 2.0 +obs_A experiment1 0.0 2.0 +obs_b experiment1 0.0 1.0 +obs_B experiment1 0.0 1.0 +obs_a experiment1 5.0 2.0 +obs_A experiment1 5.0 2.0 +obs_b experiment1 5.0 1.0 +obs_B experiment1 5.0 1.0 +obs_a experiment1 10.0 2.0 +obs_A experiment1 10.0 2.0 +obs_b experiment1 10.0 1.0 +obs_B experiment1 10.0 1.0 +obs_a experiment1 15.0 2.0 +obs_A experiment1 15.0 2.0 +obs_b experiment1 15.0 1.0 +obs_B experiment1 15.0 1.0 diff --git a/petabtests/cases/v2.0.0/sbml/0022/_model.xml b/petabtests/cases/v2.0.0/sbml/0022/_model.xml new file mode 100644 index 0000000..69b1a4b --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0022/_model.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + initial_conc_A + + + + + + + initial_conc_A + default_compartment + + + + + + initial_conc_B + + + + + + + initial_conc_B + default_compartment + + + + + + + + + + + + k2 + B + + + + k1 + A + + + + + + + + + + + k2 + b + + + + k1 + a + + + + + + + + + + + + + k2 + + B + + + + k1 + A + + + + + + + + + + + + + k2 + + b + + + + k1 + a + + + + + + + diff --git a/petabtests/cases/v2.0.0/sbml/0022/_observables.tsv b/petabtests/cases/v2.0.0/sbml/0022/_observables.tsv new file mode 100644 index 0000000..84ba27d --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0022/_observables.tsv @@ -0,0 +1,5 @@ +observableId observableName observableFormula noiseFormula noiseDistribution +obs_a a 1.00000000000000 normal +obs_A A 1.00000000000000 normal +obs_b b 1.00000000000000 normal +obs_B B 1.00000000000000 normal diff --git a/petabtests/cases/v2.0.0/sbml/0022/_parameters.tsv b/petabtests/cases/v2.0.0/sbml/0022/_parameters.tsv new file mode 100644 index 0000000..5b49025 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0022/_parameters.tsv @@ -0,0 +1,2 @@ +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +k1 0.0 10.0 2.0 true diff --git a/petabtests/cases/v2.0.0/sbml/0022/_simulations.tsv b/petabtests/cases/v2.0.0/sbml/0022/_simulations.tsv new file mode 100644 index 0000000..0f892fb --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0022/_simulations.tsv @@ -0,0 +1,17 @@ +observableId experimentId time simulation observableParameters noiseParameters +obs_a experiment1 0.0 4.0 +obs_A experiment1 0.0 2.0 +obs_b experiment1 0.0 2.0 +obs_B experiment1 0.0 1.0 +obs_a experiment1 5.0 2.000000611804641 +obs_A experiment1 5.0 1.0000003059023206 +obs_b experiment1 5.0 3.999999388195359 +obs_B experiment1 5.0 1.9999996940976794 +obs_a experiment1 10.0 10.0 +obs_A experiment1 10.0 2.5 +obs_b experiment1 10.0 4.0 +obs_B experiment1 10.0 1.0 +obs_a experiment1 15.0 4.6666682981457095 +obs_A experiment1 15.0 1.1666670745364274 +obs_b experiment1 15.0 9.333331701854291 +obs_B experiment1 15.0 2.333332925463573 diff --git a/petabtests/cases/v2.0.0/sbml/0022/model.xml b/petabtests/cases/v2.0.0/sbml/0022/model.xml new file mode 100644 index 0000000..69b1a4b --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0022/model.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + initial_conc_A + + + + + + + initial_conc_A + default_compartment + + + + + + initial_conc_B + + + + + + + initial_conc_B + default_compartment + + + + + + + + + + + + k2 + B + + + + k1 + A + + + + + + + + + + + k2 + b + + + + k1 + a + + + + + + + + + + + + + k2 + + B + + + + k1 + A + + + + + + + + + + + + + k2 + + b + + + + k1 + a + + + + + + + diff --git a/petabtests/cases/v2.0.0/sbml/0023/0023.py b/petabtests/cases/v2.0.0/sbml/0023/0023.py new file mode 100644 index 0000000..7a42c75 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0023/0023.py @@ -0,0 +1,110 @@ +from inspect import cleandoc + +from petab.v2.C import * +from petab.v2 import Problem +from petabtests import ( + PetabV2TestCase, + antimony_to_sbml_str, +) +from pathlib import Path + +DESCRIPTION = cleandoc(""" +## Objective + +This case tests simultaneous re-initialization of compartment size and +contained species with state-dependent expressions. + +## Model + +A species `S`, defined in terms of concentrations, with `dS/dt = p = 1`, +in a compartment `C`. `S` and `C` are changed via the conditions table. + +There is an event triggered at `t=10` that re-initializes the compartment +size that must be executed after the conditions table is applied. +""") + +# problem -------------------------------------------------------------------- + +sbml_file = Path(__file__).parent / "model.xml" + +vol0 = 4 + +ant_model = f""" +model petab_test_0023 + compartment C = {vol0} + + species S in C = 3 # this is overwritten by the condition table + + p = 1 + S' = p + + at S >= 12: C = C * 2 # this happens at t=10 +end +""" +sbml_file.write_text(antimony_to_sbml_str(ant_model)) + +problem = Problem() +problem.add_observable("obs_C", "C", noise_formula="1") +problem.add_observable("obs_amount_S", "S * C", noise_formula="1") +problem.add_observable("obs_conc_S", "S", noise_formula="1") + +problem.add_parameter("p", lb=0, ub=10, nominal_value=1) + +problem.add_experiment("experiment1", 0, "condition1", 10, "condition2") +# t=0 +problem.add_condition( + "condition1", + "condition1", + S="S - 1", +) +# t=10 +problem.add_condition( + "condition2", + "condition2", + S="S + C", + C=8, +) + +ts = [0, 5, 10, 15] +for t in ts: + for obs in ["obs_C", "obs_amount_S", "obs_conc_S"]: + problem.add_measurement(obs, "experiment1", t, t) + +# solutions ------------------------------------------------------------------ + +simulation_df = problem.measurement_df.copy(deep=True).rename( + columns={MEASUREMENT: SIMULATION} +) +simulation_df[SIMULATION] = [ + # vol, amount, conc + # t=0 + vol0, + 2 * vol0, + 2, + # t=5 + vol0, + 7 * vol0, + 7, + # t=10-ε + # vol0=4, 12 * vol0=48, 12, + # t=10 + # condition table: + # 8, (4+12) * 4 = 64 , (4+12) * 4 / 8 = 8 + # event + 16, + 64, + 4, + # t=15 + 16, + 9 * 16, + 9, +] + +case = PetabV2TestCase.from_problem( + id=23, + brief="Simultaneous state-dependent re-initialization of compartment size and contained species followed by event.", + description=DESCRIPTION, + model=sbml_file, + problem=problem, + simulation_df=simulation_df, +) diff --git a/petabtests/cases/v2.0.0/sbml/0023/README.md b/petabtests/cases/v2.0.0/sbml/0023/README.md new file mode 100644 index 0000000..26a454c --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0023/README.md @@ -0,0 +1,14 @@ +# PEtab test case 0023 + +## Objective + +This case tests simultaneous re-initialization of compartment size and +contained species with state-dependent expressions. + +## Model + +A species `S`, defined in terms of concentrations, with `dS/dt = p = 1`, +in a compartment `C`. `S` and `C` are changed via the conditions table. + +There is an event triggered at `t=10` that re-initializes the compartment +size that must be executed after the conditions table is applied. diff --git a/petabtests/cases/v2.0.0/sbml/0023/_0023.yaml b/petabtests/cases/v2.0.0/sbml/0023/_0023.yaml new file mode 100644 index 0000000..e9e7b6b --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0023/_0023.yaml @@ -0,0 +1,17 @@ +format_version: 2.0.0 +parameter_file: _parameters.tsv +problems: +- condition_files: + - _conditions.tsv + experiment_files: + - _experiments.tsv + mapping_files: + - _mapping.tsv + measurement_files: + - _measurements.tsv + model_files: + model_0: + language: sbml + location: _model.xml + observable_files: + - _observables.tsv diff --git a/petabtests/cases/v2.0.0/sbml/0023/_0023_solution.yaml b/petabtests/cases/v2.0.0/sbml/0023/_0023_solution.yaml new file mode 100644 index 0000000..882bab8 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0023/_0023_solution.yaml @@ -0,0 +1,7 @@ +chi2: 20284.0 +llh: -10153.027262398457 +simulation_files: +- _simulations.tsv +tol_chi2: 0.001 +tol_llh: 0.001 +tol_simulations: 0.001 diff --git a/petabtests/cases/v2.0.0/sbml/0023/_conditions.tsv b/petabtests/cases/v2.0.0/sbml/0023/_conditions.tsv new file mode 100644 index 0000000..506fc40 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0023/_conditions.tsv @@ -0,0 +1,4 @@ +conditionId targetId targetValue +condition1 S S - 1.0 +condition2 S C + S +condition2 C 8.0 diff --git a/petabtests/cases/v2.0.0/sbml/0023/_experiments.tsv b/petabtests/cases/v2.0.0/sbml/0023/_experiments.tsv new file mode 100644 index 0000000..f53af51 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0023/_experiments.tsv @@ -0,0 +1,3 @@ +experimentId time conditionId +experiment1 0.0 condition1 +experiment1 10.0 condition2 diff --git a/petabtests/cases/v2.0.0/sbml/0023/_mapping.tsv b/petabtests/cases/v2.0.0/sbml/0023/_mapping.tsv new file mode 100644 index 0000000..205aa11 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0023/_mapping.tsv @@ -0,0 +1,3 @@ +petabEntityId modelEntityId name +condition1 condition1 +condition2 condition2 diff --git a/petabtests/cases/v2.0.0/sbml/0023/_measurements.tsv b/petabtests/cases/v2.0.0/sbml/0023/_measurements.tsv new file mode 100644 index 0000000..19d9011 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0023/_measurements.tsv @@ -0,0 +1,13 @@ +observableId experimentId time measurement observableParameters noiseParameters +obs_C experiment1 0.0 0.0 +obs_amount_S experiment1 0.0 0.0 +obs_conc_S experiment1 0.0 0.0 +obs_C experiment1 5.0 5.0 +obs_amount_S experiment1 5.0 5.0 +obs_conc_S experiment1 5.0 5.0 +obs_C experiment1 10.0 10.0 +obs_amount_S experiment1 10.0 10.0 +obs_conc_S experiment1 10.0 10.0 +obs_C experiment1 15.0 15.0 +obs_amount_S experiment1 15.0 15.0 +obs_conc_S experiment1 15.0 15.0 diff --git a/petabtests/cases/v2.0.0/sbml/0023/_model.xml b/petabtests/cases/v2.0.0/sbml/0023/_model.xml new file mode 100644 index 0000000..a2bf86d --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0023/_model.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + p + + + + + + + + + + S + 12 + + + + + + + + + C + 2 + + + + + + + + diff --git a/petabtests/cases/v2.0.0/sbml/0023/_observables.tsv b/petabtests/cases/v2.0.0/sbml/0023/_observables.tsv new file mode 100644 index 0000000..7325647 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0023/_observables.tsv @@ -0,0 +1,4 @@ +observableId observableName observableFormula noiseFormula noiseDistribution +obs_C C 1.00000000000000 normal +obs_amount_S C*S 1.00000000000000 normal +obs_conc_S S 1.00000000000000 normal diff --git a/petabtests/cases/v2.0.0/sbml/0023/_parameters.tsv b/petabtests/cases/v2.0.0/sbml/0023/_parameters.tsv new file mode 100644 index 0000000..00aa02c --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0023/_parameters.tsv @@ -0,0 +1,2 @@ +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +p 0.0 10.0 1.0 true diff --git a/petabtests/cases/v2.0.0/sbml/0023/_simulations.tsv b/petabtests/cases/v2.0.0/sbml/0023/_simulations.tsv new file mode 100644 index 0000000..bb087c9 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0023/_simulations.tsv @@ -0,0 +1,13 @@ +observableId experimentId time simulation observableParameters noiseParameters +obs_C experiment1 0.0 4 +obs_amount_S experiment1 0.0 8 +obs_conc_S experiment1 0.0 2 +obs_C experiment1 5.0 4 +obs_amount_S experiment1 5.0 28 +obs_conc_S experiment1 5.0 7 +obs_C experiment1 10.0 16 +obs_amount_S experiment1 10.0 64 +obs_conc_S experiment1 10.0 4 +obs_C experiment1 15.0 16 +obs_amount_S experiment1 15.0 144 +obs_conc_S experiment1 15.0 9 diff --git a/petabtests/cases/v2.0.0/sbml/0023/model.xml b/petabtests/cases/v2.0.0/sbml/0023/model.xml new file mode 100644 index 0000000..a2bf86d --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0023/model.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + p + + + + + + + + + + S + 12 + + + + + + + + + C + 2 + + + + + + + + diff --git a/petabtests/cases/v2.0.0/sbml/0024/0024.py b/petabtests/cases/v2.0.0/sbml/0024/0024.py new file mode 100644 index 0000000..b385669 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0024/0024.py @@ -0,0 +1,69 @@ +from inspect import cleandoc + +from petab.v2.C import * +from petab.v2 import Problem +from petabtests import ( + PetabV2TestCase, + antimony_to_sbml_str, +) +from pathlib import Path + +DESCRIPTION = cleandoc(r""" +## Objective + +This case tests events occurring during steady-state simulations. + +## Model + +A parameter `p` is target of an event assignment that is executed at t = 1000. +Although the model starts with $\dot{x} = 0$, the simulation must still run +until $\dot{x}$ *remains* 0, i.e., the event must still be executed. +This is applies to both the pre-simulation and the simulation for the +steady state measurement. +""") + +# problem -------------------------------------------------------------------- + +sbml_file = Path(__file__).parent / "_model.xml" + +ant_model = """ +model petab_test_0024 + p0 = 2 + p = p0 + + at time >= 1000: p = p + 1 +end +""" +sbml_file.write_text(antimony_to_sbml_str(ant_model)) + +problem = Problem() +problem.add_parameter("p", estimate=True, lb=0, ub=10, nominal_value=1) +problem.add_observable("obs_p", "p", noise_formula="1") +problem.add_experiment("experiment1", float("-inf"), None) + +problem.add_measurement("obs_p", "experiment1", 0, 2) +problem.add_measurement("obs_p", "experiment1", float("inf"), 3) + +# solutions ------------------------------------------------------------------ + +simulation_df = problem.measurement_df.copy(deep=True).rename( + columns={MEASUREMENT: SIMULATION} +) +simulation_df[SIMULATION] = [ + # pre-simulation starts with p=1, then p is increased by 1 at t=1000 + # then the observable is evaluated for the t=0 measurement + 2, + # then the steady state simulation is run, + # where p is increased by 1 at t=1000, + # and the observable is evaluated for the t=inf measurement + 3, +] + +case = PetabV2TestCase.from_problem( + id=24, + brief="Events during steady-state simulations.", + description=DESCRIPTION, + model=sbml_file, + problem=problem, + simulation_df=simulation_df, +) diff --git a/petabtests/cases/v2.0.0/sbml/0024/README.md b/petabtests/cases/v2.0.0/sbml/0024/README.md new file mode 100644 index 0000000..ecfeba7 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0024/README.md @@ -0,0 +1,13 @@ +# PEtab test case 0024 + +## Objective + +This case tests events occurring during steady-state simulations. + +## Model + +A parameter `p` is target of an event assignment that is executed at t = 1000. +Although the model starts with $\dot{x} = 0$, the simulation must still run +until $\dot{x}$ *remains* 0, i.e., the event must still be executed. +This is applies to both the pre-simulation and the simulation for the +steady state measurement. diff --git a/petabtests/cases/v2.0.0/sbml/0024/_0024.yaml b/petabtests/cases/v2.0.0/sbml/0024/_0024.yaml new file mode 100644 index 0000000..6ab434a --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0024/_0024.yaml @@ -0,0 +1,14 @@ +format_version: 2.0.0 +parameter_file: _parameters.tsv +problems: +- condition_files: [] + experiment_files: + - _experiments.tsv + measurement_files: + - _measurements.tsv + model_files: + model_0: + language: sbml + location: _model.xml + observable_files: + - _observables.tsv diff --git a/petabtests/cases/v2.0.0/sbml/0024/_0024_solution.yaml b/petabtests/cases/v2.0.0/sbml/0024/_0024_solution.yaml new file mode 100644 index 0000000..c9b588c --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0024/_0024_solution.yaml @@ -0,0 +1,7 @@ +chi2: 0.0 +llh: -1.83787706640935 +simulation_files: +- _simulations.tsv +tol_chi2: 0.001 +tol_llh: 0.001 +tol_simulations: 0.001 diff --git a/petabtests/cases/v2.0.0/sbml/0024/_experiments.tsv b/petabtests/cases/v2.0.0/sbml/0024/_experiments.tsv new file mode 100644 index 0000000..f7096a0 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0024/_experiments.tsv @@ -0,0 +1,2 @@ +experimentId time conditionId +experiment1 -inf diff --git a/petabtests/cases/v2.0.0/sbml/0024/_measurements.tsv b/petabtests/cases/v2.0.0/sbml/0024/_measurements.tsv new file mode 100644 index 0000000..1ab1e08 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0024/_measurements.tsv @@ -0,0 +1,3 @@ +observableId experimentId time measurement observableParameters noiseParameters +obs_p experiment1 0.0 2.0 +obs_p experiment1 inf 3.0 diff --git a/petabtests/cases/v2.0.0/sbml/0024/_model.xml b/petabtests/cases/v2.0.0/sbml/0024/_model.xml new file mode 100644 index 0000000..2fe87ee --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0024/_model.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + p0 + + + + + + + + + + time + 1000 + + + + + + + + + p + 1 + + + + + + + + diff --git a/petabtests/cases/v2.0.0/sbml/0024/_observables.tsv b/petabtests/cases/v2.0.0/sbml/0024/_observables.tsv new file mode 100644 index 0000000..cc64a52 --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0024/_observables.tsv @@ -0,0 +1,2 @@ +observableId observableName observableFormula noiseFormula noiseDistribution +obs_p p 1.00000000000000 normal diff --git a/petabtests/cases/v2.0.0/sbml/0024/_parameters.tsv b/petabtests/cases/v2.0.0/sbml/0024/_parameters.tsv new file mode 100644 index 0000000..00aa02c --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0024/_parameters.tsv @@ -0,0 +1,2 @@ +parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters +p 0.0 10.0 1.0 true diff --git a/petabtests/cases/v2.0.0/sbml/0024/_simulations.tsv b/petabtests/cases/v2.0.0/sbml/0024/_simulations.tsv new file mode 100644 index 0000000..7f80a5c --- /dev/null +++ b/petabtests/cases/v2.0.0/sbml/0024/_simulations.tsv @@ -0,0 +1,3 @@ +observableId experimentId time simulation observableParameters noiseParameters +obs_p experiment1 0.0 2 +obs_p experiment1 inf 3 diff --git a/petabtests/cases/v2.0.0/sbml/README.md b/petabtests/cases/v2.0.0/sbml/README.md index eb4ff85..125a6ac 100644 --- a/petabtests/cases/v2.0.0/sbml/README.md +++ b/petabtests/cases/v2.0.0/sbml/README.md @@ -80,5 +80,17 @@ Simulation. Estimated initial value via conditions table. # [0021](0021/) -Simulation. Nothing special. +Observable-dependent noise formula. + +# [0022](0022/) + +Simultaneous re-initialization of compartment size and contained species. + +# [0023](0023/) + +Simultaneous state-dependent re-initialization of compartment size and contained species followed by event. + +# [0024](0024/) + +Events during steady-state simulations. diff --git a/petabtests/core.py b/petabtests/core.py index 9812977..a400b03 100644 --- a/petabtests/core.py +++ b/petabtests/core.py @@ -1,24 +1,23 @@ -import importlib import itertools import logging import os import re -import sys from pathlib import Path +from collections.abc import Iterable from petab.v1.calculate import calculate_chi2, calculate_llh from .C import CASES_DIR from .file import ( - PetabTestCase, + PetabV1TestCase, get_case_dir, test_id_str, write_info, - write_problem, write_solution, + PetabV2TestCase, ) -__all__ = ["get_cases", "create", "clear", "get_cases_dir"] +__all__ = ["get_cases", "create_all", "clear", "get_cases_dir"] test_formats = ("sbml", "pysb") test_versions = ("v1.0.0", "v2.0.0") @@ -27,10 +26,14 @@ def get_cases_dir(format_: str, version: str) -> Path: + """Get the directory of the test cases for the given PEtab version and + model format.""" return CASES_DIR / version / format_ -def get_cases(format_: str, version: str): +def get_cases(format_: str, version: str) -> Iterable[str]: + """Get the list of test case IDs for the given PEtab version and model + format.""" cases_dir = get_cases_dir(format_=format_, version=version) if not cases_dir.exists(): return [] @@ -41,69 +44,36 @@ def get_cases(format_: str, version: str): ) -def create(): +def create_all(): """Create all test files.""" for version, format_ in itertools.product(test_versions, test_formats): case_list = get_cases(format_=format_, version=version) if not case_list: continue + # Table of contents markdown string for the current format x version + # directory README toc = "" for case_id in case_list: case_dir = get_case_dir( format_=format_, version=version, id_=case_id ) - logger.info("# ", format_, version, case_id, case_dir) - - # load test case module - # directory needs to be removed from path again and the module - # has to be unloaded, as modules from different model format - # suites have the same name - sys.path.append(str(case_dir)) - case_module = importlib.import_module(case_id) - sys.path.pop() - # noinspection PyUnresolvedReferences - case: PetabTestCase = case_module.case - del sys.modules[case_id] + logger.info( + f"Processing {version}/{format_} #{case_id} at {case_dir}" + ) + + if version == "v1.0.0": + case = PetabV1TestCase.load(case_dir, case_id) + elif version == "v2.0.0": + case = PetabV2TestCase.load(case_dir, case_id) + else: + raise NotImplementedError(f"Unknown PEtab version {version}") id_str = test_id_str(case.id) toc += f"# [{id_str}]({id_str}/)\n\n{case.brief}\n\n" - write_info(case, format_, version=version) - - write_problem( - test_id=case.id, - parameter_df=case.parameter_df, - condition_dfs=case.condition_dfs, - observable_dfs=case.observable_dfs, - measurement_dfs=case.measurement_dfs, - model_files=case.model, - format_=format_, - version=version, - mapping_df=case.mapping_df, - ) - - chi2 = calculate_chi2( - case.measurement_dfs, - case.simulation_dfs, - case.observable_dfs, - case.parameter_df, - ) - llh = calculate_llh( - case.measurement_dfs, - case.simulation_dfs, - case.observable_dfs, - case.parameter_df, - ) - write_solution( - test_id=case.id, - chi2=chi2, - llh=llh, - simulation_dfs=case.simulation_dfs, - format_=format_, - version=version, - ) + create_case(format_, version, case_id) toc_path = ( get_cases_dir(format_=format_, version=version) / "README.md" @@ -112,7 +82,46 @@ def create(): f.write(toc) -def clear(): +def create_case(format_: str, version: str, id_: str) -> None: + """Create a single test case.""" + case_dir = get_case_dir(format_=format_, version=version, id_=id_) + + if version == "v1.0.0": + case = PetabV1TestCase.load(case_dir, id_) + elif version == "v2.0.0": + case = PetabV2TestCase.load(case_dir, id_) + else: + raise NotImplementedError(f"Unknown PEtab version {version}") + + write_info(case, format_, version=version) + + case.write_problem( + format_=format_, + ) + + chi2 = calculate_chi2( + case.measurement_dfs, + case.simulation_dfs, + case.observable_dfs, + case.parameter_df, + ) + llh = calculate_llh( + case.measurement_dfs, + case.simulation_dfs, + case.observable_dfs, + case.parameter_df, + ) + write_solution( + test_id=case.id, + chi2=chi2, + llh=llh, + simulation_dfs=case.simulation_dfs, + format_=format_, + version=version, + ) + + +def clear() -> None: """Clear all model folders.""" for version, format_ in itertools.product(test_versions, test_formats): case_list = get_cases(format_=format_, version=version) @@ -125,3 +134,19 @@ def clear(): for file_ in os.scandir(case_dir): if file_.name.startswith("_") and not file_.is_dir(): os.remove(file_.path) + + +def _cli_create(): + """`petabtests_create` entry point.""" + import argparse + + parser = argparse.ArgumentParser(description="Create PEtab test cases.") + parser.add_argument( + "--verbose", "-v", action="store_true", help="Verbose output." + ) + args = parser.parse_args() + + if args.verbose: + logging.basicConfig(level=logging.INFO) + + create_all() diff --git a/petabtests/evaluate.py b/petabtests/evaluate.py index a628db6..8289d84 100644 --- a/petabtests/evaluate.py +++ b/petabtests/evaluate.py @@ -7,6 +7,7 @@ PREEQUILIBRATION_CONDITION_ID, SIMULATION, ) +from petab.v2.C import EXPERIMENT_ID __all__ = [ "evaluate_llh", @@ -84,10 +85,27 @@ def absolute_simulations_distance_for_table( simulations: pd.DataFrame, gt_simulations: pd.DataFrame ): """Compute absolute normalized distance between simulations.""" - # grouping columns - grouping_cols = [OBSERVABLE_ID, SIMULATION_CONDITION_ID, TIME] - if PREEQUILIBRATION_CONDITION_ID in simulations: - grouping_cols.append(PREEQUILIBRATION_CONDITION_ID) + + # check if we have a petab v1 or v2 file + if ( + SIMULATION_CONDITION_ID in simulations + and EXPERIMENT_ID not in simulations + ): + # v1 + # grouping columns + grouping_cols = [OBSERVABLE_ID, SIMULATION_CONDITION_ID, TIME] + if PREEQUILIBRATION_CONDITION_ID in simulations: + grouping_cols.append(PREEQUILIBRATION_CONDITION_ID) + elif ( + EXPERIMENT_ID in simulations + and SIMULATION_CONDITION_ID not in simulations + ): + # v2 + # grouping columns + grouping_cols = [OBSERVABLE_ID, EXPERIMENT_ID, TIME] + else: + raise AssertionError("Unable to determine PEtab version.") + relevant_cols = grouping_cols.copy() # append simulation column last for correct sorting relevant_cols.append(SIMULATION) diff --git a/petabtests/file.py b/petabtests/file.py index 1ed9bd2..40c1cf8 100644 --- a/petabtests/file.py +++ b/petabtests/file.py @@ -1,31 +1,201 @@ """File input and output.""" +from __future__ import annotations import os from dataclasses import dataclass from shutil import copyfile, SameFileError from collections.abc import Callable from pathlib import Path import pandas as pd -import petab.v1 as petab +from petab import v1 +from petab import v2 import yaml from petab.v1.C import * # noqa: F403 from .C import * # noqa: F403 +import logging +from petab.v2.C import EXPERIMENT_FILES +from petab.v1.lint import lint_problem as lint_problem_v1 +from petab.v2.lint import lint_problem as lint_problem_v2 +import importlib +import sys + +logger = logging.getLogger("petab_test_suite") + __all__ = [ "get_case_dir", "load_solution", - "PetabTestCase", + "PetabV1TestCase", + "PetabV2TestCase", "problem_yaml_name", "solution_yaml_name", "test_id_str", "write_info", - "write_problem", "write_solution", ] @dataclass -class PetabTestCase: +class PetabV1TestCase: + """A PEtab test case""" + + id: int + brief: str + description: str + model: Path + condition_dfs: list[pd.DataFrame] + observable_dfs: list[pd.DataFrame] + measurement_dfs: list[pd.DataFrame] + simulation_dfs: list[pd.DataFrame] + parameter_df: pd.DataFrame + + @staticmethod + def load(case_dir: Path, case_id: str) -> PetabV1TestCase: + """Load a test case definition module.""" + sys.path.append(str(case_dir)) + case_module = importlib.import_module(case_id) + sys.path.pop() + # noinspection PyUnresolvedReferences + case: PetabV1TestCase = case_module.case + del sys.modules[case_id] + return case + + def write(self, version: str, format_: str): + """Write the test case to files.""" + self.write_problem( + format_=format_, + ) + write_solution( + test_id=self.id, + simulation_dfs=self.simulation_dfs, + chi2=None, + llh=None, + version=version, + format_=format_, + ) + + def write_problem( + self, + format_: str = "sbml", + ) -> None: + """Write the PEtab problem for a given test to files. + + Parameters + ---------- + format_: Model format (SBML/PySB) + """ + test_id = self.id + version = "v1.0.0" + format_version = 1 + petab = v1 + + print(f"Writing case {version} {format_} {test_id}...") + # convenience + condition_dfs = ( + [self.condition_dfs] + if isinstance(self.condition_dfs, pd.DataFrame) + else self.condition_dfs + ) + observable_dfs = ( + [self.observable_dfs] + if isinstance(self.observable_dfs, pd.DataFrame) + else self.observable_dfs + ) + measurement_dfs = ( + [self.measurement_dfs] + if isinstance(self.measurement_dfs, pd.DataFrame) + else self.measurement_dfs + ) + model_files = ( + [self.model] if isinstance(self.model, Path | str) else self.model + ) + parameter_df = self.parameter_df + + # id to string + dir_ = get_case_dir(id_=test_id, format_=format_, version=version) + + # petab yaml + config = { + FORMAT_VERSION: format_version, + PROBLEMS: [ + { + CONDITION_FILES: [], + MEASUREMENT_FILES: [], + OBSERVABLE_FILES: [], + }, + ], + } + + # copy models + suffix = ".xml" + copied_model_files = [] + for i_sbml, model_file in enumerate(model_files): + if len(model_files) == 1: + copied_model_file = f"_model{suffix}" + else: + copied_model_file = f"_model{i_sbml}{suffix}" + try: + copyfile( + dir_ / model_file, + dir_ / copied_model_file, + ) + except SameFileError: + pass + copied_model_files.append(copied_model_file) + + config[PROBLEMS][0][SBML_FILES] = copied_model_files + + # write parameters + parameters_file = "_parameters.tsv" + petab.write_parameter_df( + parameter_df, os.path.join(dir_, parameters_file) + ) + config[PARAMETER_FILE] = parameters_file + + # write conditions + _write_dfs_to_files( + dir_, + "conditions", + petab.write_condition_df, + condition_dfs, + config[PROBLEMS][0][CONDITION_FILES], + ) + + # write observables + _write_dfs_to_files( + dir_, + "observables", + petab.write_observable_df, + observable_dfs, + config[PROBLEMS][0][OBSERVABLE_FILES], + ) + + # write measurements + _write_dfs_to_files( + dir_, + "measurements", + petab.write_measurement_df, + measurement_dfs, + config[PROBLEMS][0][MEASUREMENT_FILES], + ) + + # validate petab yaml + v1.validate(config, path_prefix=dir_) + + # write yaml + yaml_file = problem_yaml_name(test_id) + yaml_path = os.path.join(dir_, yaml_file) + with open(yaml_path, "w") as outfile: + yaml.dump(config, outfile, default_flow_style=False) + + # validate written PEtab files + problem = petab.Problem.from_yaml(yaml_path) + if lint_problem_v1(problem): + raise RuntimeError("Invalid PEtab problem, see messages above.") + + +@dataclass +class PetabV2TestCase: """A PEtab test case""" id: int @@ -38,9 +208,223 @@ class PetabTestCase: simulation_dfs: list[pd.DataFrame] parameter_df: pd.DataFrame mapping_df: pd.DataFrame = None + experiment_dfs: list[pd.DataFrame] = None + + @staticmethod + def from_problem( + id: int, + problem: v1.Problem, + model: Path, + brief: str, + description: str, + simulation_df: pd.DataFrame, + ) -> PetabV2TestCase: + """Create a PEtab test case from a PEtab problem.""" + return PetabV2TestCase( + id=id, + brief=brief, + description=description, + model=model, + experiment_dfs=[df] + if not (df := problem.experiment_df).empty + else [], + condition_dfs=[df] + if not (df := problem.condition_df).empty + else [], + observable_dfs=[df] + if not (df := problem.observable_df).empty + else [], + measurement_dfs=[df] + if not (df := problem.measurement_df).empty + else [], + simulation_dfs=[simulation_df], + mapping_df=df if not (df := problem.mapping_df).empty else None, + parameter_df=problem.parameter_df, + ) + + @staticmethod + def load(case_dir: Path, case_id: str) -> PetabV2TestCase: + """Load a test case definition module.""" + sys.path.append(str(case_dir)) + case_module = importlib.import_module(case_id) + sys.path.pop() + # noinspection PyUnresolvedReferences + case: PetabV2TestCase = case_module.case + del sys.modules[case_id] + return case + + def write(self, version: str, format_: str): + """Write the test case to files.""" + self.write_problem( + format_=format_, + version=version, + ) + write_solution( + test_id=self.id, + simulation_dfs=self.simulation_dfs, + chi2=None, + llh=None, + version=version, + format_=format_, + ) + + def write_problem( + self, + format_: str = "sbml", + ) -> None: + """Write the PEtab problem for a given test to files. + + Parameters + ---------- + format_: Model format (SBML/PySB) + """ + version = "v2.0.0" + format_version = version[1:] + test_id = self.id + print(f"Writing case {version} {format_} {test_id}...") + # convenience + condition_dfs = ( + [self.condition_dfs] + if isinstance(self.condition_dfs, pd.DataFrame) + else self.condition_dfs + ) + observable_dfs = ( + [self.observable_dfs] + if isinstance(self.observable_dfs, pd.DataFrame) + else self.observable_dfs + ) + measurement_dfs = ( + [self.measurement_dfs] + if isinstance(self.measurement_dfs, pd.DataFrame) + else self.measurement_dfs + ) + experiment_dfs = ( + [self.experiment_dfs] + if isinstance(self.experiment_dfs, pd.DataFrame) + else self.experiment_dfs + ) + mapping_df = self.mapping_df + model_files = ( + [self.model] if isinstance(self.model, Path) else self.model + ) + parameter_df = self.parameter_df + + # id to string + dir_ = get_case_dir(id_=test_id, format_=format_, version=version) + + # petab yaml + config = { + FORMAT_VERSION: format_version, + PROBLEMS: [ + { + CONDITION_FILES: [], + MEASUREMENT_FILES: [], + OBSERVABLE_FILES: [], + }, + ], + } + + if format_ == "sbml": + suffix = ".xml" + else: + suffix = ".py" + + # copy models + copied_model_files = [] + for i_sbml, model_file in enumerate(model_files): + if len(model_files) == 1: + copied_model_file = f"_model{suffix}" + else: + copied_model_file = f"_model{i_sbml}{suffix}" + try: + copyfile( + dir_ / model_file, + dir_ / copied_model_file, + ) + except SameFileError: + pass + copied_model_files.append(copied_model_file) + + petab = v2 + config[PROBLEMS][0][MODEL_FILES] = {} + config[PROBLEMS][0][EXPERIMENT_FILES] = [] + for model_idx, model_file in enumerate(copied_model_files): + config[PROBLEMS][0][MODEL_FILES][f"model_{model_idx}"] = { + MODEL_LANGUAGE: format_, + MODEL_LOCATION: model_file, + } + + # write parameters + parameters_file = "_parameters.tsv" + petab.write_parameter_df( + parameter_df, os.path.join(dir_, parameters_file) + ) + config[PARAMETER_FILE] = parameters_file + + # write conditions + _write_dfs_to_files( + dir_, + "conditions", + petab.write_condition_df, + condition_dfs, + config[PROBLEMS][0][CONDITION_FILES], + ) + + # write observables + _write_dfs_to_files( + dir_, + "observables", + petab.write_observable_df, + observable_dfs, + config[PROBLEMS][0][OBSERVABLE_FILES], + ) + + # write measurements + _write_dfs_to_files( + dir_, + "measurements", + petab.write_measurement_df, + measurement_dfs, + config[PROBLEMS][0][MEASUREMENT_FILES], + ) + + # write experiments + if experiment_dfs is not None: + config[PROBLEMS][0].setdefault(EXPERIMENT_FILES, []) + _write_dfs_to_files( + dir_, + "experiments", + v2.write_experiment_df, + experiment_dfs, + config[PROBLEMS][0][EXPERIMENT_FILES], + ) + + if mapping_df is not None: + # write mapping table + mappings_file = "_mapping.tsv" + petab.write_mapping_df( + mapping_df, os.path.join(dir_, mappings_file) + ) + config[PROBLEMS][0][MAPPING_FILES] = [mappings_file] + + # validate petab yaml + # TODO move to v2 or replace by ProblemConfig validator + v1.validate(config, path_prefix=dir_) + + # write yaml + yaml_file = problem_yaml_name(test_id) + yaml_path = os.path.join(dir_, yaml_file) + with open(yaml_path, "w") as outfile: + yaml.dump(config, outfile, default_flow_style=False) + + # validate written PEtab files + if validation_results := lint_problem_v2(yaml_path): + logger.critical(f"Invalid PEtab problem generated for {dir_}.") + validation_results.log(logger=logger) def get_case_dir(id_: int | str, format_: str, version: str) -> Path: + """Get the directory of a test case.""" id_str = test_id_str(id_) dir_ = CASES_DIR / version / format_ / id_str dir_.mkdir(parents=True, exist_ok=True) @@ -48,18 +432,23 @@ def get_case_dir(id_: int | str, format_: str, version: str) -> Path: def problem_yaml_name(_id: int | str) -> str: + """Get the name of the problem yaml file.""" return "_" + test_id_str(_id) + ".yaml" def solution_yaml_name(_id: int | str) -> str: + """Get the name of the solution yaml file.""" return "_" + test_id_str(_id) + "_solution.yaml" def test_id_str(_id: int | str) -> str: + """Get the test id as a string.""" return f"{_id:0>4}" -def write_info(case: PetabTestCase, format_: str, version: str): +def write_info( + case: PetabV1TestCase | PetabV2TestCase, format_: str, version: str +) -> None: """Write test info markdown file""" # id to string dir_ = get_case_dir(id_=case.id, format_=format_, version=version) @@ -71,170 +460,6 @@ def write_info(case: PetabTestCase, format_: str, version: str): f.write("\n") -def write_problem( - test_id: int, - parameter_df: pd.DataFrame, - condition_dfs: list[pd.DataFrame] | pd.DataFrame, - observable_dfs: list[pd.DataFrame] | pd.DataFrame, - measurement_dfs: list[pd.DataFrame] | pd.DataFrame, - model_files: list[Path] | Path, - version: str, - mapping_df: pd.DataFrame = None, - format_: str = "sbml", -) -> None: - """Write problem to files. - - Parameters - ---------- - test_id: Identifier of the test. - parameter_df: PEtab parameter table. - condition_dfs: PEtab condition tables. - observable_dfs: PEtab observable tables. - measurement_dfs: PEtab measurement tables. - model_files: PEtab SBML/PySB files. - format_: Model format (SBML/PySB) - mapping_df: PEtab mapping table - version: PEtab version - """ - print(f"Writing case {version} {format_} {test_id}...") - # convenience - if isinstance(condition_dfs, pd.DataFrame): - condition_dfs = [condition_dfs] - if isinstance(observable_dfs, pd.DataFrame): - observable_dfs = [observable_dfs] - if isinstance(measurement_dfs, pd.DataFrame): - measurement_dfs = [measurement_dfs] - if isinstance(model_files, str | Path): - model_files = [model_files] - - # id to string - dir_ = get_case_dir(id_=test_id, format_=format_, version=version) - - if version == "v1.0.0": - format_version = 1 - else: - assert version[0] == "v" - format_version = version[1:] - - # petab yaml - config = { - FORMAT_VERSION: format_version, - PROBLEMS: [ - { - CONDITION_FILES: [], - MEASUREMENT_FILES: [], - OBSERVABLE_FILES: [], - }, - ], - } - - if format_ == "sbml": - suffix = ".xml" - else: - suffix = ".py" - - # copy models - copied_model_files = [] - for i_sbml, model_file in enumerate(model_files): - if len(model_files) == 1: - copied_model_file = f"_model{suffix}" - else: - copied_model_file = f"_model{i_sbml}{suffix}" - try: - copyfile( - dir_ / model_file, - dir_ / copied_model_file, - ) - except SameFileError: - pass - copied_model_files.append(copied_model_file) - - if version == "v1.0.0": - config[PROBLEMS][0][SBML_FILES] = copied_model_files - else: - config[PROBLEMS][0][MODEL_FILES] = {} - for model_idx, model_file in enumerate(copied_model_files): - config[PROBLEMS][0][MODEL_FILES][f"model_{model_idx}"] = { - MODEL_LANGUAGE: format_, - MODEL_LOCATION: model_file, - } - - # write parameters - parameters_file = "_parameters.tsv" - petab.write_parameter_df(parameter_df, os.path.join(dir_, parameters_file)) - config[PARAMETER_FILE] = parameters_file - - # write conditions - _write_dfs_to_files( - dir_, - "conditions", - petab.write_condition_df, - condition_dfs, - config[PROBLEMS][0][CONDITION_FILES], - ) - - # write observables - _write_dfs_to_files( - dir_, - "observables", - petab.write_observable_df, - observable_dfs, - config[PROBLEMS][0][OBSERVABLE_FILES], - ) - - # write measurements - _write_dfs_to_files( - dir_, - "measurements", - petab.write_measurement_df, - measurement_dfs, - config[PROBLEMS][0][MEASUREMENT_FILES], - ) - - if format_version != 1 and mapping_df is not None: - # write mapping table - mappings_file = "_mapping.tsv" - petab.write_mapping_df(mapping_df, os.path.join(dir_, mappings_file)) - config[PROBLEMS][0][MAPPING_FILES] = [mappings_file] - - # validate petab yaml - petab.validate(config, path_prefix=dir_) - - # write yaml - yaml_file = problem_yaml_name(test_id) - yaml_path = os.path.join(dir_, yaml_file) - with open(yaml_path, "w") as outfile: - yaml.dump(config, outfile, default_flow_style=False) - - # FIXME Until a first libpetab with petab.v1 subpackage is released - try: - # new petab version - from petab.v1.lint import lint_problem as lint_problem_v1 - from petab.v2.lint import lint_problem as lint_problem_v2 - - # validate written PEtab files - if format_version == 1: - # PEtab v1 - problem = petab.Problem.from_yaml(yaml_path) - if lint_problem_v1(problem): - raise RuntimeError( - "Invalid PEtab problem, see messages above." - ) - else: - # v2 - validation_result = lint_problem_v2(yaml_path) - if validation_result: - print(validation_result) - raise RuntimeError( - "Invalid PEtab problem, see messages above." - ) - except ModuleNotFoundError: - # old petab version (will fail validation for some v2 tests) - problem = petab.Problem.from_yaml(os.path.join(dir_, yaml_file)) - if petab.lint_problem(problem): - raise RuntimeError("Invalid PEtab problem, see messages above.") - - def write_solution( test_id: int, simulation_dfs: list[pd.DataFrame] | pd.DataFrame, @@ -271,6 +496,7 @@ def write_solution( # unrelated test cases CHI2: round(float(chi2), 14), LLH: round(float(llh), 14), + # TODO: add log-prior, log-posterior TOL_SIMULATIONS: float(tol_simulations), TOL_CHI2: float(tol_chi2), TOL_LLH: float(tol_llh), @@ -280,7 +506,8 @@ def write_solution( _write_dfs_to_files( dir_, "simulations", - petab.write_measurement_df, + # TODO v2 + v1.write_measurement_df, simulation_dfs, config[SIMULATION_FILES], ) @@ -299,6 +526,7 @@ def _write_dfs_to_files( config_list: list[str] = None, ): """Write data frames to files and add them to config.""" + dfs = [df for df in dfs if df is not None] for idx, df in enumerate(dfs): if len(dfs) == 1: idx = "" diff --git a/pyproject.toml b/pyproject.toml index 4a4f54b..ec12816 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,7 +37,7 @@ dependencies = [ homepage = "https://github.com/PEtab-dev/petab_test_suite" [project.scripts] -petabtests_create = "petabtests.core:create" +petabtests_create = "petabtests.core:_cli_create" petabtests_clear = "petabtests.core:clear" diff --git a/pytest.ini b/pytest.ini index 8e64a3e..81caef2 100644 --- a/pytest.ini +++ b/pytest.ini @@ -6,5 +6,7 @@ filterwarnings = # warnings are errors error ignore:Support for PEtab2.0 and all of petab.v2 is experimental and subject to changes!:UserWarning + # some pycharm 2024.3.1 issue... + ignore:Passing unrecognized arguments to super\(PyDevIPCompleter6\).__init__\(use_readline=False\).:DeprecationWarning norecursedirs = .git cases petabtests/cases diff --git a/test/test_generate.py b/test/test_generate.py index 40238be..98c6ad5 100644 --- a/test/test_generate.py +++ b/test/test_generate.py @@ -1,15 +1,28 @@ -from petabtests.core import create +from petabtests.core import create_all from petabtests.C import CASES_DIR import sys import subprocess +from petabtests.core import create_case + def test_check_cases_up_to_date(): sys.path.insert(0, CASES_DIR) - create() + create_all() res = subprocess.run( ["git", "diff", "--exit-code", CASES_DIR], capture_output=True ) has_changes = res.returncode assert not has_changes, res.stdout.decode() + + +def test_create_case(): + """Test creating a single test case. + + Mostly for debugging purposes. + """ + format_ = "sbml" + version = "v2.0.0" + id_ = "0022" + create_case(format_=format_, version=version, id_=id_)