|
16 | 16 | from frequenz.sdk.timeseries import Sample |
17 | 17 | from frequenz.sdk.timeseries._quantities import Quantity |
18 | 18 | from frequenz.sdk.timeseries._ringbuffer import Gap, OrderedRingBuffer |
| 19 | +from frequenz.sdk.timeseries._ringbuffer.buffer import FloatArray |
19 | 20 |
|
20 | 21 | FIVE_MINUTES = timedelta(minutes=5) |
21 | 22 | ONE_MINUTE = timedelta(minutes=1) |
@@ -412,3 +413,42 @@ def test_delete_oudated_gap() -> None: |
412 | 413 | buffer.update(Sample(datetime.fromtimestamp(202, tz=timezone.utc), Quantity(2))) |
413 | 414 |
|
414 | 415 | assert len(buffer.gaps) == 0 |
| 416 | + |
| 417 | + |
| 418 | +def dt(i: int) -> datetime: # pylint: disable=invalid-name |
| 419 | + """Create datetime objects from indices. |
| 420 | +
|
| 421 | + Args: |
| 422 | + i: Index to create datetime from. |
| 423 | +
|
| 424 | + Returns: |
| 425 | + Datetime object. |
| 426 | + """ |
| 427 | + return datetime.fromtimestamp(i, tz=timezone.utc) |
| 428 | + |
| 429 | + |
| 430 | +def get_orb(data: FloatArray) -> OrderedRingBuffer[FloatArray]: |
| 431 | + """Get OrderedRingBuffer with data. |
| 432 | +
|
| 433 | + Args: |
| 434 | + data: Data to fill the buffer with. |
| 435 | +
|
| 436 | + Returns: |
| 437 | + OrderedRingBuffer with data. |
| 438 | + """ |
| 439 | + buffer = OrderedRingBuffer(data, ONE_SECOND) |
| 440 | + for i, d in enumerate(data): # pylint: disable=invalid-name |
| 441 | + buffer.update(Sample(dt(i), Quantity(d) if d is not None else None)) |
| 442 | + return buffer |
| 443 | + |
| 444 | + |
| 445 | +def test_window() -> None: |
| 446 | + """Test the window function.""" |
| 447 | + buffer = get_orb(np.array([0, None, 2, 3, 4])) |
| 448 | + win = buffer.window(dt(0), dt(3), force_copy=False) |
| 449 | + assert [0, np.nan, 2] == list(win) |
| 450 | + buffer._buffer[1] = 1 # pylint: disable=protected-access |
| 451 | + # Test whether the window is a view or a copy |
| 452 | + assert [0, 1, 2] == list(win) # NB: second element should be NaN according to docs |
| 453 | + win = buffer.window(dt(0), dt(3), force_copy=False) |
| 454 | + assert [0, 1, 2] == list(win) |
0 commit comments