From e427a68e461a45480d7a70eeaf1eef5258f740fb Mon Sep 17 00:00:00 2001 From: Sander de Snoo <59472150+sldesnoo-Delft@users.noreply.github.com> Date: Mon, 21 Nov 2022 11:06:38 +0100 Subject: [PATCH] Avoid NESTED LOOPS of exception in loop --- .../utility/data_handling_functions.py | 52 ++++++++++--------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/pulse_lib/segments/utility/data_handling_functions.py b/pulse_lib/segments/utility/data_handling_functions.py index 3711581a..62c5247c 100644 --- a/pulse_lib/segments/utility/data_handling_functions.py +++ b/pulse_lib/segments/utility/data_handling_functions.py @@ -213,32 +213,34 @@ def loop_controller(func): global _in_loop if _in_loop: raise Exception('NESTED LOOPS') - _in_loop = True - - loop_info_args = [] - loop_info_kwargs = [] - - for i,arg in enumerate(args): - if isinstance(arg, loop_obj): - loop_info = _update_segment_dims(obj, arg, i) - loop_info_args.append(loop_info) - - for key,kwarg in kwargs.items(): - if isinstance(kwarg, loop_obj): - loop_info = _update_segment_dims(obj, kwarg, key) - loop_info_kwargs.append(loop_info) - - data = obj.data - - if len(loop_info_args) == 0 and len(loop_info_kwargs) == 0: - if data.shape != (1,): - loop_over_data(func, obj, data, args, kwargs) + try: + _in_loop = True + + loop_info_args = [] + loop_info_kwargs = [] + + for i,arg in enumerate(args): + if isinstance(arg, loop_obj): + loop_info = _update_segment_dims(obj, arg, i) + loop_info_args.append(loop_info) + + for key,kwarg in kwargs.items(): + if isinstance(kwarg, loop_obj): + loop_info = _update_segment_dims(obj, kwarg, key) + loop_info_kwargs.append(loop_info) + + data = obj.data + + if len(loop_info_args) == 0 and len(loop_info_kwargs) == 0: + if data.shape != (1,): + loop_over_data(func, obj, data, args, kwargs) + else: + obj.data_tmp = data[0] + data[0] = func(obj, *args, **kwargs) else: - obj.data_tmp = data[0] - data[0] = func(obj, *args, **kwargs) - else: - loop_over_data_lp(func, obj, data, args, loop_info_args, kwargs, loop_info_kwargs) - _in_loop = False + loop_over_data_lp(func, obj, data, args, loop_info_args, kwargs, loop_info_kwargs) + finally: + _in_loop = False return wrapper -- GitLab