diff --git a/devito/operator/operator.py b/devito/operator/operator.py index 6e77c39281..9ded8eddb7 100644 --- a/devito/operator/operator.py +++ b/devito/operator/operator.py @@ -182,6 +182,12 @@ def __new__(cls, expressions, **kwargs): cls._check_kwargs(**kwargs) expressions = cls._sanitize_exprs(expressions, **kwargs) + # Hook for retrieval of preexisting operators + # TODO: should this emit timing info if an operator is retrieved + maybe_op = cls._retrieve_op(expressions, **kwargs) + if maybe_op: + return maybe_op + # Lower to a JIT-compilable object with timed_region('op-compile') as r: op = cls._build(expressions, **kwargs) @@ -211,6 +217,10 @@ def _sanitize_exprs(cls, expressions, **kwargs): return expressions + @classmethod + def _retrieve_op(cls, expressions, **kwargs): + return + @classmethod def _build(cls, expressions, **kwargs): # Python- (i.e., compile-) and C-level (i.e., run-time) performance diff --git a/devito/types/equation.py b/devito/types/equation.py index 5b709ee89e..dee06de61b 100644 --- a/devito/types/equation.py +++ b/devito/types/equation.py @@ -183,6 +183,9 @@ def xreplace(self, rules): return self.func(self.lhs.xreplace(rules), self.rhs.xreplace(rules)) def __str__(self): + if self._subdomain is not None: + return (f"{self.__class__.__name__}({self.lhs}, {self.rhs}," + f" subdomain={self._subdomain})") return f"{self.__class__.__name__}({self.lhs}, {self.rhs})" __repr__ = __str__