@@ -349,12 +349,14 @@ def test_flatten_timepoint_specific_output_overrides():
349
349
"""Test flatten_timepoint_specific_output_overrides"""
350
350
observable_df = pd .DataFrame (
351
351
data = {
352
- OBSERVABLE_ID : ["obs1" ],
352
+ OBSERVABLE_ID : ["obs1" , "obs2" ],
353
353
OBSERVABLE_FORMULA : [
354
- "observableParameter1_obs1 + observableParameter2_obs1"
354
+ "observableParameter1_obs1 + observableParameter2_obs1" ,
355
+ "x" ,
355
356
],
356
357
NOISE_FORMULA : [
357
- "(observableParameter1_obs1 + observableParameter2_obs1) * noiseParameter1_obs1"
358
+ "(observableParameter1_obs1 + observableParameter2_obs1) * noiseParameter1_obs1" ,
359
+ 1 ,
358
360
],
359
361
}
360
362
)
@@ -366,11 +368,17 @@ def test_flatten_timepoint_specific_output_overrides():
366
368
obs1_2_2_1 = "obs1__obsParOverride2_1_0__noiseParOverride2__condition1"
367
369
observable_df_expected = pd .DataFrame (
368
370
data = {
369
- OBSERVABLE_ID : [obs1_1_1_1 , obs1_2_1_1 , obs1_2_2_1 ],
371
+ OBSERVABLE_ID : [
372
+ obs1_1_1_1 ,
373
+ obs1_2_1_1 ,
374
+ obs1_2_2_1 ,
375
+ "obs2__condition1" ,
376
+ ],
370
377
OBSERVABLE_FORMULA : [
371
378
f"observableParameter1_{ obs1_1_1_1 } + observableParameter2_{ obs1_1_1_1 } " ,
372
379
f"observableParameter1_{ obs1_2_1_1 } + observableParameter2_{ obs1_2_1_1 } " ,
373
380
f"observableParameter1_{ obs1_2_2_1 } + observableParameter2_{ obs1_2_2_1 } " ,
381
+ "x" ,
374
382
],
375
383
NOISE_FORMULA : [
376
384
f"(observableParameter1_{ obs1_1_1_1 } + observableParameter2_{ obs1_1_1_1 } )"
@@ -379,6 +387,7 @@ def test_flatten_timepoint_specific_output_overrides():
379
387
f" * noiseParameter1_{ obs1_2_1_1 } " ,
380
388
f"(observableParameter1_{ obs1_2_2_1 } + observableParameter2_{ obs1_2_2_1 } )"
381
389
f" * noiseParameter1_{ obs1_2_2_1 } " ,
390
+ 1 ,
382
391
],
383
392
}
384
393
)
@@ -387,54 +396,66 @@ def test_flatten_timepoint_specific_output_overrides():
387
396
# Measurement table with timepoint-specific overrides
388
397
measurement_df = pd .DataFrame (
389
398
data = {
390
- OBSERVABLE_ID : ["obs1" , "obs1" , "obs1" , "obs1" ],
399
+ OBSERVABLE_ID : ["obs1" , "obs1" , "obs1" , "obs1" , "obs2" ],
391
400
SIMULATION_CONDITION_ID : [
392
401
"condition1" ,
393
402
"condition1" ,
394
403
"condition1" ,
395
404
"condition1" ,
405
+ "condition1" ,
396
406
],
397
- PREEQUILIBRATION_CONDITION_ID : ["" , "" , "" , "" ],
398
- TIME : [1.0 , 1.0 , 2.0 , 2.0 ],
399
- MEASUREMENT : [0.1 ] * 4 ,
407
+ PREEQUILIBRATION_CONDITION_ID : ["" , "" , "" , "" , "" ],
408
+ TIME : [1.0 , 1.0 , 2.0 , 2.0 , 3.0 ],
409
+ MEASUREMENT : [0.1 ] * 5 ,
400
410
OBSERVABLE_PARAMETERS : [
401
411
"obsParOverride1;1.0" ,
402
412
"obsParOverride2;1.0" ,
403
413
"obsParOverride2;1.0" ,
404
414
"obsParOverride2;1.0" ,
415
+ "" ,
405
416
],
406
417
NOISE_PARAMETERS : [
407
418
"noiseParOverride1" ,
408
419
"noiseParOverride1" ,
409
420
"noiseParOverride2" ,
410
421
"noiseParOverride2" ,
422
+ "" ,
411
423
],
412
424
}
413
425
)
414
426
415
427
measurement_df_expected = pd .DataFrame (
416
428
data = {
417
- OBSERVABLE_ID : [obs1_1_1_1 , obs1_2_1_1 , obs1_2_2_1 , obs1_2_2_1 ],
429
+ OBSERVABLE_ID : [
430
+ obs1_1_1_1 ,
431
+ obs1_2_1_1 ,
432
+ obs1_2_2_1 ,
433
+ obs1_2_2_1 ,
434
+ "obs2__condition1" ,
435
+ ],
418
436
SIMULATION_CONDITION_ID : [
419
437
"condition1" ,
420
438
"condition1" ,
421
439
"condition1" ,
422
440
"condition1" ,
441
+ "condition1" ,
423
442
],
424
- PREEQUILIBRATION_CONDITION_ID : ["" , "" , "" , "" ],
425
- TIME : [1.0 , 1.0 , 2.0 , 2.0 ],
426
- MEASUREMENT : [0.1 ] * 4 ,
443
+ PREEQUILIBRATION_CONDITION_ID : ["" , "" , "" , "" , "" ],
444
+ TIME : [1.0 , 1.0 , 2.0 , 2.0 , 3.0 ],
445
+ MEASUREMENT : [0.1 ] * 5 ,
427
446
OBSERVABLE_PARAMETERS : [
428
447
"obsParOverride1;1.0" ,
429
448
"obsParOverride2;1.0" ,
430
449
"obsParOverride2;1.0" ,
431
450
"obsParOverride2;1.0" ,
451
+ "" ,
432
452
],
433
453
NOISE_PARAMETERS : [
434
454
"noiseParOverride1" ,
435
455
"noiseParOverride1" ,
436
456
"noiseParOverride2" ,
437
457
"noiseParOverride2" ,
458
+ "" ,
438
459
],
439
460
}
440
461
)
@@ -483,7 +504,9 @@ def test_flatten_timepoint_specific_output_overrides():
483
504
petab_problem = unflattened_problem ,
484
505
)
485
506
# The unflattened simulation dataframe has the original observable IDs.
486
- assert (unflattened_simulation_df [OBSERVABLE_ID ] == "obs1" ).all ()
507
+ assert (
508
+ unflattened_simulation_df [OBSERVABLE_ID ] == ["obs1" ] * 4 + ["obs2" ]
509
+ ).all ()
487
510
488
511
489
512
def test_flatten_timepoint_specific_output_overrides_special_cases ():
0 commit comments