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