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

Function npy_try_collapse

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

Source from the content-addressed store, hash-verified

2165}
2166
2167static int
2168npy_try_collapse(char *arr, run *stack, npy_intp *stack_ptr,
2169 buffer_char *buffer, size_t len, PyArray_CompareFunc *cmp,
2170 PyArrayObject *py_arr)
2171{
2172 int ret;
2173 npy_intp A, B, C, top;
2174 top = *stack_ptr;
2175
2176 while (1 < top) {
2177 B = stack[top - 2].l;
2178 C = stack[top - 1].l;
2179
2180 if ((2 < top && stack[top - 3].l <= B + C) ||
2181 (3 < top && stack[top - 4].l <= stack[top - 3].l + B)) {
2182 A = stack[top - 3].l;
2183
2184 if (A <= C) {
2185 ret = npy_merge_at(arr, stack, top - 3, buffer, len, cmp,
2186 py_arr);
2187
2188 if (NPY_UNLIKELY(ret < 0)) {
2189 return ret;
2190 }
2191
2192 stack[top - 3].l += B;
2193 stack[top - 2] = stack[top - 1];
2194 --top;
2195 }
2196 else {
2197 ret = npy_merge_at(arr, stack, top - 2, buffer, len, cmp,
2198 py_arr);
2199
2200 if (NPY_UNLIKELY(ret < 0)) {
2201 return ret;
2202 }
2203
2204 stack[top - 2].l += C;
2205 --top;
2206 }
2207 }
2208 else if (1 < top && B <= C) {
2209 ret = npy_merge_at(arr, stack, top - 2, buffer, len, cmp, py_arr);
2210
2211 if (NPY_UNLIKELY(ret < 0)) {
2212 return ret;
2213 }
2214
2215 stack[top - 2].l += C;
2216 --top;
2217 }
2218 else {
2219 break;
2220 }
2221 }
2222
2223 *stack_ptr = top;
2224 return 0;

Callers 1

npy_timsortFunction · 0.85

Calls 1

npy_merge_atFunction · 0.85

Tested by

no test coverage detected