Skip to content

Commit d4ec17c

Browse files
authored
Actually optimize out multiple "nanlen" (#283)
* Actually optimize out multiple "nanlen" * Fix benchmarks
1 parent c15572e commit d4ec17c

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

asv_bench/benchmarks/reduce.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,12 @@ def setup(self, *args, **kwargs):
8080
if "numbagg" in args:
8181
setup_jit()
8282

83-
@parameterize({"func": ["nansum", "nanmean", "nanmax", "count"], "engine": engines})
83+
@parameterize(
84+
{
85+
"func": ["nansum", "nanmean", "nanmax", "count"],
86+
"engine": [e for e in engines if e is not None],
87+
}
88+
)
8489
def time_reduce_bare(self, func, engine):
8590
# TODO: migrate to the other test cases, but we'll have to setup labels
8691
# appropriately ;(

flox/core.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -826,10 +826,9 @@ def chunk_reduce(
826826
for reduction, fv, kw, dt in zip(funcs, fill_values, kwargss, dtypes):
827827
if empty:
828828
result = np.full(shape=final_array_shape, fill_value=fv)
829+
elif is_nanlen(reduction) and is_nanlen(previous_reduction):
830+
result = results["intermediates"][-1]
829831
else:
830-
if is_nanlen(reduction) and is_nanlen(previous_reduction):
831-
result = results["intermediates"][-1]
832-
833832
# fill_value here is necessary when reducing with "offset" groups
834833
kw_func = dict(size=size, dtype=dt, fill_value=fv)
835834
kw_func.update(kw)
@@ -847,6 +846,7 @@ def chunk_reduce(
847846
result = result[..., :-1]
848847
result = result.reshape(final_array_shape[:-1] + found_groups_shape)
849848
results["intermediates"].append(result)
849+
previous_reduction = reduction
850850

851851
results["groups"] = np.broadcast_to(results["groups"], final_groups_shape)
852852
return results

0 commit comments

Comments
 (0)