MCPcopy Create free account
hub / github.com/numpy/numpy / npyiter_compute_index_strides

Function npyiter_compute_index_strides

numpy/core/src/multiarray/nditer_constr.c:2040–2098  ·  view source on GitHub ↗

* Computes the iterator's index strides and initializes the index values * to zero. * * This must be called before the axes (i.e. the AXISDATA array) may * be reordered. */

Source from the content-addressed store, hash-verified

2038 * be reordered.
2039 */
2040static void
2041npyiter_compute_index_strides(NpyIter *iter, npy_uint32 flags)
2042{
2043 npy_uint32 itflags = NIT_ITFLAGS(iter);
2044 int idim, ndim = NIT_NDIM(iter);
2045 int nop = NIT_NOP(iter);
2046
2047 npy_intp indexstride;
2048 NpyIter_AxisData *axisdata;
2049 npy_intp sizeof_axisdata;
2050
2051 /*
2052 * If there is only one element being iterated, we just have
2053 * to touch the first AXISDATA because nothing will ever be
2054 * incremented. This also initializes the data for the 0-d case.
2055 */
2056 if (NIT_ITERSIZE(iter) == 1) {
2057 if (itflags & NPY_ITFLAG_HASINDEX) {
2058 axisdata = NIT_AXISDATA(iter);
2059 NAD_PTRS(axisdata)[nop] = 0;
2060 }
2061 return;
2062 }
2063
2064 if (flags & NPY_ITER_C_INDEX) {
2065 sizeof_axisdata = NIT_AXISDATA_SIZEOF(itflags, ndim, nop);
2066 axisdata = NIT_AXISDATA(iter);
2067 indexstride = 1;
2068 for(idim = 0; idim < ndim; ++idim, NIT_ADVANCE_AXISDATA(axisdata, 1)) {
2069 npy_intp shape = NAD_SHAPE(axisdata);
2070
2071 if (shape == 1) {
2072 NAD_STRIDES(axisdata)[nop] = 0;
2073 }
2074 else {
2075 NAD_STRIDES(axisdata)[nop] = indexstride;
2076 }
2077 NAD_PTRS(axisdata)[nop] = 0;
2078 indexstride *= shape;
2079 }
2080 }
2081 else if (flags & NPY_ITER_F_INDEX) {
2082 sizeof_axisdata = NIT_AXISDATA_SIZEOF(itflags, ndim, nop);
2083 axisdata = NIT_INDEX_AXISDATA(NIT_AXISDATA(iter), ndim-1);
2084 indexstride = 1;
2085 for(idim = 0; idim < ndim; ++idim, NIT_ADVANCE_AXISDATA(axisdata, -1)) {
2086 npy_intp shape = NAD_SHAPE(axisdata);
2087
2088 if (shape == 1) {
2089 NAD_STRIDES(axisdata)[nop] = 0;
2090 }
2091 else {
2092 NAD_STRIDES(axisdata)[nop] = indexstride;
2093 }
2094 NAD_PTRS(axisdata)[nop] = 0;
2095 indexstride *= shape;
2096 }
2097 }

Callers 1

NpyIter_AdvancedNewFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected