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

Function npy_atry_collapse

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

Source from the content-addressed store, hash-verified

2597}
2598
2599static int
2600npy_atry_collapse(char *arr, npy_intp *tosort, run *stack, npy_intp *stack_ptr,
2601 buffer_intp *buffer, size_t len, PyArray_CompareFunc *cmp,
2602 PyArrayObject *py_arr)
2603{
2604 int ret;
2605 npy_intp A, B, C, top;
2606 top = *stack_ptr;
2607
2608 while (1 < top) {
2609 B = stack[top - 2].l;
2610 C = stack[top - 1].l;
2611
2612 if ((2 < top && stack[top - 3].l <= B + C) ||
2613 (3 < top && stack[top - 4].l <= stack[top - 3].l + B)) {
2614 A = stack[top - 3].l;
2615
2616 if (A <= C) {
2617 ret = npy_amerge_at(arr, tosort, stack, top - 3, buffer, len,
2618 cmp, py_arr);
2619
2620 if (NPY_UNLIKELY(ret < 0)) {
2621 return ret;
2622 }
2623
2624 stack[top - 3].l += B;
2625 stack[top - 2] = stack[top - 1];
2626 --top;
2627 }
2628 else {
2629 ret = npy_amerge_at(arr, tosort, stack, top - 2, buffer, len,
2630 cmp, py_arr);
2631
2632 if (NPY_UNLIKELY(ret < 0)) {
2633 return ret;
2634 }
2635
2636 stack[top - 2].l += C;
2637 --top;
2638 }
2639 }
2640 else if (1 < top && B <= C) {
2641 ret = npy_amerge_at(arr, tosort, stack, top - 2, buffer, len, cmp,
2642 py_arr);
2643
2644 if (NPY_UNLIKELY(ret < 0)) {
2645 return ret;
2646 }
2647
2648 stack[top - 2].l += C;
2649 --top;
2650 }
2651 else {
2652 break;
2653 }
2654 }
2655
2656 *stack_ptr = top;

Callers 1

npy_atimsortFunction · 0.85

Calls 1

npy_amerge_atFunction · 0.85

Tested by

no test coverage detected