[pypy-commit] pypy numpy-fixes: test, fix creating ndarray from buffer, which does [ord(c) for c in buffer]
mattip
noreply at buildbot.pypy.org
Fri May 15 16:22:01 CEST 2015
Author: mattip <matti.picus at gmail.com>
Branch: numpy-fixes
Changeset: r77333:d14e6db54c9f
Date: 2015-05-15 16:39 +0300
http://bitbucket.org/pypy/pypy/changeset/d14e6db54c9f/
Log: test, fix creating ndarray from buffer, which does [ord(c) for c in
buffer]
diff --git a/pypy/module/micronumpy/compile.py b/pypy/module/micronumpy/compile.py
--- a/pypy/module/micronumpy/compile.py
+++ b/pypy/module/micronumpy/compile.py
@@ -68,6 +68,7 @@
w_complex = W_TypeObject("complex")
w_dict = W_TypeObject("dict")
w_object = W_TypeObject("object")
+ w_buffer = W_TypeObject("buffer")
def __init__(self):
"""NOT_RPYTHON"""
diff --git a/pypy/module/micronumpy/strides.py b/pypy/module/micronumpy/strides.py
--- a/pypy/module/micronumpy/strides.py
+++ b/pypy/module/micronumpy/strides.py
@@ -185,8 +185,14 @@
def _find_shape_and_elems(space, w_iterable, is_rec_type):
+ from pypy.objspace.std.bufferobject import W_Buffer
shape = [space.len_w(w_iterable)]
- batch = space.listview(w_iterable)
+ if space.isinstance_w(w_iterable, space.w_buffer):
+ batch = [space.wrap(0)] * shape[0]
+ for i in range(shape[0]):
+ batch[i] = space.ord(space.getitem(w_iterable, space.wrap(i)))
+ else:
+ batch = space.listview(w_iterable)
while True:
if not batch:
return shape[:], []
diff --git a/pypy/module/micronumpy/support.py b/pypy/module/micronumpy/support.py
--- a/pypy/module/micronumpy/support.py
+++ b/pypy/module/micronumpy/support.py
@@ -7,8 +7,9 @@
def issequence_w(space, w_obj):
from pypy.module.micronumpy.base import W_NDimArray
return (space.isinstance_w(w_obj, space.w_tuple) or
- space.isinstance_w(w_obj, space.w_list) or
- isinstance(w_obj, W_NDimArray))
+ space.isinstance_w(w_obj, space.w_list) or
+ space.isinstance_w(w_obj, space.w_buffer) or
+ isinstance(w_obj, W_NDimArray))
def index_w(space, w_obj):
diff --git a/pypy/module/micronumpy/test/test_ndarray.py b/pypy/module/micronumpy/test/test_ndarray.py
--- a/pypy/module/micronumpy/test/test_ndarray.py
+++ b/pypy/module/micronumpy/test/test_ndarray.py
@@ -3951,6 +3951,11 @@
assert np.greater(a, a) is NotImplemented
assert np.less_equal(a, a) is NotImplemented
+ def test_create_from_memory(self):
+ import numpy as np
+ dat = np.array(__builtins__.buffer('1.0'), dtype=np.float64)
+ assert (dat == [49.0, 46.0, 48.0]).all()
+
class AppTestPyPy(BaseNumpyAppTest):
def setup_class(cls):
More information about the pypy-commit
mailing list