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

Function npy_acount_run

numpy/core/src/npysort/timsort.cpp:2335–2399  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2333/* argsort */
2334
2335static npy_intp
2336npy_acount_run(char *arr, npy_intp *tosort, npy_intp l, npy_intp num,
2337 npy_intp minrun, size_t len, PyArray_CompareFunc *cmp,
2338 PyArrayObject *py_arr)
2339{
2340 npy_intp sz;
2341 npy_intp vi;
2342 npy_intp *pl, *pi, *pj, *pr;
2343
2344 if (NPY_UNLIKELY(num - l == 1)) {
2345 return 1;
2346 }
2347
2348 pl = tosort + l;
2349
2350 /* (not strictly) ascending sequence */
2351 if (cmp(arr + (*pl) * len, arr + (*(pl + 1)) * len, py_arr) <= 0) {
2352 for (pi = pl + 1;
2353 pi < tosort + num - 1 &&
2354 cmp(arr + (*pi) * len, arr + (*(pi + 1)) * len, py_arr) <= 0;
2355 ++pi) {
2356 }
2357 }
2358 else { /* (strictly) descending sequence */
2359 for (pi = pl + 1;
2360 pi < tosort + num - 1 &&
2361 cmp(arr + (*(pi + 1)) * len, arr + (*pi) * len, py_arr) < 0;
2362 ++pi) {
2363 }
2364
2365 for (pj = pl, pr = pi; pj < pr; ++pj, --pr) {
2366 std::swap(*pj, *pr);
2367 }
2368 }
2369
2370 ++pi;
2371 sz = pi - pl;
2372
2373 if (sz < minrun) {
2374 if (l + minrun < num) {
2375 sz = minrun;
2376 }
2377 else {
2378 sz = num - l;
2379 }
2380
2381 pr = pl + sz;
2382
2383 /* insertion sort */
2384 for (; pi < pr; ++pi) {
2385 vi = *pi;
2386 pj = pi;
2387
2388 while (pl < pj &&
2389 cmp(arr + vi * len, arr + (*(pj - 1)) * len, py_arr) < 0) {
2390 *pj = *(pj - 1);
2391 --pj;
2392 }

Callers 1

npy_atimsortFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected