From 07ca0a85317a7fd92f56df3e7a7b0ed93cadf458 Mon Sep 17 00:00:00 2001 From: JoFrhwld Date: Sat, 15 Feb 2025 11:14:32 -0500 Subject: [PATCH] Runtime warning for tier indices out of range --- src/aligned_textgrid/mixins/mixins.py | 9 ++++----- src/aligned_textgrid/sequences/tiers.py | 11 +++++++++++ tests/test_tiers/test_SequenceTier.py | 6 ++++-- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/aligned_textgrid/mixins/mixins.py b/src/aligned_textgrid/mixins/mixins.py index 8e030396..c3363119 100644 --- a/src/aligned_textgrid/mixins/mixins.py +++ b/src/aligned_textgrid/mixins/mixins.py @@ -166,8 +166,7 @@ def get_tierwise( in the initial position within its subset list, this will not be the same as `.prev` - This will raise an ordinary IndexError if the relative index exceeds the length - of the tier. + If the provided index is out of range, this will generate RuntimeWarning. Args: idx (int, optional): @@ -177,11 +176,11 @@ def get_tierwise( Returns: (SequenceInterval|SequencePoint): The entry at the relative index """ - if not self.intier is None: - return self.intier[self.tier_index + idx] - else: + if self.inter is None: return None + return self.intier[self.tier_index + idx] + def return_praatio(self)->Interval|Point: """Return the correct `praatio` class. diff --git a/src/aligned_textgrid/sequences/tiers.py b/src/aligned_textgrid/sequences/tiers.py index c21382e7..aa0b4dce 100644 --- a/src/aligned_textgrid/sequences/tiers.py +++ b/src/aligned_textgrid/sequences/tiers.py @@ -128,6 +128,17 @@ def __build_sequence_list(self)->None: def __getitem__(self, idx:int)->SequenceInterval: + if idx >= len(self.sequence_list) or idx < -len(self.sequence_list): + warnings.warn( + ( + f"Provided index ({idx}) " + f"to object {self.__class__.__name__} " + "is out of range." + ), + category = RuntimeWarning, + ) + return None + return self.sequence_list[idx] def __len__(self)->int: diff --git a/tests/test_tiers/test_SequenceTier.py b/tests/test_tiers/test_SequenceTier.py index d7b7e3a3..87a5772f 100644 --- a/tests/test_tiers/test_SequenceTier.py +++ b/tests/test_tiers/test_SequenceTier.py @@ -47,10 +47,12 @@ def test_default_xmin(self): def test_default_xmax(self): assert self.default_tier.xmax is None - def test_default_getitme(self): - with pytest.raises(IndexError): + def test_default_getitem(self): + with pytest.warns(RuntimeWarning): _ = self.default_tier[0] + + class TestTierMaking: def test_class_setting(self):