From bb4833cfa4c8d5d3ddb7c38281cb2eb11a0a1b09 Mon Sep 17 00:00:00 2001 From: Edward Caunt Date: Wed, 14 Oct 2026 17:16:11 +0100 Subject: [PATCH] compiler: Memoise unbounded --- devito/ir/support/utils.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/devito/ir/support/utils.py b/devito/ir/support/utils.py index 1882d6267f..d1b058da7e 100644 --- a/devito/ir/support/utils.py +++ b/devito/ir/support/utils.py @@ -4,7 +4,7 @@ from devito.finite_differences.differentiable import IndexDerivative, IndexSum from devito.symbolics import retrieve_indexed, search -from devito.tools import DefaultOrderedDict, as_tuple, filter_sorted, split +from devito.tools import DefaultOrderedDict, as_tuple, filter_sorted, memoized_func, split from devito.types import ( Dimension, DimensionTuple, Indirection, ModuloDimension, StencilDimension, TensorMove ) @@ -264,6 +264,7 @@ def bounded(expr): return dims - expr.free_symbols +@memoized_func(scope='build') def unbounded(expr): """ Retrieve all unbounded Dimensions in `expr`. @@ -273,7 +274,8 @@ def unbounded(expr): bound = set().union(*[i.dimensions for i in search(expr, IndexDerivative)]) sdims = search(expr, StencilDimension, mode='unique', deep=True) - return sdims - bound + # Immutable, as the cached result is shared across callers + return frozenset(sdims - bound) Extrema = namedtuple('Extrema', 'm M')