Author: Matti Picus <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit