[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