(self)
| 2215 | data.loc["a"] # type: ignore[index] |
| 2216 | |
| 2217 | def test_selection_multiindex(self) -> None: |
| 2218 | midx = pd.MultiIndex.from_product( |
| 2219 | [["a", "b"], [1, 2], [-1, -2]], names=("one", "two", "three") |
| 2220 | ) |
| 2221 | midx_coords = Coordinates.from_pandas_multiindex(midx, "x") |
| 2222 | mdata = Dataset(data_vars={"var": ("x", range(8))}, coords=midx_coords) |
| 2223 | |
| 2224 | def test_sel( |
| 2225 | lab_indexer, pos_indexer, replaced_idx=False, renamed_dim=None |
| 2226 | ) -> None: |
| 2227 | ds = mdata.sel(x=lab_indexer) |
| 2228 | expected_ds = mdata.isel(x=pos_indexer) |
| 2229 | if not replaced_idx: |
| 2230 | assert_identical(ds, expected_ds) |
| 2231 | else: |
| 2232 | if renamed_dim: |
| 2233 | assert ds["var"].dims[0] == renamed_dim |
| 2234 | ds = ds.rename({renamed_dim: "x"}) |
| 2235 | assert_identical(ds["var"].variable, expected_ds["var"].variable) |
| 2236 | assert not ds["x"].equals(expected_ds["x"]) |
| 2237 | |
| 2238 | test_sel(("a", 1, -1), 0) |
| 2239 | test_sel(("b", 2, -2), -1) |
| 2240 | test_sel(("a", 1), [0, 1], replaced_idx=True, renamed_dim="three") |
| 2241 | test_sel(("a",), range(4), replaced_idx=True) |
| 2242 | test_sel("a", range(4), replaced_idx=True) |
| 2243 | test_sel([("a", 1, -1), ("b", 2, -2)], [0, 7]) |
| 2244 | test_sel(slice("a", "b"), range(8)) |
| 2245 | test_sel(slice(("a", 1), ("b", 1)), range(6)) |
| 2246 | test_sel({"one": "a", "two": 1, "three": -1}, 0) |
| 2247 | test_sel({"one": "a", "two": 1}, [0, 1], replaced_idx=True, renamed_dim="three") |
| 2248 | test_sel({"one": "a"}, range(4), replaced_idx=True) |
| 2249 | |
| 2250 | assert_identical(mdata.loc[{"x": {"one": "a"}}], mdata.sel(x={"one": "a"})) |
| 2251 | assert_identical(mdata.loc[{"x": "a"}], mdata.sel(x="a")) |
| 2252 | assert_identical(mdata.loc[{"x": ("a", 1)}], mdata.sel(x=("a", 1))) |
| 2253 | assert_identical(mdata.loc[{"x": ("a", 1, -1)}], mdata.sel(x=("a", 1, -1))) |
| 2254 | |
| 2255 | assert_identical(mdata.sel(x={"one": "a", "two": 1}), mdata.sel(one="a", two=1)) |
| 2256 | |
| 2257 | # GH10534: slicing on multi-index levels should raise |
| 2258 | with pytest.raises(ValueError, match="slice-based selection on multi-index"): |
| 2259 | mdata.sel(one=slice("a", "b")) |
| 2260 | with pytest.raises(ValueError, match="slice-based selection on multi-index"): |
| 2261 | mdata.sel(two=slice(1, 2)) |
| 2262 | |
| 2263 | def test_broadcast_like(self) -> None: |
| 2264 | original1 = DataArray( |
nothing calls this directly
no test coverage detected