|
33 | 33 | ), |
34 | 34 | id="set-single-level", |
35 | 35 | ), |
| 36 | + pytest.param( |
| 37 | + pd.MultiIndex.from_tuples( |
| 38 | + [ |
| 39 | + ("sa", "va", "kg", 0), |
| 40 | + ("sb", "vb", "m", 1), |
| 41 | + ("sa", "va", "kg", 2), |
| 42 | + ], |
| 43 | + names=["scenario", "variable", "unit", "run_id"], |
| 44 | + ), |
| 45 | + {"new_variable": ["a", "b", "c"]}, |
| 46 | + pd.MultiIndex.from_tuples( |
| 47 | + [ |
| 48 | + ("sa", "va", "kg", 0, "a"), |
| 49 | + ("sb", "vb", "m", 1, "b"), |
| 50 | + ("sa", "va", "kg", 2, "c"), |
| 51 | + ], |
| 52 | + names=["scenario", "variable", "unit", "run_id", "new_variable"], |
| 53 | + ), |
| 54 | + id="set-multiple-levels", |
| 55 | + ), |
| 56 | + pytest.param( |
| 57 | + pd.MultiIndex.from_tuples( |
| 58 | + [ |
| 59 | + ("sa", "va", "kg", 0), |
| 60 | + ("sb", "vb", "m", 1), |
| 61 | + ("sa", "va", "kg", 2), |
| 62 | + ], |
| 63 | + names=["scenario", "variable", "unit", "run_id"], |
| 64 | + ), |
| 65 | + {"variable": ["a", "b", "c"]}, |
| 66 | + pd.MultiIndex.from_tuples( |
| 67 | + [ |
| 68 | + ("sa", "a", "kg", 0), |
| 69 | + ("sb", "b", "m", 1), |
| 70 | + ("sa", "c", "kg", 2), |
| 71 | + ], |
| 72 | + names=["scenario", "variable", "unit", "run_id"], |
| 73 | + ), |
| 74 | + id="alter-existing-level", |
| 75 | + ), |
36 | 76 | ), |
37 | 77 | ) |
38 | | -def test_update_levels_from_other(start, levels_to_set, exp): |
| 78 | +def test_set_levels(start, levels_to_set, exp): |
39 | 79 | res = set_levels(start, levels_to_set=levels_to_set) |
40 | 80 |
|
41 | 81 | pd.testing.assert_index_equal(res, exp) |
| 82 | + |
| 83 | + |
| 84 | +def test_set_levels_raises_type_error(): |
| 85 | + """ |
| 86 | + Test that set_levels raises an error when the levels to set are not in the index. |
| 87 | + """ |
| 88 | + start = pd.Index(range(10), name="index") |
| 89 | + |
| 90 | + levels_to_set = {"new_variable": "test"} |
| 91 | + |
| 92 | + with pytest.raises(TypeError): |
| 93 | + set_levels(start, levels_to_set=levels_to_set) |
| 94 | + |
| 95 | + |
| 96 | +def test_set_levels_raises_value_error(): |
| 97 | + """ |
| 98 | + Test that set_levels raises an error when the levels to set are same length |
| 99 | + as index. |
| 100 | + """ |
| 101 | + start = pd.MultiIndex.from_tuples( |
| 102 | + [ |
| 103 | + ("sa", "va", "kg", 0), |
| 104 | + ("sb", "vb", "m", 1), |
| 105 | + ("sa", "va", "kg", 2), |
| 106 | + ], |
| 107 | + names=["scenario", "variable", "unit", "run_id"], |
| 108 | + ) |
| 109 | + |
| 110 | + levels_to_set = {"new_variable": ["a", "b", "c", "d"]} |
| 111 | + |
| 112 | + with pytest.raises( |
| 113 | + ValueError, match="Length of values does not match, got 4 but expected 3" |
| 114 | + ): |
| 115 | + set_levels(start, levels_to_set=levels_to_set) |
0 commit comments