Skip to content

Commit 65ccf4e

Browse files
committed
Use window method in moving window's getitem magic
The `__getitem__` method in moving window was not working properly. Since its functionality is already provided by the window method it one can be called from the getitem magic. Signed-off-by: cwasicki <[email protected]>
1 parent dc6f06e commit 65ccf4e

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
@@ -368,30 +368,17 @@ def __getitem__(self, key: SupportsIndex | datetime | slice) -> float | ArrayLik
368368
A float if the key is a number or a timestamp.
369369
an numpy array if the key is a slice.
370370
"""
371+
if isinstance(key, slice):
372+
assert key.step is None or key.step == 1
373+
return self.window(key.start, key.stop)
374+
371375
if self._buffer.count_valid() == 0:
372376
raise IndexError("The buffer is empty.")
373-
if isinstance(key, slice):
374-
if isinstance(key.start, int) or isinstance(key.stop, int):
375-
if key.start is None or key.stop is None:
376-
key = slice(slice(key.start, key.stop).indices(self.count_valid()))
377-
elif isinstance(key.start, datetime) or isinstance(key.stop, datetime):
378-
if key.start is None:
379-
key = slice(self._buffer.time_bound_oldest, key.stop)
380-
if key.stop is None:
381-
key = slice(key.start, self._buffer.time_bound_newest)
382-
383-
_logger.debug("Returning slice for [%s:%s].", key.start, key.stop)
384-
385-
# we are doing runtime typechecks since there is no abstract slice type yet
386-
# see also (https://peps.python.org/pep-0696)
387-
if isinstance(key.start, datetime) and isinstance(key.stop, datetime):
388-
return self._buffer.window(key.start, key.stop)
389-
if isinstance(key.start, int) and isinstance(key.stop, int):
390-
return self._buffer[key]
391-
elif isinstance(key, datetime):
377+
378+
if isinstance(key, datetime):
392379
_logger.debug("Returning value at time %s ", key)
393380
return self._buffer[self._buffer.to_internal_index(key)]
394-
elif isinstance(key, SupportsIndex):
381+
if isinstance(key, SupportsIndex):
395382
_logger.debug("Returning value at index %s ", key)
396383
return self._buffer[key]
397384

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)