Skip to content

Commit 0368391

Browse files
Fix max recursion depth exceeded when concatenate (#599)
* Fix infinite recursion when concatenate
1 parent 3dd9209 commit 0368391

File tree

3 files changed

+29
-1
lines changed

3 files changed

+29
-1
lines changed

docs/release_notes/version_0.12_updates.rst

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,16 @@
11
Version 0.12 Updates
22
/////////////////////////
33

4+
5+
Version 0.12.2
6+
===============
7+
8+
Fixes
9+
++++++++
10+
11+
- Fixed issue when failed to build a fieldlist with concatenation because maximum recursion depth exceeded (:pr:`599`)
12+
13+
414
Version 0.12.1
515
===============
616

src/earthkit/data/core/index.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -633,11 +633,18 @@ def __repr__(self):
633633

634634
class MultiIndex(Index):
635635
def __init__(self, indexes, *args, **kwargs):
636-
self._indexes = list(indexes)
636+
self._indexes = list(self._flatten(indexes))
637637
super().__init__(*args, **kwargs)
638638
# self.indexes = list(i for i in indexes if len(i))
639639
# TODO: propagate index._init_args, index._init_order_by, index._init_kwargs, for each i in indexes?
640640

641+
def _flatten(self, indexes):
642+
for i in indexes:
643+
if isinstance(i, MultiIndex):
644+
yield from self._flatten(i._indexes)
645+
else:
646+
yield i
647+
641648
def sel(self, *args, **kwargs):
642649
if not args and not kwargs:
643650
return self

tests/grib/test_grib_concat.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,17 @@ def test_grib_from_empty_3():
150150
_check_save_to_disk(ds3, 8, md)
151151

152152

153+
# See github issue #588
154+
def test_grib_concat_large():
155+
ds_e = from_source("empty")
156+
ds1 = from_source("file", earthkit_examples_file("test.grib"))
157+
158+
for _ in range(2000):
159+
ds_e += ds1.sel(param="msl")
160+
161+
assert len(ds_e) == 2000
162+
163+
153164
if __name__ == "__main__":
154165
from earthkit.data.testing import main
155166

0 commit comments

Comments
 (0)