numpy  2.0.0
include/numpy/ufuncobject.h File Reference
#include <numpy/npy_math.h>
#include "arrayobject.h"
#include "__ufunc_api.h"

Go to the source code of this file.

Data Structures

struct  _tagPyUFuncObject
struct  PyUFunc_PyFuncData
struct  _loop1d_info

Defines

#define UFUNC_ERR_IGNORE   0
#define UFUNC_ERR_WARN   1
#define UFUNC_ERR_RAISE   2
#define UFUNC_ERR_CALL   3
#define UFUNC_ERR_PRINT   4
#define UFUNC_ERR_LOG   5
#define UFUNC_MASK_DIVIDEBYZERO   0x07
#define UFUNC_MASK_OVERFLOW   0x3f
#define UFUNC_MASK_UNDERFLOW   0x1ff
#define UFUNC_MASK_INVALID   0xfff
#define UFUNC_SHIFT_DIVIDEBYZERO   0
#define UFUNC_SHIFT_OVERFLOW   3
#define UFUNC_SHIFT_UNDERFLOW   6
#define UFUNC_SHIFT_INVALID   9
#define UFUNC_FPE_DIVIDEBYZERO   1
#define UFUNC_FPE_OVERFLOW   2
#define UFUNC_FPE_UNDERFLOW   4
#define UFUNC_FPE_INVALID   8
#define UFUNC_ERR_DEFAULT   0
#define UFUNC_OBJ_ISOBJECT   1
#define UFUNC_OBJ_NEEDS_API   2
#define UFUNC_ERR_DEFAULT2
#define NPY_LOOP_BEGIN_THREADS
#define NPY_LOOP_END_THREADS
#define PyUFunc_One   1
#define PyUFunc_Zero   0
#define PyUFunc_None   -1
#define PyUFunc_ReorderableNone   -2
#define UFUNC_REDUCE   0
#define UFUNC_ACCUMULATE   1
#define UFUNC_REDUCEAT   2
#define UFUNC_OUTER   3
#define UFUNC_PYVALS_NAME   "UFUNC_PYVALS"
#define UFUNC_CHECK_ERROR(arg)
#define NO_FLOATING_POINT_SUPPORT
#define UFUNC_CHECK_STATUS(ret)
#define generate_divbyzero_error()   npy_set_floatstatus_divbyzero()
#define generate_overflow_error()   npy_set_floatstatus_overflow()
#define UFUNC_NOFPE

Typedefs

typedef void(* PyUFuncGenericFunction )(char **args, npy_intp *dimensions, npy_intp *strides, void *innerloopdata)
typedef void( PyUFunc_StridedInnerLoopFunc )(char **dataptrs, npy_intp *strides, npy_intp count, NpyAuxData *innerloopdata)
typedef void( PyUFunc_MaskedStridedInnerLoopFunc )(char **dataptrs, npy_intp *strides, char *maskptr, npy_intp mask_stride, npy_intp count, NpyAuxData *innerloopdata)
typedef int( PyUFunc_TypeResolutionFunc )(struct _tagPyUFuncObject *ufunc, NPY_CASTING casting, PyArrayObject **operands, PyObject *type_tup, PyArray_Descr **out_dtypes)
typedef int( PyUFunc_LegacyInnerLoopSelectionFunc )(struct _tagPyUFuncObject *ufunc, PyArray_Descr **dtypes, PyUFuncGenericFunction *out_innerloop, void **out_innerloopdata, int *out_needs_api)
typedef int( PyUFunc_InnerLoopSelectionFunc )(struct _tagPyUFuncObject *ufunc, PyArray_Descr **dtypes, npy_intp *fixed_strides, PyUFunc_StridedInnerLoopFunc **out_innerloop, NpyAuxData **out_innerloopdata, int *out_needs_api)
typedef int( PyUFunc_MaskedInnerLoopSelectionFunc )(struct _tagPyUFuncObject *ufunc, PyArray_Descr **dtypes, PyArray_Descr *mask_dtype, npy_intp *fixed_strides, npy_intp fixed_mask_stride, PyUFunc_MaskedStridedInnerLoopFunc **out_innerloop, NpyAuxData **out_innerloopdata, int *out_needs_api)
typedef struct _tagPyUFuncObject PyUFuncObject
typedef struct _loop1d_info PyUFunc_Loop1d

Define Documentation

THESE MACROS ARE DEPRECATED. Use npy_set_floatstatus_* in the npymath library.
This code checks the IEEE status flags in a platform-dependent way
Adapted from Numarray
OSF/Alpha (Tru64) ---------------------------------------------
#define PyUFunc_None   -1
UFunc has no unit, and the order of operations cannot be reordered. This case does not allow reduction with multiple axes at once.

Referenced by ufunc_frompyfunc().

#define PyUFunc_One   1
UFunc has unit of 1, and the order of operations can be reordered This case allows reduction with multiple axes at once.
#define PyUFunc_ReorderableNone   -2
UFunc has no unit, and the order of operations can be reordered This case allows reduction with multiple axes at once.
#define PyUFunc_Zero   0
UFunc has unit of 0, and the order of operations can be reordered This case allows reduction with multiple axes at once.
#define UFUNC_ACCUMULATE   1
#define UFUNC_CHECK_ERROR (   arg)
Value:
do {if ((((arg)->obj & UFUNC_OBJ_NEEDS_API) && PyErr_Occurred()) || \
            ((arg)->errormask && \
             PyUFunc_checkfperr((arg)->errormask, \
                                (arg)->errobj, \
                                &(arg)->first))) \
                goto fail;} while (0)
#define UFUNC_CHECK_STATUS (   ret)
Value:
{ \
    ret = 0; \
  }
#define UFUNC_ERR_CALL   3
#define UFUNC_ERR_DEFAULT   0
Error mode that avoids look-up (no checking)
#define UFUNC_ERR_IGNORE   0
#define UFUNC_ERR_LOG   5
#define UFUNC_ERR_PRINT   4
#define UFUNC_ERR_RAISE   2
#define UFUNC_ERR_WARN   1
#define UFUNC_FPE_DIVIDEBYZERO   1
platform-dependent code translates floating point
status to an integer sum of these values
#define UFUNC_FPE_INVALID   8
#define UFUNC_FPE_OVERFLOW   2
#define UFUNC_FPE_UNDERFLOW   4
#define UFUNC_MASK_DIVIDEBYZERO   0x07
Python side integer mask
#define UFUNC_MASK_INVALID   0xfff
#define UFUNC_MASK_OVERFLOW   0x3f
#define UFUNC_MASK_UNDERFLOW   0x1ff
#define UFUNC_NOFPE
Make sure it gets defined if it isn't already
!Py_UFUNCOBJECT_H
#define UFUNC_OBJ_ISOBJECT   1
#define UFUNC_OBJ_NEEDS_API   2
#define UFUNC_OUTER   3
#define UFUNC_PYVALS_NAME   "UFUNC_PYVALS"

Referenced by _extract_pyvals().

#define UFUNC_REDUCE   0
#define UFUNC_REDUCEAT   2
#define UFUNC_SHIFT_DIVIDEBYZERO   0
#define UFUNC_SHIFT_INVALID   9
#define UFUNC_SHIFT_OVERFLOW   3
#define UFUNC_SHIFT_UNDERFLOW   6

Typedef Documentation

typedef int( PyUFunc_InnerLoopSelectionFunc)(struct _tagPyUFuncObject *ufunc, PyArray_Descr **dtypes, npy_intp *fixed_strides, PyUFunc_StridedInnerLoopFunc **out_innerloop, NpyAuxData **out_innerloopdata, int *out_needs_api)
typedef int( PyUFunc_LegacyInnerLoopSelectionFunc)(struct _tagPyUFuncObject *ufunc, PyArray_Descr **dtypes, PyUFuncGenericFunction *out_innerloop, void **out_innerloopdata, int *out_needs_api)
Given an array of DTypes as returned by the PyUFunc_TypeResolutionFunc, and an array of fixed strides (the array will contain NPY_MAX_INTP for strides which are not necessarily fixed), returns an inner loop with associated auxiliary data.
For backwards compatibility, there is a variant of the inner loop selection which returns an inner loop irrespective of the strides, and with a void* static auxiliary data instead of an NpyAuxData * dynamically allocatable auxiliary data.
ufunc: The ufunc object. dtypes: An array which has been populated with dtypes,

System Message: ERROR/3 (<string>, line 13) Unexpected indentation.

<blockquote> in most cases by the type resolution funciton for the same ufunc.</blockquote>

System Message: WARNING/2 (<string>, line 15) Block quote ends without a blank line; unexpected unindent.
fixed_strides: For each input/output, either the stride that
will be used every time the function is called or NPY_MAX_INTP if the stride might change or is not known ahead of time. The loop selection function may use this stride to pick inner loops which are optimized for contiguous or 0-stride cases.
out_innerloop: Should be populated with the correct ufunc inner
loop for the given type.
out_innerloopdata: Should be populated with the void* data to
be passed into the out_innerloop function.
out_needs_api: If the inner loop needs to use the Python API,
should set the to 1, otherwise should leave this untouched.
typedef struct _loop1d_info PyUFunc_Loop1d
A linked-list of function information for
user-defined 1-d loops.
typedef int( PyUFunc_MaskedInnerLoopSelectionFunc)(struct _tagPyUFuncObject *ufunc, PyArray_Descr **dtypes, PyArray_Descr *mask_dtype, npy_intp *fixed_strides, npy_intp fixed_mask_stride, PyUFunc_MaskedStridedInnerLoopFunc **out_innerloop, NpyAuxData **out_innerloopdata, int *out_needs_api)
typedef void( PyUFunc_MaskedStridedInnerLoopFunc)(char **dataptrs, npy_intp *strides, char *maskptr, npy_intp mask_stride, npy_intp count, NpyAuxData *innerloopdata)
The most generic one-dimensional inner loop for a masked standard element-wise ufunc. "Masked" here means that it skips doing calculations on any items for which the maskptr array has a true value.
typedef void( PyUFunc_StridedInnerLoopFunc)(char **dataptrs, npy_intp *strides, npy_intp count, NpyAuxData *innerloopdata)
The most generic one-dimensional inner loop for a standard element-wise ufunc. This typedef is also more consistent with the other NumPy function pointer typedefs than PyUFuncGenericFunction.
typedef int( PyUFunc_TypeResolutionFunc)(struct _tagPyUFuncObject *ufunc, NPY_CASTING casting, PyArrayObject **operands, PyObject *type_tup, PyArray_Descr **out_dtypes)
Given the operands for calling a ufunc, should determine the calculation input and output data types and return an inner loop function. This function should validate that the casting rule is being followed, and fail if it is not.
For backwards compatibility, the regular type resolution function does not support auxiliary data with object semantics. The type resolution call which returns a masked generic function returns a standard NpyAuxData object, for which the NPY_AUXDATA_FREE and NPY_AUXDATA_CLONE macros work.
ufunc: The ufunc object. casting: The 'casting' parameter provided to the ufunc. operands: An array of length (ufunc->nin + ufunc->nout),

System Message: ERROR/3 (<string>, line 15) Unexpected indentation.

<blockquote> with the output parameters possibly NULL.</blockquote>

System Message: WARNING/2 (<string>, line 16) Block quote ends without a blank line; unexpected unindent.
type_tup: Either NULL, or the type_tup passed to the ufunc. out_dtypes: An array which should be populated with new

System Message: ERROR/3 (<string>, line 18) Unexpected indentation.

<blockquote> references to (ufunc->nin + ufunc->nout) new dtypes, one for each input and output. These dtypes should all be in native-endian format.</blockquote>

Should return 0 on success, -1 on failure (with exception set), or -2 if Py_NotImplemented should be returned.
typedef void(* PyUFuncGenericFunction)(char **args, npy_intp *dimensions, npy_intp *strides, void *innerloopdata)
The legacy generic inner loop for a standard element-wise or generalized ufunc.