|
20 | 20 | "c": [2, 4, 6], |
21 | 21 | } |
22 | 22 |
|
23 | | -expected_b_only = { |
| 23 | +expected_on_b_idx_a = { |
24 | 24 | "a": ["x", "y", "z"], |
25 | 25 | "variable": ["b", "b", "b"], |
26 | 26 | "value": [1, 3, 5], |
27 | 27 | } |
28 | 28 |
|
29 | | -expected_b_c = { |
| 29 | +expected_on_b_c_idx_a = { |
30 | 30 | "a": ["x", "y", "z", "x", "y", "z"], |
31 | 31 | "variable": ["b", "b", "b", "c", "c", "c"], |
32 | 32 | "value": [1, 3, 5, 2, 4, 6], |
33 | 33 | } |
34 | 34 |
|
| 35 | +expected_on_none_idx_a = { |
| 36 | + "a": ["x", "y", "z", "x", "y", "z"], |
| 37 | + "variable": ["b", "b", "b", "c", "c", "c"], |
| 38 | + "value": [1, 3, 5, 2, 4, 6], |
| 39 | +} |
| 40 | + |
| 41 | +expected_on_b_c_idx_none = { |
| 42 | + "variable": ["b", "b", "b", "c", "c", "c"], |
| 43 | + "value": [1, 3, 5, 2, 4, 6], |
| 44 | +} |
| 45 | + |
| 46 | +expected_on_none_idx_none = { |
| 47 | + "variable": ["a", "a", "a", "b", "b", "b", "c", "c", "c"], |
| 48 | + "value": ["x", "y", "z", "1", "3", "5", "2", "4", "6"], |
| 49 | +} |
| 50 | + |
35 | 51 |
|
36 | 52 | @pytest.mark.parametrize( |
37 | | - ("on", "expected"), |
38 | | - [("b", expected_b_only), (["b", "c"], expected_b_c), (None, expected_b_c)], |
| 53 | + ("on", "index", "expected"), |
| 54 | + [ |
| 55 | + ("b", ["a"], expected_on_b_idx_a), |
| 56 | + (["b", "c"], ["a"], expected_on_b_c_idx_a), |
| 57 | + (None, ["a"], expected_on_none_idx_a), |
| 58 | + (["b", "c"], None, expected_on_b_c_idx_none), |
| 59 | + (None, None, expected_on_none_idx_none), |
| 60 | + ], |
39 | 61 | ) |
40 | | -def test_unpivot_on( |
| 62 | +def test_unpivot( |
41 | 63 | constructor: Constructor, |
42 | 64 | on: str | list[str] | None, |
| 65 | + index: list[str] | None, |
43 | 66 | expected: dict[str, list[float]], |
| 67 | + request: pytest.FixtureRequest, |
44 | 68 | ) -> None: |
| 69 | + if on is None and index is None and "polars" not in str(constructor): |
| 70 | + # TODO(2082): add support in other backends |
| 71 | + request.applymarker(pytest.mark.xfail) |
45 | 72 | df = nw.from_native(constructor(data)) |
46 | | - result = df.unpivot(on=on, index=["a"]).sort("variable", "a") |
| 73 | + sort_columns = ["variable"] if index is None else ["variable", "a"] |
| 74 | + result = df.unpivot(on=on, index=index).sort(by=sort_columns) |
47 | 75 | assert_equal_data(result, expected) |
48 | 76 |
|
49 | 77 |
|
|
0 commit comments