diff --git a/gsrp_smart_util.py b/gsrp_smart_util.py index 25e6829270ebc6f9827ec1de8b0d503c3b8b638e..0e42e8d5a76e63f60d961d6d71f37bfee484d0b9 100644 --- a/gsrp_smart_util.py +++ b/gsrp_smart_util.py @@ -207,7 +207,12 @@ def smart_gsrp(cc, n_ind, n_tot, t_max, tree, program, clean_list, verbose=False curr_tij = frozenset(tree[k[0]][k[1]]) memory[k] = mask_val(v, out_val - sum(m for tij, m in max_val.items() if curr_tij.isdisjoint(tij))) if i and np.prod([v[0].size for v in memory.values()], dtype=np.float64) <= 1024: # float to prevent overflow - return *add_all(memory, tree, cc, t_max, n_ind, n_tot), 1 + try: + return *add_all(memory, tree, cc, t_max, n_ind, n_tot), 1 + except ValueError as e: + if any(v[0].size == 0 for v in memory.values()): # due floating point error + return out_val, out_tij, 1 # current tij should only contain maxima for this error to occur + raise e from None for j, op in enumerate(step): if op == 'mem': if i == 0: