Coverage for nilearn/plotting/tests/test_utils.py: 0%

40 statements  

« prev     ^ index     » next       coverage.py v7.9.1, created at 2025-06-16 12:32 +0200

1"""Tests for private function \ 

2 nilearn.plotting.img_plotting.get_colorbar_and_data_ranges. 

3""" 

4 

5import numpy as np 

6import pytest 

7 

8from nilearn.plotting._utils import get_colorbar_and_data_ranges 

9 

10 

11@pytest.fixture 

12def data_pos_neg(): 

13 """Fixture for data with both positive and negative values.""" 

14 # min: -0.5, max: 3.0 

15 return np.array( 

16 [[-0.5, 1.0, np.nan], [0.0, np.nan, -0.2], [1.5, 2.5, 3.0]] 

17 ) 

18 

19 

20@pytest.fixture 

21def data_pos(data_pos_neg): 

22 """Fixture for data with only positive values.""" 

23 # min: 0.5, max: 3.0 

24 return np.abs(data_pos_neg) 

25 

26 

27@pytest.fixture 

28def data_neg(data_pos_neg): 

29 """Fixture for data with only negative values.""" 

30 # min: -3, max: -0.5 

31 return -np.abs(data_pos_neg) 

32 

33 

34@pytest.fixture 

35def data_masked(data_pos_neg): 

36 """Fixture for data with masked values.""" 

37 # min: -0.5, max: 1.5 

38 return np.ma.masked_greater(data_pos_neg, 2.0) 

39 

40 

41def test_get_colorbar_and_data_ranges_error(): 

42 """Tests for expected errors in get_colorbar_and_data_ranges.""" 

43 # incompatible vmin and vmax if symmetric_cbar is True 

44 with pytest.raises(ValueError, match="vmin must be equal to -vmax"): 

45 get_colorbar_and_data_ranges( 

46 data_pos_neg, 

47 vmin=0, 

48 vmax=1.0, 

49 symmetric_cbar=True, 

50 ) 

51 

52 

53@pytest.mark.parametrize( 

54 "case,symmetric_cbar", 

55 [ 

56 ("data_pos_neg", True), 

57 ("data_pos_neg", "auto"), 

58 ("data_pos", True), 

59 ("data_neg", True), 

60 ], 

61) 

62@pytest.mark.parametrize( 

63 "vmin,vmax,expected_results", 

64 [ 

65 (None, None, (-3, 3, -3, 3)), 

66 (np.nan, None, (-3, 3, -3, 3)), 

67 (None, np.nan, (-3, 3, -3, 3)), 

68 (None, "-5", (-3, 3, -3, 3)), 

69 (-1, None, (-1, 1, -1, 1)), 

70 (None, 2, (-2, 2, -2, 2)), 

71 (None, 4, (-4, 4, -4, 4)), 

72 ], 

73) 

74def test_get_colorbar_and_data_ranges_symmetric_cbar_true( 

75 request, 

76 case, 

77 vmin, 

78 vmax, 

79 expected_results, 

80 symmetric_cbar, 

81): 

82 """Test for get_colorbar_and_data_ranges with symmetric colorbar.""" 

83 data = request.getfixturevalue(case) 

84 assert expected_results == get_colorbar_and_data_ranges( 

85 data, 

86 vmin=vmin, 

87 vmax=vmax, 

88 symmetric_cbar=symmetric_cbar, 

89 ) 

90 

91 

92@pytest.mark.parametrize( 

93 "vmin,vmax,expected_results", 

94 [ 

95 (None, None, (None, None, -0.5, 3)), 

96 (-1, None, (-1, None, -1, 3)), 

97 (None, 2, (None, 2, -0.5, 2)), 

98 (-0.25, 1, (-0.25, 1, -0.25, 1)), 

99 ], 

100) 

101def test_get_colorbar_and_data_ranges_symmetric_cbar_false_pos_neg( 

102 data_pos_neg, 

103 vmin, 

104 vmax, 

105 expected_results, 

106): 

107 """ 

108 Test for get_colorbar_and_data_ranges with non-symmetric colorbar. 

109 

110 Using data with both positive and negatives values. 

111 """ 

112 assert expected_results == get_colorbar_and_data_ranges( 

113 data_pos_neg, 

114 vmin=vmin, 

115 vmax=vmax, 

116 symmetric_cbar=False, 

117 ) 

118 

119 

120@pytest.mark.parametrize( 

121 "vmin,vmax,expected_results", 

122 [ 

123 (None, None, (0, None, 0, 3)), 

124 (None, 2, (0, 2, 0, 2)), 

125 (1, 2.5, (1, 2.5, 1, 2.5)), 

126 ], 

127) 

128@pytest.mark.parametrize("symmetric_cbar", ["auto", False]) 

129def test_get_colorbar_and_data_ranges_symmetric_cbar_false_pos( 

130 data_pos, 

131 vmin, 

132 vmax, 

133 symmetric_cbar, 

134 expected_results, 

135): 

136 """ 

137 Test for get_colorbar_and_data_ranges with non-symmetric colorbar. 

138 

139 Using data with only positive values. 

140 """ 

141 assert expected_results == get_colorbar_and_data_ranges( 

142 data_pos, 

143 vmin=vmin, 

144 vmax=vmax, 

145 symmetric_cbar=symmetric_cbar, 

146 ) 

147 

148 

149@pytest.mark.parametrize( 

150 "vmin,vmax,expected_results", 

151 [ 

152 (None, None, (None, 0, -3, 0)), 

153 (None, 2, (None, 2, -3, 2)), 

154 (1, 2.5, (1, 2.5, 1, 2.5)), 

155 ], 

156) 

157@pytest.mark.parametrize("symmetric_cbar", ["auto", False]) 

158def test_get_colorbar_and_data_ranges_symmetric_cbar_false_neg( 

159 data_neg, 

160 vmin, 

161 vmax, 

162 symmetric_cbar, 

163 expected_results, 

164): 

165 """ 

166 Test for get_colorbar_and_data_ranges with non-symmetric colorbar. 

167 

168 Using data with only negatives values. 

169 """ 

170 assert expected_results == get_colorbar_and_data_ranges( 

171 data_neg, 

172 vmin=vmin, 

173 vmax=vmax, 

174 symmetric_cbar=symmetric_cbar, 

175 ) 

176 

177 

178@pytest.mark.parametrize( 

179 "vmin,vmax,symmetric_cbar,expected_results", 

180 [ 

181 (None, None, True, (-1.5, 1.5, -1.5, 1.5)), 

182 (None, None, "auto", (-1.5, 1.5, -1.5, 1.5)), 

183 (None, None, False, (None, None, -0.5, 1.5)), 

184 ], 

185) 

186def test_get_colorbar_and_data_ranges_masked( 

187 data_masked, vmin, vmax, symmetric_cbar, expected_results 

188): 

189 """Test for get_colorbar_and_data_ranges with masked data.""" 

190 assert expected_results == get_colorbar_and_data_ranges( 

191 data_masked, 

192 vmin=vmin, 

193 vmax=vmax, 

194 symmetric_cbar=symmetric_cbar, 

195 ) 

196 

197 

198def test_get_colorbar_and_data_ranges_force_min_stat_map_value(data_pos_neg): 

199 """Test for get_colorbar_and_data_ranges with force_min_stat_map_value.""" 

200 expected_results = (0, None, 0, 3) 

201 assert expected_results == get_colorbar_and_data_ranges( 

202 data_pos_neg, 

203 vmin=None, 

204 vmax=None, 

205 symmetric_cbar="auto", 

206 force_min_stat_map_value=0, 

207 )