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
« 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"""
5import numpy as np
6import pytest
8from nilearn.plotting._utils import get_colorbar_and_data_ranges
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 )
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)
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)
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)
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 )
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 )
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.
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 )
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.
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 )
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.
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 )
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 )
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 )