From a52e9354d84dca1bbf0d82fc03fc3fb808720303 Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Tue, 7 May 2013 11:20:49 -0400
Subject: [PATCH] Make ShapedArg subclasses more robust to 'shape is None'.

---
 loopy/kernel/data.py | 23 ++++++++++++++---------
 1 file changed, 14 insertions(+), 9 deletions(-)

diff --git a/loopy/kernel/data.py b/loopy/kernel/data.py
index 8248b4ca9..bdfadceeb 100644
--- a/loopy/kernel/data.py
+++ b/loopy/kernel/data.py
@@ -219,12 +219,22 @@ class ShapedArg(Record):
 
     @property
     def dimensions(self):
-        return len(self.shape)
+        return len(self.strides)
 
-class GlobalArg(ShapedArg):
     def __repr__(self):
-        return "<GlobalArg '%s' of type %s and shape (%s)>" % (
-                self.name, self.dtype, ",".join(str(i) for i in self.shape))
+        if self.shape is None:
+            shape = "unknown"
+        else:
+            shape = ",".join(str(i) for i in self.shape)
+
+        return "<%s '%s' of type %s and shape (%s)>" % (
+                type(self).__name__, self.name, self.dtype, shape)
+
+class GlobalArg(ShapedArg):
+    pass
+
+class ConstantArg(ShapedArg):
+    pass
 
 class ArrayArg(GlobalArg):
     def __init__(self, *args, **kwargs):
@@ -233,11 +243,6 @@ class ArrayArg(GlobalArg):
                 stacklevel=2)
         GlobalArg.__init__(self, *args, **kwargs)
 
-class ConstantArg(ShapedArg):
-    def __repr__(self):
-        return "<ConstantArg '%s' of type %s and shape (%s)>" % (
-                self.name, self.dtype, ",".join(str(i) for i in self.shape))
-
 class ImageArg(Record):
     def __init__(self, name, dtype=None, dimensions=None, shape=None):
         dtype = np.dtype(dtype)
-- 
GitLab