summaryrefslogtreecommitdiff
path: root/scipy/f2py/src/fortranobject.c
diff options
context:
space:
mode:
authorPearu Peterson <pearu.peterson@gmail.com>2005-10-31 05:30:11 +0000
committerPearu Peterson <pearu.peterson@gmail.com>2005-10-31 05:30:11 +0000
commit954c1d9339dbd366a2d5810c825c4784c85e0110 (patch)
tree8794e86d7b28f852367ce5b9e9fa0d01b06b5408 /scipy/f2py/src/fortranobject.c
parent9362a1d8d498985e41a35c089fc68cd280a0fde9 (diff)
downloadnumpy-954c1d9339dbd366a2d5810c825c4784c85e0110.tar.gz
Fixed incorrect usage of PyArray_CanCastSafely.
Diffstat (limited to 'scipy/f2py/src/fortranobject.c')
-rw-r--r--scipy/f2py/src/fortranobject.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/scipy/f2py/src/fortranobject.c b/scipy/f2py/src/fortranobject.c
index 16daa546a..05f712603 100644
--- a/scipy/f2py/src/fortranobject.c
+++ b/scipy/f2py/src/fortranobject.c
@@ -473,6 +473,12 @@ static int swap_arrays(PyArrayObject* arr1, PyArrayObject* arr2) {
return 0;
}
+#define ARRAY_ISCOMPATIBLE(arr,type_num) \
+( (PyArray_ISINTEGER(arr) && PyTypeNum_ISINTEGER(type_num)) \
+ ||(PyArray_ISFLOAT(arr) && PyTypeNum_ISFLOAT(type_num)) \
+ ||(PyArray_ISCOMPLEX(arr) && PyTypeNum_ISCOMPLEX(type_num)) \
+)
+
extern
PyArrayObject* array_from_pyobj(const int type_num,
intp *dims,
@@ -550,7 +556,7 @@ PyArrayObject* array_from_pyobj(const int type_num,
if ((! (intent & F2PY_INTENT_COPY))
&& PyArray_ITEMSIZE(arr)==descr->elsize
- && PyArray_CanCastSafely(arr->descr->type_num,type_num)
+ && ARRAY_ISCOMPATIBLE(arr,type_num)
) {
if ((intent & F2PY_INTENT_C)?PyArray_ISCARRAY(arr):PyArray_ISFARRAY(arr)) {
if ((intent & F2PY_INTENT_OUT)) {
@@ -572,8 +578,8 @@ PyArrayObject* array_from_pyobj(const int type_num,
descr->elsize,
PyArray_ITEMSIZE(arr)
);
- if (!(PyArray_CanCastSafely(arr->descr->type_num,type_num)))
- sprintf(mess+strlen(mess)," -- cannot cast safely from '%c' to '%c'",
+ if (!(ARRAY_ISCOMPATIBLE(arr,type_num)))
+ sprintf(mess+strlen(mess)," -- input '%c' not compatible to '%c'",
arr->descr->type,descr->type);
PyErr_SetString(PyExc_ValueError,mess);
return NULL;