From 65e700f4b9ffc1dfa69d56cd59417c8c36ccc3e0 Mon Sep 17 00:00:00 2001 From: mloubout Date: Wed, 6 Aug 2025 09:24:41 -0400 Subject: [PATCH 1/2] compiler: patch efuncs graph --- devito/finite_differences/derivative.py | 6 +++++- devito/passes/iet/engine.py | 4 +++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/devito/finite_differences/derivative.py b/devito/finite_differences/derivative.py index 782132c4d8..4203333818 100644 --- a/devito/finite_differences/derivative.py +++ b/devito/finite_differences/derivative.py @@ -2,6 +2,7 @@ from collections.abc import Iterable from functools import cached_property from itertools import chain +import numbers import sympy @@ -158,11 +159,14 @@ def _validate_expr(expr): """ if type(expr) is sympy.Derivative: raise ValueError("Cannot nest sympy.Derivative with devito.Derivative") + elif isinstance(expr, numbers.Number): + return sympy.S.Zero if not isinstance(expr, Differentiable): try: expr = diffify(expr) except Exception as e: - raise ValueError("`expr` must be a `Differentiable` type object") from e + d = type(expr) + raise ValueError(f"`expr` must be a `Differentiable` type object not {d}") from e return expr @staticmethod diff --git a/devito/passes/iet/engine.py b/devito/passes/iet/engine.py index e68a2101cf..519d9e4c25 100644 --- a/devito/passes/iet/engine.py +++ b/devito/passes/iet/engine.py @@ -223,6 +223,7 @@ def create_call_graph(root, efuncs): """ dag = DAG(nodes=[root]) queue = [root] + defuncs = {root} while queue: caller = queue.pop(0) @@ -230,6 +231,7 @@ def create_call_graph(root, efuncs): for callee in filter_ordered([i.name for i in callees]): if callee in efuncs: # Exclude foreign Calls, e.g., MPI calls + defuncs.add(callee) try: dag.add_node(callee) queue.append(callee) @@ -239,7 +241,7 @@ def create_call_graph(root, efuncs): dag.add_edge(callee, caller) # Sanity check - assert dag.size == len(efuncs) + assert dag.size == len(defuncs) return dag From 8ae4ad675f4a1c6feeeaae7df42f28a1fb60fcd5 Mon Sep 17 00:00:00 2001 From: mloubout Date: Wed, 6 Aug 2025 09:26:13 -0400 Subject: [PATCH 2/2] CI: improve pytest parameter readability --- conftest.py | 15 +++++++++++++++ devito/finite_differences/derivative.py | 5 +---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/conftest.py b/conftest.py index 5a1bc481b9..03193c4212 100644 --- a/conftest.py +++ b/conftest.py @@ -287,6 +287,21 @@ def pytest_runtest_makereport(item, call): result.outcome = 'passed' +def pytest_make_parametrize_id(config, val, argname): + """ + Prevents pytest to make obsucre parameter names (param0, param1, ...) + and default to str(val) instead for better log readability. + """ + # First see if it has a name + if hasattr(val, '__name__'): + return val.__name__ + # Then try str(val) + try: + return str(val) + except Exception: + return None # Fall back to default behavior + + # A list of optimization options/pipelines to be used in testing # regarding spatial and/or temporal blocking. opts_tiling = ['advanced', diff --git a/devito/finite_differences/derivative.py b/devito/finite_differences/derivative.py index 4203333818..e2ad8229c7 100644 --- a/devito/finite_differences/derivative.py +++ b/devito/finite_differences/derivative.py @@ -2,7 +2,6 @@ from collections.abc import Iterable from functools import cached_property from itertools import chain -import numbers import sympy @@ -159,14 +158,12 @@ def _validate_expr(expr): """ if type(expr) is sympy.Derivative: raise ValueError("Cannot nest sympy.Derivative with devito.Derivative") - elif isinstance(expr, numbers.Number): - return sympy.S.Zero if not isinstance(expr, Differentiable): try: expr = diffify(expr) except Exception as e: d = type(expr) - raise ValueError(f"`expr` must be a `Differentiable` type object not {d}") from e + raise ValueError(f"`expr` must be a `Differentiable` not {d}") from e return expr @staticmethod