From a6fac6d5566d2a31a04df2a964fb0fd8baf3055e Mon Sep 17 00:00:00 2001 From: Nikolai Hartmann Date: Wed, 23 Oct 2024 17:43:52 +0200 Subject: [PATCH] make Cluster.stop in coalesce module a managed property (#1320) --- src/uproot/source/coalesce.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/uproot/source/coalesce.py b/src/uproot/source/coalesce.py index ab3ada9b7..c2f5dd804 100644 --- a/src/uproot/source/coalesce.py +++ b/src/uproot/source/coalesce.py @@ -49,6 +49,7 @@ class RangeRequest: @dataclass class Cluster: ranges: list[RangeRequest] + _stop: int | None = None @property def start(self): @@ -57,7 +58,13 @@ def start(self): @property def stop(self): - return max(range.stop for range in self.ranges) + # Note: in order for this to work one has to use `append` for adding new ranges + return self._stop + + def append(self, range): + if self._stop is None or range.stop > self._stop: + self._stop = range.stop + self.ranges.append(range) def __len__(self): return self.stop - self.start @@ -88,7 +95,7 @@ def _merge_adjacent(ranges: list[RangeRequest], config: CoalesceConfig): if cluster.ranges and current_range.start - cluster.stop > config.max_range_gap: yield cluster cluster = Cluster([]) - cluster.ranges.append(current_range) + cluster.append(current_range) if cluster.ranges: yield cluster