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

Function PyArray_MapIterNext

numpy/core/src/multiarray/mapping.c:2309–2381  ·  view source on GitHub ↗

NUMPY_API * This function needs to update the state of the map iterator * and point mit->dataptr to the memory-location of the next object * * Note that this function never handles an extra operand but provides * compatibility for an old (exposed) API. */

Source from the content-addressed store, hash-verified

2307 * compatibility for an old (exposed) API.
2308 */
2309NPY_NO_EXPORT void
2310PyArray_MapIterNext(PyArrayMapIterObject *mit)
2311{
2312 int i;
2313 char *baseptr;
2314 npy_intp indval;
2315
2316 if (mit->subspace_iter) {
2317 if (--mit->iter_count > 0) {
2318 mit->subspace_ptrs[0] += mit->subspace_strides[0];
2319 mit->dataptr = mit->subspace_ptrs[0];
2320 return;
2321 }
2322 else if (mit->subspace_next(mit->subspace_iter)) {
2323 mit->iter_count = *NpyIter_GetInnerLoopSizePtr(mit->subspace_iter);
2324 mit->dataptr = mit->subspace_ptrs[0];
2325 }
2326 else {
2327 if (!mit->outer_next(mit->outer)) {
2328 return;
2329 }
2330
2331 baseptr = mit->baseoffset;
2332
2333 for (i = 0; i < mit->numiter; i++) {
2334 indval = *((npy_intp*)mit->outer_ptrs[i]);
2335 if (indval < 0) {
2336 indval += mit->fancy_dims[i];
2337 }
2338 baseptr += indval * mit->fancy_strides[i];
2339 }
2340 NpyIter_ResetBasePointers(mit->subspace_iter, &baseptr, NULL);
2341 mit->iter_count = *NpyIter_GetInnerLoopSizePtr(mit->subspace_iter);
2342
2343 mit->dataptr = mit->subspace_ptrs[0];
2344 }
2345 }
2346 else {
2347 if (--mit->iter_count > 0) {
2348 baseptr = mit->baseoffset;
2349
2350 for (i = 0; i < mit->numiter; i++) {
2351 mit->outer_ptrs[i] += mit->outer_strides[i];
2352
2353 indval = *((npy_intp*)mit->outer_ptrs[i]);
2354 if (indval < 0) {
2355 indval += mit->fancy_dims[i];
2356 }
2357 baseptr += indval * mit->fancy_strides[i];
2358 }
2359
2360 mit->dataptr = baseptr;
2361 return;
2362 }
2363 else {
2364 if (!mit->outer_next(mit->outer)) {
2365 return;
2366 }

Callers 2

ufunc_at__fast_iterFunction · 0.85
ufunc_at__slow_iterFunction · 0.85

Calls 2

Tested by

no test coverage detected