Author: Matti Picus <matti.pi...@gmail.com> Branch: pypy-pyarray Changeset: r66874:02814fa15f6c Date: 2013-09-09 22:19 +0300 http://bitbucket.org/pypy/pypy/changeset/02814fa15f6c/
Log: revert to original c-macro (segfaulting) style api for consistency with numpy diff --git a/pypy/module/cpyext/ndarrayobject.py b/pypy/module/cpyext/ndarrayobject.py --- a/pypy/module/cpyext/ndarrayobject.py +++ b/pypy/module/cpyext/ndarrayobject.py @@ -5,7 +5,7 @@ from pypy.interpreter.error import OperationError from rpython.rtyper.lltypesystem import rffi -from pypy.module.cpyext.api import cpython_api, Py_ssize_t, CANNOT_FAIL, _NOT_SPECIFIED +from pypy.module.cpyext.api import cpython_api, Py_ssize_t, CANNOT_FAIL from pypy.module.cpyext.pyobject import PyObject from pypy.module.micronumpy.interp_numarray import W_NDimArray, convert_to_array, wrap_impl from pypy.module.micronumpy.interp_dtype import get_dtype_cache @@ -57,11 +57,9 @@ w_type = space.gettypeobject(W_NDimArray.typedef) return space.is_w(w_obj_type, w_type) -@cpython_api([PyObject], rffi.INT_real, error=-1) +@cpython_api([PyObject], rffi.INT_real, error=CANNOT_FAIL) def _PyArray_FLAGS(space, w_array): - if not isinstance(w_array, W_NDimArray): - raise OperationError(space.w_TypeError, space.wrap( - '_PyArray_FLAGS(ndarray) called with non-ndarray')) + assert isinstance(w_array, W_NDimArray) flags = NPY_BEHAVED_NS if isinstance(w_array.implementation, ConcreteArray): flags |= NPY_OWNDATA @@ -73,67 +71,51 @@ flags |= NPY_F_CONTIGUOUS return flags -@cpython_api([PyObject], rffi.INT_real, error=-1) +@cpython_api([PyObject], rffi.INT_real, error=CANNOT_FAIL) def _PyArray_NDIM(space, w_array): - if not isinstance(w_array, W_NDimArray): - raise OperationError(space.w_TypeError, space.wrap( - '_PyArray_NDIM(ndarray) called with non-ndarray')) + assert isinstance(w_array, W_NDimArray) return len(w_array.get_shape()) -@cpython_api([PyObject, Py_ssize_t], Py_ssize_t, error=-1) +@cpython_api([PyObject, Py_ssize_t], Py_ssize_t, error=CANNOT_FAIL) def _PyArray_DIM(space, w_array, n): - if not isinstance(w_array, W_NDimArray): - raise OperationError(space.w_TypeError, space.wrap( - '_PyArray_DIM called with non-ndarray')) + assert isinstance(w_array, W_NDimArray) return w_array.get_shape()[n] -@cpython_api([PyObject, Py_ssize_t], Py_ssize_t, error=-1) +@cpython_api([PyObject, Py_ssize_t], Py_ssize_t, error=CANNOT_FAIL) def _PyArray_STRIDE(space, w_array, n): - if not isinstance(w_array, W_NDimArray): - raise OperationError(space.w_TypeError, space.wrap( - '_PyArray_STRIDE called with non-ndarray')) + assert isinstance(w_array, W_NDimArray) return w_array.implementation.get_strides()[n] -@cpython_api([PyObject], Py_ssize_t, error=-1) +@cpython_api([PyObject], Py_ssize_t, error=CANNOT_FAIL) def _PyArray_SIZE(space, w_array): - if not isinstance(w_array, W_NDimArray): - raise OperationError(space.w_TypeError, space.wrap( - '_PyArray_SIZE called with non-ndarray')) + assert isinstance(w_array, W_NDimArray) return w_array.get_size() -@cpython_api([PyObject], rffi.INT_real, error=-1) +@cpython_api([PyObject], rffi.INT_real, error=CANNOT_FAIL) def _PyArray_ITEMSIZE(space, w_array): - if not isinstance(w_array, W_NDimArray): - raise OperationError(space.w_TypeError, space.wrap( - '_PyArray_ITEMSIZE called with non-ndarray')) + assert isinstance(w_array, W_NDimArray) return w_array.get_dtype().get_size() -@cpython_api([PyObject], Py_ssize_t, error=-1) +@cpython_api([PyObject], Py_ssize_t, error=CANNOT_FAIL) def _PyArray_NBYTES(space, w_array): - if not isinstance(w_array, W_NDimArray): - raise OperationError(space.w_TypeError, space.wrap( - '_PyArray_NBYTES called with non-ndarray')) + assert isinstance(w_array, W_NDimArray) return w_array.get_size() * w_array.get_dtype().get_size() -@cpython_api([PyObject], rffi.INT_real, error=-1) +@cpython_api([PyObject], rffi.INT_real, error=CANNOT_FAIL) def _PyArray_TYPE(space, w_array): - if not isinstance(w_array, W_NDimArray): - raise OperationError(space.w_TypeError, space.wrap( - '_PyArray_TYPE called with non-ndarray')) + assert isinstance(w_array, W_NDimArray) return w_array.get_dtype().num -@cpython_api([PyObject], rffi.VOIDP, error=_NOT_SPECIFIED) +@cpython_api([PyObject], rffi.VOIDP, error=CANNOT_FAIL) def _PyArray_DATA(space, w_array): # fails on scalars - see PyArray_FromAny() - if not isinstance(w_array, W_NDimArray): - raise OperationError(space.w_TypeError, space.wrap( - '_PyArray_DATA called with non-ndarray')) + assert isinstance(w_array, W_NDimArray) return rffi.cast(rffi.VOIDP, w_array.implementation.storage) @cpython_api([PyObject, rffi.VOIDP, Py_ssize_t, Py_ssize_t, Py_ssize_t, rffi.VOIDP], - PyObject, error=CANNOT_FAIL) + PyObject) def _PyArray_FromAny(space, w_obj, dtype, min_depth, max_depth, requirements, context): """ This is the main function used to obtain an array from any nested sequence, or object that exposes the array interface, op. The diff --git a/pypy/module/cpyext/test/test_ndarrayobject.py b/pypy/module/cpyext/test/test_ndarrayobject.py --- a/pypy/module/cpyext/test/test_ndarrayobject.py +++ b/pypy/module/cpyext/test/test_ndarrayobject.py @@ -62,7 +62,6 @@ def test_NBYTES(self, space, api): a = array(space, [10, 5, 3]) assert api._PyArray_NBYTES(a) == 1200 - self.raises(space, api, TypeError, api._PyArray_NBYTES, space.wrap([10])) def test_TYPE(self, space, api): a = array(space, [10, 5, 3]) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit