@@ -33,25 +33,25 @@ def sample_ranking_df():
3333 methods = ["MethodA" , "MethodB" , "MethodC" ]
3434 rows = [
3535 # Literature - 2 different tasks (triggers line 83 in _build_task_list)
36- {"name" : m , "class" : "Literature" , "task" : "TF Markers" , "db" : "HPA" , "dts " : "DatasetX" , "f01" : np .random .uniform (0 , 1 )}
36+ {"name" : m , "class" : "Literature" , "task" : "TF Markers" , "db" : "HPA" , "dataset " : "DatasetX" , "f01" : np .random .uniform (0 , 1 )}
3737 for m in methods
3838 ] + [
39- {"name" : m , "class" : "Literature" , "task" : "TF Pairs" , "db" : "Europe PMC" , "dts " : "DatasetX" , "f01" : np .random .uniform (0 , 1 )}
39+ {"name" : m , "class" : "Literature" , "task" : "TF Pairs" , "db" : "Europe PMC" , "dataset " : "DatasetX" , "f01" : np .random .uniform (0 , 1 )}
4040 for m in methods
4141 ] + [
4242 # Genomic - 2 different tasks (triggers line 259 in _ranking_task span update)
43- {"name" : m , "class" : "Genomic" , "task" : "TF Binding" , "db" : "ChIP-Atlas" , "dts " : "DatasetX" , "f01" : np .random .uniform (0 , 1 )}
43+ {"name" : m , "class" : "Genomic" , "task" : "TF Binding" , "db" : "ChIP-Atlas" , "dataset " : "DatasetX" , "f01" : np .random .uniform (0 , 1 )}
4444 for m in methods
4545 ] + [
46- {"name" : m , "class" : "Genomic" , "task" : "CREs" , "db" : "ENCODE CREs" , "dts " : "DatasetX" , "f01" : np .random .uniform (0 , 1 )}
46+ {"name" : m , "class" : "Genomic" , "task" : "CREs" , "db" : "ENCODE CREs" , "dataset " : "DatasetX" , "f01" : np .random .uniform (0 , 1 )}
4747 for m in methods
4848 ] + [
4949 # Predictive
50- {"name" : m , "class" : "Predictive" , "task" : "Gene Sets" , "db" : "Hallmarks" , "dts " : "DatasetX" , "f01" : np .random .uniform (0 , 1 )}
50+ {"name" : m , "class" : "Predictive" , "task" : "Gene Sets" , "db" : "Hallmarks" , "dataset " : "DatasetX" , "f01" : np .random .uniform (0 , 1 )}
5151 for m in methods
5252 ] + [
5353 # Mechanistic
54- {"name" : m , "class" : "Mechanistic" , "task" : "TF Scoring" , "db" : "KnockTF" , "dts " : "DatasetX" , "f01" : np .random .uniform (0 , 1 )}
54+ {"name" : m , "class" : "Mechanistic" , "task" : "TF Scoring" , "db" : "KnockTF" , "dataset " : "DatasetX" , "f01" : np .random .uniform (0 , 1 )}
5555 for m in methods
5656 ]
5757 return pd .DataFrame (rows )
@@ -63,10 +63,10 @@ def sample_ranking_df_with_nan():
6363 methods = ["MethodA" , "MethodB" ]
6464 rows = [
6565 # MethodA has both Predictive and Literature data
66- {"name" : "MethodA" , "class" : "Predictive" , "task" : "Gene Sets" , "db" : "Hallmarks" , "dts " : "DatasetX" , "f01" : 0.5 },
67- {"name" : "MethodA" , "class" : "Literature" , "task" : "TF Markers" , "db" : "HPA" , "dts " : "DatasetX" , "f01" : 0.6 },
66+ {"name" : "MethodA" , "class" : "Predictive" , "task" : "Gene Sets" , "db" : "Hallmarks" , "dataset " : "DatasetX" , "f01" : 0.5 },
67+ {"name" : "MethodA" , "class" : "Literature" , "task" : "TF Markers" , "db" : "HPA" , "dataset " : "DatasetX" , "f01" : 0.6 },
6868 # MethodB only has Predictive data → NaN for Literature class
69- {"name" : "MethodB" , "class" : "Predictive" , "task" : "Gene Sets" , "db" : "Hallmarks" , "dts " : "DatasetX" , "f01" : 0.4 },
69+ {"name" : "MethodB" , "class" : "Predictive" , "task" : "Gene Sets" , "db" : "Hallmarks" , "dataset " : "DatasetX" , "f01" : 0.4 },
7070 ]
7171 return pd .DataFrame (rows )
7272
@@ -381,3 +381,12 @@ def test_ranking_task_multiple_tasks_per_class(self, sample_ranking_df):
381381 fig = ranking (sample_ranking_df , level = "task" , return_fig = True )
382382 assert isinstance (fig , plt .Figure )
383383 plt .close (fig )
384+
385+ def test_save_writes_file (self , sample_ranking_df , tmp_path ):
386+ """Test that save parameter writes a file."""
387+ out = tmp_path / "ranking.png"
388+ result = ranking (sample_ranking_df , level = "class" , save = str (out ))
389+
390+ assert result is None
391+ assert out .exists ()
392+ plt .close ("all" )
0 commit comments