From 1fff440ba7c3da6cfe9f5d5b534e22fa43f18482 Mon Sep 17 00:00:00 2001 From: Pauli Virtanen Date: Thu, 17 Aug 2017 00:52:49 +0200 Subject: TST: core: add a test that exercise untested npymath functions These functions do not occur currently in numpy codebase either at all or only very indirectly, so they are not tested otherwise. --- numpy/core/src/multiarray/multiarray_tests.c.src | 117 +++++++++++++++++++++++ 1 file changed, 117 insertions(+) (limited to 'numpy/core/src') diff --git a/numpy/core/src/multiarray/multiarray_tests.c.src b/numpy/core/src/multiarray/multiarray_tests.c.src index 657c4064e..b5fe6bae7 100644 --- a/numpy/core/src/multiarray/multiarray_tests.c.src +++ b/numpy/core/src/multiarray/multiarray_tests.c.src @@ -3,6 +3,7 @@ #include #define _NPY_NO_DEPRECATIONS /* for NPY_CHAR */ #include "numpy/arrayobject.h" +#include "numpy/npy_math.h" #include "mem_overlap.h" #include "npy_extint128.h" #include "common.h" @@ -1590,6 +1591,94 @@ get_fpu_mode(PyObject *NPY_UNUSED(self), PyObject *args) #endif } +/* + * npymath wrappers + */ + +/**begin repeat + * #name = cabs, carg# + */ + +/**begin repeat1 + * #itype = npy_cfloat, npy_cdouble, npy_clongdouble# + * #ITYPE = NPY_CFLOAT, NPY_CDOUBLE, NPY_CLONGDOUBLE# + * #otype = npy_float, npy_double, npy_longdouble# + * #OTYPE = NPY_FLOAT, NPY_DOUBLE, NPY_LONGDOUBLE# + * #suffix= f, , l# + */ + +static PyObject * +call_npy_@name@@suffix@(PyObject *NPY_UNUSED(self), PyObject *args) +{ + PyObject *z_py = NULL, *z_arr = NULL, *w_arr = NULL; + + if (!PyArg_ParseTuple(args, "O", &z_py)) { + return NULL; + } + + z_arr = PyArray_FROMANY(z_py, @ITYPE@, 0, 0, NPY_ARRAY_CARRAY_RO); + if (z_arr == NULL) { + return NULL; + } + + w_arr = PyArray_SimpleNew(0, NULL, @OTYPE@); + if (w_arr == NULL) { + Py_DECREF(z_arr); + return NULL; + } + + *(@otype@*)PyArray_DATA((PyArrayObject *)w_arr) = + npy_@name@@suffix@(*(@itype@*)PyArray_DATA((PyArrayObject *)z_arr)); + + Py_DECREF(z_arr); + return w_arr; +} + +/**end repeat1**/ + +/**end repeat**/ + +/**begin repeat + * #name = log10, cosh, sinh, tan, tanh# + */ + +/**begin repeat1 + * #type = npy_float, npy_double, npy_longdouble# + * #TYPE = NPY_FLOAT, NPY_DOUBLE, NPY_LONGDOUBLE# + * #suffix= f, , l# + */ + +static PyObject * +call_npy_@name@@suffix@(PyObject *NPY_UNUSED(self), PyObject *args) +{ + PyObject *z_py = NULL, *z_arr = NULL, *w_arr = NULL; + + if (!PyArg_ParseTuple(args, "O", &z_py)) { + return NULL; + } + + z_arr = PyArray_FROMANY(z_py, @TYPE@, 0, 0, NPY_ARRAY_CARRAY_RO); + if (z_arr == NULL) { + return NULL; + } + + w_arr = PyArray_SimpleNew(0, NULL, @TYPE@); + if (w_arr == NULL) { + Py_DECREF(z_arr); + return NULL; + } + + *(@type@*)PyArray_DATA((PyArrayObject *)w_arr) = + npy_@name@@suffix@(*(@type@*)PyArray_DATA((PyArrayObject *)z_arr)); + + Py_DECREF(z_arr); + return w_arr; +} + +/**end repeat1**/ + +/**end repeat**/ + static PyMethodDef Multiarray_TestsMethods[] = { {"IsPythonScalar", @@ -1684,6 +1773,34 @@ static PyMethodDef Multiarray_TestsMethods[] = { {"get_fpu_mode", get_fpu_mode, METH_VARARGS, get_fpu_mode_doc}, +/**begin repeat + * #name = cabs, carg# + */ + +/**begin repeat1 + * #suffix = f, , l# + */ + {"npy_@name@@suffix@", + call_npy_@name@@suffix@, + METH_VARARGS, NULL}, +/**end repeat1**/ + +/**end repeat**/ + +/**begin repeat + * #name = log10, cosh, sinh, tan, tanh# + */ + +/**begin repeat1 + * #suffix= f, , l# + */ + {"npy_@name@@suffix@", + call_npy_@name@@suffix@, + METH_VARARGS, NULL}, +/**end repeat1**/ + +/**end repeat**/ + {NULL, NULL, 0, NULL} /* Sentinel */ }; -- cgit v1.2.1 From 36d969994d59cd0ce960e773b230b8e48082adfc Mon Sep 17 00:00:00 2001 From: Pauli Virtanen Date: Thu, 17 Aug 2017 00:53:11 +0200 Subject: BUG: core: blacklist MSVC cabs* on win32 Similarly to hypot() also cabs* on MSVC/win32 mess with floating point mode. --- numpy/core/src/private/npy_config.h | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'numpy/core/src') diff --git a/numpy/core/src/private/npy_config.h b/numpy/core/src/private/npy_config.h index 1e2151447..107b3cb5b 100644 --- a/numpy/core/src/private/npy_config.h +++ b/numpy/core/src/private/npy_config.h @@ -65,6 +65,10 @@ /* MSVC _hypot messes with fp precision mode on 32-bit, see gh-9567 */ #if defined(_MSC_VER) && (_MSC_VER >= 1900) && !defined(_WIN64) +#undef HAVE_CABS +#undef HAVE_CABSF +#undef HAVE_CABSL + #undef HAVE_HYPOT #undef HAVE_HYPOTF #undef HAVE_HYPOTL -- cgit v1.2.1 From 3cfe9360e827dde42ff736e34760d90a29394819 Mon Sep 17 00:00:00 2001 From: Pauli Virtanen Date: Thu, 17 Aug 2017 14:14:26 +0200 Subject: BUG: core: remove extra return statement --- numpy/core/src/multiarray/multiarray_tests.c.src | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'numpy/core/src') diff --git a/numpy/core/src/multiarray/multiarray_tests.c.src b/numpy/core/src/multiarray/multiarray_tests.c.src index b5fe6bae7..a20cf6257 100644 --- a/numpy/core/src/multiarray/multiarray_tests.c.src +++ b/numpy/core/src/multiarray/multiarray_tests.c.src @@ -1587,7 +1587,7 @@ get_fpu_mode(PyObject *NPY_UNUSED(self), PyObject *args) return PyLong_FromLongLong(cw); } #else - return Py_RETURN_NONE; + Py_RETURN_NONE; #endif } -- cgit v1.2.1