From 31d7a450d313fdfc2c71cf860ee7edf0190c97c1 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner <inform@tiker.net> Date: Fri, 17 Oct 2014 10:29:48 -0500 Subject: [PATCH] Test, fix inconsistency in call handling in dep mapper (reported by Matt Wala) --- pymbolic/mapper/dependency.py | 11 +++++++++++ test/test_pymbolic.py | 10 ++++++++++ 2 files changed, 21 insertions(+) diff --git a/pymbolic/mapper/dependency.py b/pymbolic/mapper/dependency.py index 40eb651..08a40c6 100644 --- a/pymbolic/mapper/dependency.py +++ b/pymbolic/mapper/dependency.py @@ -83,6 +83,17 @@ class DependencyMapper(CSECachingMapperMixin, CombineMapper): else: return CombineMapper.map_call(self, expr) + def map_call_with_kwargs(self, expr): + if self.include_calls == "descend_args": + return self.combine( + [self.rec(child) for child in expr.parameters] + + [self.rec(val) for name, val in expr.kw_parameters.items()] + ) + elif self.include_calls: + return set([expr]) + else: + return CombineMapper.map_call(self, expr) + def map_lookup(self, expr): if self.include_lookups: return set([expr]) diff --git a/test/test_pymbolic.py b/test/test_pymbolic.py index 48c4740..a895107 100644 --- a/test/test_pymbolic.py +++ b/test/test_pymbolic.py @@ -255,6 +255,16 @@ def test_mappers(): DependencyMapper()(expr) +def test_func_dep_consistency(): + from pymbolic import var + from pymbolic.mapper.dependency import DependencyMapper + f = var('f') + x = var('x') + dep_map = DependencyMapper(include_calls="descend_args") + assert dep_map(f(x)) == set([x]) + assert dep_map(f(x=x)) == set([x]) + + # {{{ geometric algebra @pytest.mark.parametrize("dims", [2, 3, 4, 5]) -- GitLab