From 220280e2eb1423a9fc3637f92656cb4d74573a08 Mon Sep 17 00:00:00 2001 From: mloubout Date: Tue, 24 Sep 2024 12:26:44 -0400 Subject: [PATCH] api: avoid premature weight index substitution --- devito/finite_differences/differentiable.py | 11 ----------- devito/finite_differences/finite_difference.py | 4 ++-- 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/devito/finite_differences/differentiable.py b/devito/finite_differences/differentiable.py index f78abbd7d5..61bf8e0b8c 100644 --- a/devito/finite_differences/differentiable.py +++ b/devito/finite_differences/differentiable.py @@ -144,13 +144,6 @@ def coefficients(self): key = lambda x: coeff_priority.get(x, -1) return sorted(coefficients, key=key, reverse=True)[0] - @cached_property - def _coeff_symbol(self, *args, **kwargs): - if self._uses_symbolic_coefficients: - return W - else: - raise ValueError("Couldn't find any symbolic coefficients") - def _eval_at(self, func): if not func.is_Staggered: # Cartesian grid, do no waste time @@ -435,10 +428,6 @@ def highest_priority(DiffOp): return sorted(DiffOp._args_diff, key=prio, reverse=True)[0] -# Abstract symbol representing a symbolic coefficient -W = sympy.Function('W') - - class DifferentiableOp(Differentiable): __sympy_class__ = None diff --git a/devito/finite_differences/finite_difference.py b/devito/finite_differences/finite_difference.py index 6ada6c40db..d2b72ec36c 100644 --- a/devito/finite_differences/finite_difference.py +++ b/devito/finite_differences/finite_difference.py @@ -158,8 +158,6 @@ def make_derivative(expr, dim, fd_order, deriv_order, side, matvec, x0, coeffici # `coefficients` method (`taylor` or `symbolic`) if weights is None: weights = fd_weights_registry[coefficients](expr, deriv_order, indices, x0) - elif wdim is not None: - weights = [weights._subs(wdim, i) for i in range(len(indices))] # Enforce fixed precision FD coefficients to avoid variations in results weights = [sympify(w).evalf(_PRECISION) for w in weights] @@ -193,6 +191,8 @@ def make_derivative(expr, dim, fd_order, deriv_order, side, matvec, x0, coeffici deriv = DiffDerivative(expr*weights, {dim: indices.free_dim}) else: terms = [] + if wdim is not None: + weights = [weights._subs(wdim, i) for i in range(len(indices))] for i, c in zip(indices, weights): # The FD term term = expr._subs(dim, i) * c