diff --git a/devito/finite_differences/differentiable.py b/devito/finite_differences/differentiable.py index 94c3139335..c6adfa50d4 100644 --- a/devito/finite_differences/differentiable.py +++ b/devito/finite_differences/differentiable.py @@ -732,6 +732,24 @@ def _xreplace(self, rule): pass return super()._xreplace(rule) + @cached_property + def _npweights(self): + # NOTE: `self.weights` cannot just be an array or SymPy will fail + # internally at `__eq__` since numpy arrays requite .all, not ==, + # for equality comparison + return np.array(self.weights) + + def value(self, idx): + try: + v = self.weights[idx] + except TypeError: + # E.g., `idx` is a tuple + v = self._npweights[idx] + if v.is_Number: + return sympy.sympify(v) + else: + return self[idx] + class IndexDerivative(IndexSum):