From ed469bc64e164aa86d6bea03876639bb489127da Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Sun, 3 May 2015 23:55:49 -0500
Subject: [PATCH] Make Reduction constructor friendlier

---
 loopy/symbolic.py | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/loopy/symbolic.py b/loopy/symbolic.py
index 8897f3593..bad7f840f 100644
--- a/loopy/symbolic.py
+++ b/loopy/symbolic.py
@@ -305,7 +305,27 @@ class Reduction(AlgebraicLeaf):
     init_arg_names = ("operation", "inames", "expr")
 
     def __init__(self, operation, inames, expr):
+        if isinstance(inames, str):
+            inames = tuple(iname.strip() for iname in inames.split(","))
+
+        elif isinstance(inames, Variable):
+            inames = (inames,)
+
         assert isinstance(inames, tuple)
+
+        def strip_var(iname):
+            if isinstance(iname, Variable):
+                iname = iname.name
+
+            assert isinstance(iname, str)
+            return iname
+
+        inames = tuple(strip_var(iname) for iname in inames)
+
+        if isinstance(operation, str):
+            from loopy.library.reduction import parse_reduction_op
+            operation = parse_reduction_op(operation)
+
         from loopy.library.reduction import ReductionOperation
         assert isinstance(operation, ReductionOperation)
 
-- 
GitLab