Skip to content

Commit 935eb5f

Browse files
committed
Use window method in moving window's getitem method
The getitem method in moving window is not working properly. Since its functionality is already provided by the window method that one can be called. Signed-off-by: cwasicki <[email protected]>
1 parent e5edd54 commit 935eb5f

File tree

2 files changed

+8
-20
lines changed

2 files changed

+8
-20
lines changed

src/frequenz/sdk/timeseries/_moving_window.py

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -358,30 +358,17 @@ def __getitem__(self, key: SupportsIndex | datetime | slice) -> float | ArrayLik
358358
A float if the key is a number or a timestamp.
359359
an numpy array if the key is a slice.
360360
"""
361+
if isinstance(key, slice):
362+
assert key.step is None or key.step == 1
363+
return self.window(key.start, key.stop)
364+
361365
if self._buffer.count_valid() == 0:
362366
raise IndexError("The buffer is empty.")
363-
if isinstance(key, slice):
364-
if isinstance(key.start, int) or isinstance(key.stop, int):
365-
if key.start is None or key.stop is None:
366-
key = slice(slice(key.start, key.stop).indices(self.count_valid()))
367-
elif isinstance(key.start, datetime) or isinstance(key.stop, datetime):
368-
if key.start is None:
369-
key = slice(self._buffer.time_bound_oldest, key.stop)
370-
if key.stop is None:
371-
key = slice(key.start, self._buffer.time_bound_newest)
372-
373-
_logger.debug("Returning slice for [%s:%s].", key.start, key.stop)
374-
375-
# we are doing runtime typechecks since there is no abstract slice type yet
376-
# see also (https://peps.python.org/pep-0696)
377-
if isinstance(key.start, datetime) and isinstance(key.stop, datetime):
378-
return self._buffer.window(key.start, key.stop)
379-
if isinstance(key.start, int) and isinstance(key.stop, int):
380-
return self._buffer[key]
381-
elif isinstance(key, datetime):
367+
368+
if isinstance(key, datetime):
382369
_logger.debug("Returning value at time %s ", key)
383370
return self._buffer[self._buffer.to_internal_index(key)]
384-
elif isinstance(key, SupportsIndex):
371+
if isinstance(key, SupportsIndex):
385372
_logger.debug("Returning value at index %s ", key)
386373
return self._buffer[key]
387374

tests/timeseries/test_moving_window.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ def test_eq(expected: list[float], start: int | None, end: int | None) -> None:
117117
assert np.allclose(
118118
window.window(start, end), np.array(expected), equal_nan=True
119119
)
120+
assert np.allclose(window[start:end], np.array(expected), equal_nan=True)
120121

121122
async with window:
122123
test_eq([], 0, 1)

0 commit comments

Comments
 (0)