1919EXAMPLE_DIR = Path (__file__ ).parents [1 ] / "doc" / "example"
2020
2121
22+ @pytest .fixture (scope = "function" )
23+ def close_fig ():
24+ """Close all open matplotlib figures"""
25+ yield
26+ plt .close ('all' )
27+
28+
2229@pytest .fixture
2330def data_file_Fujita ():
2431 return EXAMPLE_DIR / "example_Fujita" / "Fujita_measurementData.tsv"
@@ -88,6 +95,7 @@ def visu_file_Fujita_minimal():
8895 / "Fujita_visuSpec_mandatory.tsv"
8996
9097
98+ @pytest .mark .filterwarnings ("ignore:Visualization table is empty" )
9199@pytest .fixture
92100def visu_file_Fujita_empty ():
93101 return EXAMPLE_DIR / "example_Fujita" / "visuSpecs" \
@@ -137,7 +145,8 @@ def simulation_file_Isensee():
137145def test_visualization_with_vis_and_sim (data_file_Isensee ,
138146 condition_file_Isensee ,
139147 vis_spec_file_Isensee ,
140- simulation_file_Isensee ):
148+ simulation_file_Isensee ,
149+ close_fig ):
141150 validate_visualization_df (
142151 petab .Problem (
143152 condition_df = petab .get_condition_df (condition_file_Isensee ),
@@ -151,7 +160,8 @@ def test_visualization_with_vis_and_sim(data_file_Isensee,
151160def test_visualization_replicates (data_file_Isensee ,
152161 condition_file_Isensee ,
153162 vis_spec_file_Isensee_replicates ,
154- simulation_file_Isensee ):
163+ simulation_file_Isensee ,
164+ close_fig ):
155165 plot_with_vis_spec (vis_spec_file_Isensee_replicates ,
156166 condition_file_Isensee ,
157167 data_file_Isensee , simulation_file_Isensee )
@@ -160,15 +170,17 @@ def test_visualization_replicates(data_file_Isensee,
160170def test_visualization_scatterplot (data_file_Isensee ,
161171 condition_file_Isensee ,
162172 vis_spec_file_Isensee_scatterplot ,
163- simulation_file_Isensee ):
173+ simulation_file_Isensee ,
174+ close_fig ):
164175 plot_with_vis_spec (vis_spec_file_Isensee_scatterplot ,
165176 condition_file_Isensee ,
166177 data_file_Isensee , simulation_file_Isensee )
167178
168179
169180def test_visualization_small_visu_file_w_datasetid (data_file_Fujita ,
170181 condition_file_Fujita ,
171- visu_file_Fujita_small ):
182+ visu_file_Fujita_small ,
183+ close_fig ):
172184 """
173185 Test: visualization specification file only with few columns in
174186 particular datasetId
@@ -181,7 +193,8 @@ def test_visualization_small_visu_file_w_datasetid(data_file_Fujita,
181193def test_visualization_small_visu_file_wo_datasetid (
182194 data_file_Fujita ,
183195 condition_file_Fujita ,
184- visu_file_Fujita_wo_dsid_wo_yvalues ):
196+ visu_file_Fujita_wo_dsid_wo_yvalues ,
197+ close_fig ):
185198 """
186199 Test: visualization specification file only with few columns in
187200 particular no datasetId column
@@ -194,7 +207,8 @@ def test_visualization_small_visu_file_wo_datasetid(
194207def test_visualization_all_obs_with_diff_settings (
195208 data_file_Fujita ,
196209 condition_file_Fujita ,
197- visu_file_Fujita_all_obs_with_diff_settings ):
210+ visu_file_Fujita_all_obs_with_diff_settings ,
211+ close_fig ):
198212 """
199213 Test: visualization specification file only with few columns. In
200214 particular, no datasetId column and no yValues column, but more than one
@@ -207,7 +221,8 @@ def test_visualization_all_obs_with_diff_settings(
207221
208222def test_visualization_minimal_visu_file (data_file_Fujita ,
209223 condition_file_Fujita ,
210- visu_file_Fujita_minimal ):
224+ visu_file_Fujita_minimal ,
225+ close_fig ):
211226 """
212227 Test: visualization specification file only with mandatory column plotId
213228 (optional columns are optional)
@@ -218,18 +233,21 @@ def test_visualization_minimal_visu_file(data_file_Fujita,
218233
219234def test_visualization_empty_visu_file (data_file_Fujita ,
220235 condition_file_Fujita ,
221- visu_file_Fujita_empty ):
236+ visu_file_Fujita_empty ,
237+ close_fig ):
222238 """
223239 Test: Empty visualization specification file should default to routine
224240 for no file at all
225241 """
226- plot_with_vis_spec (visu_file_Fujita_empty , condition_file_Fujita ,
227- data_file_Fujita )
242+ with pytest .warns (UserWarning , match = "Visualization table is empty." ):
243+ plot_with_vis_spec (visu_file_Fujita_empty , condition_file_Fujita ,
244+ data_file_Fujita )
228245
229246
230247def test_visualization_minimal_data_file (data_file_Fujita_minimal ,
231248 condition_file_Fujita ,
232- visu_file_Fujita_wo_dsid_wo_yvalues ):
249+ visu_file_Fujita_wo_dsid_wo_yvalues ,
250+ close_fig ):
233251 """
234252 Test visualization, with the case: data file only with mandatory columns
235253 (optional columns are optional)
@@ -240,7 +258,8 @@ def test_visualization_minimal_data_file(data_file_Fujita_minimal,
240258
241259def test_visualization_with_dataset_list (data_file_Isensee ,
242260 condition_file_Isensee ,
243- simulation_file_Isensee ):
261+ simulation_file_Isensee ,
262+ close_fig ):
244263 datasets = [['JI09_150302_Drg345_343_CycNuc__4_ABnOH_and_ctrl' ,
245264 'JI09_150302_Drg345_343_CycNuc__4_ABnOH_and_Fsk' ],
246265 ['JI09_160201_Drg453-452_CycNuc__ctrl' ,
@@ -257,7 +276,8 @@ def test_visualization_with_dataset_list(data_file_Isensee,
257276
258277def test_visualization_without_datasets (data_file_Fujita ,
259278 condition_file_Fujita ,
260- simu_file_Fujita ):
279+ simu_file_Fujita ,
280+ close_fig ):
261281
262282 sim_cond_id_list = [['model1_data1' ], ['model1_data2' , 'model1_data3' ],
263283 ['model1_data4' , 'model1_data5' ], ['model1_data6' ]]
@@ -284,7 +304,8 @@ def test_visualization_without_datasets(data_file_Fujita,
284304
285305
286306def test_visualization_only_simulations (condition_file_Fujita ,
287- simu_file_Fujita ):
307+ simu_file_Fujita ,
308+ close_fig ):
288309
289310 sim_cond_id_list = [['model1_data1' ], ['model1_data2' , 'model1_data3' ],
290311 ['model1_data4' , 'model1_data5' ], ['model1_data6' ]]
@@ -300,7 +321,9 @@ def test_visualization_only_simulations(condition_file_Fujita,
300321 plotted_noise = PROVIDED )
301322
302323
303- def test_simple_visualization (data_file_Fujita , condition_file_Fujita ):
324+ def test_simple_visualization (
325+ data_file_Fujita , condition_file_Fujita , close_fig
326+ ):
304327 plot_without_vis_spec (condition_file_Fujita ,
305328 measurements_df = data_file_Fujita )
306329 plot_without_vis_spec (condition_file_Fujita ,
@@ -311,7 +334,8 @@ def test_simple_visualization(data_file_Fujita, condition_file_Fujita):
311334def test_visualization_with__t_inf (data_file_Fujita_t_inf ,
312335 simu_file_Fujita_t_inf ,
313336 condition_file_Fujita ,
314- visu_file_Fujita_replicates ):
337+ visu_file_Fujita_replicates ,
338+ close_fig ):
315339 # plot only measurements
316340 plot_without_vis_spec (condition_file_Fujita ,
317341 measurements_df = data_file_Fujita_t_inf )
@@ -333,7 +357,8 @@ def test_visualization_with__t_inf(data_file_Fujita_t_inf,
333357
334358
335359def test_save_plots_to_file (data_file_Isensee , condition_file_Isensee ,
336- vis_spec_file_Isensee , simulation_file_Isensee ):
360+ vis_spec_file_Isensee , simulation_file_Isensee ,
361+ close_fig ):
337362 with TemporaryDirectory () as temp_dir :
338363 plot_with_vis_spec (vis_spec_file_Isensee , condition_file_Isensee ,
339364 data_file_Isensee , simulation_file_Isensee ,
@@ -349,7 +374,11 @@ def test_save_visu_file(data_file_Isensee,
349374 data_file_Isensee )
350375 figure , _ = vis_spec_parser .parse_from_id_list ()
351376
352- figure .save_to_tsv (path .join (temp_dir , "visuSpec.tsv" ))
377+ with pytest .warns (
378+ UserWarning ,
379+ match = "please check that datasetId column corresponds to"
380+ ):
381+ figure .save_to_tsv (path .join (temp_dir , "visuSpec.tsv" ))
353382
354383 datasets = [['JI09_150302_Drg345_343_CycNuc__4_ABnOH_and_ctrl' ,
355384 'JI09_150302_Drg345_343_CycNuc__4_ABnOH_and_Fsk' ],
@@ -361,16 +390,20 @@ def test_save_visu_file(data_file_Isensee,
361390 data_file_Isensee )
362391 figure , _ = vis_spec_parser .parse_from_id_list (datasets ,
363392 group_by = 'dataset' )
364- figure .save_to_tsv (path .join (temp_dir , "visuSpec1.tsv" ))
393+ with pytest .warns (
394+ UserWarning ,
395+ match = "please check that datasetId column corresponds to"
396+ ):
397+ figure .save_to_tsv (path .join (temp_dir , "visuSpec1.tsv" ))
365398
366399
367- def test_residuals_plot (simu_file_Fujita ):
400+ def test_residuals_plot (simu_file_Fujita , close_fig ):
368401 fujita_yaml = EXAMPLE_DIR / "example_Fujita" / "Fujita.yaml"
369402 fujita_petab_problem = petab .Problem .from_yaml (fujita_yaml )
370403 plot_residuals_vs_simulation (fujita_petab_problem , simu_file_Fujita )
371404
372405
373- def test_goodness_of_fit_plot (simu_file_Fujita ):
406+ def test_goodness_of_fit_plot (simu_file_Fujita , close_fig ):
374407 fujita_yaml = EXAMPLE_DIR / "example_Fujita" / "Fujita.yaml"
375408 fujita_petab_problem = petab .Problem .from_yaml (fujita_yaml )
376409 plot_goodness_of_fit (fujita_petab_problem , simu_file_Fujita )
@@ -389,6 +422,7 @@ def test_cli():
389422 subprocess .run (args , check = True )
390423
391424
425+ @pytest .mark .filterwarnings ("ignore:Visualization table is empty" )
392426@pytest .mark .parametrize (
393427 "vis_file" ,
394428 (
0 commit comments