numpy 2.0.0
|
#include "Python.h"
#include "structmember.h"
#include <numpy/ndarrayobject.h>
#include <numpy/npy_3kcompat.h>
#include "convert_datatype.h"
#include "lowlevel_strided_loops.h"
Go to the source code of this file.
Data Structures | |
struct | NpyIter_InternalOnly |
struct | NpyIter_BD |
struct | NpyIter_AD |
Defines | |
#define | PY_SSIZE_T_CLEAN |
#define | NPY_NO_DEPRECATED_API |
#define | _MULTIARRAYMODULE |
#define | NPY_IT_CONSTRUCTION_TIMING 0 |
#define | NPY_IT_TIME_POINT(var) |
#define | NPY_IT_DBG_TRACING 0 |
#define | NPY_IT_DBG_PRINT(s) |
#define | NPY_IT_DBG_PRINT1(s, p1) |
#define | NPY_IT_DBG_PRINT2(s, p1, p2) |
#define | NPY_IT_DBG_PRINT3(s, p1, p2, p3) |
#define | NPY_INTP_ALIGNED(size) ((size + 0x7)&(-0x8)) |
#define | NPY_ITFLAG_IDENTPERM 0x0001 |
#define | NPY_ITFLAG_NEGPERM 0x0002 |
#define | NPY_ITFLAG_HASINDEX 0x0004 |
#define | NPY_ITFLAG_HASMULTIINDEX 0x0008 |
#define | NPY_ITFLAG_FORCEDORDER 0x0010 |
#define | NPY_ITFLAG_EXLOOP 0x0020 |
#define | NPY_ITFLAG_RANGE 0x0040 |
#define | NPY_ITFLAG_BUFFER 0x0080 |
#define | NPY_ITFLAG_GROWINNER 0x0100 |
#define | NPY_ITFLAG_ONEITERATION 0x0200 |
#define | NPY_ITFLAG_DELAYBUF 0x0400 |
#define | NPY_ITFLAG_NEEDSAPI 0x0800 |
#define | NPY_ITFLAG_REDUCE 0x1000 |
#define | NPY_ITFLAG_REUSE_REDUCE_LOOPS 0x2000 |
#define | NPY_OP_ITFLAG_WRITE 0x01 |
#define | NPY_OP_ITFLAG_READ 0x02 |
#define | NPY_OP_ITFLAG_CAST 0x04 |
#define | NPY_OP_ITFLAG_BUFNEVER 0x08 |
#define | NPY_OP_ITFLAG_ALIGNED 0x10 |
#define | NPY_OP_ITFLAG_REDUCE 0x20 |
#define | NPY_OP_ITFLAG_VIRTUAL 0x40 |
#define | NPY_OP_ITFLAG_WRITEMASKED 0x80 |
#define | NIT_PERM_SIZEOF(itflags, ndim, nop) NPY_INTP_ALIGNED(NPY_MAXDIMS) |
#define | NIT_DTYPES_SIZEOF(itflags, ndim, nop) ((NPY_SIZEOF_INTP)*(nop)) |
#define | NIT_RESETDATAPTR_SIZEOF(itflags, ndim, nop) ((NPY_SIZEOF_INTP)*(nop+1)) |
#define | NIT_BASEOFFSETS_SIZEOF(itflags, ndim, nop) ((NPY_SIZEOF_INTP)*(nop+1)) |
#define | NIT_OPERANDS_SIZEOF(itflags, ndim, nop) ((NPY_SIZEOF_INTP)*(nop)) |
#define | NIT_OPITFLAGS_SIZEOF(itflags, ndim, nop) (NPY_INTP_ALIGNED(nop)) |
#define | NIT_BUFFERDATA_SIZEOF(itflags, ndim, nop) ((itflags&NPY_ITFLAG_BUFFER) ? ((NPY_SIZEOF_INTP)*(6 + 9*nop)) : 0) |
#define | NIT_PERM_OFFSET() (0) |
#define | NIT_DTYPES_OFFSET(itflags, ndim, nop) |
#define | NIT_RESETDATAPTR_OFFSET(itflags, ndim, nop) |
#define | NIT_BASEOFFSETS_OFFSET(itflags, ndim, nop) |
#define | NIT_OPERANDS_OFFSET(itflags, ndim, nop) |
#define | NIT_OPITFLAGS_OFFSET(itflags, ndim, nop) |
#define | NIT_BUFFERDATA_OFFSET(itflags, ndim, nop) |
#define | NIT_AXISDATA_OFFSET(itflags, ndim, nop) |
#define | NIT_ITFLAGS(iter) ((iter)->itflags) |
#define | NIT_NDIM(iter) ((iter)->ndim) |
#define | NIT_NOP(iter) ((iter)->nop) |
#define | NIT_MASKOP(iter) ((iter)->maskop) |
#define | NIT_ITERSIZE(iter) (iter->itersize) |
#define | NIT_ITERSTART(iter) (iter->iterstart) |
#define | NIT_ITEREND(iter) (iter->iterend) |
#define | NIT_ITERINDEX(iter) (iter->iterindex) |
#define | NIT_PERM(iter) |
#define | NIT_DTYPES(iter) |
#define | NIT_RESETDATAPTR(iter) |
#define | NIT_BASEOFFSETS(iter) |
#define | NIT_OPERANDS(iter) |
#define | NIT_OPITFLAGS(iter) |
#define | NIT_BUFFERDATA(iter) |
#define | NIT_AXISDATA(iter) |
#define | NBF_BUFFERSIZE(bufferdata) ((bufferdata)->buffersize) |
#define | NBF_SIZE(bufferdata) ((bufferdata)->size) |
#define | NBF_BUFITEREND(bufferdata) ((bufferdata)->bufiterend) |
#define | NBF_REDUCE_POS(bufferdata) ((bufferdata)->reduce_pos) |
#define | NBF_REDUCE_OUTERSIZE(bufferdata) ((bufferdata)->reduce_outersize) |
#define | NBF_REDUCE_OUTERDIM(bufferdata) ((bufferdata)->reduce_outerdim) |
#define | NBF_STRIDES(bufferdata) |
#define | NBF_PTRS(bufferdata) |
#define | NBF_REDUCE_OUTERSTRIDES(bufferdata) |
#define | NBF_REDUCE_OUTERPTRS(bufferdata) |
#define | NBF_READTRANSFERFN(bufferdata) |
#define | NBF_READTRANSFERDATA(bufferdata) |
#define | NBF_WRITETRANSFERFN(bufferdata) |
#define | NBF_WRITETRANSFERDATA(bufferdata) |
#define | NBF_BUFFERS(bufferdata) |
#define | NAD_SHAPE(axisdata) ((axisdata)->shape) |
#define | NAD_INDEX(axisdata) ((axisdata)->index) |
#define | NAD_STRIDES(axisdata) |
#define | NAD_PTRS(axisdata) |
#define | NAD_NSTRIDES() ((nop) + ((itflags&NPY_ITFLAG_HASINDEX) ? 1 : 0)) |
#define | NIT_AXISDATA_SIZEOF(itflags, ndim, nop) |
#define | NIT_INDEX_AXISDATA(axisdata, index) |
#define | NIT_ADVANCE_AXISDATA(axisdata, count) axisdata = NIT_INDEX_AXISDATA(axisdata, count) |
#define | NIT_SIZEOF_ITERATOR(itflags, ndim, nop) |
Typedefs | |
typedef struct NpyIter_AD | NpyIter_AxisData |
typedef struct NpyIter_BD | NpyIter_BufferData |
Functions | |
NPY_NO_EXPORT void | npyiter_coalesce_axes (NpyIter *iter) |
NPY_NO_EXPORT int | npyiter_allocate_buffers (NpyIter *iter, char **errmsg) |
NPY_NO_EXPORT void | npyiter_goto_iterindex (NpyIter *iter, npy_intp iterindex) |
NPY_NO_EXPORT void | npyiter_copy_from_buffers (NpyIter *iter) |
NPY_NO_EXPORT void | npyiter_copy_to_buffers (NpyIter *iter, char **prev_dataptrs) |
#define _MULTIARRAYMODULE |
#define NAD_INDEX | ( | axisdata | ) | ((axisdata)->index) |
Referenced by npyiter_coalesce_axes(), and npyiter_iternext_sizeone().
#define NAD_NSTRIDES | ( | ) | ((nop) + ((itflags&NPY_ITFLAG_HASINDEX) ? 1 : 0)) |
#define NAD_PTRS | ( | axisdata | ) |
((char **) \
&(axisdata)->ad_flexdata + 1*(nop+1))
#define NAD_SHAPE | ( | axisdata | ) | ((axisdata)->shape) |
#define NAD_STRIDES | ( | axisdata | ) |
( \ &(axisdata)->ad_flexdata + 0)
Referenced by npyiter_coalesce_axes().
#define NBF_BUFFERS | ( | bufferdata | ) |
((char **) \
(&(bufferdata)->bd_flexdata + 8*(nop)))
Referenced by NpyIter_Copy().
#define NBF_BUFFERSIZE | ( | bufferdata | ) | ((bufferdata)->buffersize) |
#define NBF_BUFITEREND | ( | bufferdata | ) | ((bufferdata)->bufiterend) |
Referenced by NpyIter_EnableExternalLoop(), and NpyIter_GotoIndex().
#define NBF_PTRS | ( | bufferdata | ) |
((char **) \
(&(bufferdata)->bd_flexdata + 1*(nop)))
Referenced by NpyIter_GetBufferSize(), and NpyIter_GotoIndex().
#define NBF_READTRANSFERDATA | ( | bufferdata | ) |
((NpyAuxData **) \ (&(bufferdata)->bd_flexdata + 5*(nop)))
Referenced by NpyIter_Copy().
#define NBF_READTRANSFERFN | ( | bufferdata | ) |
((PyArray_StridedTransferFn **) \ (&(bufferdata)->bd_flexdata + 4*(nop)))
#define NBF_REDUCE_OUTERDIM | ( | bufferdata | ) | ((bufferdata)->reduce_outerdim) |
#define NBF_REDUCE_OUTERPTRS | ( | bufferdata | ) |
((char **) \
(&(bufferdata)->bd_flexdata + 3*(nop)))
#define NBF_REDUCE_OUTERSIZE | ( | bufferdata | ) | ((bufferdata)->reduce_outersize) |
Referenced by npyiter_coalesce_axes().
#define NBF_REDUCE_OUTERSTRIDES | ( | bufferdata | ) |
( \ (&(bufferdata)->bd_flexdata + 2*(nop)))
#define NBF_REDUCE_POS | ( | bufferdata | ) | ((bufferdata)->reduce_pos) |
#define NBF_SIZE | ( | bufferdata | ) | ((bufferdata)->size) |
Referenced by npyiter_coalesce_axes(), NpyIter_EnableExternalLoop(), NpyIter_GetIndexPtr(), and NpyIter_GotoIndex().
#define NBF_STRIDES | ( | bufferdata | ) |
( \ &(bufferdata)->bd_flexdata + 0)
Referenced by NpyIter_GotoIndex().
#define NBF_WRITETRANSFERDATA | ( | bufferdata | ) |
((NpyAuxData **) \ (&(bufferdata)->bd_flexdata + 7*(nop)))
Referenced by NpyIter_Copy().
#define NBF_WRITETRANSFERFN | ( | bufferdata | ) |
((PyArray_StridedTransferFn **) \ (&(bufferdata)->bd_flexdata + 6*(nop)))
#define NIT_ADVANCE_AXISDATA | ( | axisdata, | |
count | |||
) | axisdata = NIT_INDEX_AXISDATA(axisdata, count) |
Referenced by npyiter_flip_negative_strides().
#define NIT_AXISDATA | ( | iter | ) |
((NpyIter_AxisData *)( \ &(iter)->iter_flexdata + NIT_AXISDATA_OFFSET(itflags, ndim, nop)))
Referenced by npyiter_flip_negative_strides(), and NpyIter_GetIndexPtr().
#define NIT_AXISDATA_OFFSET | ( | itflags, | |
ndim, | |||
nop | |||
) |
(NIT_BUFFERDATA_OFFSET(itflags, ndim, nop) + \ NIT_BUFFERDATA_SIZEOF(itflags, ndim, nop))
#define NIT_AXISDATA_SIZEOF | ( | itflags, | |
ndim, | |||
nop | |||
) |
(( \ \ 1 + \ \ 1 + \ \ 2*((nop)+1) \ )*NPY_SIZEOF_INTP )
Referenced by npyiter_flip_negative_strides().
#define NIT_BASEOFFSETS | ( | iter | ) |
((npy_intp *)( \ &(iter)->iter_flexdata + NIT_BASEOFFSETS_OFFSET(itflags, ndim, nop)))
Referenced by NpyIter_GetAxisStrideArray().
#define NIT_BASEOFFSETS_OFFSET | ( | itflags, | |
ndim, | |||
nop | |||
) |
(NIT_RESETDATAPTR_OFFSET(itflags, ndim, nop) + \ NIT_RESETDATAPTR_SIZEOF(itflags, ndim, nop))
#define NIT_BASEOFFSETS_SIZEOF | ( | itflags, | |
ndim, | |||
nop | |||
) | ((NPY_SIZEOF_INTP)*(nop+1)) |
#define NIT_BUFFERDATA | ( | iter | ) |
((NpyIter_BufferData *)( \ &(iter)->iter_flexdata + NIT_BUFFERDATA_OFFSET(itflags, ndim, nop)))
Referenced by NpyIter_Copy(), NpyIter_EnableExternalLoop(), NpyIter_GetBufferSize(), NpyIter_GetIndexPtr(), and NpyIter_GotoIndex().
#define NIT_BUFFERDATA_OFFSET | ( | itflags, | |
ndim, | |||
nop | |||
) |
(NIT_OPITFLAGS_OFFSET(itflags, ndim, nop) + \ NIT_OPITFLAGS_SIZEOF(itflags, ndim, nop))
#define NIT_BUFFERDATA_SIZEOF | ( | itflags, | |
ndim, | |||
nop | |||
) | ((itflags&NPY_ITFLAG_BUFFER) ? ((NPY_SIZEOF_INTP)*(6 + 9*nop)) : 0) |
#define NIT_DTYPES | ( | iter | ) |
((PyArray_Descr **)( \ &(iter)->iter_flexdata + NIT_DTYPES_OFFSET(itflags, ndim, nop)))
Referenced by NpyIter_Copy().
#define NIT_DTYPES_OFFSET | ( | itflags, | |
ndim, | |||
nop | |||
) |
(NIT_PERM_OFFSET() + \ NIT_PERM_SIZEOF(itflags, ndim, nop))
#define NIT_DTYPES_SIZEOF | ( | itflags, | |
ndim, | |||
nop | |||
) | ((NPY_SIZEOF_INTP)*(nop)) |
#define NIT_INDEX_AXISDATA | ( | axisdata, | |
index | |||
) |
((NpyIter_AxisData *) \ (((char *)(axisdata)) + (index)*sizeof_axisdata))
#define NIT_ITEREND | ( | iter | ) | (iter->iterend) |
Referenced by NpyIter_EnableExternalLoop(), and NpyIter_HasDelayedBufAlloc().
#define NIT_ITERINDEX | ( | iter | ) | (iter->iterindex) |
Referenced by NpyIter_EnableExternalLoop(), NpyIter_GotoIndex(), and NpyIter_New().
#define NIT_ITERSIZE | ( | iter | ) | (iter->itersize) |
#define NIT_ITERSTART | ( | iter | ) | (iter->iterstart) |
Referenced by NpyIter_EnableExternalLoop(), and NpyIter_HasDelayedBufAlloc().
#define NIT_ITFLAGS | ( | iter | ) | ((iter)->itflags) |
Referenced by NpyIter_Copy(), NpyIter_EnableExternalLoop(), npyiter_flip_negative_strides(), NpyIter_GetIndexPtr(), NpyIter_GetIterIndex(), NpyIter_HasMultiIndex(), and NpyIter_IsGrowInner().
#define NIT_MASKOP | ( | iter | ) | ((iter)->maskop) |
#define NIT_NDIM | ( | iter | ) | ((iter)->ndim) |
Referenced by npyiter_flip_negative_strides(), and NpyIter_HasMultiIndex().
#define NIT_NOP | ( | iter | ) | ((iter)->nop) |
#define NIT_OPERANDS | ( | iter | ) |
((PyArrayObject **)( \ &(iter)->iter_flexdata + NIT_OPERANDS_OFFSET(itflags, ndim, nop)))
Referenced by NpyIter_Copy(), and NpyIter_GetShape().
#define NIT_OPERANDS_OFFSET | ( | itflags, | |
ndim, | |||
nop | |||
) |
(NIT_BASEOFFSETS_OFFSET(itflags, ndim, nop) + \ NIT_BASEOFFSETS_SIZEOF(itflags, ndim, nop))
#define NIT_OPERANDS_SIZEOF | ( | itflags, | |
ndim, | |||
nop | |||
) | ((NPY_SIZEOF_INTP)*(nop)) |
#define NIT_OPITFLAGS | ( | iter | ) |
( \ &(iter)->iter_flexdata + NIT_OPITFLAGS_OFFSET(itflags, ndim, nop))
Referenced by NpyIter_GetDataPtrArray().
#define NIT_OPITFLAGS_OFFSET | ( | itflags, | |
ndim, | |||
nop | |||
) |
(NIT_OPERANDS_OFFSET(itflags, ndim, nop) + \ NIT_OPERANDS_SIZEOF(itflags, ndim, nop))
#define NIT_OPITFLAGS_SIZEOF | ( | itflags, | |
ndim, | |||
nop | |||
) | (NPY_INTP_ALIGNED(nop)) |
#define NIT_PERM | ( | iter | ) |
((npy_int8 *)( \ &(iter)->iter_flexdata + NIT_PERM_OFFSET()))
Referenced by npyiter_flip_negative_strides().
#define NIT_PERM_OFFSET | ( | ) | (0) |
#define NIT_PERM_SIZEOF | ( | itflags, | |
ndim, | |||
nop | |||
) | NPY_INTP_ALIGNED(NPY_MAXDIMS) |
#define NIT_RESETDATAPTR | ( | iter | ) |
((char **)( \ &(iter)->iter_flexdata + NIT_RESETDATAPTR_OFFSET(itflags, ndim, nop)))
Referenced by NpyIter_GetIterIndexRange().
#define NIT_RESETDATAPTR_OFFSET | ( | itflags, | |
ndim, | |||
nop | |||
) |
(NIT_DTYPES_OFFSET(itflags, ndim, nop) + \ NIT_DTYPES_SIZEOF(itflags, ndim, nop))
#define NIT_RESETDATAPTR_SIZEOF | ( | itflags, | |
ndim, | |||
nop | |||
) | ((NPY_SIZEOF_INTP)*(nop+1)) |
#define NIT_SIZEOF_ITERATOR | ( | itflags, | |
ndim, | |||
nop | |||
) |
( \ sizeof(struct NpyIter_InternalOnly) + \ NIT_AXISDATA_OFFSET(itflags, ndim, nop) + \ NIT_AXISDATA_SIZEOF(itflags, ndim, nop)*(ndim))
#define NPY_INTP_ALIGNED | ( | size | ) | ((size + 0x7)&(-0x8)) |
#define NPY_IT_CONSTRUCTION_TIMING 0 |
#define NPY_IT_DBG_PRINT | ( | s | ) |
Referenced by npyiter_apply_forced_iteration_order().
#define NPY_IT_DBG_PRINT1 | ( | s, | |
p1 | |||
) |
Referenced by npyiter_coalesce_axes(), and npyiter_copy_to_buffers().
#define NPY_IT_DBG_PRINT2 | ( | s, | |
p1, | |||
p2 | |||
) |
Referenced by npyiter_coalesce_axes().
#define NPY_IT_DBG_PRINT3 | ( | s, | |
p1, | |||
p2, | |||
p3 | |||
) |
Referenced by npyiter_flip_negative_strides().
#define NPY_IT_DBG_TRACING 0 |
#define NPY_IT_TIME_POINT | ( | var | ) |
#define NPY_ITFLAG_BUFFER 0x0080 |
#define NPY_ITFLAG_DELAYBUF 0x0400 |
#define NPY_ITFLAG_EXLOOP 0x0020 |
#define NPY_ITFLAG_FORCEDORDER 0x0010 |
#define NPY_ITFLAG_GROWINNER 0x0100 |
#define NPY_ITFLAG_HASINDEX 0x0004 |
#define NPY_ITFLAG_HASMULTIINDEX 0x0008 |
#define NPY_ITFLAG_IDENTPERM 0x0001 |
#define NPY_ITFLAG_NEEDSAPI 0x0800 |
#define NPY_ITFLAG_NEGPERM 0x0002 |
#define NPY_ITFLAG_ONEITERATION 0x0200 |
#define NPY_ITFLAG_RANGE 0x0040 |
#define NPY_ITFLAG_REDUCE 0x1000 |
#define NPY_ITFLAG_REUSE_REDUCE_LOOPS 0x2000 |
#define NPY_NO_DEPRECATED_API |
#define NPY_OP_ITFLAG_ALIGNED 0x10 |
#define NPY_OP_ITFLAG_BUFNEVER 0x08 |
#define NPY_OP_ITFLAG_CAST 0x04 |
#define NPY_OP_ITFLAG_READ 0x02 |
#define NPY_OP_ITFLAG_REDUCE 0x20 |
#define NPY_OP_ITFLAG_VIRTUAL 0x40 |
#define NPY_OP_ITFLAG_WRITE 0x01 |
Referenced by NpyIter_GetDataPtrArray().
#define NPY_OP_ITFLAG_WRITEMASKED 0x80 |
#define PY_SSIZE_T_CLEAN |
typedef struct NpyIter_AD NpyIter_AxisData |
typedef struct NpyIter_BD NpyIter_BufferData |
NPY_NO_EXPORT int npyiter_allocate_buffers | ( | NpyIter * | iter, |
char ** | errmsg | ||
) |
Referenced by NpyIter_EnableExternalLoop().
NPY_NO_EXPORT void npyiter_coalesce_axes | ( | NpyIter * | iter | ) |
References NAD_INDEX, NAD_SHAPE, NAD_STRIDES, NBF_REDUCE_OUTERSIZE, NBF_SIZE, NPY_IT_DBG_PRINT1, NPY_IT_DBG_PRINT2, NPY_OP_ITFLAG_WRITEMASKED, and PyArray_TransferMaskedStridedToNDim().
NPY_NO_EXPORT void npyiter_copy_from_buffers | ( | NpyIter * | iter | ) |
Referenced by NpyIter_EnableExternalLoop(), and NpyIter_GotoIndex().
NPY_NO_EXPORT void npyiter_copy_to_buffers | ( | NpyIter * | iter, |
char ** | prev_dataptrs | ||
) |
References _PyArray_Descr::elsize, and NPY_IT_DBG_PRINT1.
Referenced by NpyIter_EnableExternalLoop(), NpyIter_GotoIndex(), and NpyIter_New().
Referenced by NpyIter_EnableExternalLoop(), NpyIter_GotoIndex(), and NpyIter_New().