[pypy-commit] extradoc extradoc: make v4 and v5 more similar to v3

antocuni pypy.commits at gmail.com
Wed Jul 12 04:59:38 EDT 2017


Author: Antonio Cuni <anto.cuni at gmail.com>
Branch: extradoc
Changeset: r5813:6ed1dcda3cd7
Date: 2017-07-12 10:32 +0200
http://bitbucket.org/pypy/extradoc/changeset/6ed1dcda3cd7/

Log:	make v4 and v5 more similar to v3

diff --git a/talk/ep2017/the-joy-of-pypy-jit/sobel/v4.py b/talk/ep2017/the-joy-of-pypy-jit/sobel/v4.py
--- a/talk/ep2017/the-joy-of-pypy-jit/sobel/v4.py
+++ b/talk/ep2017/the-joy-of-pypy-jit/sobel/v4.py
@@ -1,6 +1,6 @@
 import array
 from math import sqrt
-from v2 import Image
+from v3 import Image
 
 class Kernel(object):
 
@@ -9,11 +9,11 @@
         self.width = len(matrix[0])
         self.matrix = matrix
 
-    def __call__(self, img, x, y):
+    def __call__(self, img, p):
         value = 0.0
         for j, row in enumerate(self.matrix, -(self.height/2)):
             for i, k in enumerate(row, -(self.width/2)):
-                value += img[x+i, y+j] * k
+                value += img[p + (i, j)] * k
         return value
 
 
@@ -31,10 +31,9 @@
     """
     img = Image(*img)
     out = Image(img.width, img.height)
-    for y in xrange(1, img.height-1):
-        for x in xrange(1, img.width-1):
-            dx = Gx(img, x, y)
-            dy = Gy(img, x, y)
-            value = min(int(sqrt(dx*dx + dy*dy) / 2.0), 255)
-            out[x, y] = value
+    for p in img.noborder():
+        dx = Gx(img, p)
+        dy = Gy(img, p)
+        value = min(int(sqrt(dx*dx + dy*dy) / 2.0), 255)
+        out[p] = value
     return out
diff --git a/talk/ep2017/the-joy-of-pypy-jit/sobel/v5.py b/talk/ep2017/the-joy-of-pypy-jit/sobel/v5.py
--- a/talk/ep2017/the-joy-of-pypy-jit/sobel/v5.py
+++ b/talk/ep2017/the-joy-of-pypy-jit/sobel/v5.py
@@ -1,19 +1,19 @@
 import array
 from math import sqrt
-from v2 import Image
+from v3 import Image
 from pypytools.codegen import Code
 
 def Kernel(matrix):
     height = len(matrix)
     width = len(matrix[0])
     code = Code()
-    with code.block('def apply(img, x, y):'):
+    with code.block('def apply(img, p):'):
         code.w('value = 0.0')
         for j, row in enumerate(matrix, -(height/2)):
             for i, k in enumerate(row, -(width/2)):
                 if k == 0:
                     continue
-                code.w('value += img[x+{i}, y+{j}] * {k}', i=i, j=j, k=k)
+                code.w('value += img[p+{delta}] * {k}', delta=(i, j), k=k)
         code.w('return value')
     #
     code.compile()
@@ -29,14 +29,13 @@
 
 def sobel(img):
     """
-    Like v3, but with a generic Kernel class
+    Like v4, but unrolling the Kernel loop
     """
     img = Image(*img)
     out = Image(img.width, img.height)
-    for y in xrange(1, img.height-1):
-        for x in xrange(1, img.width-1):
-            dx = Gx(img, x, y)
-            dy = Gy(img, x, y)
-            value = min(int(sqrt(dx*dx + dy*dy) / 2.0), 255)
-            out[x, y] = value
+    for p in img.noborder():
+        dx = Gx(img, p)
+        dy = Gy(img, p)
+        value = min(int(sqrt(dx*dx + dy*dy) / 2.0), 255)
+        out[p] = value
     return out


More information about the pypy-commit mailing list