From 5349ce8bb80ca136e8a24b426c3ac5424bc96855 Mon Sep 17 00:00:00 2001 From: Gautzilla Date: Wed, 10 Jun 2026 10:06:36 +0200 Subject: [PATCH 1/2] allow instantaneous events --- src/osekit/core/event.py | 4 ++-- tests/test_event.py | 26 +++++++++++++++++++------- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/osekit/core/event.py b/src/osekit/core/event.py index 575599df..2897e778 100644 --- a/src/osekit/core/event.py +++ b/src/osekit/core/event.py @@ -37,7 +37,7 @@ def begin(self) -> Timestamp: @begin.setter def begin(self, value: Timestamp) -> None: - if hasattr(self, "_end") and value >= self._end: + if hasattr(self, "_end") and value > self._end: msg = f"Invalid Event: `end` ({self._end}) must be greater than `begin` ({value})." # noqa: E501 raise ValueError(msg) self._begin = value @@ -49,7 +49,7 @@ def end(self) -> Timestamp: @end.setter def end(self, value: Timestamp) -> None: - if hasattr(self, "_begin") and value <= self._begin: + if hasattr(self, "_begin") and value < self._begin: msg = f"Invalid Event: `end` ({value}) must be greater than `begin` ({self._begin})." # noqa: E501 raise ValueError(msg) self._end = value diff --git a/tests/test_event.py b/tests/test_event.py index e9d21bdb..e6520278 100644 --- a/tests/test_event.py +++ b/tests/test_event.py @@ -85,7 +85,7 @@ ), pytest.param( Event( - begin=Timestamp("2024-01-01 0:00:00"), + begin=Timestamp("2024-01-01 00:00:00"), end=Timestamp("2024-01-01 12:00:00"), ), Event( @@ -95,6 +95,18 @@ False, id="border_sharing_isnt_overlapping", ), + pytest.param( + Event( + begin=Timestamp("2024-01-01 00:00:00"), + end=Timestamp("2024-01-01 00:00:00"), + ), + Event( + begin=Timestamp("2024-01-01 00:00:00"), + end=Timestamp("2024-01-01 00:00:00"), + ), + False, + id="instantaneous_events_dont_overlap", + ), ], ) def test_overlapping_events( @@ -390,7 +402,12 @@ def test_get_overlapping_events( ), Timestamp("2024-01-01 01:00:00"), None, - pytest.raises(ValueError, match="`end`.*must be greater than `begin`.*"), + nullcontext( + Event( + begin=Timestamp("2024-01-01 01:00:00"), + end=Timestamp("2024-01-01 01:00:00"), + ), + ), id="begin_equals_end", ), ], @@ -424,11 +441,6 @@ def update_event( Timestamp("2024-01-01 00:00:00"), id="begin_after_end", ), - pytest.param( - Timestamp("2024-01-01 00:00:00"), - Timestamp("2024-01-01 00:00:00"), - id="begin_equals_end", - ), ], ) def test_event_errors(begin: Timestamp, end: Timestamp) -> None: From 887ad01222ba8a2c9ae16f3f77409d0dd1ac789d Mon Sep 17 00:00:00 2001 From: Gautzilla Date: Wed, 10 Jun 2026 10:16:18 +0200 Subject: [PATCH 2/2] add Event.duration tests --- tests/test_event.py | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/tests/test_event.py b/tests/test_event.py index e6520278..bf8d9fc9 100644 --- a/tests/test_event.py +++ b/tests/test_event.py @@ -3,7 +3,7 @@ from contextlib import nullcontext import pytest -from pandas import Timestamp +from pandas import Timedelta, Timestamp from osekit.core.event import Event @@ -458,3 +458,28 @@ def test_repr() -> None: ) == "1990-09-12 12:00:00 - 1990-09-12 12:00:10" ) + + +@pytest.mark.parametrize( + ("event", "expected_duration"), + [ + pytest.param( + Event( + begin=Timestamp("1990-09-12 12:00:00"), + end=Timestamp("1990-09-12 12:00:10"), + ), + Timedelta(seconds=10), + id="non-instantaneous_event", + ), + pytest.param( + Event( + begin=Timestamp("1990-09-12 12:00:10"), + end=Timestamp("1990-09-12 12:00:10"), + ), + Timedelta(seconds=0), + id="instantaneous_event", + ), + ], +) +def test_duration(event: Event, expected_duration: Timedelta) -> None: + assert event.duration == expected_duration