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