|
1 | 1 | import plotly.express as px
|
2 | 2 | import numpy as np
|
3 | 3 | import pytest
|
| 4 | +from itertools import permutations |
4 | 5 |
|
5 | 6 |
|
6 | 7 | def test_scatter():
|
@@ -185,54 +186,52 @@ def test_px_templates():
|
185 | 186 | assert fig.layout.yaxis3.showgrid
|
186 | 187 |
|
187 | 188 |
|
188 |
| -def test_orthogonal_orderings(): |
189 |
| - from itertools import permutations |
190 |
| - |
191 |
| - df = px.data.tips() |
192 |
| - |
| 189 | +def assert_orderings(days_order, days_check, times_order, times_check): |
193 | 190 | symbol_sequence = ["circle", "diamond", "square", "cross"]
|
194 | 191 | color_sequence = ["red", "blue"]
|
| 192 | + fig = px.scatter( |
| 193 | + px.data.tips(), |
| 194 | + x="total_bill", |
| 195 | + y="tip", |
| 196 | + facet_row="time", |
| 197 | + facet_col="day", |
| 198 | + color="time", |
| 199 | + symbol="day", |
| 200 | + symbol_sequence=symbol_sequence, |
| 201 | + color_discrete_sequence=color_sequence, |
| 202 | + category_orders=dict(day=days_order, time=times_order), |
| 203 | + ) |
| 204 | + |
| 205 | + for col in range(len(days_check)): |
| 206 | + for trace in fig.select_traces(col=col + 1): |
| 207 | + assert days_check[col] in trace.hovertemplate |
195 | 208 |
|
196 |
| - def assert_orderings(days_order, days_check, times_order, times_check): |
197 |
| - fig = px.scatter( |
198 |
| - df, |
199 |
| - x="total_bill", |
200 |
| - y="tip", |
201 |
| - facet_row="time", |
202 |
| - facet_col="day", |
203 |
| - color="time", |
204 |
| - symbol="day", |
205 |
| - symbol_sequence=symbol_sequence, |
206 |
| - color_discrete_sequence=color_sequence, |
207 |
| - category_orders=dict(day=days_order, time=times_order), |
208 |
| - ) |
209 |
| - |
210 |
| - for col in range(len(days_check)): |
211 |
| - for trace in fig.select_traces(col=col + 1): |
212 |
| - assert days_check[col] in trace.hovertemplate |
213 |
| - |
214 |
| - for row in range(len(times_check)): |
215 |
| - for trace in fig.select_traces(row=2 - row): |
216 |
| - assert times_check[row] in trace.hovertemplate |
217 |
| - |
218 |
| - for trace in fig.data: |
219 |
| - for i, day in enumerate(days_check): |
220 |
| - if day in trace.name: |
221 |
| - assert trace.marker.symbol == symbol_sequence[i] |
222 |
| - for i, time in enumerate(times_check): |
223 |
| - if time in trace.name: |
224 |
| - assert trace.marker.color == color_sequence[i] |
| 209 | + for row in range(len(times_check)): |
| 210 | + for trace in fig.select_traces(row=2 - row): |
| 211 | + assert times_check[row] in trace.hovertemplate |
225 | 212 |
|
| 213 | + for trace in fig.data: |
| 214 | + for i, day in enumerate(days_check): |
| 215 | + if day in trace.name: |
| 216 | + assert trace.marker.symbol == symbol_sequence[i] |
| 217 | + for i, time in enumerate(times_check): |
| 218 | + if time in trace.name: |
| 219 | + assert trace.marker.color == color_sequence[i] |
| 220 | + |
| 221 | + |
| 222 | +def test_noisy_orthogonal_orderings(): |
226 | 223 | assert_orderings(
|
227 | 224 | ["x", "Sun", "Sat", "y", "Fri", "z"], # add extra noise, missing Thur
|
228 | 225 | ["Sun", "Sat", "Fri", "Thur"], # Thur is at the back
|
229 | 226 | ["a", "Lunch", "b"], # add extra noise, missing Dinner
|
230 | 227 | ["Lunch", "Dinner"], # Dinner is at the back
|
231 | 228 | )
|
232 | 229 |
|
233 |
| - for days in permutations(df["day"].unique()): |
234 |
| - for times in permutations(df["time"].unique()): |
235 |
| - assert_orderings(days, days, times, times) |
| 230 | + |
| 231 | +@pytest.mark.parametrize("days", permutations(["Sun", "Sat", "Fri", "Thur"])) |
| 232 | +@pytest.mark.parametrize("times", permutations(["Lunch", "Dinner"])) |
| 233 | +def test_orthogonal_orderings(days, times): |
| 234 | + assert_orderings(days, days, times, times) |
236 | 235 |
|
237 | 236 |
|
238 | 237 | def test_permissive_defaults():
|
|
0 commit comments