| 216 | @pytest.mark.parametrize("center", (True, False)) |
| 217 | @pytest.mark.parametrize("window", (1, 2, 3, 4)) |
| 218 | def test_rolling_construct(self, center: bool, window: int) -> None: |
| 219 | s = pd.Series(np.arange(10)) |
| 220 | da = DataArray.from_series(s) |
| 221 | |
| 222 | s_rolling = s.rolling(window, center=center, min_periods=1).mean() |
| 223 | da_rolling = da.rolling(index=window, center=center, min_periods=1) |
| 224 | |
| 225 | da_rolling_mean = da_rolling.construct("window").mean("window") |
| 226 | np.testing.assert_allclose(np.asarray(s_rolling.values), da_rolling_mean.values) |
| 227 | np.testing.assert_allclose(s_rolling.index, da_rolling_mean["index"]) |
| 228 | |
| 229 | # with stride |
| 230 | da_rolling_mean = da_rolling.construct("window", stride=2).mean("window") |
| 231 | np.testing.assert_allclose( |
| 232 | np.asarray(s_rolling.values[::2]), da_rolling_mean.values |
| 233 | ) |
| 234 | np.testing.assert_allclose(s_rolling.index[::2], da_rolling_mean["index"]) |
| 235 | |
| 236 | # with fill_value |
| 237 | da_rolling_mean = da_rolling.construct("window", stride=2, fill_value=0.0).mean( |
| 238 | "window" |
| 239 | ) |
| 240 | assert da_rolling_mean.isnull().sum() == 0 |
| 241 | assert (da_rolling_mean == 0.0).sum() >= 0 |
| 242 | |
| 243 | @pytest.mark.parametrize("da", (1, 2), indirect=True) |
| 244 | @pytest.mark.parametrize("center", (True, False)) |