From f74a2af16a8426ba9182c253a1b31a15b119bbfe Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Sun, 20 Sep 2015 13:12:26 -0500
Subject: [PATCH] Make functions locate subst rules by pattern matching

---
 doc/reference.rst |  4 ++++
 loopy/__init__.py | 27 +++++++++++++++++++++++++++
 2 files changed, 31 insertions(+)

diff --git a/doc/reference.rst b/doc/reference.rst
index 52cd92bb8..3d78bee36 100644
--- a/doc/reference.rst
+++ b/doc/reference.rst
@@ -412,6 +412,10 @@ Dealing with Substitution Rules
 
 .. autofunction:: expand_subst
 
+.. autofunction:: find_rules_matching
+
+.. autofunction:: find_one_rule_matching
+
 Caching, Precomputation and Prefetching
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
diff --git a/loopy/__init__.py b/loopy/__init__.py
index 10fac9cfc..d417648b7 100644
--- a/loopy/__init__.py
+++ b/loopy/__init__.py
@@ -2108,4 +2108,31 @@ def remove_unused_arguments(knl):
 
 # }}}
 
+
+# {{{ find substitution rules by glob patterns
+
+def find_rules_matching(knl, pattern):
+    """
+    :pattern: A shell-style glob pattern.
+    """
+
+    from loopy.context_matching import re_from_glob
+    pattern = re_from_glob(pattern)
+
+    return [r for r in knl.substitutions if pattern.match(r)]
+
+
+def find_one_rule_matching(knl, pattern):
+    rules = find_rules_matching(knl, pattern)
+
+    if len(rules) > 1:
+        raise ValueError("more than one substitution rule matched '%s'"
+                % pattern)
+    if not rules:
+        raise ValueError("no substitution rule matched '%s'" % pattern)
+
+    return rules[0]
+
+# }}}
+
 # vim: foldmethod=marker
-- 
GitLab