| 2225 | } |
| 2226 | |
| 2227 | static int |
| 2228 | npy_force_collapse(char *arr, run *stack, npy_intp *stack_ptr, |
| 2229 | buffer_char *buffer, size_t len, PyArray_CompareFunc *cmp, |
| 2230 | PyArrayObject *py_arr) |
| 2231 | { |
| 2232 | int ret; |
| 2233 | npy_intp top = *stack_ptr; |
| 2234 | |
| 2235 | while (2 < top) { |
| 2236 | if (stack[top - 3].l <= stack[top - 1].l) { |
| 2237 | ret = npy_merge_at(arr, stack, top - 3, buffer, len, cmp, py_arr); |
| 2238 | |
| 2239 | if (NPY_UNLIKELY(ret < 0)) { |
| 2240 | return ret; |
| 2241 | } |
| 2242 | |
| 2243 | stack[top - 3].l += stack[top - 2].l; |
| 2244 | stack[top - 2] = stack[top - 1]; |
| 2245 | --top; |
| 2246 | } |
| 2247 | else { |
| 2248 | ret = npy_merge_at(arr, stack, top - 2, buffer, len, cmp, py_arr); |
| 2249 | |
| 2250 | if (NPY_UNLIKELY(ret < 0)) { |
| 2251 | return ret; |
| 2252 | } |
| 2253 | |
| 2254 | stack[top - 2].l += stack[top - 1].l; |
| 2255 | --top; |
| 2256 | } |
| 2257 | } |
| 2258 | |
| 2259 | if (1 < top) { |
| 2260 | ret = npy_merge_at(arr, stack, top - 2, buffer, len, cmp, py_arr); |
| 2261 | |
| 2262 | if (NPY_UNLIKELY(ret < 0)) { |
| 2263 | return ret; |
| 2264 | } |
| 2265 | } |
| 2266 | |
| 2267 | return 0; |
| 2268 | } |
| 2269 | |
| 2270 | NPY_NO_EXPORT int |
| 2271 | npy_timsort(void *start, npy_intp num, void *varr) |
no test coverage detected