(sorry for the double posting, if any)
Dear pythraners and pythonists,
The pythran team (a great total of 2 active developers) is delighted to
announce the release of Pythran 0.7.4, available on the traditional
channels:
- pypi: https://pypi.python.org/pypi/pythran
- conda: https://anaconda.org/serge-sans-paille/pythran
- github: https://github.com/serge-sans-paille/pythran
As usual, here is a (new) code sample, once again adapted from a
stackoverflow question[0] that showcases pythran capability:
#pythran export check_mask(bool[][], bool[])
# ^~~~~~~ non intrusive top-level annotation
import numpy as np
# ^~~~~~ numpy support (partial)
def check_mask(db, out, mask=[1, 0, 1]):
for idx, line in enumerate(db):
target, vector = line[0], line[1:]
# ^~~~~ type destructuring, array view
if (mask == np.bitwise_and(mask, vector)).all():
# ^~~~~~~ optimization of high level construct
if target == 1:
out[idx] = 1
return out
Compiled with:
% pythran check_mask.py
And benchmarked with:
% python -m timeit -s 'n=10e3 ; import numpy as np;db = np.array(np.random.randint(2, size=(n, 4)), dtype=bool); out = np.zeros(int(n),dtype=bool); from eq import check_mask' 'check_mask(db, out)'
On average, the CPython version runs in 137 msec while the pythran version run in 450us on my laptop :-)
Here is an extract of the changelog:
2016-01-05 Serge Guelton
participants (2)
-
Neal Becker
-
serge guelton