From e99b963ab41879798ca0de567b56b264700d3ba2 Mon Sep 17 00:00:00 2001 From: Ianna Osborne Date: Sat, 16 May 2026 21:44:44 +0200 Subject: [PATCH 1/4] feat: complete CPU kernel migration from `parents` to `offsets` (#3988) * next step in kernel migration from parents to offsets * linter fix * add jax bincount * add cpp kernel to convert parents to offsets * fix typo * fix typo in an auto-generated test * almost there * nearly there * cleanup * fix remaining kernels * final cleanup * format json data * format * initialize maxnextparents = -1 (a sentinel meaning "no bin was touched") * update the kernels to work on offsets! * format * migrate cupy rawkernels from parents to offsets * migrate jax reducers * fix for platfroms where the int64 counts can't be safely cast * add bincount for cupy backend * compact loc * fix windows build and add optional OpenMP support * update cuda kernels * feat: add `missing_repeat` kernel implementation using cuda.compute (#3922) * feat: add missing_repeat implementation using cuda.compute * keep the same name as in cpu kernel * add tests for repetitions>1 and regularsize>1 * style: pre-commit fixes * add keywords * style fixes --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * feat: add `index_rpad_and_clip` kernels implementations using cuda.compute (#3923) * feat: add `index_rpad_and_clip` kernels implementation using cuda.compute * style fix * add a test for `index_rpad_and_clip_axis0` that would have target>length * add keyword names * style * Apply suggestions from Ianna Co-authored-by: Ianna Osborne * style: pre-commit fixes --------- Co-authored-by: Ianna Osborne Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * fix: array attrs not being validated at creation and being of inconsistent type (#3996) * convert dict attrs to Attrs type * add test * fix: ensure jax backend uses arrays on cpu only (#3990) * ensure jax uses cpu by default * remove now redundant jax_platform_name setting * change error messages * better errors * remove DeviceArray mentions as that does not exist while we're at it too * almost there * cleanup * cleanup * remove old data file * update cupy kernels * remove exlicit test for depricated kernel * add complex kernels and port them to use offsets * fix complex reducers * add remaining kernels * add kernels for complex and bool sum * move to segmented_reduce * fix typo * promote type * fix complex bool reducer * try another algo * missed one * use type inference * make numba happy * remove reducer overloads * use sum op func for complex types * remove test of depricated code * avoid using == to compare floating-point products * fix boundary tests * cleanup * cleanup * remove dead code * revert lexsort to argmin/max * handrolled lexsort * remove dead code * remove bincount * import numba cuda for jit * fix tests --------- Co-authored-by: maxymnaumchyk Co-authored-by: maxymnaumchyk <70752300+maxymnaumchyk@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Iason Krommydas --- awkward-cpp/CMakeLists.txt | 12 + awkward-cpp/include/awkward/common.h | 1 + ...awkward_ByteMaskedArray_reduce_next_64.cpp | 25 +- .../awkward_Index_parents_to_offsets.cpp | 41 + .../cpu-kernels/awkward_IndexedArray_fill.cpp | 48 +- ...awkward_IndexedArray_flatten_nextcarry.cpp | 42 +- ...wkward_IndexedArray_flatten_none2empty.cpp | 48 +- ...awkward_IndexedArray_getitem_nextcarry.cpp | 42 +- ...ndexedArray_getitem_nextcarry_outindex.cpp | 48 +- .../awkward_IndexedArray_index_of_nulls.cpp | 63 +- ...ward_IndexedArray_local_preparenext_64.cpp | 35 +- .../awkward_IndexedArray_numnull.cpp | 36 +- .../awkward_IndexedArray_numnull_parents.cpp | 42 +- .../awkward_IndexedArray_overlay_mask.cpp | 42 +- ...ward_IndexedArray_ranges_carry_next_64.cpp | 48 +- .../awkward_IndexedArray_ranges_next_64.cpp | 60 +- .../awkward_IndexedArray_reduce_next_64.cpp | 81 +- ...ray_reduce_next_nonlocal_nextshifts_64.cpp | 36 +- ...next_nonlocal_nextshifts_fromshifts_64.cpp | 42 +- .../awkward_IndexedArray_simplify.cpp | 132 +- .../awkward_IndexedArray_validity.cpp | 42 +- .../awkward_ListArray_broadcast_tooffsets.cpp | 54 +- .../awkward_ListArray_combinations.cpp | 66 +- .../awkward_ListArray_combinations_length.cpp | 60 +- .../awkward_ListArray_compact_offsets.cpp | 42 +- .../cpu-kernels/awkward_ListArray_fill.cpp | 66 +- ...awkward_ListArray_getitem_jagged_apply.cpp | 78 +- ...kward_ListArray_getitem_jagged_descend.cpp | 54 +- ...wkward_ListArray_getitem_jagged_expand.cpp | 66 +- .../awkward_ListArray_getitem_next_array.cpp | 66 +- ..._ListArray_getitem_next_array_advanced.cpp | 66 +- .../awkward_ListArray_getitem_next_at.cpp | 48 +- .../awkward_ListArray_getitem_next_range.cpp | 66 +- ...stArray_getitem_next_range_carrylength.cpp | 60 +- ...rd_ListArray_getitem_next_range_counts.cpp | 36 +- ...rray_getitem_next_range_spreadadvanced.cpp | 42 +- .../awkward_ListArray_localindex.cpp | 36 +- .../awkward_ListArray_min_range.cpp | 42 +- ...d_ListArray_rpad_and_clip_length_axis1.cpp | 48 +- .../awkward_ListArray_rpad_axis1.cpp | 60 +- .../awkward_ListArray_validity.cpp | 42 +- ...ward_ListOffsetArray_drop_none_indexes.cpp | 34 +- ...wkward_ListOffsetArray_flatten_offsets.cpp | 42 +- ...ffsetArray_reduce_local_nextparents_64.cpp | 51 +- ...OffsetArray_reduce_local_outoffsets_64.cpp | 7 + ...setArray_reduce_nonlocal_nextshifts_64.cpp | 45 +- ...setArray_reduce_nonlocal_nextstarts_64.cpp | 7 + ...etArray_reduce_nonlocal_preparenext_64.cpp | 69 +- ...rd_ListOffsetArray_rpad_and_clip_axis1.cpp | 42 +- .../awkward_ListOffsetArray_rpad_axis1.cpp | 42 +- ...ward_ListOffsetArray_rpad_length_axis1.cpp | 48 +- ...awkward_ListOffsetArray_toRegularArray.cpp | 36 +- ...askedArray_getitem_next_jagged_project.cpp | 54 +- .../awkward_NumpyArray_pad_zero_to_length.cpp | 49 +- ...umpyArray_prepare_utf8_to_utf32_padded.cpp | 41 +- .../awkward_NumpyArray_rearrange_shifted.cpp | 28 +- ...ard_NumpyArray_reduce_adjust_starts_64.cpp | 14 +- ...pyArray_reduce_adjust_starts_shifts_64.cpp | 11 +- ...pyArray_reduce_mask_ByteMaskedArray_64.cpp | 17 +- .../awkward_NumpyArray_subrange_equal.cpp | 146 +- ...wkward_NumpyArray_utf8_to_utf32_padded.cpp | 47 +- ...gularArray_reduce_local_nextparents_64.cpp | 7 + ...arArray_reduce_nonlocal_preparenext_64.cpp | 28 +- .../awkward_UnionArray_fillindex.cpp | 42 +- .../cpu-kernels/awkward_UnionArray_fillna.cpp | 36 +- .../awkward_UnionArray_flatten_combine.cpp | 60 +- .../awkward_UnionArray_flatten_length.cpp | 48 +- ...kward_UnionArray_nestedfill_tags_index.cpp | 50 +- .../awkward_UnionArray_project.cpp | 54 +- .../awkward_UnionArray_regular_index.cpp | 90 +- ...kward_UnionArray_regular_index_getsize.cpp | 26 +- .../awkward_UnionArray_simplify.cpp | 275 +- .../awkward_UnionArray_simplify_one.cpp | 86 +- .../awkward_UnionArray_validity.cpp | 48 +- .../src/cpu-kernels/awkward_argsort.cpp | 303 +- .../src/cpu-kernels/awkward_reduce_argmax.cpp | 230 +- .../awkward_reduce_argmax_complex.cpp | 71 +- .../src/cpu-kernels/awkward_reduce_argmin.cpp | 243 +- .../awkward_reduce_argmin_complex.cpp | 71 +- .../cpu-kernels/awkward_reduce_count_64.cpp | 9 +- .../awkward_reduce_countnonzero.cpp | 200 +- .../awkward_reduce_countnonzero_complex.cpp | 47 +- .../src/cpu-kernels/awkward_reduce_max.cpp | 214 +- .../awkward_reduce_max_complex.cpp | 70 +- .../src/cpu-kernels/awkward_reduce_min.cpp | 231 +- .../awkward_reduce_min_complex.cpp | 70 +- .../src/cpu-kernels/awkward_reduce_prod.cpp | 305 +- .../cpu-kernels/awkward_reduce_prod_bool.cpp | 211 +- .../awkward_reduce_prod_bool_complex.cpp | 54 +- .../awkward_reduce_prod_complex.cpp | 69 +- .../src/cpu-kernels/awkward_reduce_sum.cpp | 313 +- .../cpu-kernels/awkward_reduce_sum_bool.cpp | 219 +- .../awkward_reduce_sum_bool_complex.cpp | 51 +- .../awkward_reduce_sum_complex.cpp | 57 +- .../awkward_reduce_sum_int32_bool_64.cpp | 12 +- .../awkward_reduce_sum_int64_bool_64.cpp | 12 +- awkward-cpp/src/cpu-kernels/awkward_sort.cpp | 309 +- .../cpu-kernels/awkward_sorting_ranges.cpp | 8 + .../awkward_sorting_ranges_length.cpp | 7 + .../cpu-kernels/awkward_unique_offsets.cpp | 62 +- .../src/cpu-kernels/awkward_unique_ranges.cpp | 132 +- dev/generate-kernel-signatures.py | 14 +- kernel-specification.yml | 1673 +- kernel-test-data.json | 56419 ++++++++-------- src/awkward/_backends/cupy.py | 150 +- src/awkward/_connect/cuda/_compute.py | 1040 +- .../awkward_ByteMaskedArray_reduce_next_64.cu | 72 +- .../awkward_IndexedArray_index_of_nulls.cu | 16 +- ...kward_IndexedArray_local_preparenext_64.cu | 27 +- .../awkward_IndexedArray_reduce_next_64.cu | 61 +- .../awkward_NumpyArray_rearrange_shifted.cu | 15 +- ...ward_NumpyArray_reduce_adjust_starts_64.cu | 11 +- ...mpyArray_reduce_adjust_starts_shifts_64.cu | 10 +- ...mpyArray_reduce_mask_ByteMaskedArray_64.cu | 21 +- ...larArray_reduce_nonlocal_preparenext_64.cu | 31 +- .../awkward_reduce_argmax_complex.cu | 161 +- .../awkward_reduce_argmin_complex.cu | 162 +- .../cuda_kernels/awkward_reduce_count_64.cu | 65 +- .../awkward_reduce_countnonzero.cu | 70 +- .../awkward_reduce_countnonzero_complex.cu | 73 +- .../cuda/cuda_kernels/awkward_reduce_max.cu | 72 +- .../awkward_reduce_max_complex.cu | 86 +- .../cuda/cuda_kernels/awkward_reduce_min.cu | 159 +- .../awkward_reduce_min_complex.cu | 87 +- .../cuda/cuda_kernels/awkward_reduce_prod.cu | 97 +- .../cuda_kernels/awkward_reduce_prod_bool.cu | 97 +- .../awkward_reduce_prod_bool_complex.cu | 99 +- .../awkward_reduce_prod_complex.cu | 111 +- .../cuda/cuda_kernels/awkward_reduce_sum.cu | 72 +- .../cuda_kernels/awkward_reduce_sum_bool.cu | 88 +- .../awkward_reduce_sum_bool_complex.cu | 99 +- .../awkward_reduce_sum_complex.cu | 77 +- .../awkward_reduce_sum_int32_bool_64.cu | 19 +- .../awkward_reduce_sum_int64_bool_64.cu | 19 +- src/awkward/_connect/cuda/reducers.py | 401 +- src/awkward/_connect/jax/reducers.py | 102 +- src/awkward/_do.py | 30 +- src/awkward/_reducers.py | 201 +- src/awkward/contents/bitmaskedarray.py | 20 +- src/awkward/contents/bytemaskedarray.py | 49 +- src/awkward/contents/content.py | 17 +- src/awkward/contents/emptyarray.py | 14 +- src/awkward/contents/indexedarray.py | 152 +- src/awkward/contents/indexedoptionarray.py | 192 +- src/awkward/contents/listarray.py | 20 +- src/awkward/contents/listoffsetarray.py | 572 +- src/awkward/contents/numpyarray.py | 273 +- src/awkward/contents/recordarray.py | 116 +- src/awkward/contents/regulararray.py | 244 +- src/awkward/contents/unionarray.py | 19 +- src/awkward/contents/unmaskedarray.py | 20 +- src/awkward/index.py | 27 - tests-cuda/test_3149_complex_reducers.py | 87 +- .../test_3162_block_boundary_reducers.py | 82 +- ...3894_overload_reducers_for_cuda_compute.py | 71 - tests/test_2512_record_array_carry.py | 23 +- 156 files changed, 32267 insertions(+), 39062 deletions(-) create mode 100644 awkward-cpp/src/cpu-kernels/awkward_Index_parents_to_offsets.cpp delete mode 100644 tests-cuda/test_3894_overload_reducers_for_cuda_compute.py diff --git a/awkward-cpp/CMakeLists.txt b/awkward-cpp/CMakeLists.txt index 4ad3aca6be..18c033deb1 100644 --- a/awkward-cpp/CMakeLists.txt +++ b/awkward-cpp/CMakeLists.txt @@ -84,6 +84,18 @@ set_target_properties( VISIBILITY_INLINES_HIDDEN ON CXX_EXTENSIONS NO) +# Optional OpenMP threading for the reducers / sorts. The kernels gate every `#pragma omp parallel +# for` on `_OPENMP`, so the same source compiles cleanly without OpenMP and runs serially in that +# case. We don't fail the build if OpenMP isn't available — users who lack it (e.g. macOS Apple +# Clang without a separate `libomp`) just get the serial path. +find_package(OpenMP COMPONENTS CXX) +if(OpenMP_CXX_FOUND) + target_link_libraries(awkward-cpu-kernels PRIVATE OpenMP::OpenMP_CXX) + message(STATUS "OpenMP found: cpu-kernels will use threading where it pays") +else() + message(STATUS "OpenMP not found: cpu-kernels will run serially") +endif() + # Second tier: libawkward add_library(awkward SHARED ${LIBAWKWARD_SOURCES}) if(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang") diff --git a/awkward-cpp/include/awkward/common.h b/awkward-cpp/include/awkward/common.h index 06b54a2fd6..714c96e2ac 100644 --- a/awkward-cpp/include/awkward/common.h +++ b/awkward-cpp/include/awkward/common.h @@ -9,6 +9,7 @@ #ifdef _MSC_VER #define EXPORT_SYMBOL __declspec(dllexport) #define ERROR Error + #define __restrict__ __restrict using ssize_t = std::ptrdiff_t; #else #define EXPORT_SYMBOL __attribute__((visibility("default"))) diff --git a/awkward-cpp/src/cpu-kernels/awkward_ByteMaskedArray_reduce_next_64.cpp b/awkward-cpp/src/cpu-kernels/awkward_ByteMaskedArray_reduce_next_64.cpp index 71ec60cbd8..7f23b894c1 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_ByteMaskedArray_reduce_next_64.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_ByteMaskedArray_reduce_next_64.cpp @@ -6,26 +6,27 @@ ERROR awkward_ByteMaskedArray_reduce_next_64( int64_t* nextcarry, - int64_t* nextparents, + int64_t* nextoffsets, // length outlength + 1 int64_t* outindex, const int8_t* mask, - const int64_t* parents, - int64_t length, + const int64_t* offsets, + int64_t outlength, bool validwhen) { int64_t k = 0; - for (int64_t i = 0; i < length; i++) { - bool is_valid = ((mask[i] != 0) == validwhen); - - if (is_valid) { + nextoffsets[0] = 0; + for (int64_t bin = 0; bin < outlength; bin++) { + for (int64_t i = offsets[bin]; i < offsets[bin + 1]; i++) { + bool is_valid = ((mask[i] != 0) == validwhen); + if (is_valid) { nextcarry[k] = i; - nextparents[k] = parents[i]; - outindex[i] = k; + outindex[i] = k; k++; - } - else { + } + else { outindex[i] = -1; + } } + nextoffsets[bin + 1] = k; } - return success(); } diff --git a/awkward-cpp/src/cpu-kernels/awkward_Index_parents_to_offsets.cpp b/awkward-cpp/src/cpu-kernels/awkward_Index_parents_to_offsets.cpp new file mode 100644 index 0000000000..067dc3c8b8 --- /dev/null +++ b/awkward-cpp/src/cpu-kernels/awkward_Index_parents_to_offsets.cpp @@ -0,0 +1,41 @@ +// BSD 3-Clause License; see https://github.com/scikit-hep/awkward/blob/main/LICENSE + +#define FILENAME(line) FILENAME_FOR_EXCEPTIONS_C("src/cpu-kernels/awkward_Index_parents_to_offsets.cpp", line) + +#include "awkward/kernels.h" + +template +ERROR awkward_Index_parents_to_offsets( + T* tooffsets, + const T* fromparents, + int64_t lenparents, + int64_t outlength) { + // offsets are initialized to 0, so + // we only need to count the number of + // parents for each offset. + for (int64_t i = 0; i < lenparents; i++) { + int64_t p = fromparents[i]; + if (p < outlength) { + tooffsets[p + 1]++; + } + } + // offsets length is outlength + 1, so + // we need to do a cumulative sum + // to get the correct offsets. + for (int64_t i = 1; i <= outlength; i++) { + tooffsets[i] += tooffsets[i - 1]; + } + + return success(); +} +ERROR awkward_Index_parents_to_offsets_64( + int64_t* tooffsets, + const int64_t* fromparents, + int64_t lenparents, + int64_t outlength) { + return awkward_Index_parents_to_offsets( + tooffsets, + fromparents, + lenparents, + outlength); +} diff --git a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_fill.cpp b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_fill.cpp index d4636bb6c5..d94fb36cad 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_fill.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_fill.cpp @@ -17,42 +17,12 @@ ERROR awkward_IndexedArray_fill( } return success(); } -ERROR awkward_IndexedArray_fill_to64_from32( - int64_t* toindex, - int64_t toindexoffset, - const int32_t* fromindex, - int64_t length, - int64_t base) { - return awkward_IndexedArray_fill( - toindex, - toindexoffset, - fromindex, - length, - base); -} -ERROR awkward_IndexedArray_fill_to64_fromU32( - int64_t* toindex, - int64_t toindexoffset, - const uint32_t* fromindex, - int64_t length, - int64_t base) { - return awkward_IndexedArray_fill( - toindex, - toindexoffset, - fromindex, - length, - base); -} -ERROR awkward_IndexedArray_fill_to64_from64( - int64_t* toindex, - int64_t toindexoffset, - const int64_t* fromindex, - int64_t length, - int64_t base) { - return awkward_IndexedArray_fill( - toindex, - toindexoffset, - fromindex, - length, - base); -} + +#define WRAPPER(SUFFIX, FROM, TO) \ + ERROR awkward_IndexedArray_fill_to64_from##SUFFIX(TO* toindex, int64_t toindexoffset, const FROM* fromindex, int64_t length, int64_t base) { \ + return awkward_IndexedArray_fill(toindex, toindexoffset, fromindex, length, base); \ + } + +WRAPPER(32, int32_t, int64_t) +WRAPPER(U32, uint32_t, int64_t) +WRAPPER(64, int64_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_flatten_nextcarry.cpp b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_flatten_nextcarry.cpp index 5be4628483..0120c427cb 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_flatten_nextcarry.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_flatten_nextcarry.cpp @@ -23,36 +23,12 @@ ERROR awkward_IndexedArray_flatten_nextcarry( } return success(); } -ERROR awkward_IndexedArray32_flatten_nextcarry_64( - int64_t* tocarry, - const int32_t* fromindex, - int64_t lenindex, - int64_t lencontent) { - return awkward_IndexedArray_flatten_nextcarry( - tocarry, - fromindex, - lenindex, - lencontent); -} -ERROR awkward_IndexedArrayU32_flatten_nextcarry_64( - int64_t* tocarry, - const uint32_t* fromindex, - int64_t lenindex, - int64_t lencontent) { - return awkward_IndexedArray_flatten_nextcarry( - tocarry, - fromindex, - lenindex, - lencontent); -} -ERROR awkward_IndexedArray64_flatten_nextcarry_64( - int64_t* tocarry, - const int64_t* fromindex, - int64_t lenindex, - int64_t lencontent) { - return awkward_IndexedArray_flatten_nextcarry( - tocarry, - fromindex, - lenindex, - lencontent); -} + +#define WRAPPER(SUFFIX, C, T) \ + ERROR awkward_IndexedArray##SUFFIX(T* tocarry, const C* fromindex, int64_t lenindex, int64_t lencontent) { \ + return awkward_IndexedArray_flatten_nextcarry(tocarry, fromindex, lenindex, lencontent); \ + } + +WRAPPER(32_flatten_nextcarry_64, int32_t, int64_t) +WRAPPER(U32_flatten_nextcarry_64, uint32_t, int64_t) +WRAPPER(64_flatten_nextcarry_64, int64_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_flatten_none2empty.cpp b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_flatten_none2empty.cpp index e41134913e..6ee8e623be 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_flatten_none2empty.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_flatten_none2empty.cpp @@ -31,42 +31,12 @@ ERROR awkward_IndexedArray_flatten_none2empty( } return success(); } -ERROR awkward_IndexedArray32_flatten_none2empty_64( - int64_t* outoffsets, - const int32_t* outindex, - int64_t outindexlength, - const int64_t* offsets, - int64_t offsetslength) { - return awkward_IndexedArray_flatten_none2empty( - outoffsets, - outindex, - outindexlength, - offsets, - offsetslength); -} -ERROR awkward_IndexedArrayU32_flatten_none2empty_64( - int64_t* outoffsets, - const uint32_t* outindex, - int64_t outindexlength, - const int64_t* offsets, - int64_t offsetslength) { - return awkward_IndexedArray_flatten_none2empty( - outoffsets, - outindex, - outindexlength, - offsets, - offsetslength); -} -ERROR awkward_IndexedArray64_flatten_none2empty_64( - int64_t* outoffsets, - const int64_t* outindex, - int64_t outindexlength, - const int64_t* offsets, - int64_t offsetslength) { - return awkward_IndexedArray_flatten_none2empty( - outoffsets, - outindex, - outindexlength, - offsets, - offsetslength); -} + +#define WRAPPER(SUFFIX, T, C) \ + ERROR awkward_IndexedArray##SUFFIX(T* outoffsets, const C* outindex, int64_t outindexlength, const T* offsets, int64_t offsetslength) { \ + return awkward_IndexedArray_flatten_none2empty(outoffsets, outindex, outindexlength, offsets, offsetslength); \ + } + +WRAPPER(32_flatten_none2empty_64, int64_t, int32_t) +WRAPPER(U32_flatten_none2empty_64, int64_t, uint32_t) +WRAPPER(64_flatten_none2empty_64, int64_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_getitem_nextcarry.cpp b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_getitem_nextcarry.cpp index 196597a07c..aecd0ebf3a 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_getitem_nextcarry.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_getitem_nextcarry.cpp @@ -23,36 +23,12 @@ ERROR awkward_IndexedArray_getitem_nextcarry( } return success(); } -ERROR awkward_IndexedArray32_getitem_nextcarry_64( - int64_t* tocarry, - const int32_t* fromindex, - int64_t lenindex, - int64_t lencontent) { - return awkward_IndexedArray_getitem_nextcarry( - tocarry, - fromindex, - lenindex, - lencontent); -} -ERROR awkward_IndexedArrayU32_getitem_nextcarry_64( - int64_t* tocarry, - const uint32_t* fromindex, - int64_t lenindex, - int64_t lencontent) { - return awkward_IndexedArray_getitem_nextcarry( - tocarry, - fromindex, - lenindex, - lencontent); -} -ERROR awkward_IndexedArray64_getitem_nextcarry_64( - int64_t* tocarry, - const int64_t* fromindex, - int64_t lenindex, - int64_t lencontent) { - return awkward_IndexedArray_getitem_nextcarry( - tocarry, - fromindex, - lenindex, - lencontent); -} + +#define WRAPPER(SUFFIX, C, T) \ + ERROR awkward_IndexedArray##SUFFIX(T* tocarry, const C* fromindex, int64_t lenindex, int64_t lencontent) { \ + return awkward_IndexedArray_getitem_nextcarry(tocarry, fromindex, lenindex, lencontent); \ + } + +WRAPPER(32_getitem_nextcarry_64, int32_t, int64_t) +WRAPPER(U32_getitem_nextcarry_64, uint32_t, int64_t) +WRAPPER(64_getitem_nextcarry_64, int64_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_getitem_nextcarry_outindex.cpp b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_getitem_nextcarry_outindex.cpp index 711d6977e9..818f34fff8 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_getitem_nextcarry_outindex.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_getitem_nextcarry_outindex.cpp @@ -28,42 +28,12 @@ ERROR awkward_IndexedArray_getitem_nextcarry_outindex( } return success(); } -ERROR awkward_IndexedArray32_getitem_nextcarry_outindex_64( - int64_t* tocarry, - int32_t* toindex, - const int32_t* fromindex, - int64_t lenindex, - int64_t lencontent) { - return awkward_IndexedArray_getitem_nextcarry_outindex( - tocarry, - toindex, - fromindex, - lenindex, - lencontent); -} -ERROR awkward_IndexedArrayU32_getitem_nextcarry_outindex_64( - int64_t* tocarry, - uint32_t* toindex, - const uint32_t* fromindex, - int64_t lenindex, - int64_t lencontent) { - return awkward_IndexedArray_getitem_nextcarry_outindex( - tocarry, - toindex, - fromindex, - lenindex, - lencontent); -} -ERROR awkward_IndexedArray64_getitem_nextcarry_outindex_64( - int64_t* tocarry, - int64_t* toindex, - const int64_t* fromindex, - int64_t lenindex, - int64_t lencontent) { - return awkward_IndexedArray_getitem_nextcarry_outindex( - tocarry, - toindex, - fromindex, - lenindex, - lencontent); -} + +#define WRAPPER(SUFFIX, C, T) \ + ERROR awkward_IndexedArray##SUFFIX(T* tocarry, C* toindex, const C* fromindex, int64_t lenindex, int64_t lencontent) { \ + return awkward_IndexedArray_getitem_nextcarry_outindex(tocarry, toindex, fromindex, lenindex, lencontent); \ + } + +WRAPPER(32_getitem_nextcarry_outindex_64, int32_t, int64_t) +WRAPPER(U32_getitem_nextcarry_outindex_64, uint32_t, int64_t) +WRAPPER(64_getitem_nextcarry_outindex_64, int64_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_index_of_nulls.cpp b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_index_of_nulls.cpp index 857c12cbca..46077aaa3c 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_index_of_nulls.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_index_of_nulls.cpp @@ -8,55 +8,26 @@ template ERROR awkward_IndexedArray_index_of_nulls( int64_t* toindex, const C* fromindex, - int64_t lenindex, - const int64_t* parents, + const int64_t* offsets, + int64_t outlength, const int64_t* starts) { int64_t j = 0; - for (int64_t i = 0; i < lenindex; i++) { - if (fromindex[i] < 0) { - int64_t parent = parents[i]; - int64_t start = starts[parent]; - toindex[j++] = i - start; + for (int64_t bin = 0; bin < outlength; bin++) { + int64_t start = starts[bin]; + for (int64_t i = offsets[bin]; i < offsets[bin + 1]; i++) { + if (fromindex[i] < 0) { + toindex[j++] = i - start; + } } } return success(); } -ERROR awkward_IndexedArray32_index_of_nulls( - int64_t* toindex, - const int32_t* fromindex, - int64_t lenindex, - const int64_t* parents, - const int64_t* starts) { - return awkward_IndexedArray_index_of_nulls( - toindex, - fromindex, - lenindex, - parents, - starts); -} -ERROR awkward_IndexedArrayU32_index_of_nulls( - int64_t* toindex, - const uint32_t* fromindex, - int64_t lenindex, - const int64_t* parents, - const int64_t* starts) { - return awkward_IndexedArray_index_of_nulls( - toindex, - fromindex, - lenindex, - parents, - starts); -} -ERROR awkward_IndexedArray64_index_of_nulls( - int64_t* toindex, - const int64_t* fromindex, - int64_t lenindex, - const int64_t* parents, - const int64_t* starts) { - return awkward_IndexedArray_index_of_nulls( - toindex, - fromindex, - lenindex, - parents, - starts); -} + +#define WRAPPER(SUFFIX, C) \ + ERROR awkward_IndexedArray##SUFFIX(int64_t* toindex, const C* fromindex, const int64_t* offsets, int64_t outlength, const int64_t* starts) { \ + return awkward_IndexedArray_index_of_nulls(toindex, fromindex, offsets, outlength, starts); \ + } + +WRAPPER(32_index_of_nulls, int32_t) +WRAPPER(U32_index_of_nulls, uint32_t) +WRAPPER(64_index_of_nulls, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_local_preparenext_64.cpp b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_local_preparenext_64.cpp index 053de3163c..cb48326cc2 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_local_preparenext_64.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_local_preparenext_64.cpp @@ -7,20 +7,27 @@ ERROR awkward_IndexedArray_local_preparenext_64( int64_t* tocarry, const int64_t* /* starts */, // used in CUDA kernels - const int64_t* parents, - const int64_t parentslength, - const int64_t* nextparents, - const int64_t nextlen) { - int64_t j = 0; - int64_t parent = 0; - for (int64_t i = 0; i < parentslength; i++) { - parent = parents[i]; - if (j < nextlen && parent == nextparents[j]) { - tocarry[i] = j; - ++j; - } - else { - tocarry[i] = -1; + const int64_t* offsets, + const int64_t* nextoffsets, + int64_t outlength) { + // For each outer bin, walk the elements assigned to that bin and pair them + // up with the surviving inner elements in nextoffsets[bin..bin+1). Outer + // elements that survived receive their inner position k; the rest get -1. + for (int64_t bin = 0; bin < outlength; bin++) { + int64_t outer_start = offsets[bin]; + int64_t outer_stop = offsets[bin + 1]; + int64_t inner_start = nextoffsets[bin]; + int64_t inner_stop = nextoffsets[bin + 1]; + + int64_t k = inner_start; + for (int64_t i = outer_start; i < outer_stop; i++) { + if (k < inner_stop) { + tocarry[i] = k; + k++; + } + else { + tocarry[i] = -1; + } } } return success(); diff --git a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_numnull.cpp b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_numnull.cpp index cefec39d74..b5cca2321f 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_numnull.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_numnull.cpp @@ -17,30 +17,12 @@ ERROR awkward_IndexedArray_numnull( } return success(); } -ERROR awkward_IndexedArray32_numnull( - int64_t* numnull, - const int32_t* fromindex, - int64_t lenindex) { - return awkward_IndexedArray_numnull( - numnull, - fromindex, - lenindex); -} -ERROR awkward_IndexedArrayU32_numnull( - int64_t* numnull, - const uint32_t* fromindex, - int64_t lenindex) { - return awkward_IndexedArray_numnull( - numnull, - fromindex, - lenindex); -} -ERROR awkward_IndexedArray64_numnull( - int64_t* numnull, - const int64_t* fromindex, - int64_t lenindex) { - return awkward_IndexedArray_numnull( - numnull, - fromindex, - lenindex); -} + +#define WRAPPER(SUFFIX, C) \ + ERROR awkward_IndexedArray##SUFFIX(int64_t* numnull, const C* fromindex, int64_t lenindex) { \ + return awkward_IndexedArray_numnull(numnull, fromindex, lenindex); \ + } + +WRAPPER(32_numnull, int32_t) +WRAPPER(U32_numnull, uint32_t) +WRAPPER(64_numnull, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_numnull_parents.cpp b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_numnull_parents.cpp index 487fdabe72..30a4b000fc 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_numnull_parents.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_numnull_parents.cpp @@ -22,36 +22,12 @@ ERROR awkward_IndexedArray_numnull_parents( } return success(); } -ERROR awkward_IndexedArray32_numnull_parents( - int64_t* numnull, - int64_t* tolength, - const int32_t* fromindex, - int64_t lenindex) { - return awkward_IndexedArray_numnull_parents( - numnull, - tolength, - fromindex, - lenindex); -} -ERROR awkward_IndexedArrayU32_numnull_parents( - int64_t* numnull, - int64_t* tolength, - const uint32_t* fromindex, - int64_t lenindex) { - return awkward_IndexedArray_numnull_parents( - numnull, - tolength, - fromindex, - lenindex); -} -ERROR awkward_IndexedArray64_numnull_parents( - int64_t* numnull, - int64_t* tolength, - const int64_t* fromindex, - int64_t lenindex) { - return awkward_IndexedArray_numnull_parents( - numnull, - tolength, - fromindex, - lenindex); -} + +#define WRAPPER(SUFFIX, C) \ + ERROR awkward_IndexedArray##SUFFIX(int64_t* numnull, int64_t* tolength, const C* fromindex, int64_t lenindex) { \ + return awkward_IndexedArray_numnull_parents(numnull, tolength, fromindex, lenindex); \ + } + +WRAPPER(32_numnull_parents, int32_t) +WRAPPER(U32_numnull_parents, uint32_t) +WRAPPER(64_numnull_parents, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_overlay_mask.cpp b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_overlay_mask.cpp index 813e0195cb..1c00f9b9e1 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_overlay_mask.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_overlay_mask.cpp @@ -16,36 +16,12 @@ ERROR awkward_IndexedArray_overlay_mask( } return success(); } -ERROR awkward_IndexedArray32_overlay_mask8_to64( - int64_t* toindex, - const int8_t* mask, - const int32_t* fromindex, - int64_t length) { - return awkward_IndexedArray_overlay_mask( - toindex, - mask, - fromindex, - length); -} -ERROR awkward_IndexedArrayU32_overlay_mask8_to64( - int64_t* toindex, - const int8_t* mask, - const uint32_t* fromindex, - int64_t length) { - return awkward_IndexedArray_overlay_mask( - toindex, - mask, - fromindex, - length); -} -ERROR awkward_IndexedArray64_overlay_mask8_to64( - int64_t* toindex, - const int8_t* mask, - const int64_t* fromindex, - int64_t length) { - return awkward_IndexedArray_overlay_mask( - toindex, - mask, - fromindex, - length); -} + +#define WRAPPER(SUFFIX, C, M, TO) \ + ERROR awkward_IndexedArray##SUFFIX(TO* toindex, const M* mask, const C* fromindex, int64_t length) { \ + return awkward_IndexedArray_overlay_mask(toindex, mask, fromindex, length); \ + } + +WRAPPER(32_overlay_mask8_to64, int32_t, int8_t, int64_t) +WRAPPER(U32_overlay_mask8_to64, uint32_t, int8_t, int64_t) +WRAPPER(64_overlay_mask8_to64, int64_t, int8_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_ranges_carry_next_64.cpp b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_ranges_carry_next_64.cpp index 97968da430..81487cc2d6 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_ranges_carry_next_64.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_ranges_carry_next_64.cpp @@ -24,42 +24,12 @@ ERROR awkward_IndexedArray_ranges_carry_next_64( return success(); } -ERROR awkward_IndexedArray32_ranges_carry_next_64( - const int32_t* index, - const int64_t* fromstarts, - const int64_t* fromstops, - int64_t length, - int64_t* tocarry) { - return awkward_IndexedArray_ranges_carry_next_64( - index, - fromstarts, - fromstops, - length, - tocarry); -} -ERROR awkward_IndexedArrayU32_ranges_carry_next_64( - const uint32_t* index, - const int64_t* fromstarts, - const int64_t* fromstops, - int64_t length, - int64_t* tocarry) { - return awkward_IndexedArray_ranges_carry_next_64( - index, - fromstarts, - fromstops, - length, - tocarry); -} -ERROR awkward_IndexedArray64_ranges_carry_next_64( - const int64_t* index, - const int64_t* fromstarts, - const int64_t* fromstops, - int64_t length, - int64_t* tocarry) { - return awkward_IndexedArray_ranges_carry_next_64( - index, - fromstarts, - fromstops, - length, - tocarry); -} + +#define WRAPPER(SUFFIX, T) \ + ERROR awkward_IndexedArray##SUFFIX(const T* index, const int64_t* fromstarts, const int64_t* fromstops, int64_t length, int64_t* tocarry) { \ + return awkward_IndexedArray_ranges_carry_next_64(index, fromstarts, fromstops, length, tocarry); \ + } + +WRAPPER(32_ranges_carry_next_64, int32_t) +WRAPPER(U32_ranges_carry_next_64, uint32_t) +WRAPPER(64_ranges_carry_next_64, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_ranges_next_64.cpp b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_ranges_next_64.cpp index 11d3d7d84f..40a9a30ff2 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_ranges_next_64.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_ranges_next_64.cpp @@ -29,54 +29,12 @@ ERROR awkward_IndexedArray_ranges_next_64( return success(); } -ERROR awkward_IndexedArray32_ranges_next_64( - const int32_t* index, - const int64_t* fromstarts, - const int64_t* fromstops, - int64_t length, - int64_t* tostarts, - int64_t* tostops, - int64_t* tolength) { - return awkward_IndexedArray_ranges_next_64( - index, - fromstarts, - fromstops, - length, - tostarts, - tostops, - tolength); -} -ERROR awkward_IndexedArrayU32_ranges_next_64( - const uint32_t* index, - const int64_t* fromstarts, - const int64_t* fromstops, - int64_t length, - int64_t* tostarts, - int64_t* tostops, - int64_t* tolength) { - return awkward_IndexedArray_ranges_next_64( - index, - fromstarts, - fromstops, - length, - tostarts, - tostops, - tolength); -} -ERROR awkward_IndexedArray64_ranges_next_64( - const int64_t* index, - const int64_t* fromstarts, - const int64_t* fromstops, - int64_t length, - int64_t* tostarts, - int64_t* tostops, - int64_t* tolength) { - return awkward_IndexedArray_ranges_next_64( - index, - fromstarts, - fromstops, - length, - tostarts, - tostops, - tolength); -} + +#define WRAPPER(SUFFIX, T) \ + ERROR awkward_IndexedArray##SUFFIX(const T* index, const int64_t* fromstarts, const int64_t* fromstops, int64_t length, int64_t* tostarts, int64_t* tostops, int64_t* tolength) { \ + return awkward_IndexedArray_ranges_next_64(index, fromstarts, fromstops, length, tostarts, tostops, tolength); \ + } + +WRAPPER(32_ranges_next_64, int32_t) +WRAPPER(U32_ranges_next_64, uint32_t) +WRAPPER(64_ranges_next_64, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_reduce_next_64.cpp b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_reduce_next_64.cpp index ebee30a898..f464f80b1b 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_reduce_next_64.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_reduce_next_64.cpp @@ -7,67 +7,34 @@ template ERROR awkward_IndexedArray_reduce_next_64( int64_t* nextcarry, - int64_t* nextparents, + int64_t* nextoffsets, // length outlength + 1 int64_t* outindex, const T* index, - const int64_t* parents, - int64_t length) { + const int64_t* offsets, + int64_t outlength) { int64_t k = 0; - for (int64_t i = 0; i < length; i++) { - if (index[i] >= 0) { - nextcarry[k] = index[i]; - nextparents[k] = parents[i]; - outindex[i] = k; - k++; - } - else { - outindex[i] = -1; + nextoffsets[0] = 0; + for (int64_t bin = 0; bin < outlength; bin++) { + for (int64_t i = offsets[bin]; i < offsets[bin + 1]; i++) { + if (index[i] >= 0) { + nextcarry[k] = index[i]; + outindex[i] = k; + k++; + } + else { + outindex[i] = -1; + } } + nextoffsets[bin + 1] = k; } return success(); } -ERROR awkward_IndexedArray32_reduce_next_64( - int64_t* nextcarry, - int64_t* nextparents, - int64_t* outindex, - const int32_t* index, - int64_t* parents, - int64_t length) { - return awkward_IndexedArray_reduce_next_64( - nextcarry, - nextparents, - outindex, - index, - parents, - length); -} -ERROR awkward_IndexedArrayU32_reduce_next_64( - int64_t* nextcarry, - int64_t* nextparents, - int64_t* outindex, - const uint32_t* index, - int64_t* parents, - int64_t length) { - return awkward_IndexedArray_reduce_next_64( - nextcarry, - nextparents, - outindex, - index, - parents, - length); -} -ERROR awkward_IndexedArray64_reduce_next_64( - int64_t* nextcarry, - int64_t* nextparents, - int64_t* outindex, - const int64_t* index, - int64_t* parents, - int64_t length) { - return awkward_IndexedArray_reduce_next_64( - nextcarry, - nextparents, - outindex, - index, - parents, - length); -} + +#define WRAPPER(SUFFIX, T) \ + ERROR awkward_IndexedArray##SUFFIX(int64_t* nextcarry, int64_t* nextoffsets, int64_t* outindex, const T* index, const int64_t* offsets, int64_t outlength) { \ + return awkward_IndexedArray_reduce_next_64(nextcarry, nextoffsets, outindex, index, offsets, outlength); \ + } + +WRAPPER(32_reduce_next_64, int32_t) +WRAPPER(U32_reduce_next_64, uint32_t) +WRAPPER(64_reduce_next_64, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_reduce_next_nonlocal_nextshifts_64.cpp b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_reduce_next_nonlocal_nextshifts_64.cpp index 96cd51a572..a9b1b09e6e 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_reduce_next_nonlocal_nextshifts_64.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_reduce_next_nonlocal_nextshifts_64.cpp @@ -22,30 +22,12 @@ ERROR awkward_IndexedArray_reduce_next_nonlocal_nextshifts_64( } return success(); } -ERROR awkward_IndexedArray32_reduce_next_nonlocal_nextshifts_64( - int64_t* nextshifts, - const int32_t* index, - int64_t length) { - return awkward_IndexedArray_reduce_next_nonlocal_nextshifts_64( - nextshifts, - index, - length); -} -ERROR awkward_IndexedArrayU32_reduce_next_nonlocal_nextshifts_64( - int64_t* nextshifts, - const uint32_t* index, - int64_t length) { - return awkward_IndexedArray_reduce_next_nonlocal_nextshifts_64( - nextshifts, - index, - length); -} -ERROR awkward_IndexedArray64_reduce_next_nonlocal_nextshifts_64( - int64_t* nextshifts, - const int64_t* index, - int64_t length) { - return awkward_IndexedArray_reduce_next_nonlocal_nextshifts_64( - nextshifts, - index, - length); -} + +#define WRAPPER(SUFFIX, T) \ + ERROR awkward_IndexedArray##SUFFIX(int64_t* nextshifts, const T* index, int64_t length) { \ + return awkward_IndexedArray_reduce_next_nonlocal_nextshifts_64(nextshifts, index, length); \ + } + +WRAPPER(32_reduce_next_nonlocal_nextshifts_64, int32_t) +WRAPPER(U32_reduce_next_nonlocal_nextshifts_64, uint32_t) +WRAPPER(64_reduce_next_nonlocal_nextshifts_64, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_reduce_next_nonlocal_nextshifts_fromshifts_64.cpp b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_reduce_next_nonlocal_nextshifts_fromshifts_64.cpp index 611f370687..1e5dd0fdf6 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_reduce_next_nonlocal_nextshifts_fromshifts_64.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_reduce_next_nonlocal_nextshifts_fromshifts_64.cpp @@ -23,36 +23,12 @@ ERROR awkward_IndexedArray_reduce_next_nonlocal_nextshifts_fromshifts_64( } return success(); } -ERROR awkward_IndexedArray32_reduce_next_nonlocal_nextshifts_fromshifts_64( - int64_t* nextshifts, - const int32_t* index, - int64_t length, - const int64_t* shifts) { - return awkward_IndexedArray_reduce_next_nonlocal_nextshifts_fromshifts_64( - nextshifts, - index, - length, - shifts); -} -ERROR awkward_IndexedArrayU32_reduce_next_nonlocal_nextshifts_fromshifts_64( - int64_t* nextshifts, - const uint32_t* index, - int64_t length, - const int64_t* shifts) { - return awkward_IndexedArray_reduce_next_nonlocal_nextshifts_fromshifts_64( - nextshifts, - index, - length, - shifts); -} -ERROR awkward_IndexedArray64_reduce_next_nonlocal_nextshifts_fromshifts_64( - int64_t* nextshifts, - const int64_t* index, - int64_t length, - const int64_t* shifts) { - return awkward_IndexedArray_reduce_next_nonlocal_nextshifts_fromshifts_64( - nextshifts, - index, - length, - shifts); -} + +#define WRAPPER(SUFFIX, T) \ + ERROR awkward_IndexedArray##SUFFIX(int64_t* nextshifts, const T* index, int64_t length, const int64_t* shifts) { \ + return awkward_IndexedArray_reduce_next_nonlocal_nextshifts_fromshifts_64(nextshifts, index, length, shifts); \ + } + +WRAPPER(32_reduce_next_nonlocal_nextshifts_fromshifts_64, int32_t) +WRAPPER(U32_reduce_next_nonlocal_nextshifts_fromshifts_64, uint32_t) +WRAPPER(64_reduce_next_nonlocal_nextshifts_fromshifts_64, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_simplify.cpp b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_simplify.cpp index 363aeb4b60..34de0d8acd 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_simplify.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_simplify.cpp @@ -25,120 +25,18 @@ ERROR awkward_IndexedArray_simplify( } return success(); } -ERROR awkward_IndexedArray32_simplify32_to64( - int64_t* toindex, - const int32_t* outerindex, - int64_t outerlength, - const int32_t* innerindex, - int64_t innerlength) { - return awkward_IndexedArray_simplify( - toindex, - outerindex, - outerlength, - innerindex, - innerlength); -} -ERROR awkward_IndexedArray32_simplifyU32_to64( - int64_t* toindex, - const int32_t* outerindex, - int64_t outerlength, - const uint32_t* innerindex, - int64_t innerlength) { - return awkward_IndexedArray_simplify( - toindex, - outerindex, - outerlength, - innerindex, - innerlength); -} -ERROR awkward_IndexedArray32_simplify64_to64( - int64_t* toindex, - const int32_t* outerindex, - int64_t outerlength, - const int64_t* innerindex, - int64_t innerlength) { - return awkward_IndexedArray_simplify( - toindex, - outerindex, - outerlength, - innerindex, - innerlength); -} -ERROR awkward_IndexedArrayU32_simplify32_to64( - int64_t* toindex, - const uint32_t* outerindex, - int64_t outerlength, - const int32_t* innerindex, - int64_t innerlength) { - return awkward_IndexedArray_simplify( - toindex, - outerindex, - outerlength, - innerindex, - innerlength); -} -ERROR awkward_IndexedArrayU32_simplifyU32_to64( - int64_t* toindex, - const uint32_t* outerindex, - int64_t outerlength, - const uint32_t* innerindex, - int64_t innerlength) { - return awkward_IndexedArray_simplify( - toindex, - outerindex, - outerlength, - innerindex, - innerlength); -} -ERROR awkward_IndexedArrayU32_simplify64_to64( - int64_t* toindex, - const uint32_t* outerindex, - int64_t outerlength, - const int64_t* innerindex, - int64_t innerlength) { - return awkward_IndexedArray_simplify( - toindex, - outerindex, - outerlength, - innerindex, - innerlength); -} -ERROR awkward_IndexedArray64_simplify32_to64( - int64_t* toindex, - const int64_t* outerindex, - int64_t outerlength, - const int32_t* innerindex, - int64_t innerlength) { - return awkward_IndexedArray_simplify( - toindex, - outerindex, - outerlength, - innerindex, - innerlength); -} -ERROR awkward_IndexedArray64_simplifyU32_to64( - int64_t* toindex, - const int64_t* outerindex, - int64_t outerlength, - const uint32_t* innerindex, - int64_t innerlength) { - return awkward_IndexedArray_simplify( - toindex, - outerindex, - outerlength, - innerindex, - innerlength); -} -ERROR awkward_IndexedArray64_simplify64_to64( - int64_t* toindex, - const int64_t* outerindex, - int64_t outerlength, - const int64_t* innerindex, - int64_t innerlength) { - return awkward_IndexedArray_simplify( - toindex, - outerindex, - outerlength, - innerindex, - innerlength); -} + +#define WRAPPER(SUFFIX, OUT, IN, TO) \ + ERROR awkward_IndexedArray##SUFFIX(TO* toindex, const OUT* outerindex, int64_t outerlength, const IN* innerindex, int64_t innerlength) { \ + return awkward_IndexedArray_simplify(toindex, outerindex, outerlength, innerindex, innerlength); \ + } + +WRAPPER(32_simplify32_to64, int32_t, int32_t, int64_t) +WRAPPER(32_simplifyU32_to64, int32_t, uint32_t, int64_t) +WRAPPER(32_simplify64_to64, int32_t, int64_t, int64_t) +WRAPPER(U32_simplify32_to64, uint32_t, int32_t, int64_t) +WRAPPER(U32_simplifyU32_to64, uint32_t, uint32_t, int64_t) +WRAPPER(U32_simplify64_to64, uint32_t, int64_t, int64_t) +WRAPPER(64_simplify32_to64, int64_t, int32_t, int64_t) +WRAPPER(64_simplifyU32_to64, int64_t, uint32_t, int64_t) +WRAPPER(64_simplify64_to64, int64_t, int64_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_validity.cpp b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_validity.cpp index 894e5c9c52..36f4ab5e46 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_validity.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_IndexedArray_validity.cpp @@ -23,36 +23,12 @@ ERROR awkward_IndexedArray_validity( } return success(); } -ERROR awkward_IndexedArray32_validity( - const int32_t* index, - int64_t length, - int64_t lencontent, - bool isoption) { - return awkward_IndexedArray_validity( - index, - length, - lencontent, - isoption); -} -ERROR awkward_IndexedArrayU32_validity( - const uint32_t* index, - int64_t length, - int64_t lencontent, - bool isoption) { - return awkward_IndexedArray_validity( - index, - length, - lencontent, - isoption); -} -ERROR awkward_IndexedArray64_validity( - const int64_t* index, - int64_t length, - int64_t lencontent, - bool isoption) { - return awkward_IndexedArray_validity( - index, - length, - lencontent, - isoption); -} + +#define WRAPPER(SUFFIX, C) \ + ERROR awkward_IndexedArray##SUFFIX(const C* index, int64_t length, int64_t lencontent, bool isoption) { \ + return awkward_IndexedArray_validity(index, length, lencontent, isoption); \ + } + +WRAPPER(32_validity, int32_t) +WRAPPER(U32_validity, uint32_t) +WRAPPER(64_validity, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_ListArray_broadcast_tooffsets.cpp b/awkward-cpp/src/cpu-kernels/awkward_ListArray_broadcast_tooffsets.cpp index 15608b17d4..876efb1ba8 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_ListArray_broadcast_tooffsets.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_ListArray_broadcast_tooffsets.cpp @@ -33,48 +33,12 @@ ERROR awkward_ListArray_broadcast_tooffsets( } return success(); } -ERROR awkward_ListArray32_broadcast_tooffsets_64( - int64_t* tocarry, - const int64_t* fromoffsets, - int64_t offsetslength, - const int32_t* fromstarts, - const int32_t* fromstops, - int64_t lencontent) { - return awkward_ListArray_broadcast_tooffsets( - tocarry, - fromoffsets, - offsetslength, - fromstarts, - fromstops, - lencontent); -} -ERROR awkward_ListArrayU32_broadcast_tooffsets_64( - int64_t* tocarry, - const int64_t* fromoffsets, - int64_t offsetslength, - const uint32_t* fromstarts, - const uint32_t* fromstops, - int64_t lencontent) { - return awkward_ListArray_broadcast_tooffsets( - tocarry, - fromoffsets, - offsetslength, - fromstarts, - fromstops, - lencontent); -} -ERROR awkward_ListArray64_broadcast_tooffsets_64( - int64_t* tocarry, - const int64_t* fromoffsets, - int64_t offsetslength, - const int64_t* fromstarts, - const int64_t* fromstops, - int64_t lencontent) { - return awkward_ListArray_broadcast_tooffsets( - tocarry, - fromoffsets, - offsetslength, - fromstarts, - fromstops, - lencontent); -} + +#define WRAPPER(SUFFIX, C, T) \ + ERROR awkward_ListArray##SUFFIX(T* tocarry, const T* fromoffsets, int64_t offsetslength, const C* fromstarts, const C* fromstops, int64_t lencontent) { \ + return awkward_ListArray_broadcast_tooffsets(tocarry, fromoffsets, offsetslength, fromstarts, fromstops, lencontent); \ + } + +WRAPPER(32_broadcast_tooffsets_64, int32_t, int64_t) +WRAPPER(U32_broadcast_tooffsets_64, uint32_t, int64_t) +WRAPPER(64_broadcast_tooffsets_64, int64_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_ListArray_combinations.cpp b/awkward-cpp/src/cpu-kernels/awkward_ListArray_combinations.cpp index ba00c814fb..e3fbe8b942 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_ListArray_combinations.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_ListArray_combinations.cpp @@ -33,60 +33,12 @@ ERROR awkward_ListArray_combinations( } return success(); } -ERROR awkward_ListArray32_combinations_64( - int64_t** tocarry, - int64_t* toindex, - int64_t* fromindex, - int64_t n, - bool replacement, - const int32_t* starts, - const int32_t* stops, - int64_t length) { - return awkward_ListArray_combinations( - tocarry, - toindex, - fromindex, - n, - replacement, - starts, - stops, - length); -} -ERROR awkward_ListArrayU32_combinations_64( - int64_t** tocarry, - int64_t* toindex, - int64_t* fromindex, - int64_t n, - bool replacement, - const uint32_t* starts, - const uint32_t* stops, - int64_t length) { - return awkward_ListArray_combinations( - tocarry, - toindex, - fromindex, - n, - replacement, - starts, - stops, - length); -} -ERROR awkward_ListArray64_combinations_64( - int64_t** tocarry, - int64_t* toindex, - int64_t* fromindex, - int64_t n, - bool replacement, - const int64_t* starts, - const int64_t* stops, - int64_t length) { - return awkward_ListArray_combinations( - tocarry, - toindex, - fromindex, - n, - replacement, - starts, - stops, - length); -} + +#define WRAPPER(SUFFIX, C) \ + ERROR awkward_ListArray##SUFFIX(int64_t** tocarry, int64_t* toindex, int64_t* fromindex, int64_t n, bool replacement, const C* starts, const C* stops, int64_t length) { \ + return awkward_ListArray_combinations(tocarry, toindex, fromindex, n, replacement, starts, stops, length); \ + } + +WRAPPER(32_combinations_64, int32_t) +WRAPPER(U32_combinations_64, uint32_t) +WRAPPER(64_combinations_64, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_ListArray_combinations_length.cpp b/awkward-cpp/src/cpu-kernels/awkward_ListArray_combinations_length.cpp index 6de602217b..fd5cb998d5 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_ListArray_combinations_length.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_ListArray_combinations_length.cpp @@ -43,54 +43,12 @@ ERROR awkward_ListArray_combinations_length( } return success(); } -ERROR awkward_ListArray32_combinations_length_64( - int64_t* totallen, - int64_t* tooffsets, - int64_t n, - bool replacement, - const int32_t* starts, - const int32_t* stops, - int64_t length) { - return awkward_ListArray_combinations_length( - totallen, - tooffsets, - n, - replacement, - starts, - stops, - length); -} -ERROR awkward_ListArrayU32_combinations_length_64( - int64_t* totallen, - int64_t* tooffsets, - int64_t n, - bool replacement, - const uint32_t* starts, - const uint32_t* stops, - int64_t length) { - return awkward_ListArray_combinations_length( - totallen, - tooffsets, - n, - replacement, - starts, - stops, - length); -} -ERROR awkward_ListArray64_combinations_length_64( - int64_t* totallen, - int64_t* tooffsets, - int64_t n, - bool replacement, - const int64_t* starts, - const int64_t* stops, - int64_t length) { - return awkward_ListArray_combinations_length( - totallen, - tooffsets, - n, - replacement, - starts, - stops, - length); -} + +#define WRAPPER(SUFFIX, C, T) \ + ERROR awkward_ListArray##SUFFIX(int64_t* totallen, T* tooffsets, int64_t n, bool replacement, const C* starts, const C* stops, int64_t length) { \ + return awkward_ListArray_combinations_length(totallen, tooffsets, n, replacement, starts, stops, length); \ + } + +WRAPPER(32_combinations_length_64, int32_t, int64_t) +WRAPPER(U32_combinations_length_64, uint32_t, int64_t) +WRAPPER(64_combinations_length_64, int64_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_ListArray_compact_offsets.cpp b/awkward-cpp/src/cpu-kernels/awkward_ListArray_compact_offsets.cpp index 95b250b0fc..68e6c3d7c8 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_ListArray_compact_offsets.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_ListArray_compact_offsets.cpp @@ -21,36 +21,12 @@ ERROR awkward_ListArray_compact_offsets( } return success(); } -ERROR awkward_ListArray32_compact_offsets_64( - int64_t* tooffsets, - const int32_t* fromstarts, - const int32_t* fromstops, - int64_t length) { - return awkward_ListArray_compact_offsets( - tooffsets, - fromstarts, - fromstops, - length); -} -ERROR awkward_ListArrayU32_compact_offsets_64( - int64_t* tooffsets, - const uint32_t* fromstarts, - const uint32_t* fromstops, - int64_t length) { - return awkward_ListArray_compact_offsets( - tooffsets, - fromstarts, - fromstops, - length); -} -ERROR awkward_ListArray64_compact_offsets_64( - int64_t* tooffsets, - const int64_t* fromstarts, - const int64_t* fromstops, - int64_t length) { - return awkward_ListArray_compact_offsets( - tooffsets, - fromstarts, - fromstops, - length); -} + +#define WRAPPER(SUFFIX, C, T) \ + ERROR awkward_ListArray##SUFFIX(T* tooffsets, const C* fromstarts, const C* fromstops, int64_t length) { \ + return awkward_ListArray_compact_offsets(tooffsets, fromstarts, fromstops, length); \ + } + +WRAPPER(32_compact_offsets_64, int32_t, int64_t) +WRAPPER(U32_compact_offsets_64, uint32_t, int64_t) +WRAPPER(64_compact_offsets_64, int64_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_ListArray_fill.cpp b/awkward-cpp/src/cpu-kernels/awkward_ListArray_fill.cpp index 1f84b79a6b..24b1957f89 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_ListArray_fill.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_ListArray_fill.cpp @@ -20,60 +20,12 @@ ERROR awkward_ListArray_fill( } return success(); } -ERROR awkward_ListArray_fill_to64_from32( - int64_t* tostarts, - int64_t tostartsoffset, - int64_t* tostops, - int64_t tostopsoffset, - const int32_t* fromstarts, - const int32_t* fromstops, - int64_t length, - int64_t base) { - return awkward_ListArray_fill( - tostarts, - tostartsoffset, - tostops, - tostopsoffset, - fromstarts, - fromstops, - length, - base); -} -ERROR awkward_ListArray_fill_to64_fromU32( - int64_t* tostarts, - int64_t tostartsoffset, - int64_t* tostops, - int64_t tostopsoffset, - const uint32_t* fromstarts, - const uint32_t* fromstops, - int64_t length, - int64_t base) { - return awkward_ListArray_fill( - tostarts, - tostartsoffset, - tostops, - tostopsoffset, - fromstarts, - fromstops, - length, - base); -} -ERROR awkward_ListArray_fill_to64_from64( - int64_t* tostarts, - int64_t tostartsoffset, - int64_t* tostops, - int64_t tostopsoffset, - const int64_t* fromstarts, - const int64_t* fromstops, - int64_t length, - int64_t base) { - return awkward_ListArray_fill( - tostarts, - tostartsoffset, - tostops, - tostopsoffset, - fromstarts, - fromstops, - length, - base); -} + +#define WRAPPER(SUFFIX, FROM, TO) \ + ERROR awkward_ListArray_fill_to64_from##SUFFIX(TO* tostarts, int64_t tostartsoffset, TO* tostops, int64_t tostopsoffset, const FROM* fromstarts, const FROM* fromstops, int64_t length, int64_t base) { \ + return awkward_ListArray_fill(tostarts, tostartsoffset, tostops, tostopsoffset, fromstarts, fromstops, length, base); \ + } + +WRAPPER(32, int32_t, int64_t) +WRAPPER(U32, uint32_t, int64_t) +WRAPPER(64, int64_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_jagged_apply.cpp b/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_jagged_apply.cpp index 607479447a..6d4e81df3b 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_jagged_apply.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_jagged_apply.cpp @@ -53,72 +53,12 @@ ERROR awkward_ListArray_getitem_jagged_apply( tooffsets[sliceouterlen] = (T)k; return success(); } -ERROR awkward_ListArray32_getitem_jagged_apply_64( - int64_t* tooffsets, - int64_t* tocarry, - const int64_t* slicestarts, - const int64_t* slicestops, - int64_t sliceouterlen, - const int64_t* sliceindex, - int64_t sliceinnerlen, - const int32_t* fromstarts, - const int32_t* fromstops, - int64_t contentlen) { - return awkward_ListArray_getitem_jagged_apply( - tooffsets, - tocarry, - slicestarts, - slicestops, - sliceouterlen, - sliceindex, - sliceinnerlen, - fromstarts, - fromstops, - contentlen); -} -ERROR awkward_ListArrayU32_getitem_jagged_apply_64( - int64_t* tooffsets, - int64_t* tocarry, - const int64_t* slicestarts, - const int64_t* slicestops, - int64_t sliceouterlen, - const int64_t* sliceindex, - int64_t sliceinnerlen, - const uint32_t* fromstarts, - const uint32_t* fromstops, - int64_t contentlen) { - return awkward_ListArray_getitem_jagged_apply( - tooffsets, - tocarry, - slicestarts, - slicestops, - sliceouterlen, - sliceindex, - sliceinnerlen, - fromstarts, - fromstops, - contentlen); -} -ERROR awkward_ListArray64_getitem_jagged_apply_64( - int64_t* tooffsets, - int64_t* tocarry, - const int64_t* slicestarts, - const int64_t* slicestops, - int64_t sliceouterlen, - const int64_t* sliceindex, - int64_t sliceinnerlen, - const int64_t* fromstarts, - const int64_t* fromstops, - int64_t contentlen) { - return awkward_ListArray_getitem_jagged_apply( - tooffsets, - tocarry, - slicestarts, - slicestops, - sliceouterlen, - sliceindex, - sliceinnerlen, - fromstarts, - fromstops, - contentlen); -} + +#define WRAPPER(SUFFIX, C, T) \ + ERROR awkward_ListArray##SUFFIX(T* tooffsets, T* tocarry, const T* slicestarts, const T* slicestops, int64_t sliceouterlen, const T* sliceindex, int64_t sliceinnerlen, const C* fromstarts, const C* fromstops, int64_t contentlen) { \ + return awkward_ListArray_getitem_jagged_apply(tooffsets, tocarry, slicestarts, slicestops, sliceouterlen, sliceindex, sliceinnerlen, fromstarts, fromstops, contentlen); \ + } + +WRAPPER(32_getitem_jagged_apply_64, int32_t, int64_t) +WRAPPER(U32_getitem_jagged_apply_64, uint32_t, int64_t) +WRAPPER(64_getitem_jagged_apply_64, int64_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_jagged_descend.cpp b/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_jagged_descend.cpp index df55ce180b..d8f6d8a572 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_jagged_descend.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_jagged_descend.cpp @@ -30,48 +30,12 @@ ERROR awkward_ListArray_getitem_jagged_descend( } return success(); } -ERROR awkward_ListArray32_getitem_jagged_descend_64( - int64_t* tooffsets, - const int64_t* slicestarts, - const int64_t* slicestops, - int64_t sliceouterlen, - const int32_t* fromstarts, - const int32_t* fromstops) { - return awkward_ListArray_getitem_jagged_descend( - tooffsets, - slicestarts, - slicestops, - sliceouterlen, - fromstarts, - fromstops); -} -ERROR awkward_ListArrayU32_getitem_jagged_descend_64( - int64_t* tooffsets, - const int64_t* slicestarts, - const int64_t* slicestops, - int64_t sliceouterlen, - const uint32_t* fromstarts, - const uint32_t* fromstops) { - return awkward_ListArray_getitem_jagged_descend( - tooffsets, - slicestarts, - slicestops, - sliceouterlen, - fromstarts, - fromstops); -} -ERROR awkward_ListArray64_getitem_jagged_descend_64( - int64_t* tooffsets, - const int64_t* slicestarts, - const int64_t* slicestops, - int64_t sliceouterlen, - const int64_t* fromstarts, - const int64_t* fromstops) { - return awkward_ListArray_getitem_jagged_descend( - tooffsets, - slicestarts, - slicestops, - sliceouterlen, - fromstarts, - fromstops); -} + +#define WRAPPER(SUFFIX, C, T) \ + ERROR awkward_ListArray##SUFFIX(T* tooffsets, const T* slicestarts, const T* slicestops, int64_t sliceouterlen, const C* fromstarts, const C* fromstops) { \ + return awkward_ListArray_getitem_jagged_descend(tooffsets, slicestarts, slicestops, sliceouterlen, fromstarts, fromstops); \ + } + +WRAPPER(32_getitem_jagged_descend_64, int32_t, int64_t) +WRAPPER(U32_getitem_jagged_descend_64, uint32_t, int64_t) +WRAPPER(64_getitem_jagged_descend_64, int64_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_jagged_expand.cpp b/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_jagged_expand.cpp index 791d438454..b692562006 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_jagged_expand.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_jagged_expand.cpp @@ -31,60 +31,12 @@ ERROR awkward_ListArray_getitem_jagged_expand( } return success(); } -ERROR awkward_ListArray32_getitem_jagged_expand_64( - int64_t* multistarts, - int64_t* multistops, - const int64_t* singleoffsets, - int64_t* tocarry, - const int32_t* fromstarts, - const int32_t* fromstops, - int64_t jaggedsize, - int64_t length) { - return awkward_ListArray_getitem_jagged_expand( - multistarts, - multistops, - singleoffsets, - tocarry, - fromstarts, - fromstops, - jaggedsize, - length); -} -ERROR awkward_ListArrayU32_getitem_jagged_expand_64( - int64_t* multistarts, - int64_t* multistops, - const int64_t* singleoffsets, - int64_t* tocarry, - const uint32_t* fromstarts, - const uint32_t* fromstops, - int64_t jaggedsize, - int64_t length) { - return awkward_ListArray_getitem_jagged_expand( - multistarts, - multistops, - singleoffsets, - tocarry, - fromstarts, - fromstops, - jaggedsize, - length); -} -ERROR awkward_ListArray64_getitem_jagged_expand_64( - int64_t* multistarts, - int64_t* multistops, - const int64_t* singleoffsets, - int64_t* tocarry, - const int64_t* fromstarts, - const int64_t* fromstops, - int64_t jaggedsize, - int64_t length) { - return awkward_ListArray_getitem_jagged_expand( - multistarts, - multistops, - singleoffsets, - tocarry, - fromstarts, - fromstops, - jaggedsize, - length); -} + +#define WRAPPER(SUFFIX, C, T) \ + ERROR awkward_ListArray##SUFFIX(T* multistarts, T* multistops, const T* singleoffsets, T* tocarry, const C* fromstarts, const C* fromstops, int64_t jaggedsize, int64_t length) { \ + return awkward_ListArray_getitem_jagged_expand(multistarts, multistops, singleoffsets, tocarry, fromstarts, fromstops, jaggedsize, length); \ + } + +WRAPPER(32_getitem_jagged_expand_64, int32_t, int64_t) +WRAPPER(U32_getitem_jagged_expand_64, uint32_t, int64_t) +WRAPPER(64_getitem_jagged_expand_64, int64_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_next_array.cpp b/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_next_array.cpp index cd2fa57caf..3f8ae189e1 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_next_array.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_next_array.cpp @@ -37,60 +37,12 @@ ERROR awkward_ListArray_getitem_next_array( } return success(); } -ERROR awkward_ListArray32_getitem_next_array_64( - int64_t* tocarry, - int64_t* toadvanced, - const int32_t* fromstarts, - const int32_t* fromstops, - const int64_t* fromarray, - int64_t lenstarts, - int64_t lenarray, - int64_t lencontent) { - return awkward_ListArray_getitem_next_array( - tocarry, - toadvanced, - fromstarts, - fromstops, - fromarray, - lenstarts, - lenarray, - lencontent); -} -ERROR awkward_ListArrayU32_getitem_next_array_64( - int64_t* tocarry, - int64_t* toadvanced, - const uint32_t* fromstarts, - const uint32_t* fromstops, - const int64_t* fromarray, - int64_t lenstarts, - int64_t lenarray, - int64_t lencontent) { - return awkward_ListArray_getitem_next_array( - tocarry, - toadvanced, - fromstarts, - fromstops, - fromarray, - lenstarts, - lenarray, - lencontent); -} -ERROR awkward_ListArray64_getitem_next_array_64( - int64_t* tocarry, - int64_t* toadvanced, - const int64_t* fromstarts, - const int64_t* fromstops, - const int64_t* fromarray, - int64_t lenstarts, - int64_t lenarray, - int64_t lencontent) { - return awkward_ListArray_getitem_next_array( - tocarry, - toadvanced, - fromstarts, - fromstops, - fromarray, - lenstarts, - lenarray, - lencontent); -} + +#define WRAPPER(SUFFIX, C, T) \ + ERROR awkward_ListArray##SUFFIX(T* tocarry, T* toadvanced, const C* fromstarts, const C* fromstops, const T* fromarray, int64_t lenstarts, int64_t lenarray, int64_t lencontent) { \ + return awkward_ListArray_getitem_next_array(tocarry, toadvanced, fromstarts, fromstops, fromarray, lenstarts, lenarray, lencontent); \ + } + +WRAPPER(32_getitem_next_array_64, int32_t, int64_t) +WRAPPER(U32_getitem_next_array_64, uint32_t, int64_t) +WRAPPER(64_getitem_next_array_64, int64_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_next_array_advanced.cpp b/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_next_array_advanced.cpp index 36348e1c08..48d95b7f39 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_next_array_advanced.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_next_array_advanced.cpp @@ -35,60 +35,12 @@ ERROR awkward_ListArray_getitem_next_array_advanced( } return success(); } -ERROR awkward_ListArray32_getitem_next_array_advanced_64( - int64_t* tocarry, - int64_t* toadvanced, - const int32_t* fromstarts, - const int32_t* fromstops, - const int64_t* fromarray, - const int64_t* fromadvanced, - int64_t lenstarts, - int64_t lencontent) { - return awkward_ListArray_getitem_next_array_advanced( - tocarry, - toadvanced, - fromstarts, - fromstops, - fromarray, - fromadvanced, - lenstarts, - lencontent); -} -ERROR awkward_ListArrayU32_getitem_next_array_advanced_64( - int64_t* tocarry, - int64_t* toadvanced, - const uint32_t* fromstarts, - const uint32_t* fromstops, - const int64_t* fromarray, - const int64_t* fromadvanced, - int64_t lenstarts, - int64_t lencontent) { - return awkward_ListArray_getitem_next_array_advanced( - tocarry, - toadvanced, - fromstarts, - fromstops, - fromarray, - fromadvanced, - lenstarts, - lencontent); -} -ERROR awkward_ListArray64_getitem_next_array_advanced_64( - int64_t* tocarry, - int64_t* toadvanced, - const int64_t* fromstarts, - const int64_t* fromstops, - const int64_t* fromarray, - const int64_t* fromadvanced, - int64_t lenstarts, - int64_t lencontent) { - return awkward_ListArray_getitem_next_array_advanced( - tocarry, - toadvanced, - fromstarts, - fromstops, - fromarray, - fromadvanced, - lenstarts, - lencontent); -} + +#define WRAPPER(SUFFIX, C, T) \ + ERROR awkward_ListArray##SUFFIX(T* tocarry, T* toadvanced, const C* fromstarts, const C* fromstops, const T* fromarray, const T* fromadvanced, int64_t lenstarts, int64_t lencontent) { \ + return awkward_ListArray_getitem_next_array_advanced(tocarry, toadvanced, fromstarts, fromstops, fromarray, fromadvanced, lenstarts, lencontent); \ + } + +WRAPPER(32_getitem_next_array_advanced_64, int32_t, int64_t) +WRAPPER(U32_getitem_next_array_advanced_64, uint32_t, int64_t) +WRAPPER(64_getitem_next_array_advanced_64, int64_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_next_at.cpp b/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_next_at.cpp index bc57e5de8d..384e6dbd42 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_next_at.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_next_at.cpp @@ -24,42 +24,12 @@ ERROR awkward_ListArray_getitem_next_at( } return success(); } -ERROR awkward_ListArray32_getitem_next_at_64( - int64_t* tocarry, - const int32_t* fromstarts, - const int32_t* fromstops, - int64_t lenstarts, - int64_t at) { - return awkward_ListArray_getitem_next_at( - tocarry, - fromstarts, - fromstops, - lenstarts, - at); -} -ERROR awkward_ListArrayU32_getitem_next_at_64( - int64_t* tocarry, - const uint32_t* fromstarts, - const uint32_t* fromstops, - int64_t lenstarts, - int64_t at) { - return awkward_ListArray_getitem_next_at( - tocarry, - fromstarts, - fromstops, - lenstarts, - at); -} -ERROR awkward_ListArray64_getitem_next_at_64( - int64_t* tocarry, - const int64_t* fromstarts, - const int64_t* fromstops, - int64_t lenstarts, - int64_t at) { - return awkward_ListArray_getitem_next_at( - tocarry, - fromstarts, - fromstops, - lenstarts, - at); -} + +#define WRAPPER(SUFFIX, C, T) \ + ERROR awkward_ListArray##SUFFIX(T* tocarry, const C* fromstarts, const C* fromstops, int64_t lenstarts, int64_t at) { \ + return awkward_ListArray_getitem_next_at(tocarry, fromstarts, fromstops, lenstarts, at); \ + } + +WRAPPER(32_getitem_next_at_64, int32_t, int64_t) +WRAPPER(U32_getitem_next_at_64, uint32_t, int64_t) +WRAPPER(64_getitem_next_at_64, int64_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_next_range.cpp b/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_next_range.cpp index 817a1e318f..0d06d554dc 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_next_range.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_next_range.cpp @@ -40,60 +40,12 @@ ERROR awkward_ListArray_getitem_next_range( } return success(); } -ERROR awkward_ListArray32_getitem_next_range_64( - int32_t* tooffsets, - int64_t* tocarry, - const int32_t* fromstarts, - const int32_t* fromstops, - int64_t lenstarts, - int64_t start, - int64_t stop, - int64_t step) { - return awkward_ListArray_getitem_next_range( - tooffsets, - tocarry, - fromstarts, - fromstops, - lenstarts, - start, - stop, - step); -} -ERROR awkward_ListArrayU32_getitem_next_range_64( - uint32_t* tooffsets, - int64_t* tocarry, - const uint32_t* fromstarts, - const uint32_t* fromstops, - int64_t lenstarts, - int64_t start, - int64_t stop, - int64_t step) { - return awkward_ListArray_getitem_next_range( - tooffsets, - tocarry, - fromstarts, - fromstops, - lenstarts, - start, - stop, - step); -} -ERROR awkward_ListArray64_getitem_next_range_64( - int64_t* tooffsets, - int64_t* tocarry, - const int64_t* fromstarts, - const int64_t* fromstops, - int64_t lenstarts, - int64_t start, - int64_t stop, - int64_t step) { - return awkward_ListArray_getitem_next_range( - tooffsets, - tocarry, - fromstarts, - fromstops, - lenstarts, - start, - stop, - step); -} + +#define WRAPPER(SUFFIX, C, T) \ + ERROR awkward_ListArray##SUFFIX(C* tooffsets, T* tocarry, const C* fromstarts, const C* fromstops, int64_t lenstarts, int64_t start, int64_t stop, int64_t step) { \ + return awkward_ListArray_getitem_next_range(tooffsets, tocarry, fromstarts, fromstops, lenstarts, start, stop, step); \ + } + +WRAPPER(32_getitem_next_range_64, int32_t, int64_t) +WRAPPER(U32_getitem_next_range_64, uint32_t, int64_t) +WRAPPER(64_getitem_next_range_64, int64_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_next_range_carrylength.cpp b/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_next_range_carrylength.cpp index 2d37e35509..53f2ced91c 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_next_range_carrylength.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_next_range_carrylength.cpp @@ -35,54 +35,12 @@ ERROR awkward_ListArray_getitem_next_range_carrylength( } return success(); } -ERROR awkward_ListArray32_getitem_next_range_carrylength( - int64_t* carrylength, - const int32_t* fromstarts, - const int32_t* fromstops, - int64_t lenstarts, - int64_t start, - int64_t stop, - int64_t step) { - return awkward_ListArray_getitem_next_range_carrylength( - carrylength, - fromstarts, - fromstops, - lenstarts, - start, - stop, - step); -} -ERROR awkward_ListArrayU32_getitem_next_range_carrylength( - int64_t* carrylength, - const uint32_t* fromstarts, - const uint32_t* fromstops, - int64_t lenstarts, - int64_t start, - int64_t stop, - int64_t step) { - return awkward_ListArray_getitem_next_range_carrylength( - carrylength, - fromstarts, - fromstops, - lenstarts, - start, - stop, - step); -} -ERROR awkward_ListArray64_getitem_next_range_carrylength( - int64_t* carrylength, - const int64_t* fromstarts, - const int64_t* fromstops, - int64_t lenstarts, - int64_t start, - int64_t stop, - int64_t step) { - return awkward_ListArray_getitem_next_range_carrylength( - carrylength, - fromstarts, - fromstops, - lenstarts, - start, - stop, - step); -} + +#define WRAPPER(SUFFIX, C) \ + ERROR awkward_ListArray##SUFFIX(int64_t* carrylength, const C* fromstarts, const C* fromstops, int64_t lenstarts, int64_t start, int64_t stop, int64_t step) { \ + return awkward_ListArray_getitem_next_range_carrylength(carrylength, fromstarts, fromstops, lenstarts, start, stop, step); \ + } + +WRAPPER(32_getitem_next_range_carrylength, int32_t) +WRAPPER(U32_getitem_next_range_carrylength, uint32_t) +WRAPPER(64_getitem_next_range_carrylength, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_next_range_counts.cpp b/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_next_range_counts.cpp index a9d401f975..16ec477130 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_next_range_counts.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_next_range_counts.cpp @@ -15,30 +15,12 @@ ERROR awkward_ListArray_getitem_next_range_counts( } return success(); } -ERROR awkward_ListArray32_getitem_next_range_counts_64( - int64_t* total, - const int32_t* fromoffsets, - int64_t lenstarts) { - return awkward_ListArray_getitem_next_range_counts( - total, - fromoffsets, - lenstarts); -} -ERROR awkward_ListArrayU32_getitem_next_range_counts_64( - int64_t* total, - const uint32_t* fromoffsets, - int64_t lenstarts) { - return awkward_ListArray_getitem_next_range_counts( - total, - fromoffsets, - lenstarts); -} -ERROR awkward_ListArray64_getitem_next_range_counts_64( - int64_t* total, - const int64_t* fromoffsets, - int64_t lenstarts) { - return awkward_ListArray_getitem_next_range_counts( - total, - fromoffsets, - lenstarts); -} + +#define WRAPPER(SUFFIX, C) \ + ERROR awkward_ListArray##SUFFIX(int64_t* total, const C* fromoffsets, int64_t lenstarts) { \ + return awkward_ListArray_getitem_next_range_counts(total, fromoffsets, lenstarts); \ + } + +WRAPPER(32_getitem_next_range_counts_64, int32_t) +WRAPPER(U32_getitem_next_range_counts_64, uint32_t) +WRAPPER(64_getitem_next_range_counts_64, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_next_range_spreadadvanced.cpp b/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_next_range_spreadadvanced.cpp index d104453296..13a7175e26 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_next_range_spreadadvanced.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_ListArray_getitem_next_range_spreadadvanced.cpp @@ -18,36 +18,12 @@ ERROR awkward_ListArray_getitem_next_range_spreadadvanced( } return success(); } -ERROR awkward_ListArray32_getitem_next_range_spreadadvanced_64( - int64_t* toadvanced, - const int64_t* fromadvanced, - const int32_t* fromoffsets, - int64_t lenstarts) { - return awkward_ListArray_getitem_next_range_spreadadvanced( - toadvanced, - fromadvanced, - fromoffsets, - lenstarts); -} -ERROR awkward_ListArrayU32_getitem_next_range_spreadadvanced_64( - int64_t* toadvanced, - const int64_t* fromadvanced, - const uint32_t* fromoffsets, - int64_t lenstarts) { - return awkward_ListArray_getitem_next_range_spreadadvanced( - toadvanced, - fromadvanced, - fromoffsets, - lenstarts); -} -ERROR awkward_ListArray64_getitem_next_range_spreadadvanced_64( - int64_t* toadvanced, - const int64_t* fromadvanced, - const int64_t* fromoffsets, - int64_t lenstarts) { - return awkward_ListArray_getitem_next_range_spreadadvanced( - toadvanced, - fromadvanced, - fromoffsets, - lenstarts); -} + +#define WRAPPER(SUFFIX, C, T) \ + ERROR awkward_ListArray##SUFFIX(T* toadvanced, const T* fromadvanced, const C* fromoffsets, int64_t lenstarts) { \ + return awkward_ListArray_getitem_next_range_spreadadvanced(toadvanced, fromadvanced, fromoffsets, lenstarts); \ + } + +WRAPPER(32_getitem_next_range_spreadadvanced_64, int32_t, int64_t) +WRAPPER(U32_getitem_next_range_spreadadvanced_64, uint32_t, int64_t) +WRAPPER(64_getitem_next_range_spreadadvanced_64, int64_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_ListArray_localindex.cpp b/awkward-cpp/src/cpu-kernels/awkward_ListArray_localindex.cpp index 23c6cec18c..b167e2f592 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_ListArray_localindex.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_ListArray_localindex.cpp @@ -18,30 +18,12 @@ ERROR awkward_ListArray_localindex( } return success(); } -ERROR awkward_ListArray32_localindex_64( - int64_t* toindex, - const int32_t* offsets, - int64_t length) { - return awkward_ListArray_localindex( - toindex, - offsets, - length); -} -ERROR awkward_ListArrayU32_localindex_64( - int64_t* toindex, - const uint32_t* offsets, - int64_t length) { - return awkward_ListArray_localindex( - toindex, - offsets, - length); -} -ERROR awkward_ListArray64_localindex_64( - int64_t* toindex, - const int64_t* offsets, - int64_t length) { - return awkward_ListArray_localindex( - toindex, - offsets, - length); -} + +#define WRAPPER(SUFFIX, C, T) \ + ERROR awkward_ListArray##SUFFIX(T* toindex, const C* offsets, int64_t length) { \ + return awkward_ListArray_localindex(toindex, offsets, length); \ + } + +WRAPPER(32_localindex_64, int32_t, int64_t) +WRAPPER(U32_localindex_64, uint32_t, int64_t) +WRAPPER(64_localindex_64, int64_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_ListArray_min_range.cpp b/awkward-cpp/src/cpu-kernels/awkward_ListArray_min_range.cpp index b402731497..bfebcb682e 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_ListArray_min_range.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_ListArray_min_range.cpp @@ -18,36 +18,12 @@ ERROR awkward_ListArray_min_range( *tomin = shorter; return success(); } -ERROR awkward_ListArray32_min_range( - int64_t* tomin, - const int32_t* fromstarts, - const int32_t* fromstops, - int64_t lenstarts) { - return awkward_ListArray_min_range( - tomin, - fromstarts, - fromstops, - lenstarts); -} -ERROR awkward_ListArrayU32_min_range( - int64_t* tomin, - const uint32_t* fromstarts, - const uint32_t* fromstops, - int64_t lenstarts) { - return awkward_ListArray_min_range( - tomin, - fromstarts, - fromstops, - lenstarts); -} -ERROR awkward_ListArray64_min_range( - int64_t* tomin, - const int64_t* fromstarts, - const int64_t* fromstops, - int64_t lenstarts) { - return awkward_ListArray_min_range( - tomin, - fromstarts, - fromstops, - lenstarts); -} + +#define WRAPPER(SUFFIX, C) \ + ERROR awkward_ListArray##SUFFIX(int64_t* tomin, const C* fromstarts, const C* fromstops, int64_t lenstarts) { \ + return awkward_ListArray_min_range(tomin, fromstarts, fromstops, lenstarts); \ + } + +WRAPPER(32_min_range, int32_t) +WRAPPER(U32_min_range, uint32_t) +WRAPPER(64_min_range, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_ListArray_rpad_and_clip_length_axis1.cpp b/awkward-cpp/src/cpu-kernels/awkward_ListArray_rpad_and_clip_length_axis1.cpp index 05093abe18..081ceafb8d 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_ListArray_rpad_and_clip_length_axis1.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_ListArray_rpad_and_clip_length_axis1.cpp @@ -19,42 +19,12 @@ ERROR awkward_ListArray_rpad_and_clip_length_axis1( *tomin = length; return success(); } -ERROR awkward_ListArray32_rpad_and_clip_length_axis1( - int64_t* tomin, - const int32_t* fromstarts, - const int32_t* fromstops, - int64_t target, - int64_t lenstarts) { - return awkward_ListArray_rpad_and_clip_length_axis1( - tomin, - fromstarts, - fromstops, - target, - lenstarts); -} -ERROR awkward_ListArrayU32_rpad_and_clip_length_axis1( - int64_t* tomin, - const uint32_t* fromstarts, - const uint32_t* fromstops, - int64_t target, - int64_t lenstarts) { - return awkward_ListArray_rpad_and_clip_length_axis1( - tomin, - fromstarts, - fromstops, - target, - lenstarts); -} -ERROR awkward_ListArray64_rpad_and_clip_length_axis1( - int64_t* tomin, - const int64_t* fromstarts, - const int64_t* fromstops, - int64_t target, - int64_t lenstarts) { - return awkward_ListArray_rpad_and_clip_length_axis1( - tomin, - fromstarts, - fromstops, - target, - lenstarts); -} + +#define WRAPPER(SUFFIX, C) \ + ERROR awkward_ListArray##SUFFIX(int64_t* tomin, const C* fromstarts, const C* fromstops, int64_t target, int64_t lenstarts) { \ + return awkward_ListArray_rpad_and_clip_length_axis1(tomin, fromstarts, fromstops, target, lenstarts); \ + } + +WRAPPER(32_rpad_and_clip_length_axis1, int32_t) +WRAPPER(U32_rpad_and_clip_length_axis1, uint32_t) +WRAPPER(64_rpad_and_clip_length_axis1, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_ListArray_rpad_axis1.cpp b/awkward-cpp/src/cpu-kernels/awkward_ListArray_rpad_axis1.cpp index 25629467b3..519879482d 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_ListArray_rpad_axis1.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_ListArray_rpad_axis1.cpp @@ -28,54 +28,12 @@ ERROR awkward_ListArray_rpad_axis1( } return success(); } -ERROR awkward_ListArray32_rpad_axis1_64( - int64_t* toindex, - const int32_t* fromstarts, - const int32_t* fromstops, - int32_t* tostarts, - int32_t* tostops, - int64_t target, - int64_t length) { - return awkward_ListArray_rpad_axis1( - toindex, - fromstarts, - fromstops, - tostarts, - tostops, - target, - length); -} -ERROR awkward_ListArrayU32_rpad_axis1_64( - int64_t* toindex, - const uint32_t* fromstarts, - const uint32_t* fromstops, - uint32_t* tostarts, - uint32_t* tostops, - int64_t target, - int64_t length) { - return awkward_ListArray_rpad_axis1( - toindex, - fromstarts, - fromstops, - tostarts, - tostops, - target, - length); -} -ERROR awkward_ListArray64_rpad_axis1_64( - int64_t* toindex, - const int64_t* fromstarts, - const int64_t* fromstops, - int64_t* tostarts, - int64_t* tostops, - int64_t target, - int64_t length) { - return awkward_ListArray_rpad_axis1( - toindex, - fromstarts, - fromstops, - tostarts, - tostops, - target, - length); -} + +#define WRAPPER(SUFFIX, T, C) \ + ERROR awkward_ListArray##SUFFIX(T* toindex, const C* fromstarts, const C* fromstops, C* tostarts, C* tostops, int64_t target, int64_t length) { \ + return awkward_ListArray_rpad_axis1(toindex, fromstarts, fromstops, tostarts, tostops, target, length); \ + } + +WRAPPER(32_rpad_axis1_64, int64_t, int32_t) +WRAPPER(U32_rpad_axis1_64, int64_t, uint32_t) +WRAPPER(64_rpad_axis1_64, int64_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_ListArray_validity.cpp b/awkward-cpp/src/cpu-kernels/awkward_ListArray_validity.cpp index 090245acb7..5c763ec379 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_ListArray_validity.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_ListArray_validity.cpp @@ -27,36 +27,12 @@ ERROR awkward_ListArray_validity( } return success(); } -ERROR awkward_ListArray32_validity( - const int32_t* starts, - const int32_t* stops, - int64_t length, - int64_t lencontent) { - return awkward_ListArray_validity( - starts, - stops, - length, - lencontent); -} -ERROR awkward_ListArrayU32_validity( - const uint32_t* starts, - const uint32_t* stops, - int64_t length, - int64_t lencontent) { - return awkward_ListArray_validity( - starts, - stops, - length, - lencontent); -} -ERROR awkward_ListArray64_validity( - const int64_t* starts, - const int64_t* stops, - int64_t length, - int64_t lencontent) { - return awkward_ListArray_validity( - starts, - stops, - length, - lencontent); -} + +#define WRAPPER(SUFFIX, C) \ + ERROR awkward_ListArray##SUFFIX(const C* starts, const C* stops, int64_t length, int64_t lencontent) { \ + return awkward_ListArray_validity(starts, stops, length, lencontent); \ + } + +WRAPPER(32_validity, int32_t) +WRAPPER(U32_validity, uint32_t) +WRAPPER(64_validity, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_drop_none_indexes.cpp b/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_drop_none_indexes.cpp index ea09248fbd..c17b5df63c 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_drop_none_indexes.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_drop_none_indexes.cpp @@ -31,29 +31,11 @@ ERROR awkward_ListOffsetArray_drop_none_indexes( return success(); } -ERROR awkward_ListOffsetArray_drop_none_indexes_64( - int64_t* tooffsets, - const int64_t* noneindexes, - const int64_t* fromoffsets, - int64_t length_offsets, - int64_t length_indexes) { - return awkward_ListOffsetArray_drop_none_indexes( - tooffsets, - noneindexes, - fromoffsets, - length_offsets, - length_indexes); -} -ERROR awkward_ListOffsetArray_drop_none_indexes_32( - int32_t* tooffsets, - const int32_t* noneindexes, - const int32_t* fromoffsets, - int64_t length_offsets, - int64_t length_indexes) { - return awkward_ListOffsetArray_drop_none_indexes( - tooffsets, - noneindexes, - fromoffsets, - length_offsets, - length_indexes); -} + +#define WRAPPER(SUFFIX, T) \ + ERROR awkward_ListOffsetArray_drop_none_indexes_##SUFFIX(T* tooffsets, const T* noneindexes, const T* fromoffsets, int64_t length_offsets, int64_t length_indexes) { \ + return awkward_ListOffsetArray_drop_none_indexes(tooffsets, noneindexes, fromoffsets, length_offsets, length_indexes); \ + } + +WRAPPER(64, int64_t) +WRAPPER(32, int32_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_flatten_offsets.cpp b/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_flatten_offsets.cpp index 0e9a4facab..182ecc1b5d 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_flatten_offsets.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_flatten_offsets.cpp @@ -16,36 +16,12 @@ ERROR awkward_ListOffsetArray_flatten_offsets( } return success(); } -ERROR awkward_ListOffsetArray32_flatten_offsets_64( - int64_t* tooffsets, - const int32_t* outeroffsets, - int64_t outeroffsetslen, - const int64_t* inneroffsets) { - return awkward_ListOffsetArray_flatten_offsets( - tooffsets, - outeroffsets, - outeroffsetslen, - inneroffsets); -} -ERROR awkward_ListOffsetArrayU32_flatten_offsets_64( - int64_t* tooffsets, - const uint32_t* outeroffsets, - int64_t outeroffsetslen, - const int64_t* inneroffsets) { - return awkward_ListOffsetArray_flatten_offsets( - tooffsets, - outeroffsets, - outeroffsetslen, - inneroffsets); -} -ERROR awkward_ListOffsetArray64_flatten_offsets_64( - int64_t* tooffsets, - const int64_t* outeroffsets, - int64_t outeroffsetslen, - const int64_t* inneroffsets) { - return awkward_ListOffsetArray_flatten_offsets( - tooffsets, - outeroffsets, - outeroffsetslen, - inneroffsets); -} + +#define WRAPPER(SUFFIX, T, C) \ + ERROR awkward_ListOffsetArray##SUFFIX(T* tooffsets, const C* outeroffsets, int64_t outeroffsetslen, const T* inneroffsets) { \ + return awkward_ListOffsetArray_flatten_offsets(tooffsets, outeroffsets, outeroffsetslen, inneroffsets); \ + } + +WRAPPER(32_flatten_offsets_64, int64_t, int32_t) +WRAPPER(U32_flatten_offsets_64, int64_t, uint32_t) +WRAPPER(64_flatten_offsets_64, int64_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_reduce_local_nextparents_64.cpp b/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_reduce_local_nextparents_64.cpp index c320f6c547..a2b9af7087 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_reduce_local_nextparents_64.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_reduce_local_nextparents_64.cpp @@ -1,4 +1,11 @@ // BSD 3-Clause License; see https://github.com/scikit-hep/awkward/blob/main/LICENSE +// +// DEPRECATED — offsets → parents converter (local reduction path). +// +// In the migrated pipeline, the caller passes `self._offsets` directly as the +// next-layer offsets (normalized to start at zero), so this expansion into a +// per-element parents array is no longer needed. The function is preserved +// for ABI compatibility; remove once all callers have migrated. #define FILENAME(line) FILENAME_FOR_EXCEPTIONS_C("src/cpu-kernels/awkward_ListOffsetArray_reduce_local_nextparents_64.cpp", line) @@ -6,7 +13,7 @@ template ERROR awkward_ListOffsetArray_reduce_local_nextparents_64( - int64_t* nextparents, + C* nextparents, const C* offsets, int64_t length, int64_t nextparents_length) { @@ -20,36 +27,12 @@ ERROR awkward_ListOffsetArray_reduce_local_nextparents_64( } return success(); } -ERROR awkward_ListOffsetArray32_reduce_local_nextparents_64( - int64_t* nextparents, - const int32_t* offsets, - int64_t length, - int64_t nextparents_length) { - return awkward_ListOffsetArray_reduce_local_nextparents_64( - nextparents, - offsets, - length, - nextparents_length); -} -ERROR awkward_ListOffsetArrayU32_reduce_local_nextparents_64( - int64_t* nextparents, - const uint32_t* offsets, - int64_t length, - int64_t nextparents_length) { - return awkward_ListOffsetArray_reduce_local_nextparents_64( - nextparents, - offsets, - length, - nextparents_length); -} -ERROR awkward_ListOffsetArray64_reduce_local_nextparents_64( - int64_t* nextparents, - const int64_t* offsets, - int64_t length, - int64_t nextparents_length) { - return awkward_ListOffsetArray_reduce_local_nextparents_64( - nextparents, - offsets, - length, - nextparents_length); -} + +#define WRAPPER(SUFFIX, C) \ + ERROR awkward_ListOffsetArray##SUFFIX(C* nextparents, const C* offsets, int64_t length, int64_t nextparents_length) { \ + return awkward_ListOffsetArray_reduce_local_nextparents_64(nextparents, offsets, length, nextparents_length); \ + } + +WRAPPER(32_reduce_local_nextparents_64, int32_t) +WRAPPER(U32_reduce_local_nextparents_64, uint32_t) +WRAPPER(64_reduce_local_nextparents_64, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_reduce_local_outoffsets_64.cpp b/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_reduce_local_outoffsets_64.cpp index 1ebcc69ad7..3e31c176a9 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_reduce_local_outoffsets_64.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_reduce_local_outoffsets_64.cpp @@ -1,4 +1,11 @@ // BSD 3-Clause License; see https://github.com/scikit-hep/awkward/blob/main/LICENSE +// +// DEPRECATED — parents → offsets converter (output side). +// +// In the migrated pipeline, the caller already has `offsets` and assigns +// `outoffsets = offsets` directly without invoking this kernel. The function +// is preserved for ABI compatibility; remove once all callers have been +// migrated to the offsets pipeline. #define FILENAME(line) FILENAME_FOR_EXCEPTIONS_C("src/cpu-kernels/awkward_ListOffsetArray_reduce_local_outoffsets_64.cpp", line) diff --git a/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_reduce_nonlocal_nextshifts_64.cpp b/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_reduce_nonlocal_nextshifts_64.cpp index 3c1fccc944..d8a17dfa6c 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_reduce_nonlocal_nextshifts_64.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_reduce_nonlocal_nextshifts_64.cpp @@ -8,34 +8,41 @@ ERROR awkward_ListOffsetArray_reduce_nonlocal_nextshifts_64( int64_t* nummissing, int64_t* missing, int64_t* nextshifts, - const int64_t* offsets, - int64_t length, - const int64_t* starts, - const int64_t* parents, + const int64_t* offsets, // per-row sub-list offsets + int64_t /* length */, // implied by outer_offsets[outlength] + const int64_t* /* starts */, // unused now; first-of-bin detected via outer_offsets + const int64_t* outer_offsets, // replaces parents + int64_t outlength, int64_t maxcount, int64_t nextlen, const int64_t* nextcarry) { - for (int64_t i = 0; i < length; i++) { - int64_t start = offsets[i]; - int64_t stop = offsets[i + 1]; - int64_t count = stop - start; - - if (starts[parents[i]] == i) { - for (int64_t k = 0; k < maxcount; k++) { - nummissing[k] = 0; - } + // For each outer bin, reset the per-column "missing-so-far" counters at + // the start, then walk rows in that bin. Each row whose sub-list is shorter + // than maxcount contributes to nummissing[col] for col in [count, maxcount). + // Column-wise missing counts are written into `missing` so that downstream + // can index by sub-list element position. + for (int64_t outer_bin = 0; outer_bin < outlength; outer_bin++) { + for (int64_t k = 0; k < maxcount; k++) { + nummissing[k] = 0; } + int64_t row_start = outer_offsets[outer_bin]; + int64_t row_stop = outer_offsets[outer_bin + 1]; + for (int64_t i = row_start; i < row_stop; i++) { + int64_t start = offsets[i]; + int64_t stop = offsets[i + 1]; + int64_t count = stop - start; - for (int64_t k = count; k < maxcount; k++) { - nummissing[k]++; - } + for (int64_t k = count; k < maxcount; k++) { + nummissing[k]++; + } - for (int64_t j = 0; j < count; j++) { - missing[start + j] = nummissing[j]; + for (int64_t j = 0; j < count; j++) { + missing[start + j] = nummissing[j]; + } } } - for (int64_t j = 0; j < nextlen; j++) { + for (int64_t j = 0; j < nextlen; j++) { nextshifts[j] = missing[nextcarry[j]]; } return success(); diff --git a/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_reduce_nonlocal_nextstarts_64.cpp b/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_reduce_nonlocal_nextstarts_64.cpp index 07e5e362c9..c5815e0c17 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_reduce_nonlocal_nextstarts_64.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_reduce_nonlocal_nextstarts_64.cpp @@ -1,4 +1,11 @@ // BSD 3-Clause License; see https://github.com/scikit-hep/awkward/blob/main/LICENSE +// +// DEPRECATED — nextparents → nextstarts derivation. +// +// With the offsets-pipeline migration, `nextstarts` is simply +// `nextoffsets[:-1]` and is derived in Python without a kernel call. This +// function is preserved for ABI compatibility; remove once all callers have +// migrated. #define FILENAME(line) FILENAME_FOR_EXCEPTIONS_C("src/cpu-kernels/awkward_ListOffsetArray_reduce_nonlocal_nextstarts_64.cpp", line) diff --git a/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_reduce_nonlocal_preparenext_64.cpp b/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_reduce_nonlocal_preparenext_64.cpp index fa90de8fa8..88807a950a 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_reduce_nonlocal_preparenext_64.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_reduce_nonlocal_preparenext_64.cpp @@ -6,45 +6,58 @@ ERROR awkward_ListOffsetArray_reduce_nonlocal_preparenext_64( int64_t* nextcarry, - int64_t* nextparents, - int64_t nextlen, + int64_t* nextoffsets, // length outlength * maxcount + 1 + int64_t /* nextlen */, // unused; kept in signature for caller compatibility int64_t* maxnextparents, int64_t* distincts, - int64_t distinctslen, - int64_t* offsetscopy, - const int64_t* offsets, - int64_t length, - const int64_t* parents, + int64_t distinctslen, // outlength * maxcount + int64_t* /* offsetscopy */, // workspace; unused in bin-major layout + const int64_t* offsets, // per-row sub-list offsets, length+1 entries + int64_t /* length */, // unused; rows are indexed via outer_offsets + const int64_t* outer_offsets, // outer-bin row offsets, outlength+1 entries + int64_t outlength, int64_t maxcount) { - *maxnextparents = 0; - for (int64_t i = 0; i < distinctslen; i++) { + // Initialize outputs. + // -1 sentinel: callers compute the next-layer outlength as + // `maxnextparents + 1`, so when no elements are processed (empty input) + // we want that expression to evaluate to 0, not 1. + *maxnextparents = -1; + for (int64_t i = 0; i < distinctslen; i++) { distincts[i] = -1; } + // For each (outer_bin, col), gather one element from each row in the outer + // bin whose sub-list extends to that column. The output nextbin index is + // outer_bin * maxcount + col, and we iterate (outer_bin, col) in order so + // nextoffsets is monotonically increasing. int64_t k = 0; - while (k < nextlen) { - int64_t j = 0; - for (int64_t i = 0; i < length; i++) { - if (offsetscopy[i] < offsets[i + 1]) { - int64_t diff = offsetscopy[i] - offsets[i]; - int64_t parent = parents[i]; - - nextcarry[k] = offsetscopy[i]; - nextparents[k] = parent*maxcount + diff; - - if (*maxnextparents < nextparents[k]) { - *maxnextparents = nextparents[k]; + nextoffsets[0] = 0; + for (int64_t outer_bin = 0; outer_bin < outlength; outer_bin++) { + int64_t row_start = outer_offsets[outer_bin]; + int64_t row_stop = outer_offsets[outer_bin + 1]; + for (int64_t col = 0; col < maxcount; col++) { + int64_t nextbin = outer_bin * maxcount + col; + bool any = false; + for (int64_t row = row_start; row < row_stop; row++) { + // Does this row have an element at column `col`? + if (col < offsets[row + 1] - offsets[row]) { + nextcarry[k] = offsets[row] + col; + k++; + any = true; } - - if (distincts[nextparents[k]] == -1) { - distincts[nextparents[k]] = j; - j++; + } + nextoffsets[nextbin + 1] = k; + if (any) { + // Any non-(-1) value works; downstream only checks for -1. + if (nextbin < distinctslen) { + distincts[nextbin] = nextbin; + } + if (nextbin > *maxnextparents) { + *maxnextparents = nextbin; } - - k++; - offsetscopy[i]++; } } } + return success(); } diff --git a/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_rpad_and_clip_axis1.cpp b/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_rpad_and_clip_axis1.cpp index 8dd6ec365e..9674126246 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_rpad_and_clip_axis1.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_rpad_and_clip_axis1.cpp @@ -22,36 +22,12 @@ ERROR awkward_ListOffsetArray_rpad_and_clip_axis1( } return success(); } -ERROR awkward_ListOffsetArray32_rpad_and_clip_axis1_64( - int64_t* toindex, - const int32_t* fromoffsets, - int64_t length, - int64_t target) { - return awkward_ListOffsetArray_rpad_and_clip_axis1( - toindex, - fromoffsets, - length, - target); -} -ERROR awkward_ListOffsetArrayU32_rpad_and_clip_axis1_64( - int64_t* toindex, - const uint32_t* fromoffsets, - int64_t length, - int64_t target) { - return awkward_ListOffsetArray_rpad_and_clip_axis1( - toindex, - fromoffsets, - length, - target); -} -ERROR awkward_ListOffsetArray64_rpad_and_clip_axis1_64( - int64_t* toindex, - const int64_t* fromoffsets, - int64_t length, - int64_t target) { - return awkward_ListOffsetArray_rpad_and_clip_axis1( - toindex, - fromoffsets, - length, - target); -} + +#define WRAPPER(SUFFIX, T, C) \ + ERROR awkward_ListOffsetArray##SUFFIX(T* toindex, const C* fromoffsets, int64_t length, int64_t target) { \ + return awkward_ListOffsetArray_rpad_and_clip_axis1(toindex, fromoffsets, length, target); \ + } + +WRAPPER(32_rpad_and_clip_axis1_64, int64_t, int32_t) +WRAPPER(U32_rpad_and_clip_axis1_64, int64_t, uint32_t) +WRAPPER(64_rpad_and_clip_axis1_64, int64_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_rpad_axis1.cpp b/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_rpad_axis1.cpp index 5d9427a68e..58fcaaa057 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_rpad_axis1.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_rpad_axis1.cpp @@ -25,36 +25,12 @@ ERROR awkward_ListOffsetArray_rpad_axis1( } return success(); } -ERROR awkward_ListOffsetArray32_rpad_axis1_64( - int64_t* toindex, - const int32_t* fromoffsets, - int64_t fromlength, - int64_t target) { - return awkward_ListOffsetArray_rpad_axis1( - toindex, - fromoffsets, - fromlength, - target); -} -ERROR awkward_ListOffsetArrayU32_rpad_axis1_64( - int64_t* toindex, - const uint32_t* fromoffsets, - int64_t fromlength, - int64_t target) { - return awkward_ListOffsetArray_rpad_axis1( - toindex, - fromoffsets, - fromlength, - target); -} -ERROR awkward_ListOffsetArray64_rpad_axis1_64( - int64_t* toindex, - const int64_t* fromoffsets, - int64_t fromlength, - int64_t target) { - return awkward_ListOffsetArray_rpad_axis1( - toindex, - fromoffsets, - fromlength, - target); -} + +#define WRAPPER(SUFFIX, T, C) \ + ERROR awkward_ListOffsetArray##SUFFIX(T* toindex, const C* fromoffsets, int64_t fromlength, int64_t target) { \ + return awkward_ListOffsetArray_rpad_axis1(toindex, fromoffsets, fromlength, target); \ + } + +WRAPPER(32_rpad_axis1_64, int64_t, int32_t) +WRAPPER(U32_rpad_axis1_64, int64_t, uint32_t) +WRAPPER(64_rpad_axis1_64, int64_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_rpad_length_axis1.cpp b/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_rpad_length_axis1.cpp index f43bcabf77..bdf1eb4c26 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_rpad_length_axis1.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_rpad_length_axis1.cpp @@ -24,42 +24,12 @@ ERROR awkward_ListOffsetArray_rpad_length_axis1( return success(); } -ERROR awkward_ListOffsetArray32_rpad_length_axis1( - int32_t* tooffsets, - const int32_t* fromoffsets, - int64_t fromlength, - int64_t target, - int64_t* tolength) { - return awkward_ListOffsetArray_rpad_length_axis1( - tooffsets, - fromoffsets, - fromlength, - target, - tolength); -} -ERROR awkward_ListOffsetArrayU32_rpad_length_axis1( - uint32_t* tooffsets, - const uint32_t* fromoffsets, - int64_t fromlength, - int64_t target, - int64_t* tolength) { - return awkward_ListOffsetArray_rpad_length_axis1( - tooffsets, - fromoffsets, - fromlength, - target, - tolength); -} -ERROR awkward_ListOffsetArray64_rpad_length_axis1( - int64_t* tooffsets, - const int64_t* fromoffsets, - int64_t fromlength, - int64_t target, - int64_t* tolength) { - return awkward_ListOffsetArray_rpad_length_axis1( - tooffsets, - fromoffsets, - fromlength, - target, - tolength); -} + +#define WRAPPER(SUFFIX, C) \ + ERROR awkward_ListOffsetArray##SUFFIX(C* tooffsets, const C* fromoffsets, int64_t fromlength, int64_t target, int64_t* tolength) { \ + return awkward_ListOffsetArray_rpad_length_axis1(tooffsets, fromoffsets, fromlength, target, tolength); \ + } + +WRAPPER(32_rpad_length_axis1, int32_t) +WRAPPER(U32_rpad_length_axis1, uint32_t) +WRAPPER(64_rpad_length_axis1, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_toRegularArray.cpp b/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_toRegularArray.cpp index 1d39fe00ad..f25a03d448 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_toRegularArray.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_ListOffsetArray_toRegularArray.cpp @@ -27,30 +27,12 @@ ERROR awkward_ListOffsetArray_toRegularArray( } return success(); } -ERROR awkward_ListOffsetArray32_toRegularArray( - int64_t* size, - const int32_t* fromoffsets, - int64_t offsetslength) { - return awkward_ListOffsetArray_toRegularArray( - size, - fromoffsets, - offsetslength); -} -ERROR awkward_ListOffsetArrayU32_toRegularArray( - int64_t* size, - const uint32_t* fromoffsets, - int64_t offsetslength) { - return awkward_ListOffsetArray_toRegularArray( - size, - fromoffsets, - offsetslength); -} -ERROR awkward_ListOffsetArray64_toRegularArray( - int64_t* size, - const int64_t* fromoffsets, - int64_t offsetslength) { - return awkward_ListOffsetArray_toRegularArray( - size, - fromoffsets, - offsetslength); -} + +#define WRAPPER(SUFFIX, C) \ + ERROR awkward_ListOffsetArray##SUFFIX(int64_t* size, const C* fromoffsets, int64_t offsetslength) { \ + return awkward_ListOffsetArray_toRegularArray(size, fromoffsets, offsetslength); \ + } + +WRAPPER(32_toRegularArray, int32_t) +WRAPPER(U32_toRegularArray, uint32_t) +WRAPPER(64_toRegularArray, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_MaskedArray_getitem_next_jagged_project.cpp b/awkward-cpp/src/cpu-kernels/awkward_MaskedArray_getitem_next_jagged_project.cpp index 3fb22c8f27..714a35fb57 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_MaskedArray_getitem_next_jagged_project.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_MaskedArray_getitem_next_jagged_project.cpp @@ -23,48 +23,12 @@ ERROR awkward_MaskedArray_getitem_next_jagged_project( } return success(); } -ERROR awkward_MaskedArray32_getitem_next_jagged_project( - int32_t* index, - int64_t* starts_in, - int64_t* stops_in, - int64_t* starts_out, - int64_t* stops_out, - int64_t length) { - return awkward_MaskedArray_getitem_next_jagged_project( - index, - starts_in, - stops_in, - starts_out, - stops_out, - length); -} -ERROR awkward_MaskedArrayU32_getitem_next_jagged_project( - uint32_t* index, - int64_t* starts_in, - int64_t* stops_in, - int64_t* starts_out, - int64_t* stops_out, - int64_t length) { - return awkward_MaskedArray_getitem_next_jagged_project( - index, - starts_in, - stops_in, - starts_out, - stops_out, - length); -} -ERROR awkward_MaskedArray64_getitem_next_jagged_project( - int64_t* index, - int64_t* starts_in, - int64_t* stops_in, - int64_t* starts_out, - int64_t* stops_out, - int64_t length) { - return awkward_MaskedArray_getitem_next_jagged_project( - index, - starts_in, - stops_in, - starts_out, - stops_out, - length); -} + +#define WRAPPER(SUFFIX, T) \ + ERROR awkward_MaskedArray##SUFFIX(T* index, int64_t* starts_in, int64_t* stops_in, int64_t* starts_out, int64_t* stops_out, int64_t length) { \ + return awkward_MaskedArray_getitem_next_jagged_project(index, starts_in, stops_in, starts_out, stops_out, length); \ + } + +WRAPPER(32_getitem_next_jagged_project, int32_t) +WRAPPER(U32_getitem_next_jagged_project, uint32_t) +WRAPPER(64_getitem_next_jagged_project, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_NumpyArray_pad_zero_to_length.cpp b/awkward-cpp/src/cpu-kernels/awkward_NumpyArray_pad_zero_to_length.cpp index fff7fb7c9c..ccaeb2166e 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_NumpyArray_pad_zero_to_length.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_NumpyArray_pad_zero_to_length.cpp @@ -34,44 +34,11 @@ ERROR awkward_NumpyArray_pad_zero_to_length( return success(); } -ERROR awkward_NumpyArray_pad_zero_to_length_uint8_int32( - const uint8_t* fromptr, - const int32_t* fromoffsets, - int64_t offsetslength, - int64_t target, - uint8_t* toptr) { - return awkward_NumpyArray_pad_zero_to_length( - fromptr, - fromoffsets, - offsetslength, - target, - toptr); -} - -ERROR awkward_NumpyArray_pad_zero_to_length_uint8_uint32( - const uint8_t* fromptr, - const uint32_t* fromoffsets, - int64_t offsetslength, - int64_t target, - uint8_t* toptr) { - return awkward_NumpyArray_pad_zero_to_length( - fromptr, - fromoffsets, - offsetslength, - target, - toptr); -} - -ERROR awkward_NumpyArray_pad_zero_to_length_uint8_int64( - const uint8_t* fromptr, - const int64_t* fromoffsets, - int64_t offsetslength, - int64_t target, - uint8_t* toptr) { - return awkward_NumpyArray_pad_zero_to_length( - fromptr, - fromoffsets, - offsetslength, - target, - toptr); -} +#define WRAPPER(SUFFIX, T, C) \ + ERROR awkward_NumpyArray_pad_zero_to_length_uint8_##SUFFIX(const T* fromptr, const C* fromoffsets, int64_t offsetslength, int64_t target, T* toptr) { \ + return awkward_NumpyArray_pad_zero_to_length(fromptr, fromoffsets, offsetslength, target, toptr); \ + } + +WRAPPER(int32, uint8_t, int32_t) +WRAPPER(uint32, uint8_t, uint32_t) +WRAPPER(int64, uint8_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_NumpyArray_prepare_utf8_to_utf32_padded.cpp b/awkward-cpp/src/cpu-kernels/awkward_NumpyArray_prepare_utf8_to_utf32_padded.cpp index f1c339ab20..a223fa15da 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_NumpyArray_prepare_utf8_to_utf32_padded.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_NumpyArray_prepare_utf8_to_utf32_padded.cpp @@ -40,38 +40,11 @@ ERROR awkward_NumpyArray_prepare_utf8_to_utf32_padded( return success(); } -ERROR awkward_NumpyArray_prepare_utf8_to_utf32_padded_int32( - const uint8_t *fromptr, - const int32_t *fromoffsets, - int64_t offsetslength, - int64_t *outmaxcodepoints) { - return awkward_NumpyArray_prepare_utf8_to_utf32_padded( - fromptr, - fromoffsets, - offsetslength, - outmaxcodepoints); -} - -ERROR awkward_NumpyArray_prepare_utf8_to_utf32_padded_uint32( - const uint8_t *fromptr, - const uint32_t *fromoffsets, - int64_t offsetslength, - int64_t *outmaxcodepoints) { - return awkward_NumpyArray_prepare_utf8_to_utf32_padded( - fromptr, - fromoffsets, - offsetslength, - outmaxcodepoints); -} +#define WRAPPER(SUFFIX, T) \ + ERROR awkward_NumpyArray_prepare_utf8_to_utf32_padded_##SUFFIX(const uint8_t *fromptr, const T *fromoffsets, int64_t offsetslength, int64_t *outmaxcodepoints) { \ + return awkward_NumpyArray_prepare_utf8_to_utf32_padded(fromptr, fromoffsets, offsetslength, outmaxcodepoints); \ + } -ERROR awkward_NumpyArray_prepare_utf8_to_utf32_padded_int64( - const uint8_t *fromptr, - const int64_t *fromoffsets, - int64_t offsetslength, - int64_t *outmaxcodepoints) { - return awkward_NumpyArray_prepare_utf8_to_utf32_padded( - fromptr, - fromoffsets, - offsetslength, - outmaxcodepoints); -} +WRAPPER(int32, int32_t) +WRAPPER(uint32, uint32_t) +WRAPPER(int64, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_NumpyArray_rearrange_shifted.cpp b/awkward-cpp/src/cpu-kernels/awkward_NumpyArray_rearrange_shifted.cpp index 01229cc852..e5786dad90 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_NumpyArray_rearrange_shifted.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_NumpyArray_rearrange_shifted.cpp @@ -11,20 +11,28 @@ awkward_NumpyArray_rearrange_shifted( const FROM* fromshifts, int64_t length, const FROM* fromoffsets, - int64_t offsetslength, + int64_t outlength, const FROM* fromparents, const FROM* fromstarts) { + // Phase 1: convert per-bin sorted positions into absolute positions by + // adding fromoffsets[bin] to each element in bin's range. Walk bin-major. int64_t k = 0; - for (int64_t i = 0; i < offsetslength - 1; i++) { - for (int64_t j = 0; j < fromoffsets[i + 1] - fromoffsets[i]; j++) { - toptr[k] = toptr[k] + fromoffsets[i]; + for (int64_t bin = 0; bin < outlength; bin++) { + FROM bin_offset = fromoffsets[bin]; + int64_t count = (int64_t)(fromoffsets[bin + 1] - bin_offset); + for (int64_t j = 0; j < count; j++) { + toptr[k] = (TO)(toptr[k] + bin_offset); k++; } } - for (int64_t i = 0; i < length; i++) { - int64_t parent = fromparents[i]; - int64_t start = fromstarts[parent]; - toptr[i] = toptr[i] + fromshifts[toptr[i]] - start; + + // Phase 2: apply per-shift correction. `length` is the number of shifts, + // which is independent of the bin count, so we still need `fromparents` + // to map each shift index to its outer bin. + for (int64_t i = 0; i < length; i++) { + FROM parent = fromparents[i]; + FROM start = fromstarts[parent]; + toptr[i] = (TO)(toptr[i] + fromshifts[toptr[i]] - start); } return success(); @@ -35,9 +43,9 @@ awkward_NumpyArray_rearrange_shifted_toint64_fromint64( const int64_t* fromshifts, int64_t length, const int64_t* fromoffsets, - int64_t offsetslength, + int64_t outlength, const int64_t* fromparents, const int64_t* fromstarts) { return awkward_NumpyArray_rearrange_shifted( - toptr, fromshifts, length, fromoffsets, offsetslength, fromparents, fromstarts); + toptr, fromshifts, length, fromoffsets, outlength, fromparents, fromstarts); } diff --git a/awkward-cpp/src/cpu-kernels/awkward_NumpyArray_reduce_adjust_starts_64.cpp b/awkward-cpp/src/cpu-kernels/awkward_NumpyArray_reduce_adjust_starts_64.cpp index 2462a10037..1dd6cdfced 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_NumpyArray_reduce_adjust_starts_64.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_NumpyArray_reduce_adjust_starts_64.cpp @@ -7,14 +7,18 @@ ERROR awkward_NumpyArray_reduce_adjust_starts_64( int64_t* toptr, int64_t outlength, - const int64_t* parents, + const int64_t* offsets, // unused: see note below const int64_t* starts) { - for (int64_t k = 0; k < outlength; k++) { + // For output bin k, toptr[k] is the argmin/argmax result — i.e. the index + // (within the flat input) of the chosen element. By construction that + // element belongs to bin k, so the bin lookup `parents[toptr[k]]` would + // simply yield k. We use k directly and avoid the indirection. The + // `offsets` argument is kept in the signature for symmetry with the rest + // of the offsets-pipeline migration; downstream callers may drop it later. + for (int64_t k = 0; k < outlength; k++) { int64_t i = toptr[k]; if (i >= 0) { - int64_t parent = parents[i]; - int64_t start = starts[parent]; - toptr[k] += -start; + toptr[k] -= starts[k]; } } return success(); diff --git a/awkward-cpp/src/cpu-kernels/awkward_NumpyArray_reduce_adjust_starts_shifts_64.cpp b/awkward-cpp/src/cpu-kernels/awkward_NumpyArray_reduce_adjust_starts_shifts_64.cpp index 114ba9e798..2bf50cd459 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_NumpyArray_reduce_adjust_starts_shifts_64.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_NumpyArray_reduce_adjust_starts_shifts_64.cpp @@ -7,15 +7,16 @@ ERROR awkward_NumpyArray_reduce_adjust_starts_shifts_64( int64_t* toptr, int64_t outlength, - const int64_t* parents, + const int64_t* /* offsets */, // unused: see note in adjust_starts_64 const int64_t* starts, const int64_t* shifts) { - for (int64_t k = 0; k < outlength; k++) { + // See `awkward_NumpyArray_reduce_adjust_starts_64` for the rationale. + // `parents[toptr[k]] == k` by construction of argmin/argmax, so we use k + // directly to look up the bin's start. + for (int64_t k = 0; k < outlength; k++) { int64_t i = toptr[k]; if (i >= 0) { - int64_t parent = parents[i]; - int64_t start = starts[parent]; - toptr[k] += shifts[i] - start; + toptr[k] += shifts[i] - starts[k]; } } return success(); diff --git a/awkward-cpp/src/cpu-kernels/awkward_NumpyArray_reduce_mask_ByteMaskedArray_64.cpp b/awkward-cpp/src/cpu-kernels/awkward_NumpyArray_reduce_mask_ByteMaskedArray_64.cpp index 7149c62d28..33861d7abd 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_NumpyArray_reduce_mask_ByteMaskedArray_64.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_NumpyArray_reduce_mask_ByteMaskedArray_64.cpp @@ -6,14 +6,17 @@ ERROR awkward_NumpyArray_reduce_mask_ByteMaskedArray_64( int8_t* toptr, - const int64_t* parents, - int64_t lenparents, + const int64_t* offsets, int64_t outlength) { - for (int64_t i = 0; i < outlength; i++) { - toptr[i] = 1; - } - for (int64_t i = 0; i < lenparents; i++) { - toptr[parents[i]] = 0; + + for (int64_t i = 0; i < outlength; i++) { + // A bin is 'masked' (toptr=1) if the count for that bin is 0. + // The count for bin i is defined by offsets[i+1] - offsets[i]. + if (offsets[i+1] - offsets[i] > 0) { + toptr[i] = 0; // Not masked (has data) + } else { + toptr[i] = 1; // Masked (empty) + } } return success(); } diff --git a/awkward-cpp/src/cpu-kernels/awkward_NumpyArray_subrange_equal.cpp b/awkward-cpp/src/cpu-kernels/awkward_NumpyArray_subrange_equal.cpp index 0cd0fd701d..590de32d99 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_NumpyArray_subrange_equal.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_NumpyArray_subrange_equal.cpp @@ -36,133 +36,19 @@ ERROR awkward_NumpyArray_subrange_equal( return success(); } -ERROR awkward_NumpyArray_subrange_equal_int8( - int8_t* tmpptr, - const int64_t* fromstarts, - const int64_t* fromstops, - int64_t length, - bool* toequal) { - return awkward_NumpyArray_subrange_equal( - tmpptr, - fromstarts, - fromstops, - length, - toequal); -} -ERROR awkward_NumpyArray_subrange_equal_uint8( - uint8_t* tmpptr, - const int64_t* fromstarts, - const int64_t* fromstops, - int64_t length, - bool* toequal) { - return awkward_NumpyArray_subrange_equal( - tmpptr, - fromstarts, - fromstops, - length, - toequal); -} -ERROR awkward_NumpyArray_subrange_equal_int16( - int16_t* tmpptr, - const int64_t* fromstarts, - const int64_t* fromstops, - int64_t length, - bool* toequal) { - return awkward_NumpyArray_subrange_equal( - tmpptr, - fromstarts, - fromstops, - length, - toequal); -} -ERROR awkward_NumpyArray_subrange_equal_uint16( - uint16_t* tmpptr, - const int64_t* fromstarts, - const int64_t* fromstops, - int64_t length, - bool* toequal) { - return awkward_NumpyArray_subrange_equal( - tmpptr, - fromstarts, - fromstops, - length, - toequal); -} -ERROR awkward_NumpyArray_subrange_equal_int32( - int32_t* tmpptr, - const int64_t* fromstarts, - const int64_t* fromstops, - int64_t length, - bool* toequal) { - return awkward_NumpyArray_subrange_equal( - tmpptr, - fromstarts, - fromstops, - length, - toequal); -} -ERROR awkward_NumpyArray_subrange_equal_uint32( - uint32_t* tmpptr, - const int64_t* fromstarts, - const int64_t* fromstops, - int64_t length, - bool* toequal) { - return awkward_NumpyArray_subrange_equal( - tmpptr, - fromstarts, - fromstops, - length, - toequal); -} -ERROR awkward_NumpyArray_subrange_equal_int64( - int64_t* tmpptr, - const int64_t* fromstarts, - const int64_t* fromstops, - int64_t length, - bool* toequal) { - return awkward_NumpyArray_subrange_equal( - tmpptr, - fromstarts, - fromstops, - length, - toequal); -} -ERROR awkward_NumpyArray_subrange_equal_uint64( - uint64_t* tmpptr, - const int64_t* fromstarts, - const int64_t* fromstops, - int64_t length, - bool* toequal) { - return awkward_NumpyArray_subrange_equal( - tmpptr, - fromstarts, - fromstops, - length, - toequal); -} -ERROR awkward_NumpyArray_subrange_equal_float32( - float* tmpptr, - const int64_t* fromstarts, - const int64_t* fromstops, - int64_t length, - bool* toequal) { - return awkward_NumpyArray_subrange_equal( - tmpptr, - fromstarts, - fromstops, - length, - toequal); -} -ERROR awkward_NumpyArray_subrange_equal_float64( - double* tmpptr, - const int64_t* fromstarts, - const int64_t* fromstops, - int64_t length, - bool* toequal) { - return awkward_NumpyArray_subrange_equal( - tmpptr, - fromstarts, - fromstops, - length, - toequal); -} + +#define WRAPPER(SUFFIX, T) \ + ERROR awkward_NumpyArray_subrange_equal_##SUFFIX(T* tmpptr, const int64_t* fromstarts, const int64_t* fromstops, int64_t length, bool* toequal) { \ + return awkward_NumpyArray_subrange_equal(tmpptr, fromstarts, fromstops, length, toequal); \ + } + +WRAPPER(int8, int8_t) +WRAPPER(uint8, uint8_t) +WRAPPER(int16, int16_t) +WRAPPER(uint16, uint16_t) +WRAPPER(int32, int32_t) +WRAPPER(uint32, uint32_t) +WRAPPER(int64, int64_t) +WRAPPER(uint64, uint64_t) +WRAPPER(float32, float) +WRAPPER(float64, double) diff --git a/awkward-cpp/src/cpu-kernels/awkward_NumpyArray_utf8_to_utf32_padded.cpp b/awkward-cpp/src/cpu-kernels/awkward_NumpyArray_utf8_to_utf32_padded.cpp index 79a34e7480..b2e37bd585 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_NumpyArray_utf8_to_utf32_padded.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_NumpyArray_utf8_to_utf32_padded.cpp @@ -73,44 +73,11 @@ ERROR awkward_NumpyArray_utf8_to_utf32_padded( return success(); } -ERROR awkward_NumpyArray_utf8_to_utf32_padded_int32( - const uint8_t *fromptr, - const int32_t *fromoffsets, - int64_t offsetslength, - int64_t maxcodepoints, - uint32_t *toptr) { - return awkward_NumpyArray_utf8_to_utf32_padded( - fromptr, - fromoffsets, - offsetslength, - maxcodepoints, - toptr); -} - -ERROR awkward_NumpyArray_utf8_to_utf32_padded_uint32( - const uint8_t *fromptr, - const uint32_t *fromoffsets, - int64_t offsetslength, - int64_t maxcodepoints, - uint32_t *toptr) { - return awkward_NumpyArray_utf8_to_utf32_padded( - fromptr, - fromoffsets, - offsetslength, - maxcodepoints, - toptr); -} +#define WRAPPER(SUFFIX, T) \ + ERROR awkward_NumpyArray_utf8_to_utf32_padded_##SUFFIX(const uint8_t *fromptr, const T *fromoffsets, int64_t offsetslength, int64_t maxcodepoints, uint32_t *toptr) { \ + return awkward_NumpyArray_utf8_to_utf32_padded(fromptr, fromoffsets, offsetslength, maxcodepoints, toptr); \ + } -ERROR awkward_NumpyArray_utf8_to_utf32_padded_int64( - const uint8_t *fromptr, - const int64_t *fromoffsets, - int64_t offsetslength, - int64_t maxcodepoints, - uint32_t *toptr) { - return awkward_NumpyArray_utf8_to_utf32_padded( - fromptr, - fromoffsets, - offsetslength, - maxcodepoints, - toptr); -} +WRAPPER(int32, int32_t) +WRAPPER(uint32, uint32_t) +WRAPPER(int64, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_RegularArray_reduce_local_nextparents_64.cpp b/awkward-cpp/src/cpu-kernels/awkward_RegularArray_reduce_local_nextparents_64.cpp index 2ee4b579cc..3f4a7a27f2 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_RegularArray_reduce_local_nextparents_64.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_RegularArray_reduce_local_nextparents_64.cpp @@ -1,4 +1,11 @@ // BSD 3-Clause License; see https://github.com/scikit-hep/awkward/blob/main/LICENSE +// +// DEPRECATED — local nextparents builder for RegularArray. +// +// In the migrated pipeline, the next-layer offsets for the local-reduction +// case is just `arange(0, length*size + 1, size)`, returned directly by +// RegularArray._compact_offsets64(True). This kernel is no longer needed. +// Preserved for ABI compatibility; remove once all callers have migrated. #define FILENAME(line) FILENAME_FOR_EXCEPTIONS_C("src/cpu-kernels/awkward_RegularArray_reduce_local_nextparents_64.cpp", line) diff --git a/awkward-cpp/src/cpu-kernels/awkward_RegularArray_reduce_nonlocal_preparenext_64.cpp b/awkward-cpp/src/cpu-kernels/awkward_RegularArray_reduce_nonlocal_preparenext_64.cpp index 8816593716..d50bc00ea9 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_RegularArray_reduce_nonlocal_preparenext_64.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_RegularArray_reduce_nonlocal_preparenext_64.cpp @@ -6,19 +6,29 @@ ERROR awkward_RegularArray_reduce_nonlocal_preparenext_64( int64_t* nextcarry, - int64_t* nextparents, - const int64_t* parents, + int64_t* nextoffsets, // length outlength * size + 1 + const int64_t* offsets, // length outlength + 1 int64_t size, - int64_t length) { + int64_t /* length */, + int64_t outlength) { + // For each outer bin and column j in [0, size), we form a "nextbin" + // numbered nextbin = bin * size + j, populated by one entry per row in the + // outer bin. By iterating bin outermost and j inside it, the emitted + // nextoffsets are monotonically increasing — each nextbin is a contiguous + // run in nextcarry. The (i, j) -> content-index mapping (i * size + j) is + // unchanged from the parents-based kernel; only the linear ordering + // differs, which is fine since reductions are order-independent. int64_t k = 0; - for (int64_t j = 0; j < size; j++) { - for (int64_t i = 0; i < length; i++) { - // nextparents needs to be locally contiguous so order the output - // by the transpose, i.e. ensure that nextparents is sorted + nextoffsets[0] = 0; + for (int64_t bin = 0; bin < outlength; bin++) { + int64_t row_start = offsets[bin]; + int64_t row_stop = offsets[bin + 1]; + for (int64_t j = 0; j < size; j++) { + for (int64_t i = row_start; i < row_stop; i++) { nextcarry[k] = i * size + j; - nextparents[k] = parents[i] * size + j; k++; - + } + nextoffsets[bin * size + j + 1] = k; } } return success(); diff --git a/awkward-cpp/src/cpu-kernels/awkward_UnionArray_fillindex.cpp b/awkward-cpp/src/cpu-kernels/awkward_UnionArray_fillindex.cpp index d1b4dee428..367620c613 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_UnionArray_fillindex.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_UnionArray_fillindex.cpp @@ -15,36 +15,12 @@ ERROR awkward_UnionArray_fillindex( } return success(); } -ERROR awkward_UnionArray_fillindex_to64_from32( - int64_t* toindex, - int64_t toindexoffset, - const int32_t* fromindex, - int64_t length) { - return awkward_UnionArray_fillindex( - toindex, - toindexoffset, - fromindex, - length); -} -ERROR awkward_UnionArray_fillindex_to64_fromU32( - int64_t* toindex, - int64_t toindexoffset, - const uint32_t* fromindex, - int64_t length) { - return awkward_UnionArray_fillindex( - toindex, - toindexoffset, - fromindex, - length); -} -ERROR awkward_UnionArray_fillindex_to64_from64( - int64_t* toindex, - int64_t toindexoffset, - const int64_t* fromindex, - int64_t length) { - return awkward_UnionArray_fillindex( - toindex, - toindexoffset, - fromindex, - length); -} + +#define WRAPPER(SUFFIX, FROM, TO) \ + ERROR awkward_UnionArray_fillindex_to64_from##SUFFIX(TO* toindex, int64_t toindexoffset, const FROM* fromindex, int64_t length) { \ + return awkward_UnionArray_fillindex(toindex, toindexoffset, fromindex, length); \ + } + +WRAPPER(32, int32_t, int64_t) +WRAPPER(U32, uint32_t, int64_t) +WRAPPER(64, int64_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_UnionArray_fillna.cpp b/awkward-cpp/src/cpu-kernels/awkward_UnionArray_fillna.cpp index 3a7df4c9d5..451f167c5e 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_UnionArray_fillna.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_UnionArray_fillna.cpp @@ -15,30 +15,12 @@ ERROR awkward_UnionArray_fillna( } return success(); } -ERROR awkward_UnionArray_fillna_from32_to64( - int64_t* toindex, - const int32_t* fromindex, - int64_t length) { - return awkward_UnionArray_fillna( - toindex, - fromindex, - length); -} -ERROR awkward_UnionArray_fillna_fromU32_to64( - int64_t* toindex, - const uint32_t* fromindex, - int64_t length) { - return awkward_UnionArray_fillna( - toindex, - fromindex, - length); -} -ERROR awkward_UnionArray_fillna_from64_to64( - int64_t* toindex, - const int64_t* fromindex, - int64_t length) { - return awkward_UnionArray_fillna( - toindex, - fromindex, - length); -} + +#define WRAPPER(SUFFIX, T, C) \ + ERROR awkward_UnionArray_fillna_from##SUFFIX(T* toindex, const C* fromindex, int64_t length) { \ + return awkward_UnionArray_fillna(toindex, fromindex, length); \ + } + +WRAPPER(32_to64, int64_t, int32_t) +WRAPPER(U32_to64, int64_t, uint32_t) +WRAPPER(64_to64, int64_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_UnionArray_flatten_combine.cpp b/awkward-cpp/src/cpu-kernels/awkward_UnionArray_flatten_combine.cpp index db5ed6501b..2a673f1355 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_UnionArray_flatten_combine.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_UnionArray_flatten_combine.cpp @@ -33,54 +33,12 @@ ERROR awkward_UnionArray_flatten_combine( } return success(); } -ERROR awkward_UnionArray32_flatten_combine_64( - int8_t* totags, - int64_t* toindex, - int64_t* tooffsets, - const int8_t* fromtags, - const int32_t* fromindex, - int64_t length, - int64_t** offsetsraws) { - return awkward_UnionArray_flatten_combine( - totags, - toindex, - tooffsets, - fromtags, - fromindex, - length, - offsetsraws); -} -ERROR awkward_UnionArrayU32_flatten_combine_64( - int8_t* totags, - int64_t* toindex, - int64_t* tooffsets, - const int8_t* fromtags, - const uint32_t* fromindex, - int64_t length, - int64_t** offsetsraws) { - return awkward_UnionArray_flatten_combine( - totags, - toindex, - tooffsets, - fromtags, - fromindex, - length, - offsetsraws); -} -ERROR awkward_UnionArray64_flatten_combine_64( - int8_t* totags, - int64_t* toindex, - int64_t* tooffsets, - const int8_t* fromtags, - const int64_t* fromindex, - int64_t length, - int64_t** offsetsraws) { - return awkward_UnionArray_flatten_combine( - totags, - toindex, - tooffsets, - fromtags, - fromindex, - length, - offsetsraws); -} + +#define WRAPPER(SUFFIX, FROMTAGS, FROMINDEX, TOTAGS, TOINDEX, T) \ + ERROR awkward_UnionArray##SUFFIX(TOTAGS* totags, TOINDEX* toindex, T* tooffsets, const FROMTAGS* fromtags, const FROMINDEX* fromindex, int64_t length, T** offsetsraws) { \ + return awkward_UnionArray_flatten_combine(totags, toindex, tooffsets, fromtags, fromindex, length, offsetsraws); \ + } + +WRAPPER(32_flatten_combine_64, int8_t, int32_t, int8_t, int64_t, int64_t) +WRAPPER(U32_flatten_combine_64, int8_t, uint32_t, int8_t, int64_t, int64_t) +WRAPPER(64_flatten_combine_64, int8_t, int64_t, int8_t, int64_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_UnionArray_flatten_length.cpp b/awkward-cpp/src/cpu-kernels/awkward_UnionArray_flatten_length.cpp index ae49efde44..f9592f464a 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_UnionArray_flatten_length.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_UnionArray_flatten_length.cpp @@ -21,42 +21,12 @@ ERROR awkward_UnionArray_flatten_length( } return success(); } -ERROR awkward_UnionArray32_flatten_length_64( - int64_t* total_length, - const int8_t* fromtags, - const int32_t* fromindex, - int64_t length, - int64_t** offsetsraws) { - return awkward_UnionArray_flatten_length( - total_length, - fromtags, - fromindex, - length, - offsetsraws); -} -ERROR awkward_UnionArrayU32_flatten_length_64( - int64_t* total_length, - const int8_t* fromtags, - const uint32_t* fromindex, - int64_t length, - int64_t** offsetsraws) { - return awkward_UnionArray_flatten_length( - total_length, - fromtags, - fromindex, - length, - offsetsraws); -} -ERROR awkward_UnionArray64_flatten_length_64( - int64_t* total_length, - const int8_t* fromtags, - const int64_t* fromindex, - int64_t length, - int64_t** offsetsraws) { - return awkward_UnionArray_flatten_length( - total_length, - fromtags, - fromindex, - length, - offsetsraws); -} + +#define WRAPPER(SUFFIX, FROMTAGS, FROMINDEX, T) \ + ERROR awkward_UnionArray##SUFFIX(int64_t* total_length, const FROMTAGS* fromtags, const FROMINDEX* fromindex, int64_t length, T** offsetsraws) { \ + return awkward_UnionArray_flatten_length(total_length, fromtags, fromindex, length, offsetsraws); \ + } + +WRAPPER(32_flatten_length_64, int8_t, int32_t, int64_t) +WRAPPER(U32_flatten_length_64, int8_t, uint32_t, int64_t) +WRAPPER(64_flatten_length_64, int8_t, int64_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_UnionArray_nestedfill_tags_index.cpp b/awkward-cpp/src/cpu-kernels/awkward_UnionArray_nestedfill_tags_index.cpp index 77b38eca8b..f001f9d060 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_UnionArray_nestedfill_tags_index.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_UnionArray_nestedfill_tags_index.cpp @@ -25,43 +25,13 @@ ERROR awkward_UnionArray_nestedfill_tags_index( } return success(); } -ERROR awkward_UnionArray8_32_nestedfill_tags_index_64( - int8_t* totags, - int32_t* toindex, - int64_t* tmpstarts, - int8_t tag, - const int64_t* fromcounts, - int64_t length) { - return awkward_UnionArray_nestedfill_tags_index( - totags, toindex, tmpstarts, tag, fromcounts, length); -} -ERROR awkward_UnionArray8_U32_nestedfill_tags_index_64( - int8_t* totags, - uint32_t* toindex, - int64_t* tmpstarts, - int8_t tag, - const int64_t* fromcounts, - int64_t length) { - return awkward_UnionArray_nestedfill_tags_index( - totags, toindex, tmpstarts, tag, fromcounts, length); -} -ERROR awkward_UnionArray8_64_nestedfill_tags_index_64( - int8_t* totags, - int64_t* toindex, - int64_t* tmpstarts, - int8_t tag, - const int64_t* fromcounts, - int64_t length) { - return awkward_UnionArray_nestedfill_tags_index( - totags, toindex, tmpstarts, tag, fromcounts, length); -} -ERROR awkward_UnionArray64_64_nestedfill_tags_index_64( - int64_t* totags, - int64_t* toindex, - int64_t* tmpstarts, - int64_t tag, - const int64_t* fromcounts, - int64_t length) { - return awkward_UnionArray_nestedfill_tags_index( - totags, toindex, tmpstarts, tag, fromcounts, length); -} + +#define WRAPPER(SUFFIX, T, I, C) \ + ERROR awkward_UnionArray##SUFFIX(T* totags, I* toindex, C* tmpstarts, T tag, const C* fromcounts, int64_t length) { \ + return awkward_UnionArray_nestedfill_tags_index(totags, toindex, tmpstarts, tag, fromcounts, length); \ + } + +WRAPPER(8_32_nestedfill_tags_index_64, int8_t, int32_t, int64_t) +WRAPPER(8_U32_nestedfill_tags_index_64, int8_t, uint32_t, int64_t) +WRAPPER(8_64_nestedfill_tags_index_64, int8_t, int64_t, int64_t) +WRAPPER(64_64_nestedfill_tags_index_64, int64_t, int64_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_UnionArray_project.cpp b/awkward-cpp/src/cpu-kernels/awkward_UnionArray_project.cpp index f368cd9bb4..a16b6bab44 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_UnionArray_project.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_UnionArray_project.cpp @@ -21,48 +21,12 @@ ERROR awkward_UnionArray_project( } return success(); } -ERROR awkward_UnionArray8_32_project_64( - int64_t* lenout, - int64_t* tocarry, - const int8_t* fromtags, - const int32_t* fromindex, - int64_t length, - int64_t which) { - return awkward_UnionArray_project( - lenout, - tocarry, - fromtags, - fromindex, - length, - which); -} -ERROR awkward_UnionArray8_U32_project_64( - int64_t* lenout, - int64_t* tocarry, - const int8_t* fromtags, - const uint32_t* fromindex, - int64_t length, - int64_t which) { - return awkward_UnionArray_project( - lenout, - tocarry, - fromtags, - fromindex, - length, - which); -} -ERROR awkward_UnionArray8_64_project_64( - int64_t* lenout, - int64_t* tocarry, - const int8_t* fromtags, - const int64_t* fromindex, - int64_t length, - int64_t which) { - return awkward_UnionArray_project( - lenout, - tocarry, - fromtags, - fromindex, - length, - which); -} + +#define WRAPPER(SUFFIX, T, C, I) \ + ERROR awkward_UnionArray8_##SUFFIX(int64_t* lenout, T* tocarry, const C* fromtags, const I* fromindex, int64_t length, int64_t which) { \ + return awkward_UnionArray_project(lenout, tocarry, fromtags, fromindex, length, which); \ + } + +WRAPPER(32_project_64, int64_t, int8_t, int32_t) +WRAPPER(U32_project_64, int64_t, int8_t, uint32_t) +WRAPPER(64_project_64, int64_t, int8_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_UnionArray_regular_index.cpp b/awkward-cpp/src/cpu-kernels/awkward_UnionArray_regular_index.cpp index 362800cf73..c50f483037 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_UnionArray_regular_index.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_UnionArray_regular_index.cpp @@ -21,81 +21,15 @@ ERROR awkward_UnionArray_regular_index( } return success(); } -ERROR awkward_UnionArray64_32_regular_index( - int32_t* toindex, - int32_t* current, - int64_t size, - const int64_t* fromtags, - int64_t length) { - return awkward_UnionArray_regular_index( - toindex, - current, - size, - fromtags, - length); -} -ERROR awkward_UnionArray64_U32_regular_index( - uint32_t* toindex, - uint32_t* current, - int64_t size, - const int64_t* fromtags, - int64_t length) { - return awkward_UnionArray_regular_index( - toindex, - current, - size, - fromtags, - length); -} -ERROR awkward_UnionArray64_64_regular_index( - int64_t* toindex, - int64_t* current, - int64_t size, - const int64_t* fromtags, - int64_t length) { - return awkward_UnionArray_regular_index( - toindex, - current, - size, - fromtags, - length); -} -ERROR awkward_UnionArray8_32_regular_index( - int32_t* toindex, - int32_t* current, - int64_t size, - const int8_t* fromtags, - int64_t length) { - return awkward_UnionArray_regular_index( - toindex, - current, - size, - fromtags, - length); -} -ERROR awkward_UnionArray8_U32_regular_index( - uint32_t* toindex, - uint32_t* current, - int64_t size, - const int8_t* fromtags, - int64_t length) { - return awkward_UnionArray_regular_index( - toindex, - current, - size, - fromtags, - length); -} -ERROR awkward_UnionArray8_64_regular_index( - int64_t* toindex, - int64_t* current, - int64_t size, - const int8_t* fromtags, - int64_t length) { - return awkward_UnionArray_regular_index( - toindex, - current, - size, - fromtags, - length); -} + +#define WRAPPER(SUFFIX, C, I) \ + ERROR awkward_UnionArray##SUFFIX(I* toindex, I* current, int64_t size, const C* fromtags, int64_t length) { \ + return awkward_UnionArray_regular_index(toindex, current, size, fromtags, length); \ + } + +WRAPPER(64_32_regular_index, int64_t, int32_t) +WRAPPER(64_U32_regular_index, int64_t, uint32_t) +WRAPPER(64_64_regular_index, int64_t, int64_t) +WRAPPER(8_32_regular_index, int8_t, int32_t) +WRAPPER(8_U32_regular_index, int8_t, uint32_t) +WRAPPER(8_64_regular_index, int8_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_UnionArray_regular_index_getsize.cpp b/awkward-cpp/src/cpu-kernels/awkward_UnionArray_regular_index_getsize.cpp index 88d40fa49a..87432a07b1 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_UnionArray_regular_index_getsize.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_UnionArray_regular_index_getsize.cpp @@ -19,21 +19,11 @@ ERROR awkward_UnionArray_regular_index_getsize( *size = *size + 1; return success(); } -ERROR awkward_UnionArray64_regular_index_getsize( - int64_t* size, - const int64_t* fromtags, - int64_t length) { - return awkward_UnionArray_regular_index_getsize( - size, - fromtags, - length); -} -ERROR awkward_UnionArray8_regular_index_getsize( - int64_t* size, - const int8_t* fromtags, - int64_t length) { - return awkward_UnionArray_regular_index_getsize( - size, - fromtags, - length); -} + +#define WRAPPER(SUFFIX, C) \ + ERROR awkward_UnionArray##SUFFIX(int64_t* size, const C* fromtags, int64_t length) { \ + return awkward_UnionArray_regular_index_getsize(size, fromtags, length); \ + } + +WRAPPER(64_regular_index_getsize, int64_t) +WRAPPER(8_regular_index_getsize, int8_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_UnionArray_simplify.cpp b/awkward-cpp/src/cpu-kernels/awkward_UnionArray_simplify.cpp index 184e9483d7..d380deac3f 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_UnionArray_simplify.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_UnionArray_simplify.cpp @@ -33,253 +33,28 @@ ERROR awkward_UnionArray_simplify( } return success(); } -ERROR awkward_UnionArray8_32_simplify8_32_to8_64( - int8_t* totags, - int64_t* toindex, - const int8_t* outertags, - const int32_t* outerindex, - const int8_t* innertags, - const int32_t* innerindex, - int64_t towhich, - int64_t innerwhich, - int64_t outerwhich, - int64_t length, - int64_t base) { - return awkward_UnionArray_simplify( - totags, - toindex, - outertags, - outerindex, - innertags, - innerindex, - towhich, - innerwhich, - outerwhich, - length, - base); -} -ERROR awkward_UnionArray8_32_simplify8_U32_to8_64( - int8_t* totags, - int64_t* toindex, - const int8_t* outertags, - const int32_t* outerindex, - const int8_t* innertags, - const uint32_t* innerindex, - int64_t towhich, - int64_t innerwhich, - int64_t outerwhich, - int64_t length, - int64_t base) { - return awkward_UnionArray_simplify( - totags, - toindex, - outertags, - outerindex, - innertags, - innerindex, - towhich, - innerwhich, - outerwhich, - length, - base); -} -ERROR awkward_UnionArray8_32_simplify8_64_to8_64( - int8_t* totags, - int64_t* toindex, - const int8_t* outertags, - const int32_t* outerindex, - const int8_t* innertags, - const int64_t* innerindex, - int64_t towhich, - int64_t innerwhich, - int64_t outerwhich, - int64_t length, - int64_t base) { - return awkward_UnionArray_simplify( - totags, - toindex, - outertags, - outerindex, - innertags, - innerindex, - towhich, - innerwhich, - outerwhich, - length, - base); -} -ERROR awkward_UnionArray8_U32_simplify8_32_to8_64( - int8_t* totags, - int64_t* toindex, - const int8_t* outertags, - const uint32_t* outerindex, - const int8_t* innertags, - const int32_t* innerindex, - int64_t towhich, - int64_t innerwhich, - int64_t outerwhich, - int64_t length, - int64_t base) { - return awkward_UnionArray_simplify( - totags, - toindex, - outertags, - outerindex, - innertags, - innerindex, - towhich, - innerwhich, - outerwhich, - length, - base); -} -ERROR awkward_UnionArray8_U32_simplify8_U32_to8_64( - int8_t* totags, - int64_t* toindex, - const int8_t* outertags, - const uint32_t* outerindex, - const int8_t* innertags, - const uint32_t* innerindex, - int64_t towhich, - int64_t innerwhich, - int64_t outerwhich, - int64_t length, - int64_t base) { - return awkward_UnionArray_simplify( - totags, - toindex, - outertags, - outerindex, - innertags, - innerindex, - towhich, - innerwhich, - outerwhich, - length, - base); -} -ERROR awkward_UnionArray8_U32_simplify8_64_to8_64( - int8_t* totags, - int64_t* toindex, - const int8_t* outertags, - const uint32_t* outerindex, - const int8_t* innertags, - const int64_t* innerindex, - int64_t towhich, - int64_t innerwhich, - int64_t outerwhich, - int64_t length, - int64_t base) { - return awkward_UnionArray_simplify( - totags, - toindex, - outertags, - outerindex, - innertags, - innerindex, - towhich, - innerwhich, - outerwhich, - length, - base); -} -ERROR awkward_UnionArray8_64_simplify8_32_to8_64( - int8_t* totags, - int64_t* toindex, - const int8_t* outertags, - const int64_t* outerindex, - const int8_t* innertags, - const int32_t* innerindex, - int64_t towhich, - int64_t innerwhich, - int64_t outerwhich, - int64_t length, - int64_t base) { - return awkward_UnionArray_simplify( - totags, - toindex, - outertags, - outerindex, - innertags, - innerindex, - towhich, - innerwhich, - outerwhich, - length, - base); -} -ERROR awkward_UnionArray8_64_simplify8_U32_to8_64( - int8_t* totags, - int64_t* toindex, - const int8_t* outertags, - const int64_t* outerindex, - const int8_t* innertags, - const uint32_t* innerindex, - int64_t towhich, - int64_t innerwhich, - int64_t outerwhich, - int64_t length, - int64_t base) { - return awkward_UnionArray_simplify( - totags, - toindex, - outertags, - outerindex, - innertags, - innerindex, - towhich, - innerwhich, - outerwhich, - length, - base); -} -ERROR awkward_UnionArray8_64_simplify8_64_to8_64( - int8_t* totags, - int64_t* toindex, - const int8_t* outertags, - const int64_t* outerindex, - const int8_t* innertags, - const int64_t* innerindex, - int64_t towhich, - int64_t innerwhich, - int64_t outerwhich, - int64_t length, - int64_t base) { - return awkward_UnionArray_simplify( - totags, - toindex, - outertags, - outerindex, - innertags, - innerindex, - towhich, - innerwhich, - outerwhich, - length, - base); -} -ERROR awkward_UnionArray64_64_simplify8_64_to8_64( - int8_t* totags, - int64_t* toindex, - const int64_t* outertags, - const int64_t* outerindex, - const int8_t* innertags, - const int64_t* innerindex, - int64_t towhich, - int64_t innerwhich, - int64_t outerwhich, - int64_t length, - int64_t base) { - return awkward_UnionArray_simplify( - totags, - toindex, - outertags, - outerindex, - innertags, - innerindex, - towhich, - innerwhich, - outerwhich, - length, - base); -} + +#define UNION_SIMPLIFY(SUFFIX, OUTERTAGS, OUTERINDEX, INNERTAGS, INNERINDEX, TOTAGS, TOINDEX) \ + ERROR awkward_UnionArray##SUFFIX( \ + TOTAGS* totags, TOINDEX* toindex, \ + const OUTERTAGS* outertags, const OUTERINDEX* outerindex, \ + const INNERTAGS* innertags, const INNERINDEX* innerindex, \ + int64_t towhich, int64_t innerwhich, int64_t outerwhich, \ + int64_t length, int64_t base) { \ + return awkward_UnionArray_simplify( \ + totags, toindex, outertags, outerindex, innertags, innerindex, \ + towhich, innerwhich, outerwhich, length, base); \ + } + +// All 10 ABI specialisations. Outer/inner index dtypes vary across +// {int32, uint32, int64}; tag dtypes are int8 (or int64 in the last row). +UNION_SIMPLIFY(8_32_simplify8_32_to8_64, int8_t, int32_t, int8_t, int32_t, int8_t, int64_t) +UNION_SIMPLIFY(8_32_simplify8_U32_to8_64, int8_t, int32_t, int8_t, uint32_t, int8_t, int64_t) +UNION_SIMPLIFY(8_32_simplify8_64_to8_64, int8_t, int32_t, int8_t, int64_t, int8_t, int64_t) +UNION_SIMPLIFY(8_U32_simplify8_32_to8_64, int8_t, uint32_t, int8_t, int32_t, int8_t, int64_t) +UNION_SIMPLIFY(8_U32_simplify8_U32_to8_64, int8_t, uint32_t, int8_t, uint32_t, int8_t, int64_t) +UNION_SIMPLIFY(8_U32_simplify8_64_to8_64, int8_t, uint32_t, int8_t, int64_t, int8_t, int64_t) +UNION_SIMPLIFY(8_64_simplify8_32_to8_64, int8_t, int64_t, int8_t, int32_t, int8_t, int64_t) +UNION_SIMPLIFY(8_64_simplify8_U32_to8_64, int8_t, int64_t, int8_t, uint32_t, int8_t, int64_t) +UNION_SIMPLIFY(8_64_simplify8_64_to8_64, int8_t, int64_t, int8_t, int64_t, int8_t, int64_t) +UNION_SIMPLIFY(64_64_simplify8_64_to8_64, int64_t, int64_t, int8_t, int64_t, int8_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_UnionArray_simplify_one.cpp b/awkward-cpp/src/cpu-kernels/awkward_UnionArray_simplify_one.cpp index be29d352d0..8880c2bf18 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_UnionArray_simplify_one.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_UnionArray_simplify_one.cpp @@ -25,79 +25,13 @@ ERROR awkward_UnionArray_simplify_one( } return success(); } -ERROR awkward_UnionArray8_32_simplify_one_to8_64( - int8_t* totags, - int64_t* toindex, - const int8_t* fromtags, - const int32_t* fromindex, - int64_t towhich, - int64_t fromwhich, - int64_t length, - int64_t base) { - return awkward_UnionArray_simplify_one( - totags, - toindex, - fromtags, - fromindex, - towhich, - fromwhich, - length, - base); -} -ERROR awkward_UnionArray8_U32_simplify_one_to8_64( - int8_t* totags, - int64_t* toindex, - const int8_t* fromtags, - const uint32_t* fromindex, - int64_t towhich, - int64_t fromwhich, - int64_t length, - int64_t base) { - return awkward_UnionArray_simplify_one( - totags, - toindex, - fromtags, - fromindex, - towhich, - fromwhich, - length, - base); -} -ERROR awkward_UnionArray8_64_simplify_one_to8_64( - int8_t* totags, - int64_t* toindex, - const int8_t* fromtags, - const int64_t* fromindex, - int64_t towhich, - int64_t fromwhich, - int64_t length, - int64_t base) { - return awkward_UnionArray_simplify_one( - totags, - toindex, - fromtags, - fromindex, - towhich, - fromwhich, - length, - base); -} -ERROR awkward_UnionArray64_64_simplify_one_to8_64( - int8_t* totags, - int64_t* toindex, - const int64_t* fromtags, - const int64_t* fromindex, - int64_t towhich, - int64_t fromwhich, - int64_t length, - int64_t base) { - return awkward_UnionArray_simplify_one( - totags, - toindex, - fromtags, - fromindex, - towhich, - fromwhich, - length, - base); -} + +#define WRAPPER(SUFFIX, FROMTAGS, FROMINDEX, TOTAGS, TOINDEX) \ + ERROR awkward_UnionArray##SUFFIX(TOTAGS* totags, TOINDEX* toindex, const FROMTAGS* fromtags, const FROMINDEX* fromindex, int64_t towhich, int64_t fromwhich, int64_t length, int64_t base) { \ + return awkward_UnionArray_simplify_one(totags, toindex, fromtags, fromindex, towhich, fromwhich, length, base); \ + } + +WRAPPER(8_32_simplify_one_to8_64, int8_t, int32_t, int8_t, int64_t) +WRAPPER(8_U32_simplify_one_to8_64, int8_t, uint32_t, int8_t, int64_t) +WRAPPER(8_64_simplify_one_to8_64, int8_t, int64_t, int8_t, int64_t) +WRAPPER(64_64_simplify_one_to8_64, int64_t, int64_t, int8_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_UnionArray_validity.cpp b/awkward-cpp/src/cpu-kernels/awkward_UnionArray_validity.cpp index 833d5e5290..9aaf760c23 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_UnionArray_validity.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_UnionArray_validity.cpp @@ -30,42 +30,12 @@ ERROR awkward_UnionArray_validity( } return success(); } -ERROR awkward_UnionArray8_32_validity( - const int8_t* tags, - const int32_t* index, - int64_t length, - int64_t numcontents, - const int64_t* lencontents) { - return awkward_UnionArray_validity( - tags, - index, - length, - numcontents, - lencontents); -} -ERROR awkward_UnionArray8_U32_validity( - const int8_t* tags, - const uint32_t* index, - int64_t length, - int64_t numcontents, - const int64_t* lencontents) { - return awkward_UnionArray_validity( - tags, - index, - length, - numcontents, - lencontents); -} -ERROR awkward_UnionArray8_64_validity( - const int8_t* tags, - const int64_t* index, - int64_t length, - int64_t numcontents, - const int64_t* lencontents) { - return awkward_UnionArray_validity( - tags, - index, - length, - numcontents, - lencontents); -} + +#define WRAPPER(SUFFIX, T, I) \ + ERROR awkward_UnionArray8_##SUFFIX(const T* tags, const I* index, int64_t length, int64_t numcontents, const int64_t* lencontents) { \ + return awkward_UnionArray_validity(tags, index, length, numcontents, lencontents); \ + } + +WRAPPER(32_validity, int8_t, int32_t) +WRAPPER(U32_validity, int8_t, uint32_t) +WRAPPER(64_validity, int8_t, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_argsort.cpp b/awkward-cpp/src/cpu-kernels/awkward_argsort.cpp index 25996169ab..b408673990 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_argsort.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_argsort.cpp @@ -5,265 +5,80 @@ #include #include #include -#include +#include #include "awkward/kernels.h" -template -bool argsort_order_ascending(T l, T r) -{ - return !std::isnan(static_cast(r)) && (std::isnan(static_cast(l)) || l < r); -} - -template -bool argsort_order_descending(T l, T r) -{ - return !std::isnan(static_cast(r)) && (std::isnan(static_cast(l)) || l > r); -} - -template +// Per-segment argsort. NaNs are pushed to the high end (matching NumPy / +// the older hand-rolled comparator). The ascending/descending choice and +// the floating-point NaN handling are folded into a single inline lambda; +// `if constexpr` lets the bool / integer specialisations compile without +// an `std::isnan(bool)` instantiation. +template ERROR awkward_argsort( int64_t* toptr, const T* fromptr, int64_t length, - const int64_t* offsets, + const U* offsets, int64_t offsetslength, bool ascending, bool stable) { - std::iota(toptr, toptr + length, 0); - + std::iota(toptr, toptr + length, int64_t{0}); + + auto less = [&](int64_t a, int64_t b) -> bool { + T l = fromptr[a]; + T r = fromptr[b]; + if constexpr (std::is_floating_point_v) { + if (std::isnan(r)) return false; + if (std::isnan(l)) return true; + } + return ascending ? (l < r) : (l > r); + }; + + // Bin loop is embarrassingly parallel: each segment of `toptr` is sorted + // independently. The `if(...)` clause keeps the parallel region inert for + // tiny outputs where thread-startup would dominate. + #ifdef _OPENMP + #pragma omp parallel for if(offsetslength > 1024) schedule(dynamic, 64) + #endif for (int64_t i = 0; i < offsetslength - 1; i++) { - int64_t start_off = offsets[i]; - int64_t stop_off = offsets[i + 1]; + int64_t lo = static_cast(offsets[i]); + int64_t hi = static_cast(offsets[i + 1]); + int64_t* first = toptr + lo; + int64_t* last = toptr + hi; - int64_t* segment_start = toptr + start_off; - int64_t* segment_stop = toptr + stop_off; + if (stable) std::stable_sort(first, last, less); + else std::sort(first, last, less); - auto comparator = [&fromptr, ascending](int64_t i1, int64_t i2) { - if (ascending) return argsort_order_ascending(fromptr[i1], fromptr[i2]); - else return argsort_order_descending(fromptr[i1], fromptr[i2]); - }; - - if (stable) { - std::stable_sort(segment_start, segment_stop, comparator); - } else { - std::sort(segment_start, segment_stop, comparator); - } - - std::transform(segment_start, segment_stop, segment_start, [start_off](int64_t j) { - return j - start_off; - }); + std::transform(first, last, first, + [lo](int64_t j) { return j - lo; }); } - return success(); } -ERROR awkward_argsort_bool( - int64_t* toptr, - const bool* fromptr, - int64_t length, - const int64_t* offsets, - int64_t offsetslength, - bool ascending, - bool stable) { - return awkward_argsort( - toptr, - fromptr, - length, - offsets, - offsetslength, - ascending, - stable); -} - -ERROR awkward_argsort_int8( - int64_t* toptr, - const int8_t* fromptr, - int64_t length, - const int64_t* offsets, - int64_t offsetslength, - bool ascending, - bool stable) { - return awkward_argsort( - toptr, - fromptr, - length, - offsets, - offsetslength, - ascending, - stable); -} - -ERROR awkward_argsort_uint8( - int64_t* toptr, - const uint8_t* fromptr, - int64_t length, - const int64_t* offsets, - int64_t offsetslength, - bool ascending, - bool stable) { - return awkward_argsort( - toptr, - fromptr, - length, - offsets, - offsetslength, - ascending, - stable); -} - -ERROR awkward_argsort_int16( - int64_t* toptr, - const int16_t* fromptr, - int64_t length, - const int64_t* offsets, - int64_t offsetslength, - bool ascending, - bool stable) { - return awkward_argsort( - toptr, - fromptr, - length, - offsets, - offsetslength, - ascending, - stable); -} - -ERROR awkward_argsort_uint16( - int64_t* toptr, - const uint16_t* fromptr, - int64_t length, - const int64_t* offsets, - int64_t offsetslength, - bool ascending, - bool stable) { - return awkward_argsort( - toptr, - fromptr, - length, - offsets, - offsetslength, - ascending, - stable); -} - -ERROR awkward_argsort_int32( - int64_t* toptr, - const int32_t* fromptr, - int64_t length, - const int64_t* offsets, - int64_t offsetslength, - bool ascending, - bool stable) { - return awkward_argsort( - toptr, - fromptr, - length, - offsets, - offsetslength, - ascending, - stable); -} - -ERROR awkward_argsort_uint32( - int64_t* toptr, - const uint32_t* fromptr, - int64_t length, - const int64_t* offsets, - int64_t offsetslength, - bool ascending, - bool stable) { - return awkward_argsort( - toptr, - fromptr, - length, - offsets, - offsetslength, - ascending, - stable); -} - -ERROR awkward_argsort_int64( - int64_t* toptr, - const int64_t* fromptr, - int64_t length, - const int64_t* offsets, - int64_t offsetslength, - bool ascending, - bool stable) { - return awkward_argsort( - toptr, - fromptr, - length, - offsets, - offsetslength, - ascending, - stable); -} - -ERROR awkward_argsort_uint64( - int64_t* toptr, - const uint64_t* fromptr, - int64_t length, - const int64_t* offsets, - int64_t offsetslength, - bool ascending, - bool stable) { - return awkward_argsort( - toptr, - fromptr, - length, - offsets, - offsetslength, - ascending, - stable); -} - -ERROR awkward_argsort_float32( - int64_t* toptr, - const float* fromptr, - int64_t length, - const int64_t* offsets, - int64_t offsetslength, - bool ascending, - bool stable) { - return awkward_argsort( - toptr, - fromptr, - length, - offsets, - offsetslength, - ascending, - stable); -} - -ERROR awkward_argsort_float64( - int64_t* toptr, - const double* fromptr, - int64_t length, - const int64_t* offsets, - int64_t offsetslength, - bool ascending, - bool stable) { - return awkward_argsort( - toptr, - fromptr, - length, - offsets, - offsetslength, - ascending, - stable); -} - -template <> -bool argsort_order_ascending(bool l, bool r) -{ - return l < r; -} +#define ARGSORT_OFF(T, NAME, U, ONAME) \ + ERROR awkward_argsort_##NAME##_##ONAME( \ + int64_t* toptr, const T* fromptr, int64_t length, \ + const U* offsets, int64_t offsetslength, \ + bool ascending, bool stable) { \ + return awkward_argsort( \ + toptr, fromptr, length, offsets, offsetslength, ascending, stable); \ + } -template <> -bool argsort_order_descending(bool l, bool r) -{ - return l > r; -} +#define ARGSORT(T, NAME) \ + ARGSORT_OFF(T, NAME, int32_t, int32) \ + ARGSORT_OFF(T, NAME, uint32_t, uint32) \ + ARGSORT_OFF(T, NAME, uint64_t, uint64) \ + ARGSORT_OFF(T, NAME, int64_t, int64) + +ARGSORT(bool, bool) +ARGSORT(int8_t, int8) +ARGSORT(uint8_t, uint8) +ARGSORT(int16_t, int16) +ARGSORT(uint16_t, uint16) +ARGSORT(int32_t, int32) +ARGSORT(uint32_t, uint32) +ARGSORT(int64_t, int64) +ARGSORT(uint64_t, uint64) +ARGSORT(float, float32) +ARGSORT(double, float64) diff --git a/awkward-cpp/src/cpu-kernels/awkward_reduce_argmax.cpp b/awkward-cpp/src/cpu-kernels/awkward_reduce_argmax.cpp index 0e0f0ef8e0..a495e90a8a 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_reduce_argmax.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_reduce_argmax.cpp @@ -4,196 +4,52 @@ #include "awkward/kernels.h" +// Per-bin argmax. See `awkward_reduce_argmin` for the rationale. template ERROR awkward_reduce_argmax( - OUT* toptr, - const IN* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - const int64_t* starts, - int64_t outlength) { - std::fill_n(toptr, outlength, static_cast(-1)); - - for (int64_t i = 0; i < lenparents; i++) { - int64_t parent = parents[i]; - int64_t current_best_idx = toptr[parent]; - - auto candidate_val = fromptr[i]; - - if (current_best_idx == -1 || candidate_val > fromptr[current_best_idx]) { - toptr[parent] = i; + OUT* __restrict__ toptr, + const IN* __restrict__ fromptr, + const int64_t* __restrict__ offsets, + const int64_t* /* starts */, + int64_t outlength) { + #ifdef _OPENMP + #pragma omp parallel for if(outlength > 1024) schedule(static) + #endif + for (int64_t bin = 0; bin < outlength; bin++) { + const int64_t start = offsets[bin]; + const int64_t stop = offsets[bin + 1]; + int64_t best = -1; + if (start < stop) { + best = start; + IN best_val = fromptr[start]; + for (int64_t i = start + 1; i < stop; i++) { + IN v = fromptr[i]; + if (v > best_val) { + best_val = v; + best = i; + } + } } + toptr[bin] = static_cast(best); } return success(); } -ERROR awkward_reduce_argmax_int8_64( - int64_t* toptr, - const int8_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - const int64_t* starts, - int64_t outlength) { - return awkward_reduce_argmax( - toptr, - fromptr, - parents, - offsets, - lenparents, - starts, - outlength); -} -ERROR awkward_reduce_argmax_uint8_64( - int64_t* toptr, - const uint8_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - const int64_t* starts, - int64_t outlength) { - return awkward_reduce_argmax( - toptr, - fromptr, - parents, - offsets, - lenparents, - starts, - outlength); -} -ERROR awkward_reduce_argmax_int16_64( - int64_t* toptr, - const int16_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - const int64_t* starts, - int64_t outlength) { - return awkward_reduce_argmax( - toptr, - fromptr, - parents, - offsets, - lenparents, - starts, - outlength); -} -ERROR awkward_reduce_argmax_uint16_64( - int64_t* toptr, - const uint16_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - const int64_t* starts, - int64_t outlength) { - return awkward_reduce_argmax( - toptr, - fromptr, - parents, - offsets, - lenparents, - starts, - outlength); -} -ERROR awkward_reduce_argmax_int32_64( - int64_t* toptr, - const int32_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - const int64_t* starts, - int64_t outlength) { - return awkward_reduce_argmax( - toptr, - fromptr, - parents, - offsets, - lenparents, - starts, - outlength); -} -ERROR awkward_reduce_argmax_uint32_64( - int64_t* toptr, - const uint32_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - const int64_t* starts, - int64_t outlength) { - return awkward_reduce_argmax( - toptr, - fromptr, - parents, - offsets, - lenparents, - starts, - outlength); -} -ERROR awkward_reduce_argmax_int64_64( - int64_t* toptr, - const int64_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - const int64_t* starts, - int64_t outlength) { - return awkward_reduce_argmax( - toptr, - fromptr, - parents, - offsets, - lenparents, - starts, - outlength); -} -ERROR awkward_reduce_argmax_uint64_64( - int64_t* toptr, - const uint64_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - const int64_t* starts, - int64_t outlength) { - return awkward_reduce_argmax( - toptr, - fromptr, - parents, - offsets, - lenparents, - starts, - outlength); -} -ERROR awkward_reduce_argmax_float32_64( - int64_t* toptr, - const float* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - const int64_t* starts, - int64_t outlength) { - return awkward_reduce_argmax( - toptr, - fromptr, - parents, - offsets, - lenparents, - starts, - outlength); -} -ERROR awkward_reduce_argmax_float64_64( - int64_t* toptr, - const double* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - const int64_t* starts, - int64_t outlength) { - return awkward_reduce_argmax( - toptr, - fromptr, - parents, - offsets, - lenparents, - starts, - outlength); -} + +#define REDUCE_ARGMAX(IN_T, IN_N) \ + ERROR awkward_reduce_argmax_##IN_N##_64( \ + int64_t* toptr, const IN_T* fromptr, \ + const int64_t* offsets, const int64_t* starts, int64_t outlength) { \ + return awkward_reduce_argmax( \ + toptr, fromptr, offsets, starts, outlength); \ + } + +REDUCE_ARGMAX(int8_t, int8) +REDUCE_ARGMAX(uint8_t, uint8) +REDUCE_ARGMAX(int16_t, int16) +REDUCE_ARGMAX(uint16_t, uint16) +REDUCE_ARGMAX(int32_t, int32) +REDUCE_ARGMAX(uint32_t, uint32) +REDUCE_ARGMAX(int64_t, int64) +REDUCE_ARGMAX(uint64_t, uint64) +REDUCE_ARGMAX(float, float32) +REDUCE_ARGMAX(double, float64) diff --git a/awkward-cpp/src/cpu-kernels/awkward_reduce_argmax_complex.cpp b/awkward-cpp/src/cpu-kernels/awkward_reduce_argmax_complex.cpp index 7424db83dc..ee71e20eb9 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_reduce_argmax_complex.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_reduce_argmax_complex.cpp @@ -8,59 +8,32 @@ template ERROR awkward_reduce_argmax_complex( OUT* toptr, const IN* fromptr, - const int64_t* parents, const int64_t* offsets, - int64_t lenparents, int64_t outlength) { - - std::fill_n(toptr, outlength, static_cast(-1)); - - for (int64_t i = 0; i < lenparents; i++) { - int64_t parent = parents[i]; - int64_t current_idx = toptr[parent]; - - if (current_idx == -1) { - toptr[parent] = i; - } else { - IN real_i = fromptr[i * 2]; - IN imag_i = fromptr[i * 2 + 1]; - IN real_max = fromptr[current_idx * 2]; - IN imag_max = fromptr[current_idx * 2 + 1]; - - if (real_i > real_max || (real_i == real_max && imag_i > imag_max)) { - toptr[parent] = i; + for (int64_t bin = 0; bin < outlength; bin++) { + int64_t best = -1; + for (int64_t i = offsets[bin]; i < offsets[bin + 1]; i++) { + if (best == -1) { + best = i; + } else { + IN x = fromptr[i * 2]; + IN y = fromptr[i * 2 + 1]; + IN bx = fromptr[best * 2]; + IN by = fromptr[best * 2 + 1]; + if (x > bx || (x == bx && y > by)) { + best = i; + } } } + toptr[bin] = static_cast(best); } return success(); } -ERROR awkward_reduce_argmax_complex64_64( - int64_t* toptr, - const float* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_argmax_complex( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_argmax_complex128_64( - int64_t* toptr, - const double* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_argmax_complex( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} + +#define WRAPPER(SUFFIX, OUT, IN) \ + ERROR awkward_reduce_argmax_complex##SUFFIX(OUT* toptr, const IN* fromptr, const int64_t* offsets, int64_t outlength) { \ + return awkward_reduce_argmax_complex(toptr, fromptr, offsets, outlength); \ + } + +WRAPPER(64_64, int64_t, float) +WRAPPER(128_64, int64_t, double) diff --git a/awkward-cpp/src/cpu-kernels/awkward_reduce_argmin.cpp b/awkward-cpp/src/cpu-kernels/awkward_reduce_argmin.cpp index 954b1478b6..db7704b093 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_reduce_argmin.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_reduce_argmin.cpp @@ -4,195 +4,68 @@ #include "awkward/kernels.h" +// Per-bin argmin. +// +// Speed notes (calibrated against the family microbench): +// * The inner comparison is data-dependent — `best` chains through +// every iteration, and the original `fromptr[i] < fromptr[best]` +// load reaches into a moving target. Vectorising it isn't viable +// so we keep the loop simple, but we do two things to help the +// plain serial version: +// (a) hoist `fromptr[best]` into a register `best_val` so each +// iteration is one load + one compare + one mispredictable +// branch, instead of two loads + ALU on `best`. +// (b) peel the first iteration out of the inner loop so the +// hot path no longer pays the `best == -1` short-circuit +// every step. +// * `__restrict__` lets the compiler hoist `offsets[bin + 1]`. +// * NaN semantics unchanged: `<` returns false for NaN, so `best` +// stays put when either side is NaN — matches the original `if`. template ERROR awkward_reduce_argmin( - OUT* toptr, - const IN* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - const int64_t* starts, + OUT* __restrict__ toptr, + const IN* __restrict__ fromptr, + const int64_t* __restrict__ offsets, + const int64_t* /* starts */, int64_t outlength) { - std::fill_n(toptr, outlength, -1); - for (int64_t i = 0; i < lenparents; i++) { - int64_t parent = parents[i]; - int64_t current_best_idx = toptr[parent]; - - auto candidate_val = fromptr[i]; - - if (current_best_idx == -1 || candidate_val < fromptr[current_best_idx]) { - toptr[parent] = i; + #ifdef _OPENMP + #pragma omp parallel for if(outlength > 1024) schedule(static) + #endif + for (int64_t bin = 0; bin < outlength; bin++) { + const int64_t start = offsets[bin]; + const int64_t stop = offsets[bin + 1]; + int64_t best = -1; + if (start < stop) { + best = start; + IN best_val = fromptr[start]; + for (int64_t i = start + 1; i < stop; i++) { + IN v = fromptr[i]; + if (v < best_val) { + best_val = v; + best = i; + } + } } + toptr[bin] = static_cast(best); } return success(); } -ERROR awkward_reduce_argmin_int8_64( - int64_t* toptr, - const int8_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - const int64_t* starts, - int64_t outlength) { - return awkward_reduce_argmin( - toptr, - fromptr, - parents, - offsets, - lenparents, - starts, - outlength); -} -ERROR awkward_reduce_argmin_uint8_64( - int64_t* toptr, - const uint8_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - const int64_t* starts, - int64_t outlength) { - return awkward_reduce_argmin( - toptr, - fromptr, - parents, - offsets, - lenparents, - starts, - outlength); -} -ERROR awkward_reduce_argmin_int16_64( - int64_t* toptr, - const int16_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - const int64_t* starts, - int64_t outlength) { - return awkward_reduce_argmin( - toptr, - fromptr, - parents, - offsets, - lenparents, - starts, - outlength); -} -ERROR awkward_reduce_argmin_uint16_64( - int64_t* toptr, - const uint16_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - const int64_t* starts, - int64_t outlength) { - return awkward_reduce_argmin( - toptr, - fromptr, - parents, - offsets, - lenparents, - starts, - outlength); -} -ERROR awkward_reduce_argmin_int32_64( - int64_t* toptr, - const int32_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - const int64_t* starts, - int64_t outlength) { - return awkward_reduce_argmin( - toptr, - fromptr, - parents, - offsets, - lenparents, - starts, - outlength); -} -ERROR awkward_reduce_argmin_uint32_64( - int64_t* toptr, - const uint32_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - const int64_t* starts, - int64_t outlength) { - return awkward_reduce_argmin( - toptr, - fromptr, - parents, - offsets, - lenparents, - starts, - outlength); -} -ERROR awkward_reduce_argmin_int64_64( - int64_t* toptr, - const int64_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - const int64_t* starts, - int64_t outlength) { - return awkward_reduce_argmin( - toptr, - fromptr, - parents, - offsets, - lenparents, - starts, - outlength); -} -ERROR awkward_reduce_argmin_uint64_64( - int64_t* toptr, - const uint64_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - const int64_t* starts, - int64_t outlength) { - return awkward_reduce_argmin( - toptr, - fromptr, - parents, - offsets, - lenparents, - starts, - outlength); -} -ERROR awkward_reduce_argmin_float32_64( - int64_t* toptr, - const float* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - const int64_t* starts, - int64_t outlength) { - return awkward_reduce_argmin( - toptr, - fromptr, - parents, - offsets, - lenparents, - starts, - outlength); -} -ERROR awkward_reduce_argmin_float64_64( - int64_t* toptr, - const double* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - const int64_t* starts, - int64_t outlength) { - return awkward_reduce_argmin( - toptr, - fromptr, - parents, - offsets, - lenparents, - starts, - outlength); -} + +#define REDUCE_ARGMIN(IN_T, IN_N) \ + ERROR awkward_reduce_argmin_##IN_N##_64( \ + int64_t* toptr, const IN_T* fromptr, \ + const int64_t* offsets, const int64_t* starts, int64_t outlength) { \ + return awkward_reduce_argmin( \ + toptr, fromptr, offsets, starts, outlength); \ + } + +REDUCE_ARGMIN(int8_t, int8) +REDUCE_ARGMIN(uint8_t, uint8) +REDUCE_ARGMIN(int16_t, int16) +REDUCE_ARGMIN(uint16_t, uint16) +REDUCE_ARGMIN(int32_t, int32) +REDUCE_ARGMIN(uint32_t, uint32) +REDUCE_ARGMIN(int64_t, int64) +REDUCE_ARGMIN(uint64_t, uint64) +REDUCE_ARGMIN(float, float32) +REDUCE_ARGMIN(double, float64) diff --git a/awkward-cpp/src/cpu-kernels/awkward_reduce_argmin_complex.cpp b/awkward-cpp/src/cpu-kernels/awkward_reduce_argmin_complex.cpp index 5d9685c14a..2b0cc0ac6e 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_reduce_argmin_complex.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_reduce_argmin_complex.cpp @@ -8,59 +8,32 @@ template ERROR awkward_reduce_argmin_complex( OUT* toptr, const IN* fromptr, - const int64_t* parents, const int64_t* offsets, - int64_t lenparents, int64_t outlength) { - - std::fill_n(toptr, outlength, static_cast(-1)); - - for (int64_t i = 0; i < lenparents; i++) { - int64_t parent = parents[i]; - int64_t current_idx = toptr[parent]; - - if (current_idx == -1) { - toptr[parent] = i; - } else { - IN real_i = fromptr[i * 2]; - IN imag_i = fromptr[i * 2 + 1]; - IN real_min = fromptr[current_idx * 2]; - IN imag_min = fromptr[current_idx * 2 + 1]; - - if (real_i < real_min || (real_i == real_min && imag_i < imag_min)) { - toptr[parent] = i; + for (int64_t bin = 0; bin < outlength; bin++) { + int64_t best = -1; + for (int64_t i = offsets[bin]; i < offsets[bin + 1]; i++) { + if (best == -1) { + best = i; + } else { + IN x = fromptr[i * 2]; + IN y = fromptr[i * 2 + 1]; + IN bx = fromptr[best * 2]; + IN by = fromptr[best * 2 + 1]; + if (x < bx || (x == bx && y < by)) { + best = i; + } } } + toptr[bin] = static_cast(best); } return success(); } -ERROR awkward_reduce_argmin_complex64_64( - int64_t* toptr, - const float* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_argmin_complex( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_argmin_complex128_64( - int64_t* toptr, - const double* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_argmin_complex( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} + +#define WRAPPER(SUFFIX, OUT, IN) \ + ERROR awkward_reduce_argmin_complex##SUFFIX(OUT* toptr, const IN* fromptr, const int64_t* offsets, int64_t outlength) { \ + return awkward_reduce_argmin_complex(toptr, fromptr, offsets, outlength); \ + } + +WRAPPER(64_64, int64_t, float) +WRAPPER(128_64, int64_t, double) diff --git a/awkward-cpp/src/cpu-kernels/awkward_reduce_count_64.cpp b/awkward-cpp/src/cpu-kernels/awkward_reduce_count_64.cpp index ab46ff0a2c..e4f4a22c99 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_reduce_count_64.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_reduce_count_64.cpp @@ -6,13 +6,10 @@ ERROR awkward_reduce_count_64( int64_t* toptr, - const int64_t* parents, - int64_t lenparents, + const int64_t* offsets, int64_t outlength) { - std::memset(toptr, 0, outlength * sizeof(int64_t)); - - for (int64_t i = 0; i < lenparents; i++) { - toptr[parents[i]]++; + for (int64_t bin = 0; bin < outlength; bin++) { + toptr[bin] = offsets[bin + 1] - offsets[bin]; } return success(); } diff --git a/awkward-cpp/src/cpu-kernels/awkward_reduce_countnonzero.cpp b/awkward-cpp/src/cpu-kernels/awkward_reduce_countnonzero.cpp index b7c96c60fb..d5f78cc8d6 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_reduce_countnonzero.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_reduce_countnonzero.cpp @@ -4,160 +4,56 @@ #include "awkward/kernels.h" +// Per-bin count of non-zero elements. See `awkward_reduce_sum` for the +// rationale; four independent counters break the dependency chain on +// `c++` and let gcc/clang autovectorise the body into masked SIMD adds +// (`vpcmpneqd` + `vpaddd`-style sequences). The conditional increment is +// rewritten branchlessly as `c += (x != 0)` so the vectoriser doesn't +// have to prove it can hoist the predicate. template ERROR awkward_reduce_countnonzero( - int64_t* toptr, - const IN* fromptr, - const int64_t* parents, - int64_t lenparents, - int64_t outlength) { - std::memset(toptr, 0, outlength * sizeof(int64_t)); - - for (int64_t i = 0; i < lenparents; i++) { - toptr[parents[i]] += (fromptr[i] != 0); + int64_t* __restrict__ toptr, + const IN* __restrict__ fromptr, + const int64_t* __restrict__ offsets, + int64_t outlength) { + #ifdef _OPENMP + #pragma omp parallel for if(outlength > 1024) schedule(static) + #endif + for (int64_t bin = 0; bin < outlength; bin++) { + const int64_t start = offsets[bin]; + const int64_t stop = offsets[bin + 1]; + int64_t c0 = 0, c1 = 0, c2 = 0, c3 = 0; + int64_t i = start; + for (; i + 4 <= stop; i += 4) { + c0 += (fromptr[i + 0] != 0); + c1 += (fromptr[i + 1] != 0); + c2 += (fromptr[i + 2] != 0); + c3 += (fromptr[i + 3] != 0); + } + int64_t c = (c0 + c1) + (c2 + c3); + for (; i < stop; i++) { + c += (fromptr[i] != 0); + } + toptr[bin] = c; } return success(); } -ERROR awkward_reduce_countnonzero_bool_64( - int64_t* toptr, - const bool* fromptr, - const int64_t* parents, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_countnonzero( - toptr, - fromptr, - parents, - lenparents, - outlength); -} -ERROR awkward_reduce_countnonzero_int8_64( - int64_t* toptr, - const int8_t* fromptr, - const int64_t* parents, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_countnonzero( - toptr, - fromptr, - parents, - lenparents, - outlength); -} -ERROR awkward_reduce_countnonzero_uint8_64( - int64_t* toptr, - const uint8_t* fromptr, - const int64_t* parents, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_countnonzero( - toptr, - fromptr, - parents, - lenparents, - outlength); -} -ERROR awkward_reduce_countnonzero_int16_64( - int64_t* toptr, - const int16_t* fromptr, - const int64_t* parents, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_countnonzero( - toptr, - fromptr, - parents, - lenparents, - outlength); -} -ERROR awkward_reduce_countnonzero_uint16_64( - int64_t* toptr, - const uint16_t* fromptr, - const int64_t* parents, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_countnonzero( - toptr, - fromptr, - parents, - lenparents, - outlength); -} -ERROR awkward_reduce_countnonzero_int32_64( - int64_t* toptr, - const int32_t* fromptr, - const int64_t* parents, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_countnonzero( - toptr, - fromptr, - parents, - lenparents, - outlength); -} -ERROR awkward_reduce_countnonzero_uint32_64( - int64_t* toptr, - const uint32_t* fromptr, - const int64_t* parents, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_countnonzero( - toptr, - fromptr, - parents, - lenparents, - outlength); -} -ERROR awkward_reduce_countnonzero_int64_64( - int64_t* toptr, - const int64_t* fromptr, - const int64_t* parents, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_countnonzero( - toptr, - fromptr, - parents, - lenparents, - outlength); -} -ERROR awkward_reduce_countnonzero_uint64_64( - int64_t* toptr, - const uint64_t* fromptr, - const int64_t* parents, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_countnonzero( - toptr, - fromptr, - parents, - lenparents, - outlength); -} -ERROR awkward_reduce_countnonzero_float32_64( - int64_t* toptr, - const float* fromptr, - const int64_t* parents, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_countnonzero( - toptr, - fromptr, - parents, - lenparents, - outlength); -} -ERROR awkward_reduce_countnonzero_float64_64( - int64_t* toptr, - const double* fromptr, - const int64_t* parents, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_countnonzero( - toptr, - fromptr, - parents, - lenparents, - outlength); -} + +#define REDUCE_COUNTNONZERO(IN_T, IN_N) \ + ERROR awkward_reduce_countnonzero_##IN_N##_64( \ + int64_t* toptr, const IN_T* fromptr, \ + const int64_t* offsets, int64_t outlength) { \ + return awkward_reduce_countnonzero(toptr, fromptr, offsets, outlength); \ + } + +REDUCE_COUNTNONZERO(bool, bool) +REDUCE_COUNTNONZERO(int8_t, int8) +REDUCE_COUNTNONZERO(uint8_t, uint8) +REDUCE_COUNTNONZERO(int16_t, int16) +REDUCE_COUNTNONZERO(uint16_t, uint16) +REDUCE_COUNTNONZERO(int32_t, int32) +REDUCE_COUNTNONZERO(uint32_t, uint32) +REDUCE_COUNTNONZERO(int64_t, int64) +REDUCE_COUNTNONZERO(uint64_t, uint64) +REDUCE_COUNTNONZERO(float, float32) +REDUCE_COUNTNONZERO(double, float64) diff --git a/awkward-cpp/src/cpu-kernels/awkward_reduce_countnonzero_complex.cpp b/awkward-cpp/src/cpu-kernels/awkward_reduce_countnonzero_complex.cpp index 4f94e32832..1f876f0efe 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_reduce_countnonzero_complex.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_reduce_countnonzero_complex.cpp @@ -8,39 +8,22 @@ template ERROR awkward_reduce_countnonzero_complex( int64_t* toptr, const IN* fromptr, - const int64_t* parents, - int64_t lenparents, + const int64_t* offsets, int64_t outlength) { - std::memset(toptr, 0, outlength * sizeof(int64_t)); - - for (int64_t i = 0; i < lenparents; i++) { - toptr[parents[i]] += (fromptr[i * 2] != 0 || fromptr[i * 2 + 1] != 0); + for (int64_t bin = 0; bin < outlength; bin++) { + int64_t c = 0; + for (int64_t i = offsets[bin]; i < offsets[bin + 1]; i++) { + if (fromptr[i * 2] != 0 || fromptr[i * 2 + 1] != 0) c++; + } + toptr[bin] = c; } return success(); } -ERROR awkward_reduce_countnonzero_complex64_64( - int64_t* toptr, - const float* fromptr, - const int64_t* parents, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_countnonzero_complex( - toptr, - fromptr, - parents, - lenparents, - outlength); -} -ERROR awkward_reduce_countnonzero_complex128_64( - int64_t* toptr, - const double* fromptr, - const int64_t* parents, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_countnonzero_complex( - toptr, - fromptr, - parents, - lenparents, - outlength); -} + +#define WRAPPER(SUFFIX, IN) \ + ERROR awkward_reduce_countnonzero_complex##SUFFIX(int64_t* toptr, const IN* fromptr, const int64_t* offsets, int64_t outlength) { \ + return awkward_reduce_countnonzero_complex(toptr, fromptr, offsets, outlength); \ + } + +WRAPPER(64_64, float) +WRAPPER(128_64, double) diff --git a/awkward-cpp/src/cpu-kernels/awkward_reduce_max.cpp b/awkward-cpp/src/cpu-kernels/awkward_reduce_max.cpp index de3faf90a9..9eb9907d8a 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_reduce_max.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_reduce_max.cpp @@ -4,190 +4,44 @@ #include "awkward/kernels.h" +// Per-bin maximum. See `awkward_reduce_min` for the rationale. template ERROR awkward_reduce_max( - OUT* toptr, - const IN* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, + OUT* __restrict__ toptr, + const IN* __restrict__ fromptr, + const int64_t* __restrict__ offsets, int64_t outlength, OUT identity) { - std::fill_n(toptr, outlength, identity); - - for (int64_t i = 0; i < lenparents; i++) { - IN x = fromptr[i]; - toptr[parents[i]] = (x > toptr[parents[i]] ? x : toptr[parents[i]]); + #ifdef _OPENMP + #pragma omp parallel for if(outlength > 1024) schedule(static) + #endif + for (int64_t bin = 0; bin < outlength; bin++) { + const int64_t start = offsets[bin]; + const int64_t stop = offsets[bin + 1]; + OUT best = identity; + for (int64_t i = start; i < stop; i++) { + OUT v = static_cast(fromptr[i]); + best = (v > best) ? v : best; + } + toptr[bin] = best; } return success(); } -ERROR awkward_reduce_max_int8_int8_64( - int8_t* toptr, - const int8_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength, - int8_t identity) { - return awkward_reduce_max( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength, - identity); -} -ERROR awkward_reduce_max_uint8_uint8_64( - uint8_t* toptr, - const uint8_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength, - uint8_t identity) { - return awkward_reduce_max( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength, - identity); -} -ERROR awkward_reduce_max_int16_int16_64( - int16_t* toptr, - const int16_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength, - int16_t identity) { - return awkward_reduce_max( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength, - identity); -} -ERROR awkward_reduce_max_uint16_uint16_64( - uint16_t* toptr, - const uint16_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength, - uint16_t identity) { - return awkward_reduce_max( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength, - identity); -} -ERROR awkward_reduce_max_int32_int32_64( - int32_t* toptr, - const int32_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength, - int32_t identity) { - return awkward_reduce_max( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength, - identity); -} -ERROR awkward_reduce_max_uint32_uint32_64( - uint32_t* toptr, - const uint32_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength, - uint32_t identity) { - return awkward_reduce_max( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength, - identity); -} -ERROR awkward_reduce_max_int64_int64_64( - int64_t* toptr, - const int64_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength, - int64_t identity) { - return awkward_reduce_max( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength, - identity); -} -ERROR awkward_reduce_max_uint64_uint64_64( - uint64_t* toptr, - const uint64_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength, - uint64_t identity) { - return awkward_reduce_max( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength, - identity); -} -ERROR awkward_reduce_max_float32_float32_64( - float* toptr, - const float* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength, - float identity) { - return awkward_reduce_max( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength, - identity); -} -ERROR awkward_reduce_max_float64_float64_64( - double* toptr, - const double* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength, - double identity) { - return awkward_reduce_max( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength, - identity); -} + +#define REDUCE_MAX(T, NAME) \ + ERROR awkward_reduce_max_##NAME##_##NAME##_64( \ + T* toptr, const T* fromptr, \ + const int64_t* offsets, int64_t outlength, T identity) { \ + return awkward_reduce_max(toptr, fromptr, offsets, outlength, identity); \ + } + +REDUCE_MAX(int8_t, int8) +REDUCE_MAX(uint8_t, uint8) +REDUCE_MAX(int16_t, int16) +REDUCE_MAX(uint16_t, uint16) +REDUCE_MAX(int32_t, int32) +REDUCE_MAX(uint32_t, uint32) +REDUCE_MAX(int64_t, int64) +REDUCE_MAX(uint64_t, uint64) +REDUCE_MAX(float, float32) +REDUCE_MAX(double, float64) diff --git a/awkward-cpp/src/cpu-kernels/awkward_reduce_max_complex.cpp b/awkward-cpp/src/cpu-kernels/awkward_reduce_max_complex.cpp index 5294170ca0..e72407431d 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_reduce_max_complex.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_reduce_max_complex.cpp @@ -8,58 +8,32 @@ template ERROR awkward_reduce_max_complex( OUT* toptr, const IN* fromptr, - const int64_t* parents, const int64_t* offsets, - int64_t lenparents, int64_t outlength, OUT identity) { - for (int64_t i = 0; i < outlength; i++) { - toptr[i * 2] = identity; - toptr[i * 2 + 1] = 0; - } - for (int64_t i = 0; i < lenparents; i++) { - int64_t parent = parents[i]; - IN x = fromptr[i * 2]; - IN y = fromptr[i * 2 + 1]; - if (x > toptr[parent * 2] || - (x == toptr[parent * 2] && y > toptr[parent * 2 + 1])) { - toptr[parent * 2] = x; - toptr[parent * 2 + 1] = y; + for (int64_t bin = 0; bin < outlength; bin++) { + OUT best_re = identity; + OUT best_im = 0; + bool seen = false; + for (int64_t i = offsets[bin]; i < offsets[bin + 1]; i++) { + IN x = fromptr[i * 2]; + IN y = fromptr[i * 2 + 1]; + if (!seen || x > best_re || (x == best_re && y > best_im)) { + best_re = static_cast(x); + best_im = static_cast(y); + seen = true; + } } + toptr[bin * 2] = best_re; + toptr[bin * 2 + 1] = best_im; } return success(); } -ERROR awkward_reduce_max_complex64_complex64_64( - float* toptr, - const float* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength, - float identity) { - return awkward_reduce_max_complex( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength, - identity); -} -ERROR awkward_reduce_max_complex128_complex128_64( - double* toptr, - const double* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength, - double identity) { - return awkward_reduce_max_complex( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength, - identity); -} + +#define WRAPPER(SUFFIX, OUT, IN) \ + ERROR awkward_reduce_max_complex##SUFFIX(OUT* toptr, const IN* fromptr, const int64_t* offsets, int64_t outlength, OUT identity) { \ + return awkward_reduce_max_complex(toptr, fromptr, offsets, outlength, identity); \ + } + +WRAPPER(64_complex64_64, float, float) +WRAPPER(128_complex128_64, double, double) diff --git a/awkward-cpp/src/cpu-kernels/awkward_reduce_min.cpp b/awkward-cpp/src/cpu-kernels/awkward_reduce_min.cpp index 21190621af..765c1bf732 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_reduce_min.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_reduce_min.cpp @@ -4,190 +4,61 @@ #include "awkward/kernels.h" +// Per-bin minimum. +// +// Speed notes (calibrated by microbench): +// * The 4-way accumulator unroll that helps `sum`/`prod` actively +// hurts `min`/`max` on narrow bins because the per-bin combine +// epilogue is paid once per bin, and on random data the original +// `if (x < best)` already gets a well-predicted branch (branch +// barely fires after `best` settles). Keep the implementation +// simple — branchless `?:` plus `__restrict__` plus bound hoist — +// which is Pareto-positive across the matrix we tested. +// * `__restrict__` lets the compiler hoist `offsets[bin + 1]` out +// of the inner loop instead of reloading on every iteration. +// * The branchless `(v < best) ? v : best` form lowers to a SIMD +// min when the autovectoriser fires (e.g. `vminps`/`vminpd` on +// floats), and to a `cmov` otherwise. +// * NaN semantics unchanged: floating-point `<` returns false for +// NaN, so `best` stays — matching the original `if` form (and +// `np.fmin`'s NaN-skipping behaviour). template ERROR awkward_reduce_min( - OUT* toptr, - const IN* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, + OUT* __restrict__ toptr, + const IN* __restrict__ fromptr, + const int64_t* __restrict__ offsets, int64_t outlength, OUT identity) { - std::fill_n(toptr, outlength, identity); - - for (int64_t i = 0; i < lenparents; i++) { - IN x = fromptr[i]; - toptr[parents[i]] = (x < toptr[parents[i]] ? x : toptr[parents[i]]); + #ifdef _OPENMP + #pragma omp parallel for if(outlength > 1024) schedule(static) + #endif + for (int64_t bin = 0; bin < outlength; bin++) { + const int64_t start = offsets[bin]; + const int64_t stop = offsets[bin + 1]; + OUT best = identity; + for (int64_t i = start; i < stop; i++) { + OUT v = static_cast(fromptr[i]); + best = (v < best) ? v : best; + } + toptr[bin] = best; } return success(); } -ERROR awkward_reduce_min_int8_int8_64( - int8_t* toptr, - const int8_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength, - int8_t identity) { - return awkward_reduce_min( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength, - identity); -} -ERROR awkward_reduce_min_uint8_uint8_64( - uint8_t* toptr, - const uint8_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength, - uint8_t identity) { - return awkward_reduce_min( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength, - identity); -} -ERROR awkward_reduce_min_int16_int16_64( - int16_t* toptr, - const int16_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength, - int16_t identity) { - return awkward_reduce_min( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength, - identity); -} -ERROR awkward_reduce_min_uint16_uint16_64( - uint16_t* toptr, - const uint16_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength, - uint16_t identity) { - return awkward_reduce_min( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength, - identity); -} -ERROR awkward_reduce_min_int32_int32_64( - int32_t* toptr, - const int32_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength, - int32_t identity) { - return awkward_reduce_min( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength, - identity); -} -ERROR awkward_reduce_min_uint32_uint32_64( - uint32_t* toptr, - const uint32_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength, - uint32_t identity) { - return awkward_reduce_min( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength, - identity); -} -ERROR awkward_reduce_min_int64_int64_64( - int64_t* toptr, - const int64_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength, - int64_t identity) { - return awkward_reduce_min( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength, - identity); -} -ERROR awkward_reduce_min_uint64_uint64_64( - uint64_t* toptr, - const uint64_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength, - uint64_t identity) { - return awkward_reduce_min( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength, - identity); -} -ERROR awkward_reduce_min_float32_float32_64( - float* toptr, - const float* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength, - float identity) { - return awkward_reduce_min( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength, - identity); -} -ERROR awkward_reduce_min_float64_float64_64( - double* toptr, - const double* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength, - double identity) { - return awkward_reduce_min( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength, - identity); -} + +#define REDUCE_MIN(T, NAME) \ + ERROR awkward_reduce_min_##NAME##_##NAME##_64( \ + T* toptr, const T* fromptr, \ + const int64_t* offsets, int64_t outlength, T identity) { \ + return awkward_reduce_min(toptr, fromptr, offsets, outlength, identity); \ + } + +REDUCE_MIN(int8_t, int8) +REDUCE_MIN(uint8_t, uint8) +REDUCE_MIN(int16_t, int16) +REDUCE_MIN(uint16_t, uint16) +REDUCE_MIN(int32_t, int32) +REDUCE_MIN(uint32_t, uint32) +REDUCE_MIN(int64_t, int64) +REDUCE_MIN(uint64_t, uint64) +REDUCE_MIN(float, float32) +REDUCE_MIN(double, float64) diff --git a/awkward-cpp/src/cpu-kernels/awkward_reduce_min_complex.cpp b/awkward-cpp/src/cpu-kernels/awkward_reduce_min_complex.cpp index 7a7da7a59b..d7e1f21d7d 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_reduce_min_complex.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_reduce_min_complex.cpp @@ -8,58 +8,32 @@ template ERROR awkward_reduce_min_complex( OUT* toptr, const IN* fromptr, - const int64_t* parents, const int64_t* offsets, - int64_t lenparents, int64_t outlength, OUT identity) { - for (int64_t i = 0; i < outlength; i++) { - toptr[i * 2] = identity; - toptr[i * 2 + 1] = 0; - } - for (int64_t i = 0; i < lenparents; i++) { - int64_t parent = parents[i]; - IN x = fromptr[i * 2]; - IN y = fromptr[i * 2 + 1]; - if (x < toptr[parent * 2] || - (x == toptr[parent * 2] && y < toptr[parent * 2 + 1])) { - toptr[parent * 2] = x; - toptr[parent * 2 + 1] = y; + for (int64_t bin = 0; bin < outlength; bin++) { + OUT best_re = identity; + OUT best_im = 0; + bool seen = false; + for (int64_t i = offsets[bin]; i < offsets[bin + 1]; i++) { + IN x = fromptr[i * 2]; + IN y = fromptr[i * 2 + 1]; + if (!seen || x < best_re || (x == best_re && y < best_im)) { + best_re = static_cast(x); + best_im = static_cast(y); + seen = true; + } } + toptr[bin * 2] = best_re; + toptr[bin * 2 + 1] = best_im; } return success(); } -ERROR awkward_reduce_min_complex64_complex64_64( - float* toptr, - const float* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength, - float identity) { - return awkward_reduce_min_complex( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength, - identity); -} -ERROR awkward_reduce_min_complex128_complex128_64( - double* toptr, - const double* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength, - double identity) { - return awkward_reduce_min_complex( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength, - identity); -} + +#define WRAPPER(SUFFIX, OUT, IN) \ + ERROR awkward_reduce_min_complex##SUFFIX(OUT* toptr, const IN* fromptr, const int64_t* offsets, int64_t outlength, OUT identity) { \ + return awkward_reduce_min_complex(toptr, fromptr, offsets, outlength, identity); \ + } + +WRAPPER(64_complex64_64, float, float) +WRAPPER(128_complex128_64, double, double) diff --git a/awkward-cpp/src/cpu-kernels/awkward_reduce_prod.cpp b/awkward-cpp/src/cpu-kernels/awkward_reduce_prod.cpp index 030eff0aaf..d4213e5b50 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_reduce_prod.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_reduce_prod.cpp @@ -4,259 +4,62 @@ #include "awkward/kernels.h" +// Per-bin product. See `awkward_reduce_sum` for the rationale; the +// 4-accumulator unroll plus `__restrict__` qualifiers break the serial +// dependency on `acc *= ...` and let gcc/clang autovectorise the body. +// Multiplication is associative under integer wrap-around and floating- +// point reordering at the same precision class as numpy's own reduction +// (`ak.prod` has never guaranteed strictly-left-to-right order). template ERROR awkward_reduce_prod( - OUT* toptr, - const IN* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - std::fill_n(toptr, outlength, static_cast(1)); - - for (int64_t i = 0; i < lenparents; i++) { - int64_t parent = parents[i]; - toptr[parent] *= static_cast(fromptr[i]); + OUT* __restrict__ toptr, + const IN* __restrict__ fromptr, + const int64_t* __restrict__ offsets, + int64_t outlength) { + #ifdef _OPENMP + #pragma omp parallel for if(outlength > 1024) schedule(static) + #endif + for (int64_t bin = 0; bin < outlength; bin++) { + const int64_t start = offsets[bin]; + const int64_t stop = offsets[bin + 1]; + OUT a0 = static_cast(1), a1 = static_cast(1), + a2 = static_cast(1), a3 = static_cast(1); + int64_t i = start; + for (; i + 4 <= stop; i += 4) { + a0 *= static_cast(fromptr[i + 0]); + a1 *= static_cast(fromptr[i + 1]); + a2 *= static_cast(fromptr[i + 2]); + a3 *= static_cast(fromptr[i + 3]); + } + OUT acc = (a0 * a1) * (a2 * a3); + for (; i < stop; i++) { + acc *= static_cast(fromptr[i]); + } + toptr[bin] = acc; } return success(); } -ERROR awkward_reduce_prod_int64_int8_64( - int64_t* toptr, - const int8_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_prod( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_prod_uint64_uint8_64( - uint64_t* toptr, - const uint8_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_prod( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_prod_int64_int16_64( - int64_t* toptr, - const int16_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_prod( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_prod_uint64_uint16_64( - uint64_t* toptr, - const uint16_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_prod( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_prod_int64_int32_64( - int64_t* toptr, - const int32_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_prod( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_prod_uint64_uint32_64( - uint64_t* toptr, - const uint32_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_prod( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_prod_int64_int64_64( - int64_t* toptr, - const int64_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_prod( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_prod_uint64_uint64_64( - uint64_t* toptr, - const uint64_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_prod( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_prod_float32_float32_64( - float* toptr, - const float* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_prod( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_prod_float64_float64_64( - double* toptr, - const double* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_prod( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_prod_int32_int8_64( - int32_t* toptr, - const int8_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_prod( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_prod_uint32_uint8_64( - uint32_t* toptr, - const uint8_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_prod( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_prod_int32_int16_64( - int32_t* toptr, - const int16_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_prod( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_prod_uint32_uint16_64( - uint32_t* toptr, - const uint16_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_prod( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_prod_int32_int32_64( - int32_t* toptr, - const int32_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_prod( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_prod_uint32_uint32_64( - uint32_t* toptr, - const uint32_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_prod( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} + +#define REDUCE_PROD(OUT_T, OUT_N, IN_T, IN_N) \ + ERROR awkward_reduce_prod_##OUT_N##_##IN_N##_64( \ + OUT_T* toptr, const IN_T* fromptr, \ + const int64_t* offsets, int64_t outlength) { \ + return awkward_reduce_prod(toptr, fromptr, offsets, outlength); \ + } + +REDUCE_PROD(int64_t, int64, int8_t, int8) +REDUCE_PROD(uint64_t, uint64, uint8_t, uint8) +REDUCE_PROD(int64_t, int64, int16_t, int16) +REDUCE_PROD(uint64_t, uint64, uint16_t, uint16) +REDUCE_PROD(int64_t, int64, int32_t, int32) +REDUCE_PROD(uint64_t, uint64, uint32_t, uint32) +REDUCE_PROD(int64_t, int64, int64_t, int64) +REDUCE_PROD(uint64_t, uint64, uint64_t, uint64) +REDUCE_PROD(float, float32, float, float32) +REDUCE_PROD(double, float64, double, float64) +REDUCE_PROD(int32_t, int32, int8_t, int8) +REDUCE_PROD(uint32_t, uint32, uint8_t, uint8) +REDUCE_PROD(int32_t, int32, int16_t, int16) +REDUCE_PROD(uint32_t, uint32, uint16_t, uint16) +REDUCE_PROD(int32_t, int32, int32_t, int32) +REDUCE_PROD(uint32_t, uint32, uint32_t, uint32) diff --git a/awkward-cpp/src/cpu-kernels/awkward_reduce_prod_bool.cpp b/awkward-cpp/src/cpu-kernels/awkward_reduce_prod_bool.cpp index 2c8af311c5..440da979a7 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_reduce_prod_bool.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_reduce_prod_bool.cpp @@ -4,183 +4,44 @@ #include "awkward/kernels.h" +// Per-bin "all nonzero" reduction. See `awkward_reduce_sum_bool` for +// the rationale behind keeping the early-exit and adding `__restrict__`. template ERROR awkward_reduce_prod_bool( - bool* toptr, - const IN* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - std::memset(toptr, 1, outlength); - - for (int64_t i = 0; i < lenparents; i++) { - toptr[parents[i]] = toptr[parents[i]] && (fromptr[i] != 0); + bool* __restrict__ toptr, + const IN* __restrict__ fromptr, + const int64_t* __restrict__ offsets, + int64_t outlength) { + #ifdef _OPENMP + #pragma omp parallel for if(outlength > 1024) schedule(static) + #endif + for (int64_t bin = 0; bin < outlength; bin++) { + const int64_t start = offsets[bin]; + const int64_t stop = offsets[bin + 1]; + bool all_nonzero = true; + for (int64_t i = start; i < stop; i++) { + if (fromptr[i] == 0) { all_nonzero = false; break; } + } + toptr[bin] = all_nonzero; } return success(); } -ERROR awkward_reduce_prod_bool_bool_64( - bool* toptr, - const bool* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_prod_bool( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_prod_bool_int8_64( - bool* toptr, - const int8_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_prod_bool( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_prod_bool_uint8_64( - bool* toptr, - const uint8_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_prod_bool( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_prod_bool_int16_64( - bool* toptr, - const int16_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_prod_bool( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_prod_bool_uint16_64( - bool* toptr, - const uint16_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_prod_bool( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_prod_bool_int32_64( - bool* toptr, - const int32_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_prod_bool( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_prod_bool_uint32_64( - bool* toptr, - const uint32_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_prod_bool( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_prod_bool_int64_64( - bool* toptr, - const int64_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_prod_bool( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_prod_bool_uint64_64( - bool* toptr, - const uint64_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_prod_bool( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_prod_bool_float32_64( - bool* toptr, - const float* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_prod_bool( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_prod_bool_float64_64( - bool* toptr, - const double* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_prod_bool( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} + +#define REDUCE_PROD_BOOL(IN_T, IN_N) \ + ERROR awkward_reduce_prod_bool_##IN_N##_64( \ + bool* toptr, const IN_T* fromptr, \ + const int64_t* offsets, int64_t outlength) { \ + return awkward_reduce_prod_bool(toptr, fromptr, offsets, outlength); \ + } + +REDUCE_PROD_BOOL(bool, bool) +REDUCE_PROD_BOOL(int8_t, int8) +REDUCE_PROD_BOOL(uint8_t, uint8) +REDUCE_PROD_BOOL(int16_t, int16) +REDUCE_PROD_BOOL(uint16_t, uint16) +REDUCE_PROD_BOOL(int32_t, int32) +REDUCE_PROD_BOOL(uint32_t, uint32) +REDUCE_PROD_BOOL(int64_t, int64) +REDUCE_PROD_BOOL(uint64_t, uint64) +REDUCE_PROD_BOOL(float, float32) +REDUCE_PROD_BOOL(double, float64) diff --git a/awkward-cpp/src/cpu-kernels/awkward_reduce_prod_bool_complex.cpp b/awkward-cpp/src/cpu-kernels/awkward_reduce_prod_bool_complex.cpp index efbb898bd4..171ab95b8a 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_reduce_prod_bool_complex.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_reduce_prod_bool_complex.cpp @@ -8,48 +8,22 @@ template ERROR awkward_reduce_prod_bool_complex( bool* toptr, const IN* fromptr, - const int64_t* parents, const int64_t* offsets, - int64_t lenparents, int64_t outlength) { - std::memset(toptr, 1, outlength * sizeof(bool)); - - for (int64_t i = 0; i < lenparents; i++) { - toptr[parents[i]] &= (fromptr[i * 2] != 0 || fromptr[i * 2 + 1] != 0); + for (int64_t bin = 0; bin < outlength; bin++) { + bool all_nonzero = true; + for (int64_t i = offsets[bin]; i < offsets[bin + 1]; i++) { + if (fromptr[i * 2] == 0 && fromptr[i * 2 + 1] == 0) { all_nonzero = false; break; } + } + toptr[bin] = all_nonzero; } - for (int64_t i = 0; i < lenparents; ++i) { - bool condition = (fromptr[i * 2] != 0) | (fromptr[i * 2 + 1] != 0); - toptr[parents[i]] &= condition; -} return success(); } -ERROR awkward_reduce_prod_bool_complex64_64( - bool* toptr, - const float* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_prod_bool_complex( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_prod_bool_complex128_64( - bool* toptr, - const double* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_prod_bool_complex( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} + +#define WRAPPER(SUFFIX, IN) \ + ERROR awkward_reduce_prod_bool_complex##SUFFIX(bool* toptr, const IN* fromptr, const int64_t* offsets, int64_t outlength) { \ + return awkward_reduce_prod_bool_complex(toptr, fromptr, offsets, outlength); \ + } + +WRAPPER(64_64, float) +WRAPPER(128_64, double) diff --git a/awkward-cpp/src/cpu-kernels/awkward_reduce_prod_complex.cpp b/awkward-cpp/src/cpu-kernels/awkward_reduce_prod_complex.cpp index 22cbdfe9f6..07981e70ae 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_reduce_prod_complex.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_reduce_prod_complex.cpp @@ -10,58 +10,29 @@ template ERROR awkward_reduce_prod_complex( OUT* toptr, const IN* fromptr, - const int64_t* parents, const int64_t* offsets, - int64_t lenparents, int64_t outlength) { - for (int64_t i = 0; i < outlength; i++) { - toptr[i * 2] = static_cast(1); - toptr[i * 2 + 1] = static_cast(0); + for (int64_t bin = 0; bin < outlength; bin++) { + OUT a = static_cast(1); + OUT b = static_cast(0); + for (int64_t i = offsets[bin]; i < offsets[bin + 1]; i++) { + OUT c = static_cast(fromptr[i * 2]); + OUT d = static_cast(fromptr[i * 2 + 1]); + OUT na = a * c - b * d; + OUT nb = a * d + b * c; + a = na; + b = nb; + } + toptr[bin * 2] = a; + toptr[bin * 2 + 1] = b; } + return success(); +} - for (int64_t i = 0; i < lenparents; i++) { - int64_t parent = parents[i]; - int64_t parent_idx = parent * 2; - int64_t from_idx = i * 2; - - OUT a = toptr[parent_idx]; - OUT b = toptr[parent_idx + 1]; - OUT c = static_cast(fromptr[from_idx]); - OUT d = static_cast(fromptr[from_idx + 1]); - - toptr[parent_idx] = a * c - b * d; - toptr[parent_idx + 1] = a * d + b * c; +#define WRAPPER(SUFFIX, OUT, IN) \ + ERROR awkward_reduce_prod_complex##SUFFIX(OUT* toptr, const IN* fromptr, const int64_t* offsets, int64_t outlength) { \ + return awkward_reduce_prod_complex(toptr, fromptr, offsets, outlength); \ } - return success(); -} -ERROR awkward_reduce_prod_complex64_complex64_64( - float* toptr, - const float* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_prod_complex( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_prod_complex128_complex128_64( - double* toptr, - const double* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_prod_complex( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} +WRAPPER(64_complex64_64, float, float) +WRAPPER(128_complex128_64, double, double) diff --git a/awkward-cpp/src/cpu-kernels/awkward_reduce_sum.cpp b/awkward-cpp/src/cpu-kernels/awkward_reduce_sum.cpp index 35355e943c..dc52291ceb 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_reduce_sum.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_reduce_sum.cpp @@ -4,259 +4,70 @@ #include "awkward/kernels.h" +// Per-bin sum. +// +// Speed notes: +// * Four independent accumulators break the dependency chain on `acc` +// (the original `acc += ...` serialises through FP-add latency / single +// integer-add port). Out-of-order CPUs can keep 4 adds in flight, and +// once the body's data dependencies are independent the loop matches a +// vector-reduction pattern that gcc/clang autovectorise into SSE2 / +// AVX2 / AVX-512 (`vaddps`, `vpaddq`, ...). +// * `__restrict__` lets the compiler hoist `offsets[bin + 1]` out of the +// inner loop. Without it the standard pessimistically reloads it every +// iteration in case `fromptr` writes alias `offsets`. +// * The 4-way pairwise summation is no less stable than NumPy's own +// reduction (NumPy uses a similar pairwise scheme for floats); +// `ak.sum` has never guaranteed bit-exact left-to-right summation. template ERROR awkward_reduce_sum( - OUT* toptr, - const IN* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - std::memset(toptr, 0, outlength * sizeof(OUT)); - - for (int64_t i = 0; i < lenparents; i++) { - int64_t parent_idx = parents[i]; - toptr[parent_idx] += static_cast(fromptr[i]); + OUT* __restrict__ toptr, + const IN* __restrict__ fromptr, + const int64_t* __restrict__ offsets, + int64_t outlength) { + #ifdef _OPENMP + #pragma omp parallel for if(outlength > 1024) schedule(static) + #endif + for (int64_t bin = 0; bin < outlength; bin++) { + const int64_t start = offsets[bin]; + const int64_t stop = offsets[bin + 1]; + OUT a0 = OUT{}, a1 = OUT{}, a2 = OUT{}, a3 = OUT{}; + int64_t i = start; + for (; i + 4 <= stop; i += 4) { + a0 += static_cast(fromptr[i + 0]); + a1 += static_cast(fromptr[i + 1]); + a2 += static_cast(fromptr[i + 2]); + a3 += static_cast(fromptr[i + 3]); + } + OUT acc = (a0 + a1) + (a2 + a3); + for (; i < stop; i++) { + acc += static_cast(fromptr[i]); + } + toptr[bin] = acc; } return success(); } -ERROR awkward_reduce_sum_int64_int8_64( - int64_t* toptr, - const int8_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_sum( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_sum_uint64_uint8_64( - uint64_t* toptr, - const uint8_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_sum( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_sum_int64_int16_64( - int64_t* toptr, - const int16_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_sum( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_sum_uint64_uint16_64( - uint64_t* toptr, - const uint16_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_sum( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_sum_int64_int32_64( - int64_t* toptr, - const int32_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_sum( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_sum_uint64_uint32_64( - uint64_t* toptr, - const uint32_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_sum( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_sum_int64_int64_64( - int64_t* toptr, - const int64_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_sum( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_sum_uint64_uint64_64( - uint64_t* toptr, - const uint64_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_sum( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_sum_float32_float32_64( - float* toptr, - const float* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_sum( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_sum_float64_float64_64( - double* toptr, - const double* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_sum( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_sum_int32_int8_64( - int32_t* toptr, - const int8_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_sum( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_sum_uint32_uint8_64( - uint32_t* toptr, - const uint8_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_sum( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_sum_int32_int16_64( - int32_t* toptr, - const int16_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_sum( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_sum_uint32_uint16_64( - uint32_t* toptr, - const uint16_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_sum( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_sum_int32_int32_64( - int32_t* toptr, - const int32_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_sum( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_sum_uint32_uint32_64( - uint32_t* toptr, - const uint32_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_sum( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} + +#define REDUCE_SUM(OUT_T, OUT_N, IN_T, IN_N) \ + ERROR awkward_reduce_sum_##OUT_N##_##IN_N##_64( \ + OUT_T* toptr, const IN_T* fromptr, \ + const int64_t* offsets, int64_t outlength) { \ + return awkward_reduce_sum(toptr, fromptr, offsets, outlength); \ + } + +REDUCE_SUM(int64_t, int64, int8_t, int8) +REDUCE_SUM(uint64_t, uint64, uint8_t, uint8) +REDUCE_SUM(int64_t, int64, int16_t, int16) +REDUCE_SUM(uint64_t, uint64, uint16_t, uint16) +REDUCE_SUM(int64_t, int64, int32_t, int32) +REDUCE_SUM(uint64_t, uint64, uint32_t, uint32) +REDUCE_SUM(int64_t, int64, int64_t, int64) +REDUCE_SUM(uint64_t, uint64, uint64_t, uint64) +REDUCE_SUM(float, float32, float, float32) +REDUCE_SUM(double, float64, double, float64) +REDUCE_SUM(int32_t, int32, int8_t, int8) +REDUCE_SUM(uint32_t, uint32, uint8_t, uint8) +REDUCE_SUM(int32_t, int32, int16_t, int16) +REDUCE_SUM(uint32_t, uint32, uint16_t, uint16) +REDUCE_SUM(int32_t, int32, int32_t, int32) +REDUCE_SUM(uint32_t, uint32, uint32_t, uint32) diff --git a/awkward-cpp/src/cpu-kernels/awkward_reduce_sum_bool.cpp b/awkward-cpp/src/cpu-kernels/awkward_reduce_sum_bool.cpp index b569038dae..22c3789f94 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_reduce_sum_bool.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_reduce_sum_bool.cpp @@ -4,185 +4,52 @@ #include "awkward/kernels.h" +// Per-bin "any nonzero" reduction. +// +// We deliberately keep the early-exit: realistic data has nonzeros +// scattered throughout, so on average we exit far before the end of +// the bin; turning this into a full scan to enable vectorisation +// would lose more than it gains for the common case. +// +// `__restrict__` lets the compiler hoist `offsets[bin + 1]` out of the +// inner loop bound check (without it the standard pessimistically +// reloads it every iteration in case `toptr` writes alias `offsets`). template ERROR awkward_reduce_sum_bool( - bool* toptr, - const IN* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - std::memset(toptr, 0, outlength * sizeof(bool)); - - for (int64_t i = 0; i < lenparents; i++) { - if (fromptr[i] != 0) { - toptr[parents[i]] = true; + bool* __restrict__ toptr, + const IN* __restrict__ fromptr, + const int64_t* __restrict__ offsets, + int64_t outlength) { + #ifdef _OPENMP + #pragma omp parallel for if(outlength > 1024) schedule(static) + #endif + for (int64_t bin = 0; bin < outlength; bin++) { + const int64_t start = offsets[bin]; + const int64_t stop = offsets[bin + 1]; + bool found = false; + for (int64_t i = start; i < stop; i++) { + if (fromptr[i] != 0) { found = true; break; } } + toptr[bin] = found; } return success(); } -ERROR awkward_reduce_sum_bool_bool_64( - bool* toptr, - const bool* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_sum_bool( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_sum_bool_int8_64( - bool* toptr, - const int8_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_sum_bool( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_sum_bool_uint8_64( - bool* toptr, - const uint8_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_sum_bool( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_sum_bool_int16_64( - bool* toptr, - const int16_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_sum_bool( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_sum_bool_uint16_64( - bool* toptr, - const uint16_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_sum_bool( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_sum_bool_int32_64( - bool* toptr, - const int32_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_sum_bool( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_sum_bool_uint32_64( - bool* toptr, - const uint32_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_sum_bool( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_sum_bool_int64_64( - bool* toptr, - const int64_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_sum_bool( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_sum_bool_uint64_64( - bool* toptr, - const uint64_t* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_sum_bool( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_sum_bool_float32_64( - bool* toptr, - const float* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_sum_bool( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_sum_bool_float64_64( - bool* toptr, - const double* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_sum_bool( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} + +#define REDUCE_SUM_BOOL(IN_T, IN_N) \ + ERROR awkward_reduce_sum_bool_##IN_N##_64( \ + bool* toptr, const IN_T* fromptr, \ + const int64_t* offsets, int64_t outlength) { \ + return awkward_reduce_sum_bool(toptr, fromptr, offsets, outlength); \ + } + +REDUCE_SUM_BOOL(bool, bool) +REDUCE_SUM_BOOL(int8_t, int8) +REDUCE_SUM_BOOL(uint8_t, uint8) +REDUCE_SUM_BOOL(int16_t, int16) +REDUCE_SUM_BOOL(uint16_t, uint16) +REDUCE_SUM_BOOL(int32_t, int32) +REDUCE_SUM_BOOL(uint32_t, uint32) +REDUCE_SUM_BOOL(int64_t, int64) +REDUCE_SUM_BOOL(uint64_t, uint64) +REDUCE_SUM_BOOL(float, float32) +REDUCE_SUM_BOOL(double, float64) diff --git a/awkward-cpp/src/cpu-kernels/awkward_reduce_sum_bool_complex.cpp b/awkward-cpp/src/cpu-kernels/awkward_reduce_sum_bool_complex.cpp index 9e87b2f794..d772cd42f8 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_reduce_sum_bool_complex.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_reduce_sum_bool_complex.cpp @@ -8,45 +8,22 @@ template ERROR awkward_reduce_sum_bool_complex( bool* toptr, const IN* fromptr, - const int64_t* parents, const int64_t* offsets, - int64_t lenparents, int64_t outlength) { - for (int64_t i = 0; i < outlength; i++) { - toptr[i] = false; - } - for (int64_t i = 0; i < lenparents; i++) { - toptr[parents[i]] |= (fromptr[i * 2] != 0 || fromptr[i * 2 + 1] != 0); + for (int64_t bin = 0; bin < outlength; bin++) { + bool found = false; + for (int64_t i = offsets[bin]; i < offsets[bin + 1]; i++) { + if (fromptr[i * 2] != 0 || fromptr[i * 2 + 1] != 0) { found = true; break; } + } + toptr[bin] = found; } return success(); } -ERROR awkward_reduce_sum_bool_complex64_64( - bool* toptr, - const float* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_sum_bool_complex( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_sum_bool_complex128_64( - bool* toptr, - const double* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_sum_bool_complex( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} + +#define WRAPPER(SUFFIX, IN) \ + ERROR awkward_reduce_sum_bool_complex##SUFFIX(bool* toptr, const IN* fromptr, const int64_t* offsets, int64_t outlength) { \ + return awkward_reduce_sum_bool_complex(toptr, fromptr, offsets, outlength); \ + } + +WRAPPER(64_64, float) +WRAPPER(128_64, double) diff --git a/awkward-cpp/src/cpu-kernels/awkward_reduce_sum_complex.cpp b/awkward-cpp/src/cpu-kernels/awkward_reduce_sum_complex.cpp index 1d924fc7a0..b540d4eee7 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_reduce_sum_complex.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_reduce_sum_complex.cpp @@ -8,48 +8,25 @@ template ERROR awkward_reduce_sum_complex( OUT* toptr, const IN* fromptr, - const int64_t* parents, const int64_t* offsets, - int64_t lenparents, int64_t outlength) { - for (int64_t i = 0; i < outlength; i++) { - toptr[i * 2] = (OUT)0; - toptr[i * 2 + 1] = (OUT)0; - } - for (int64_t i = 0; i < lenparents; i++) { - int64_t parent = parents[i]; - toptr[parent * 2] += fromptr[i * 2]; - toptr[parent * 2 + 1] += fromptr[i * 2 + 1]; + for (int64_t bin = 0; bin < outlength; bin++) { + OUT real = static_cast(0); + OUT imag = static_cast(0); + for (int64_t i = offsets[bin]; i < offsets[bin + 1]; i++) { + real += static_cast(fromptr[i * 2]); + imag += static_cast(fromptr[i * 2 + 1]); + } + toptr[bin * 2] = real; + toptr[bin * 2 + 1] = imag; } return success(); } -ERROR awkward_reduce_sum_complex64_complex64_64( - float* toptr, - const float* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_sum_complex( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} -ERROR awkward_reduce_sum_complex128_complex128_64( - double* toptr, - const double* fromptr, - const int64_t* parents, - const int64_t* offsets, - int64_t lenparents, - int64_t outlength) { - return awkward_reduce_sum_complex( - toptr, - fromptr, - parents, - offsets, - lenparents, - outlength); -} + +#define WRAPPER(SUFFIX, OUT, IN) \ + ERROR awkward_reduce_sum_complex##SUFFIX(OUT* toptr, const IN* fromptr, const int64_t* offsets, int64_t outlength) { \ + return awkward_reduce_sum_complex(toptr, fromptr, offsets, outlength); \ + } + +WRAPPER(64_complex64_64, float, float) +WRAPPER(128_complex128_64, double, double) diff --git a/awkward-cpp/src/cpu-kernels/awkward_reduce_sum_int32_bool_64.cpp b/awkward-cpp/src/cpu-kernels/awkward_reduce_sum_int32_bool_64.cpp index c7cf01348b..7199eac94e 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_reduce_sum_int32_bool_64.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_reduce_sum_int32_bool_64.cpp @@ -7,14 +7,14 @@ ERROR awkward_reduce_sum_int32_bool_64( int32_t* toptr, const bool* fromptr, - const int64_t* parents, const int64_t* offsets, - int64_t lenparents, int64_t outlength) { - std::memset(toptr, 0, outlength * sizeof(int32_t)); - - for (int64_t i = 0; i < lenparents; i++) { - toptr[parents[i]] += fromptr[i]; + for (int64_t bin = 0; bin < outlength; bin++) { + int32_t acc = 0; + for (int64_t i = offsets[bin]; i < offsets[bin + 1]; i++) { + if (fromptr[i]) acc++; + } + toptr[bin] = acc; } return success(); } diff --git a/awkward-cpp/src/cpu-kernels/awkward_reduce_sum_int64_bool_64.cpp b/awkward-cpp/src/cpu-kernels/awkward_reduce_sum_int64_bool_64.cpp index 5b1d30d6f5..3ede65a997 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_reduce_sum_int64_bool_64.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_reduce_sum_int64_bool_64.cpp @@ -7,14 +7,14 @@ ERROR awkward_reduce_sum_int64_bool_64( int64_t* toptr, const bool* fromptr, - const int64_t* parents, const int64_t* offsets, - int64_t lenparents, int64_t outlength) { - std::memset(toptr, 0, outlength * sizeof(int64_t)); - - for (int64_t i = 0; i < lenparents; i++) { - toptr[parents[i]] += fromptr[i]; + for (int64_t bin = 0; bin < outlength; bin++) { + int64_t acc = 0; + for (int64_t i = offsets[bin]; i < offsets[bin + 1]; i++) { + if (fromptr[i]) acc++; + } + toptr[bin] = acc; } return success(); } diff --git a/awkward-cpp/src/cpu-kernels/awkward_sort.cpp b/awkward-cpp/src/cpu-kernels/awkward_sort.cpp index 380af78bb4..72da306cff 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_sort.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_sort.cpp @@ -7,20 +7,15 @@ #include #include #include +#include #include -template -bool sort_order_ascending(T l, T r) -{ - return !std::isnan(static_cast(r)) && (std::isnan(static_cast(l)) || l < r); -} - -template -bool sort_order_descending(T l, T r) -{ - return !std::isnan(static_cast(r)) && (std::isnan(static_cast(l)) || l > r); -} - +// Per-segment sort by value. NaNs are pushed to the high end (matching +// NumPy / the older hand-rolled comparator). Direction and NaN handling +// fold into a single inline lambda; `if constexpr` lets the bool/integer +// specialisations skip the floating-point NaN branch entirely (so we +// never instantiate `std::isnan(bool)` and the explicit bool override +// helpers are no longer needed). template ERROR awkward_sort( T* toptr, @@ -28,264 +23,60 @@ ERROR awkward_sort( int64_t length, const int64_t* offsets, int64_t offsetslength, - int64_t parentslength, + int64_t /* parentslength */, bool ascending, bool stable) { std::vector index(length); - std::iota(index.begin(), index.end(), 0); - - for (int64_t i = 0; i < offsetslength - 1; i++) { - auto start = index.begin() + offsets[i]; - auto stop = index.begin() + offsets[i + 1]; + std::iota(index.begin(), index.end(), int64_t{0}); - if (stable) { - if (ascending) { - std::stable_sort(start, stop, [fromptr](int64_t i1, int64_t i2) { - return sort_order_ascending(fromptr[i1], fromptr[i2]); - }); - } else { - std::stable_sort(start, stop, [fromptr](int64_t i1, int64_t i2) { - return sort_order_descending(fromptr[i1], fromptr[i2]); - }); - } - } else { - if (ascending) { - std::sort(start, stop, [fromptr](int64_t i1, int64_t i2) { - return sort_order_ascending(fromptr[i1], fromptr[i2]); - }); - } else { - std::sort(start, stop, [fromptr](int64_t i1, int64_t i2) { - return sort_order_descending(fromptr[i1], fromptr[i2]); - }); - } + auto less = [&](int64_t a, int64_t b) -> bool { + T l = fromptr[a]; + T r = fromptr[b]; + if constexpr (std::is_floating_point_v) { + if (std::isnan(r)) return false; + if (std::isnan(l)) return true; } + return ascending ? (l < r) : (l > r); + }; + + // Bin loop is embarrassingly parallel: each segment of `index` is sorted + // independently. `dynamic` schedule helps when bin sizes are uneven. + #ifdef _OPENMP + #pragma omp parallel for if(offsetslength > 1024) schedule(dynamic, 64) + #endif + for (int64_t i = 0; i < offsetslength - 1; i++) { + auto first = index.begin() + offsets[i]; + auto last = index.begin() + offsets[i + 1]; + if (stable) std::stable_sort(first, last, less); + else std::sort(first, last, less); } - int64_t copy_length = (parentslength < length) ? parentslength : length; + int64_t parentslength_eff = offsets[offsetslength - 1]; + int64_t copy_length = (parentslength_eff < length) ? parentslength_eff : length; for (int64_t i = 0; i < copy_length; i++) { toptr[i] = fromptr[index[i]]; } - return success(); } -ERROR awkward_sort_bool( - bool* toptr, - const bool* fromptr, - int64_t length, - const int64_t* offsets, - int64_t offsetslength, - int64_t parentslength, - bool ascending, - bool stable) { - return awkward_sort( - toptr, - fromptr, - length, - offsets, - offsetslength, - parentslength, - ascending, - stable); -} -ERROR awkward_sort_int8( - int8_t* toptr, - const int8_t* fromptr, - int64_t length, - const int64_t* offsets, - int64_t offsetslength, - int64_t parentslength, - bool ascending, - bool stable) { - return awkward_sort( - toptr, - fromptr, - length, - offsets, - offsetslength, - parentslength, - ascending, - stable); -} -ERROR awkward_sort_uint8( - uint8_t* toptr, - const uint8_t* fromptr, - int64_t length, - const int64_t* offsets, - int64_t offsetslength, - int64_t parentslength, - bool ascending, - bool stable) { - return awkward_sort( - toptr, - fromptr, - length, - offsets, - offsetslength, - parentslength, - ascending, - stable); -} -ERROR awkward_sort_int16( - int16_t* toptr, - const int16_t* fromptr, - int64_t length, - const int64_t* offsets, - int64_t offsetslength, - int64_t parentslength, - bool ascending, - bool stable) { - return awkward_sort( - toptr, - fromptr, - length, - offsets, - offsetslength, - parentslength, - ascending, - stable); -} -ERROR awkward_sort_uint16( - uint16_t* toptr, - const uint16_t* fromptr, - int64_t length, - const int64_t* offsets, - int64_t offsetslength, - int64_t parentslength, - bool ascending, - bool stable) { - return awkward_sort( - toptr, - fromptr, - length, - offsets, - offsetslength, - parentslength, - ascending, - stable); -} -ERROR awkward_sort_int32( - int32_t* toptr, - const int32_t* fromptr, - int64_t length, - const int64_t* offsets, - int64_t offsetslength, - int64_t parentslength, - bool ascending, - bool stable) { - return awkward_sort( - toptr, - fromptr, - length, - offsets, - offsetslength, - parentslength, - ascending, - stable); -} -ERROR awkward_sort_uint32( - uint32_t* toptr, - const uint32_t* fromptr, - int64_t length, - const int64_t* offsets, - int64_t offsetslength, - int64_t parentslength, - bool ascending, - bool stable) { - return awkward_sort( - toptr, - fromptr, - length, - offsets, - offsetslength, - parentslength, - ascending, - stable); -} -ERROR awkward_sort_int64( - int64_t* toptr, - const int64_t* fromptr, - int64_t length, - const int64_t* offsets, - int64_t offsetslength, - int64_t parentslength, - bool ascending, - bool stable) { - return awkward_sort( - toptr, - fromptr, - length, - offsets, - offsetslength, - parentslength, - ascending, - stable); -} -ERROR awkward_sort_uint64( - uint64_t* toptr, - const uint64_t* fromptr, - int64_t length, - const int64_t* offsets, - int64_t offsetslength, - int64_t parentslength, - bool ascending, - bool stable) { - return awkward_sort( - toptr, - fromptr, - length, - offsets, - offsetslength, - parentslength, - ascending, - stable); -} -ERROR awkward_sort_float32( - float* toptr, - const float* fromptr, - int64_t length, - const int64_t* offsets, - int64_t offsetslength, - int64_t parentslength, - bool ascending, - bool stable) { - return awkward_sort( - toptr, - fromptr, - length, - offsets, - offsetslength, - parentslength, - ascending, - stable); -} -ERROR awkward_sort_float64( - double* toptr, - const double* fromptr, - int64_t length, - const int64_t* offsets, - int64_t offsetslength, - int64_t parentslength, - bool ascending, - bool stable) { - return awkward_sort( - toptr, - fromptr, - length, - offsets, - offsetslength, - parentslength, - ascending, - stable); -} -template <> -bool sort_order_ascending(bool l, bool r) -{ - return l < r; -} +#define SORT(T, NAME) \ + ERROR awkward_sort_##NAME( \ + T* toptr, const T* fromptr, int64_t length, \ + const int64_t* offsets, int64_t offsetslength, int64_t parentslength, \ + bool ascending, bool stable) { \ + return awkward_sort( \ + toptr, fromptr, length, offsets, offsetslength, \ + parentslength, ascending, stable); \ + } -template <> -bool sort_order_descending(bool l, bool r) -{ - return l > r; -} +SORT(bool, bool) +SORT(int8_t, int8) +SORT(uint8_t, uint8) +SORT(int16_t, int16) +SORT(uint16_t, uint16) +SORT(int32_t, int32) +SORT(uint32_t, uint32) +SORT(int64_t, int64) +SORT(uint64_t, uint64) +SORT(float, float32) +SORT(double, float64) diff --git a/awkward-cpp/src/cpu-kernels/awkward_sorting_ranges.cpp b/awkward-cpp/src/cpu-kernels/awkward_sorting_ranges.cpp index e7f9fa37d6..cef6a4b55e 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_sorting_ranges.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_sorting_ranges.cpp @@ -1,4 +1,12 @@ // BSD 3-Clause License; see https://github.com/scikit-hep/awkward/blob/main/LICENSE +// +// DEPRECATED — parents → offsets converter. +// +// As of the offsets-pipeline migration this kernel is no longer called from +// any of NumpyArray's _unique / _argsort_next / _sort_next paths: callers now +// receive `offsets` directly and skip this conversion. The function is kept +// here for ABI compatibility while downstream consumers migrate. Remove once +// all callers are gone. #define FILENAME(line) FILENAME_FOR_EXCEPTIONS_C("src/cpu-kernels/awkward_sorting_ranges.cpp", line) diff --git a/awkward-cpp/src/cpu-kernels/awkward_sorting_ranges_length.cpp b/awkward-cpp/src/cpu-kernels/awkward_sorting_ranges_length.cpp index 94d9ffcdd7..8fd64b1e61 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_sorting_ranges_length.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_sorting_ranges_length.cpp @@ -1,4 +1,11 @@ // BSD 3-Clause License; see https://github.com/scikit-hep/awkward/blob/main/LICENSE +// +// DEPRECATED — parents → offsets length helper. +// +// Companion to awkward_sorting_ranges. With the offsets-pipeline migration, +// the caller already knows offsets.length (= outlength + 1), so this lookup +// is no longer needed. Kept for ABI compatibility; remove once callers are +// gone. #define FILENAME(line) FILENAME_FOR_EXCEPTIONS_C("src/cpu-kernels/awkward_sorting_ranges_length.cpp", line) diff --git a/awkward-cpp/src/cpu-kernels/awkward_unique_offsets.cpp b/awkward-cpp/src/cpu-kernels/awkward_unique_offsets.cpp index b61fc3defb..daaa6f07eb 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_unique_offsets.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_unique_offsets.cpp @@ -27,58 +27,12 @@ ERROR awkward_unique_offsets( return success(); } -ERROR awkward_unique_offsets_int8( - int8_t* tooffsets, - int64_t offsetslength, - const int64_t* fromoffsets, - const int64_t* starts, - int64_t startslength) { - return awkward_unique_offsets( - tooffsets, - offsetslength, - fromoffsets, - starts, - startslength); -} - -ERROR awkward_unique_offsets_int16( - int16_t* tooffsets, - int64_t offsetslength, - const int64_t* fromoffsets, - const int64_t* starts, - int64_t startslength) { - return awkward_unique_offsets( - tooffsets, - offsetslength, - fromoffsets, - starts, - startslength); -} - -ERROR awkward_unique_offsets_int32( - int32_t* tooffsets, - int64_t offsetslength, - const int64_t* fromoffsets, - const int64_t* starts, - int64_t startslength) { - return awkward_unique_offsets( - tooffsets, - offsetslength, - fromoffsets, - starts, - startslength); -} +#define WRAPPER(SUFFIX, T) \ + ERROR awkward_unique_offsets_int##SUFFIX(T* tooffsets, int64_t length, const int64_t* fromoffsets, const int64_t* starts, int64_t startslength) { \ + return awkward_unique_offsets(tooffsets, length, fromoffsets, starts, startslength); \ + } -ERROR awkward_unique_offsets_int64( - int64_t* tooffsets, - int64_t offsetslength, - const int64_t* fromoffsets, - const int64_t* starts, - int64_t startslength) { - return awkward_unique_offsets( - tooffsets, - offsetslength, - fromoffsets, - starts, - startslength); -} +WRAPPER(8, int8_t) +WRAPPER(16, int16_t) +WRAPPER(32, int32_t) +WRAPPER(64, int64_t) diff --git a/awkward-cpp/src/cpu-kernels/awkward_unique_ranges.cpp b/awkward-cpp/src/cpu-kernels/awkward_unique_ranges.cpp index a9edf83553..fa4c17404a 100644 --- a/awkward-cpp/src/cpu-kernels/awkward_unique_ranges.cpp +++ b/awkward-cpp/src/cpu-kernels/awkward_unique_ranges.cpp @@ -25,122 +25,18 @@ ERROR awkward_unique_ranges( return success(); } -ERROR awkward_unique_ranges_int8( - int8_t* toptr, - const int64_t* fromoffsets, - int64_t offsetslength, - int64_t* tooffsets) { - return awkward_unique_ranges( - toptr, - fromoffsets, - offsetslength, - tooffsets); -} - -ERROR awkward_unique_ranges_uint8( - uint8_t* toptr, - const int64_t* fromoffsets, - int64_t offsetslength, - int64_t* tooffsets) { - return awkward_unique_ranges( - toptr, - fromoffsets, - offsetslength, - tooffsets); -} - -ERROR awkward_unique_ranges_int16( - int16_t* toptr, - const int64_t* fromoffsets, - int64_t offsetslength, - int64_t* tooffsets) { - return awkward_unique_ranges( - toptr, - fromoffsets, - offsetslength, - tooffsets); -} - -ERROR awkward_unique_ranges_uint16( - uint16_t* toptr, - const int64_t* fromoffsets, - int64_t offsetslength, - int64_t* tooffsets) { - return awkward_unique_ranges( - toptr, - fromoffsets, - offsetslength, - tooffsets); -} - -ERROR awkward_unique_ranges_int32( - int32_t* toptr, - const int64_t* fromoffsets, - int64_t offsetslength, - int64_t* tooffsets) { - return awkward_unique_ranges( - toptr, - fromoffsets, - offsetslength, - tooffsets); -} - -ERROR awkward_unique_ranges_uint32( - uint32_t* toptr, - const int64_t* fromoffsets, - int64_t offsetslength, - int64_t* tooffsets) { - return awkward_unique_ranges( - toptr, - fromoffsets, - offsetslength, - tooffsets); -} - -ERROR awkward_unique_ranges_int64( - int64_t* toptr, - const int64_t* fromoffsets, - int64_t offsetslength, - int64_t* tooffsets) { - return awkward_unique_ranges( - toptr, - fromoffsets, - offsetslength, - tooffsets); -} - -ERROR awkward_unique_ranges_uint64( - uint64_t* toptr, - const int64_t* fromoffsets, - int64_t offsetslength, - int64_t* tooffsets) { - return awkward_unique_ranges( - toptr, - fromoffsets, - offsetslength, - tooffsets); -} - -ERROR awkward_unique_ranges_float32( - float* toptr, - const int64_t* fromoffsets, - int64_t offsetslength, - int64_t* tooffsets) { - return awkward_unique_ranges( - toptr, - fromoffsets, - offsetslength, - tooffsets); -} +#define WRAPPER(SUFFIX, T) \ + ERROR awkward_unique_ranges_##SUFFIX(T* toptr, const int64_t* fromoffsets, int64_t offsetslength, int64_t* tooffsets) { \ + return awkward_unique_ranges(toptr, fromoffsets, offsetslength, tooffsets); \ + } -ERROR awkward_unique_ranges_float64( - double* toptr, - const int64_t* fromoffsets, - int64_t offsetslength, - int64_t* tooffsets) { - return awkward_unique_ranges( - toptr, - fromoffsets, - offsetslength, - tooffsets); -} +WRAPPER(int8, int8_t) +WRAPPER(uint8, uint8_t) +WRAPPER(int16, int16_t) +WRAPPER(uint16, uint16_t) +WRAPPER(int32, int32_t) +WRAPPER(uint32, uint32_t) +WRAPPER(int64, int64_t) +WRAPPER(uint64, uint64_t) +WRAPPER(float32, float) +WRAPPER(float64, double) diff --git a/dev/generate-kernel-signatures.py b/dev/generate-kernel-signatures.py index b6093bb28e..4be14627f1 100644 --- a/dev/generate-kernel-signatures.py +++ b/dev/generate-kernel-signatures.py @@ -124,23 +124,23 @@ # "awkward_reduce_max", # "awkward_reduce_max_complex", # "awkward_reduce_min", - "awkward_reduce_min_complex", + # "awkward_reduce_min_complex", # "awkward_reduce_argmin", - "awkward_reduce_argmin_complex", + # "awkward_reduce_argmin_complex", # "awkward_reduce_argmax", - "awkward_reduce_argmax_complex", + # "awkward_reduce_argmax_complex", # "awkward_reduce_sum", # "awkward_reduce_sum_bool", - "awkward_reduce_sum_bool_complex", + # "awkward_reduce_sum_bool_complex", # "awkward_reduce_sum_complex", # "awkward_reduce_sum_int32_bool_64", # "awkward_reduce_sum_int64_bool_64", # "awkward_reduce_prod", # "awkward_reduce_prod_bool", - "awkward_reduce_prod_bool_complex", - "awkward_reduce_prod_complex", + # "awkward_reduce_prod_bool_complex", + # "awkward_reduce_prod_complex", # "awkward_reduce_countnonzero", - "awkward_reduce_countnonzero_complex", + # "awkward_reduce_countnonzero_complex", "awkward_sorting_ranges", "awkward_sorting_ranges_length", ] diff --git a/kernel-specification.yml b/kernel-specification.yml index 4802d11841..9769399a3c 100644 --- a/kernel-specification.yml +++ b/kernel-specification.yml @@ -233,28 +233,29 @@ kernels: - name: awkward_ByteMaskedArray_reduce_next_64 args: - {name: nextcarry, type: "List[int64_t]", dir: out} - - {name: nextparents, type: "List[int64_t]", dir: out} + - {name: nextoffsets, type: "List[int64_t]", dir: out} - {name: outindex, type: "List[int64_t]", dir: out} - {name: mask, type: "Const[List[int8_t]]", dir: in, role: reducer-mask} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - - {name: length, type: "int64_t", dir: in, role: reducer-length} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} + - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - {name: validwhen, type: "bool", dir: in, role: reducer-validwhen} description: null definition: | def awkward_ByteMaskedArray_reduce_next_64( - nextcarry, nextparents, outindex, mask, parents, length, validwhen + nextcarry, nextoffsets, outindex, mask, offsets, outlength, validwhen ): k = 0 - for i in range(length): - if (mask[i] != 0) == validwhen: - nextcarry[k] = i - nextparents[k] = parents[i] - outindex[i] = k - k = k + 1 - else: - outindex[i] = -1 + nextoffsets[0] = 0 + for bin in range(outlength): + for i in range(offsets[bin], offsets[bin + 1]): + if (mask[i] != 0) == validwhen: + nextcarry[k] = i + outindex[i] = k + k = k + 1 + else: + outindex[i] = -1 + nextoffsets[bin + 1] = k automatic-tests: true - - name: awkward_ByteMaskedArray_reduce_next_nonlocal_nextshifts_64 specializations: - name: awkward_ByteMaskedArray_reduce_next_nonlocal_nextshifts_64 @@ -549,25 +550,24 @@ kernels: args: - {name: tocarry, type: "List[int64_t]", dir: out} - {name: starts, type: "Const[List[int64_t]]", dir: in, role: ListArray-starts} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: IndexedArray-index} - - {name: parentslength, type: "Const[int64_t]", dir: in, role: default} - - {name: nextparents, type: "Const[List[int64_t]]", dir: in, role: IndexedArray-index} - - {name: nextlen, type: "Const[int64_t]", dir: in, role: default} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} + - {name: nextoffsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} + - {name: outlength, type: "Const[int64_t]", dir: in, role: reducer-outlength} description: null definition: | def awkward_IndexedArray_local_preparenext_64( - tocarry, starts, parents, parentslength, nextparents, nextlen + tocarry, starts, offsets, nextoffsets, outlength ): - j = 0 - for i in range(parentslength): - parent = parents[i]; - if j < nextlen and parent == nextparents[j]: - tocarry[i] = j; - j += 1; - else: - tocarry[i] = -1; + for bin in range(outlength): + k = nextoffsets[bin] + inner_stop = nextoffsets[bin + 1] + for i in range(offsets[bin], offsets[bin + 1]): + if k < inner_stop: + tocarry[i] = k + k += 1 + else: + tocarry[i] = -1 automatic-tests: false - - name: awkward_IndexedArray_numnull specializations: - name: awkward_IndexedArray32_numnull @@ -646,35 +646,34 @@ kernels: args: - {name: toindex, type: "List[int64_t]", dir: out} - {name: fromindex, type: "Const[List[int32_t]]", dir: in, role: IndexedArray-index} - - {name: lenindex, type: "int64_t", dir: in, role: default} - - {name: parents, type: "Const[List[int64_t]]", dir: in} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} + - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - {name: starts, type: "Const[List[int64_t]]", dir: in} - name: awkward_IndexedArray64_index_of_nulls args: - {name: toindex, type: "List[int64_t]", dir: out} - {name: fromindex, type: "Const[List[int64_t]]", dir: in, role: IndexedArray-index} - - {name: lenindex, type: "int64_t", dir: in, role: default} - - {name: parents, type: "Const[List[int64_t]]", dir: in} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} + - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - {name: starts, type: "Const[List[int64_t]]", dir: in} - name: awkward_IndexedArrayU32_index_of_nulls args: - {name: toindex, type: "List[int64_t]", dir: out} - {name: fromindex, type: "Const[List[uint32_t]]", dir: in, role: IndexedArray-index} - - {name: lenindex, type: "int64_t", dir: in, role: default} - - {name: parents, type: "Const[List[int64_t]]", dir: in} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} + - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - {name: starts, type: "Const[List[int64_t]]", dir: in} description: null definition: | - def awkward_IndexedArray_index_of_nulls(toindex, fromindex, lenindex, parents, starts): + def awkward_IndexedArray_index_of_nulls(toindex, fromindex, offsets, outlength, starts): j = 0 - for i in range(lenindex): - if fromindex[i] < 0: - parent = parents[i] - start = starts[parent] - toindex[j] = i - start - j = j + 1 + for bin in range(outlength): + start = starts[bin] + for i in range(offsets[bin], offsets[bin + 1]): + if fromindex[i] < 0: + toindex[j] = i - start + j = j + 1 automatic-tests: true - - name: awkward_IndexedArray_overlay_mask specializations: - name: awkward_IndexedArray32_overlay_mask8_to64 @@ -708,43 +707,44 @@ kernels: - name: awkward_IndexedArray32_reduce_next_64 args: - {name: nextcarry, type: "List[int64_t]", dir: out} - - {name: nextparents, type: "List[int64_t]", dir: out} + - {name: nextoffsets, type: "List[int64_t]", dir: out} - {name: outindex, type: "List[int64_t]", dir: out} - {name: index, type: "Const[List[int32_t]]", dir: in, role: reducer-index} - - {name: parents, type: "List[int64_t]", dir: in, role: reducer-parents} - - {name: length, type: "int64_t", dir: in, role: reducer-length} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} + - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - name: awkward_IndexedArray64_reduce_next_64 args: - {name: nextcarry, type: "List[int64_t]", dir: out} - - {name: nextparents, type: "List[int64_t]", dir: out} + - {name: nextoffsets, type: "List[int64_t]", dir: out} - {name: outindex, type: "List[int64_t]", dir: out} - {name: index, type: "Const[List[int64_t]]", dir: in, role: reducer-index} - - {name: parents, type: "List[int64_t]", dir: in, role: reducer-parents} - - {name: length, type: "int64_t", dir: in, role: reducer-length} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} + - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - name: awkward_IndexedArrayU32_reduce_next_64 args: - {name: nextcarry, type: "List[int64_t]", dir: out} - - {name: nextparents, type: "List[int64_t]", dir: out} + - {name: nextoffsets, type: "List[int64_t]", dir: out} - {name: outindex, type: "List[int64_t]", dir: out} - {name: index, type: "Const[List[uint32_t]]", dir: in, role: reducer-index} - - {name: parents, type: "List[int64_t]", dir: in, role: reducer-parents} - - {name: length, type: "int64_t", dir: in, role: reducer-length} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} + - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} description: null definition: | def awkward_IndexedArray_reduce_next_64( - nextcarry, nextparents, outindex, index, parents, length + nextcarry, nextoffsets, outindex, index, offsets, outlength ): k = 0 - for i in range(length): - if index[i] >= 0: - nextcarry[k] = index[i] - nextparents[k] = parents[i] - outindex[i] = k - k = k + 1 - else: - outindex[i] = -1 + nextoffsets[0] = 0 + for bin in range(outlength): + for i in range(offsets[bin], offsets[bin + 1]): + if index[i] >= 0: + nextcarry[k] = index[i] + outindex[i] = k + k = k + 1 + else: + outindex[i] = -1 + nextoffsets[bin + 1] = k automatic-tests: true - - name: awkward_IndexedArray_reduce_next_fix_offsets_64 specializations: - name: awkward_IndexedArray_reduce_next_fix_offsets_64 @@ -2167,7 +2167,7 @@ kernels: specializations: - name: awkward_ListOffsetArray32_reduce_local_nextparents_64 args: - - {name: nextparents, type: "List[int64_t]", dir: out} + - {name: nextparents, type: "List[int32_t]", dir: out} - {name: offsets, type: "Const[List[int32_t]]", dir: in, role: reducer-offsets} - {name: length, type: "int64_t", dir: in, role: reducer-length} - {name: nextparents_length, type: "int64_t", dir: in, role: default} @@ -2179,11 +2179,11 @@ kernels: - {name: nextparents_length, type: "int64_t", dir: in, role: default} - name: awkward_ListOffsetArrayU32_reduce_local_nextparents_64 args: - - {name: nextparents, type: "List[int64_t]", dir: out} + - {name: nextparents, type: "List[uint32_t]", dir: out} - {name: offsets, type: "Const[List[uint32_t]]", dir: in, role: reducer-offsets} - {name: length, type: "int64_t", dir: in, role: reducer-length} - {name: nextparents_length, type: "int64_t", dir: in, role: default} - description: null + description: "DEPRECATED: offsets -> parents converter (local reduction path). The offsets-pipeline migration passes self._offsets as the next-layer offsets and does not need a parents-form. Kept for ABI compatibility." definition: | def awkward_ListOffsetArray_reduce_local_nextparents_64(nextparents, offsets, length, nextparents_length): initialoffset = offsets[0] @@ -2202,7 +2202,7 @@ kernels: - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - description: null + description: "DEPRECATED: parents -> offsets converter (output side). The offsets-pipeline migration assigns outoffsets = offsets directly without invoking this kernel. Kept for ABI compatibility." definition: | def awkward_ListOffsetArray_reduce_local_outoffsets_64( outoffsets, parents, lenparents, outlength @@ -2252,39 +2252,33 @@ kernels: - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - {name: length, type: "int64_t", dir: in, role: reducer-length} - {name: starts, type: "Const[List[int64_t]]", dir: in, role: reducer-starts} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: outer_offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} + - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - {name: maxcount, type: "int64_t", dir: in, role: reducer-maxcount} - {name: nextlen, type: "int64_t", dir: in, role: reducer-nextlen} - {name: nextcarry, type: "Const[List[int64_t]]", dir: in, role: reducer-nextcarry} description: null definition: | def awkward_ListOffsetArray_reduce_nonlocal_nextshifts_64( - nummissing, - missing, - nextshifts, - offsets, - length, - starts, - parents, - maxcount, - nextlen, - nextcarry, + nummissing, missing, nextshifts, offsets, length, starts, + outer_offsets, outlength, maxcount, nextlen, nextcarry, ): - for i in range(length): - start = offsets[i] - stop = offsets[i + 1] - count = stop - start - if starts[parents[i]] == i: - for k in range(maxcount): - nummissing[k] = 0 - for k in range(count, maxcount): - nummissing[k] = nummissing[k] + 1 - for j in range(count): - missing[start + j] = nummissing[j] + for outer_bin in range(outlength): + for k in range(maxcount): + nummissing[k] = 0 + row_start = outer_offsets[outer_bin] + row_stop = outer_offsets[outer_bin + 1] + for i in range(row_start, row_stop): + start = offsets[i] + stop = offsets[i + 1] + count = stop - start + for k in range(count, maxcount): + nummissing[k] = nummissing[k] + 1 + for j in range(count): + missing[start + j] = nummissing[j] for j in range(nextlen): nextshifts[j] = missing[nextcarry[j]] automatic-tests: true - - name: awkward_ListOffsetArray_reduce_nonlocal_nextstarts_64 specializations: - name: awkward_ListOffsetArray_reduce_nonlocal_nextstarts_64 @@ -2292,7 +2286,7 @@ kernels: - {name: nextstarts, type: "List[int64_t]", dir: out} - {name: nextparents, type: "Const[List[int64_t]]", dir: in, role: reducer-nextparents} - {name: nextlen, type: "int64_t", dir: in, role: reducer-nextlen} - description: null + description: "DEPRECATED: nextparents -> nextstarts derivation. In the offsets-pipeline migration, nextstarts is just nextoffsets[:-1]. Kept for ABI compatibility." definition: | def awkward_ListOffsetArray_reduce_nonlocal_nextstarts_64( nextstarts, nextparents, nextlen @@ -2349,7 +2343,7 @@ kernels: - name: awkward_ListOffsetArray_reduce_nonlocal_preparenext_64 args: - {name: nextcarry, type: "List[int64_t]", dir: out} - - {name: nextparents, type: "List[int64_t]", dir: out} + - {name: nextoffsets, type: "List[int64_t]", dir: out} - {name: nextlen, type: "int64_t", dir: in} - {name: maxnextparents, type: "List[int64_t]", dir: out} - {name: distincts, type: "List[int64_t]", dir: out} @@ -2357,47 +2351,41 @@ kernels: - {name: offsetscopy, type: "List[int64_t]", dir: in} - {name: offsets, type: "Const[List[int64_t]]", dir: in} - {name: length, type: "int64_t", dir: in} - - {name: parents, type: "Const[List[int64_t]]", dir: in} + - {name: outer_offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} + - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - {name: maxcount, type: "int64_t", dir: in} description: null definition: | def awkward_ListOffsetArray_reduce_nonlocal_preparenext_64( - nextcarry, - nextparents, - nextlen, - maxnextparents, - distincts, - distinctslen, - offsetscopy, - offsets, - length, - parents, - maxcount, + nextcarry, nextoffsets, nextlen, maxnextparents, + distincts, distinctslen, offsetscopy, offsets, length, + outer_offsets, outlength, maxcount, ): - maxnextparents[0] = 0 + # -1 sentinel so callers compute (maxnextparents + 1) == 0 for empty input + maxnextparents[0] = -1 for i in range(distinctslen): distincts[i] = -1 - k = 0 - while k < nextlen: - j = 0 - for i in range(length): - if offsetscopy[i] < offsets[i + 1]: - diff = offsetscopy[i] - offsets[i] - parent = parents[i] - nextcarry[k] = offsetscopy[i] - nextparents[k] = parent*maxcount + diff - - if maxnextparents[0] < nextparents[k]: - maxnextparents[0] = nextparents[k] - - if nextparents[k] < distinctslen and distincts[nextparents[k]] == -1: - distincts[nextparents[k]] = j - j += 1 - k += 1 - offsetscopy[i] += 1 + k = 0 + nextoffsets[0] = 0 + for outer_bin in range(outlength): + row_start = outer_offsets[outer_bin] + row_stop = outer_offsets[outer_bin + 1] + for col in range(maxcount): + nextbin = outer_bin * maxcount + col + any_in_bin = False + for row in range(row_start, row_stop): + if col < offsets[row + 1] - offsets[row]: + nextcarry[k] = offsets[row] + col + k += 1 + any_in_bin = True + nextoffsets[nextbin + 1] = k + if any_in_bin: + if nextbin < distinctslen: + distincts[nextbin] = nextbin + if nextbin > maxnextparents[0]: + maxnextparents[0] = nextbin automatic-tests: false - - name: awkward_ListOffsetArray_rpad_and_clip_axis1 specializations: - name: awkward_ListOffsetArray32_rpad_and_clip_axis1_64 @@ -2584,83 +2572,78 @@ kernels: - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromshifts, type: "Const[List[int64_t]]", dir: in, role: IndexedArray-index} - {name: length, type: "int64_t", dir: in, role: default} - - {name: fromoffsets, type: "Const[List[int64_t]]", dir: in, role: IndexedArray-index} - - {name: offsetslength, type: "int64_t", dir: in, role: default} - - {name: fromparents, type: "Const[List[int64_t]]", dir: in, role: IndexedArray-index} - - {name: fromstarts, type: "Const[List[int64_t]]", dir: in, role: IndexedArray-index} + - {name: fromoffsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} + - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} + - {name: fromparents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: fromstarts, type: "Const[List[int64_t]]", dir: in, role: reducer-starts} description: null definition: | - def awkward_NumpyArray_rearrange_shifted(toptr, fromshifts, length, fromoffsets, offsetslength, fromparents, fromstarts): + def awkward_NumpyArray_rearrange_shifted( + toptr, fromshifts, length, fromoffsets, outlength, fromparents, fromstarts + ): k = 0 - for i in range(offsetslength - 1): - for j in range(fromoffsets[i + 1] - fromoffsets[i]): - toptr[k] = toptr[k] + fromoffsets[i] + for bin in range(outlength): + bin_offset = fromoffsets[bin] + for j in range(fromoffsets[bin + 1] - bin_offset): + toptr[k] = toptr[k] + bin_offset k = k + 1 - for i in range(length): parent = fromparents[i] start = fromstarts[parent] toptr[i] = toptr[i] + fromshifts[toptr[i]] - start automatic-tests: false - - name: awkward_NumpyArray_reduce_adjust_starts_64 specializations: - name: awkward_NumpyArray_reduce_adjust_starts_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - {name: starts, type: "Const[List[int64_t]]", dir: in, role: reducer-starts} description: null definition: | - def awkward_NumpyArray_reduce_adjust_starts_64(toptr, outlength, parents, starts): + def awkward_NumpyArray_reduce_adjust_starts_64(toptr, outlength, offsets, starts): for k in range(outlength): i = toptr[k] if i >= 0: - parent = parents[i] - start = starts[parent] - toptr[k] += -start + toptr[k] -= starts[k] automatic-tests: true - - name: awkward_NumpyArray_reduce_adjust_starts_shifts_64 specializations: - name: awkward_NumpyArray_reduce_adjust_starts_shifts_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - {name: starts, type: "Const[List[int64_t]]", dir: in, role: reducer-starts} - {name: shifts, type: "Const[List[int64_t]]", dir: in, role: reducer-shifts} description: null definition: | def awkward_NumpyArray_reduce_adjust_starts_shifts_64( - toptr, outlength, parents, starts, shifts + toptr, outlength, offsets, starts, shifts ): for k in range(outlength): i = toptr[k] if i >= 0: - parent = parents[i] - start = starts[parent] - toptr[k] += shifts[i] - start + toptr[k] += shifts[i] - starts[k] automatic-tests: true - - name: awkward_NumpyArray_reduce_mask_ByteMaskedArray_64 specializations: - name: awkward_NumpyArray_reduce_mask_ByteMaskedArray_64 args: - {name: toptr, type: "List[int8_t]", dir: out} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} description: null definition: | def awkward_NumpyArray_reduce_mask_ByteMaskedArray_64( - toptr, parents, lenparents, outlength + toptr, offsets, outlength ): for i in range(outlength): - toptr[i] = 1 - for i in range(lenparents): - toptr[parents[i]] = 0 + if offsets[i + 1] - offsets[i] > 0: + toptr[i] = 0 + else: + toptr[i] = 1 automatic-tests: true - name: awkward_ListOffsetArray_argsort_strings @@ -3180,7 +3163,7 @@ kernels: - {name: nextparents, type: "List[int64_t]", dir: out} - {name: size, type: "int64_t", dir: in, role: RegularArray-size} - {name: length, type: "int64_t", dir: in, role: reducer-length} - description: null + description: "DEPRECATED: local nextparents builder for RegularArray. The next-layer offsets in the local-reduction case is just arange(0, length*size+1, size). Kept for ABI compatibility." definition: | def awkward_RegularArray_reduce_local_nextparents_64(nextparents, size, length): k = 0 @@ -3196,23 +3179,27 @@ kernels: - name: awkward_RegularArray_reduce_nonlocal_preparenext_64 args: - {name: nextcarry, type: "List[int64_t]", dir: out} - - {name: nextparents, type: "List[int64_t]", dir: out} - - {name: parents, type: "Const[List[int64_t]]", dir: in} + - {name: nextoffsets, type: "List[int64_t]", dir: out} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - {name: size, type: "int64_t", dir: in} - {name: length, type: "int64_t", dir: in} + - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} description: null definition: | - def awkward_RegularArray_reduce_nonlocal_preparenext_64(nextcarry, nextparents, parents, size, length): + def awkward_RegularArray_reduce_nonlocal_preparenext_64( + nextcarry, nextoffsets, offsets, size, length, outlength + ): k = 0 - for j in range(size): - for i in range(length): - # nextparents needs to be locally contiguous - # so order our arrays by the transpose - nextcarry[k] = i * size + j - nextparents[k] = parents[i] * size + j - k += 1 + nextoffsets[0] = 0 + for bin in range(outlength): + row_start = offsets[bin] + row_stop = offsets[bin + 1] + for j in range(size): + for i in range(row_start, row_stop): + nextcarry[k] = i * size + j + k += 1 + nextoffsets[bin * size + j + 1] = k automatic-tests: false - - name: awkward_RegularArray_rpad_and_clip_axis1 specializations: - name: awkward_RegularArray_rpad_and_clip_axis1_64 @@ -3828,7 +3815,34 @@ kernels: - name: awkward_argsort specializations: - - name: awkward_argsort_bool + - name: awkward_argsort_bool_int32 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[bool]]", dir: in, role: IndexedArray-index} + - {name: length, type: "int64_t", dir: in, role: default} + - {name: offsets, type: "Const[List[int32_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsetslength, type: "int64_t", dir: in, role: default} + - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} + - {name: stable, type: "bool", dir: in, role: ListArray-replacement} + - name: awkward_argsort_bool_uint32 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[bool]]", dir: in, role: IndexedArray-index} + - {name: length, type: "int64_t", dir: in, role: default} + - {name: offsets, type: "Const[List[uint32_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsetslength, type: "int64_t", dir: in, role: default} + - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} + - {name: stable, type: "bool", dir: in, role: ListArray-replacement} + - name: awkward_argsort_bool_uint64 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[bool]]", dir: in, role: IndexedArray-index} + - {name: length, type: "int64_t", dir: in, role: default} + - {name: offsets, type: "Const[List[uint64_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsetslength, type: "int64_t", dir: in, role: default} + - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} + - {name: stable, type: "bool", dir: in, role: ListArray-replacement} + - name: awkward_argsort_bool_int64 args: - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromptr, type: "Const[List[bool]]", dir: in, role: IndexedArray-index} @@ -3837,7 +3851,34 @@ kernels: - {name: offsetslength, type: "int64_t", dir: in, role: default} - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} - {name: stable, type: "bool", dir: in, role: ListArray-replacement} - - name: awkward_argsort_int8 + - name: awkward_argsort_int8_int32 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[int8_t]]", dir: in, role: IndexedArray-index} + - {name: length, type: "int64_t", dir: in, role: default} + - {name: offsets, type: "Const[List[int32_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsetslength, type: "int64_t", dir: in, role: default} + - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} + - {name: stable, type: "bool", dir: in, role: ListArray-replacement} + - name: awkward_argsort_int8_uint32 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[int8_t]]", dir: in, role: IndexedArray-index} + - {name: length, type: "int64_t", dir: in, role: default} + - {name: offsets, type: "Const[List[uint32_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsetslength, type: "int64_t", dir: in, role: default} + - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} + - {name: stable, type: "bool", dir: in, role: ListArray-replacement} + - name: awkward_argsort_int8_uint64 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[int8_t]]", dir: in, role: IndexedArray-index} + - {name: length, type: "int64_t", dir: in, role: default} + - {name: offsets, type: "Const[List[uint64_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsetslength, type: "int64_t", dir: in, role: default} + - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} + - {name: stable, type: "bool", dir: in, role: ListArray-replacement} + - name: awkward_argsort_int8_int64 args: - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromptr, type: "Const[List[int8_t]]", dir: in, role: IndexedArray-index} @@ -3846,7 +3887,34 @@ kernels: - {name: offsetslength, type: "int64_t", dir: in, role: default} - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} - {name: stable, type: "bool", dir: in, role: ListArray-replacement} - - name: awkward_argsort_int16 + - name: awkward_argsort_int16_int32 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[int16_t]]", dir: in, role: IndexedArray-index} + - {name: length, type: "int64_t", dir: in, role: default} + - {name: offsets, type: "Const[List[int32_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsetslength, type: "int64_t", dir: in, role: default} + - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} + - {name: stable, type: "bool", dir: in, role: ListArray-replacement} + - name: awkward_argsort_int16_uint32 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[int16_t]]", dir: in, role: IndexedArray-index} + - {name: length, type: "int64_t", dir: in, role: default} + - {name: offsets, type: "Const[List[uint32_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsetslength, type: "int64_t", dir: in, role: default} + - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} + - {name: stable, type: "bool", dir: in, role: ListArray-replacement} + - name: awkward_argsort_int16_uint64 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[int16_t]]", dir: in, role: IndexedArray-index} + - {name: length, type: "int64_t", dir: in, role: default} + - {name: offsets, type: "Const[List[uint64_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsetslength, type: "int64_t", dir: in, role: default} + - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} + - {name: stable, type: "bool", dir: in, role: ListArray-replacement} + - name: awkward_argsort_int16_int64 args: - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromptr, type: "Const[List[int16_t]]", dir: in, role: IndexedArray-index} @@ -3855,7 +3923,34 @@ kernels: - {name: offsetslength, type: "int64_t", dir: in, role: default} - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} - {name: stable, type: "bool", dir: in, role: ListArray-replacement} - - name: awkward_argsort_int32 + - name: awkward_argsort_int32_int32 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[int32_t]]", dir: in, role: IndexedArray-index} + - {name: length, type: "int64_t", dir: in, role: default} + - {name: offsets, type: "Const[List[int32_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsetslength, type: "int64_t", dir: in, role: default} + - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} + - {name: stable, type: "bool", dir: in, role: ListArray-replacement} + - name: awkward_argsort_int32_uint32 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[int32_t]]", dir: in, role: IndexedArray-index} + - {name: length, type: "int64_t", dir: in, role: default} + - {name: offsets, type: "Const[List[uint32_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsetslength, type: "int64_t", dir: in, role: default} + - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} + - {name: stable, type: "bool", dir: in, role: ListArray-replacement} + - name: awkward_argsort_int32_uint64 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[int32_t]]", dir: in, role: IndexedArray-index} + - {name: length, type: "int64_t", dir: in, role: default} + - {name: offsets, type: "Const[List[uint64_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsetslength, type: "int64_t", dir: in, role: default} + - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} + - {name: stable, type: "bool", dir: in, role: ListArray-replacement} + - name: awkward_argsort_int32_int64 args: - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromptr, type: "Const[List[int32_t]]", dir: in, role: IndexedArray-index} @@ -3864,7 +3959,34 @@ kernels: - {name: offsetslength, type: "int64_t", dir: in, role: default} - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} - {name: stable, type: "bool", dir: in, role: ListArray-replacement} - - name: awkward_argsort_int64 + - name: awkward_argsort_int64_int32 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[int64_t]]", dir: in, role: IndexedArray-index} + - {name: length, type: "int64_t", dir: in, role: default} + - {name: offsets, type: "Const[List[int32_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsetslength, type: "int64_t", dir: in, role: default} + - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} + - {name: stable, type: "bool", dir: in, role: ListArray-replacement} + - name: awkward_argsort_int64_uint32 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[int64_t]]", dir: in, role: IndexedArray-index} + - {name: length, type: "int64_t", dir: in, role: default} + - {name: offsets, type: "Const[List[uint32_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsetslength, type: "int64_t", dir: in, role: default} + - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} + - {name: stable, type: "bool", dir: in, role: ListArray-replacement} + - name: awkward_argsort_int64_uint64 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[int64_t]]", dir: in, role: IndexedArray-index} + - {name: length, type: "int64_t", dir: in, role: default} + - {name: offsets, type: "Const[List[uint64_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsetslength, type: "int64_t", dir: in, role: default} + - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} + - {name: stable, type: "bool", dir: in, role: ListArray-replacement} + - name: awkward_argsort_int64_int64 args: - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromptr, type: "Const[List[int64_t]]", dir: in, role: IndexedArray-index} @@ -3873,7 +3995,34 @@ kernels: - {name: offsetslength, type: "int64_t", dir: in, role: default} - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} - {name: stable, type: "bool", dir: in, role: ListArray-replacement} - - name: awkward_argsort_uint8 + - name: awkward_argsort_uint8_int32 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[uint8_t]]", dir: in, role: IndexedArray-index} + - {name: length, type: "int64_t", dir: in, role: default} + - {name: offsets, type: "Const[List[int32_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsetslength, type: "int64_t", dir: in, role: default} + - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} + - {name: stable, type: "bool", dir: in, role: ListArray-replacement} + - name: awkward_argsort_uint8_uint32 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[uint8_t]]", dir: in, role: IndexedArray-index} + - {name: length, type: "int64_t", dir: in, role: default} + - {name: offsets, type: "Const[List[uint32_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsetslength, type: "int64_t", dir: in, role: default} + - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} + - {name: stable, type: "bool", dir: in, role: ListArray-replacement} + - name: awkward_argsort_uint8_uint64 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[uint8_t]]", dir: in, role: IndexedArray-index} + - {name: length, type: "int64_t", dir: in, role: default} + - {name: offsets, type: "Const[List[uint64_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsetslength, type: "int64_t", dir: in, role: default} + - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} + - {name: stable, type: "bool", dir: in, role: ListArray-replacement} + - name: awkward_argsort_uint8_int64 args: - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromptr, type: "Const[List[uint8_t]]", dir: in, role: IndexedArray-index} @@ -3882,54 +4031,189 @@ kernels: - {name: offsetslength, type: "int64_t", dir: in, role: default} - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} - {name: stable, type: "bool", dir: in, role: ListArray-replacement} - - name: awkward_argsort_uint16 + - name: awkward_argsort_uint16_int32 args: - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromptr, type: "Const[List[uint16_t]]", dir: in, role: IndexedArray-index} - {name: length, type: "int64_t", dir: in, role: default} - - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsets, type: "Const[List[int32_t]]", dir: in, role: ListOffsetArray-offsets} - {name: offsetslength, type: "int64_t", dir: in, role: default} - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} - {name: stable, type: "bool", dir: in, role: ListArray-replacement} - - name: awkward_argsort_uint32 + - name: awkward_argsort_uint16_uint32 args: - {name: toptr, type: "List[int64_t]", dir: out} - - {name: fromptr, type: "Const[List[uint32_t]]", dir: in, role: IndexedArray-index} + - {name: fromptr, type: "Const[List[uint16_t]]", dir: in, role: IndexedArray-index} - {name: length, type: "int64_t", dir: in, role: default} - - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsets, type: "Const[List[uint32_t]]", dir: in, role: ListOffsetArray-offsets} - {name: offsetslength, type: "int64_t", dir: in, role: default} - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} - {name: stable, type: "bool", dir: in, role: ListArray-replacement} - - name: awkward_argsort_uint64 + - name: awkward_argsort_uint16_uint64 args: - {name: toptr, type: "List[int64_t]", dir: out} - - {name: fromptr, type: "Const[List[uint64_t]]", dir: in, role: IndexedArray-index} + - {name: fromptr, type: "Const[List[uint16_t]]", dir: in, role: IndexedArray-index} - {name: length, type: "int64_t", dir: in, role: default} - - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsets, type: "Const[List[uint64_t]]", dir: in, role: ListOffsetArray-offsets} - {name: offsetslength, type: "int64_t", dir: in, role: default} - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} - {name: stable, type: "bool", dir: in, role: ListArray-replacement} - - name: awkward_argsort_float32 + - name: awkward_argsort_uint16_int64 args: - {name: toptr, type: "List[int64_t]", dir: out} - - {name: fromptr, type: "Const[List[float]]", dir: in, role: IndexedArray-index} + - {name: fromptr, type: "Const[List[uint16_t]]", dir: in, role: IndexedArray-index} - {name: length, type: "int64_t", dir: in, role: default} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: ListOffsetArray-offsets} - {name: offsetslength, type: "int64_t", dir: in, role: default} - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} - {name: stable, type: "bool", dir: in, role: ListArray-replacement} - - name: awkward_argsort_float64 + - name: awkward_argsort_uint32_int32 args: - {name: toptr, type: "List[int64_t]", dir: out} - - {name: fromptr, type: "Const[List[double]]", dir: in, role: IndexedArray-index} + - {name: fromptr, type: "Const[List[uint32_t]]", dir: in, role: IndexedArray-index} - {name: length, type: "int64_t", dir: in, role: default} - - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsets, type: "Const[List[int32_t]]", dir: in, role: ListOffsetArray-offsets} - {name: offsetslength, type: "int64_t", dir: in, role: default} - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} - {name: stable, type: "bool", dir: in, role: ListArray-replacement} - description: null - definition: | - def awkward_argsort( + - name: awkward_argsort_uint32_uint32 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[uint32_t]]", dir: in, role: IndexedArray-index} + - {name: length, type: "int64_t", dir: in, role: default} + - {name: offsets, type: "Const[List[uint32_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsetslength, type: "int64_t", dir: in, role: default} + - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} + - {name: stable, type: "bool", dir: in, role: ListArray-replacement} + - name: awkward_argsort_uint32_uint64 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[uint32_t]]", dir: in, role: IndexedArray-index} + - {name: length, type: "int64_t", dir: in, role: default} + - {name: offsets, type: "Const[List[uint64_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsetslength, type: "int64_t", dir: in, role: default} + - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} + - {name: stable, type: "bool", dir: in, role: ListArray-replacement} + - name: awkward_argsort_uint32_int64 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[uint32_t]]", dir: in, role: IndexedArray-index} + - {name: length, type: "int64_t", dir: in, role: default} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsetslength, type: "int64_t", dir: in, role: default} + - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} + - {name: stable, type: "bool", dir: in, role: ListArray-replacement} + - name: awkward_argsort_uint64_int32 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[uint64_t]]", dir: in, role: IndexedArray-index} + - {name: length, type: "int64_t", dir: in, role: default} + - {name: offsets, type: "Const[List[int32_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsetslength, type: "int64_t", dir: in, role: default} + - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} + - {name: stable, type: "bool", dir: in, role: ListArray-replacement} + - name: awkward_argsort_uint64_uint32 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[uint64_t]]", dir: in, role: IndexedArray-index} + - {name: length, type: "int64_t", dir: in, role: default} + - {name: offsets, type: "Const[List[uint32_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsetslength, type: "int64_t", dir: in, role: default} + - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} + - {name: stable, type: "bool", dir: in, role: ListArray-replacement} + - name: awkward_argsort_uint64_uint64 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[uint64_t]]", dir: in, role: IndexedArray-index} + - {name: length, type: "int64_t", dir: in, role: default} + - {name: offsets, type: "Const[List[uint64_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsetslength, type: "int64_t", dir: in, role: default} + - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} + - {name: stable, type: "bool", dir: in, role: ListArray-replacement} + - name: awkward_argsort_uint64_int64 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[uint64_t]]", dir: in, role: IndexedArray-index} + - {name: length, type: "int64_t", dir: in, role: default} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsetslength, type: "int64_t", dir: in, role: default} + - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} + - {name: stable, type: "bool", dir: in, role: ListArray-replacement} + - name: awkward_argsort_float32_int32 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[float]]", dir: in, role: IndexedArray-index} + - {name: length, type: "int64_t", dir: in, role: default} + - {name: offsets, type: "Const[List[int32_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsetslength, type: "int64_t", dir: in, role: default} + - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} + - {name: stable, type: "bool", dir: in, role: ListArray-replacement} + - name: awkward_argsort_float32_uint32 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[float]]", dir: in, role: IndexedArray-index} + - {name: length, type: "int64_t", dir: in, role: default} + - {name: offsets, type: "Const[List[uint32_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsetslength, type: "int64_t", dir: in, role: default} + - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} + - {name: stable, type: "bool", dir: in, role: ListArray-replacement} + - name: awkward_argsort_float32_uint64 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[float]]", dir: in, role: IndexedArray-index} + - {name: length, type: "int64_t", dir: in, role: default} + - {name: offsets, type: "Const[List[uint64_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsetslength, type: "int64_t", dir: in, role: default} + - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} + - {name: stable, type: "bool", dir: in, role: ListArray-replacement} + - name: awkward_argsort_float32_int64 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[float]]", dir: in, role: IndexedArray-index} + - {name: length, type: "int64_t", dir: in, role: default} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsetslength, type: "int64_t", dir: in, role: default} + - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} + - {name: stable, type: "bool", dir: in, role: ListArray-replacement} + - name: awkward_argsort_float64_int32 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[double]]", dir: in, role: IndexedArray-index} + - {name: length, type: "int64_t", dir: in, role: default} + - {name: offsets, type: "Const[List[int32_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsetslength, type: "int64_t", dir: in, role: default} + - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} + - {name: stable, type: "bool", dir: in, role: ListArray-replacement} + - name: awkward_argsort_float64_uint32 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[double]]", dir: in, role: IndexedArray-index} + - {name: length, type: "int64_t", dir: in, role: default} + - {name: offsets, type: "Const[List[uint32_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsetslength, type: "int64_t", dir: in, role: default} + - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} + - {name: stable, type: "bool", dir: in, role: ListArray-replacement} + - name: awkward_argsort_float64_uint64 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[double]]", dir: in, role: IndexedArray-index} + - {name: length, type: "int64_t", dir: in, role: default} + - {name: offsets, type: "Const[List[uint64_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsetslength, type: "int64_t", dir: in, role: default} + - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} + - {name: stable, type: "bool", dir: in, role: ListArray-replacement} + - name: awkward_argsort_float64_int64 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[double]]", dir: in, role: IndexedArray-index} + - {name: length, type: "int64_t", dir: in, role: default} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: ListOffsetArray-offsets} + - {name: offsetslength, type: "int64_t", dir: in, role: default} + - {name: ascending, type: "bool", dir: in, role: ListArray-replacement} + - {name: stable, type: "bool", dir: in, role: ListArray-replacement} + description: null + definition: | + def awkward_argsort( toptr, fromptr, length, offsets, offsetslength, ascending, stable ): result = [] @@ -4001,6 +4285,27 @@ kernels: num_non_null += 1 automatic-tests: false + - name: awkward_Index_parents_to_offsets + specializations: + - name: awkward_Index_parents_to_offsets_64 + args: + - {name: tooffsets, type: "List[int64_t]", dir: out} + - {name: fromparents, type: "Const[List[int64_t]]", dir: in} + - {name: lenparents, type: "int64_t", dir: in, role: default} + - {name: outlength, type: "int64_t", dir: in, role: default} + description: null + definition: | + def awkward_Index_parents_to_offsets(tooffsets, fromparents, lenparents, outlength): + for i in range(outlength): + tooffsets[i] = 0 + for i in range(lenparents): + p = fromparents[i] + if p < outlength: + tooffsets[p+1] = tooffsets[p+1] + 1 + for i in range(1, outlength + 1): + tooffsets[i] = tooffsets[i] + tooffsets[i-1] + automatic-tests: false + - name: awkward_localindex specializations: - name: awkward_localindex_64 @@ -4038,1301 +4343,1083 @@ kernels: args: - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromptr, type: "Const[List[int8_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: starts, type: "Const[List[int64_t]]", dir: in, role: reducer-starts} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_argmax_int16_64 + - name: awkward_reduce_argmax_uint8_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - - {name: fromptr, type: "Const[List[int16_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: fromptr, type: "Const[List[uint8_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: starts, type: "Const[List[int64_t]]", dir: in, role: reducer-starts} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_argmax_int32_64 + - name: awkward_reduce_argmax_int16_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - - {name: fromptr, type: "Const[List[int32_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: fromptr, type: "Const[List[int16_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: starts, type: "Const[List[int64_t]]", dir: in, role: reducer-starts} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_argmax_int64_64 + - name: awkward_reduce_argmax_uint16_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - - {name: fromptr, type: "Const[List[int64_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: fromptr, type: "Const[List[uint16_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: starts, type: "Const[List[int64_t]]", dir: in, role: reducer-starts} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_argmax_uint8_64 + - name: awkward_reduce_argmax_int32_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - - {name: fromptr, type: "Const[List[uint8_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: fromptr, type: "Const[List[int32_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: starts, type: "Const[List[int64_t]]", dir: in, role: reducer-starts} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_argmax_uint16_64 + - name: awkward_reduce_argmax_uint32_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - - {name: fromptr, type: "Const[List[uint16_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: fromptr, type: "Const[List[uint32_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: starts, type: "Const[List[int64_t]]", dir: in, role: reducer-starts} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_argmax_uint32_64 + - name: awkward_reduce_argmax_int64_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - - {name: fromptr, type: "Const[List[uint32_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: fromptr, type: "Const[List[int64_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: starts, type: "Const[List[int64_t]]", dir: in, role: reducer-starts} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - name: awkward_reduce_argmax_uint64_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromptr, type: "Const[List[uint64_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: starts, type: "Const[List[int64_t]]", dir: in, role: reducer-starts} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - name: awkward_reduce_argmax_float32_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromptr, type: "Const[List[float]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: starts, type: "Const[List[int64_t]]", dir: in, role: reducer-starts} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - name: awkward_reduce_argmax_float64_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromptr, type: "Const[List[double]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: starts, type: "Const[List[int64_t]]", dir: in, role: reducer-starts} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} description: null definition: | - def awkward_reduce_argmax(toptr, fromptr, parents, offsets, lenparents, starts, outlength): - for k in range(outlength): - toptr[k] = -1 - for i in range(lenparents): - parent = parents[i] - if (toptr[parent] == -1) or (fromptr[i] > fromptr[toptr[parent]]): - toptr[parent] = i + def awkward_reduce_argmax(toptr, fromptr, offsets, starts, outlength): + for bin in range(outlength): + best = -1 + for i in range(offsets[bin], offsets[bin + 1]): + if best == -1 or fromptr[i] > fromptr[best]: + best = i + toptr[bin] = best automatic-tests: true - - name: awkward_reduce_argmax_complex specializations: - name: awkward_reduce_argmax_complex64_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromptr, type: "Const[List[float]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - name: awkward_reduce_argmax_complex128_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromptr, type: "Const[List[double]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} description: null definition: | - def awkward_reduce_argmax_complex(toptr, fromptr, parents, offsets, lenparents, outlength): - for k in range(outlength): - toptr[k] = -1 - for i in range(lenparents): - parent = parents[i] - if (toptr[parent] == -1 or (fromptr[i * 2] > fromptr[toptr[parent] * 2] or - (fromptr[i * 2] == fromptr[toptr[parent] * 2] and - fromptr[i * 2 + 1] > fromptr[toptr[parent] * 2 + 1]))): - toptr[parent] = i - automatic-tests: false - + def awkward_reduce_argmax_complex(toptr, fromptr, offsets, outlength): + for bin in range(outlength): + best = -1 + for i in range(offsets[bin], offsets[bin + 1]): + if best == -1: + best = i + else: + x = fromptr[i * 2]; y = fromptr[i * 2 + 1] + bx = fromptr[best * 2]; by = fromptr[best * 2 + 1] + if x > bx or (x == bx and y > by): + best = i + toptr[bin] = best + automatic-tests: true - name: awkward_reduce_argmin specializations: - name: awkward_reduce_argmin_int8_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromptr, type: "Const[List[int8_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: starts, type: "Const[List[int64_t]]", dir: in, role: reducer-starts} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_argmin_int16_64 + - name: awkward_reduce_argmin_uint8_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - - {name: fromptr, type: "Const[List[int16_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: fromptr, type: "Const[List[uint8_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: starts, type: "Const[List[int64_t]]", dir: in, role: reducer-starts} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_argmin_int32_64 + - name: awkward_reduce_argmin_int16_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - - {name: fromptr, type: "Const[List[int32_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: fromptr, type: "Const[List[int16_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: starts, type: "Const[List[int64_t]]", dir: in, role: reducer-starts} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_argmin_int64_64 + - name: awkward_reduce_argmin_uint16_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - - {name: fromptr, type: "Const[List[int64_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: fromptr, type: "Const[List[uint16_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: starts, type: "Const[List[int64_t]]", dir: in, role: reducer-starts} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_argmin_uint8_64 + - name: awkward_reduce_argmin_int32_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - - {name: fromptr, type: "Const[List[uint8_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: fromptr, type: "Const[List[int32_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: starts, type: "Const[List[int64_t]]", dir: in, role: reducer-starts} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_argmin_uint16_64 + - name: awkward_reduce_argmin_uint32_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - - {name: fromptr, type: "Const[List[uint16_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: fromptr, type: "Const[List[uint32_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: starts, type: "Const[List[int64_t]]", dir: in, role: reducer-starts} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_argmin_uint32_64 + - name: awkward_reduce_argmin_int64_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - - {name: fromptr, type: "Const[List[uint32_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: fromptr, type: "Const[List[int64_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: starts, type: "Const[List[int64_t]]", dir: in, role: reducer-starts} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - name: awkward_reduce_argmin_uint64_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromptr, type: "Const[List[uint64_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: starts, type: "Const[List[int64_t]]", dir: in, role: reducer-starts} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - name: awkward_reduce_argmin_float32_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromptr, type: "Const[List[float]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: starts, type: "Const[List[int64_t]]", dir: in, role: reducer-starts} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - name: awkward_reduce_argmin_float64_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromptr, type: "Const[List[double]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: starts, type: "Const[List[int64_t]]", dir: in, role: reducer-starts} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} description: null definition: | - def awkward_reduce_argmin(toptr, fromptr, parents, offsets, lenparents, starts, outlength): - for k in range(outlength): - toptr[k] = -1 - for i in range(lenparents): - parent = parents[i] - if (toptr[parent] == -1) or (fromptr[i] < fromptr[toptr[parent]]): - toptr[parent] = i + def awkward_reduce_argmin(toptr, fromptr, offsets, starts, outlength): + for bin in range(outlength): + best = -1 + for i in range(offsets[bin], offsets[bin + 1]): + if best == -1 or fromptr[i] < fromptr[best]: + best = i + toptr[bin] = best automatic-tests: true - - name: awkward_reduce_argmin_complex specializations: - name: awkward_reduce_argmin_complex64_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromptr, type: "Const[List[float]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - name: awkward_reduce_argmin_complex128_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromptr, type: "Const[List[double]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} description: null definition: | - def awkward_reduce_argmin_complex(toptr, fromptr, parents, offsets, lenparents, outlength): - for k in range(outlength): - toptr[k] = -1 - for i in range(lenparents): - parent = parents[i] - if (toptr[parent] == -1 or (fromptr[i * 2] < fromptr[toptr[parent] * 2] or - (fromptr[i * 2] == fromptr[toptr[parent] * 2] and - fromptr[i * 2 + 1] < fromptr[toptr[parent] * 2 + 1]))): - toptr[parent] = i - automatic-tests: false - + def awkward_reduce_argmin_complex(toptr, fromptr, offsets, outlength): + for bin in range(outlength): + best = -1 + for i in range(offsets[bin], offsets[bin + 1]): + if best == -1: + best = i + else: + x = fromptr[i * 2]; y = fromptr[i * 2 + 1] + bx = fromptr[best * 2]; by = fromptr[best * 2 + 1] + if x < bx or (x == bx and y < by): + best = i + toptr[bin] = best + automatic-tests: true - name: awkward_reduce_count_64 specializations: - name: awkward_reduce_count_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} description: null definition: | - def awkward_reduce_count_64(toptr, parents, lenparents, outlength): - for i in range(outlength): - toptr[i] = 0 - for i in range(lenparents): - toptr[parents[i]] = toptr[parents[i]] + 1 + def awkward_reduce_count_64(toptr, offsets, outlength): + for bin in range(outlength): + toptr[bin] = offsets[bin + 1] - offsets[bin] automatic-tests: true - - name: awkward_reduce_countnonzero specializations: - name: awkward_reduce_countnonzero_bool_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromptr, type: "Const[List[bool]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - name: awkward_reduce_countnonzero_int8_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromptr, type: "Const[List[int8_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_countnonzero_int16_64 + - name: awkward_reduce_countnonzero_uint8_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - - {name: fromptr, type: "Const[List[int16_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} + - {name: fromptr, type: "Const[List[uint8_t]]", dir: in, role: reducer-fromptr} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_countnonzero_int32_64 + - name: awkward_reduce_countnonzero_int16_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - - {name: fromptr, type: "Const[List[int32_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} + - {name: fromptr, type: "Const[List[int16_t]]", dir: in, role: reducer-fromptr} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_countnonzero_int64_64 + - name: awkward_reduce_countnonzero_uint16_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - - {name: fromptr, type: "Const[List[int64_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} + - {name: fromptr, type: "Const[List[uint16_t]]", dir: in, role: reducer-fromptr} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_countnonzero_uint8_64 + - name: awkward_reduce_countnonzero_int32_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - - {name: fromptr, type: "Const[List[uint8_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} + - {name: fromptr, type: "Const[List[int32_t]]", dir: in, role: reducer-fromptr} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_countnonzero_uint16_64 + - name: awkward_reduce_countnonzero_uint32_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - - {name: fromptr, type: "Const[List[uint16_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} + - {name: fromptr, type: "Const[List[uint32_t]]", dir: in, role: reducer-fromptr} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_countnonzero_uint32_64 + - name: awkward_reduce_countnonzero_int64_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - - {name: fromptr, type: "Const[List[uint32_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} + - {name: fromptr, type: "Const[List[int64_t]]", dir: in, role: reducer-fromptr} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - name: awkward_reduce_countnonzero_uint64_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromptr, type: "Const[List[uint64_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - name: awkward_reduce_countnonzero_float32_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromptr, type: "Const[List[float]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - name: awkward_reduce_countnonzero_float64_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromptr, type: "Const[List[double]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} description: null definition: | - def awkward_reduce_countnonzero(toptr, fromptr, parents, lenparents, outlength): - for i in range(outlength): - toptr[i] = 0 - for i in range(lenparents): - toptr[parents[i]] += fromptr[i] != 0 + def awkward_reduce_countnonzero(toptr, fromptr, offsets, outlength): + for bin in range(outlength): + c = 0 + for i in range(offsets[bin], offsets[bin + 1]): + if fromptr[i] != 0: + c += 1 + toptr[bin] = c automatic-tests: true - - name: awkward_reduce_countnonzero_complex specializations: - name: awkward_reduce_countnonzero_complex64_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromptr, type: "Const[List[float]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - name: awkward_reduce_countnonzero_complex128_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromptr, type: "Const[List[double]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} description: null definition: | - def awkward_reduce_countnonzero_complex(toptr, fromptr, parents, lenparents, outlength): - for i in range(outlength): - toptr[i] = 0 - for i in range(lenparents): - toptr[parents[i]] += fromptr[i * 2] != 0 or fromptr[i * 2 + 1] != 0 - automatic-tests: false - + def awkward_reduce_countnonzero_complex(toptr, fromptr, offsets, outlength): + for bin in range(outlength): + c = 0 + for i in range(offsets[bin], offsets[bin + 1]): + if fromptr[i * 2] != 0 or fromptr[i * 2 + 1] != 0: + c += 1 + toptr[bin] = c + automatic-tests: true - name: awkward_reduce_max specializations: - name: awkward_reduce_max_int8_int8_64 args: - {name: toptr, type: "List[int8_t]", dir: out} - {name: fromptr, type: "Const[List[int8_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - {name: identity, type: "int8_t", dir: in, role: reducer-identity} - - name: awkward_reduce_max_int16_int16_64 - args: - - {name: toptr, type: "List[int16_t]", dir: out} - - {name: fromptr, type: "Const[List[int16_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - {name: identity, type: "int16_t", dir: in, role: reducer-identity} - - name: awkward_reduce_max_int32_int32_64 - args: - - {name: toptr, type: "List[int32_t]", dir: out} - - {name: fromptr, type: "Const[List[int32_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - {name: identity, type: "int32_t", dir: in, role: reducer-identity} - - name: awkward_reduce_max_int64_int64_64 - args: - - {name: toptr, type: "List[int64_t]", dir: out} - - {name: fromptr, type: "Const[List[int64_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - {name: identity, type: "int64_t", dir: in, role: reducer-identity} - name: awkward_reduce_max_uint8_uint8_64 args: - {name: toptr, type: "List[uint8_t]", dir: out} - {name: fromptr, type: "Const[List[uint8_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - {name: identity, type: "uint8_t", dir: in, role: reducer-identity} + - name: awkward_reduce_max_int16_int16_64 + args: + - {name: toptr, type: "List[int16_t]", dir: out} + - {name: fromptr, type: "Const[List[int16_t]]", dir: in, role: reducer-fromptr} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} + - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} + - {name: identity, type: "int16_t", dir: in, role: reducer-identity} - name: awkward_reduce_max_uint16_uint16_64 args: - {name: toptr, type: "List[uint16_t]", dir: out} - {name: fromptr, type: "Const[List[uint16_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - {name: identity, type: "uint16_t", dir: in, role: reducer-identity} + - name: awkward_reduce_max_int32_int32_64 + args: + - {name: toptr, type: "List[int32_t]", dir: out} + - {name: fromptr, type: "Const[List[int32_t]]", dir: in, role: reducer-fromptr} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} + - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} + - {name: identity, type: "int32_t", dir: in, role: reducer-identity} - name: awkward_reduce_max_uint32_uint32_64 args: - {name: toptr, type: "List[uint32_t]", dir: out} - {name: fromptr, type: "Const[List[uint32_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - {name: identity, type: "uint32_t", dir: in, role: reducer-identity} + - name: awkward_reduce_max_int64_int64_64 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[int64_t]]", dir: in, role: reducer-fromptr} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} + - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} + - {name: identity, type: "int64_t", dir: in, role: reducer-identity} - name: awkward_reduce_max_uint64_uint64_64 args: - {name: toptr, type: "List[uint64_t]", dir: out} - {name: fromptr, type: "Const[List[uint64_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - {name: identity, type: "uint64_t", dir: in, role: reducer-identity} - name: awkward_reduce_max_float32_float32_64 args: - {name: toptr, type: "List[float]", dir: out} - {name: fromptr, type: "Const[List[float]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - {name: identity, type: "float", dir: in, role: reducer-identity} - name: awkward_reduce_max_float64_float64_64 args: - {name: toptr, type: "List[double]", dir: out} - {name: fromptr, type: "Const[List[double]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - {name: identity, type: "double", dir: in, role: reducer-identity} description: null definition: | - def awkward_reduce_max(toptr, fromptr, parents, offsets, lenparents, outlength, identity): - for i in range(outlength): - toptr[i] = identity - for i in range(lenparents): - x = fromptr[i] - toptr[parents[i]] = x if x > toptr[parents[i]] else toptr[parents[i]] + def awkward_reduce_max(toptr, fromptr, offsets, outlength, identity): + for bin in range(outlength): + best = identity + for i in range(offsets[bin], offsets[bin + 1]): + x = fromptr[i] + if x > best: + best = x + toptr[bin] = best automatic-tests: true - - name: awkward_reduce_max_complex specializations: - name: awkward_reduce_max_complex64_complex64_64 args: - {name: toptr, type: "List[float]", dir: out} - {name: fromptr, type: "Const[List[float]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - {name: identity, type: "float", dir: in, role: reducer-identity} - name: awkward_reduce_max_complex128_complex128_64 args: - {name: toptr, type: "List[double]", dir: out} - {name: fromptr, type: "Const[List[double]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - {name: identity, type: "double", dir: in, role: reducer-identity} description: null definition: | - def awkward_reduce_max_complex(toptr, fromptr, parents, offsets, lenparents, outlength, identity): - for i in range(outlength): - toptr[i * 2] = identity - toptr[i * 2 + 1] = 0 - for i in range(lenparents): - x = fromptr[i * 2] - y = fromptr[i * 2 + 1] - parent = parents[i] - if x > toptr[parent * 2] or (x == toptr[parent * 2] and y > toptr[parent * 2 + 1]): - toptr[parent * 2] = x - toptr[parent * 2 + 1] = y - automatic-tests: false - + def awkward_reduce_max_complex(toptr, fromptr, offsets, outlength, identity): + for bin in range(outlength): + best_re = identity + best_im = 0 + seen = False + for i in range(offsets[bin], offsets[bin + 1]): + x = fromptr[i * 2] + y = fromptr[i * 2 + 1] + if not seen or x > best_re or (x == best_re and y > best_im): + best_re = x + best_im = y + seen = True + toptr[bin * 2] = best_re + toptr[bin * 2 + 1] = best_im + automatic-tests: true - name: awkward_reduce_min specializations: - name: awkward_reduce_min_int8_int8_64 args: - {name: toptr, type: "List[int8_t]", dir: out} - {name: fromptr, type: "Const[List[int8_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - {name: identity, type: "int8_t", dir: in, role: reducer-identity} - - name: awkward_reduce_min_int16_int16_64 - args: - - {name: toptr, type: "List[int16_t]", dir: out} - - {name: fromptr, type: "Const[List[int16_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - {name: identity, type: "int16_t", dir: in, role: reducer-identity} - - name: awkward_reduce_min_int32_int32_64 - args: - - {name: toptr, type: "List[int32_t]", dir: out} - - {name: fromptr, type: "Const[List[int32_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - {name: identity, type: "int32_t", dir: in, role: reducer-identity} - - name: awkward_reduce_min_int64_int64_64 - args: - - {name: toptr, type: "List[int64_t]", dir: out} - - {name: fromptr, type: "Const[List[int64_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - {name: identity, type: "int64_t", dir: in, role: reducer-identity} - name: awkward_reduce_min_uint8_uint8_64 args: - {name: toptr, type: "List[uint8_t]", dir: out} - {name: fromptr, type: "Const[List[uint8_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - {name: identity, type: "uint8_t", dir: in, role: reducer-identity} + - name: awkward_reduce_min_int16_int16_64 + args: + - {name: toptr, type: "List[int16_t]", dir: out} + - {name: fromptr, type: "Const[List[int16_t]]", dir: in, role: reducer-fromptr} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} + - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} + - {name: identity, type: "int16_t", dir: in, role: reducer-identity} - name: awkward_reduce_min_uint16_uint16_64 args: - {name: toptr, type: "List[uint16_t]", dir: out} - {name: fromptr, type: "Const[List[uint16_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - {name: identity, type: "uint16_t", dir: in, role: reducer-identity} + - name: awkward_reduce_min_int32_int32_64 + args: + - {name: toptr, type: "List[int32_t]", dir: out} + - {name: fromptr, type: "Const[List[int32_t]]", dir: in, role: reducer-fromptr} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} + - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} + - {name: identity, type: "int32_t", dir: in, role: reducer-identity} - name: awkward_reduce_min_uint32_uint32_64 args: - {name: toptr, type: "List[uint32_t]", dir: out} - {name: fromptr, type: "Const[List[uint32_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - {name: identity, type: "uint32_t", dir: in, role: reducer-identity} + - name: awkward_reduce_min_int64_int64_64 + args: + - {name: toptr, type: "List[int64_t]", dir: out} + - {name: fromptr, type: "Const[List[int64_t]]", dir: in, role: reducer-fromptr} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} + - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} + - {name: identity, type: "int64_t", dir: in, role: reducer-identity} - name: awkward_reduce_min_uint64_uint64_64 args: - {name: toptr, type: "List[uint64_t]", dir: out} - {name: fromptr, type: "Const[List[uint64_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - {name: identity, type: "uint64_t", dir: in, role: reducer-identity} - name: awkward_reduce_min_float32_float32_64 args: - {name: toptr, type: "List[float]", dir: out} - {name: fromptr, type: "Const[List[float]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - {name: identity, type: "float", dir: in, role: reducer-identity} - name: awkward_reduce_min_float64_float64_64 args: - {name: toptr, type: "List[double]", dir: out} - {name: fromptr, type: "Const[List[double]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - {name: identity, type: "double", dir: in, role: reducer-identity} description: null definition: | - def awkward_reduce_min(toptr, fromptr, parents, offsets, lenparents, outlength, identity): - for i in range(outlength): - toptr[i] = identity - for i in range(lenparents): - x = fromptr[i] - toptr[parents[i]] = x if x < toptr[parents[i]] else toptr[parents[i]] + def awkward_reduce_min(toptr, fromptr, offsets, outlength, identity): + for bin in range(outlength): + best = identity + for i in range(offsets[bin], offsets[bin + 1]): + x = fromptr[i] + if x < best: + best = x + toptr[bin] = best automatic-tests: true - - name: awkward_reduce_min_complex specializations: - name: awkward_reduce_min_complex64_complex64_64 args: - {name: toptr, type: "List[float]", dir: out} - {name: fromptr, type: "Const[List[float]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - {name: identity, type: "float", dir: in, role: reducer-identity} - name: awkward_reduce_min_complex128_complex128_64 args: - {name: toptr, type: "List[double]", dir: out} - {name: fromptr, type: "Const[List[double]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - {name: identity, type: "double", dir: in, role: reducer-identity} description: null definition: | - def awkward_reduce_min_complex(toptr, fromptr, parents, offsets, lenparents, outlength, identity): - for i in range(outlength): - toptr[i * 2] = identity - toptr[i * 2 + 1] = 0 - for i in range(lenparents): - x = fromptr[i * 2] - y = fromptr[i * 2 + 1] - parent = parents[i] - if x < toptr[parent * 2] or (x == toptr[parent * 2] and y < toptr[parent * 2 + 1]): - toptr[parent * 2] = x - toptr[parent * 2 + 1] = y - automatic-tests: false - + def awkward_reduce_min_complex(toptr, fromptr, offsets, outlength, identity): + for bin in range(outlength): + best_re = identity + best_im = 0 + seen = False + for i in range(offsets[bin], offsets[bin + 1]): + x = fromptr[i * 2] + y = fromptr[i * 2 + 1] + if not seen or x < best_re or (x == best_re and y < best_im): + best_re = x + best_im = y + seen = True + toptr[bin * 2] = best_re + toptr[bin * 2 + 1] = best_im + automatic-tests: true - name: awkward_reduce_prod specializations: - - name: awkward_reduce_prod_int32_int8_64 + - name: awkward_reduce_prod_int64_int8_64 args: - - {name: toptr, type: "List[int32_t]", dir: out} + - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromptr, type: "Const[List[int8_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_prod_int32_int16_64 - args: - - {name: toptr, type: "List[int32_t]", dir: out} - - {name: fromptr, type: "Const[List[int16_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_prod_int32_int32_64 + - name: awkward_reduce_prod_uint64_uint8_64 args: - - {name: toptr, type: "List[int32_t]", dir: out} - - {name: fromptr, type: "Const[List[int32_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: toptr, type: "List[uint64_t]", dir: out} + - {name: fromptr, type: "Const[List[uint8_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_prod_int64_int8_64 + - name: awkward_reduce_prod_int64_int16_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - - {name: fromptr, type: "Const[List[int8_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: fromptr, type: "Const[List[int16_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_prod_int64_int16_64 + - name: awkward_reduce_prod_uint64_uint16_64 args: - - {name: toptr, type: "List[int64_t]", dir: out} - - {name: fromptr, type: "Const[List[int16_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: toptr, type: "List[uint64_t]", dir: out} + - {name: fromptr, type: "Const[List[uint16_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - name: awkward_reduce_prod_int64_int32_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromptr, type: "Const[List[int32_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} + - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} + - name: awkward_reduce_prod_uint64_uint32_64 + args: + - {name: toptr, type: "List[uint64_t]", dir: out} + - {name: fromptr, type: "Const[List[uint32_t]]", dir: in, role: reducer-fromptr} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - name: awkward_reduce_prod_int64_int64_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromptr, type: "Const[List[int64_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_prod_uint32_uint8_64 + - name: awkward_reduce_prod_uint64_uint64_64 args: - - {name: toptr, type: "List[uint32_t]", dir: out} - - {name: fromptr, type: "Const[List[uint8_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: toptr, type: "List[uint64_t]", dir: out} + - {name: fromptr, type: "Const[List[uint64_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_prod_uint32_uint16_64 + - name: awkward_reduce_prod_float32_float32_64 args: - - {name: toptr, type: "List[uint32_t]", dir: out} - - {name: fromptr, type: "Const[List[uint16_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: toptr, type: "List[float]", dir: out} + - {name: fromptr, type: "Const[List[float]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_prod_uint32_uint32_64 + - name: awkward_reduce_prod_float64_float64_64 args: - - {name: toptr, type: "List[uint32_t]", dir: out} - - {name: fromptr, type: "Const[List[uint32_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: toptr, type: "List[double]", dir: out} + - {name: fromptr, type: "Const[List[double]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_prod_uint64_uint8_64 + - name: awkward_reduce_prod_int32_int8_64 args: - - {name: toptr, type: "List[uint64_t]", dir: out} - - {name: fromptr, type: "Const[List[uint8_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: toptr, type: "List[int32_t]", dir: out} + - {name: fromptr, type: "Const[List[int8_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_prod_uint64_uint16_64 + - name: awkward_reduce_prod_uint32_uint8_64 args: - - {name: toptr, type: "List[uint64_t]", dir: out} - - {name: fromptr, type: "Const[List[uint16_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: toptr, type: "List[uint32_t]", dir: out} + - {name: fromptr, type: "Const[List[uint8_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_prod_uint64_uint32_64 + - name: awkward_reduce_prod_int32_int16_64 args: - - {name: toptr, type: "List[uint64_t]", dir: out} - - {name: fromptr, type: "Const[List[uint32_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: toptr, type: "List[int32_t]", dir: out} + - {name: fromptr, type: "Const[List[int16_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_prod_uint64_uint64_64 + - name: awkward_reduce_prod_uint32_uint16_64 args: - - {name: toptr, type: "List[uint64_t]", dir: out} - - {name: fromptr, type: "Const[List[uint64_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: toptr, type: "List[uint32_t]", dir: out} + - {name: fromptr, type: "Const[List[uint16_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_prod_float32_float32_64 + - name: awkward_reduce_prod_int32_int32_64 args: - - {name: toptr, type: "List[float]", dir: out} - - {name: fromptr, type: "Const[List[float]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: toptr, type: "List[int32_t]", dir: out} + - {name: fromptr, type: "Const[List[int32_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_prod_float64_float64_64 + - name: awkward_reduce_prod_uint32_uint32_64 args: - - {name: toptr, type: "List[double]", dir: out} - - {name: fromptr, type: "Const[List[double]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: toptr, type: "List[uint32_t]", dir: out} + - {name: fromptr, type: "Const[List[uint32_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} description: null definition: | - def awkward_reduce_prod(toptr, fromptr, parents, offsets, lenparents, outlength): - for i in range(outlength): - toptr[i] = 1 - for i in range(lenparents): - toptr[parents[i]] *= fromptr[i] + def awkward_reduce_prod(toptr, fromptr, offsets, outlength): + for bin in range(outlength): + acc = 1 + for i in range(offsets[bin], offsets[bin + 1]): + acc *= fromptr[i] + toptr[bin] = acc automatic-tests: true - - name: awkward_reduce_prod_complex specializations: - name: awkward_reduce_prod_complex64_complex64_64 args: - {name: toptr, type: "List[float]", dir: out} - {name: fromptr, type: "Const[List[float]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - name: awkward_reduce_prod_complex128_complex128_64 args: - {name: toptr, type: "List[double]", dir: out} - {name: fromptr, type: "Const[List[double]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} description: null definition: | - def awkward_reduce_prod_complex(toptr, fromptr, parents, offsets, lenparents, outlength): - for i in range(outlength): - toptr[i * 2] = 1 - toptr[i * 2 + 1] = 0 - for i in range(lenparents): - parent = parents[i] - real = toptr[parent * 2] * fromptr[i * 2] - toptr[parent * 2 + 1] * fromptr[i * 2 + 1] - imag = toptr[parent * 2] * fromptr[i * 2 + 1] + toptr[parent * 2 + 1] * fromptr[i * 2] - toptr[parents[i] * 2] = real - toptr[parents[i] * 2 + 1] = imag - automatic-tests: false - + def awkward_reduce_prod_complex(toptr, fromptr, offsets, outlength): + for bin in range(outlength): + a = 1 + b = 0 + for i in range(offsets[bin], offsets[bin + 1]): + c = fromptr[i * 2] + d = fromptr[i * 2 + 1] + na = a * c - b * d + nb = a * d + b * c + a = na + b = nb + toptr[bin * 2] = a + toptr[bin * 2 + 1] = b + automatic-tests: true - name: awkward_reduce_prod_bool specializations: - name: awkward_reduce_prod_bool_bool_64 args: - {name: toptr, type: "List[bool]", dir: out} - {name: fromptr, type: "Const[List[bool]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - name: awkward_reduce_prod_bool_int8_64 args: - {name: toptr, type: "List[bool]", dir: out} - {name: fromptr, type: "Const[List[int8_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_prod_bool_int16_64 + - name: awkward_reduce_prod_bool_uint8_64 args: - {name: toptr, type: "List[bool]", dir: out} - - {name: fromptr, type: "Const[List[int16_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: fromptr, type: "Const[List[uint8_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_prod_bool_int32_64 + - name: awkward_reduce_prod_bool_int16_64 args: - {name: toptr, type: "List[bool]", dir: out} - - {name: fromptr, type: "Const[List[int32_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: fromptr, type: "Const[List[int16_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_prod_bool_int64_64 + - name: awkward_reduce_prod_bool_uint16_64 args: - {name: toptr, type: "List[bool]", dir: out} - - {name: fromptr, type: "Const[List[int64_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: fromptr, type: "Const[List[uint16_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_prod_bool_uint8_64 + - name: awkward_reduce_prod_bool_int32_64 args: - {name: toptr, type: "List[bool]", dir: out} - - {name: fromptr, type: "Const[List[uint8_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: fromptr, type: "Const[List[int32_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_prod_bool_uint16_64 + - name: awkward_reduce_prod_bool_uint32_64 args: - {name: toptr, type: "List[bool]", dir: out} - - {name: fromptr, type: "Const[List[uint16_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: fromptr, type: "Const[List[uint32_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_prod_bool_uint32_64 + - name: awkward_reduce_prod_bool_int64_64 args: - {name: toptr, type: "List[bool]", dir: out} - - {name: fromptr, type: "Const[List[uint32_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: fromptr, type: "Const[List[int64_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - name: awkward_reduce_prod_bool_uint64_64 args: - {name: toptr, type: "List[bool]", dir: out} - {name: fromptr, type: "Const[List[uint64_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - name: awkward_reduce_prod_bool_float32_64 args: - {name: toptr, type: "List[bool]", dir: out} - {name: fromptr, type: "Const[List[float]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - name: awkward_reduce_prod_bool_float64_64 args: - {name: toptr, type: "List[bool]", dir: out} - {name: fromptr, type: "Const[List[double]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} description: null definition: | - def awkward_reduce_prod_bool(toptr, fromptr, parents, offsets, lenparents, outlength): - for i in range(outlength): - toptr[i] = True - for i in range(lenparents): - toptr[parents[i]] &= fromptr[i] != 0 + def awkward_reduce_prod_bool(toptr, fromptr, offsets, outlength): + for bin in range(outlength): + all_nz = True + for i in range(offsets[bin], offsets[bin + 1]): + if fromptr[i] == 0: + all_nz = False + break + toptr[bin] = all_nz automatic-tests: true - - name: awkward_reduce_prod_bool_complex specializations: - name: awkward_reduce_prod_bool_complex64_64 args: - {name: toptr, type: "List[bool]", dir: out} - {name: fromptr, type: "Const[List[float]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - name: awkward_reduce_prod_bool_complex128_64 args: - {name: toptr, type: "List[bool]", dir: out} - {name: fromptr, type: "Const[List[double]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} description: null definition: | - def awkward_reduce_prod_bool_complex(toptr, fromptr, parents, offsets, lenparents, outlength): - for i in range(outlength): - toptr[i] = 1 - for i in range(lenparents): - toptr[parents[i]] = fromptr[i * 2] != 0 or fromptr[i * 2 + 1] != 0 - automatic-tests: false - + def awkward_reduce_prod_bool_complex(toptr, fromptr, offsets, outlength): + for bin in range(outlength): + all_nz = True + for i in range(offsets[bin], offsets[bin + 1]): + if fromptr[i * 2] == 0 and fromptr[i * 2 + 1] == 0: + all_nz = False + break + toptr[bin] = all_nz + automatic-tests: true - name: awkward_reduce_sum specializations: - - name: awkward_reduce_sum_int32_int8_64 + - name: awkward_reduce_sum_int64_int8_64 args: - - {name: toptr, type: "List[int32_t]", dir: out} + - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromptr, type: "Const[List[int8_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_sum_int32_int16_64 - args: - - {name: toptr, type: "List[int32_t]", dir: out} - - {name: fromptr, type: "Const[List[int16_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_sum_int32_int32_64 + - name: awkward_reduce_sum_uint64_uint8_64 args: - - {name: toptr, type: "List[int32_t]", dir: out} - - {name: fromptr, type: "Const[List[int32_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: toptr, type: "List[uint64_t]", dir: out} + - {name: fromptr, type: "Const[List[uint8_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_sum_int64_int8_64 + - name: awkward_reduce_sum_int64_int16_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - - {name: fromptr, type: "Const[List[int8_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: fromptr, type: "Const[List[int16_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_sum_int64_int16_64 + - name: awkward_reduce_sum_uint64_uint16_64 args: - - {name: toptr, type: "List[int64_t]", dir: out} - - {name: fromptr, type: "Const[List[int16_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: toptr, type: "List[uint64_t]", dir: out} + - {name: fromptr, type: "Const[List[uint16_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - name: awkward_reduce_sum_int64_int32_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromptr, type: "Const[List[int32_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} + - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} + - name: awkward_reduce_sum_uint64_uint32_64 + args: + - {name: toptr, type: "List[uint64_t]", dir: out} + - {name: fromptr, type: "Const[List[uint32_t]]", dir: in, role: reducer-fromptr} + - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - name: awkward_reduce_sum_int64_int64_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromptr, type: "Const[List[int64_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_sum_uint32_uint8_64 + - name: awkward_reduce_sum_uint64_uint64_64 args: - - {name: toptr, type: "List[uint32_t]", dir: out} - - {name: fromptr, type: "Const[List[uint8_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: toptr, type: "List[uint64_t]", dir: out} + - {name: fromptr, type: "Const[List[uint64_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_sum_uint32_uint16_64 + - name: awkward_reduce_sum_float32_float32_64 args: - - {name: toptr, type: "List[uint32_t]", dir: out} - - {name: fromptr, type: "Const[List[uint16_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: toptr, type: "List[float]", dir: out} + - {name: fromptr, type: "Const[List[float]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_sum_uint32_uint32_64 + - name: awkward_reduce_sum_float64_float64_64 args: - - {name: toptr, type: "List[uint32_t]", dir: out} - - {name: fromptr, type: "Const[List[uint32_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: toptr, type: "List[double]", dir: out} + - {name: fromptr, type: "Const[List[double]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_sum_uint64_uint8_64 + - name: awkward_reduce_sum_int32_int8_64 args: - - {name: toptr, type: "List[uint64_t]", dir: out} - - {name: fromptr, type: "Const[List[uint8_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: toptr, type: "List[int32_t]", dir: out} + - {name: fromptr, type: "Const[List[int8_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_sum_uint64_uint16_64 + - name: awkward_reduce_sum_uint32_uint8_64 args: - - {name: toptr, type: "List[uint64_t]", dir: out} - - {name: fromptr, type: "Const[List[uint16_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: toptr, type: "List[uint32_t]", dir: out} + - {name: fromptr, type: "Const[List[uint8_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_sum_uint64_uint32_64 + - name: awkward_reduce_sum_int32_int16_64 args: - - {name: toptr, type: "List[uint64_t]", dir: out} - - {name: fromptr, type: "Const[List[uint32_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: toptr, type: "List[int32_t]", dir: out} + - {name: fromptr, type: "Const[List[int16_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_sum_uint64_uint64_64 + - name: awkward_reduce_sum_uint32_uint16_64 args: - - {name: toptr, type: "List[uint64_t]", dir: out} - - {name: fromptr, type: "Const[List[uint64_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: toptr, type: "List[uint32_t]", dir: out} + - {name: fromptr, type: "Const[List[uint16_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_sum_float32_float32_64 + - name: awkward_reduce_sum_int32_int32_64 args: - - {name: toptr, type: "List[float]", dir: out} - - {name: fromptr, type: "Const[List[float]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: toptr, type: "List[int32_t]", dir: out} + - {name: fromptr, type: "Const[List[int32_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_sum_float64_float64_64 + - name: awkward_reduce_sum_uint32_uint32_64 args: - - {name: toptr, type: "List[double]", dir: out} - - {name: fromptr, type: "Const[List[double]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: toptr, type: "List[uint32_t]", dir: out} + - {name: fromptr, type: "Const[List[uint32_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} description: null definition: | - def awkward_reduce_sum(toptr, fromptr, parents, offsets, lenparents, outlength): - for i in range(outlength): - toptr[i] = 0 - for i in range(lenparents): - toptr[parents[i]] += fromptr[i] + def awkward_reduce_sum(toptr, fromptr, offsets, outlength): + for bin in range(outlength): + acc = 0 + for i in range(offsets[bin], offsets[bin + 1]): + acc += fromptr[i] + toptr[bin] = acc automatic-tests: true - - name: awkward_reduce_sum_complex specializations: - name: awkward_reduce_sum_complex64_complex64_64 args: - {name: toptr, type: "List[float]", dir: out} - {name: fromptr, type: "Const[List[float]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - name: awkward_reduce_sum_complex128_complex128_64 args: - {name: toptr, type: "List[double]", dir: out} - {name: fromptr, type: "Const[List[double]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} description: null definition: | - def awkward_reduce_sum_complex(toptr, fromptr, parents, offsets, lenparents, outlength): - for i in range(outlength): - toptr[i * 2] = 0 - toptr[i * 2 + 1] = 0 - for i in range(lenparents): - toptr[parents[i] * 2] += fromptr[i * 2] - toptr[parents[i] * 2 + 1] += fromptr[i * 2 + 1] - automatic-tests: false - + def awkward_reduce_sum_complex(toptr, fromptr, offsets, outlength): + for bin in range(outlength): + re = 0 + im = 0 + for i in range(offsets[bin], offsets[bin + 1]): + re += fromptr[i * 2] + im += fromptr[i * 2 + 1] + toptr[bin * 2] = re + toptr[bin * 2 + 1] = im + automatic-tests: true - name: awkward_reduce_sum_bool specializations: - name: awkward_reduce_sum_bool_bool_64 args: - {name: toptr, type: "List[bool]", dir: out} - {name: fromptr, type: "Const[List[bool]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - name: awkward_reduce_sum_bool_int8_64 args: - {name: toptr, type: "List[bool]", dir: out} - {name: fromptr, type: "Const[List[int8_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_sum_bool_int16_64 + - name: awkward_reduce_sum_bool_uint8_64 args: - {name: toptr, type: "List[bool]", dir: out} - - {name: fromptr, type: "Const[List[int16_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: fromptr, type: "Const[List[uint8_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_sum_bool_int32_64 + - name: awkward_reduce_sum_bool_int16_64 args: - {name: toptr, type: "List[bool]", dir: out} - - {name: fromptr, type: "Const[List[int32_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: fromptr, type: "Const[List[int16_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_sum_bool_int64_64 + - name: awkward_reduce_sum_bool_uint16_64 args: - {name: toptr, type: "List[bool]", dir: out} - - {name: fromptr, type: "Const[List[int64_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: fromptr, type: "Const[List[uint16_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_sum_bool_uint8_64 + - name: awkward_reduce_sum_bool_int32_64 args: - {name: toptr, type: "List[bool]", dir: out} - - {name: fromptr, type: "Const[List[uint8_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: fromptr, type: "Const[List[int32_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_sum_bool_uint16_64 + - name: awkward_reduce_sum_bool_uint32_64 args: - {name: toptr, type: "List[bool]", dir: out} - - {name: fromptr, type: "Const[List[uint16_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: fromptr, type: "Const[List[uint32_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - - name: awkward_reduce_sum_bool_uint32_64 + - name: awkward_reduce_sum_bool_int64_64 args: - {name: toptr, type: "List[bool]", dir: out} - - {name: fromptr, type: "Const[List[uint32_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} + - {name: fromptr, type: "Const[List[int64_t]]", dir: in, role: reducer-fromptr} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - name: awkward_reduce_sum_bool_uint64_64 args: - {name: toptr, type: "List[bool]", dir: out} - {name: fromptr, type: "Const[List[uint64_t]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - name: awkward_reduce_sum_bool_float32_64 args: - {name: toptr, type: "List[bool]", dir: out} - {name: fromptr, type: "Const[List[float]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - name: awkward_reduce_sum_bool_float64_64 args: - {name: toptr, type: "List[bool]", dir: out} - {name: fromptr, type: "Const[List[double]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} description: null definition: | - def awkward_reduce_sum_bool(toptr, fromptr, parents, offsets, lenparents, outlength): - for i in range(outlength): - toptr[i] = False - for i in range(lenparents): - toptr[parents[i]] |= fromptr[i] != 0 + def awkward_reduce_sum_bool(toptr, fromptr, offsets, outlength): + for bin in range(outlength): + found = False + for i in range(offsets[bin], offsets[bin + 1]): + if fromptr[i] != 0: + found = True + break + toptr[bin] = found automatic-tests: true - - name: awkward_reduce_sum_bool_complex specializations: - name: awkward_reduce_sum_bool_complex64_64 args: - {name: toptr, type: "List[bool]", dir: out} - {name: fromptr, type: "Const[List[float]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} - name: awkward_reduce_sum_bool_complex128_64 args: - {name: toptr, type: "List[bool]", dir: out} - {name: fromptr, type: "Const[List[double]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} description: null definition: | - def awkward_reduce_sum_bool_complex(toptr, fromptr, parents, offsets, lenparents, outlength): - for i in range(outlength): - toptr[i] = 0 - for i in range(lenparents): - toptr[parents[i]] |= fromptr[i * 2] != 0 or fromptr[i * 2 + 1] != 0 - automatic-tests: false - + def awkward_reduce_sum_bool_complex(toptr, fromptr, offsets, outlength): + for bin in range(outlength): + found = False + for i in range(offsets[bin], offsets[bin + 1]): + if fromptr[i * 2] != 0 or fromptr[i * 2 + 1] != 0: + found = True + break + toptr[bin] = found + automatic-tests: true - name: awkward_reduce_sum_int32_bool_64 specializations: - name: awkward_reduce_sum_int32_bool_64 args: - {name: toptr, type: "List[int32_t]", dir: out} - {name: fromptr, type: "Const[List[bool]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} description: null definition: | - def awkward_reduce_sum_int32_bool_64(toptr, fromptr, parents, offsets, lenparents, outlength): - for i in range(outlength): - toptr[i] = 0 - for i in range(lenparents): - toptr[parents[i]] += fromptr[i] != 0 + def awkward_reduce_sum_int32_bool_64(toptr, fromptr, offsets, outlength): + for bin in range(outlength): + acc = 0 + for i in range(offsets[bin], offsets[bin + 1]): + if fromptr[i]: + acc += 1 + toptr[bin] = acc automatic-tests: true - - name: awkward_reduce_sum_int64_bool_64 specializations: - name: awkward_reduce_sum_int64_bool_64 args: - {name: toptr, type: "List[int64_t]", dir: out} - {name: fromptr, type: "Const[List[bool]]", dir: in, role: reducer-fromptr} - - {name: parents, type: "Const[List[int64_t]]", dir: in, role: reducer-parents} - {name: offsets, type: "Const[List[int64_t]]", dir: in, role: reducer-offsets} - - {name: lenparents, type: "int64_t", dir: in, role: reducer-lenparents} - {name: outlength, type: "int64_t", dir: in, role: reducer-outlength} description: null definition: | - def awkward_reduce_sum_int64_bool_64(toptr, fromptr, parents, offsets, lenparents, outlength): - for i in range(outlength): - toptr[i] = 0 - for i in range(lenparents): - toptr[parents[i]] += fromptr[i] != 0 + def awkward_reduce_sum_int64_bool_64(toptr, fromptr, offsets, outlength): + for bin in range(outlength): + acc = 0 + for i in range(offsets[bin], offsets[bin + 1]): + if fromptr[i]: + acc += 1 + toptr[bin] = acc automatic-tests: true - - name: awkward_sort specializations: - name: awkward_sort_bool @@ -5619,7 +5706,7 @@ kernels: - {name: tolength, type: "int64_t", dir: in, role: default} - {name: parents, type: "Const[List[int64_t]]", dir: in, role: IndexedArray-index} - {name: parentslength, type: "int64_t", dir: in, role: default} - description: null + description: "DEPRECATED: parents -> offsets converter. The offsets-pipeline migration no longer calls this. Kept for ABI compatibility." definition: | def awkward_sorting_ranges(toindex, tolength, parents, parentslength): toindex[0] = 0 @@ -5640,7 +5727,7 @@ kernels: - {name: tolength, type: "List[int64_t]", dir: out} - {name: parents, type: "Const[List[int64_t]]", dir: in, role: IndexedArray-index} - {name: parentslength, type: "int64_t", dir: in, role: default} - description: null + description: "DEPRECATED: parents -> offsets length helper. The offsets-pipeline migration no longer calls this. Kept for ABI compatibility." definition: | def awkward_sorting_ranges_length(tolength, parents, parentslength): tolength[0] = 2 diff --git a/kernel-test-data.json b/kernel-test-data.json index c92b76ef3e..497b952de9 100644 --- a/kernel-test-data.json +++ b/kernel-test-data.json @@ -1,29086 +1,27883 @@ { - "tests": { - "reducer": [], - "ListArray": [ - { - "ListArray-starts": [2, 0, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1], - "ListArray-starts-offset": 0, - "ListArray-stops": [3, 2, 4, 5, 3, 4, 2, 5, 3, 4, 6, 11], - "ListArray-stops-offset": 0, - "ListArray-length": 3, - "ListArray-at": 0 - }, - { - "ListArray-starts": [1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1], - "ListArray-starts-offset": 1, - "ListArray-stops": [8, 4, 5, 6, 5, 5, 7], - "ListArray-stops-offset": 1, - "ListArray-length": 10, - "ListArray-at": 5 - }, - { - "ListArray-starts": [1, 4, 5, 6, 5, 5, 7, 1, 2, 1, 3, 1, 5, 3, 2], - "ListArray-starts-offset": 1, - "ListArray-stops": [1, 4, 5, 6, 5, 5, 7, 1, 2, 1, 3, 1, 5, 3, 2], - "ListArray-stops-offset": 1, - "ListArray-length": 5, - "ListArray-at": 0 - }, - { - "ListArray-starts": [1, 7, 6, 1, 3, 4, 2, 5, 2, 3, 1, 2, 3, 4, 5, 6, 7, 1, 2], - "ListArray-starts-offset": 2, - "ListArray-stops": [1, 9, 6, 2, 4, 5, 3, 6, 3, 4, 2, 4, 5, 5, 7, 8, 2, 3], - "ListArray-stops-offset": 2, - "ListArray-length": 3, - "ListArray-at": 2 - }, - { - "ListArray-starts": [0, 0, 0, 0, 0, 0, 0, 0], - "ListArray-starts-offset": 0, - "ListArray-stops": [1, 1, 1, 1, 1, 1, 1, 1], - "ListArray-stops-offset": 0, - "ListArray-length": 6, - "ListArray-at": 1 - } + "tests": { + "reducer": [], + "ListArray": [ + { + "ListArray-starts": [2,0,2,1,2,1,2,1,2,1,2,1], + "ListArray-starts-offset": 0, + "ListArray-stops": [3,2,4,5,3,4,2,5,3,4,6,11], + "ListArray-stops-offset": 0, + "ListArray-length": 3, + "ListArray-at": 0 + }, + { + "ListArray-starts": [1,0,0,0,1,1,0,1,1,0,1,0,1,0,1], + "ListArray-starts-offset": 1, + "ListArray-stops": [8,4,5,6,5,5,7], + "ListArray-stops-offset": 1, + "ListArray-length": 10, + "ListArray-at": 5 + }, + { + "ListArray-starts": [1,4,5,6,5,5,7,1,2,1,3,1,5,3,2], + "ListArray-starts-offset": 1, + "ListArray-stops": [1,4,5,6,5,5,7,1,2,1,3,1,5,3,2], + "ListArray-stops-offset": 1, + "ListArray-length": 5, + "ListArray-at": 0 + }, + { + "ListArray-starts": [1,7,6,1,3,4,2,5,2,3,1,2,3,4,5,6,7,1,2], + "ListArray-starts-offset": 2, + "ListArray-stops": [1,9,6,2,4,5,3,6,3,4,2,4,5,5,7,8,2,3], + "ListArray-stops-offset": 2, + "ListArray-length": 3, + "ListArray-at": 2 + }, + { + "ListArray-starts": [0,0,0,0,0,0,0,0], + "ListArray-starts-offset": 0, + "ListArray-stops": [1,1,1,1,1,1,1,1], + "ListArray-stops-offset": 0, + "ListArray-length": 6, + "ListArray-at": 1 + } + ], + "ListOffsetArray": [ + { + "ListOffsetArray-offsets": [1,1,1,1,1,1,1,1,1,1], + "ListOffsetArray-offsets-offset": 0, + "ListOffsetArray-length": 5, + "ListOffsetArray-rawoffsets": [ + [1,2,1,2,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4], + [2,1,0,3,1,2,0,3,1,2,2,2,1,2,3,1,0,2,3,0,2,1] + ] + }, + { + "ListOffsetArray-offsets": [2,3,3,4,5,5,5,5,5,6,7,8,10,11], + "ListOffsetArray-offsets-offset": 1, + "ListOffsetArray-length": 1, + "ListOffsetArray-rawoffsets": [ + [1,1,1,2,2,2,1,3,1,2,3,4,1,2,4,1,2,3,4], + [0,1,3,3,1,0,0,3,1,2,2,2,1,2] + ] + }, + { + "ListOffsetArray-offsets": [2,1,0,1,2,0,1,2,2,2,1,2,1,0,0,0,0], + "ListOffsetArray-offsets-offset": 1, + "ListOffsetArray-length": 6, + "ListOffsetArray-rawoffsets": [ + [3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4], + [2,1,2,3,1,0,2,3,0,2,1] + ] + }, + { + "ListOffsetArray-offsets": [1,0,2,3,1,2,0,0,1,1,2,3,1,2,3,1,1,1,1,1,1,1,1,1,1], + "ListOffsetArray-offsets-offset": 2, + "ListOffsetArray-length": 3, + "ListOffsetArray-rawoffsets": [ + [1,2,3,2,3,1,3,3,3,2,3,1,2,3,4,1,2], + [2,1,2,1,2,1,2,3,1,2,3,1,3,2,3] + ] + }, + { + "ListOffsetArray-offsets": [0,0,0,0,0,0,0,0], + "ListOffsetArray-offsets-offset": 0, + "ListOffsetArray-length": 6, + "ListOffsetArray-rawoffsets": [ + [0,0,0,0,0,0,0], + [0,0,0,0,0,0,0,0] + ] + } + ], + "Identities": [ + { + "Identities-array": [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15], + "Identities-array-offset": 0 + }, + { + "Identities-array": [0,2,1,1,1,1,2,0,1,2,0,1,0,2,0,1,1,1,0,2,2,2,1,2,0,1], + "Identities-array-offset": 1 + }, + { + "Identities-array": [1,4,3,1,2,4,5,2,3,4,1,7,5,4,2,3,1,4,2,7,8,4,3,3,4,1,5,9,7,2,3,4,5,1,2,3,4,5,6,7,8,9,10], + "Identities-array-offset": 2 + }, + { + "Identities-array": [1,3,2,3,1,2,5,4,3,2,1,4,3,5,1,2,3,5,1,4,2,3,2,1,2,3,5,4,3,2,1,4,2,3,1,5,2,3,4,1,5,1,2,1,1,1], + "Identities-array-offset": 3 + }, + { + "Identities-array": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], + "Identities-array-offset": 0 + } + ], + "RegularArray": [ + { + "RegularArray-size": 3 + }, + { + "RegularArray-size": 2 + }, + { + "RegularArray-size": 1 + }, + { + "RegularArray-size": 2 + }, + { + "RegularArray-size": 0 + } + ], + "IndexedArray": [ + { + "IndexedArray-index": [1,0,0,1,1,1,0,0,1,0,1,0,1,1], + "IndexedArray-index-offset": 0, + "IndexedArray-length": 2, + "IndexedArray-parents": [1,1,0,0,1,1,1,1,0,1,1,0,1,1], + "IndexedArray-parents-offset": 1 + }, + { + "IndexedArray-index": [1,2,2,3,0,2,0,2,1,1], + "IndexedArray-index-offset": 0, + "IndexedArray-length": 1, + "IndexedArray-parents": [0,0,1,1,1,1,1,0,0,0,1,1,0,1], + "IndexedArray-parents-offset": 0 + }, + { + "IndexedArray-index": [1,3,0,3,5,2,0,2,1,1], + "IndexedArray-index-offset": 0, + "IndexedArray-length": 1, + "IndexedArray-parents": [1,0,1,0,1,0,1,0,1,0,1,0,1,0], + "IndexedArray-parents-offset": 1 + }, + { + "IndexedArray-index": [1,4,2,3,1,2,3,1,4,3,2,1,3,2,4,5,1,2,3,4,5], + "IndexedArray-index-offset": 1, + "IndexedArray-length": 2, + "IndexedArray-parents": [1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,1,1,1], + "IndexedArray-parents-offset": 2 + }, + { + "IndexedArray-index": [0,0,0,0,0,0,0,0,0,0], + "IndexedArray-index-offset": 0, + "IndexedArray-length": 5, + "IndexedArray-parents": [0,0,0,0,0,0,0,0,0,0,0], + "IndexedArray-parents-offset": 0 + } + ], + "UnionArray": [ + { + "UnionArray-tags": [0,0,0,0,0,0,0,0,0,0,0], + "UnionArray-tags-offset": 1, + "UnionArray-which": 0, + "UnionArray-length": 3 + }, + { + "UnionArray-tags": [1,1,1,1,1,1,1,1,1,1,1], + "UnionArray-tags-offset": 0, + "UnionArray-which": 1, + "UnionArray-length": 2 + }, + { + "UnionArray-tags": [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1], + "UnionArray-tags-offset": 1, + "UnionArray-which": 2, + "UnionArray-length": 3 + }, + { + "UnionArray-tags": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], + "UnionArray-tags-offset": 2, + "UnionArray-which": 1, + "UnionArray-length": 3 + }, + { + "UnionArray-tags": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], + "UnionArray-tags-offset": 0, + "UnionArray-which": 0, + "UnionArray-length": 10 + } + ], + "NumpyArray": [ + { + "NumpyArray-ptr": [1,2,4,2,3,1,4,2,2,2,1,4,3], + "NumpyArray-ptr-offset": 0, + "NumpyArray-length": 5 + }, + { + "NumpyArray-ptr": [-1,2,4,0,-3], + "NumpyArray-ptr-offset": 1, + "NumpyArray-length": 3 + }, + { + "NumpyArray-ptr": [-1,-3,2,1,-5,7,8,9,2,3,4,-1,-5,-3,-7,5], + "NumpyArray-ptr-offset": 2, + "NumpyArray-length": 4 + }, + { + "NumpyArray-ptr": [ + 1.1, + -8.1, + 3.1, + 9.1, + 4.1, + 7.1, + 9.1 ], - "ListOffsetArray": [ - { - "ListOffsetArray-offsets": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], - "ListOffsetArray-offsets-offset": 0, - "ListOffsetArray-length": 5, - "ListOffsetArray-rawoffsets": [ - [1, 2, 1, 2, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4], - [2, 1, 0, 3, 1, 2, 0, 3, 1, 2, 2, 2, 1, 2, 3, 1, 0, 2, 3, 0, 2, 1]] - }, - { - "ListOffsetArray-offsets": [2, 3, 3, 4, 5, 5, 5, 5, 5, 6, 7, 8, 10, 11], - "ListOffsetArray-offsets-offset": 1, - "ListOffsetArray-length": 1, - "ListOffsetArray-rawoffsets": [ - [1, 1, 1, 2, 2, 2, 1, 3, 1, 2, 3, 4, 1, 2, 4, 1, 2, 3, 4], - [0, 1, 3, 3, 1, 0, 0, 3, 1, 2, 2, 2, 1, 2]] - }, - { - "ListOffsetArray-offsets": [2, 1, 0, 1, 2, 0, 1, 2, 2, 2, 1, 2, 1, 0, 0, 0, 0], - "ListOffsetArray-offsets-offset": 1, - "ListOffsetArray-length": 6, - "ListOffsetArray-rawoffsets": [ - [3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4], - [2, 1, 2, 3, 1, 0, 2, 3, 0, 2, 1]] - }, - { - "ListOffsetArray-offsets": [1, 0, 2, 3, 1, 2, 0, 0, 1, 1, 2, 3, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], - "ListOffsetArray-offsets-offset": 2, - "ListOffsetArray-length": 3, - "ListOffsetArray-rawoffsets": [ - [1, 2, 3, 2, 3, 1, 3, 3, 3, 2, 3, 1, 2, 3, 4, 1, 2], - [2, 1, 2, 1, 2, 1, 2, 3, 1, 2, 3, 1, 3, 2, 3]] - }, - { - "ListOffsetArray-offsets": [0, 0, 0, 0, 0, 0, 0, 0], - "ListOffsetArray-offsets-offset": 0, - "ListOffsetArray-length": 6, - "ListOffsetArray-rawoffsets": [ - [0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0]] - } - ], - "Identities": [ - { - "Identities-array": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], - "Identities-array-offset": 0 - }, - { - "Identities-array": [0, 2, 1, 1, 1, 1, 2, 0, 1, 2, 0, 1, 0, 2, 0, 1, 1, 1, 0, 2, 2, 2, 1, 2, 0, 1], - "Identities-array-offset": 1 - }, - { - "Identities-array": [1, 4, 3, 1, 2, 4, 5, 2, 3, 4, 1, 7, 5, 4, 2, 3, 1, 4, 2, 7, 8, 4, 3, 3, 4, 1, 5, 9, 7, 2, 3, 4, 5, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], - "Identities-array-offset": 2 - }, - { - "Identities-array": [1, 3, 2, 3, 1, 2, 5, 4, 3, 2, 1, 4, 3, 5, 1, 2, 3, 5, 1, 4, 2, 3, 2, 1, 2, 3, 5, 4, 3, 2, 1, 4, 2, 3, 1, 5, 2, 3, 4, 1, 5, 1, 2, 1, 1, 1], - "Identities-array-offset": 3 - }, - { - "Identities-array": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "Identities-array-offset": 0 - } - ], - "RegularArray": [ - { - "RegularArray-size": 3 - }, - { - "RegularArray-size": 2 - }, - { - "RegularArray-size": 1 - }, - { - "RegularArray-size": 2 - }, - { - "RegularArray-size": 0 - } - ], - "IndexedArray": [ - { - "IndexedArray-index": [1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1], - "IndexedArray-index-offset": 0, - "IndexedArray-length": 2, - "IndexedArray-parents": [1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1], - "IndexedArray-parents-offset": 1 - }, - { - "IndexedArray-index": [1, 2, 2, 3, 0, 2, 0, 2, 1, 1], - "IndexedArray-index-offset": 0, - "IndexedArray-length": 1, - "IndexedArray-parents": [0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1], - "IndexedArray-parents-offset": 0 - }, - { - "IndexedArray-index": [1, 3, 0, 3, 5, 2, 0, 2, 1, 1], - "IndexedArray-index-offset": 0, - "IndexedArray-length": 1, - "IndexedArray-parents": [1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], - "IndexedArray-parents-offset": 1 - }, - { - "IndexedArray-index": [1, 4, 2, 3, 1, 2, 3, 1, 4, 3, 2, 1, 3, 2, 4, 5, 1, 2, 3, 4, 5], - "IndexedArray-index-offset": 1, - "IndexedArray-length": 2, - "IndexedArray-parents": [1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1], - "IndexedArray-parents-offset": 2 - }, - { - "IndexedArray-index": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "IndexedArray-index-offset": 0, - "IndexedArray-length": 5, - "IndexedArray-parents": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "IndexedArray-parents-offset": 0 - } - ], - "UnionArray": [ - { - "UnionArray-tags": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "UnionArray-tags-offset": 1, - "UnionArray-which": 0, - "UnionArray-length": 3 - }, - { - "UnionArray-tags": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], - "UnionArray-tags-offset": 0, - "UnionArray-which": 1, - "UnionArray-length": 2 - }, - { - "UnionArray-tags": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], - "UnionArray-tags-offset": 1, - "UnionArray-which": 2, - "UnionArray-length": 3 - }, - { - "UnionArray-tags": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "UnionArray-tags-offset": 2, - "UnionArray-which": 1, - "UnionArray-length": 3 - }, - { - "UnionArray-tags": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "UnionArray-tags-offset": 0, - "UnionArray-which": 0, - "UnionArray-length": 10 - } - ], - "NumpyArray": [ - { - "NumpyArray-ptr": [1, 2, 4, 2, 3, 1, 4, 2, 2, 2, 1, 4, 3], - "NumpyArray-ptr-offset": 0, - "NumpyArray-length": 5 - }, - { - "NumpyArray-ptr": [-1, 2, 4, 0,-3], - "NumpyArray-ptr-offset": 1, - "NumpyArray-length": 3 - }, - { - "NumpyArray-ptr": [-1, -3, 2, 1, -5, 7, 8, 9, 2, 3, 4, -1, -5, -3, -7, 5], - "NumpyArray-ptr-offset": 2, - "NumpyArray-length": 4 - }, - { - "NumpyArray-ptr": [1.1, -8.1, 3.1, 9.1, 4.1, 7.1, 9.1], - "NumpyArray-ptr-offset": 1, - "NumpyArray-length": 2 - }, - { - "NumpyArray-ptr": [0, 0, 0, 0, 0, 0, 0], - "NumpyArray-ptr-offset": 0, - "NumpyArray-length": 5 - } - ], - "ByteMaskedArray": [ - { - "ByteMaskedArray-mask": [1, 1, 1, 1, 1], - "ByteMaskedArray-mask-offset": 0, - "ByteMaskedArray-valid_when": true, - "ByteMaskedArray-length": 0 - }, - { - "ByteMaskedArray-mask": [0, 0, 0, 0, 0], - "ByteMaskedArray-mask-offset": 0, - "ByteMaskedArray-valid_when": false, - "ByteMaskedArray-length": 5 - }, - { - "ByteMaskedArray-mask": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], - "ByteMaskedArray-mask-offset": 1, - "ByteMaskedArray-valid_when": true, - "ByteMaskedArray-length": 7 - }, - { - "ByteMaskedArray-mask": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], - "ByteMaskedArray-mask-offset": 1, - "ByteMaskedArray-valid_when": true, - "ByteMaskedArray-length": 7 - }, - { - "ByteMaskedArray-mask": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "ByteMaskedArray-mask-offset": 0, - "ByteMaskedArray-valid_when": true, - "ByteMaskedArray-length": 7 - } - ], - "BitMaskedArray": [ - { - "BitMaskedArray-mask": [1, 1, 1, 1, 1], - "BitMaskedArray-mask-offset": 0, - "BitMaskedArray-valid_when": true, - "BitMaskedArray-lsb_order": true - }, - { - "BitMaskedArray-mask": [0, 0, 0, 0, 0], - "BitMaskedArray-mask-offset": 0, - "BitMaskedArray-valid_when": false, - "BitMaskedArray-lsb_order": false - }, - { - "BitMaskedArray-mask": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "BitMaskedArray-mask-offset": 1, - "BitMaskedArray-valid_when": true, - "BitMaskedArray-lsb_order": false - }, - { - "BitMaskedArray-mask": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], - "BitMaskedArray-mask-offset": 2, - "BitMaskedArray-valid_when": true, - "BitMaskedArray-lsb_order": true - }, - { - "BitMaskedArray-mask": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], - "BitMaskedArray-mask-offset": 0, - "BitMaskedArray-valid_when": false, - "BitMaskedArray-lsb_order": false - } - ], - "num": 3 + "NumpyArray-ptr-offset": 1, + "NumpyArray-length": 2 + }, + { + "NumpyArray-ptr": [0,0,0,0,0,0,0], + "NumpyArray-ptr-offset": 0, + "NumpyArray-length": 5 + } + ], + "ByteMaskedArray": [ + { + "ByteMaskedArray-mask": [1,1,1,1,1], + "ByteMaskedArray-mask-offset": 0, + "ByteMaskedArray-valid_when": true, + "ByteMaskedArray-length": 0 + }, + { + "ByteMaskedArray-mask": [0,0,0,0,0], + "ByteMaskedArray-mask-offset": 0, + "ByteMaskedArray-valid_when": false, + "ByteMaskedArray-length": 5 + }, + { + "ByteMaskedArray-mask": [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1], + "ByteMaskedArray-mask-offset": 1, + "ByteMaskedArray-valid_when": true, + "ByteMaskedArray-length": 7 + }, + { + "ByteMaskedArray-mask": [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1], + "ByteMaskedArray-mask-offset": 1, + "ByteMaskedArray-valid_when": true, + "ByteMaskedArray-length": 7 + }, + { + "ByteMaskedArray-mask": [0,0,0,0,0,0,0,0,0,0,0], + "ByteMaskedArray-mask-offset": 0, + "ByteMaskedArray-valid_when": true, + "ByteMaskedArray-length": 7 + } + ], + "BitMaskedArray": [ + { + "BitMaskedArray-mask": [1,1,1,1,1], + "BitMaskedArray-mask-offset": 0, + "BitMaskedArray-valid_when": true, + "BitMaskedArray-lsb_order": true + }, + { + "BitMaskedArray-mask": [0,0,0,0,0], + "BitMaskedArray-mask-offset": 0, + "BitMaskedArray-valid_when": false, + "BitMaskedArray-lsb_order": false + }, + { + "BitMaskedArray-mask": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], + "BitMaskedArray-mask-offset": 1, + "BitMaskedArray-valid_when": true, + "BitMaskedArray-lsb_order": false + }, + { + "BitMaskedArray-mask": [1,1,1,1,1,1,1,1,1,1,1,1,1], + "BitMaskedArray-mask-offset": 2, + "BitMaskedArray-valid_when": true, + "BitMaskedArray-lsb_order": true + }, + { + "BitMaskedArray-mask": [1,1,1,1,1,1,1,1,1,1,1,1,1], + "BitMaskedArray-mask-offset": 0, + "BitMaskedArray-valid_when": false, + "BitMaskedArray-lsb_order": false + } + ], + "num": 3 + }, + "unit-tests": [ + { + "name": "awkward_missing_repeat", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "index": [], + "indexlength": 0, + "regularsize": 0, + "repetitions": 0 + }, + "outputs": { + "outindex": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0], + "indexlength": 1, + "regularsize": 1, + "repetitions": 1 + }, + "outputs": { + "outindex": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1], + "indexlength": 2, + "regularsize": 1, + "repetitions": 1 + }, + "outputs": { + "outindex": [0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,1], + "indexlength": 3, + "regularsize": 1, + "repetitions": 1 + }, + "outputs": { + "outindex": [0,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,1], + "indexlength": 3, + "regularsize": 2, + "repetitions": 1 + }, + "outputs": { + "outindex": [0,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,1,1], + "indexlength": 4, + "regularsize": 1, + "repetitions": 1 + }, + "outputs": { + "outindex": [0,1,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,1,1], + "indexlength": 4, + "regularsize": 2, + "repetitions": 1 + }, + "outputs": { + "outindex": [0,1,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,1,1,1], + "indexlength": 5, + "regularsize": 1, + "repetitions": 1 + }, + "outputs": { + "outindex": [0,1,1,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,1,1,1], + "indexlength": 5, + "regularsize": 2, + "repetitions": 1 + }, + "outputs": { + "outindex": [0,1,1,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,1,1,2], + "indexlength": 5, + "regularsize": 3, + "repetitions": 1 + }, + "outputs": { + "outindex": [0,1,1,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,1,1,2,3], + "indexlength": 6, + "regularsize": 4, + "repetitions": 1 + }, + "outputs": { + "outindex": [0,1,1,1,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,1,2], + "indexlength": 4, + "regularsize": 3, + "repetitions": 1 + }, + "outputs": { + "outindex": [0,1,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,1,2,1], + "indexlength": 5, + "regularsize": 3, + "repetitions": 1 + }, + "outputs": { + "outindex": [0,1,1,2,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,1,2,3], + "indexlength": 5, + "regularsize": 4, + "repetitions": 1 + }, + "outputs": { + "outindex": [0,1,1,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,1,2,3,4,5], + "indexlength": 7, + "regularsize": 6, + "repetitions": 1 + }, + "outputs": { + "outindex": [0,1,1,2,3,4,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,2,1], + "indexlength": 4, + "regularsize": 3, + "repetitions": 1 + }, + "outputs": { + "outindex": [0,1,2,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,2,1,1], + "indexlength": 5, + "regularsize": 3, + "repetitions": 1 + }, + "outputs": { + "outindex": [0,1,2,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,2,1,3], + "indexlength": 5, + "regularsize": 4, + "repetitions": 1 + }, + "outputs": { + "outindex": [0,1,2,1,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,2,3,1], + "indexlength": 5, + "regularsize": 4, + "repetitions": 1 + }, + "outputs": { + "outindex": [0,1,2,3,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,2,3,1,4,5], + "indexlength": 7, + "regularsize": 6, + "repetitions": 1 + }, + "outputs": { + "outindex": [0,1,2,3,1,4,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,2,3,4,5], + "indexlength": 6, + "regularsize": 6, + "repetitions": 1 + }, + "outputs": { + "outindex": [0,1,2,3,4,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,0], + "indexlength": 2, + "regularsize": 1, + "repetitions": 1 + }, + "outputs": { + "outindex": [1,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,0,1], + "indexlength": 3, + "regularsize": 1, + "repetitions": 1 + }, + "outputs": { + "outindex": [1,0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,0,1], + "indexlength": 3, + "regularsize": 2, + "repetitions": 1 + }, + "outputs": { + "outindex": [1,0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,0,1,1], + "indexlength": 4, + "regularsize": 1, + "repetitions": 1 + }, + "outputs": { + "outindex": [1,0,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,0,1,1], + "indexlength": 4, + "regularsize": 2, + "repetitions": 1 + }, + "outputs": { + "outindex": [1,0,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,0,1,1,1], + "indexlength": 5, + "regularsize": 1, + "repetitions": 1 + }, + "outputs": { + "outindex": [1,0,1,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,0,1,1,1], + "indexlength": 5, + "regularsize": 2, + "repetitions": 1 + }, + "outputs": { + "outindex": [1,0,1,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,0,1,1,2], + "indexlength": 5, + "regularsize": 3, + "repetitions": 1 + }, + "outputs": { + "outindex": [1,0,1,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,0,1,2], + "indexlength": 4, + "regularsize": 3, + "repetitions": 1 + }, + "outputs": { + "outindex": [1,0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,0,1,2,1], + "indexlength": 5, + "regularsize": 3, + "repetitions": 1 + }, + "outputs": { + "outindex": [1,0,1,2,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,0,1,2,3], + "indexlength": 5, + "regularsize": 4, + "repetitions": 1 + }, + "outputs": { + "outindex": [1,0,1,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,1,0], + "indexlength": 3, + "regularsize": 1, + "repetitions": 1 + }, + "outputs": { + "outindex": [1,1,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,1,0,1], + "indexlength": 4, + "regularsize": 1, + "repetitions": 1 + }, + "outputs": { + "outindex": [1,1,0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,1,0,1], + "indexlength": 4, + "regularsize": 2, + "repetitions": 1 + }, + "outputs": { + "outindex": [1,1,0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,1,0,1,1], + "indexlength": 5, + "regularsize": 1, + "repetitions": 1 + }, + "outputs": { + "outindex": [1,1,0,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,1,0,1,1], + "indexlength": 5, + "regularsize": 2, + "repetitions": 1 + }, + "outputs": { + "outindex": [1,1,0,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,1,0,1,2], + "indexlength": 5, + "regularsize": 3, + "repetitions": 1 + }, + "outputs": { + "outindex": [1,1,0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,1,1,0], + "indexlength": 4, + "regularsize": 1, + "repetitions": 1 + }, + "outputs": { + "outindex": [1,1,1,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,1,1,0,1], + "indexlength": 5, + "regularsize": 1, + "repetitions": 1 + }, + "outputs": { + "outindex": [1,1,1,0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,1,1,0,1], + "indexlength": 5, + "regularsize": 2, + "repetitions": 1 + }, + "outputs": { + "outindex": [1,1,1,0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1], + "indexlength": 1, + "regularsize": 0, + "repetitions": 1 + }, + "outputs": { + "outindex": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,1,1,1,0], + "indexlength": 5, + "regularsize": 1, + "repetitions": 1 + }, + "outputs": { + "outindex": [1,1,1,1,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,1,1,1,1], + "indexlength": 5, + "regularsize": 0, + "repetitions": 1 + }, + "outputs": { + "outindex": [1,1,1,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,1,1,1], + "indexlength": 4, + "regularsize": 0, + "repetitions": 1 + }, + "outputs": { + "outindex": [1,1,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,1,1], + "indexlength": 3, + "regularsize": 0, + "repetitions": 1 + }, + "outputs": { + "outindex": [1,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,1], + "indexlength": 2, + "regularsize": 0, + "repetitions": 1 + }, + "outputs": { + "outindex": [1,1] + } + } + ] + }, + { + "name": "awkward_index_rpad_and_clip_axis0", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "length": 0, + "target": 0 + }, + "outputs": { + "toindex": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 2, + "target": 2 + }, + "outputs": { + "toindex": [0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 3, + "target": 2 + }, + "outputs": { + "toindex": [0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 3, + "target": 3 + }, + "outputs": { + "toindex": [0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "target": 4 + }, + "outputs": { + "toindex": [0,1,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "target": 5 + }, + "outputs": { + "toindex": [0,1,2,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 6, + "target": 6 + }, + "outputs": { + "toindex": [0,1,2,3,4,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "target": 3 + }, + "outputs": { + "toindex": [0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 6, + "target": 3 + }, + "outputs": { + "toindex": [0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "target": 2 + }, + "outputs": { + "toindex": [0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 3, + "target": 1 + }, + "outputs": { + "toindex": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "target": 1 + }, + "outputs": { + "toindex": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 6, + "target": 1 + }, + "outputs": { + "toindex": [0] + } + } + ] + }, + { + "name": "awkward_Index_nones_as_index", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "length": 0, + "toindex": [] + }, + "outputs": { + "toindex": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "toindex": [0] + }, + "outputs": { + "toindex": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "toindex": [-1] + }, + "outputs": { + "toindex": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 3, + "toindex": [-1,-1,-1] + }, + "outputs": { + "toindex": [0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "toindex": [0,1,2,3,4] + }, + "outputs": { + "toindex": [0,1,2,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "toindex": [0,-1,-1,1,-1] + }, + "outputs": { + "toindex": [0,2,3,1,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 7, + "toindex": [-1,0,-1,-1,1,-1,2] + }, + "outputs": { + "toindex": [3,0,4,5,1,6,2] + } + } + ] + }, + { + "name": "awkward_BitMaskedArray_to_ByteMaskedArray", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "bitmasklength": 0, + "frombitmask": [], + "lsb_order": false, + "validwhen": false + }, + "outputs": { + "tobytemask": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "bitmasklength": 0, + "frombitmask": [], + "lsb_order": true, + "validwhen": false + }, + "outputs": { + "tobytemask": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "bitmasklength": 1, + "frombitmask": [66], + "lsb_order": true, + "validwhen": false + }, + "outputs": { + "tobytemask": [0,1,0,0,0,0,1,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "bitmasklength": 2, + "frombitmask": [58,59], + "lsb_order": false, + "validwhen": false + }, + "outputs": { + "tobytemask": [0,0,1,1,1,0,1,0,0,0,1,1,1,0,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "bitmasklength": 1, + "frombitmask": [27], + "lsb_order": false, + "validwhen": false + }, + "outputs": { + "tobytemask": [0,0,0,1,1,0,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "bitmasklength": 3, + "frombitmask": [1,1,1], + "lsb_order": false, + "validwhen": false + }, + "outputs": { + "tobytemask": [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "bitmasklength": 3, + "frombitmask": [1,1,1], + "lsb_order": false, + "validwhen": true + }, + "outputs": { + "tobytemask": [1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "bitmasklength": 4, + "frombitmask": [0,0,0,0], + "lsb_order": false, + "validwhen": false + }, + "outputs": { + "tobytemask": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "bitmasklength": 4, + "frombitmask": [0,0,0,0], + "lsb_order": true, + "validwhen": false + }, + "outputs": { + "tobytemask": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "bitmasklength": 2, + "frombitmask": [58,59], + "lsb_order": true, + "validwhen": false + }, + "outputs": { + "tobytemask": [0,1,0,1,1,1,0,0,1,1,0,1,1,1,0,0] + } + } + ] + }, + { + "name": "awkward_ByteMaskedArray_getitem_nextcarry", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "length": 0, + "mask": [], + "validwhen": false + }, + "outputs": { + "tocarry": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 2, + "mask": [0,0], + "validwhen": false + }, + "outputs": { + "tocarry": [0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "mask": [0,0,1,1,0], + "validwhen": false + }, + "outputs": { + "tocarry": [0,1,4] + } + } + ] + }, + { + "name": "awkward_ByteMaskedArray_getitem_nextcarry_outindex", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "length": 0, + "mask": [], + "validwhen": true + }, + "outputs": { + "outindex": [], + "tocarry": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "mask": [0], + "validwhen": true + }, + "outputs": { + "outindex": [-1], + "tocarry": [123] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 4, + "mask": [0,0,0,0], + "validwhen": true + }, + "outputs": { + "outindex": [-1,-1,-1,-1], + "tocarry": [123,123,123,123] + } + } + ] + }, + { + "name": "awkward_ByteMaskedArray_numnull", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "length": 0, + "mask": [], + "validwhen": false + }, + "outputs": { + "numnull": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 4, + "mask": [0,0,0,0], + "validwhen": false + }, + "outputs": { + "numnull": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 2, + "mask": [0,0], + "validwhen": false + }, + "outputs": { + "numnull": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "mask": [0], + "validwhen": false + }, + "outputs": { + "numnull": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 30, + "mask": [0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0], + "validwhen": false + }, + "outputs": { + "numnull": [10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 30, + "mask": [0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0], + "validwhen": false + }, + "outputs": { + "numnull": [10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 30, + "mask": [0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0], + "validwhen": false + }, + "outputs": { + "numnull": [10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 4, + "mask": [0,1,0,0], + "validwhen": false + }, + "outputs": { + "numnull": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "mask": [0], + "validwhen": true + }, + "outputs": { + "numnull": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 3, + "mask": [0,1,1], + "validwhen": true + }, + "outputs": { + "numnull": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 6, + "mask": [0,0,1,1,0,0], + "validwhen": false + }, + "outputs": { + "numnull": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "mask": [0,0,1,1,0], + "validwhen": false + }, + "outputs": { + "numnull": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 9, + "mask": [0,1,0,0,0,0,1,0,0], + "validwhen": false + }, + "outputs": { + "numnull": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 6, + "mask": [0,1,0,0,1,0], + "validwhen": false + }, + "outputs": { + "numnull": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 3, + "mask": [0,1,0], + "validwhen": true + }, + "outputs": { + "numnull": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 3, + "mask": [1,1,0], + "validwhen": false + }, + "outputs": { + "numnull": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 8, + "mask": [0,1,0,0,1,0,1,0], + "validwhen": false + }, + "outputs": { + "numnull": [3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 10, + "mask": [0,1,1,0,1,0,0,1,1,0], + "validwhen": true + }, + "outputs": { + "numnull": [5] + } + } + ] + }, + { + "name": "awkward_ByteMaskedArray_toIndexedOptionArray", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "length": 0, + "mask": [], + "validwhen": false + }, + "outputs": { + "toindex": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 2, + "mask": [0,0], + "validwhen": false + }, + "outputs": { + "toindex": [0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 4, + "mask": [0,0,0,0], + "validwhen": false + }, + "outputs": { + "toindex": [0,1,2,3] + } + } + ] + }, + { + "name": "awkward_IndexedArray_flatten_nextcarry", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromindex": [], + "lencontent": 0, + "lenindex": 0 + }, + "outputs": { + "tocarry": [] + } + }, + { + "error": true, + "message": "index out of range", + "inputs": { + "fromindex": [0,1], + "lencontent": 0, + "lenindex": 2 + }, + "outputs": { + "tocarry": [] + } + }, + { + "error": true, + "message": "index out of range", + "inputs": { + "fromindex": [0,2], + "lencontent": 2, + "lenindex": 2 + }, + "outputs": { + "tocarry": [0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,1], + "lencontent": 2, + "lenindex": 2 + }, + "outputs": { + "tocarry": [0,1] + } + } + ] + }, + { + "name": "awkward_IndexedArray_getitem_nextcarry", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromindex": [], + "lencontent": 0, + "lenindex": 0 + }, + "outputs": { + "tocarry": [] + } + }, + { + "error": true, + "message": "index out of range", + "inputs": { + "fromindex": [0,1], + "lencontent": 0, + "lenindex": 2 + }, + "outputs": { + "tocarry": [] + } + }, + { + "error": true, + "message": "index out of range", + "inputs": { + "fromindex": [0,0,0,1,0,2,0], + "lencontent": 1, + "lenindex": 7 + }, + "outputs": { + "tocarry": [0,0,0,0,0,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,0,0,0,0,0,0], + "lencontent": 1, + "lenindex": 7 + }, + "outputs": { + "tocarry": [0,0,0,0,0,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,0,0,0,0,0], + "lencontent": 1, + "lenindex": 6 + }, + "outputs": { + "tocarry": [0,0,0,0,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,0,0,0,0], + "lencontent": 1, + "lenindex": 5 + }, + "outputs": { + "tocarry": [0,0,0,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,0,0], + "lencontent": 1, + "lenindex": 3 + }, + "outputs": { + "tocarry": [0,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,0], + "lencontent": 1, + "lenindex": 2 + }, + "outputs": { + "tocarry": [0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,0,0,1,1,1,2,2,2], + "lencontent": 3, + "lenindex": 9 + }, + "outputs": { + "tocarry": [0,0,0,1,1,1,2,2,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,0,0,2,3,3,4], + "lencontent": 5, + "lenindex": 7 + }, + "outputs": { + "tocarry": [0,0,0,2,3,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,1], + "lencontent": 2, + "lenindex": 2 + }, + "outputs": { + "tocarry": [0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,1,2], + "lencontent": 3, + "lenindex": 3 + }, + "outputs": { + "tocarry": [0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,1,2,3], + "lencontent": 4, + "lenindex": 4 + }, + "outputs": { + "tocarry": [0,1,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,1,2,3,4], + "lencontent": 5, + "lenindex": 5 + }, + "outputs": { + "tocarry": [0,1,2,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [1,1,1], + "lencontent": 6, + "lenindex": 3 + }, + "outputs": { + "tocarry": [1,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [1], + "lencontent": 5, + "lenindex": 1 + }, + "outputs": { + "tocarry": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [1], + "lencontent": 6, + "lenindex": 1 + }, + "outputs": { + "tocarry": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [1,2], + "lencontent": 3, + "lenindex": 2 + }, + "outputs": { + "tocarry": [1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [1,3], + "lencontent": 6, + "lenindex": 2 + }, + "outputs": { + "tocarry": [1,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [2,1,0,3,3,4], + "lencontent": 5, + "lenindex": 6 + }, + "outputs": { + "tocarry": [2,1,0,3,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [2,2,1,0], + "lencontent": 3, + "lenindex": 4 + }, + "outputs": { + "tocarry": [2,2,1,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [2,2,1,0,3], + "lencontent": 4, + "lenindex": 5 + }, + "outputs": { + "tocarry": [2,2,1,0,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [2], + "lencontent": 3, + "lenindex": 1 + }, + "outputs": { + "tocarry": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [2], + "lencontent": 5, + "lenindex": 1 + }, + "outputs": { + "tocarry": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [2,4,4,0,8], + "lencontent": 10, + "lenindex": 5 + }, + "outputs": { + "tocarry": [2,4,4,0,8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [3,2,1,0], + "lencontent": 4, + "lenindex": 4 + }, + "outputs": { + "tocarry": [3,2,1,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [4,3,2,1,0], + "lencontent": 5, + "lenindex": 5 + }, + "outputs": { + "tocarry": [4,3,2,1,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [4], + "lencontent": 5, + "lenindex": 1 + }, + "outputs": { + "tocarry": [4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [6,4,4,8,0], + "lencontent": 10, + "lenindex": 5 + }, + "outputs": { + "tocarry": [6,4,4,8,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [6,5,4,3,2,1,0], + "lencontent": 7, + "lenindex": 7 + }, + "outputs": { + "tocarry": [6,5,4,3,2,1,0] + } + } + ] + }, + { + "name": "awkward_IndexedArray_getitem_nextcarry_outindex", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromindex": [], + "lencontent": 0, + "lenindex": 0 + }, + "outputs": { + "tocarry": [], + "toindex": [] + } + }, + { + "error": true, + "message": "index out of range", + "inputs": { + "fromindex": [0,1,2,4], + "lencontent": 0, + "lenindex": 4 + }, + "outputs": { + "tocarry": [], + "toindex": [] + } + }, + { + "error": true, + "message": "index out of range", + "inputs": { + "fromindex": [0,1,2,4], + "lencontent": 4, + "lenindex": 4 + }, + "outputs": { + "tocarry": [0,1,2,3], + "toindex": [0,1,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,1,2,3], + "lencontent": 4, + "lenindex": 4 + }, + "outputs": { + "tocarry": [0,1,2,3], + "toindex": [0,1,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [3,2,1,0], + "lencontent": 4, + "lenindex": 4 + }, + "outputs": { + "tocarry": [3,2,1,0], + "toindex": [0,1,2,3] + } + } + ] + }, + { + "name": "awkward_IndexedArray_numnull", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromindex": [], + "lenindex": 0 + }, + "outputs": { + "numnull": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [1], + "lenindex": 1 + }, + "outputs": { + "numnull": [0] + } + }, + { + "error": false, + "inputs": { + "fromindex": [-1], + "lenindex": 1 + }, + "outputs": { + "numnull": [1] + } + }, + { + "error": false, + "inputs": { + "fromindex": [-1,-1,-1,-1], + "lenindex": 4 + }, + "outputs": { + "numnull": [4] + } + }, + { + "error": false, + "inputs": { + "fromindex": [0,-1,2,-1,-1,-1,-1], + "lenindex": 7 + }, + "outputs": { + "numnull": [5] + } + }, + { + "error": false, + "inputs": { + "fromindex": [0,1], + "lenindex": 2 + }, + "outputs": { + "numnull": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,1,2,3], + "lenindex": 4 + }, + "outputs": { + "numnull": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,1,2,3,4,5,6], + "lenindex": 7 + }, + "outputs": { + "numnull": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [1,2], + "lenindex": 2 + }, + "outputs": { + "numnull": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [1,2,3], + "lenindex": 3 + }, + "outputs": { + "numnull": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [1,2,3,4], + "lenindex": 4 + }, + "outputs": { + "numnull": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [2,3], + "lenindex": 2 + }, + "outputs": { + "numnull": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [2,3,4], + "lenindex": 3 + }, + "outputs": { + "numnull": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [3,2,1,0], + "lenindex": 4 + }, + "outputs": { + "numnull": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [3,4], + "lenindex": 2 + }, + "outputs": { + "numnull": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [4,3,2,1,0], + "lenindex": 5 + }, + "outputs": { + "numnull": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [5,2,4,1,3,0], + "lenindex": 6 + }, + "outputs": { + "numnull": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [5,4,3,2,1,0], + "lenindex": 6 + }, + "outputs": { + "numnull": [0] + } + } + ] + }, + { + "name": "awkward_IndexedArray_numnull_parents", + "status": true, + "tests": [ + { + "error": false, + "inputs": { + "fromindex": [], + "lenindex": 0 + }, + "outputs": { + "numnull": [], + "tolength": [0] + } + }, + { + "error": false, + "inputs": { + "fromindex": [1], + "lenindex": 1 + }, + "outputs": { + "numnull": [0], + "tolength": [0] + } + }, + { + "error": false, + "inputs": { + "fromindex": [-1], + "lenindex": 1 + }, + "outputs": { + "numnull": [1], + "tolength": [1] + } + }, + { + "error": false, + "inputs": { + "fromindex": [-1,-1,-1,-1], + "lenindex": 4 + }, + "outputs": { + "numnull": [1,1,1,1], + "tolength": [4] + } + }, + { + "error": false, + "inputs": { + "fromindex": [0,-1,2,-1,-1,-1,-1], + "lenindex": 7 + }, + "outputs": { + "numnull": [0,1,0,1,1,1,1], + "tolength": [5] + } + }, + { + "error": false, + "inputs": { + "fromindex": [0,1], + "lenindex": 2 + }, + "outputs": { + "numnull": [0,0], + "tolength": [0] + } + }, + { + "error": false, + "inputs": { + "fromindex": [0,1,2,3], + "lenindex": 4 + }, + "outputs": { + "numnull": [0,0,0,0], + "tolength": [0] + } + }, + { + "error": false, + "inputs": { + "fromindex": [0,1,-2,3,-4,5,-6], + "lenindex": 7 + }, + "outputs": { + "numnull": [0,0,1,0,1,0,1], + "tolength": [3] + } + } + ] + }, + { + "name": "awkward_IndexedArray_numnull_unique_64", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "lenindex": 4 + }, + "outputs": { + "toindex": [0,1,2,3,-1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "lenindex": 2 + }, + "outputs": { + "toindex": [0,1,-1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "lenindex": 0 + }, + "outputs": { + "toindex": [-1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "lenindex": 3 + }, + "outputs": { + "toindex": [0,1,2,-1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "lenindex": 1 + }, + "outputs": { + "toindex": [0,-1] + } + } + ] + }, + { + "name": "awkward_IndexedArray_overlay_mask", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromindex": [], + "length": 0, + "mask": [] + }, + "outputs": { + "toindex": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [5,4,3,2,1,0], + "length": 6, + "mask": [0,0,0,0,0,0] + }, + "outputs": { + "toindex": [5,4,3,2,1,0] + } + } + ] + }, + { + "name": "awkward_IndexedArray_ranges_next_64", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "index": [], + "fromstarts": [], + "fromstops": [], + "length": 0 + }, + "outputs": { + "tostarts": [], + "tostops": [], + "tolength": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [-1], + "fromstarts": [0], + "fromstops": [1], + "length": 1 + }, + "outputs": { + "tostarts": [0], + "tostops": [0], + "tolength": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1], + "fromstarts": [0], + "fromstops": [2], + "length": 1 + }, + "outputs": { + "tostarts": [0], + "tostops": [2], + "tolength": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,2], + "fromstarts": [0,2], + "fromstops": [2,3], + "length": 2 + }, + "outputs": { + "tostarts": [0,2], + "tostops": [2,3], + "tolength": [3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [-1,-1,-1], + "fromstarts": [0,2], + "fromstops": [2,3], + "length": 2 + }, + "outputs": { + "tostarts": [0,0], + "tostops": [0,0], + "tolength": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,-1,1,-1,2], + "fromstarts": [0,2,3], + "fromstops": [2,3,5], + "length": 3 + }, + "outputs": { + "tostarts": [0,1,2], + "tostops": [1,2,3], + "tolength": [3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [3,-1,-1,2,1,0,-1], + "fromstarts": [0,1,2,3,5], + "fromstops": [1,2,3,5,7], + "length": 5 + }, + "outputs": { + "tostarts": [0,1,1,1,3], + "tostops": [1,1,1,3,4], + "tolength": [4] + } + } + ] + }, + { + "name": "awkward_IndexedArray_ranges_carry_next_64", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "index": [], + "fromstarts": [], + "fromstops": [], + "length": 0 + }, + "outputs": { + "tocarry": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1], + "fromstarts": [0], + "fromstops": [1], + "length": 1 + }, + "outputs": { + "tocarry": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [-1], + "fromstarts": [0], + "fromstops": [1], + "length": 1 + }, + "outputs": { + "tocarry": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [-1,-1,-1], + "fromstarts": [0,2], + "fromstops": [2,3], + "length": 2 + }, + "outputs": { + "tocarry": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,2], + "fromstarts": [0,2], + "fromstops": [2,3], + "length": 2 + }, + "outputs": { + "tocarry": [0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,-1,1,-1,2], + "fromstarts": [0,2,3], + "fromstops": [2,3,5], + "length": 3 + }, + "outputs": { + "tocarry": [0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [3,-1,-1,2,1,0,-1], + "fromstarts": [0,1,2,3,5], + "fromstops": [1,2,3,5,7], + "length": 5 + }, + "outputs": { + "tocarry": [3,2,1,0] + } + } + ] + }, + { + "name": "awkward_ListArray_broadcast_tooffsets", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [], + "fromstarts": [], + "fromstops": [], + "lencontent": 0, + "offsetslength": 0 + }, + "outputs": { + "tocarry": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,1], + "fromstarts": [0], + "fromstops": [1], + "lencontent": 1, + "offsetslength": 2 + }, + "outputs": { + "tocarry": [0] + } + }, + { + "error": true, + "message": "stops[i] > len(content)", + "inputs": { + "fromoffsets": [0,1], + "fromstarts": [0], + "fromstops": [2], + "lencontent": 1, + "offsetslength": 2 + }, + "outputs": { + "tocarry": [] + } + }, + { + "error": true, + "message": "broadcast's offsets must be monotonically increasing", + "inputs": { + "fromoffsets": [2,1], + "fromstarts": [0], + "fromstops": [1], + "lencontent": 1, + "offsetslength": 2 + }, + "outputs": { + "tocarry": [] + } + }, + { + "error": true, + "message": "cannot broadcast nested list", + "inputs": { + "fromoffsets": [0,2], + "fromstarts": [0], + "fromstops": [1], + "lencontent": 1, + "offsetslength": 2 + }, + "outputs": { + "tocarry": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,2,4,6,8,10,12,13,14,15,16], + "fromstarts": [0,0,0,0,0,0,4,4,4,4], + "fromstops": [2,2,2,2,2,2,5,5,5,5], + "lencontent": 5, + "offsetslength": 11 + }, + "outputs": { + "tocarry": [0,1,0,1,0,1,0,1,0,1,0,1,4,4,4,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,2,4,6,8,10], + "fromstarts": [0,0,0,3,3], + "fromstops": [2,2,2,5,5], + "lencontent": 5, + "offsetslength": 6 + }, + "outputs": { + "tocarry": [0,1,0,1,0,1,3,4,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,2,4,6,8,10,12,14,16,18,20], + "fromstarts": [0,0,0,3,3,5,5,5,8,8], + "fromstops": [2,2,2,5,5,7,7,7,10,10], + "lencontent": 10, + "offsetslength": 11 + }, + "outputs": { + "tocarry": [0,1,0,1,0,1,3,4,3,4,5,6,5,6,5,6,8,9,8,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,6,9,12,15,18,21], + "fromstarts": [0,0,0,0,0,0,0], + "fromstops": [3,3,3,3,3,3,3], + "lencontent": 3, + "offsetslength": 8 + }, + "outputs": { + "tocarry": [0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,6,9,12,15,18], + "fromstarts": [0,0,0,0,0,0], + "fromstops": [3,3,3,3,3,3], + "lencontent": 3, + "offsetslength": 7 + }, + "outputs": { + "tocarry": [0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,6,9,12,15], + "fromstarts": [0,0,0,0,0], + "fromstops": [3,3,3,3,3], + "lencontent": 3, + "offsetslength": 6 + }, + "outputs": { + "tocarry": [0,1,2,0,1,2,0,1,2,0,1,2,0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,6,9], + "fromstarts": [0,0,0], + "fromstops": [3,3,3], + "lencontent": 3, + "offsetslength": 4 + }, + "outputs": { + "tocarry": [0,1,2,0,1,2,0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,6], + "fromstarts": [0,0], + "fromstops": [3,3], + "lencontent": 3, + "offsetslength": 3 + }, + "outputs": { + "tocarry": [0,1,2,0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,3], + "fromstarts": [0,3], + "fromstops": [3,3], + "lencontent": 20, + "offsetslength": 3 + }, + "outputs": { + "tocarry": [0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,8,13,18,23,28], + "fromstarts": [0,13,3,18,8,23], + "fromstops": [3,18,8,23,13,28], + "lencontent": 28, + "offsetslength": 7 + }, + "outputs": { + "tocarry": [0,1,2,13,14,15,16,17,3,4,5,6,7,18,19,20,21,22,8,9,10,11,12,23,24,25,26,27] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,2,4], + "fromstarts": [0,2], + "fromstops": [2,4], + "lencontent": 4, + "offsetslength": 3 + }, + "outputs": { + "tocarry": [0,1,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,4,9,13,18,23,28], + "fromstarts": [0,13,4,18,8,23], + "fromstops": [4,18,8,23,13,28], + "lencontent": 28, + "offsetslength": 7 + }, + "outputs": { + "tocarry": [0,1,2,3,13,14,15,16,17,4,5,6,7,18,19,20,21,22,8,9,10,11,12,23,24,25,26,27] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,4,9,14,19,24,29], + "fromstarts": [0,14,4,19,9,24], + "fromstops": [4,19,9,24,14,29], + "lencontent": 29, + "offsetslength": 7 + }, + "outputs": { + "tocarry": [0,1,2,3,14,15,16,17,18,4,5,6,7,8,19,20,21,22,23,9,10,11,12,13,24,25,26,27,28] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,5,10,15,18,21,24,29], + "fromstarts": [0,0,0,8,11,11,14], + "fromstops": [5,5,5,11,14,14,19], + "lencontent": 19, + "offsetslength": 8 + }, + "outputs": { + "tocarry": [0,1,2,3,4,0,1,2,3,4,0,1,2,3,4,8,9,10,11,12,13,11,12,13,14,15,16,17,18] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,3,4,5], + "fromstarts": [0,3,3,4], + "fromstops": [3,3,4,5], + "lencontent": 5, + "offsetslength": 5 + }, + "outputs": { + "tocarry": [0,1,2,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,3,5], + "fromstarts": [0,3,3], + "fromstops": [3,3,5], + "lencontent": 10, + "offsetslength": 4 + }, + "outputs": { + "tocarry": [0,1,2,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,3,5], + "fromstarts": [0,3,3], + "fromstops": [3,3,5], + "lencontent": 5, + "offsetslength": 4 + }, + "outputs": { + "tocarry": [0,1,2,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,3,5,5,8], + "fromstarts": [0,3,3,10,10], + "fromstops": [3,3,5,10,13], + "lencontent": 13, + "offsetslength": 6 + }, + "outputs": { + "tocarry": [0,1,2,3,4,10,11,12] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,5,10,15,20], + "fromstarts": [0,10,15,25], + "fromstops": [5,15,20,30], + "lencontent": 30, + "offsetslength": 5 + }, + "outputs": { + "tocarry": [0,1,2,3,4,10,11,12,13,14,15,16,17,18,19,25,26,27,28,29] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,5,10,11,12,17,22], + "fromstarts": [0,11,5,16,6,17], + "fromstops": [5,16,6,17,11,22], + "lencontent": 22, + "offsetslength": 7 + }, + "outputs": { + "tocarry": [0,1,2,3,4,11,12,13,14,15,5,16,6,7,8,9,10,17,18,19,20,21] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,5,10,14,18,23,28], + "fromstarts": [0,14,5,19,9,23], + "fromstops": [5,19,9,23,14,28], + "lencontent": 28, + "offsetslength": 7 + }, + "outputs": { + "tocarry": [0,1,2,3,4,14,15,16,17,18,5,6,7,8,19,20,21,22,9,10,11,12,13,23,24,25,26,27] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,5,10,15,20,24,28], + "fromstarts": [0,14,5,19,10,24], + "fromstops": [5,19,10,24,14,28], + "lencontent": 28, + "offsetslength": 7 + }, + "outputs": { + "tocarry": [0,1,2,3,4,14,15,16,17,18,5,6,7,8,9,19,20,21,22,23,10,11,12,13,24,25,26,27] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,3,5,6,10], + "fromstarts": [0,3,3,15,16], + "fromstops": [3,3,5,16,20], + "lencontent": 20, + "offsetslength": 6 + }, + "outputs": { + "tocarry": [0,1,2,3,4,15,16,17,18,19] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,5,10,15,20], + "fromstarts": [0,15,10,25], + "fromstops": [5,20,15,30], + "lencontent": 30, + "offsetslength": 5 + }, + "outputs": { + "tocarry": [0,1,2,3,4,15,16,17,18,19,10,11,12,13,14,25,26,27,28,29] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,5,10,15,19,24,28], + "fromstarts": [0,15,5,20,10,24], + "fromstops": [5,20,10,24,15,28], + "lencontent": 28, + "offsetslength": 7 + }, + "outputs": { + "tocarry": [0,1,2,3,4,15,16,17,18,19,5,6,7,8,9,20,21,22,23,10,11,12,13,14,24,25,26,27] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,5,10,15,20,25,28], + "fromstarts": [0,15,5,20,10,25], + "fromstops": [5,20,10,25,15,28], + "lencontent": 28, + "offsetslength": 7 + }, + "outputs": { + "tocarry": [0,1,2,3,4,15,16,17,18,19,5,6,7,8,9,20,21,22,23,24,10,11,12,13,14,25,26,27] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,5,10,15,20,25,29], + "fromstarts": [0,15,5,20,10,25], + "fromstops": [5,20,10,25,15,29], + "lencontent": 29, + "offsetslength": 7 + }, + "outputs": { + "tocarry": [0,1,2,3,4,15,16,17,18,19,5,6,7,8,9,20,21,22,23,24,10,11,12,13,14,25,26,27,28] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,5,10,15,20,25,30], + "fromstarts": [0,15,5,20,10,25], + "fromstops": [5,20,10,25,15,30], + "lencontent": 30, + "offsetslength": 7 + }, + "outputs": { + "tocarry": [0,1,2,3,4,15,16,17,18,19,5,6,7,8,9,20,21,22,23,24,10,11,12,13,14,25,26,27,28,29] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,5,10,15,20,25,30], + "fromstarts": [0,45,5,50,10,55], + "fromstops": [5,50,10,55,15,60], + "lencontent": 60, + "offsetslength": 7 + }, + "outputs": { + "tocarry": [0,1,2,3,4,45,46,47,48,49,5,6,7,8,9,50,51,52,53,54,10,11,12,13,14,55,56,57,58,59] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,6], + "fromstarts": [0,3], + "fromstops": [3,6], + "lencontent": 25, + "offsetslength": 3 + }, + "outputs": { + "tocarry": [0,1,2,3,4,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,6], + "fromstarts": [0,3], + "fromstops": [3,6], + "lencontent": 6, + "offsetslength": 3 + }, + "outputs": { + "tocarry": [0,1,2,3,4,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,6,10,14,17], + "fromstarts": [0,3,10,14,18], + "fromstops": [3,6,14,18,21], + "lencontent": 21, + "offsetslength": 6 + }, + "outputs": { + "tocarry": [0,1,2,3,4,5,10,11,12,13,14,15,16,17,18,19,20] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,6,9,12,15], + "fromstarts": [0,3,11,14,17], + "fromstops": [3,6,14,17,20], + "lencontent": 20, + "offsetslength": 6 + }, + "outputs": { + "tocarry": [0,1,2,3,4,5,11,12,13,14,15,16,17,18,19] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,6,9,12,15], + "fromstarts": [0,3,11,14,17], + "fromstops": [3,6,14,17,20], + "lencontent": 25, + "offsetslength": 6 + }, + "outputs": { + "tocarry": [0,1,2,3,4,5,11,12,13,14,15,16,17,18,19] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,6,10,14,17], + "fromstarts": [0,3,11,15,19], + "fromstops": [3,6,15,19,22], + "lencontent": 22, + "offsetslength": 6 + }, + "outputs": { + "tocarry": [0,1,2,3,4,5,11,12,13,14,15,16,17,18,19,20,21] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,3,4,6,7], + "fromstarts": [0,3,3,4,6], + "fromstops": [3,3,4,6,7], + "lencontent": 7, + "offsetslength": 6 + }, + "outputs": { + "tocarry": [0,1,2,3,4,5,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,3,7], + "fromstarts": [0,3,3], + "fromstops": [3,3,7], + "lencontent": 7, + "offsetslength": 4 + }, + "outputs": { + "tocarry": [0,1,2,3,4,5,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,7], + "fromstarts": [0,3], + "fromstops": [3,7], + "lencontent": 7, + "offsetslength": 3 + }, + "outputs": { + "tocarry": [0,1,2,3,4,5,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,3,5,6,10], + "fromstarts": [0,3,3,5,6], + "fromstops": [3,3,5,6,10], + "lencontent": 10, + "offsetslength": 6 + }, + "outputs": { + "tocarry": [0,1,2,3,4,5,6,7,8,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,3,5,8,8,10], + "fromstarts": [0,3,3,5,8,8], + "fromstops": [3,3,5,8,8,10], + "lencontent": 10, + "offsetslength": 7 + }, + "outputs": { + "tocarry": [0,1,2,3,4,5,6,7,8,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,5,10], + "fromstarts": [0,5], + "fromstops": [5,10], + "lencontent": 10, + "offsetslength": 3 + }, + "outputs": { + "tocarry": [0,1,2,3,4,5,6,7,8,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,4,7,7,9,9,11], + "fromstarts": [0,4,7,7,9,9], + "fromstops": [4,7,7,9,9,11], + "lencontent": 11, + "offsetslength": 7 + }, + "outputs": { + "tocarry": [0,1,2,3,4,5,6,7,8,9,10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,8,12,16,19], + "fromstarts": [0,3,8,12,16], + "fromstops": [3,8,12,16,19], + "lencontent": 19, + "offsetslength": 6 + }, + "outputs": { + "tocarry": [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,6,11,15,19,22], + "fromstarts": [0,3,6,11,15,19], + "fromstops": [3,6,11,15,19,22], + "lencontent": 22, + "offsetslength": 7 + }, + "outputs": { + "tocarry": [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,5,10,15,20,25,30], + "fromstarts": [0,5,10,15,20,25], + "fromstops": [5,10,15,20,25,30], + "lencontent": 30, + "offsetslength": 7 + }, + "outputs": { + "tocarry": [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,7,14,21,28,35,42,49,56,63,70,77,84,91,98,105,112,119,126,133,140,147,154,161,168,175,182,189,196,203,210], + "fromstarts": [0,7,14,21,28,35,42,49,56,63,70,77,84,91,98,105,112,119,126,133,140,147,154,161,168,175,182,189,196,203], + "fromstops": [7,14,21,28,35,42,49,56,63,70,77,84,91,98,105,112,119,126,133,140,147,154,161,168,175,182,189,196,203,210], + "lencontent": 210, + "offsetslength": 31 + }, + "outputs": { + "tocarry": [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,5,10,15,20,25,30], + "fromstarts": [0,5,10,45,50,55], + "fromstops": [5,10,15,50,55,60], + "lencontent": 60, + "offsetslength": 7 + }, + "outputs": { + "tocarry": [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,6,11,15,19,22], + "fromstarts": [0,3,8,13,17,21], + "fromstops": [3,6,13,17,21,24], + "lencontent": 24, + "offsetslength": 7 + }, + "outputs": { + "tocarry": [0,1,2,3,4,5,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,5,8,11,14,19], + "fromstarts": [0,8,11,11,14], + "fromstops": [5,11,14,14,19], + "lencontent": 19, + "offsetslength": 6 + }, + "outputs": { + "tocarry": [0,1,2,3,4,8,9,10,11,12,13,11,12,13,14,15,16,17,18] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,3,5,8,9], + "fromstarts": [0,3,4,5,8], + "fromstops": [3,3,6,8,9], + "lencontent": 10, + "offsetslength": 6 + }, + "outputs": { + "tocarry": [0,1,2,4,5,5,6,7,8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,5,6,7,7,9], + "fromstarts": [0,4,6,3,6,7], + "fromstops": [3,6,7,4,6,9], + "lencontent": 9, + "offsetslength": 7 + }, + "outputs": { + "tocarry": [0,1,2,4,5,6,3,7,8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,5,6,7,9], + "fromstarts": [0,4,6,3,7], + "fromstops": [3,6,7,4,9], + "lencontent": 9, + "offsetslength": 6 + }, + "outputs": { + "tocarry": [0,1,2,4,5,6,3,7,8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,2,3,4,5,6,8], + "fromstarts": [0,2,4,5,6,9], + "fromstops": [2,3,5,6,7,11], + "lencontent": 11, + "offsetslength": 7 + }, + "outputs": { + "tocarry": [0,1,2,4,5,6,9,10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,3,5,6,8], + "fromstarts": [0,4,4,6,9], + "fromstops": [3,4,6,7,11], + "lencontent": 11, + "offsetslength": 6 + }, + "outputs": { + "tocarry": [0,1,2,4,5,6,9,10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,3,5], + "fromstarts": [0,3,5], + "fromstops": [3,3,7], + "lencontent": 7, + "offsetslength": 4 + }, + "outputs": { + "tocarry": [0,1,2,5,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,3,7], + "fromstarts": [0,3,5], + "fromstops": [3,3,9], + "lencontent": 9, + "offsetslength": 4 + }, + "outputs": { + "tocarry": [0,1,2,5,6,7,8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,7], + "fromstarts": [0,5], + "fromstops": [3,9], + "lencontent": 9, + "offsetslength": 3 + }, + "outputs": { + "tocarry": [0,1,2,5,6,7,8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,5,7,8,9,10], + "fromstarts": [0,6,3,8,5,9], + "fromstops": [3,8,5,9,6,10], + "lencontent": 10, + "offsetslength": 7 + }, + "outputs": { + "tocarry": [0,1,2,6,7,3,4,8,5,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,5,5,6,8,9], + "fromstarts": [0,6,3,8,3,5], + "fromstops": [3,8,3,9,5,6], + "lencontent": 9, + "offsetslength": 7 + }, + "outputs": { + "tocarry": [0,1,2,6,7,8,3,4,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,3,7], + "fromstarts": [0,3,6], + "fromstops": [3,3,10], + "lencontent": 10, + "offsetslength": 4 + }, + "outputs": { + "tocarry": [0,1,2,6,7,8,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,2,4,5,6,6,6], + "fromstarts": [0,3,2,5,3,6], + "fromstops": [2,5,3,6,3,6], + "lencontent": 6, + "offsetslength": 7 + }, + "outputs": { + "tocarry": [0,1,3,4,2,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,2,2,4,5,6], + "fromstarts": [0,3,3,5,8], + "fromstops": [2,3,5,6,9], + "lencontent": 9, + "offsetslength": 6 + }, + "outputs": { + "tocarry": [0,1,3,4,5,8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,6,9], + "fromstarts": [11,14,17], + "fromstops": [14,17,20], + "lencontent": 25, + "offsetslength": 4 + }, + "outputs": { + "tocarry": [11,12,13,14,15,16,17,18,19] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,5,10,15,20,25,30], + "fromstarts": [1,16,6,21,11,26], + "fromstops": [6,21,11,26,16,31], + "lencontent": 31, + "offsetslength": 7 + }, + "outputs": { + "tocarry": [1,2,3,4,5,16,17,18,19,20,6,7,8,9,10,21,22,23,24,25,11,12,13,14,15,26,27,28,29,30] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,3,5], + "fromstarts": [1,99,5], + "fromstops": [4,99,7], + "lencontent": 7, + "offsetslength": 4 + }, + "outputs": { + "tocarry": [1,2,3,5,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,5,10,15,20], + "fromstarts": [15,10,5,0], + "fromstops": [20,15,10,5], + "lencontent": 20, + "offsetslength": 5 + }, + "outputs": { + "tocarry": [15,16,17,18,19,10,11,12,13,14,5,6,7,8,9,0,1,2,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,5,10,15,20], + "fromstarts": [15,5,10,0], + "fromstops": [20,10,15,5], + "lencontent": 20, + "offsetslength": 5 + }, + "outputs": { + "tocarry": [15,16,17,18,19,5,6,7,8,9,10,11,12,13,14,0,1,2,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,4], + "fromstarts": [16], + "fromstops": [20], + "lencontent": 20, + "offsetslength": 2 + }, + "outputs": { + "tocarry": [16,17,18,19] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,0,1,3], + "fromstarts": [2,2,3], + "fromstops": [2,3,5], + "lencontent": 5, + "offsetslength": 4 + }, + "outputs": { + "tocarry": [2,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,1,2,3], + "fromstarts": [2,4,5], + "fromstops": [3,5,6], + "lencontent": 6, + "offsetslength": 4 + }, + "outputs": { + "tocarry": [2,4,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,5,10,15,20,25,30], + "fromstarts": [25,10,20,5,15,0], + "fromstops": [30,15,25,10,20,5], + "lencontent": 30, + "offsetslength": 7 + }, + "outputs": { + "tocarry": [25,26,27,28,29,10,11,12,13,14,20,21,22,23,24,5,6,7,8,9,15,16,17,18,19,0,1,2,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,5,10,15,20,25,30], + "fromstarts": [25,20,15,10,5,0], + "fromstops": [30,25,20,15,10,5], + "lencontent": 30, + "offsetslength": 7 + }, + "outputs": { + "tocarry": [25,26,27,28,29,20,21,22,23,24,15,16,17,18,19,10,11,12,13,14,5,6,7,8,9,0,1,2,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,1,2,2,5,7], + "fromstarts": [3,3,3,0,4], + "fromstops": [4,4,3,3,6], + "lencontent": 6, + "offsetslength": 6 + }, + "outputs": { + "tocarry": [3,3,0,1,2,4,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,2,2,5,6,7,11], + "fromstarts": [3,3,0,5,5,6], + "fromstops": [5,3,3,6,6,10], + "lencontent": 10, + "offsetslength": 7 + }, + "outputs": { + "tocarry": [3,4,0,1,2,5,5,6,7,8,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,2,3], + "fromstarts": [3,15], + "fromstops": [5,16], + "lencontent": 20, + "offsetslength": 3 + }, + "outputs": { + "tocarry": [3,4,15] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,2,4,4,7], + "fromstarts": [3,3,3,0], + "fromstops": [5,5,3,3], + "lencontent": 5, + "offsetslength": 5 + }, + "outputs": { + "tocarry": [3,4,3,4,0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,4,7,7,9,9,11], + "fromstarts": [3,0,999,2,6,10], + "fromstops": [7,3,999,4,6,12], + "lencontent": 12, + "offsetslength": 7 + }, + "outputs": { + "tocarry": [3,4,5,6,0,1,2,2,3,10,11] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,2,2,2,2,6], + "fromstarts": [3,5,5,5,5], + "fromstops": [5,5,5,5,9], + "lencontent": 9, + "offsetslength": 6 + }, + "outputs": { + "tocarry": [3,4,5,6,7,8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,6,9,12,14,16], + "fromstarts": [3,6,17,20,11,25], + "fromstops": [6,9,20,23,13,27], + "lencontent": 28, + "offsetslength": 7 + }, + "outputs": { + "tocarry": [3,4,5,6,7,8,17,18,19,20,21,22,11,12,25,26] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,8,12,16,19], + "fromstarts": [3,6,11,15,19], + "fromstops": [6,11,15,19,22], + "lencontent": 22, + "offsetslength": 6 + }, + "outputs": { + "tocarry": [3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,0,2,6], + "fromstarts": [3,3,6], + "fromstops": [3,5,10], + "lencontent": 10, + "offsetslength": 4 + }, + "outputs": { + "tocarry": [3,4,6,7,8,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,2,6], + "fromstarts": [3,6], + "fromstops": [5,10], + "lencontent": 10, + "offsetslength": 3 + }, + "outputs": { + "tocarry": [3,4,6,7,8,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,0,2], + "fromstarts": [4,4], + "fromstops": [4,6], + "lencontent": 6, + "offsetslength": 3 + }, + "outputs": { + "tocarry": [4,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,0,2,7], + "fromstarts": [4,4,7], + "fromstops": [4,6,12], + "lencontent": 12, + "offsetslength": 4 + }, + "outputs": { + "tocarry": [4,5,7,8,9,10,11] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,1,2,5,5,7,7,11], + "fromstarts": [5,5,0,3,3,6,6], + "fromstops": [6,6,3,3,5,6,10], + "lencontent": 10, + "offsetslength": 8 + }, + "outputs": { + "tocarry": [5,5,0,1,2,3,4,6,7,8,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,0,1,4], + "fromstarts": [5,5,6], + "fromstops": [5,6,9], + "lencontent": 9, + "offsetslength": 4 + }, + "outputs": { + "tocarry": [5,6,7,8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,1,1,5], + "fromstarts": [5,6,6], + "fromstops": [6,6,10], + "lencontent": 10, + "offsetslength": 4 + }, + "outputs": { + "tocarry": [5,6,7,8,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,1,5], + "fromstarts": [5,6], + "fromstops": [6,10], + "lencontent": 10, + "offsetslength": 3 + }, + "outputs": { + "tocarry": [5,6,7,8,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,4,6,6,9], + "fromstarts": [6,5,3,3,0], + "fromstops": [9,6,5,3,3], + "lencontent": 9, + "offsetslength": 6 + }, + "outputs": { + "tocarry": [6,7,8,5,3,4,0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3,4,7,10], + "fromstarts": [6,5,6,0], + "fromstops": [9,6,9,3], + "lencontent": 9, + "offsetslength": 5 + }, + "outputs": { + "tocarry": [6,7,8,5,6,7,8,0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,1,1,6], + "fromstarts": [6,7,7], + "fromstops": [7,7,12], + "lencontent": 12, + "offsetslength": 4 + }, + "outputs": { + "tocarry": [6,7,8,9,10,11] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,5,8,11,14,19], + "fromstarts": [6,11,14,17,20], + "fromstops": [11,14,17,20,25], + "lencontent": 25, + "offsetslength": 6 + }, + "outputs": { + "tocarry": [6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,4,5,7,10], + "fromstarts": [6,5,3,0], + "fromstops": [10,6,5,3], + "lencontent": 10, + "offsetslength": 5 + }, + "outputs": { + "tocarry": [6,7,8,9,5,3,4,0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,4,5,7,7,10], + "fromstarts": [6,5,3,3,0], + "fromstops": [10,6,5,3,3], + "lencontent": 10, + "offsetslength": 6 + }, + "outputs": { + "tocarry": [6,7,8,9,5,3,4,0,1,2] + } + } + ] + }, + { + "name": "awkward_ListArray_compact_offsets", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [], + "fromstops": [], + "length": 0 + }, + "outputs": { + "tooffsets": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [1], + "fromstops": [1], + "length": 1 + }, + "outputs": { + "tooffsets": [0,0] + } + }, + { + "error": true, + "message": "stops[i] < starts[i]", + "inputs": { + "fromstarts": [2,2,6], + "fromstops": [2,3,5], + "length": 3 + }, + "outputs": { + "tooffsets": [0,0,1,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [2,2,3], + "fromstops": [2,3,5], + "length": 3 + }, + "outputs": { + "tooffsets": [0,0,1,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [5,5,6], + "fromstops": [5,6,9], + "length": 3 + }, + "outputs": { + "tooffsets": [0,0,1,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [4,4], + "fromstops": [4,6], + "length": 2 + }, + "outputs": { + "tooffsets": [0,0,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [3,3,6], + "fromstops": [3,5,10], + "length": 3 + }, + "outputs": { + "tooffsets": [0,0,2,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [4,4,7], + "fromstops": [4,6,12], + "length": 3 + }, + "outputs": { + "tooffsets": [0,0,2,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [5,6,6], + "fromstops": [6,6,10], + "length": 3 + }, + "outputs": { + "tooffsets": [0,1,1,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [6,7,7], + "fromstops": [7,7,12], + "length": 3 + }, + "outputs": { + "tooffsets": [0,1,1,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [3,3,3,0,4], + "fromstops": [4,4,3,3,6], + "length": 5 + }, + "outputs": { + "tooffsets": [0,1,2,2,5,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [2,4,5], + "fromstops": [3,5,6], + "length": 3 + }, + "outputs": { + "tooffsets": [0,1,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [5,5,0,3,3,6,6], + "fromstops": [6,6,3,3,5,6,10], + "length": 7 + }, + "outputs": { + "tooffsets": [0,1,2,5,5,7,7,11] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [3,5,5,5,5], + "fromstops": [5,5,5,5,9], + "length": 5 + }, + "outputs": { + "tooffsets": [0,2,2,2,2,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3,3,5,8], + "fromstops": [2,3,5,6,9], + "length": 5 + }, + "outputs": { + "tooffsets": [0,2,2,4,5,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [3,3,0,5,5,6], + "fromstops": [5,3,3,6,6,10], + "length": 6 + }, + "outputs": { + "tooffsets": [0,2,2,5,6,7,11] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [3,15], + "fromstops": [5,16], + "length": 2 + }, + "outputs": { + "tooffsets": [0,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,2,4,5,6,9], + "fromstops": [2,3,5,6,7,11], + "length": 6 + }, + "outputs": { + "tooffsets": [0,2,3,4,5,6,8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,2], + "fromstops": [2,4], + "length": 2 + }, + "outputs": { + "tooffsets": [0,2,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [3,3,3,0], + "fromstops": [5,5,3,3], + "length": 4 + }, + "outputs": { + "tooffsets": [0,2,4,4,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3,2,5,3,6], + "fromstops": [2,5,3,6,3,6], + "length": 6 + }, + "outputs": { + "tooffsets": [0,2,4,5,6,6,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,0,0,3,3], + "fromstops": [2,2,2,5,5], + "length": 5 + }, + "outputs": { + "tooffsets": [0,2,4,6,8,10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,0,0,0,0,0,4,4,4,4], + "fromstops": [2,2,2,2,2,2,5,5,5,5], + "length": 10 + }, + "outputs": { + "tooffsets": [0,2,4,6,8,10,12,13,14,15,16] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,0,0,3,3,5,5,5,8,8], + "fromstops": [2,2,2,5,5,7,7,7,10,10], + "length": 10 + }, + "outputs": { + "tooffsets": [0,2,4,6,8,10,12,14,16,18,20] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [3,6], + "fromstops": [5,10], + "length": 2 + }, + "outputs": { + "tooffsets": [0,2,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3], + "fromstops": [3,3], + "length": 2 + }, + "outputs": { + "tooffsets": [0,3,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3,3,4], + "fromstops": [3,3,4,5], + "length": 4 + }, + "outputs": { + "tooffsets": [0,3,3,4,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3,3], + "fromstops": [3,3,5], + "length": 3 + }, + "outputs": { + "tooffsets": [0,3,3,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3,5], + "fromstops": [3,3,7], + "length": 3 + }, + "outputs": { + "tooffsets": [0,3,3,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [1,99,5], + "fromstops": [4,99,7], + "length": 3 + }, + "outputs": { + "tooffsets": [0,3,3,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3,3,10,10], + "fromstops": [3,3,5,10,13], + "length": 5 + }, + "outputs": { + "tooffsets": [0,3,3,5,5,8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3,3,15,16], + "fromstops": [3,3,5,16,20], + "length": 5 + }, + "outputs": { + "tooffsets": [0,3,3,5,6,10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,4,4,6,9], + "fromstops": [3,4,6,7,11], + "length": 5 + }, + "outputs": { + "tooffsets": [0,3,3,5,6,8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3,4,5,8], + "fromstops": [3,3,6,8,9], + "length": 5 + }, + "outputs": { + "tooffsets": [0,3,3,5,8,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3,5], + "fromstops": [3,3,9], + "length": 3 + }, + "outputs": { + "tooffsets": [0,3,3,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3,6], + "fromstops": [3,3,10], + "length": 3 + }, + "outputs": { + "tooffsets": [0,3,3,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [6,5,3,3,0], + "fromstops": [9,6,5,3,3], + "length": 5 + }, + "outputs": { + "tooffsets": [0,3,4,6,6,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [6,5,6,0], + "fromstops": [9,6,9,3], + "length": 4 + }, + "outputs": { + "tooffsets": [0,3,4,7,10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,6,3,8,3,5], + "fromstops": [3,8,3,9,5,6], + "length": 6 + }, + "outputs": { + "tooffsets": [0,3,5,5,6,8,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,4,6,3,6,7], + "fromstops": [3,6,7,4,6,9], + "length": 6 + }, + "outputs": { + "tooffsets": [0,3,5,6,7,7,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,4,6,3,7], + "fromstops": [3,6,7,4,9], + "length": 5 + }, + "outputs": { + "tooffsets": [0,3,5,6,7,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,6,3,8,5,9], + "fromstops": [3,8,5,9,6,10], + "length": 6 + }, + "outputs": { + "tooffsets": [0,3,5,7,8,9,10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,0], + "fromstops": [3,3], + "length": 2 + }, + "outputs": { + "tooffsets": [0,3,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3], + "fromstops": [3,6], + "length": 2 + }, + "outputs": { + "tooffsets": [0,3,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3,10,14,18], + "fromstops": [3,6,14,18,21], + "length": 5 + }, + "outputs": { + "tooffsets": [0,3,6,10,14,17] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3,6,11,15,19], + "fromstops": [3,6,11,15,19,22], + "length": 6 + }, + "outputs": { + "tooffsets": [0,3,6,11,15,19,22] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,0,0], + "fromstops": [3,3,3], + "length": 3 + }, + "outputs": { + "tooffsets": [0,3,6,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [3,6,17,20,11,25], + "fromstops": [6,9,20,23,13,27], + "length": 6 + }, + "outputs": { + "tooffsets": [0,3,6,9,12,14,16] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,0,0,0,0], + "fromstops": [3,3,3,3,3], + "length": 5 + }, + "outputs": { + "tooffsets": [0,3,6,9,12,15] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3,11,14,17], + "fromstops": [3,6,14,17,20], + "length": 5 + }, + "outputs": { + "tooffsets": [0,3,6,9,12,15] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,0,0,0,0,0], + "fromstops": [3,3,3,3,3,3], + "length": 6 + }, + "outputs": { + "tooffsets": [0,3,6,9,12,15,18] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,0,0,0,0,0,0], + "fromstops": [3,3,3,3,3,3,3], + "length": 7 + }, + "outputs": { + "tooffsets": [0,3,6,9,12,15,18,21] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,5], + "fromstops": [3,9], + "length": 2 + }, + "outputs": { + "tooffsets": [0,3,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [3,6,11,15,19], + "fromstops": [6,11,15,19,22], + "length": 5 + }, + "outputs": { + "tooffsets": [0,3,8,12,16,19] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,13,3,18,8,23], + "fromstops": [3,18,8,23,13,28], + "length": 6 + }, + "outputs": { + "tooffsets": [0,3,8,13,18,23,28] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [16], + "fromstops": [20], + "length": 1 + }, + "outputs": { + "tooffsets": [0,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [6,5,3,0], + "fromstops": [10,6,5,3], + "length": 4 + }, + "outputs": { + "tooffsets": [0,4,5,7,10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [6,5,3,3,0], + "fromstops": [10,6,5,3,3], + "length": 5 + }, + "outputs": { + "tooffsets": [0,4,5,7,7,10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [3,0,999,2,6,10], + "fromstops": [7,3,999,4,6,12], + "length": 6 + }, + "outputs": { + "tooffsets": [0,4,7,7,9,9,11] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,13,4,18,8,23], + "fromstops": [4,18,8,23,13,28], + "length": 6 + }, + "outputs": { + "tooffsets": [0,4,9,13,18,23,28] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,14,4,19,9,24], + "fromstops": [4,19,9,24,14,29], + "length": 6 + }, + "outputs": { + "tooffsets": [0,4,9,14,19,24,29] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,11,5,16,6,17], + "fromstops": [5,16,6,17,11,22], + "length": 6 + }, + "outputs": { + "tooffsets": [0,5,10,11,12,17,22] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,14,5,19,9,23], + "fromstops": [5,19,9,23,14,28], + "length": 6 + }, + "outputs": { + "tooffsets": [0,5,10,14,18,23,28] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,0,0,8,11,11,14], + "fromstops": [5,5,5,11,14,14,19], + "length": 7 + }, + "outputs": { + "tooffsets": [0,5,10,15,18,21,24,29] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,15,5,20,10,24], + "fromstops": [5,20,10,24,15,28], + "length": 6 + }, + "outputs": { + "tooffsets": [0,5,10,15,19,24,28] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,10,15,25], + "fromstops": [5,15,20,30], + "length": 4 + }, + "outputs": { + "tooffsets": [0,5,10,15,20] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,15,10,25], + "fromstops": [5,20,15,30], + "length": 4 + }, + "outputs": { + "tooffsets": [0,5,10,15,20] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [15,10,5,0], + "fromstops": [20,15,10,5], + "length": 4 + }, + "outputs": { + "tooffsets": [0,5,10,15,20] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [15,5,10,0], + "fromstops": [20,10,15,5], + "length": 4 + }, + "outputs": { + "tooffsets": [0,5,10,15,20] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,14,5,19,10,24], + "fromstops": [5,19,10,24,14,28], + "length": 6 + }, + "outputs": { + "tooffsets": [0,5,10,15,20,24,28] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,15,5,20,10,25], + "fromstops": [5,20,10,25,15,28], + "length": 6 + }, + "outputs": { + "tooffsets": [0,5,10,15,20,25,28] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,15,5,20,10,25], + "fromstops": [5,20,10,25,15,29], + "length": 6 + }, + "outputs": { + "tooffsets": [0,5,10,15,20,25,29] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,15,5,20,10,25], + "fromstops": [5,20,10,25,15,30], + "length": 6 + }, + "outputs": { + "tooffsets": [0,5,10,15,20,25,30] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,45,5,50,10,55], + "fromstops": [5,50,10,55,15,60], + "length": 6 + }, + "outputs": { + "tooffsets": [0,5,10,15,20,25,30] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,5,10,15,20,25], + "fromstops": [5,10,15,20,25,30], + "length": 6 + }, + "outputs": { + "tooffsets": [0,5,10,15,20,25,30] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,5,10,45,50,55], + "fromstops": [5,10,15,50,55,60], + "length": 6 + }, + "outputs": { + "tooffsets": [0,5,10,15,20,25,30] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [1,16,6,21,11,26], + "fromstops": [6,21,11,26,16,31], + "length": 6 + }, + "outputs": { + "tooffsets": [0,5,10,15,20,25,30] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [25,10,20,5,15,0], + "fromstops": [30,15,25,10,20,5], + "length": 6 + }, + "outputs": { + "tooffsets": [0,5,10,15,20,25,30] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [25,20,15,10,5,0], + "fromstops": [30,25,20,15,10,5], + "length": 6 + }, + "outputs": { + "tooffsets": [0,5,10,15,20,25,30] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,8,11,11,14], + "fromstops": [5,11,14,14,19], + "length": 5 + }, + "outputs": { + "tooffsets": [0,5,8,11,14,19] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [6,11,14,17,20], + "fromstops": [11,14,17,20,25], + "length": 5 + }, + "outputs": { + "tooffsets": [0,5,8,11,14,19] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,7,14,21,28,35,42,49,56,63,70,77,84,91,98,105,112,119,126,133,140,147,154,161,168,175,182,189,196,203], + "fromstops": [7,14,21,28,35,42,49,56,63,70,77,84,91,98,105,112,119,126,133,140,147,154,161,168,175,182,189,196,203,210], + "length": 30 + }, + "outputs": { + "tooffsets": [0,7,14,21,28,35,42,49,56,63,70,77,84,91,98,105,112,119,126,133,140,147,154,161,168,175,182,189,196,203,210] + } + } + ] + }, + { + "name": "awkward_RegularArray_reduce_local_nextparents_64", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "size": 3, + "length": 0 + }, + "outputs": { + "nextparents": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "size": 0, + "length": 0 + }, + "outputs": { + "nextparents": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "size": 0, + "length": 2 + }, + "outputs": { + "nextparents": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "size": 3, + "length": 2 + }, + "outputs": { + "nextparents": [0,0,0,1,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "size": 1, + "length": 1 + }, + "outputs": { + "nextparents": [0] + } + } + ] + }, + { + "name": "awkward_RegularArray_localindex", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "length": 0, + "size": 3 + }, + "outputs": { + "toindex": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 0, + "size": 0 + }, + "outputs": { + "toindex": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 2, + "size": 0 + }, + "outputs": { + "toindex": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 2, + "size": 3 + }, + "outputs": { + "toindex": [0,1,2,0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 6, + "size": 5 + }, + "outputs": { + "toindex": [0,1,2,3,4,0,1,2,3,4,0,1,2,3,4,0,1,2,3,4,0,1,2,3,4,0,1,2,3,4] + } + } + ] + }, + { + "name": "awkward_RegularArray_rpad_and_clip_axis1", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "length": 3, + "size": 0, + "target": 2 + }, + "outputs": { + "toindex": [-1,-1,-1,-1,-1,-1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 0, + "size": 0, + "target": 0 + }, + "outputs": { + "toindex": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 0, + "size": 0, + "target": 2 + }, + "outputs": { + "toindex": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 0, + "size": 2, + "target": 2 + }, + "outputs": { + "toindex": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 3, + "size": 2, + "target": 2 + }, + "outputs": { + "toindex": [0,1,2,3,4,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 2, + "size": 3, + "target": 3 + }, + "outputs": { + "toindex": [0,1,2,3,4,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 3, + "size": 3, + "target": 3 + }, + "outputs": { + "toindex": [0,1,2,3,4,5,6,7,8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 3, + "size": 3, + "target": 2 + }, + "outputs": { + "toindex": [0,1,3,4,6,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 6, + "size": 5, + "target": 2 + }, + "outputs": { + "toindex": [0,1,5,6,10,11,15,16,20,21,25,26] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 3, + "size": 2, + "target": 1 + }, + "outputs": { + "toindex": [0,2,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 3, + "size": 3, + "target": 1 + }, + "outputs": { + "toindex": [0,3,6] + } + } + ] + }, + { + "name": "awkward_RegularArray_getitem_carry", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [0,0], + "lencarry": 2, + "size": 0 + }, + "outputs": { + "tocarry": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [], + "lencarry": 0, + "size": 1 + }, + "outputs": { + "tocarry": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [], + "lencarry": 0, + "size": 0 + }, + "outputs": { + "tocarry": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [0,0], + "lencarry": 2, + "size": 1 + }, + "outputs": { + "tocarry": [0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [0,0,0,1,1,1], + "lencarry": 6, + "size": 1 + }, + "outputs": { + "tocarry": [0,0,0,1,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [0,0,0,2,2], + "lencarry": 5, + "size": 1 + }, + "outputs": { + "tocarry": [0,0,0,2,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [0,0,1,1,2,2,3,3,4,4], + "lencarry": 10, + "size": 1 + }, + "outputs": { + "tocarry": [0,0,1,1,2,2,3,3,4,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [0,1,0,1,0,1,3,4,3,4], + "lencarry": 10, + "size": 1 + }, + "outputs": { + "tocarry": [0,1,0,1,0,1,3,4,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [0,0,1,1], + "lencarry": 4, + "size": 2 + }, + "outputs": { + "tocarry": [0,1,0,1,2,3,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [0,0,0,0], + "lencarry": 4, + "size": 3 + }, + "outputs": { + "tocarry": [0,1,2,0,1,2,0,1,2,0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [0,1,1,2], + "lencarry": 4, + "size": 2 + }, + "outputs": { + "tocarry": [0,1,2,3,2,3,4,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [0,0], + "lencarry": 2, + "size": 5 + }, + "outputs": { + "tocarry": [0,1,2,3,4,0,1,2,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [0,0,0,1,1,1], + "lencarry": 6, + "size": 5 + }, + "outputs": { + "tocarry": [0,1,2,3,4,0,1,2,3,4,0,1,2,3,4,5,6,7,8,9,5,6,7,8,9,5,6,7,8,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [0,2,3,5], + "lencarry": 4, + "size": 5 + }, + "outputs": { + "tocarry": [0,1,2,3,4,10,11,12,13,14,15,16,17,18,19,25,26,27,28,29] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [0,2,4], + "lencarry": 3, + "size": 5 + }, + "outputs": { + "tocarry": [0,1,2,3,4,10,11,12,13,14,20,21,22,23,24] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [0,3,6,9], + "lencarry": 4, + "size": 5 + }, + "outputs": { + "tocarry": [0,1,2,3,4,15,16,17,18,19,30,31,32,33,34,45,46,47,48,49] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [0,3,1,4,2,5], + "lencarry": 6, + "size": 5 + }, + "outputs": { + "tocarry": [0,1,2,3,4,15,16,17,18,19,5,6,7,8,9,20,21,22,23,24,10,11,12,13,14,25,26,27,28,29] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [0,4,8,10], + "lencarry": 4, + "size": 5 + }, + "outputs": { + "tocarry": [0,1,2,3,4,20,21,22,23,24,40,41,42,43,44,50,51,52,53,54] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [0,1,1,1], + "lencarry": 4, + "size": 3 + }, + "outputs": { + "tocarry": [0,1,2,3,4,5,3,4,5,3,4,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [0,1,2,0,1,2,0,1,2,0,1,2], + "lencarry": 12, + "size": 5 + }, + "outputs": { + "tocarry": [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [0,1,2,3,4,5,3,4,5,3,4,5], + "lencarry": 12, + "size": 5 + }, + "outputs": { + "tocarry": [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [2,0,0,1], + "lencarry": 4, + "size": 5 + }, + "outputs": { + "tocarry": [10,11,12,13,14,0,1,2,3,4,0,1,2,3,4,5,6,7,8,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [2,2,2,2], + "lencarry": 4, + "size": 5 + }, + "outputs": { + "tocarry": [10,11,12,13,14,10,11,12,13,14,10,11,12,13,14,10,11,12,13,14] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [2], + "lencarry": 1, + "size": 5 + }, + "outputs": { + "tocarry": [10,11,12,13,14] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [2,5,8,11], + "lencarry": 4, + "size": 5 + }, + "outputs": { + "tocarry": [10,11,12,13,14,25,26,27,28,29,40,41,42,43,44,55,56,57,58,59] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [1], + "lencarry": 1, + "size": 1 + }, + "outputs": { + "tocarry": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [3,4,5,0,1,2,0,1,2,3,4,5], + "lencarry": 12, + "size": 5 + }, + "outputs": { + "tocarry": [15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [3,4,5,3,4,5,3,4,5,3,4,5], + "lencarry": 12, + "size": 5 + }, + "outputs": { + "tocarry": [15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [3,4,5], + "lencarry": 3, + "size": 5 + }, + "outputs": { + "tocarry": [15,16,17,18,19,20,21,22,23,24,25,26,27,28,29] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [4,4,4,4], + "lencarry": 4, + "size": 5 + }, + "outputs": { + "tocarry": [20,21,22,23,24,20,21,22,23,24,20,21,22,23,24,20,21,22,23,24] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [4], + "lencarry": 1, + "size": 5 + }, + "outputs": { + "tocarry": [20,21,22,23,24] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [2], + "lencarry": 1, + "size": 1 + }, + "outputs": { + "tocarry": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [1,0], + "lencarry": 2, + "size": 2 + }, + "outputs": { + "tocarry": [2,3,0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [1], + "lencarry": 1, + "size": 2 + }, + "outputs": { + "tocarry": [2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [1,1,0,0], + "lencarry": 4, + "size": 2 + }, + "outputs": { + "tocarry": [2,3,2,3,0,1,0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [1,2], + "lencarry": 2, + "size": 2 + }, + "outputs": { + "tocarry": [2,3,4,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [1,0,0,1], + "lencarry": 4, + "size": 3 + }, + "outputs": { + "tocarry": [3,4,5,0,1,2,0,1,2,3,4,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [1], + "lencarry": 1, + "size": 3 + }, + "outputs": { + "tocarry": [3,4,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [1,1,1,1], + "lencarry": 4, + "size": 3 + }, + "outputs": { + "tocarry": [3,4,5,3,4,5,3,4,5,3,4,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [2], + "lencarry": 1, + "size": 2 + }, + "outputs": { + "tocarry": [4,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [1,2], + "lencarry": 2, + "size": 4 + }, + "outputs": { + "tocarry": [4,5,6,7,8,9,10,11] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [1,2], + "lencarry": 2, + "size": 5 + }, + "outputs": { + "tocarry": [5,6,7,8,9,10,11,12,13,14] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [1,2,3,4,5], + "lencarry": 5, + "size": 5 + }, + "outputs": { + "tocarry": [5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [1], + "lencarry": 1, + "size": 5 + }, + "outputs": { + "tocarry": [5,6,7,8,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [1,3,6,10], + "lencarry": 4, + "size": 5 + }, + "outputs": { + "tocarry": [5,6,7,8,9,15,16,17,18,19,30,31,32,33,34,50,51,52,53,54] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [1,4,0,5], + "lencarry": 4, + "size": 5 + }, + "outputs": { + "tocarry": [5,6,7,8,9,20,21,22,23,24,0,1,2,3,4,25,26,27,28,29] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromcarry": [2,1,1,2], + "lencarry": 4, + "size": 4 + }, + "outputs": { + "tocarry": [8,9,10,11,4,5,6,7,4,5,6,7,8,9,10,11] + } + } + ] + }, + { + "name": "awkward_RegularArray_getitem_jagged_expand", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "regularlength": 0, + "regularsize": 0, + "singleoffsets": [0] + }, + "outputs": { + "multistarts": [], + "multistops": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "regularlength": 1, + "regularsize": 0, + "singleoffsets": [1] + }, + "outputs": { + "multistarts": [], + "multistops": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "regularlength": 0, + "regularsize": 0, + "singleoffsets": [0] + }, + "outputs": { + "multistarts": [], + "multistops": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "regularlength": 1, + "regularsize": 1, + "singleoffsets": [0,2] + }, + "outputs": { + "multistarts": [0], + "multistops": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "regularlength": 2, + "regularsize": 1, + "singleoffsets": [0,2] + }, + "outputs": { + "multistarts": [0,0], + "multistops": [2,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "regularlength": 1, + "regularsize": 4, + "singleoffsets": [0,0,0,0,0] + }, + "outputs": { + "multistarts": [0,0,0,0], + "multistops": [0,0,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "regularlength": 1, + "regularsize": 3, + "singleoffsets": [0,0,0,0] + }, + "outputs": { + "multistarts": [0,0,0], + "multistops": [0,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "regularlength": 1, + "regularsize": 4, + "singleoffsets": [0,0,1,1,1] + }, + "outputs": { + "multistarts": [0,0,1,1], + "multistops": [0,1,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "regularlength": 1, + "regularsize": 3, + "singleoffsets": [0,1,1,3] + }, + "outputs": { + "multistarts": [0,1,1], + "multistops": [1,1,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "regularlength": 1, + "regularsize": 5, + "singleoffsets": [0,1,1,3,3,5] + }, + "outputs": { + "multistarts": [0,1,1,3,3], + "multistops": [1,1,3,3,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "regularlength": 1, + "regularsize": 5, + "singleoffsets": [0,2,2,2,2,6] + }, + "outputs": { + "multistarts": [0,2,2,2,2], + "multistops": [2,2,2,2,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "regularlength": 1, + "regularsize": 3, + "singleoffsets": [0,2,2,3] + }, + "outputs": { + "multistarts": [0,2,2], + "multistops": [2,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "regularlength": 1, + "regularsize": 3, + "singleoffsets": [0,2,2,4] + }, + "outputs": { + "multistarts": [0,2,2], + "multistops": [2,2,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "regularlength": 1, + "regularsize": 2, + "singleoffsets": [0,2,4] + }, + "outputs": { + "multistarts": [0,2], + "multistops": [2,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "regularlength": 1, + "regularsize": 7, + "singleoffsets": [0,2,2,4,4,5,5,8] + }, + "outputs": { + "multistarts": [0,2,2,4,4,5,5], + "multistops": [2,2,4,4,5,5,8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "regularlength": 1, + "regularsize": 5, + "singleoffsets": [0,2,2,4,5,6] + }, + "outputs": { + "multistarts": [0,2,2,4,5], + "multistops": [2,2,4,5,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "regularlength": 1, + "regularsize": 5, + "singleoffsets": [0,2,2,4,5,8] + }, + "outputs": { + "multistarts": [0,2,2,4,5], + "multistops": [2,2,4,5,8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "regularlength": 1, + "regularsize": 5, + "singleoffsets": [0,2,2,4,5,9] + }, + "outputs": { + "multistarts": [0,2,2,4,5], + "multistops": [2,2,4,5,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "regularlength": 1, + "regularsize": 3, + "singleoffsets": [0,2,3,4] + }, + "outputs": { + "multistarts": [0,2,3], + "multistops": [2,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "regularlength": 1, + "regularsize": 4, + "singleoffsets": [0,2,3,3,5] + }, + "outputs": { + "multistarts": [0,2,3,3], + "multistops": [2,3,3,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "regularlength": 1, + "regularsize": 4, + "singleoffsets": [0,2,3,4,7] + }, + "outputs": { + "multistarts": [0,2,3,4], + "multistops": [2,3,4,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "regularlength": 1, + "regularsize": 3, + "singleoffsets": [0,2,5,7] + }, + "outputs": { + "multistarts": [0,2,5], + "multistops": [2,5,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "regularlength": 1, + "regularsize": 3, + "singleoffsets": [0,2,6,8] + }, + "outputs": { + "multistarts": [0,2,6], + "multistops": [2,6,8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "regularlength": 2, + "regularsize": 2, + "singleoffsets": [0,3,4] + }, + "outputs": { + "multistarts": [0,3,0,3], + "multistops": [3,4,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "regularlength": 1, + "regularsize": 3, + "singleoffsets": [0,3,3,4] + }, + "outputs": { + "multistarts": [0,3,3], + "multistops": [3,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "regularlength": 1, + "regularsize": 3, + "singleoffsets": [0,3,3,5] + }, + "outputs": { + "multistarts": [0,3,3], + "multistops": [3,3,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "regularlength": 1, + "regularsize": 5, + "singleoffsets": [0,3,3,3,4,7] + }, + "outputs": { + "multistarts": [0,3,3,3,4], + "multistops": [3,3,3,4,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "regularlength": 1, + "regularsize": 2, + "singleoffsets": [0,3,4] + }, + "outputs": { + "multistarts": [0,3], + "multistops": [3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "regularlength": 1, + "regularsize": 4, + "singleoffsets": [0,3,3,4,5] + }, + "outputs": { + "multistarts": [0,3,3,4], + "multistops": [3,3,4,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "regularlength": 1, + "regularsize": 5, + "singleoffsets": [0,3,3,4,5,8] + }, + "outputs": { + "multistarts": [0,3,3,4,5], + "multistops": [3,3,4,5,8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "regularlength": 1, + "regularsize": 5, + "singleoffsets": [0,3,3,5,6,9] + }, + "outputs": { + "multistarts": [0,3,3,5,6], + "multistops": [3,3,5,6,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "regularlength": 1, + "regularsize": 2, + "singleoffsets": [0,3,6] + }, + "outputs": { + "multistarts": [0,3], + "multistops": [3,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "regularlength": 1, + "regularsize": 3, + "singleoffsets": [0,4,6,6] + }, + "outputs": { + "multistarts": [0,4,6], + "multistops": [4,6,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "regularlength": 1, + "regularsize": 5, + "singleoffsets": [0,5,5,6,8,10] + }, + "outputs": { + "multistarts": [0,5,5,6,8], + "multistops": [5,5,6,8,10] + } + } + ] + }, + { + "name": "awkward_RegularArray_getitem_next_array", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromarray": [], + "lenarray": 0, + "length": 0, + "size": 0 + }, + "outputs": { + "toadvanced": [], + "tocarry": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,0,0,0], + "lenarray": 4, + "length": 1, + "size": 2 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [0,0,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,0], + "lenarray": 2, + "length": 1, + "size": 3 + }, + "outputs": { + "toadvanced": [0,1], + "tocarry": [0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0], + "lenarray": 1, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0], + "tocarry": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,0,1,1,1,0], + "lenarray": 6, + "length": 1, + "size": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3,4,5], + "tocarry": [0,0,1,1,1,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1], + "lenarray": 2, + "length": 1, + "size": 3 + }, + "outputs": { + "toadvanced": [0,1], + "tocarry": [0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1], + "lenarray": 2, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1], + "tocarry": [0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1], + "lenarray": 2, + "length": 1, + "size": 6 + }, + "outputs": { + "toadvanced": [0,1], + "tocarry": [0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1,1,1], + "lenarray": 4, + "length": 1, + "size": 2 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [0,1,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1,2], + "lenarray": 3, + "length": 1, + "size": 3 + }, + "outputs": { + "toadvanced": [0,1,2], + "tocarry": [0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1,2], + "lenarray": 3, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1,2], + "tocarry": [0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1,2,3], + "lenarray": 4, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [0,1,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1], + "lenarray": 2, + "length": 4, + "size": 2 + }, + "outputs": { + "toadvanced": [0,1,0,1,0,1,0,1], + "tocarry": [0,1,2,3,4,5,6,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1,2,4], + "lenarray": 4, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [0,1,2,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1,3], + "lenarray": 3, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1,2], + "tocarry": [0,1,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1,3,4], + "lenarray": 4, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [0,1,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1,3,4,5], + "lenarray": 5, + "length": 1, + "size": 6 + }, + "outputs": { + "toadvanced": [0,1,2,3,4], + "tocarry": [0,1,3,4,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1,3,4,5], + "lenarray": 5, + "length": 1, + "size": 7 + }, + "outputs": { + "toadvanced": [0,1,2,3,4], + "tocarry": [0,1,3,4,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1,3,4,6,7], + "lenarray": 6, + "length": 1, + "size": 8 + }, + "outputs": { + "toadvanced": [0,1,2,3,4,5], + "tocarry": [0,1,3,4,6,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1,3,4,6,7], + "lenarray": 6, + "length": 1, + "size": 9 + }, + "outputs": { + "toadvanced": [0,1,2,3,4,5], + "tocarry": [0,1,3,4,6,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1,4], + "lenarray": 3, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1,2], + "tocarry": [0,1,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1,4,6,7], + "lenarray": 5, + "length": 1, + "size": 8 + }, + "outputs": { + "toadvanced": [0,1,2,3,4], + "tocarry": [0,1,4,6,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1,4,6,7], + "lenarray": 5, + "length": 1, + "size": 9 + }, + "outputs": { + "toadvanced": [0,1,2,3,4], + "tocarry": [0,1,4,6,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,2], + "lenarray": 2, + "length": 1, + "size": 3 + }, + "outputs": { + "toadvanced": [0,1], + "tocarry": [0,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,2], + "lenarray": 2, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1], + "tocarry": [0,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,2,1,0], + "lenarray": 4, + "length": 1, + "size": 3 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [0,2,1,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,2,3], + "lenarray": 3, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1,2], + "tocarry": [0,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,2,3,4], + "lenarray": 4, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [0,2,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,2,4], + "lenarray": 3, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1,2], + "tocarry": [0,2,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,3], + "lenarray": 2, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1], + "tocarry": [0,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,3,4], + "lenarray": 3, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1,2], + "tocarry": [0,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,3], + "lenarray": 2, + "length": 2, + "size": 4 + }, + "outputs": { + "toadvanced": [0,1,0,1], + "tocarry": [0,3,4,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,3], + "lenarray": 2, + "length": 3, + "size": 4 + }, + "outputs": { + "toadvanced": [0,1,0,1,0,1], + "tocarry": [0,3,4,7,8,11] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,4], + "lenarray": 2, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1], + "tocarry": [0,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,0,0,1], + "lenarray": 4, + "length": 1, + "size": 2 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [1,0,0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,0], + "lenarray": 2, + "length": 1, + "size": 2 + }, + "outputs": { + "toadvanced": [0,1], + "tocarry": [1,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,0,1,1,1,0], + "lenarray": 6, + "length": 1, + "size": 2 + }, + "outputs": { + "toadvanced": [0,1,2,3,4,5], + "tocarry": [1,0,1,1,1,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1], + "lenarray": 1, + "length": 1, + "size": 2 + }, + "outputs": { + "toadvanced": [0], + "tocarry": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1], + "lenarray": 1, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0], + "tocarry": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,0,1], + "lenarray": 3, + "length": 4, + "size": 2 + }, + "outputs": { + "toadvanced": [0,1,2,0,1,2,0,1,2,0,1,2], + "tocarry": [1,0,1,3,2,3,5,4,5,7,6,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,0], + "lenarray": 2, + "length": 4, + "size": 2 + }, + "outputs": { + "toadvanced": [0,1,0,1,0,1,0,1], + "tocarry": [1,0,3,2,5,4,7,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,1,1,1], + "lenarray": 4, + "length": 1, + "size": 2 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [1,1,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,2], + "lenarray": 2, + "length": 1, + "size": 3 + }, + "outputs": { + "toadvanced": [0,1], + "tocarry": [1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,2], + "lenarray": 2, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1], + "tocarry": [1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,2,3], + "lenarray": 3, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1,2], + "tocarry": [1,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,2,3,4], + "lenarray": 4, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [1,2,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,2,4], + "lenarray": 3, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1,2], + "tocarry": [1,2,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,3], + "lenarray": 2, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1], + "tocarry": [1,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,3,4], + "lenarray": 3, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1,2], + "tocarry": [1,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,3,4,6,7], + "lenarray": 5, + "length": 1, + "size": 8 + }, + "outputs": { + "toadvanced": [0,1,2,3,4], + "tocarry": [1,3,4,6,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,3,4,6,7], + "lenarray": 5, + "length": 1, + "size": 9 + }, + "outputs": { + "toadvanced": [0,1,2,3,4], + "tocarry": [1,3,4,6,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,4], + "lenarray": 2, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1], + "tocarry": [1,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,4,0,5], + "lenarray": 4, + "length": 1, + "size": 6 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [1,4,0,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [2,0,0,1], + "lenarray": 4, + "length": 1, + "size": 6 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [2,0,0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [2,0], + "lenarray": 2, + "length": 1, + "size": 3 + }, + "outputs": { + "toadvanced": [0,1], + "tocarry": [2,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [2,0,0,1,4], + "lenarray": 5, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1,2,3,4], + "tocarry": [2,0,0,1,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [2,0,0,2], + "lenarray": 4, + "length": 1, + "size": 3 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [2,0,0,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [2,0,0,4], + "lenarray": 4, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [2,0,0,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [2], + "lenarray": 1, + "length": 1, + "size": 3 + }, + "outputs": { + "toadvanced": [0], + "tocarry": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [2], + "lenarray": 1, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0], + "tocarry": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [2,1,1,2], + "lenarray": 4, + "length": 1, + "size": 3 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [2,1,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [2,1,1,3], + "lenarray": 4, + "length": 2, + "size": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3,0,1,2,3], + "tocarry": [2,1,1,3,6,5,5,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [2,1,1,3], + "lenarray": 4, + "length": 3, + "size": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3,0,1,2,3,0,1,2,3], + "tocarry": [2,1,1,3,6,5,5,7,10,9,9,11] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [2,2], + "lenarray": 2, + "length": 1, + "size": 4 + }, + "outputs": { + "toadvanced": [0,1], + "tocarry": [2,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [2,2,2,2], + "lenarray": 4, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [2,2,2,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [2,2,2,2], + "lenarray": 4, + "length": 1, + "size": 6 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [2,2,2,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [2,3], + "lenarray": 2, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1], + "tocarry": [2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [2,3], + "lenarray": 2, + "length": 1, + "size": 6 + }, + "outputs": { + "toadvanced": [0,1], + "tocarry": [2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [2,3,4], + "lenarray": 3, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1,2], + "tocarry": [2,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [2,3,4,5,6], + "lenarray": 5, + "length": 1, + "size": 7 + }, + "outputs": { + "toadvanced": [0,1,2,3,4], + "tocarry": [2,3,4,5,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [2,4], + "lenarray": 2, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1], + "tocarry": [2,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [3], + "lenarray": 1, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0], + "tocarry": [3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [3,1,1,7], + "lenarray": 4, + "length": 1, + "size": 10 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [3,1,1,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [3,2,1,0], + "lenarray": 4, + "length": 1, + "size": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [3,2,1,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [3,2,1], + "lenarray": 3, + "length": 1, + "size": 4 + }, + "outputs": { + "toadvanced": [0,1,2], + "tocarry": [3,2,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [3,3,3], + "lenarray": 3, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1,2], + "tocarry": [3,3,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [3,4], + "lenarray": 2, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1], + "tocarry": [3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [3,6,8,6], + "lenarray": 4, + "length": 1, + "size": 10 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [3,6,8,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [4], + "lenarray": 1, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0], + "tocarry": [4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [4,3,2], + "lenarray": 3, + "length": 1, + "size": 8 + }, + "outputs": { + "toadvanced": [0,1,2], + "tocarry": [4,3,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [4,3,2,1], + "lenarray": 4, + "length": 1, + "size": 8 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [4,3,2,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [4,4], + "lenarray": 2, + "length": 1, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1], + "tocarry": [4,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [4,4,4,4], + "lenarray": 4, + "length": 1, + "size": 6 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [4,4,4,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [4,5], + "lenarray": 2, + "length": 1, + "size": 6 + }, + "outputs": { + "toadvanced": [0,1], + "tocarry": [4,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [7,3,0,2,3,7], + "lenarray": 6, + "length": 1, + "size": 8 + }, + "outputs": { + "toadvanced": [0,1,2,3,4,5], + "tocarry": [7,3,0,2,3,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [7,3,2,0,2,3,7], + "lenarray": 7, + "length": 1, + "size": 8 + }, + "outputs": { + "toadvanced": [0,1,2,3,4,5,6], + "tocarry": [7,3,2,0,2,3,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [7,3,2,0,3,7], + "lenarray": 6, + "length": 1, + "size": 8 + }, + "outputs": { + "toadvanced": [0,1,2,3,4,5], + "tocarry": [7,3,2,0,3,7] + } + } + ] + }, + { + "name": "awkward_RegularArray_getitem_next_array_advanced", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [], + "fromarray": [], + "length": 0, + "size": 0 + }, + "outputs": { + "toadvanced": [], + "tocarry": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [0,1,0,1], + "length": 4, + "size": 2 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [0,3,4,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [0,0,0,0], + "length": 4, + "size": 3 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [0,3,6,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [0,1,2,1], + "length": 4, + "size": 3 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [0,4,8,10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [0,0,0,0], + "length": 4, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [0,5,10,15] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [0,1,4,1], + "length": 4, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [0,6,14,16] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [1,0,1,0], + "length": 4, + "size": 2 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [1,2,5,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [1,0,0,1], + "length": 4, + "size": 3 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [1,3,6,10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [1,0,0,1], + "length": 4, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [1,5,10,16] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [1,3,0,4], + "length": 4, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [1,8,10,19] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [2,0,0,1], + "length": 4, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [2,5,10,16] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [2,2,2,2], + "length": 4, + "size": 3 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [2,5,8,11] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [2,2,2,2], + "length": 4, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [2,7,12,17] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [3,3,3,3], + "length": 4, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [3,8,13,18] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [4,4,4,4], + "length": 4, + "size": 5 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [4,9,14,19] + } + } + ] + }, + { + "name": "awkward_RegularArray_getitem_next_array_regularize", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromarray": [], + "lenarray": 0, + "size": 2 + }, + "outputs": { + "toarray": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,0,0,0], + "lenarray": 4, + "size": 2 + }, + "outputs": { + "toarray": [0,0,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,0,0,0], + "lenarray": 4, + "size": 3 + }, + "outputs": { + "toarray": [0,0,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,0,0,0], + "lenarray": 4, + "size": 5 + }, + "outputs": { + "toarray": [0,0,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,0], + "lenarray": 2, + "size": 3 + }, + "outputs": { + "toarray": [0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0], + "lenarray": 1, + "size": 5 + }, + "outputs": { + "toarray": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1,0,1], + "lenarray": 4, + "size": 2 + }, + "outputs": { + "toarray": [0,1,0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1], + "lenarray": 2, + "size": 2 + }, + "outputs": { + "toarray": [0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1], + "lenarray": 2, + "size": 3 + }, + "outputs": { + "toarray": [0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1], + "lenarray": 2, + "size": 5 + }, + "outputs": { + "toarray": [0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1], + "lenarray": 2, + "size": 6 + }, + "outputs": { + "toarray": [0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1,1,1], + "lenarray": 4, + "size": 2 + }, + "outputs": { + "toarray": [0,1,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1,2], + "lenarray": 3, + "size": 3 + }, + "outputs": { + "toarray": [0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1,2], + "lenarray": 3, + "size": 5 + }, + "outputs": { + "toarray": [0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1,1,1], + "lenarray": 4, + "size": 3 + }, + "outputs": { + "toarray": [0,1,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1,2,3], + "lenarray": 4, + "size": 5 + }, + "outputs": { + "toarray": [0,1,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1,2,4], + "lenarray": 4, + "size": 5 + }, + "outputs": { + "toarray": [0,1,2,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1,3], + "lenarray": 3, + "size": 5 + }, + "outputs": { + "toarray": [0,1,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1,3,4], + "lenarray": 4, + "size": 5 + }, + "outputs": { + "toarray": [0,1,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1,3,4,5], + "lenarray": 5, + "size": 6 + }, + "outputs": { + "toarray": [0,1,3,4,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1,3,4,5], + "lenarray": 5, + "size": 7 + }, + "outputs": { + "toarray": [0,1,3,4,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1,3,4,6,7], + "lenarray": 6, + "size": 8 + }, + "outputs": { + "toarray": [0,1,3,4,6,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1,3,4,6,7], + "lenarray": 6, + "size": 9 + }, + "outputs": { + "toarray": [0,1,3,4,6,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1,4], + "lenarray": 3, + "size": 5 + }, + "outputs": { + "toarray": [0,1,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1,4,6,7], + "lenarray": 5, + "size": 8 + }, + "outputs": { + "toarray": [0,1,4,6,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,1,4,6,7], + "lenarray": 5, + "size": 9 + }, + "outputs": { + "toarray": [0,1,4,6,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,2], + "lenarray": 2, + "size": 3 + }, + "outputs": { + "toarray": [0,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,2], + "lenarray": 2, + "size": 5 + }, + "outputs": { + "toarray": [0,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,2,1,0], + "lenarray": 4, + "size": 3 + }, + "outputs": { + "toarray": [0,2,1,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,2,3], + "lenarray": 3, + "size": 5 + }, + "outputs": { + "toarray": [0,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,2,3,4], + "lenarray": 4, + "size": 5 + }, + "outputs": { + "toarray": [0,2,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,2,4], + "lenarray": 3, + "size": 5 + }, + "outputs": { + "toarray": [0,2,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,3], + "lenarray": 2, + "size": 4 + }, + "outputs": { + "toarray": [0,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,3], + "lenarray": 2, + "size": 5 + }, + "outputs": { + "toarray": [0,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,3,4], + "lenarray": 3, + "size": 5 + }, + "outputs": { + "toarray": [0,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,4], + "lenarray": 2, + "size": 5 + }, + "outputs": { + "toarray": [0,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,0,0,1], + "lenarray": 4, + "size": 2 + }, + "outputs": { + "toarray": [1,0,0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,0,0,1], + "lenarray": 4, + "size": 3 + }, + "outputs": { + "toarray": [1,0,0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,0,0,1], + "lenarray": 4, + "size": 5 + }, + "outputs": { + "toarray": [1,0,0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,0,1,0], + "lenarray": 4, + "size": 2 + }, + "outputs": { + "toarray": [1,0,1,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,0], + "lenarray": 2, + "size": 2 + }, + "outputs": { + "toarray": [1,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,0,1], + "lenarray": 3, + "size": 2 + }, + "outputs": { + "toarray": [1,0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,0,1,1,1,0], + "lenarray": 6, + "size": 2 + }, + "outputs": { + "toarray": [1,0,1,1,1,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,1,1,1], + "lenarray": 4, + "size": 2 + }, + "outputs": { + "toarray": [1,1,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1], + "lenarray": 1, + "size": 2 + }, + "outputs": { + "toarray": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1], + "lenarray": 1, + "size": 5 + }, + "outputs": { + "toarray": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,2], + "lenarray": 2, + "size": 3 + }, + "outputs": { + "toarray": [1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,2], + "lenarray": 2, + "size": 5 + }, + "outputs": { + "toarray": [1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,2,3], + "lenarray": 3, + "size": 5 + }, + "outputs": { + "toarray": [1,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,2,3,4], + "lenarray": 4, + "size": 5 + }, + "outputs": { + "toarray": [1,2,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,2,4], + "lenarray": 3, + "size": 5 + }, + "outputs": { + "toarray": [1,2,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,3], + "lenarray": 2, + "size": 5 + }, + "outputs": { + "toarray": [1,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,3,4], + "lenarray": 3, + "size": 5 + }, + "outputs": { + "toarray": [1,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,3,4,6,7], + "lenarray": 5, + "size": 8 + }, + "outputs": { + "toarray": [1,3,4,6,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,3,4,6,7], + "lenarray": 5, + "size": 9 + }, + "outputs": { + "toarray": [1,3,4,6,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,4], + "lenarray": 2, + "size": 5 + }, + "outputs": { + "toarray": [1,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [2,0,0,1], + "lenarray": 4, + "size": 5 + }, + "outputs": { + "toarray": [2,0,0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [2,0,0,1], + "lenarray": 4, + "size": 6 + }, + "outputs": { + "toarray": [2,0,0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [2,0], + "lenarray": 2, + "size": 3 + }, + "outputs": { + "toarray": [2,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [2], + "lenarray": 1, + "size": 3 + }, + "outputs": { + "toarray": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [2], + "lenarray": 1, + "size": 5 + }, + "outputs": { + "toarray": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [2,2,2,2], + "lenarray": 4, + "size": 5 + }, + "outputs": { + "toarray": [2,2,2,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [2,2,2,2], + "lenarray": 4, + "size": 6 + }, + "outputs": { + "toarray": [2,2,2,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [2,2], + "lenarray": 2, + "size": 4 + }, + "outputs": { + "toarray": [2,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [2,3], + "lenarray": 2, + "size": 5 + }, + "outputs": { + "toarray": [2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [2,3], + "lenarray": 2, + "size": 6 + }, + "outputs": { + "toarray": [2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [2,3,4], + "lenarray": 3, + "size": 5 + }, + "outputs": { + "toarray": [2,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [2,3,4,5,6], + "lenarray": 5, + "size": 7 + }, + "outputs": { + "toarray": [2,3,4,5,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [2,4], + "lenarray": 2, + "size": 5 + }, + "outputs": { + "toarray": [2,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [3,1,1,7], + "lenarray": 4, + "size": 10 + }, + "outputs": { + "toarray": [3,1,1,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [3,2,1,0], + "lenarray": 4, + "size": 4 + }, + "outputs": { + "toarray": [3,2,1,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [3,2,1], + "lenarray": 3, + "size": 4 + }, + "outputs": { + "toarray": [3,2,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [3], + "lenarray": 1, + "size": 5 + }, + "outputs": { + "toarray": [3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [3,3,3], + "lenarray": 3, + "size": 5 + }, + "outputs": { + "toarray": [3,3,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [3,4], + "lenarray": 2, + "size": 5 + }, + "outputs": { + "toarray": [3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [4,3,2,1], + "lenarray": 4, + "size": 8 + }, + "outputs": { + "toarray": [4,3,2,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [4,3,2], + "lenarray": 3, + "size": 8 + }, + "outputs": { + "toarray": [4,3,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [4], + "lenarray": 1, + "size": 5 + }, + "outputs": { + "toarray": [4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [4,4], + "lenarray": 2, + "size": 5 + }, + "outputs": { + "toarray": [4,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [4,5], + "lenarray": 2, + "size": 6 + }, + "outputs": { + "toarray": [4,5] + } + } + ] + }, + { + "name": "awkward_RegularArray_getitem_next_at", + "status": true, + "tests": [ + { + "error": true, + "message": "index out of range", + "inputs": { + "at": -2, + "length": 1, + "size": 1 + }, + "outputs": { + "tocarry": [0] + } + }, + { + "error": true, + "message": "index out of range", + "inputs": { + "at": 6, + "length": 2, + "size": 5 + }, + "outputs": { + "tocarry": [0,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 0, + "length": 1, + "size": 1 + }, + "outputs": { + "tocarry": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 0, + "length": 0, + "size": 1 + }, + "outputs": { + "tocarry": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 0, + "length": 1, + "size": 2 + }, + "outputs": { + "tocarry": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 0, + "length": 1, + "size": 3 + }, + "outputs": { + "tocarry": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 0, + "length": 1, + "size": 5 + }, + "outputs": { + "tocarry": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 0, + "length": 1, + "size": 6 + }, + "outputs": { + "tocarry": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 0, + "length": 2, + "size": 5 + }, + "outputs": { + "tocarry": [0,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 1, + "length": 1, + "size": 2 + }, + "outputs": { + "tocarry": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 1, + "length": 1, + "size": 3 + }, + "outputs": { + "tocarry": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 1, + "length": 1, + "size": 4 + }, + "outputs": { + "tocarry": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 1, + "length": 1, + "size": 5 + }, + "outputs": { + "tocarry": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 1, + "length": 1, + "size": 6 + }, + "outputs": { + "tocarry": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 1, + "length": 2, + "size": 5 + }, + "outputs": { + "tocarry": [1,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 2, + "length": 1, + "size": 3 + }, + "outputs": { + "tocarry": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 2, + "length": 1, + "size": 4 + }, + "outputs": { + "tocarry": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 2, + "length": 1, + "size": 5 + }, + "outputs": { + "tocarry": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 2, + "length": 1, + "size": 6 + }, + "outputs": { + "tocarry": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 2, + "length": 5, + "size": 5 + }, + "outputs": { + "tocarry": [2,7,12,17,22] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 3, + "length": 1, + "size": 4 + }, + "outputs": { + "tocarry": [3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 3, + "length": 1, + "size": 5 + }, + "outputs": { + "tocarry": [3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 4, + "length": 1, + "size": 5 + }, + "outputs": { + "tocarry": [4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 4, + "length": 1, + "size": 6 + }, + "outputs": { + "tocarry": [4] + } + } + ] + }, + { + "name": "awkward_RegularArray_getitem_next_range", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "length": 0, + "nextsize": 0, + "regular_start": 0, + "size": 0, + "step": 0 + }, + "outputs": { + "tocarry": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 1, + "regular_start": 0, + "size": 1, + "step": 1 + }, + "outputs": { + "tocarry": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 1, + "regular_start": 0, + "size": 2, + "step": 1 + }, + "outputs": { + "tocarry": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 1, + "regular_start": 0, + "size": 5, + "step": 1 + }, + "outputs": { + "tocarry": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 1, + "regular_start": 0, + "size": 3, + "step": 3 + }, + "outputs": { + "tocarry": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 1, + "regular_start": 0, + "size": 5, + "step": 3 + }, + "outputs": { + "tocarry": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 2, + "regular_start": 0, + "size": 2, + "step": 1 + }, + "outputs": { + "tocarry": [0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 2, + "regular_start": 0, + "size": 3, + "step": 1 + }, + "outputs": { + "tocarry": [0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 3, + "regular_start": 0, + "size": 3, + "step": 1 + }, + "outputs": { + "tocarry": [0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 4, + "regular_start": 0, + "size": 4, + "step": 1 + }, + "outputs": { + "tocarry": [0,1,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 4, + "regular_start": 0, + "size": 5, + "step": 1 + }, + "outputs": { + "tocarry": [0,1,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 2, + "nextsize": 2, + "regular_start": 0, + "size": 2, + "step": 1 + }, + "outputs": { + "tocarry": [0,1,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 5, + "regular_start": 0, + "size": 5, + "step": 1 + }, + "outputs": { + "tocarry": [0,1,2,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 5, + "regular_start": 0, + "size": 6, + "step": 1 + }, + "outputs": { + "tocarry": [0,1,2,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 6, + "regular_start": 0, + "size": 6, + "step": 1 + }, + "outputs": { + "tocarry": [0,1,2,3,4,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 8, + "regular_start": 0, + "size": 8, + "step": 1 + }, + "outputs": { + "tocarry": [0,1,2,3,4,5,6,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 10, + "regular_start": 0, + "size": 10, + "step": 1 + }, + "outputs": { + "tocarry": [0,1,2,3,4,5,6,7,8,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 3, + "nextsize": 5, + "regular_start": 0, + "size": 5, + "step": 1 + }, + "outputs": { + "tocarry": [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "nextsize": 5, + "regular_start": 0, + "size": 5, + "step": 1 + }, + "outputs": { + "tocarry": [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 2, + "nextsize": 4, + "regular_start": 0, + "size": 5, + "step": 1 + }, + "outputs": { + "tocarry": [0,1,2,3,5,6,7,8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 3, + "nextsize": 4, + "regular_start": 0, + "size": 5, + "step": 1 + }, + "outputs": { + "tocarry": [0,1,2,3,5,6,7,8,10,11,12,13] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "nextsize": 4, + "regular_start": 0, + "size": 5, + "step": 1 + }, + "outputs": { + "tocarry": [0,1,2,3,5,6,7,8,10,11,12,13,15,16,17,18,20,21,22,23] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 6, + "nextsize": 4, + "regular_start": 0, + "size": 5, + "step": 1 + }, + "outputs": { + "tocarry": [0,1,2,3,5,6,7,8,10,11,12,13,15,16,17,18,20,21,22,23,25,26,27,28] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 2, + "regular_start": 0, + "size": 3, + "step": 2 + }, + "outputs": { + "tocarry": [0,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 2, + "regular_start": 0, + "size": 5, + "step": 2 + }, + "outputs": { + "tocarry": [0,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 3, + "regular_start": 0, + "size": 5, + "step": 2 + }, + "outputs": { + "tocarry": [0,2,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 3, + "regular_start": 0, + "size": 6, + "step": 2 + }, + "outputs": { + "tocarry": [0,2,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "nextsize": 3, + "regular_start": 0, + "size": 5, + "step": 2 + }, + "outputs": { + "tocarry": [0,2,4,5,7,9,10,12,14,15,17,19,20,22,24] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 6, + "nextsize": 3, + "regular_start": 0, + "size": 5, + "step": 2 + }, + "outputs": { + "tocarry": [0,2,4,5,7,9,10,12,14,15,17,19,20,22,24,25,27,29] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 4, + "regular_start": 0, + "size": 8, + "step": 2 + }, + "outputs": { + "tocarry": [0,2,4,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 2, + "regular_start": 0, + "size": 5, + "step": 3 + }, + "outputs": { + "tocarry": [0,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 1, + "regular_start": 1, + "size": 2, + "step": 1 + }, + "outputs": { + "tocarry": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 1, + "regular_start": 1, + "size": 3, + "step": 2 + }, + "outputs": { + "tocarry": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 1, + "regular_start": 1, + "size": 3, + "step": 3 + }, + "outputs": { + "tocarry": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 1, + "regular_start": 1, + "size": 5, + "step": 3 + }, + "outputs": { + "tocarry": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 2, + "regular_start": 1, + "size": 3, + "step": 1 + }, + "outputs": { + "tocarry": [1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 2, + "regular_start": 1, + "size": 4, + "step": 1 + }, + "outputs": { + "tocarry": [1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 3, + "regular_start": 1, + "size": 5, + "step": 1 + }, + "outputs": { + "tocarry": [1,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 4, + "regular_start": 1, + "size": 5, + "step": 1 + }, + "outputs": { + "tocarry": [1,2,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 5, + "regular_start": 1, + "size": 6, + "step": 1 + }, + "outputs": { + "tocarry": [1,2,3,4,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 3, + "nextsize": 4, + "regular_start": 1, + "size": 5, + "step": 1 + }, + "outputs": { + "tocarry": [1,2,3,4,6,7,8,9,11,12,13,14] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "nextsize": 4, + "regular_start": 1, + "size": 5, + "step": 1 + }, + "outputs": { + "tocarry": [1,2,3,4,6,7,8,9,11,12,13,14,16,17,18,19,21,22,23,24] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 6, + "nextsize": 4, + "regular_start": 1, + "size": 5, + "step": 1 + }, + "outputs": { + "tocarry": [1,2,3,4,6,7,8,9,11,12,13,14,16,17,18,19,21,22,23,24,26,27,28,29] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 2, + "nextsize": 4, + "regular_start": 1, + "size": 5, + "step": 1 + }, + "outputs": { + "tocarry": [1,2,3,4,6,7,8,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 2, + "regular_start": 1, + "size": 5, + "step": 2 + }, + "outputs": { + "tocarry": [1,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 2, + "regular_start": 1, + "size": 5, + "step": 3 + }, + "outputs": { + "tocarry": [1,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 1, + "regular_start": 2, + "size": 3, + "step": 1 + }, + "outputs": { + "tocarry": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 1, + "regular_start": 2, + "size": 3, + "step": 2 + }, + "outputs": { + "tocarry": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 1, + "regular_start": 2, + "size": 3, + "step": 3 + }, + "outputs": { + "tocarry": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 1, + "regular_start": 2, + "size": 5, + "step": 3 + }, + "outputs": { + "tocarry": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 3, + "regular_start": 2, + "size": 5, + "step": 1 + }, + "outputs": { + "tocarry": [2,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "nextsize": 2, + "regular_start": 3, + "size": 5, + "step": 1 + }, + "outputs": { + "tocarry": [3,4] + } + } + ] + }, + { + "name": "awkward_ListArray_getitem_next_range_spreadadvanced", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [], + "fromoffsets": [], + "lenstarts": 0 + }, + "outputs": { + "toadvanced": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0], + "fromoffsets": [0,3], + "lenstarts": 1 + }, + "outputs": { + "toadvanced": [0,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1], + "fromoffsets": [0,3,6], + "lenstarts": 2 + }, + "outputs": { + "toadvanced": [0,0,0,1,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromoffsets": [0,4,5,7,10], + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,0,0,0,1,2,2,3,3,3] + } + } + ] + }, + { + "name": "awkward_RegularArray_getitem_next_range_spreadadvanced", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [], + "length": 0, + "nextsize": 2 + }, + "outputs": { + "toadvanced": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [], + "length": 1, + "nextsize": 0 + }, + "outputs": { + "toadvanced": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [], + "length": 0, + "nextsize": 0 + }, + "outputs": { + "toadvanced": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0], + "length": 1, + "nextsize": 2 + }, + "outputs": { + "toadvanced": [0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1], + "length": 2, + "nextsize": 2 + }, + "outputs": { + "toadvanced": [0,0,1,1] + } + } + ] + }, + { + "name": "awkward_ListOffsetArray_local_preparenext_64", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromindex": [], + "length": 0 + }, + "outputs": { + "tocarry": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0], + "length": 1 + }, + "outputs": { + "tocarry": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [2,0], + "length": 2 + }, + "outputs": { + "tocarry": [1,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,2], + "length": 2 + }, + "outputs": { + "tocarry": [0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,2,3,5,7], + "length": 5 + }, + "outputs": { + "tocarry": [0,1,2,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [7,5,3,2,0], + "length": 5 + }, + "outputs": { + "tocarry": [4,3,2,1,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,2,7,5,3], + "length": 5 + }, + "outputs": { + "tocarry": [0,1,4,3,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [1,0,2,4,3,6,5,7], + "length": 8 + }, + "outputs": { + "tocarry": [1,0,2,4,3,6,5,7] + } + } + ] + }, + { + "name": "awkward_ListOffsetArray_drop_none_indexes", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "noneindexes": [], + "length_indexes": 0, + "fromoffsets": [], + "length_offsets": 0 + }, + "outputs": { + "tooffsets": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "noneindexes": [0], + "length_indexes": 1, + "fromoffsets": [], + "length_offsets": 0 + }, + "outputs": { + "tooffsets": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "noneindexes": [], + "length_indexes": 0, + "fromoffsets": [0], + "length_offsets": 1 + }, + "outputs": { + "tooffsets": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "noneindexes": [-1,-1,-1,-1,-1,-1,-1], + "length_indexes": 7, + "fromoffsets": [0,2,3,5,7], + "length_offsets": 5 + }, + "outputs": { + "tooffsets": [0,0,0,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "noneindexes": [-1,0,-1,0,0,-1,0], + "length_indexes": 7, + "fromoffsets": [0,2,3,5,7], + "length_offsets": 5 + }, + "outputs": { + "tooffsets": [0,1,1,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "noneindexes": [0,0,0,0,0,0], + "length_indexes": 6, + "fromoffsets": [0,2,3,5,6], + "length_offsets": 5 + }, + "outputs": { + "tooffsets": [0,2,3,5,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "noneindexes": [0,0,0,0,0,0], + "length_indexes": 6, + "fromoffsets": [0,0,0,0,0], + "length_offsets": 5 + }, + "outputs": { + "tooffsets": [0,0,0,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "noneindexes": [0,0,0,0,0,0], + "length_indexes": 6, + "fromoffsets": [0,2,3,3,6], + "length_offsets": 5 + }, + "outputs": { + "tooffsets": [0,2,3,3,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "noneindexes": [-1,-1,-1,-1,-1,-1], + "length_indexes": 6, + "fromoffsets": [0,2,3,3,6], + "length_offsets": 5 + }, + "outputs": { + "tooffsets": [0,0,0,0,0] + } + } + ] + }, + { + "name": "awkward_ListOffsetArray_flatten_offsets", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "inneroffsets": [0], + "outeroffsets": [], + "outeroffsetslen": 0 + }, + "outputs": { + "tooffsets": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "inneroffsets": [0,1,2,3], + "outeroffsets": [0,0,0,1,3], + "outeroffsetslen": 5 + }, + "outputs": { + "tooffsets": [0,0,0,1,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "inneroffsets": [0,1,2,3,4,5,6], + "outeroffsets": [0,0,1,3,6], + "outeroffsetslen": 5 + }, + "outputs": { + "tooffsets": [0,0,1,3,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "inneroffsets": [0,1,1,5], + "outeroffsets": [0,0,1,3], + "outeroffsetslen": 4 + }, + "outputs": { + "tooffsets": [0,0,1,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "inneroffsets": [0,1,1,6,6], + "outeroffsets": [0,0,1,4], + "outeroffsetslen": 4 + }, + "outputs": { + "tooffsets": [0,0,1,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "inneroffsets": [0,4,8,12,14,16], + "outeroffsets": [0,3,3,5], + "outeroffsetslen": 4 + }, + "outputs": { + "tooffsets": [0,12,12,16] + } + }, + { + "error": false, + "message": "", + "inputs": { + "inneroffsets": [0,1,2,5,5,7,7,11], + "outeroffsets": [0,1,2,2,5,7], + "outeroffsetslen": 6 + }, + "outputs": { + "tooffsets": [0,1,2,2,7,11] + } + }, + { + "error": false, + "message": "", + "inputs": { + "inneroffsets": [0,1,2,3,4,5,6], + "outeroffsets": [0,1,3,6], + "outeroffsetslen": 4 + }, + "outputs": { + "tooffsets": [0,1,3,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "inneroffsets": [0,5,10,15,20,25,30], + "outeroffsets": [0,3,6], + "outeroffsetslen": 3 + }, + "outputs": { + "tooffsets": [0,15,30] + } + }, + { + "error": false, + "message": "", + "inputs": { + "inneroffsets": [0,2,6], + "outeroffsets": [0,1,1,1,2], + "outeroffsetslen": 5 + }, + "outputs": { + "tooffsets": [0,2,2,2,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "inneroffsets": [0,0,2,6], + "outeroffsets": [0,2,2,2,3], + "outeroffsetslen": 5 + }, + "outputs": { + "tooffsets": [0,2,2,2,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "inneroffsets": [0,0,0,2,6], + "outeroffsets": [0,3,3,3,4], + "outeroffsetslen": 5 + }, + "outputs": { + "tooffsets": [0,2,2,2,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "inneroffsets": [0,0,0,0,2,7,7], + "outeroffsets": [0,4,4,4,6], + "outeroffsetslen": 5 + }, + "outputs": { + "tooffsets": [0,2,2,2,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "inneroffsets": [0,3,5,6,6], + "outeroffsets": [0,1,2,3,4], + "outeroffsetslen": 5 + }, + "outputs": { + "tooffsets": [0,3,5,6,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "inneroffsets": [0,7,14,21,28,35,42,49,56,63,70,77,84,91,98,105,112,119,126,133,140,147,154,161,168,175,182,189,196,203,210], + "outeroffsets": [0,5,10,15,20,25,30], + "outeroffsetslen": 7 + }, + "outputs": { + "tooffsets": [0,35,70,105,140,175,210] + } + }, + { + "error": false, + "message": "", + "inputs": { + "inneroffsets": [0,2,4,6,8,10,12,13,14,15,16], + "outeroffsets": [0,2,4,6,8,10], + "outeroffsetslen": 6 + }, + "outputs": { + "tooffsets": [0,4,8,12,14,16] + } + }, + { + "error": false, + "message": "", + "inputs": { + "inneroffsets": [0,3,5,6,6,10], + "outeroffsets": [0,2,2,3,5], + "outeroffsetslen": 5 + }, + "outputs": { + "tooffsets": [0,5,5,6,10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "inneroffsets": [0,3,3,5,6,6,10], + "outeroffsets": [0,3,3,4,6], + "outeroffsetslen": 5 + }, + "outputs": { + "tooffsets": [0,5,5,6,10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "inneroffsets": [0,3,3,3,5,6,6,10], + "outeroffsets": [0,4,4,5,7], + "outeroffsetslen": 5 + }, + "outputs": { + "tooffsets": [0,5,5,6,10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "inneroffsets": [0,3,3,5,5,8], + "outeroffsets": [0,3,3,5], + "outeroffsetslen": 4 + }, + "outputs": { + "tooffsets": [0,5,5,8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "inneroffsets": [0,3,6,9,12,14,16], + "outeroffsets": [0,2,4,5,6,6,6], + "outeroffsetslen": 7 + }, + "outputs": { + "tooffsets": [0,6,12,14,16,16,16] + } + }, + { + "error": false, + "message": "", + "inputs": { + "inneroffsets": [0,2,4,6,8,10], + "outeroffsets": [0,3,3,5], + "outeroffsetslen": 4 + }, + "outputs": { + "tooffsets": [0,6,6,10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "inneroffsets": [0,2,4,6,8,10,12,14,16,18,20], + "outeroffsets": [0,3,3,5,8,8,10], + "outeroffsetslen": 7 + }, + "outputs": { + "tooffsets": [0,6,6,10,16,16,20] + } + }, + { + "error": false, + "message": "", + "inputs": { + "inneroffsets": [0,4,4,4,4,6,7,7,12,12], + "outeroffsets": [0,5,5,6,9], + "outeroffsetslen": 5 + }, + "outputs": { + "tooffsets": [0,6,6,7,12] + } + }, + { + "error": false, + "message": "", + "inputs": { + "inneroffsets": [0,3,6,9,11,13,14], + "outeroffsets": [0,3,5,6], + "outeroffsetslen": 4 + }, + "outputs": { + "tooffsets": [0,9,13,14] + } + }, + { + "error": false, + "message": "", + "inputs": { + "inneroffsets": [0,3,5,6,6], + "outeroffsets": [1,2,3,4], + "outeroffsetslen": 4 + }, + "outputs": { + "tooffsets": [3,5,6,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "inneroffsets": [0,3,3,5,6,6,10], + "outeroffsets": [3,3,4,6], + "outeroffsetslen": 4 + }, + "outputs": { + "tooffsets": [5,5,6,10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "inneroffsets": [0,3,3,3,5,6,6,10], + "outeroffsets": [4,4,5,7], + "outeroffsetslen": 4 + }, + "outputs": { + "tooffsets": [5,5,6,10] + } + } + ] + }, + { + "name": "awkward_ListOffsetArray_toRegularArray", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [], + "offsetslength": 0 + }, + "outputs": { + "size": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0], + "offsetslength": 1 + }, + "outputs": { + "size": [0] + } + }, + { + "error": true, + "message": "offsets must be monotonically increasing", + "inputs": { + "fromoffsets": [0,-1,-2], + "offsetslength": 3 + }, + "outputs": { + "size": [-1] + } + }, + { + "error": true, + "message": "cannot convert to RegularArray because subarray lengths are not regular", + "inputs": { + "fromoffsets": [0,2,5], + "offsetslength": 3 + }, + "outputs": { + "size": [-1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,0,0,0], + "offsetslength": 4 + }, + "outputs": { + "size": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,1,2,3], + "offsetslength": 4 + }, + "outputs": { + "size": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,2,4], + "offsetslength": 3 + }, + "outputs": { + "size": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,2,4,6], + "offsetslength": 4 + }, + "outputs": { + "size": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,4], + "offsetslength": 2 + }, + "outputs": { + "size": [4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,5,10], + "offsetslength": 3 + }, + "outputs": { + "size": [5] + } + } + ] + }, + { + "name": "awkward_ListOffsetArray_rpad_axis1", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [], + "fromlength": 0, + "target": 0 + }, + "outputs": { + "toindex": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,0], + "fromlength": 1, + "target": 2 + }, + "outputs": { + "toindex": [-1,-1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [1,3], + "fromlength": 1, + "target": 3 + }, + "outputs": { + "toindex": [1,2,-1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,1,2,3,5,7,11], + "fromlength": 6, + "target": 3 + }, + "outputs": { + "toindex": [0,-1,-1,1,-1,-1,2,-1,-1,3,4,-1,5,6,-1,7,8,9,10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,1,2,3,5,7,11], + "fromlength": 6, + "target": 2 + }, + "outputs": { + "toindex": [0,-1,1,-1,2,-1,3,4,5,6,7,8,9,10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,1,2,3,5,7,11], + "fromlength": 6, + "target": 1 + }, + "outputs": { + "toindex": [0,1,2,3,4,5,6,7,8,9,10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,1,2,3,4], + "fromlength": 4, + "target": 0 + }, + "outputs": { + "toindex": [0,1,2,3] + } + } + ] + }, + { + "name": "awkward_ListOffsetArray_rpad_length_axis1", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [], + "fromlength": 0, + "target": 0 + }, + "outputs": { + "tolength": [0], + "tooffsets": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,0], + "fromlength": 1, + "target": 3 + }, + "outputs": { + "tolength": [3], + "tooffsets": [0,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [1,3], + "fromlength": 1, + "target": 3 + }, + "outputs": { + "tolength": [3], + "tooffsets": [0,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,1,2,3,5,7,11], + "fromlength": 6, + "target": 3 + }, + "outputs": { + "tolength": [19], + "tooffsets": [0,3,6,9,12,15,19] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,1,2,3,4], + "fromlength": 4, + "target": 0 + }, + "outputs": { + "tolength": [4], + "tooffsets": [0,1,2,3,4] + } + } + ] + }, + { + "name": "awkward_MaskedArray_getitem_next_jagged_project", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "index": [], + "length": 0, + "starts_in": [], + "stops_in": [] + }, + "outputs": { + "starts_out": [], + "stops_out": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,2,3], + "length": 4, + "starts_in": [0,2,3,3], + "stops_in": [2,3,3,3] + }, + "outputs": { + "starts_out": [0,2,3,3], + "stops_out": [2,3,3,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,2,3], + "length": 4, + "starts_in": [0,2,3,3], + "stops_in": [2,3,3,5] + }, + "outputs": { + "starts_out": [0,2,3,3], + "stops_out": [2,3,3,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,2,3], + "length": 4, + "starts_in": [0,2,3,3], + "stops_in": [2,3,3,6] + }, + "outputs": { + "starts_out": [0,2,3,3], + "stops_out": [2,3,3,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,2,3], + "length": 4, + "starts_in": [0,2,3,4], + "stops_in": [2,3,4,7] + }, + "outputs": { + "starts_out": [0,2,3,4], + "stops_out": [2,3,4,7] + } + } + ] + }, + { + "name": "awkward_ListOffsetArray_reduce_nonlocal_maxcount_offsetscopy_64", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "length": 0, + "offsets": [0] + }, + "outputs": { + "maxcount": [0], + "offsetscopy": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "offsets": [0,2] + }, + "outputs": { + "maxcount": [2], + "offsetscopy": [0,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 3, + "offsets": [0,2,3,5] + }, + "outputs": { + "maxcount": [2], + "offsetscopy": [0,2,3,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 3, + "offsets": [0,2,4,6] + }, + "outputs": { + "maxcount": [2], + "offsetscopy": [0,2,4,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 3, + "offsets": [0,3,3,5] + }, + "outputs": { + "maxcount": [3], + "offsetscopy": [0,3,3,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 6, + "offsets": [0,3,3,5,6,8,9] + }, + "outputs": { + "maxcount": [3], + "offsetscopy": [0,3,3,5,6,8,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "offsets": [0,3,3,5,6,9] + }, + "outputs": { + "maxcount": [3], + "offsetscopy": [0,3,3,5,6,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 6, + "offsets": [0,3,5,5,6,8,9] + }, + "outputs": { + "maxcount": [3], + "offsetscopy": [0,3,5,5,6,8,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 6, + "offsets": [0,3,5,6,7,7,9] + }, + "outputs": { + "maxcount": [3], + "offsetscopy": [0,3,5,6,7,7,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "offsets": [0,3,5,6,7,9] + }, + "outputs": { + "maxcount": [3], + "offsetscopy": [0,3,5,6,7,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 6, + "offsets": [0,3,5,7,8,9,10] + }, + "outputs": { + "maxcount": [3], + "offsetscopy": [0,3,5,7,8,9,10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 2, + "offsets": [0,3,6] + }, + "outputs": { + "maxcount": [3], + "offsetscopy": [0,3,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "offsets": [0,3,6,9,12,15] + }, + "outputs": { + "maxcount": [3], + "offsetscopy": [0,3,6,9,12,15] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 9, + "offsets": [0,0,1,3,6,10,13,15,16,16] + }, + "outputs": { + "maxcount": [4], + "offsetscopy": [0,0,1,3,6,10,13,15,16,16] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 3, + "offsets": [0,3,3,7] + }, + "outputs": { + "maxcount": [4], + "offsetscopy": [0,3,3,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 3, + "offsets": [0,3,6,10] + }, + "outputs": { + "maxcount": [4], + "offsetscopy": [0,3,6,10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 3, + "offsets": [0,4,4,6] + }, + "outputs": { + "maxcount": [4], + "offsetscopy": [0,4,4,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 2, + "offsets": [0,4,6] + }, + "outputs": { + "maxcount": [4], + "offsetscopy": [0,4,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 3, + "offsets": [0,4,8,12] + }, + "outputs": { + "maxcount": [4], + "offsetscopy": [0,4,8,12] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 6, + "offsets": [0,3,8,13,18,23,28] + }, + "outputs": { + "maxcount": [5], + "offsetscopy": [0,3,8,13,18,23,28] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 6, + "offsets": [0,4,9,13,18,23,28] + }, + "outputs": { + "maxcount": [5], + "offsetscopy": [0,4,9,13,18,23,28] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 6, + "offsets": [0,4,9,14,19,24,29] + }, + "outputs": { + "maxcount": [5], + "offsetscopy": [0,4,9,14,19,24,29] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 6, + "offsets": [0,5,10,11,12,17,22] + }, + "outputs": { + "maxcount": [5], + "offsetscopy": [0,5,10,11,12,17,22] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 6, + "offsets": [0,5,10,14,18,23,28] + }, + "outputs": { + "maxcount": [5], + "offsetscopy": [0,5,10,14,18,23,28] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 3, + "offsets": [0,5,10,15] + }, + "outputs": { + "maxcount": [5], + "offsetscopy": [0,5,10,15] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 6, + "offsets": [0,5,10,15,19,24,28] + }, + "outputs": { + "maxcount": [5], + "offsetscopy": [0,5,10,15,19,24,28] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 4, + "offsets": [0,5,10,15,20] + }, + "outputs": { + "maxcount": [5], + "offsetscopy": [0,5,10,15,20] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 6, + "offsets": [0,5,10,15,20,24,28] + }, + "outputs": { + "maxcount": [5], + "offsetscopy": [0,5,10,15,20,24,28] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "offsets": [0,5,10,15,20,25] + }, + "outputs": { + "maxcount": [5], + "offsetscopy": [0,5,10,15,20,25] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 6, + "offsets": [0,5,10,15,20,25,28] + }, + "outputs": { + "maxcount": [5], + "offsetscopy": [0,5,10,15,20,25,28] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 6, + "offsets": [0,5,10,15,20,25,29] + }, + "outputs": { + "maxcount": [5], + "offsetscopy": [0,5,10,15,20,25,29] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 6, + "offsets": [0,5,10,15,20,25,30] + }, + "outputs": { + "maxcount": [5], + "offsetscopy": [0,5,10,15,20,25,30] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 6, + "offsets": [0,5,6,11,16,17,22] + }, + "outputs": { + "maxcount": [5], + "offsetscopy": [0,5,6,11,16,17,22] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "offsets": [0,5,8,11,14,17] + }, + "outputs": { + "maxcount": [5], + "offsetscopy": [0,5,8,11,14,17] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 3, + "offsets": [0,5,9,12] + }, + "outputs": { + "maxcount": [5], + "offsetscopy": [0,5,9,12] + } + } + ] + }, + { + "name": "awkward_ByteMaskedArray_overlay_mask", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "length": 0, + "mymask": [], + "theirmask": [], + "validwhen": false + }, + "outputs": { + "tomask": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 2, + "mymask": [0,0], + "theirmask": [0,0], + "validwhen": false + }, + "outputs": { + "tomask": [0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 2, + "mymask": [0,0], + "theirmask": [0,0], + "validwhen": true + }, + "outputs": { + "tomask": [1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 2, + "mymask": [1,0], + "theirmask": [0,1], + "validwhen": false + }, + "outputs": { + "tomask": [1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 2, + "mymask": [0,0], + "theirmask": [0,1], + "validwhen": false + }, + "outputs": { + "tomask": [0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 2, + "mymask": [1,0], + "theirmask": [0,0], + "validwhen": false + }, + "outputs": { + "tomask": [1,0] + } + } + ] + }, + { + "name": "awkward_IndexedArray_flatten_none2empty", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "offsets": [0], + "offsetslength": 1, + "outindex": [], + "outindexlength": 0 + }, + "outputs": { + "outoffsets": [0] + } + }, + { + "error": true, + "message": "flattening offset out of range", + "inputs": { + "offsets": [0], + "offsetslength": 0, + "outindex": [0], + "outindexlength": 1 + }, + "outputs": { + "outoffsets": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "offsets": [0,1,1,6], + "offsetslength": 4, + "outindex": [0,1,2,1], + "outindexlength": 4 + }, + "outputs": { + "outoffsets": [0,1,1,6,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "offsets": [0,1,1,6], + "offsetslength": 4, + "outindex": [0,1,2,1], + "outindexlength": 4 + }, + "outputs": { + "outoffsets": [0,1,1,6,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "offsets": [0,1,1,6], + "offsetslength": 4, + "outindex": [0,-1,2,-1], + "outindexlength": 4 + }, + "outputs": { + "outoffsets": [0,1,1,6,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "offsets": [0,3,3,5], + "offsetslength": 4, + "outindex": [0,1,1,1,2], + "outindexlength": 5 + }, + "outputs": { + "outoffsets": [0,3,3,3,3,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "offsets": [0,3,3,5], + "offsetslength": 4, + "outindex": [0,-1,1,-1,2], + "outindexlength": 5 + }, + "outputs": { + "outoffsets": [0,3,3,3,3,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "offsets": [0,3,3,4,7], + "offsetslength": 5, + "outindex": [0,1,2,1,3], + "outindexlength": 5 + }, + "outputs": { + "outoffsets": [0,3,3,4,4,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "offsets": [0,3,3,4,7], + "offsetslength": 5, + "outindex": [0,-1,2,-1,3], + "outindexlength": 5 + }, + "outputs": { + "outoffsets": [0,3,3,4,4,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "offsets": [0,3,3,5,6,6,10], + "offsetslength": 7, + "outindex": [0,1,2,3,4,1,5], + "outindexlength": 7 + }, + "outputs": { + "outoffsets": [0,3,3,5,6,6,6,10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "offsets": [0,4,4,6], + "offsetslength": 4, + "outindex": [0,1,1,1,2,1], + "outindexlength": 6 + }, + "outputs": { + "outoffsets": [0,4,4,4,4,6,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "offsets": [0,4,4,6,7,7,12], + "offsetslength": 7, + "outindex": [0,1,1,1,2,3,4,5,1], + "outindexlength": 9 + }, + "outputs": { + "outoffsets": [0,4,4,4,4,6,7,7,12,12] + } + }, + { + "error": false, + "message": "", + "inputs": { + "offsets": [0,5,5,6,9], + "offsetslength": 5, + "outindex": [0,1,1,2,1,3], + "outindexlength": 6 + }, + "outputs": { + "outoffsets": [0,5,5,5,6,6,9] + } + } + ] + }, + { + "name": "awkward_IndexedArray_reduce_next_64", + "status": true, + "tests": [ + { + "inputs": { + "index": [], + "offsets": [0], + "outlength": 0 + }, + "outputs": { + "nextcarry": [], + "nextoffsets": [0], + "outindex": [] + }, + "error": false + }, + { + "inputs": { + "index": [0,1], + "offsets": [0,2], + "outlength": 1 + }, + "outputs": { + "nextcarry": [0,1], + "nextoffsets": [0,2], + "outindex": [0,1] + }, + "error": false + }, + { + "inputs": { + "index": [0,1,2,3,4,5,6], + "offsets": [0,2,2,4,5,7], + "outlength": 5 + }, + "outputs": { + "nextcarry": [0,1,2,3,4,5,6], + "nextoffsets": [0,2,2,4,5,7], + "outindex": [0,1,2,3,4,5,6] + }, + "error": false + }, + { + "inputs": { + "index": [1,2], + "offsets": [0,2], + "outlength": 1 + }, + "outputs": { + "nextcarry": [1,2], + "nextoffsets": [0,2], + "outindex": [0,1] + }, + "error": false + }, + { + "inputs": { + "index": [1,2,3], + "offsets": [0,3], + "outlength": 1 + }, + "outputs": { + "nextcarry": [1,2,3], + "nextoffsets": [0,3], + "outindex": [0,1,2] + }, + "error": false + }, + { + "inputs": { + "index": [1,2,3,4], + "offsets": [0,4], + "outlength": 1 + }, + "outputs": { + "nextcarry": [1,2,3,4], + "nextoffsets": [0,4], + "outindex": [0,1,2,3] + }, + "error": false + }, + { + "inputs": { + "index": [2,3], + "offsets": [0,2], + "outlength": 1 + }, + "outputs": { + "nextcarry": [2,3], + "nextoffsets": [0,2], + "outindex": [0,1] + }, + "error": false + }, + { + "inputs": { + "index": [2,3,4], + "offsets": [0,3], + "outlength": 1 + }, + "outputs": { + "nextcarry": [2,3,4], + "nextoffsets": [0,3], + "outindex": [0,1,2] + }, + "error": false + }, + { + "inputs": { + "index": [3,4], + "offsets": [0,2], + "outlength": 1 + }, + "outputs": { + "nextcarry": [3,4], + "nextoffsets": [0,2], + "outindex": [0,1] + }, + "error": false + }, + { + "inputs": { + "index": [4,3,2,1,0], + "offsets": [0,5], + "outlength": 1 + }, + "outputs": { + "nextcarry": [4,3,2,1,0], + "nextoffsets": [0,5], + "outindex": [0,1,2,3,4] + }, + "error": false + }, + { + "inputs": { + "index": [5,2,4,1,3,0], + "offsets": [0,2,4,6], + "outlength": 3 + }, + "outputs": { + "nextcarry": [5,2,4,1,3,0], + "nextoffsets": [0,2,4,6], + "outindex": [0,1,2,3,4,5] + }, + "error": false + }, + { + "inputs": { + "index": [5,4,3,2,1,0], + "offsets": [0,3,6], + "outlength": 2 + }, + "outputs": { + "nextcarry": [5,4,3,2,1,0], + "nextoffsets": [0,3,6], + "outindex": [0,1,2,3,4,5] + }, + "error": false + } + ] + }, + { + "name": "awkward_IndexedArray_simplify", + "status": true, + "tests": [ + { + "error": true, + "message": "index out of range", + "inputs": { + "innerindex": [], + "innerlength": 0, + "outerindex": [0,3], + "outerlength": 2 + }, + "outputs": { + "toindex": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [], + "innerlength": 0, + "outerindex": [], + "outerlength": 0 + }, + "outputs": { + "toindex": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [0,1], + "innerlength": 2, + "outerindex": [], + "outerlength": 0 + }, + "outputs": { + "toindex": [123,123] + } + }, + { + "error": true, + "message": "index out of range", + "inputs": { + "innerindex": [0,1], + "innerlength": 2, + "outerindex": [0,3], + "outerlength": 2 + }, + "outputs": { + "toindex": [0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [0,1], + "innerlength": 2, + "outerindex": [0,1], + "outerlength": 2 + }, + "outputs": { + "toindex": [0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [0,1,1,1,2], + "innerlength": 5, + "outerindex": [0,1,2], + "outerlength": 3 + }, + "outputs": { + "toindex": [0,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [0,1,1,1,4], + "innerlength": 5, + "outerindex": [0,1,2], + "outerlength": 3 + }, + "outputs": { + "toindex": [0,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [0,1,2], + "innerlength": 3, + "outerindex": [0,1,1,1,1,2], + "outerlength": 6 + }, + "outputs": { + "toindex": [0,1,1,1,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [0,1,2,1,1], + "innerlength": 5, + "outerindex": [0,1,1,1,2], + "outerlength": 5 + }, + "outputs": { + "toindex": [0,1,1,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [0,1,1,1,2], + "innerlength": 5, + "outerindex": [0,1,2,3,4,1,1], + "outerlength": 7 + }, + "outputs": { + "toindex": [0,1,1,1,2,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [0,1,1,1,4], + "innerlength": 5, + "outerindex": [0,1,2,3,4,1,1], + "outerlength": 7 + }, + "outputs": { + "toindex": [0,1,1,1,4,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [0,1,2,1], + "innerlength": 4, + "outerindex": [0,1,1,2], + "outerlength": 4 + }, + "outputs": { + "toindex": [0,1,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [0,1,1,2], + "innerlength": 4, + "outerindex": [0,1,1,3], + "outerlength": 4 + }, + "outputs": { + "toindex": [0,1,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [0,1,1,2], + "innerlength": 4, + "outerindex": [0,1,2,3], + "outerlength": 4 + }, + "outputs": { + "toindex": [0,1,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [0,1,2,3], + "innerlength": 4, + "outerindex": [0,1,1,2,3], + "outerlength": 5 + }, + "outputs": { + "toindex": [0,1,1,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [0,1,2,3], + "innerlength": 4, + "outerindex": [0,1,1,3], + "outerlength": 4 + }, + "outputs": { + "toindex": [0,1,1,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [0,1,2], + "innerlength": 3, + "outerindex": [0,1,2], + "outerlength": 3 + }, + "outputs": { + "toindex": [0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [0,1,2,3], + "innerlength": 4, + "outerindex": [0,1,2,1,3], + "outerlength": 5 + }, + "outputs": { + "toindex": [0,1,2,1,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [0,1,2,1,4], + "innerlength": 5, + "outerindex": [0,1,2,3,4], + "outerlength": 5 + }, + "outputs": { + "toindex": [0,1,2,1,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [0,1,2,3,4,5,6,7,1,1], + "innerlength": 10, + "outerindex": [0,1,2,3,4,1,1,1,5,6,1,1,7,8,9,1], + "outerlength": 16 + }, + "outputs": { + "toindex": [0,1,2,3,4,1,1,1,5,6,1,1,7,1,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [0,1,1,2,1,1,3,4], + "innerlength": 8, + "outerindex": [2,2,1,6,5], + "outerlength": 5 + }, + "outputs": { + "toindex": [1,1,1,3,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [13,9,13,4,8,3,15,1,16,2,8], + "innerlength": 11, + "outerindex": [0,3,6], + "outerlength": 3 + }, + "outputs": { + "toindex": [13,4,15] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [13,9,13,4,8,3,15,1,16,2,8], + "innerlength": 11, + "outerindex": [0,1,2,3,4,5,6,7,8], + "outerlength": 9 + }, + "outputs": { + "toindex": [13,9,13,4,8,3,15,1,16] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [13,9,13,4,8,3,15,1,16,2,8], + "innerlength": 11, + "outerindex": [0,1,3,4,6,7], + "outerlength": 6 + }, + "outputs": { + "toindex": [13,9,4,8,15,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [2,1,1,0], + "innerlength": 4, + "outerindex": [0,1,2,1,3], + "outerlength": 5 + }, + "outputs": { + "toindex": [2,1,1,1,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [3,1,1,7], + "innerlength": 4, + "outerindex": [0,1,1,2,3], + "outerlength": 5 + }, + "outputs": { + "toindex": [3,1,1,1,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [3,1,2,1], + "innerlength": 4, + "outerindex": [0,1,2,1,3], + "outerlength": 5 + }, + "outputs": { + "toindex": [3,1,2,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [4,3,2,1,0], + "innerlength": 5, + "outerindex": [0], + "outerlength": 1 + }, + "outputs": { + "toindex": [4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [4,3,2,1,0], + "innerlength": 5, + "outerindex": [0,1], + "outerlength": 2 + }, + "outputs": { + "toindex": [4,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [4,5,6,7,3,1,2,0,1,1], + "innerlength": 10, + "outerindex": [0,4,5,7], + "outerlength": 4 + }, + "outputs": { + "toindex": [4,3,1,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [4,3,2,1,0], + "innerlength": 5, + "outerindex": [0,1,2], + "outerlength": 3 + }, + "outputs": { + "toindex": [4,3,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [4,3,2,1,0], + "innerlength": 5, + "outerindex": [0,1,2,3,4], + "outerlength": 5 + }, + "outputs": { + "toindex": [4,3,2,1,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [4,3,2,1,0], + "innerlength": 5, + "outerindex": [0,1,2,3], + "outerlength": 4 + }, + "outputs": { + "toindex": [4,3,2,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [0,1,1,1,2,3,4,5,6,7], + "innerlength": 10, + "outerindex": [6,7,8,9,5,1,1,1,3,4,1,1,0,1,2,1], + "outerlength": 16 + }, + "outputs": { + "toindex": [4,5,6,7,3,1,1,1,1,2,1,1,0,1,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [0,1,1,1,2,3,4,5,6,7], + "innerlength": 10, + "outerindex": [6,7,8,9,5,1,1,3,4,1,0,1,2], + "outerlength": 13 + }, + "outputs": { + "toindex": [4,5,6,7,3,1,1,1,2,1,0,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [0,1,1,1,2,3,4,5,6,7], + "innerlength": 10, + "outerindex": [6,7,8,9,5,3,4,0,1,2], + "outerlength": 10 + }, + "outputs": { + "toindex": [4,5,6,7,3,1,2,0,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [6,5,1,3,1,1,0], + "innerlength": 7, + "outerindex": [0,2,4,6], + "outerlength": 4 + }, + "outputs": { + "toindex": [6,1,1,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "innerindex": [6,5,4,3,2,1,0], + "innerlength": 7, + "outerindex": [0,2,4,6], + "outerlength": 4 + }, + "outputs": { + "toindex": [6,4,2,0] + } + } + ] + }, + { + "name": "awkward_IndexedArray_validity", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "index": [], + "isoption": true, + "lencontent": 3, + "length": 0 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [], + "isoption": true, + "lencontent": 0, + "length": 0 + }, + "outputs": {} + }, + { + "error": true, + "message": "index[i] >= len(content)", + "inputs": { + "index": [0,1,1,1,1,3], + "isoption": true, + "lencontent": 0, + "length": 6 + }, + "outputs": {} + }, + { + "error": true, + "message": "index[i] >= len(content)", + "inputs": { + "index": [0,1,1,1,1,3], + "isoption": true, + "lencontent": 3, + "length": 6 + }, + "outputs": {} + }, + { + "error": true, + "message": "index[i] < 0", + "inputs": { + "index": [2,-4,4,0,8], + "isoption": false, + "lencontent": 10, + "length": 5 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,1,1,1,2], + "isoption": true, + "lencontent": 3, + "length": 6 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,1,1,1], + "isoption": true, + "lencontent": 2, + "length": 5 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,1,1,2,3,4], + "isoption": true, + "lencontent": 5, + "length": 7 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,1,1,2,3], + "isoption": true, + "lencontent": 4, + "length": 6 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,1,1,2], + "isoption": true, + "lencontent": 3, + "length": 5 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,1,1], + "isoption": true, + "lencontent": 2, + "length": 4 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,1,2,1,3], + "isoption": true, + "lencontent": 4, + "length": 6 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,1,2,1], + "isoption": true, + "lencontent": 3, + "length": 5 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,1,2,3,1,4,5,6], + "isoption": true, + "lencontent": 7, + "length": 9 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,1,2,3,4,1,5], + "isoption": true, + "lencontent": 6, + "length": 8 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,1,2,3,4,5,6,7], + "isoption": true, + "lencontent": 8, + "length": 9 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,1,2,3,4,5], + "isoption": true, + "lencontent": 6, + "length": 7 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,1,2,3], + "isoption": true, + "lencontent": 4, + "length": 5 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,1,2], + "isoption": true, + "lencontent": 3, + "length": 4 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,1], + "isoption": true, + "lencontent": 2, + "length": 3 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,2,1,1], + "isoption": true, + "lencontent": 3, + "length": 5 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,2,1,3,1,4], + "isoption": true, + "lencontent": 5, + "length": 7 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,2,1,3], + "isoption": true, + "lencontent": 4, + "length": 5 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,2,1], + "isoption": true, + "lencontent": 3, + "length": 4 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,2,3,1,4,5,6,7,8,1,9], + "isoption": true, + "lencontent": 10, + "length": 12 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,2,3,1,4,5,6], + "isoption": true, + "lencontent": 7, + "length": 8 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,2,3,1,4], + "isoption": true, + "lencontent": 5, + "length": 6 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,2,3,1], + "isoption": true, + "lencontent": 4, + "length": 5 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,0,1,1,1], + "isoption": true, + "lencontent": 2, + "length": 5 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,0,1,1,2], + "isoption": true, + "lencontent": 3, + "length": 5 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,0,1,2,1,3], + "isoption": true, + "lencontent": 4, + "length": 6 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,0,1,2,1], + "isoption": true, + "lencontent": 3, + "length": 5 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,0,1,2,3], + "isoption": true, + "lencontent": 4, + "length": 5 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,0,1,2], + "isoption": true, + "lencontent": 3, + "length": 4 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,1,0,1,1], + "isoption": true, + "lencontent": 2, + "length": 5 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,1,0,1,2], + "isoption": true, + "lencontent": 3, + "length": 5 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,1,1,0,1], + "isoption": true, + "lencontent": 2, + "length": 5 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [1,4,4,1,0], + "isoption": true, + "lencontent": 10, + "length": 5 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [2,1,4,0,8], + "isoption": true, + "lencontent": 10, + "length": 5 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [2,2,0,1,4], + "isoption": true, + "lencontent": 5, + "length": 5 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [2,4,4,0,8], + "isoption": false, + "lencontent": 10, + "length": 5 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [6,4,4,8,0], + "isoption": false, + "lencontent": 10, + "length": 5 + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [6,5,4,3,2,1,0], + "isoption": false, + "lencontent": 7, + "length": 7 + }, + "outputs": {} + } + ] + }, + { + "name": "awkward_IndexedOptionArray_rpad_and_clip_mask_axis1", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "frommask": [], + "length": 0 + }, + "outputs": { + "toindex": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "frommask": [0,0,0,0], + "length": 4 + }, + "outputs": { + "toindex": [0,1,2,3] + } + } + ] + }, + { + "name": "awkward_index_rpad_and_clip_axis1", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "length": 0, + "target": 1 + }, + "outputs": { + "tostarts": [], + "tostops": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 4, + "target": 1 + }, + "outputs": { + "tostarts": [0,1,2,3], + "tostops": [1,2,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "target": 1 + }, + "outputs": { + "tostarts": [0,1,2,3,4], + "tostops": [1,2,3,4,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 6, + "target": 1 + }, + "outputs": { + "tostarts": [0,1,2,3,4,5], + "tostops": [1,2,3,4,5,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 3, + "target": 2 + }, + "outputs": { + "tostarts": [0,2,4], + "tostops": [2,4,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 7, + "target": 2 + }, + "outputs": { + "tostarts": [0,2,4,6,8,10,12], + "tostops": [2,4,6,8,10,12,14] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 6, + "target": 2 + }, + "outputs": { + "tostarts": [0,2,4,6,8,10], + "tostops": [2,4,6,8,10,12] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "target": 2 + }, + "outputs": { + "tostarts": [0,2,4,6,8], + "tostops": [2,4,6,8,10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 6, + "target": 3 + }, + "outputs": { + "tostarts": [0,3,6,9,12,15], + "tostops": [3,6,9,12,15,18] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "target": 3 + }, + "outputs": { + "tostarts": [0,3,6,9,12], + "tostops": [3,6,9,12,15] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 6, + "target": 4 + }, + "outputs": { + "tostarts": [0,4,8,12,16,20], + "tostops": [4,8,12,16,20,24] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "target": 4 + }, + "outputs": { + "tostarts": [0,4,8,12,16], + "tostops": [4,8,12,16,20] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 6, + "target": 5 + }, + "outputs": { + "tostarts": [0,5,10,15,20,25], + "tostops": [5,10,15,20,25,30] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "target": 5 + }, + "outputs": { + "tostarts": [0,5,10,15,20], + "tostops": [5,10,15,20,25] + } + } + ] + }, + { + "name": "awkward_ListArray_combinations", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromindex": [], + "length": 0, + "n": 0, + "replacement": false, + "starts": [], + "stops": [] + }, + "outputs": { + "tocarry": [ + [], + [] + ], + "toindex": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,0], + "length": 1, + "n": 2, + "replacement": false, + "starts": [0], + "stops": [2] + }, + "outputs": { + "tocarry": [ + [0], + [1] + ], + "toindex": [1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,0,0], + "length": 2, + "n": 2, + "replacement": false, + "starts": [0,2], + "stops": [2,3] + }, + "outputs": { + "tocarry": [ + [0], + [1] + ], + "toindex": [1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,0,0], + "length": 2, + "n": 2, + "replacement": true, + "starts": [0,2], + "stops": [2,3] + }, + "outputs": { + "tocarry": [ + [0,0,1,2], + [0,1,1,2] + ], + "toindex": [4,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,0,0,0,0,0], + "length": 5, + "n": 2, + "replacement": false, + "starts": [0,4,4,7,8], + "stops": [4,4,7,8,13] + }, + "outputs": { + "tocarry": [ + [0,0,0,1,1,2,4,4,5,8,8,8,8,9,9,9,10,10,11], + [1,2,3,2,3,3,5,6,6,9,10,11,12,10,11,12,11,12,12] + ], + "toindex": [19,19] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,0,0,0,0,0], + "length": 5, + "n": 2, + "replacement": true, + "starts": [0,4,4,7,8], + "stops": [4,4,7,8,13] + }, + "outputs": { + "tocarry": [ + [0,0,0,0,1,1,1,2,2,3,4,4,4,5,5,6,7,8,8,8,8,8,9,9,9,9,10,10,10,11,11,12], + [0,1,2,3,1,2,3,2,3,3,4,5,6,5,6,6,7,8,9,10,11,12,9,10,11,12,10,11,12,11,12,12] + ], + "toindex": [32,32] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,0,0,0,0,0], + "length": 5, + "n": 2, + "replacement": false, + "starts": [0,3,3,10,10], + "stops": [3,3,5,10,13] + }, + "outputs": { + "tocarry": [ + [0,0,1,3,10,10,11], + [1,2,2,4,11,12,12] + ], + "toindex": [7,7] + } + } + ] + }, + { + "name": "awkward_RegularArray_combinations_64", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromindex": [], + "length": 0, + "n": 0, + "replacement": false, + "size": 0 + }, + "outputs": { + "tocarry": [ + [], + [] + ], + "toindex": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,0], + "length": 1, + "n": 2, + "replacement": false, + "size": 2 + }, + "outputs": { + "tocarry": [ + [0], + [1] + ], + "toindex": [1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,0], + "length": 1, + "n": 2, + "replacement": true, + "size": 2 + }, + "outputs": { + "tocarry": [ + [0,0,1], + [0,1,1] + ], + "toindex": [3,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,0,0,0], + "length": 3, + "n": 2, + "replacement": false, + "size": 2 + }, + "outputs": { + "tocarry": [ + [0,2,4], + [1,3,5] + ], + "toindex": [3,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,0,0,0,0,0], + "length": 5, + "n": 2, + "replacement": true, + "size": 3 + }, + "outputs": { + "tocarry": [ + [0,0,0,1,1,2,3,3,3,4,4,5,6,6,6,7,7,8,9,9,9,10,10,11,12,12,12,13,13,14], + [0,1,2,1,2,2,3,4,5,4,5,5,6,7,8,7,8,8,9,10,11,10,11,11,12,13,14,13,14,14] + ], + "toindex": [30,30] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,0,0,0,0,0], + "length": 5, + "n": 2, + "replacement": false, + "size": 3 + }, + "outputs": { + "tocarry": [ + [0,0,1,3,3,4,6,6,7,9,9,10,12,12,13], + [1,2,2,4,5,5,7,8,8,10,11,11,13,14,14] + ], + "toindex": [15,15] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,0,0,0,0,0], + "length": 5, + "n": 2, + "replacement": false, + "size": 4 + }, + "outputs": { + "tocarry": [ + [0,0,0,1,1,2,4,4,4,5,5,6,8,8,8,9,9,10,12,12,12,13,13,14,16,16,16,17,17,18], + [1,2,3,2,3,3,5,6,7,6,7,7,9,10,11,10,11,11,13,14,15,14,15,15,17,18,19,18,19,19] + ], + "toindex": [30,30] + } + } + ] + }, + { + "name": "awkward_ListArray_combinations_length", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "length": 0, + "n": 0, + "replacement": false, + "starts": [], + "stops": [] + }, + "outputs": { + "tooffsets": [0], + "totallen": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "n": 3, + "replacement": false, + "starts": [0,4,4,7,8], + "stops": [4,4,7,8,13] + }, + "outputs": { + "tooffsets": [0,4,4,5,5,15], + "totallen": [15] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "n": 2, + "replacement": false, + "starts": [0], + "stops": [1] + }, + "outputs": { + "tooffsets": [0,0], + "totallen": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "n": 2, + "replacement": false, + "starts": [0], + "stops": [2] + }, + "outputs": { + "tooffsets": [0,1], + "totallen": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "n": 2, + "replacement": false, + "starts": [0,4,4,7,8], + "stops": [4,4,7,8,13] + }, + "outputs": { + "tooffsets": [0,6,6,9,9,19], + "totallen": [19] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "n": 2, + "replacement": true, + "starts": [0,4,4,7,8], + "stops": [4,4,7,8,13] + }, + "outputs": { + "tooffsets": [0,10,10,16,17,32], + "totallen": [32] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 3, + "n": 2, + "replacement": false, + "starts": [0,3,3], + "stops": [3,3,5] + }, + "outputs": { + "tooffsets": [0,3,3,4], + "totallen": [4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 3, + "n": 2, + "replacement": false, + "starts": [0,3,5], + "stops": [3,3,7] + }, + "outputs": { + "tooffsets": [0,3,3,4], + "totallen": [4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "n": 3, + "replacement": true, + "starts": [0,4,4,7,8], + "stops": [4,4,7,8,13] + }, + "outputs": { + "tooffsets": [0,20,20,30,31,66], + "totallen": [66] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "n": 2, + "replacement": false, + "starts": [0,3,3,10,10], + "stops": [3,3,5,10,13] + }, + "outputs": { + "tooffsets": [0,3,3,4,4,7], + "totallen": [7] + } + } + ] + }, + { + "name": "awkward_ListArray_getitem_jagged_carrylen", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "slicestarts": [], + "slicestops": [], + "sliceouterlen": 0 + }, + "outputs": { + "carrylen": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "slicestarts": [0,2], + "slicestops": [0,2], + "sliceouterlen": 2 + }, + "outputs": { + "carrylen": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "slicestarts": [2], + "slicestops": [4], + "sliceouterlen": 1 + }, + "outputs": { + "carrylen": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "slicestarts": [1], + "slicestops": [1], + "sliceouterlen": 1 + }, + "outputs": { + "carrylen": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 4, + "slicestarts": [0,0,0,0], + "slicestops": [0,0,0,0] + }, + "outputs": { + "carrylen": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 3, + "slicestarts": [0,0,0], + "slicestops": [0,0,0] + }, + "outputs": { + "carrylen": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 4, + "slicestarts": [0,0,1,1], + "slicestops": [0,1,1,1] + }, + "outputs": { + "carrylen": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 6, + "slicestarts": [0,1,3,5,6,8], + "slicestops": [1,3,5,6,8,10] + }, + "outputs": { + "carrylen": [10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 5, + "slicestarts": [0,5,5,6,8], + "slicestops": [5,5,6,8,10] + }, + "outputs": { + "carrylen": [10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 4, + "slicestarts": [0,3,4,7], + "slicestops": [3,4,7,11] + }, + "outputs": { + "carrylen": [11] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 6, + "slicestarts": [0,1,3,6,7,9], + "slicestops": [1,3,6,7,9,12] + }, + "outputs": { + "carrylen": [12] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 3, + "slicestarts": [0,0,0], + "slicestops": [0,0,2] + }, + "outputs": { + "carrylen": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 3, + "slicestarts": [0,2,2], + "slicestops": [2,2,2] + }, + "outputs": { + "carrylen": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 3, + "slicestarts": [0,1,1], + "slicestops": [1,1,3] + }, + "outputs": { + "carrylen": [3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 5, + "slicestarts": [0,1,1,2,2], + "slicestops": [1,1,2,2,3] + }, + "outputs": { + "carrylen": [3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 3, + "slicestarts": [0,2,2], + "slicestops": [2,2,3] + }, + "outputs": { + "carrylen": [3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 4, + "slicestarts": [0,2,3,3], + "slicestops": [2,3,3,3] + }, + "outputs": { + "carrylen": [3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 5, + "slicestarts": [0,2,2,2,2], + "slicestops": [2,2,2,2,4] + }, + "outputs": { + "carrylen": [4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 3, + "slicestarts": [0,2,2], + "slicestops": [2,2,4] + }, + "outputs": { + "carrylen": [4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 2, + "slicestarts": [0,3], + "slicestops": [3,4] + }, + "outputs": { + "carrylen": [4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 5, + "slicestarts": [0,1,1,3,3], + "slicestops": [1,1,3,3,5] + }, + "outputs": { + "carrylen": [5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 3, + "slicestarts": [0,2,3], + "slicestops": [2,3,5] + }, + "outputs": { + "carrylen": [5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 4, + "slicestarts": [0,2,3,3], + "slicestops": [2,3,3,5] + }, + "outputs": { + "carrylen": [5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 3, + "slicestarts": [0,3,3], + "slicestops": [3,3,5] + }, + "outputs": { + "carrylen": [5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 3, + "slicestarts": [0,4,5], + "slicestops": [4,4,6] + }, + "outputs": { + "carrylen": [5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 4, + "slicestarts": [0,1,3,4], + "slicestops": [1,3,4,6] + }, + "outputs": { + "carrylen": [6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 5, + "slicestarts": [0,2,2,2,2], + "slicestops": [2,2,2,2,6] + }, + "outputs": { + "carrylen": [6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 2, + "slicestarts": [0,3], + "slicestops": [3,6] + }, + "outputs": { + "carrylen": [6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 3, + "slicestarts": [0,4,5], + "slicestops": [4,5,6] + }, + "outputs": { + "carrylen": [6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 3, + "slicestarts": [0,4,6], + "slicestops": [4,6,6] + }, + "outputs": { + "carrylen": [6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 3, + "slicestarts": [0,2,5], + "slicestops": [2,5,7] + }, + "outputs": { + "carrylen": [7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 5, + "slicestarts": [0,3,3,3,4], + "slicestops": [3,3,3,4,7] + }, + "outputs": { + "carrylen": [7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 4, + "slicestarts": [0,1,4,5], + "slicestops": [1,4,5,8] + }, + "outputs": { + "carrylen": [8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 7, + "slicestarts": [0,2,2,4,4,5,5], + "slicestops": [2,2,4,4,5,5,8] + }, + "outputs": { + "carrylen": [8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 5, + "slicestarts": [0,2,2,4,5], + "slicestops": [2,2,4,5,8] + }, + "outputs": { + "carrylen": [8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 4, + "slicestarts": [0,3,0,3], + "slicestops": [3,4,3,4] + }, + "outputs": { + "carrylen": [8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 5, + "slicestarts": [0,3,3,4,5], + "slicestops": [3,3,4,5,8] + }, + "outputs": { + "carrylen": [8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 5, + "slicestarts": [0,2,2,4,5], + "slicestops": [2,2,4,5,9] + }, + "outputs": { + "carrylen": [9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "sliceouterlen": 5, + "slicestarts": [0,3,3,5,6], + "slicestops": [3,3,5,6,9] + }, + "outputs": { + "carrylen": [9] + } + } + ] + }, + { + "name": "awkward_ListArray_getitem_jagged_descend", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [], + "fromstops": [], + "sliceouterlen": 0, + "slicestarts": [], + "slicestops": [] + }, + "outputs": { + "tooffsets": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0], + "fromstops": [2], + "sliceouterlen": 1, + "slicestarts": [0], + "slicestops": [2] + }, + "outputs": { + "tooffsets": [0,2] + } + }, + { + "error": true, + "message": "jagged slice inner length differs from array inner length", + "inputs": { + "fromstarts": [0,2], + "fromstops": [2,4], + "sliceouterlen": 2, + "slicestarts": [0,2], + "slicestops": [3,4] + }, + "outputs": { + "tooffsets": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,2], + "fromstops": [2,4], + "sliceouterlen": 2, + "slicestarts": [0,2], + "slicestops": [2,4] + }, + "outputs": { + "tooffsets": [0,2,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3,3,4], + "fromstops": [3,3,4,5], + "sliceouterlen": 4, + "slicestarts": [0,3,3,4], + "slicestops": [3,3,4,5] + }, + "outputs": { + "tooffsets": [0,3,3,4,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3,3], + "fromstops": [3,3,5], + "sliceouterlen": 3, + "slicestarts": [0,3,3], + "slicestops": [3,3,5] + }, + "outputs": { + "tooffsets": [0,3,3,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3], + "fromstops": [3,6], + "sliceouterlen": 2, + "slicestarts": [0,3], + "slicestops": [3,6] + }, + "outputs": { + "tooffsets": [0,3,6] + } + } + ] + }, + { + "name": "awkward_ListArray_getitem_jagged_expand", + "status": true, + "tests": [ + { + "error": true, + "message": "cannot fit jagged slice into nested list", + "inputs": { + "fromstarts": [0,2], + "fromstops": [2,4], + "jaggedsize": 1, + "length": 2, + "singleoffsets": [0,3,4] + }, + "outputs": { + "multistarts": [0,3,0,3], + "multistops": [3,4,3,4], + "tocarry": [0,1,2,3] + } + }, + { + "error": true, + "message": "stops[i] < starts[i]", + "inputs": { + "fromstarts": [5], + "fromstops": [4], + "jaggedsize": 2, + "length": 1, + "singleoffsets": [0,3,4] + }, + "outputs": { + "multistarts": [0,3], + "multistops": [3,4], + "tocarry": [2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,2], + "fromstops": [2,4], + "jaggedsize": 2, + "length": 2, + "singleoffsets": [0,3,4] + }, + "outputs": { + "multistarts": [0,3,0,3], + "multistops": [3,4,3,4], + "tocarry": [0,1,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [], + "fromstops": [], + "jaggedsize": 0, + "length": 0, + "singleoffsets": [] + }, + "outputs": { + "multistarts": [], + "multistops": [], + "tocarry": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [2], + "fromstops": [4], + "jaggedsize": 2, + "length": 1, + "singleoffsets": [0,3,4] + }, + "outputs": { + "multistarts": [0,3], + "multistops": [3,4], + "tocarry": [2,3] + } + } + ] + }, + { + "name": "awkward_ListArray_getitem_next_range_carrylength", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [], + "fromstops": [], + "lenstarts": 0, + "start": 0, + "stop": 0, + "step": 0 + }, + "outputs": { + "carrylength": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,2,2,3,5], + "fromstops": [2,2,3,5,7], + "lenstarts": 5, + "start": 0, + "stop": 3, + "step": 1 + }, + "outputs": { + "carrylength": [7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,2,2,3,5], + "fromstops": [2,2,3,5,7], + "lenstarts": 5, + "start": 7, + "stop": 0, + "step": -1 + }, + "outputs": { + "carrylength": [3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,2,2,3,5], + "fromstops": [2,2,3,5,7], + "lenstarts": 5, + "start": 0, + "stop": 2, + "step": 0 + }, + "outputs": { + "carrylength": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,2,2,3,5], + "fromstops": [2,2,3,5,7], + "lenstarts": 5, + "start": 0, + "stop": 6, + "step": 2 + }, + "outputs": { + "carrylength": [4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,2,2,3,5], + "fromstops": [2,2,3,5,7], + "lenstarts": 5, + "start": 7, + "stop": 0, + "step": -2 + }, + "outputs": { + "carrylength": [3] + } + } + ] + }, + { + "name": "awkward_ListArray_getitem_next_range", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [], + "fromstops": [], + "lenstarts": 0, + "start": 0, + "stop": 0, + "step": 0 + }, + "outputs": { + "tooffsets": [0], + "tocarry": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,2,2,3,5], + "fromstops": [2,2,3,5,7], + "lenstarts": 5, + "start": 0, + "stop": 3, + "step": 1 + }, + "outputs": { + "tooffsets": [0,2,2,3,5,7], + "tocarry": [0,1,2,3,4,5,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,2,2,3,5], + "fromstops": [2,2,3,5,7], + "lenstarts": 5, + "start": 7, + "stop": 0, + "step": -1 + }, + "outputs": { + "tooffsets": [0,1,1,1,2,3], + "tocarry": [1,4,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,2,2,3,5], + "fromstops": [2,2,3,5,7], + "lenstarts": 5, + "start": 0, + "stop": 2, + "step": 0 + }, + "outputs": { + "tooffsets": [0,0,0,0,0,0], + "tocarry": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3,3,5,7,9], + "fromstops": [3,3,5,7,9,11], + "lenstarts": 6, + "start": 0, + "stop": 6, + "step": 2 + }, + "outputs": { + "tooffsets": [0,2,2,3,4,5,6], + "tocarry": [0,2,3,5,7,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3,3,5,7,9], + "fromstops": [3,3,5,7,9,11], + "lenstarts": 6, + "start": 2, + "stop": 6, + "step": 2 + }, + "outputs": { + "tooffsets": [0,1,1,1,1,1,1], + "tocarry": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3,3,5,7,9], + "fromstops": [3,3,5,7,9,11], + "lenstarts": 6, + "start": 6, + "stop": 2, + "step": -2 + }, + "outputs": { + "tooffsets": [0,0,0,0,0,0,0], + "tocarry": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3,3,5,7,9], + "fromstops": [3,3,5,7,9,11], + "lenstarts": 6, + "start": 0, + "stop": 6, + "step": -2 + }, + "outputs": { + "tooffsets": [0,0,0,0,0,0,0], + "tocarry": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,2,2,3,5], + "fromstops": [2,2,3,5,7], + "lenstarts": 5, + "start": 7, + "stop": 0, + "step": -2 + }, + "outputs": { + "tooffsets": [0,1,1,1,2,3], + "tocarry": [1,4,6] + } + } + ] + }, + { + "name": "awkward_ListArray_getitem_next_array", + "status": true, + "tests": [ + { + "error": true, + "message": "index out of range", + "inputs": { + "fromarray": [-3,0,1,1], + "fromstarts": [0], + "fromstops": [2], + "lenarray": 4, + "lencontent": 3, + "lenstarts": 1 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [0,0,1,1] + } + }, + { + "error": true, + "message": "stops[i] < starts[i]", + "inputs": { + "fromarray": [0,3], + "fromstarts": [5,4,8], + "fromstops": [4,8,12], + "lenarray": 2, + "lencontent": 13, + "lenstarts": 3 + }, + "outputs": { + "toadvanced": [0,1,0,1,0,1], + "tocarry": [0,3,4,7,8,11] + } + }, + { + "error": true, + "message": "stops[i] > len(content)", + "inputs": { + "fromarray": [0,3], + "fromstarts": [4,8], + "fromstops": [8,14], + "lenarray": 2, + "lencontent": 13, + "lenstarts": 2 + }, + "outputs": { + "toadvanced": [0,1,0,1], + "tocarry": [4,7,8,11] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,0,1,1], + "fromstarts": [0], + "fromstops": [2], + "lenarray": 4, + "lencontent": 3, + "lenstarts": 1 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [0,0,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,3], + "fromstarts": [0,4,8], + "fromstops": [4,8,12], + "lenarray": 2, + "lencontent": 13, + "lenstarts": 3 + }, + "outputs": { + "toadvanced": [0,1,0,1,0,1], + "tocarry": [0,3,4,7,8,11] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [1,1,0,0], + "fromstarts": [0], + "fromstops": [2], + "lenarray": 4, + "lencontent": 3, + "lenstarts": 1 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [1,1,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [], + "fromstarts": [], + "fromstops": [], + "lenarray": 0, + "lencontent": 0, + "lenstarts": 0 + }, + "outputs": { + "toadvanced": [], + "tocarry": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [0,3], + "fromstarts": [4,8], + "fromstops": [8,12], + "lenarray": 2, + "lencontent": 13, + "lenstarts": 2 + }, + "outputs": { + "toadvanced": [0,1,0,1], + "tocarry": [4,7,8,11] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromarray": [2,1,1,0], + "fromstarts": [6], + "fromstops": [10], + "lenarray": 4, + "lencontent": 10, + "lenstarts": 1 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [8,7,7,6] + } + } + ] + }, + { + "name": "awkward_ListArray_min_range", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [], + "fromstops": [], + "lenstarts": 0 + }, + "outputs": { + "tomin": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3,4,5,8], + "fromstops": [3,3,6,8,9], + "lenstarts": 5 + }, + "outputs": { + "tomin": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3,5], + "fromstops": [3,3,7], + "lenstarts": 3 + }, + "outputs": { + "tomin": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [6,5,3,3,0], + "fromstops": [10,6,5,3,3], + "lenstarts": 5 + }, + "outputs": { + "tomin": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [6,5,3,0], + "fromstops": [10,6,5,3], + "lenstarts": 4 + }, + "outputs": { + "tomin": [1] + } + } + ] + }, + { + "name": "awkward_ListArray_rpad_and_clip_length_axis1", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [], + "fromstops": [], + "lenstarts": 0, + "target": 1 + }, + "outputs": { + "tomin": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3,4,5,8], + "fromstops": [3,3,6,8,9], + "lenstarts": 5, + "target": 1 + }, + "outputs": { + "tomin": [10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [6,5,3,0], + "fromstops": [10,6,5,3], + "lenstarts": 4, + "target": 1 + }, + "outputs": { + "tomin": [10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3,4,5,8], + "fromstops": [3,3,6,8,9], + "lenstarts": 5, + "target": 2 + }, + "outputs": { + "tomin": [12] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [6,5,3,0], + "fromstops": [10,6,5,3], + "lenstarts": 4, + "target": 3 + }, + "outputs": { + "tomin": [13] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [6,5,3,3,0], + "fromstops": [10,6,5,3,3], + "lenstarts": 5, + "target": 2 + }, + "outputs": { + "tomin": [13] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3,4,5,8], + "fromstops": [3,3,6,8,9], + "lenstarts": 5, + "target": 3 + }, + "outputs": { + "tomin": [15] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [6,5,3,0], + "fromstops": [10,6,5,3], + "lenstarts": 4, + "target": 4 + }, + "outputs": { + "tomin": [16] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [6,5,3,3,0], + "fromstops": [10,6,5,3,3], + "lenstarts": 5, + "target": 3 + }, + "outputs": { + "tomin": [16] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3,4,5,8], + "fromstops": [3,3,6,8,9], + "lenstarts": 5, + "target": 4 + }, + "outputs": { + "tomin": [20] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [6,5,3,3,0], + "fromstops": [10,6,5,3,3], + "lenstarts": 5, + "target": 4 + }, + "outputs": { + "tomin": [20] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3,5], + "fromstops": [3,3,7], + "lenstarts": 3, + "target": 3 + }, + "outputs": { + "tomin": [9] + } + } + ] + }, + { + "name": "awkward_ListArray_validity", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "lencontent": 0, + "length": 0, + "starts": [], + "stops": [] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 2, + "length": 0, + "starts": [], + "stops": [] + }, + "outputs": {} + }, + { + "error": true, + "message": "stop[i] > len(content)", + "inputs": { + "lencontent": 0, + "length": 3, + "starts": [0,0,1], + "stops": [0,1,5] + }, + "outputs": {} + }, + { + "error": true, + "message": "start[i] > stop[i]", + "inputs": { + "lencontent": 1, + "length": 3, + "starts": [1,0,1], + "stops": [0,1,1] + }, + "outputs": {} + }, + { + "error": true, + "message": "stop[i] > len(content)", + "inputs": { + "lencontent": 4, + "length": 3, + "starts": [0,0,1], + "stops": [0,1,5] + }, + "outputs": {} + }, + { + "error": true, + "message": "start[i] < 0", + "inputs": { + "lencontent": 1, + "length": 4, + "starts": [-1,0,1,1], + "stops": [0,1,1,1] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 0, + "length": 5, + "starts": [0,0,0,0,0], + "stops": [0,0,0,0,0] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 0, + "length": 4, + "starts": [0,0,0,0], + "stops": [0,0,0,0] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 0, + "length": 3, + "starts": [0,0,0], + "stops": [0,0,0] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 1, + "length": 3, + "starts": [0,0,1], + "stops": [0,1,1] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 4, + "length": 3, + "starts": [0,0,1], + "stops": [0,1,4] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 1, + "length": 4, + "starts": [0,0,1,1], + "stops": [0,1,1,1] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 6, + "length": 4, + "starts": [0,0,1,3], + "stops": [0,1,3,6] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 10, + "length": 5, + "starts": [0,0,1,3,6], + "stops": [0,1,3,6,10] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 19, + "length": 8, + "starts": [0,0,3,3,8,12,12,16], + "stops": [0,3,3,8,12,12,16,19] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 19, + "length": 9, + "starts": [0,0,3,3,8,12,12,16,19], + "stops": [0,3,3,8,12,12,16,19,19] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 6, + "length": 3, + "starts": [0,1,3], + "stops": [1,3,6] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 15, + "length": 5, + "starts": [0,1,3,6,10], + "stops": [1,3,6,10,15] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 12, + "length": 6, + "starts": [0,1,3,6,7,9], + "stops": [1,3,6,7,9,12] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 8, + "length": 4, + "starts": [0,1,4,5], + "stops": [1,4,5,8] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 3, + "length": 3, + "starts": [0,2,2], + "stops": [2,2,3] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 4, + "length": 3, + "starts": [0,2,2], + "stops": [2,2,4] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 3, + "length": 2, + "starts": [0,2], + "stops": [2,3] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 4, + "length": 2, + "starts": [0,2], + "stops": [2,4] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 8, + "length": 7, + "starts": [0,2,2,4,4,5,5], + "stops": [2,2,4,4,5,5,8] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 6, + "length": 5, + "starts": [0,2,2,4,5], + "stops": [2,2,4,5,6] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 9, + "length": 5, + "starts": [0,2,2,4,5], + "stops": [2,2,4,5,9] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 3, + "length": 3, + "starts": [0,2,3], + "stops": [2,3,3] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 4, + "length": 3, + "starts": [0,2,3], + "stops": [2,3,4] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 5, + "length": 3, + "starts": [0,2,3], + "stops": [2,3,5] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 6, + "length": 3, + "starts": [0,2,3], + "stops": [2,3,6] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 5, + "length": 4, + "starts": [0,2,3,3], + "stops": [2,3,3,5] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 7, + "length": 4, + "starts": [0,2,3,4], + "stops": [2,3,4,7] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 6, + "length": 3, + "starts": [0,2,4], + "stops": [2,4,6] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 7, + "length": 3, + "starts": [0,2,5], + "stops": [2,5,7] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 8, + "length": 3, + "starts": [0,2,6], + "stops": [2,6,8] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 5, + "length": 3, + "starts": [0,3,3], + "stops": [3,3,5] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 7, + "length": 3, + "starts": [0,3,3], + "stops": [3,3,7] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 8, + "length": 3, + "starts": [0,3,3], + "stops": [3,3,8] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 4, + "length": 2, + "starts": [0,3], + "stops": [3,4] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 9, + "length": 4, + "starts": [0,3,3,5], + "stops": [3,3,5,9] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 11, + "length": 6, + "starts": [0,3,3,5,6,10], + "stops": [3,3,5,6,10,11] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 9, + "length": 5, + "starts": [0,3,3,5,6], + "stops": [3,3,5,6,9] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 9, + "length": 6, + "starts": [0,3,3,5,6,8], + "stops": [3,3,5,6,8,9] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 6, + "length": 2, + "starts": [0,3], + "stops": [3,6] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 7, + "length": 2, + "starts": [0,3], + "stops": [3,7] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 11, + "length": 4, + "starts": [0,3,4,7], + "stops": [3,4,7,11] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 25, + "length": 7, + "starts": [0,3,6,11,14,17,20], + "stops": [3,6,11,14,17,20,25] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 20, + "length": 6, + "starts": [0,3,6,11,14,17], + "stops": [3,6,11,14,17,20] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 19, + "length": 5, + "starts": [0,3,6,11,15], + "stops": [3,6,11,15,19] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 10, + "length": 3, + "starts": [0,3,6], + "stops": [3,6,10] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 11, + "length": 3, + "starts": [0,3,6], + "stops": [3,6,11] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 21, + "length": 9, + "starts": [0,3,6,6,10,14,14,18,21], + "stops": [3,6,6,10,14,14,18,21,21] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 21, + "length": 8, + "starts": [0,3,6,6,10,14,14,18], + "stops": [3,6,6,10,14,14,18,21] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 22, + "length": 9, + "starts": [0,3,6,6,11,15,15,19,22], + "stops": [3,6,6,11,15,15,19,22,22] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 22, + "length": 8, + "starts": [0,3,6,6,11,15,15,19], + "stops": [3,6,6,11,15,15,19,22] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 24, + "length": 9, + "starts": [0,3,6,8,13,17,17,21,24], + "stops": [3,6,8,13,17,17,21,24,24] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 24, + "length": 8, + "starts": [0,3,6,8,13,17,17,21], + "stops": [3,6,8,13,17,17,21,24] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 9, + "length": 3, + "starts": [0,3,7], + "stops": [3,7,9] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 10, + "length": 2, + "starts": [0,4], + "stops": [4,10] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 6, + "length": 3, + "starts": [0,4,4], + "stops": [4,4,6] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 10, + "length": 3, + "starts": [0,4,6], + "stops": [4,6,10] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 14, + "length": 4, + "starts": [0,4,6,9], + "stops": [4,6,9,14] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 11, + "length": 6, + "starts": [0,4,7,7,9,9], + "stops": [4,7,7,9,9,11] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 12, + "length": 3, + "starts": [0,4,8], + "stops": [4,8,12] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 30, + "length": 6, + "starts": [0,5,10,15,20,25], + "stops": [5,10,15,20,25,30] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 10, + "length": 2, + "starts": [0,5], + "stops": [5,10] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "lencontent": 12, + "length": 6, + "starts": [3,0,999,2,6,10], + "stops": [7,3,999,4,6,12] + }, + "outputs": {} + } + ] + }, + { + "name": "awkward_ListArray_getitem_jagged_apply", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "contentlen": 0, + "fromstarts": [], + "fromstops": [], + "sliceindex": [], + "sliceinnerlen": 0, + "sliceouterlen": 0, + "slicestarts": [], + "slicestops": [] + }, + "outputs": { + "tocarry": [], + "tooffsets": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "contentlen": 0, + "fromstarts": [0,0,0,0], + "fromstops": [0,0,0,0], + "sliceindex": [], + "sliceinnerlen": 0, + "sliceouterlen": 4, + "slicestarts": [0,0,0,0], + "slicestops": [0,0,0,0] + }, + "outputs": { + "tocarry": [], + "tooffsets": [0,0,0,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "contentlen": 5, + "fromstarts": [0,3,3], + "fromstops": [3,3,5], + "sliceindex": [], + "sliceinnerlen": 0, + "sliceouterlen": 3, + "slicestarts": [0,0,0], + "slicestops": [0,0,0] + }, + "outputs": { + "tocarry": [], + "tooffsets": [0,0,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "contentlen": 5, + "fromstarts": [0,3,3], + "fromstops": [3,3,5], + "sliceindex": [0,1], + "sliceinnerlen": 2, + "sliceouterlen": 3, + "slicestarts": [0,0,0], + "slicestops": [0,0,2] + }, + "outputs": { + "tocarry": [3,4], + "tooffsets": [0,0,0,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "contentlen": 5, + "fromstarts": [0,3,3], + "fromstops": [3,3,5], + "sliceindex": [0,0,1], + "sliceinnerlen": 3, + "sliceouterlen": 3, + "slicestarts": [0,1,1], + "slicestops": [1,1,3] + }, + "outputs": { + "tocarry": [0,3,4], + "tooffsets": [0,1,1,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "contentlen": 5, + "fromstarts": [0,3,3], + "fromstops": [3,3,5], + "sliceindex": [2,0,1], + "sliceinnerlen": 3, + "sliceouterlen": 3, + "slicestarts": [0,1,1], + "slicestops": [1,1,3] + }, + "outputs": { + "tocarry": [2,3,4], + "tooffsets": [0,1,1,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "contentlen": 10, + "fromstarts": [0,3,3,5,6], + "fromstops": [3,3,5,6,10], + "sliceindex": [1,0,1,0,3], + "sliceinnerlen": 5, + "sliceouterlen": 5, + "slicestarts": [0,1,1,3,3], + "slicestops": [1,1,3,3,5] + }, + "outputs": { + "tocarry": [1,3,4,6,9], + "tooffsets": [0,1,1,3,3,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "contentlen": 5, + "fromstarts": [0,3,3], + "fromstops": [3,3,5], + "sliceindex": [0,1], + "sliceinnerlen": 2, + "sliceouterlen": 3, + "slicestarts": [0,2,2], + "slicestops": [2,2,2] + }, + "outputs": { + "tocarry": [0,1], + "tooffsets": [0,2,2,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "contentlen": 4, + "fromstarts": [0,1,1,1,1], + "fromstops": [1,1,1,1,4], + "sliceindex": [0,0,2,1,1,2], + "sliceinnerlen": 6, + "sliceouterlen": 5, + "slicestarts": [0,2,2,2,2], + "slicestops": [2,2,2,2,6] + }, + "outputs": { + "tocarry": [0,0,3,2,2,3], + "tooffsets": [0,2,2,2,2,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "contentlen": 5, + "fromstarts": [0,3,3], + "fromstops": [3,3,5], + "sliceindex": [0,1,0], + "sliceinnerlen": 3, + "sliceouterlen": 3, + "slicestarts": [0,2,2], + "slicestops": [2,2,3] + }, + "outputs": { + "tocarry": [0,1,3], + "tooffsets": [0,2,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "contentlen": 5, + "fromstarts": [0,3,3], + "fromstops": [3,3,5], + "sliceindex": [0,1,1], + "sliceinnerlen": 3, + "sliceouterlen": 3, + "slicestarts": [0,2,2], + "slicestops": [2,2,3] + }, + "outputs": { + "tocarry": [0,1,4], + "tooffsets": [0,2,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "contentlen": 5, + "fromstarts": [0,3,3], + "fromstops": [3,3,5], + "sliceindex": [2,0,1], + "sliceinnerlen": 3, + "sliceouterlen": 3, + "slicestarts": [0,2,2], + "slicestops": [2,2,3] + }, + "outputs": { + "tocarry": [2,0,4], + "tooffsets": [0,2,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "contentlen": 5, + "fromstarts": [0,3,3], + "fromstops": [3,3,5], + "sliceindex": [0,2,0,1], + "sliceinnerlen": 4, + "sliceouterlen": 3, + "slicestarts": [0,2,2], + "slicestops": [2,2,4] + }, + "outputs": { + "tocarry": [0,2,3,4], + "tooffsets": [0,2,2,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "contentlen": 9, + "fromstarts": [0,3,3,5,6], + "fromstops": [3,3,5,6,9], + "sliceindex": [0,2,0,1,0,0,1,2], + "sliceinnerlen": 8, + "sliceouterlen": 5, + "slicestarts": [0,2,2,4,5], + "slicestops": [2,2,4,5,8] + }, + "outputs": { + "tocarry": [0,2,3,4,5,6,7,8], + "tooffsets": [0,2,2,4,5,8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "contentlen": 9, + "fromstarts": [0,3,3,5,6], + "fromstops": [3,3,5,6,9], + "sliceindex": [1,2,0,1,0,0,1,2], + "sliceinnerlen": 8, + "sliceouterlen": 5, + "slicestarts": [0,2,2,4,5], + "slicestops": [2,2,4,5,8] + }, + "outputs": { + "tocarry": [1,2,3,4,5,6,7,8], + "tooffsets": [0,2,2,4,5,8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "contentlen": 9, + "fromstarts": [0,3,3,5,6], + "fromstops": [3,3,5,6,9], + "sliceindex": [0,1,2,0,0,1,2], + "sliceinnerlen": 7, + "sliceouterlen": 5, + "slicestarts": [0,3,3,3,4], + "slicestops": [3,3,3,4,7] + }, + "outputs": { + "tocarry": [0,1,2,5,6,7,8], + "tooffsets": [0,3,3,3,4,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "contentlen": 9, + "fromstarts": [0,3,3,5,6], + "fromstops": [3,3,5,6,9], + "sliceindex": [0,1,2,1,0,0,1,2], + "sliceinnerlen": 8, + "sliceouterlen": 5, + "slicestarts": [0,3,3,4,5], + "slicestops": [3,3,4,5,8] + }, + "outputs": { + "tocarry": [0,1,2,4,5,6,7,8], + "tooffsets": [0,3,3,4,5,8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "contentlen": 5, + "fromstarts": [0,3,3], + "fromstops": [3,3,5], + "sliceindex": [0,1,2,0,1], + "sliceinnerlen": 5, + "sliceouterlen": 3, + "slicestarts": [0,3,3], + "slicestops": [3,3,5] + }, + "outputs": { + "tocarry": [0,1,2,3,4], + "tooffsets": [0,3,3,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "contentlen": 5, + "fromstarts": [0,3,3], + "fromstops": [3,3,5], + "sliceindex": [2,1,0,0,1], + "sliceinnerlen": 5, + "sliceouterlen": 3, + "slicestarts": [0,3,3], + "slicestops": [3,3,5] + }, + "outputs": { + "tocarry": [2,1,0,3,4], + "tooffsets": [0,3,3,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "contentlen": 9, + "fromstarts": [0,3,3,5,6], + "fromstops": [3,3,5,6,9], + "sliceindex": [0,1,2,0,1,0,0,1,2], + "sliceinnerlen": 9, + "sliceouterlen": 5, + "slicestarts": [0,3,3,5,6], + "slicestops": [3,3,5,6,9] + }, + "outputs": { + "tocarry": [0,1,2,3,4,5,6,7,8], + "tooffsets": [0,3,3,5,6,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "contentlen": 6, + "fromstarts": [0,3], + "fromstops": [3,6], + "sliceindex": [2,1,0,2,1,0], + "sliceinnerlen": 6, + "sliceouterlen": 2, + "slicestarts": [0,3], + "slicestops": [3,6] + }, + "outputs": { + "tocarry": [2,1,0,5,4,3], + "tooffsets": [0,3,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "contentlen": 6, + "fromstarts": [0,3,5], + "fromstops": [3,5,6], + "sliceindex": [2,1,1,0,1,0], + "sliceinnerlen": 6, + "sliceouterlen": 3, + "slicestarts": [0,4,5], + "slicestops": [4,4,6] + }, + "outputs": { + "tocarry": [2,1,1,0,5], + "tooffsets": [0,4,4,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "contentlen": 6, + "fromstarts": [0,3,5], + "fromstops": [3,5,6], + "sliceindex": [2,1,1,0,1,0], + "sliceinnerlen": 6, + "sliceouterlen": 3, + "slicestarts": [0,4,5], + "slicestops": [4,5,6] + }, + "outputs": { + "tocarry": [2,1,1,0,4,5], + "tooffsets": [0,4,5,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "contentlen": 8, + "fromstarts": [0,4,7], + "fromstops": [4,7,8], + "sliceindex": [3,2,2,1,1,2], + "sliceinnerlen": 6, + "sliceouterlen": 3, + "slicestarts": [0,4,6], + "slicestops": [4,6,6] + }, + "outputs": { + "tocarry": [3,2,2,1,5,6], + "tooffsets": [0,4,6,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "contentlen": 13, + "fromstarts": [0,4,4,7,8], + "fromstops": [4,4,7,8,13], + "sliceindex": [3,2,1,1,0,1,0,0,1,2], + "sliceinnerlen": 10, + "sliceouterlen": 5, + "slicestarts": [0,5,5,6,8], + "slicestops": [5,5,6,8,10] + }, + "outputs": { + "tocarry": [3,2,1,1,0,5,7,7,9,10], + "tooffsets": [0,5,5,6,8,10] + } + } + ] + }, + { + "name": "awkward_UnionArray_regular_index", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromtags": [], + "length": 0, + "size": 0 + }, + "outputs": { + "current": [], + "toindex": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromtags": [0,1,0,1,0,1], + "length": 6, + "size": 2 + }, + "outputs": { + "current": [3,3], + "toindex": [0,0,1,1,2,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromtags": [1,0,1,1], + "length": 4, + "size": 2 + }, + "outputs": { + "current": [1,3], + "toindex": [0,0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromtags": [1,1,0,0,1,0,1,1], + "length": 8, + "size": 2 + }, + "outputs": { + "current": [3,5], + "toindex": [0,1,0,1,2,2,3,4] + } + } + ] + }, + { + "name": "awkward_UnionArray_regular_index_getsize", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromtags": [], + "length": 0 + }, + "outputs": { + "size": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromtags": [0], + "length": 1 + }, + "outputs": { + "size": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromtags": [-1], + "length": 1 + }, + "outputs": { + "size": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromtags": [0,1,0,1,0,1], + "length": 6 + }, + "outputs": { + "size": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromtags": [1,0,1,1], + "length": 4 + }, + "outputs": { + "size": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromtags": [1,1,0,0,1,0,1,1], + "length": 8 + }, + "outputs": { + "size": [2] + } + } + ] + }, + { + "name": "awkward_IndexedArray_fill", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "base": 0, + "fromindex": [], + "length": 0, + "toindexoffset": 0 + }, + "outputs": { + "toindex": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "base": 0, + "fromindex": [0,1,-1,-1,4], + "length": 5, + "toindexoffset": 0 + }, + "outputs": { + "toindex": [0,1,-1,-1,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "base": 0, + "fromindex": [0,1,2,3,-1], + "length": 5, + "toindexoffset": 0 + }, + "outputs": { + "toindex": [0,1,2,3,-1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "base": 0, + "fromindex": [0,1,2], + "length": 3, + "toindexoffset": 0 + }, + "outputs": { + "toindex": [0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "base": 0, + "fromindex": [-1,-1,0,-1,1,2], + "length": 6, + "toindexoffset": 0 + }, + "outputs": { + "toindex": [-1,-1,0,-1,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "base": 0, + "fromindex": [2,0,-1,0,1,2], + "length": 6, + "toindexoffset": 0 + }, + "outputs": { + "toindex": [2,0,-1,0,1,2] + } + } + ] + }, + { + "name": "awkward_IndexedArray_fill_count", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "base": 0, + "length": 0, + "toindexoffset": 0 + }, + "outputs": { + "toindex": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "base": 0, + "length": 5, + "toindexoffset": 0 + }, + "outputs": { + "toindex": [0,1,2,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "base": 0, + "length": 3, + "toindexoffset": 3 + }, + "outputs": { + "toindex": [123,123,123,0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "base": 3, + "length": 4, + "toindexoffset": 0 + }, + "outputs": { + "toindex": [3,4,5,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "base": 3, + "length": 5, + "toindexoffset": 2 + }, + "outputs": { + "toindex": [123,123,3,4,5,6,7] + } + } + ] + }, + { + "name": "awkward_ListArray_fill", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "base": 0, + "fromstarts": [], + "fromstops": [], + "length": 0, + "tostartsoffset": 0, + "tostopsoffset": 0 + }, + "outputs": { + "tostarts": [], + "tostops": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "base": 0, + "fromstarts": [0,0,1], + "fromstops": [0,1,3], + "length": 3, + "tostartsoffset": 0, + "tostopsoffset": 0 + }, + "outputs": { + "tostarts": [0,0,1], + "tostops": [0,1,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "base": 0, + "fromstarts": [0,2,2], + "fromstops": [2,2,4], + "length": 3, + "tostartsoffset": 0, + "tostopsoffset": 0 + }, + "outputs": { + "tostarts": [0,2,2], + "tostops": [2,2,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "base": 0, + "fromstarts": [0,2,4], + "fromstops": [2,4,6], + "length": 3, + "tostartsoffset": 0, + "tostopsoffset": 0 + }, + "outputs": { + "tostarts": [0,2,4], + "tostops": [2,4,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "base": 0, + "fromstarts": [0,3,3,5,6], + "fromstops": [3,3,5,6,10], + "length": 5, + "tostartsoffset": 0, + "tostopsoffset": 0 + }, + "outputs": { + "tostarts": [0,3,3,5,6], + "tostops": [3,3,5,6,10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "base": 0, + "fromstarts": [0,3,3], + "fromstops": [3,3,5], + "length": 3, + "tostartsoffset": 0, + "tostopsoffset": 0 + }, + "outputs": { + "tostarts": [0,3,3], + "tostops": [3,3,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "base": 0, + "fromstarts": [0,3,6], + "fromstops": [3,6,11], + "length": 3, + "tostartsoffset": 0, + "tostopsoffset": 0 + }, + "outputs": { + "tostarts": [0,3,6], + "tostops": [3,6,11] + } + }, + { + "error": false, + "message": "", + "inputs": { + "base": 0, + "fromstarts": [0,5,10], + "fromstops": [5,10,15], + "length": 3, + "tostartsoffset": 0, + "tostopsoffset": 0 + }, + "outputs": { + "tostarts": [0,5,10], + "tostops": [5,10,15] + } + }, + { + "error": false, + "message": "", + "inputs": { + "base": 0, + "fromstarts": [0,7], + "fromstops": [7,14], + "length": 2, + "tostartsoffset": 0, + "tostopsoffset": 0 + }, + "outputs": { + "tostarts": [0,7], + "tostops": [7,14] + } + }, + { + "error": false, + "message": "", + "inputs": { + "base": 0, + "fromstarts": [1,3,3,3], + "fromstops": [3,3,3,5], + "length": 4, + "tostartsoffset": 0, + "tostopsoffset": 0 + }, + "outputs": { + "tostarts": [1,3,3,3], + "tostops": [3,3,3,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "base": 0, + "fromstarts": [3,5], + "fromstops": [5,5], + "length": 2, + "tostartsoffset": 0, + "tostopsoffset": 0 + }, + "outputs": { + "tostarts": [3,5], + "tostops": [5,5] + } + } + ] + }, + { + "name": "awkward_UnionArray_fillindex", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,0,1,1], + "length": 4, + "toindexoffset": 0 + }, + "outputs": { + "toindex": [0,0,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [], + "length": 0, + "toindexoffset": 0 + }, + "outputs": { + "toindex": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,1,2,0,1,2], + "length": 6, + "toindexoffset": 0 + }, + "outputs": { + "toindex": [0,1,2,0,1,2] + } + } + ] + }, + { + "name": "awkward_UnionArray_flatten_length", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromtags": [], + "fromindex": [], + "length": 0, + "offsetsraws": [ + [], + [] + ] + }, + "outputs": { + "total_length": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromtags": [0,1,0,1], + "fromindex": [0,0,1,1], + "length": 4, + "offsetsraws": [ + [0,2,2,3,5], + [2,2,3,5,6] + ] + }, + "outputs": { + "total_length": [3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromtags": [0,0,0,0], + "fromindex": [0,1,2,3], + "length": 4, + "offsetsraws": [ + [0,1,3,5,7], + [1,3,5,7,9] + ] + }, + "outputs": { + "total_length": [7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromtags": [1,1,1,1], + "fromindex": [0,1,2,3], + "length": 4, + "offsetsraws": [ + [0,1,3,5,7], + [1,3,5,7,9] + ] + }, + "outputs": { + "total_length": [8] + } + } + ] + }, + { + "name": "awkward_UnionArray_flatten_combine", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromtags": [], + "fromindex": [], + "length": 0, + "offsetsraws": [ + [], + [] + ] + }, + "outputs": { + "totags": [], + "toindex": [], + "tooffsets": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromtags": [0,1,0,1], + "fromindex": [0,0,1,1], + "length": 4, + "offsetsraws": [ + [0,2,2,3,5], + [2,2,3,5,6] + ] + }, + "outputs": { + "totags": [0,0,1], + "toindex": [0,1,2], + "tooffsets": [0,2,2,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromtags": [0,0,0,0], + "fromindex": [0,1,2,3], + "length": 4, + "offsetsraws": [ + [0,1,3,5,7], + [1,3,5,7,9] + ] + }, + "outputs": { + "totags": [0,0,0,0,0,0,0], + "toindex": [0,1,2,3,4,5,6], + "tooffsets": [0,1,3,5,7] + } + } + ] + }, + { + "name": "awkward_UnionArray_validity", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "index": [], + "lencontents": [], + "length": 0, + "numcontents": 2, + "tags": [] + }, + "outputs": {} + }, + { + "error": true, + "message": "tags[i] < 0", + "inputs": { + "index": [0,1,2,3,0,1], + "lencontents": [4,2,0,945], + "length": 6, + "numcontents": 2, + "tags": [-1,0,0,0,1,1] + }, + "outputs": {} + }, + { + "error": true, + "message": "index[i] < 0", + "inputs": { + "index": [-1,1,2,0,1,2,3], + "lencontents": [3,4], + "length": 7, + "numcontents": 2, + "tags": [0,0,0,1,1,1,1] + }, + "outputs": {} + }, + { + "error": true, + "message": "tags[i] >= len(contents)", + "inputs": { + "index": [0,1,0,1,2,3], + "lencontents": [2,4,32,49,0,0], + "length": 6, + "numcontents": 2, + "tags": [0,0,1,1,1,2] + }, + "outputs": {} + }, + { + "error": true, + "message": "index[i] >= len(content[tags[i]])", + "inputs": { + "index": [5,0,1,1,2,3,2,4], + "lencontents": [5,3,32,33], + "length": 8, + "numcontents": 2, + "tags": [0,1,1,0,0,0,1,0] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,2,3,0,1], + "lencontents": [4,2,0,945], + "length": 6, + "numcontents": 2, + "tags": [0,0,0,0,1,1] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,2,0,1,2,3], + "lencontents": [3,4], + "length": 7, + "numcontents": 2, + "tags": [0,0,0,1,1,1,1] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,0,1,2,3], + "lencontents": [2,4,32,49,0,0], + "length": 6, + "numcontents": 2, + "tags": [0,0,1,1,1,1] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,0,1,1,2,3,2,4], + "lencontents": [5,3,32,33], + "length": 8, + "numcontents": 2, + "tags": [0,1,1,0,0,0,1,0] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,0,1,1,2,3,2,4], + "lencontents": [5,3,32,625,0,0,0], + "length": 8, + "numcontents": 2, + "tags": [0,1,1,0,0,0,1,0] + }, + "outputs": {} + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,0,1,1,2,2,3], + "lencontents": [3,4,32,177], + "length": 7, + "numcontents": 2, + "tags": [0,1,1,0,0,1,1] + }, + "outputs": {} + } + ] + }, + { + "name": "awkward_ByteMaskedArray_reduce_next_nonlocal_nextshifts_fromshifts_64", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "length": 0, + "mask": [], + "valid_when": false, + "shifts": [] + }, + "outputs": { + "nextshifts": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 7, + "mask": [0,0,0,1,1,0,0], + "valid_when": false, + "shifts": [0,1,1,0,1,1,0] + }, + "outputs": { + "nextshifts": [0,1,1,3,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "mask": [0], + "valid_when": false, + "shifts": [0] + }, + "outputs": { + "nextshifts": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "mask": [0], + "valid_when": false, + "shifts": [1] + }, + "outputs": { + "nextshifts": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "mask": [0], + "valid_when": true, + "shifts": [1] + }, + "outputs": { + "nextshifts": [123] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 7, + "mask": [0,0,0,1,1,0,0], + "valid_when": true, + "shifts": [0,1,1,0,1,1,0] + }, + "outputs": { + "nextshifts": [3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "mask": [0,1,0,1,1], + "valid_when": true, + "shifts": [0,0,1,0,0] + }, + "outputs": { + "nextshifts": [1,2,2] + } + } + ] + }, + { + "name": "awkward_ByteMaskedArray_reduce_next_nonlocal_nextshifts_64", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "length": 0, + "mask": [], + "valid_when": false + }, + "outputs": { + "nextshifts": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 7, + "mask": [0,0,0,1,1,0,0], + "valid_when": false + }, + "outputs": { + "nextshifts": [0,0,0,2,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "mask": [0], + "valid_when": false + }, + "outputs": { + "nextshifts": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "mask": [0], + "valid_when": true + }, + "outputs": { + "nextshifts": [123] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 7, + "mask": [0,0,0,1,1,0,0], + "valid_when": true + }, + "outputs": { + "nextshifts": [3,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "mask": [0,1,0,1,1], + "valid_when": true + }, + "outputs": { + "nextshifts": [1,2,2] + } + } + ] + }, + { + "name": "awkward_ByteMaskedArray_reduce_next_64", + "status": true, + "tests": [ + { + "inputs": { + "mask": [], + "validwhen": false, + "offsets": [0], + "outlength": 0 + }, + "outputs": { + "nextcarry": [], + "nextoffsets": [0], + "outindex": [] + }, + "error": false + }, + { + "inputs": { + "mask": [0,0,0,1,1,0,0], + "validwhen": false, + "offsets": [0,2,4,7], + "outlength": 3 + }, + "outputs": { + "nextcarry": [0,1,2,5,6], + "nextoffsets": [0,2,3,5], + "outindex": [0,1,2,-1,-1,3,4] + }, + "error": false + }, + { + "inputs": { + "mask": [0], + "validwhen": false, + "offsets": [0,0,0,1], + "outlength": 3 + }, + "outputs": { + "nextcarry": [0], + "nextoffsets": [0,0,0,1], + "outindex": [0] + }, + "error": false + }, + { + "inputs": { + "mask": [1], + "validwhen": false, + "offsets": [0,0,1], + "outlength": 2 + }, + "outputs": { + "nextcarry": [], + "nextoffsets": [0,0,0], + "outindex": [-1] + }, + "error": false + }, + { + "inputs": { + "mask": [0,1,0,1,1], + "validwhen": true, + "offsets": [0,2,5], + "outlength": 2 + }, + "outputs": { + "nextcarry": [1,3,4], + "nextoffsets": [0,1,3], + "outindex": [-1,0,-1,1,2] + }, + "error": false + } + ] + }, + { + "name": "awkward_IndexedArray_local_preparenext_64", + "status": true, + "tests": [ + { + "inputs": { + "starts": [0], + "offsets": [0,5], + "nextoffsets": [0,4], + "outlength": 1 + }, + "outputs": { + "tocarry": [0,1,2,3,-1] + }, + "error": false + }, + { + "inputs": { + "starts": [0,6], + "offsets": [0,6,11], + "nextoffsets": [0,4,7], + "outlength": 2 + }, + "outputs": { + "tocarry": [0,1,2,3,-1,-1,4,5,6,-1,-1] + }, + "error": false + }, + { + "inputs": { + "starts": [], + "offsets": [0], + "nextoffsets": [0], + "outlength": 0 + }, + "outputs": { + "tocarry": [] + }, + "error": false + }, + { + "inputs": { + "starts": [0,5,8,11,14], + "offsets": [0,5,8,11,14,17], + "nextoffsets": [0,3,3,5,6,9], + "outlength": 5 + }, + "outputs": { + "tocarry": [0,1,2,-1,-1,-1,-1,-1,3,4,-1,5,-1,-1,6,7,8] + }, + "error": false + }, + { + "inputs": { + "starts": [0,5,8,11,14], + "offsets": [0,5,8,11,14,17], + "nextoffsets": [0,3,4,6,7,10], + "outlength": 5 + }, + "outputs": { + "tocarry": [0,1,2,-1,-1,3,-1,-1,4,5,-1,6,-1,-1,7,8,9] + }, + "error": false + } + ] + }, + { + "name": "awkward_IndexedArray_index_of_nulls", + "status": true, + "tests": [ + { + "inputs": { + "fromindex": [], + "starts": [], + "offsets": [0], + "outlength": 0 + }, + "outputs": { + "toindex": [] + }, + "error": false + }, + { + "inputs": { + "fromindex": [-1,-1,0,1,2,-1,-1,-1,3,-1,4,5,-1,-1,6,7,8], + "starts": [0,5,8,11,14], + "offsets": [0,5,8,11,14,17], + "outlength": 5 + }, + "outputs": { + "toindex": [0,1,0,1,2,1,1,2] + }, + "error": false + }, + { + "inputs": { + "fromindex": [-1,-1,3,5,6,-1,-1,-1,-1,7,0,-1,4,-1,8,1,2], + "starts": [0,5,10,15,16], + "offsets": [0,5,10,15,16,17], + "outlength": 5 + }, + "outputs": { + "toindex": [0,1,0,1,2,3,1,3] + }, + "error": false + }, + { + "inputs": { + "fromindex": [-1,-1,0,1,2], + "starts": [0], + "offsets": [0,5], + "outlength": 1 + }, + "outputs": { + "toindex": [0,1] + }, + "error": false + }, + { + "inputs": { + "fromindex": [0,-1,3,5,6,1,-1,4,-1,7,2,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], + "starts": [0,5,10,15,20], + "offsets": [0,5,10,15,20,25], + "outlength": 5 + }, + "outputs": { + "toindex": [1,1,3,1,2,3,0,1,2,3,4,0,1,2,3,4] + }, + "error": false + }, + { + "inputs": { + "fromindex": [0,-1,1,2,-1,3,4,5], + "starts": [0], + "offsets": [0,8], + "outlength": 1 + }, + "outputs": { + "toindex": [1,4] + }, + "error": false + }, + { + "inputs": { + "fromindex": [0,1,-1,2], + "starts": [0], + "offsets": [0,4], + "outlength": 1 + }, + "outputs": { + "toindex": [2] + }, + "error": false + }, + { + "inputs": { + "fromindex": [0,1,-1,-1,4], + "starts": [0], + "offsets": [0,5], + "outlength": 1 + }, + "outputs": { + "toindex": [2,3] + }, + "error": false + }, + { + "inputs": { + "fromindex": [0,1,-1,2,3,-1], + "starts": [0], + "offsets": [0,6], + "outlength": 1 + }, + "outputs": { + "toindex": [2,5] + }, + "error": false + }, + { + "inputs": { + "fromindex": [0,1,-1,2,3,-1,4,5,-1,6,7,-1], + "starts": [0,6], + "offsets": [0,6,12], + "outlength": 2 + }, + "outputs": { + "toindex": [2,5,2,5] + }, + "error": false + }, + { + "inputs": { + "fromindex": [0,1,2,-1,-1,-1,-1,7,8], + "starts": [0,4], + "offsets": [0,4,9], + "outlength": 2 + }, + "outputs": { + "toindex": [3,0,1,2] + }, + "error": false + } + ] + }, + { + "name": "awkward_IndexedArray_reduce_next_fix_offsets_64", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "outindexlength": 6, + "starts": [0,1,2,5], + "startslength": 4 + }, + "outputs": { + "outoffsets": [0,1,2,5,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "outindexlength": 0, + "starts": [], + "startslength": 0 + }, + "outputs": { + "outoffsets": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "outindexlength": 2, + "starts": [0], + "startslength": 1 + }, + "outputs": { + "outoffsets": [0,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "outindexlength": 9, + "starts": [0,3,3,5,6], + "startslength": 5 + }, + "outputs": { + "outoffsets": [0,3,3,5,6,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "outindexlength": 6, + "starts": [0,3], + "startslength": 2 + }, + "outputs": { + "outoffsets": [0,3,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "outindexlength": 4, + "starts": [0], + "startslength": 1 + }, + "outputs": { + "outoffsets": [0,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "outindexlength": 5, + "starts": [0], + "startslength": 1 + }, + "outputs": { + "outoffsets": [0,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "outindexlength": 8, + "starts": [0], + "startslength": 1 + }, + "outputs": { + "outoffsets": [0,8] + } + } + ] + }, + { + "name": "awkward_IndexedArray_reduce_next_nonlocal_nextshifts_64", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "index": [], + "length": 0 + }, + "outputs": { + "nextshifts": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,2,-1,3,-1,4], + "length": 7 + }, + "outputs": { + "nextshifts": [0,0,0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,2,-1,-1,-1,-1,7,8], + "length": 9 + }, + "outputs": { + "nextshifts": [0,0,0,4,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,-1,2,3,-1], + "length": 6 + }, + "outputs": { + "nextshifts": [0,0,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,-1,2,3,4], + "length": 6 + }, + "outputs": { + "nextshifts": [0,0,1,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,-1,2,3,-1,4], + "length": 7 + }, + "outputs": { + "nextshifts": [0,0,1,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,-1,2,3,-1,4,5,-1,6,7,-1], + "length": 12 + }, + "outputs": { + "nextshifts": [0,0,1,1,2,2,3,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,1,-1,-1,4], + "length": 5 + }, + "outputs": { + "nextshifts": [0,0,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [4,2,-1,-1,1,0,1], + "length": 7 + }, + "outputs": { + "nextshifts": [0,0,2,2,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [-1,-1,0,1,2], + "length": 5 + }, + "outputs": { + "nextshifts": [2,2,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [-1,-1,0,1,2,-1,-1,-1,3,-1,4,5,-1,-1,6,7,8], + "length": 17 + }, + "outputs": { + "nextshifts": [2,2,2,5,6,6,8,8,8] + } + } + ] + }, + { + "name": "awkward_IndexedArray_reduce_next_nonlocal_nextshifts_fromshifts_64", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "index": [], + "length": 0, + "shifts": [] + }, + "outputs": { + "nextshifts": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,3,4,1,-1,5,2], + "length": 7, + "shifts": [0,0,1,0,0,1,0] + }, + "outputs": { + "nextshifts": [0,0,1,0,2,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,3,4,1,-1,5,2], + "length": 7, + "shifts": [0,1,1,0,1,1,0] + }, + "outputs": { + "nextshifts": [0,1,1,0,2,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,-1,3,5,6,1,-1,4,-1,7,2,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], + "length": 25, + "shifts": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] + }, + "outputs": { + "nextshifts": [0,1,1,1,1,2,3,3,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [0,-1,4,1,3,5,2], + "length": 7, + "shifts": [0,1,1,0,1,1,0] + }, + "outputs": { + "nextshifts": [0,2,1,2,2,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index": [-1,-1,3,5,6,-1,-1,-1,-1,7,0,-1,4,-1,8,1,2], + "length": 17, + "shifts": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] + }, + "outputs": { + "nextshifts": [2,2,2,6,6,7,8,8,8] + } + } + ] + }, + { + "name": "awkward_ListArray_getitem_next_array_advanced", + "status": true, + "tests": [ + { + "error": true, + "message": "stops[i] < starts[i]", + "inputs": { + "fromadvanced": [0,1], + "fromarray": [0,0], + "fromstarts": [0,0], + "fromstops": [-1,1], + "lencontent": 5, + "lenstarts": 2 + }, + "outputs": { + "toadvanced": [0,1], + "tocarry": [0,0] + } + }, + { + "error": true, + "message": "stops[i] > len(content)", + "inputs": { + "fromadvanced": [0], + "fromarray": [0], + "fromstarts": [0], + "fromstops": [5], + "lencontent": 4, + "lenstarts": 1 + }, + "outputs": { + "toadvanced": [0], + "tocarry": [0] + } + }, + { + "error": true, + "message": "index out of range", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [0,1,-4,1], + "fromstarts": [0,0,0,0], + "fromstops": [3,3,3,3], + "lencontent": 6, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [0,1,2,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1], + "fromarray": [0,0], + "fromstarts": [0,0], + "fromstops": [1,1], + "lencontent": 5, + "lenstarts": 2 + }, + "outputs": { + "toadvanced": [0,1], + "tocarry": [0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0], + "fromarray": [0], + "fromstarts": [0], + "fromstops": [2], + "lencontent": 4, + "lenstarts": 1 + }, + "outputs": { + "toadvanced": [0], + "tocarry": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [], + "fromarray": [], + "fromstarts": [], + "fromstops": [], + "lencontent": 0, + "lenstarts": 0 + }, + "outputs": { + "toadvanced": [], + "tocarry": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [0,1,-1,1], + "fromstarts": [0,0,0,0], + "fromstops": [3,3,3,3], + "lencontent": 6, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [0,1,2,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [0,0,0,0], + "fromstarts": [0,3,3,3], + "fromstops": [3,6,6,6], + "lencontent": 6, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [0,3,3,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1], + "fromarray": [1,0], + "fromstarts": [0,0], + "fromstops": [3,3], + "lencontent": 5, + "lenstarts": 2 + }, + "outputs": { + "toadvanced": [0,1], + "tocarry": [1,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [1,0,0,1], + "fromstarts": [0,0,0,0], + "fromstops": [3,3,3,3], + "lencontent": 6, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [1,0,0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1], + "fromarray": [0,0], + "fromstarts": [1,0], + "fromstops": [3,2], + "lencontent": 3, + "lenstarts": 2 + }, + "outputs": { + "toadvanced": [0,1], + "tocarry": [1,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [0,1,-1,1], + "fromstarts": [10,10,10,10], + "fromstops": [15,15,15,15], + "lencontent": 30, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [10,11,14,11] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0], + "fromarray": [0], + "fromstarts": [1], + "fromstops": [3], + "lencontent": 3, + "lenstarts": 1 + }, + "outputs": { + "toadvanced": [0], + "tocarry": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [1,0,0,1], + "fromstarts": [10,10,10,10], + "fromstops": [15,15,15,15], + "lencontent": 30, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [11,10,10,11] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [1,-2,0,-1], + "fromstarts": [10,10,10,10], + "fromstops": [15,15,15,15], + "lencontent": 30, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [11,13,10,14] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [1,-2,0,-1], + "fromstarts": [10,0,0,5], + "fromstops": [15,5,5,10], + "lencontent": 30, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [11,3,0,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [1,0,0,1], + "fromstarts": [0,15,15,15], + "fromstops": [5,20,20,20], + "lencontent": 30, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [1,15,15,16] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1], + "fromarray": [1,2], + "fromstarts": [0,0], + "fromstops": [3,3], + "lencontent": 5, + "lenstarts": 2 + }, + "outputs": { + "toadvanced": [0,1], + "tocarry": [1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [2,0,0,1], + "fromstarts": [10,10,10,10], + "fromstops": [15,15,15,15], + "lencontent": 30, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [12,10,10,11] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [2,2,2,2], + "fromstarts": [10,0,0,5], + "fromstops": [15,5,5,10], + "lencontent": 30, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [12,2,2,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [-2,-2,-2,-2], + "fromstarts": [10,10,10,10], + "fromstops": [15,15,15,15], + "lencontent": 30, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [13,13,13,13] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [-2,-2,-2,-2], + "fromstarts": [10,0,0,5], + "fromstops": [15,5,5,10], + "lencontent": 30, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [13,3,3,8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [1,0,0,1], + "fromstarts": [0,3,3,3], + "fromstops": [3,6,6,6], + "lencontent": 6, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [1,3,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [1,0,0,1], + "fromstarts": [0,5,10,5], + "fromstops": [5,10,15,10], + "lencontent": 30, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [1,5,10,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [0,1,-1,1], + "fromstarts": [15,0,0,15], + "fromstops": [20,5,5,20], + "lencontent": 30, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [15,1,4,16] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [0,1,-1,1], + "fromstarts": [15,15,15,15], + "fromstops": [20,20,20,20], + "lencontent": 30, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [15,16,19,16] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [1,0,0,1], + "fromstarts": [15,15,15,15], + "fromstops": [20,20,20,20], + "lencontent": 30, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [16,15,15,16] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [-1,-1,-1,-1], + "fromstarts": [15,0,0,15], + "fromstops": [20,5,5,20], + "lencontent": 30, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [19,4,4,19] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1], + "fromarray": [-1,0], + "fromstarts": [0,0], + "fromstops": [3,3], + "lencontent": 5, + "lenstarts": 2 + }, + "outputs": { + "toadvanced": [0,1], + "tocarry": [2,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [-1,-1,-1,-1], + "fromstarts": [0,0,0,0], + "fromstops": [3,3,3,3], + "lencontent": 6, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [2,2,2,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1], + "fromarray": [1,2], + "fromstarts": [1,1], + "fromstops": [4,4], + "lencontent": 4, + "lenstarts": 2 + }, + "outputs": { + "toadvanced": [0,1], + "tocarry": [2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [-1,-1,-1,-1], + "fromstarts": [0,3,3,3], + "fromstops": [3,6,6,6], + "lencontent": 6, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [2,5,5,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [0,0,0,0], + "fromstarts": [3,0,0,3], + "fromstops": [6,3,3,6], + "lencontent": 6, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [3,0,0,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0], + "fromarray": [1], + "fromstarts": [2], + "fromstops": [5], + "lencontent": 5, + "lenstarts": 1 + }, + "outputs": { + "toadvanced": [0], + "tocarry": [3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1], + "fromarray": [-1,0], + "fromstarts": [1,1], + "fromstops": [4,4], + "lencontent": 4, + "lenstarts": 2 + }, + "outputs": { + "toadvanced": [0,1], + "tocarry": [3,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [0,1,-1,1], + "fromstarts": [3,0,0,3], + "fromstops": [6,3,3,6], + "lencontent": 6, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [3,1,2,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [0,0,0,0], + "fromstarts": [3,3,3,3], + "fromstops": [6,6,6,6], + "lencontent": 6, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [3,3,3,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [0,1,-1,1], + "fromstarts": [3,3,3,3], + "fromstops": [6,6,6,6], + "lencontent": 6, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [3,4,5,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1], + "fromarray": [1,1], + "fromstarts": [3,0], + "fromstops": [5,3], + "lencontent": 5, + "lenstarts": 2 + }, + "outputs": { + "toadvanced": [0,1], + "tocarry": [4,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [1,1,0,0], + "fromstarts": [3,0,0,6], + "fromstops": [5,3,3,9], + "lencontent": 9, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [4,1,0,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [-1,-1,-1,-1], + "fromstarts": [0,15,15,15], + "fromstops": [5,20,20,20], + "lencontent": 30, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [4,19,19,19] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [1,-1,0,0], + "fromstarts": [3,0,0,3], + "fromstops": [5,3,3,5], + "lencontent": 5, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [4,2,0,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [1,0,0,1], + "fromstarts": [3,3,3,3], + "fromstops": [6,6,6,6], + "lencontent": 6, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [4,3,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [-1,-1,-1,-1], + "fromstarts": [0,5,10,5], + "fromstops": [5,10,15,10], + "lencontent": 30, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [4,9,14,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3,4,5], + "fromarray": [2,0,1,1,2,0], + "fromstarts": [3,0,3,3,3,0], + "fromstops": [6,3,6,6,6,3], + "lencontent": 6, + "lenstarts": 6 + }, + "outputs": { + "toadvanced": [0,1,2,3,4,5], + "tocarry": [5,0,4,4,5,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [0,1,-1,1], + "fromstarts": [5,0,0,5], + "fromstops": [10,5,5,10], + "lencontent": 30, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [5,1,4,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [-1,-1,-1,-1], + "fromstarts": [3,0,0,3], + "fromstops": [6,3,3,6], + "lencontent": 6, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [5,2,2,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [1,1,0,0], + "fromstarts": [6,0,0,6], + "fromstops": [9,3,3,9], + "lencontent": 9, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [7,1,0,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromadvanced": [0,1,2,3], + "fromarray": [-1,-1,-1,-1], + "fromstarts": [5,0,0,5], + "fromstops": [10,5,5,10], + "lencontent": 30, + "lenstarts": 4 + }, + "outputs": { + "toadvanced": [0,1,2,3], + "tocarry": [9,4,4,9] + } + } + ] + }, + { + "name": "awkward_ListArray_getitem_next_at", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "at": -2, + "fromstarts": [], + "fromstops": [], + "lenstarts": 0 + }, + "outputs": { + "tocarry": [] + } + }, + { + "error": true, + "message": "index out of range", + "inputs": { + "at": -2, + "fromstarts": [0], + "fromstops": [1], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [0] + } + }, + { + "error": true, + "message": "index out of range", + "inputs": { + "at": 1, + "fromstarts": [3,5,6], + "fromstops": [5,6,9], + "lenstarts": 3 + }, + "outputs": { + "tocarry": [3,5,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 0, + "fromstarts": [], + "fromstops": [], + "lenstarts": 0 + }, + "outputs": { + "tocarry": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 0, + "fromstarts": [0], + "fromstops": [1], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 0, + "fromstarts": [0], + "fromstops": [2], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 0, + "fromstarts": [0], + "fromstops": [3], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": -5, + "fromstarts": [0], + "fromstops": [5], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 0, + "fromstarts": [0,1], + "fromstops": [1,2], + "lenstarts": 2 + }, + "outputs": { + "tocarry": [0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 0, + "fromstarts": [0,1,2,3], + "fromstops": [1,2,3,4], + "lenstarts": 4 + }, + "outputs": { + "tocarry": [0,1,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 0, + "fromstarts": [0,1,2,3,4], + "fromstops": [1,2,3,4,5], + "lenstarts": 5 + }, + "outputs": { + "tocarry": [0,1,2,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 0, + "fromstarts": [0,2,3], + "fromstops": [2,3,5], + "lenstarts": 3 + }, + "outputs": { + "tocarry": [0,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 0, + "fromstarts": [0,3,5,6], + "fromstops": [3,5,6,10], + "lenstarts": 4 + }, + "outputs": { + "tocarry": [0,3,5,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 0, + "fromstarts": [10], + "fromstops": [15], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 1, + "fromstarts": [0], + "fromstops": [2], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 1, + "fromstarts": [0], + "fromstops": [3], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": -2, + "fromstarts": [0], + "fromstops": [3], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 1, + "fromstarts": [0], + "fromstops": [5], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 1, + "fromstarts": [10], + "fromstops": [15], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [11] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 0, + "fromstarts": [1], + "fromstops": [2], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 0, + "fromstarts": [1], + "fromstops": [3], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": -2, + "fromstarts": [10], + "fromstops": [15], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [13] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 1, + "fromstarts": [0,3], + "fromstops": [3,5], + "lenstarts": 2 + }, + "outputs": { + "tocarry": [1,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 1, + "fromstarts": [0,5], + "fromstops": [5,10], + "lenstarts": 2 + }, + "outputs": { + "tocarry": [1,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 1, + "fromstarts": [15], + "fromstops": [20], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [16] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": -2, + "fromstarts": [15], + "fromstops": [20], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [18] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": -1, + "fromstarts": [15], + "fromstops": [20], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [19] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": -1, + "fromstarts": [0], + "fromstops": [3], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 1, + "fromstarts": [1], + "fromstops": [3], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 1, + "fromstarts": [1], + "fromstops": [4], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 0, + "fromstarts": [2], + "fromstops": [3], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 1, + "fromstarts": [2], + "fromstops": [5], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 0, + "fromstarts": [3], + "fromstops": [5], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 0, + "fromstarts": [3], + "fromstops": [6], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 0, + "fromstarts": [3,5,6], + "fromstops": [5,6,9], + "lenstarts": 3 + }, + "outputs": { + "tocarry": [3,5,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": -1, + "fromstarts": [0], + "fromstops": [5], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 4, + "fromstarts": [0], + "fromstops": [5], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 1, + "fromstarts": [3], + "fromstops": [5], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 1, + "fromstarts": [3], + "fromstops": [6], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": -2, + "fromstarts": [3], + "fromstops": [6], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": -1, + "fromstarts": [3,5,6], + "fromstops": [5,6,9], + "lenstarts": 3 + }, + "outputs": { + "tocarry": [4,5,8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": -1, + "fromstarts": [0,5], + "fromstops": [5,10], + "lenstarts": 2 + }, + "outputs": { + "tocarry": [4,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 0, + "fromstarts": [5,10], + "fromstops": [10,15], + "lenstarts": 2 + }, + "outputs": { + "tocarry": [5,10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": -1, + "fromstarts": [3], + "fromstops": [6], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 0, + "fromstarts": [5], + "fromstops": [10], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": -5, + "fromstarts": [5], + "fromstops": [10], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 1, + "fromstarts": [5,10], + "fromstops": [10,15], + "lenstarts": 2 + }, + "outputs": { + "tocarry": [6,11] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 1, + "fromstarts": [5], + "fromstops": [10], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 1, + "fromstarts": [6], + "fromstops": [10], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 1, + "fromstarts": [6], + "fromstops": [9], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": -2, + "fromstarts": [5], + "fromstops": [10], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": -1, + "fromstarts": [5,10], + "fromstops": [10,15], + "lenstarts": 2 + }, + "outputs": { + "tocarry": [9,14] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": -1, + "fromstarts": [5], + "fromstops": [10], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "at": 4, + "fromstarts": [5], + "fromstops": [10], + "lenstarts": 1 + }, + "outputs": { + "tocarry": [9] + } + } + ] + }, + { + "name": "awkward_ListArray_getitem_next_range_counts", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [], + "lenstarts": 0 + }, + "outputs": { + "total": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,2,2,4,4,5,6,7,9,9], + "lenstarts": 9 + }, + "outputs": { + "total": [9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,2,4,5,6,7,9], + "lenstarts": 6 + }, + "outputs": { + "total": [9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,0,0,0], + "lenstarts": 3 + }, + "outputs": { + "total": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,3], + "lenstarts": 1 + }, + "outputs": { + "total": [3] + } + } + ] + }, + { + "name": "awkward_ListArray_localindex", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "length": 0, + "offsets": [0] + }, + "outputs": { + "toindex": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "offsets": [0,1] + }, + "outputs": { + "toindex": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 3, + "offsets": [0,2,3,5] + }, + "outputs": { + "toindex": [0,1,0,0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 4, + "offsets": [0,2,3,3,6] + }, + "outputs": { + "toindex": [0,1,0,0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 2, + "offsets": [0,2,3] + }, + "outputs": { + "toindex": [0,1,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "offsets": [0,2] + }, + "outputs": { + "toindex": [0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 4, + "offsets": [0,3,3,4,5] + }, + "outputs": { + "toindex": [0,1,2,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 7, + "offsets": [0,3,3,5,6,10,10,13] + }, + "outputs": { + "toindex": [0,1,2,0,1,0,0,1,2,3,0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "offsets": [0,3,3,5,6,10] + }, + "outputs": { + "toindex": [0,1,2,0,1,0,0,1,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 6, + "offsets": [0,3,3,5,6,6,10] + }, + "outputs": { + "toindex": [0,1,2,0,1,0,0,1,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 3, + "offsets": [0,3,3,5] + }, + "outputs": { + "toindex": [0,1,2,0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "offsets": [0,4,4,7,8,13] + }, + "outputs": { + "toindex": [0,1,2,3,0,1,2,0,0,1,2,3,4] + } + } + ] + }, + { + "name": "awkward_ListArray_rpad_axis1", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [], + "fromstops": [], + "length": 0, + "target": 4 + }, + "outputs": { + "toindex": [], + "tostarts": [], + "tostops": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [], + "fromstops": [], + "length": 0, + "target": 0 + }, + "outputs": { + "toindex": [], + "tostarts": [], + "tostops": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3,4,5,8], + "fromstops": [3,3,6,8,9], + "length": 5, + "target": 0 + }, + "outputs": { + "toindex": [0,1,2,4,5,5,6,7,8,123,123], + "tostarts": [0,3,3,5,8], + "tostops": [3,3,5,8,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3,4,5,8], + "fromstops": [3,3,6,8,9], + "length": 5, + "target": 4 + }, + "outputs": { + "toindex": [0,1,2,-1,-1,-1,-1,-1,4,5,-1,-1,5,6,7,-1,8,-1,-1,-1], + "tostarts": [0,4,8,12,16], + "tostops": [4,8,12,16,20] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3,4,5,8], + "fromstops": [3,3,6,8,9], + "length": 5, + "target": 3 + }, + "outputs": { + "toindex": [0,1,2,-1,-1,-1,4,5,-1,5,6,7,8,-1,-1], + "tostarts": [0,3,6,9,12], + "tostops": [3,6,9,12,15] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3,5], + "fromstops": [3,3,7], + "length": 3, + "target": 3 + }, + "outputs": { + "toindex": [0,1,2,-1,-1,-1,5,6,-1], + "tostarts": [0,3,6], + "tostops": [3,6,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3,4,5,8], + "fromstops": [3,3,6,8,9], + "length": 5, + "target": 2 + }, + "outputs": { + "toindex": [0,1,2,-1,-1,4,5,5,6,7,8,-1], + "tostarts": [0,3,5,7,10], + "tostops": [3,5,7,10,12] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [0,3,4,5,8], + "fromstops": [3,3,6,8,9], + "length": 5, + "target": 1 + }, + "outputs": { + "toindex": [0,1,2,-1,4,5,5,6,7,8], + "tostarts": [0,3,4,6,9], + "tostops": [3,4,6,9,10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [6,5,3,0], + "fromstops": [10,6,5,3], + "length": 4, + "target": 4 + }, + "outputs": { + "toindex": [6,7,8,9,5,-1,-1,-1,3,4,-1,-1,0,1,2,-1], + "tostarts": [0,4,8,12], + "tostops": [4,8,12,16] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [6,5,3,3,0], + "fromstops": [10,6,5,3,3], + "length": 5, + "target": 4 + }, + "outputs": { + "toindex": [6,7,8,9,5,-1,-1,-1,3,4,-1,-1,-1,-1,-1,-1,0,1,2,-1], + "tostarts": [0,4,8,12,16], + "tostops": [4,8,12,16,20] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [6,5,3,0], + "fromstops": [10,6,5,3], + "length": 4, + "target": 3 + }, + "outputs": { + "toindex": [6,7,8,9,5,-1,-1,3,4,-1,0,1,2], + "tostarts": [0,4,7,10], + "tostops": [4,7,10,13] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [6,5,3,3,0], + "fromstops": [10,6,5,3,3], + "length": 5, + "target": 3 + }, + "outputs": { + "toindex": [6,7,8,9,5,-1,-1,3,4,-1,-1,-1,-1,0,1,2], + "tostarts": [0,4,7,10,13], + "tostops": [4,7,10,13,16] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [6,5,3,3,0], + "fromstops": [10,6,5,3,3], + "length": 5, + "target": 2 + }, + "outputs": { + "toindex": [6,7,8,9,5,-1,3,4,-1,-1,0,1,2], + "tostarts": [0,4,6,8,10], + "tostops": [4,6,8,10,13] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromstarts": [6,5,3,0], + "fromstops": [10,6,5,3], + "length": 4, + "target": 1 + }, + "outputs": { + "toindex": [6,7,8,9,5,3,4,0,1,2], + "tostarts": [0,4,5,7], + "tostops": [4,5,7,10] + } + } + ] + }, + { + "name": "awkward_ListOffsetArray_reduce_local_outoffsets_64", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "lenparents": 0, + "outlength": 0, + "parents": [] + }, + "outputs": { + "outoffsets": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "lenparents": 10, + "outlength": 1, + "parents": [0,0,0,0,0,0,0,0,0,0] + }, + "outputs": { + "outoffsets": [0,10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "lenparents": 1, + "outlength": 1, + "parents": [0] + }, + "outputs": { + "outoffsets": [0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "lenparents": 3, + "outlength": 3, + "parents": [0,2,2] + }, + "outputs": { + "outoffsets": [0,1,1,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "lenparents": 3, + "outlength": 4, + "parents": [0,1,3] + }, + "outputs": { + "outoffsets": [0,1,2,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "lenparents": 3, + "outlength": 3, + "parents": [0,1,1] + }, + "outputs": { + "outoffsets": [0,1,3,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "lenparents": 4, + "outlength": 3, + "parents": [0,1,1,2] + }, + "outputs": { + "outoffsets": [0,1,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "lenparents": 2, + "outlength": 1, + "parents": [0,0] + }, + "outputs": { + "outoffsets": [0,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "lenparents": 6, + "outlength": 5, + "parents": [0,0,2,2,3,4] + }, + "outputs": { + "outoffsets": [0,2,2,4,5,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "lenparents": 7, + "outlength": 5, + "parents": [0,0,2,2,3,4,4] + }, + "outputs": { + "outoffsets": [0,2,2,4,5,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "lenparents": 3, + "outlength": 2, + "parents": [0,0,1] + }, + "outputs": { + "outoffsets": [0,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "lenparents": 4, + "outlength": 2, + "parents": [0,0,1,1] + }, + "outputs": { + "outoffsets": [0,2,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "lenparents": 3, + "outlength": 1, + "parents": [0,0,0] + }, + "outputs": { + "outoffsets": [0,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "lenparents": 6, + "outlength": 2, + "parents": [0,0,0,1,1,1] + }, + "outputs": { + "outoffsets": [0,3,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "lenparents": 4, + "outlength": 1, + "parents": [0,0,0,0] + }, + "outputs": { + "outoffsets": [0,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "lenparents": 6, + "outlength": 3, + "parents": [0,0,0,0,2,2] + }, + "outputs": { + "outoffsets": [0,4,4,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "lenparents": 8, + "outlength": 2, + "parents": [0,0,0,0,1,1,1,1] + }, + "outputs": { + "outoffsets": [0,4,8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "lenparents": 5, + "outlength": 1, + "parents": [0,0,0,0,0] + }, + "outputs": { + "outoffsets": [0,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "lenparents": 6, + "outlength": 1, + "parents": [0,0,0,0,0,0] + }, + "outputs": { + "outoffsets": [0,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "lenparents": 7, + "outlength": 1, + "parents": [0,0,0,0,0,0,0] + }, + "outputs": { + "outoffsets": [0,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "lenparents": 8, + "outlength": 1, + "parents": [0,0,0,0,0,0,0,0] + }, + "outputs": { + "outoffsets": [0,8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "lenparents": 9, + "outlength": 1, + "parents": [0,0,0,0,0,0,0,0,0] + }, + "outputs": { + "outoffsets": [0,9] + } + } + ] + }, + { + "name": "awkward_ListOffsetArray_reduce_nonlocal_preparenext_64", + "status": true, + "tests": [ + { + "inputs": { + "length": 0, + "maxcount": 0, + "distinctslen": 0, + "nextlen": 0, + "offsets": [], + "offsetscopy": [], + "outer_offsets": [0], + "outlength": 0 + }, + "outputs": { + "nextcarry": [], + "nextoffsets": [0], + "maxnextparents": [-1], + "distincts": [] + }, + "error": false + }, + { + "inputs": { + "length": 3, + "maxcount": 5, + "distinctslen": 0, + "nextlen": 15, + "offsets": [0,5,10,15], + "offsetscopy": [0,5,10,15], + "outer_offsets": [0,3], + "outlength": 1 + }, + "outputs": { + "nextcarry": [0,5,10,1,6,11,2,7,12,3,8,13,4,9,14], + "nextoffsets": [0,3,6,9,12,15], + "maxnextparents": [4], + "distincts": [] + }, + "error": false + }, + { + "inputs": { + "length": 3, + "maxcount": 5, + "distinctslen": 2, + "nextlen": 15, + "offsets": [0,5,10,15], + "offsetscopy": [0,5,10,15], + "outer_offsets": [0,3], + "outlength": 1 + }, + "outputs": { + "nextcarry": [0,5,10,1,6,11,2,7,12,3,8,13,4,9,14], + "nextoffsets": [0,3,6,9,12,15], + "maxnextparents": [4], + "distincts": [0,1] + }, + "error": false + }, + { + "inputs": { + "length": 2, + "maxcount": 3, + "distinctslen": 2, + "nextlen": 6, + "offsets": [0,3,6], + "offsetscopy": [0,3,6], + "outer_offsets": [0,2], + "outlength": 1 + }, + "outputs": { + "nextcarry": [0,3,1,4,2,5], + "nextoffsets": [0,2,4,6], + "maxnextparents": [2], + "distincts": [0,1] + }, + "error": false + }, + { + "inputs": { + "length": 5, + "maxcount": 5, + "distinctslen": 6, + "nextlen": 17, + "offsets": [0,5,8,11,14,17], + "offsetscopy": [0,5,8,11,14,17], + "outer_offsets": [0,5], + "outlength": 1 + }, + "outputs": { + "nextcarry": [0,5,8,11,14,1,6,9,12,15,2,7,10,13,16,3,4], + "nextoffsets": [0,5,10,15,16,17], + "maxnextparents": [4], + "distincts": [0,1,2,3,4,-1] + }, + "error": false + }, + { + "inputs": { + "length": 10, + "maxcount": 3, + "distinctslen": 6, + "nextlen": 18, + "offsets": [0,1,3,6,8,9,10,12,15,17,18], + "offsetscopy": [0,1,3,6,8,9,10,12,15,17,18], + "outer_offsets": [0,5,10], + "outlength": 2 + }, + "outputs": { + "nextcarry": [0,1,3,6,8,2,4,7,5,9,10,12,15,17,11,13,16,14], + "nextoffsets": [0,5,8,9,14,17,18], + "maxnextparents": [5], + "distincts": [0,1,2,3,4,5] + }, + "error": false + }, + { + "inputs": { + "length": 10, + "maxcount": 4, + "distinctslen": 6, + "nextlen": 18, + "offsets": [0,1,3,6,8,9,10,12,15,17,18], + "offsetscopy": [0,1,3,6,8,9,10,12,15,17,18], + "outer_offsets": [0,5,10], + "outlength": 2 + }, + "outputs": { + "nextcarry": [0,1,3,6,8,2,4,7,5,9,10,12,15,17,11,13,16,14], + "nextoffsets": [0,5,8,9,9,14,17,18,18], + "maxnextparents": [6], + "distincts": [0,1,2,-1,4,5] + }, + "error": false + } + ] + }, + { + "name": "awkward_ListOffsetArray_reduce_nonlocal_nextshifts_64", + "status": true, + "tests": [ + { + "inputs": { + "length": 0, + "maxcount": 0, + "nextcarry": [], + "nextlen": 0, + "offsets": [], + "starts": [], + "outer_offsets": [0], + "outlength": 0 + }, + "outputs": { + "nummissing": [], + "missing": [], + "nextshifts": [] + }, + "error": false + }, + { + "inputs": { + "length": 3, + "maxcount": 5, + "nextcarry": [0,5,10,1,6,11,2,7,12,3,8,13,4,9,14], + "nextlen": 15, + "offsets": [0,5,10,15], + "starts": [0], + "outer_offsets": [0,3], + "outlength": 1 + }, + "outputs": { + "nummissing": [0,0,0,0,0], + "missing": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], + "nextshifts": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] + }, + "error": false + }, + { + "inputs": { + "length": 2, + "maxcount": 3, + "nextcarry": [0,3,1,4,2,5], + "nextlen": 6, + "offsets": [0,3,6], + "starts": [0], + "outer_offsets": [0,2], + "outlength": 1 + }, + "outputs": { + "nummissing": [0,0,0], + "missing": [0,0,0,0,0,0], + "nextshifts": [0,0,0,0,0,0] + }, + "error": false + }, + { + "inputs": { + "length": 3, + "maxcount": 5, + "nextcarry": [0,5,9,1,6,10,2,7,11,3,8,4], + "nextlen": 12, + "offsets": [0,5,9,12], + "starts": [0], + "outer_offsets": [0,3], + "outlength": 1 + }, + "outputs": { + "nummissing": [0,0,0,1,2], + "missing": [0,0,0,0,0,0,0,0,0,0,0,0], + "nextshifts": [0,0,0,0,0,0,0,0,0,0,0,0] + }, + "error": false + }, + { + "inputs": { + "length": 5, + "maxcount": 5, + "nextcarry": [0,5,8,11,14,1,6,9,12,15,2,7,10,13,16,3,4], + "nextlen": 17, + "offsets": [0,5,8,11,14,17], + "starts": [0], + "outer_offsets": [0,5], + "outlength": 1 + }, + "outputs": { + "nummissing": [0,0,0,4,4], + "missing": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], + "nextshifts": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] + }, + "error": false + }, + { + "inputs": { + "length": 4, + "maxcount": 3, + "nextcarry": [0,2,5,7,1,3,6,8,4], + "nextlen": 9, + "offsets": [0,2,5,7,9], + "starts": [0,2], + "outer_offsets": [0,2,4], + "outlength": 2 + }, + "outputs": { + "nummissing": [0,0,2], + "missing": [0,0,0,0,1,0,0,0,0], + "nextshifts": [0,0,0,0,0,0,0,0,1] + }, + "error": false + }, + { + "inputs": { + "length": 3, + "maxcount": 4, + "nextcarry": [0,2,3,1,4,5,6], + "nextlen": 7, + "offsets": [0,2,3,7], + "starts": [0], + "outer_offsets": [0,3], + "outlength": 1 + }, + "outputs": { + "nummissing": [0,1,2,2], + "missing": [0,0,0,0,1,2,2], + "nextshifts": [0,0,0,0,1,2,2] + }, + "error": false + }, + { + "inputs": { + "length": 10, + "maxcount": 3, + "nextcarry": [0,1,3,6,8,9,10,12,15,17,2,4,7,11,13,16,5,14], + "nextlen": 18, + "offsets": [0,1,3,6,8,9,10,12,15,17,18], + "starts": [0,5], + "outer_offsets": [0,5,10], + "outlength": 2 + }, + "outputs": { + "nummissing": [0,2,4], + "missing": [0,0,1,0,1,2,0,1,0,0,0,1,0,1,2,0,1,0], + "nextshifts": [0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,2,2] + }, + "error": false + }, + { + "inputs": { + "length": 11, + "maxcount": 3, + "nextcarry": [0,1,3,6,8,9,10,12,15,17,2,4,7,11,13,16,5,14], + "nextlen": 18, + "offsets": [0,1,3,6,6,8,9,10,12,15,17,18], + "starts": [0,6], + "outer_offsets": [0,6,11], + "outlength": 2 + }, + "outputs": { + "nummissing": [0,2,4], + "missing": [0,0,1,0,1,2,1,2,1,0,0,1,0,1,2,0,1,0], + "nextshifts": [0,0,0,1,1,0,0,0,0,0,1,1,2,1,1,1,2,2] + }, + "error": false + }, + { + "inputs": { + "length": 11, + "maxcount": 3, + "nextcarry": [0,1,3,6,8,9,10,12,15,17,2,4,7,11,13,16,5,14], + "nextlen": 18, + "offsets": [0,0,1,3,6,8,9,10,12,15,17,18], + "starts": [0,6], + "outer_offsets": [0,6,11], + "outlength": 2 + }, + "outputs": { + "nummissing": [0,2,4], + "missing": [1,1,2,1,2,3,1,2,1,0,0,1,0,1,2,0,1,0], + "nextshifts": [1,1,1,1,1,0,0,0,0,0,2,2,2,1,1,1,3,2] + }, + "error": false + }, + { + "inputs": { + "length": 3, + "maxcount": 4, + "nextcarry": [0,3,1,4,2,5,6], + "nextlen": 7, + "offsets": [0,3,3,7], + "starts": [0], + "outer_offsets": [0,3], + "outlength": 1 + }, + "outputs": { + "nummissing": [1,1,1,2], + "missing": [0,0,0,1,1,1,2], + "nextshifts": [0,1,0,1,0,1,2] + }, + "error": false + }, + { + "inputs": { + "length": 4, + "maxcount": 3, + "nextcarry": [0,3,5,1,4,6,2], + "nextlen": 7, + "offsets": [0,3,5,5,7], + "starts": [0], + "outer_offsets": [0,4], + "outlength": 1 + }, + "outputs": { + "nummissing": [1,1,3], + "missing": [0,0,0,0,0,1,1], + "nextshifts": [0,0,1,0,0,1,0] + }, + "error": false + }, + { + "inputs": { + "length": 4, + "maxcount": 3, + "nextcarry": [0,3,5,1,4,6,2], + "nextlen": 7, + "offsets": [0,3,3,5,7], + "starts": [0], + "outer_offsets": [0,4], + "outlength": 1 + }, + "outputs": { + "nummissing": [1,1,3], + "missing": [0,0,0,1,1,1,1], + "nextshifts": [0,1,1,0,1,1,0] + }, + "error": false + }, + { + "inputs": { + "length": 11, + "maxcount": 3, + "nextcarry": [0,1,3,6,8,9,10,12,15,17,2,4,7,11,13,16,5,14], + "nextlen": 18, + "offsets": [0,1,3,6,8,9,10,12,15,17,18,18], + "starts": [0,5], + "outer_offsets": [0,5,11], + "outlength": 2 + }, + "outputs": { + "nummissing": [1,3,5], + "missing": [0,0,1,0,1,2,0,1,0,0,0,1,0,1,2,0,1,0], + "nextshifts": [0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,2,2] + }, + "error": false + }, + { + "inputs": { + "length": 11, + "maxcount": 3, + "nextcarry": [0,1,3,6,8,9,10,12,15,17,2,4,7,11,13,16,5,14], + "nextlen": 18, + "offsets": [0,1,3,6,8,9,10,12,15,17,17,18], + "starts": [0,5], + "outer_offsets": [0,5,11], + "outlength": 2 + }, + "outputs": { + "nummissing": [1,3,5], + "missing": [0,0,1,0,1,2,0,1,0,0,0,1,0,1,2,0,1,1], + "nextshifts": [0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,2,2] + }, + "error": false + }, + { + "inputs": { + "length": 11, + "maxcount": 3, + "nextcarry": [0,1,3,6,8,9,10,12,15,17,2,4,7,11,13,16,5,14], + "nextlen": 18, + "offsets": [0,1,3,6,8,9,10,12,15,15,17,18], + "starts": [0,5], + "outer_offsets": [0,5,11], + "outlength": 2 + }, + "outputs": { + "nummissing": [1,3,5], + "missing": [0,0,1,0,1,2,0,1,0,0,0,1,0,1,2,1,2,1], + "nextshifts": [0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,2,2,2] + }, + "error": false + }, + { + "inputs": { + "length": 11, + "maxcount": 3, + "nextcarry": [0,1,3,6,8,9,10,12,15,17,2,4,7,11,13,16,5,14], + "nextlen": 18, + "offsets": [0,1,3,6,8,9,10,12,12,15,17,18], + "starts": [0,5], + "outer_offsets": [0,5,11], + "outlength": 2 + }, + "outputs": { + "nummissing": [1,3,5], + "missing": [0,0,1,0,1,2,0,1,0,0,0,1,1,2,3,1,2,1], + "nextshifts": [0,0,0,0,0,0,0,1,1,1,1,1,1,1,2,2,2,3] + }, + "error": false + }, + { + "inputs": { + "length": 11, + "maxcount": 3, + "nextcarry": [0,1,3,6,8,9,10,12,15,17,2,4,7,11,13,16,5,14], + "nextlen": 18, + "offsets": [0,1,3,6,8,9,9,10,12,15,17,18], + "starts": [0,5], + "outer_offsets": [0,5,11], + "outlength": 2 + }, + "outputs": { + "nummissing": [1,3,5], + "missing": [0,0,1,0,1,2,0,1,0,1,1,2,1,2,3,1,2,1], + "nextshifts": [0,0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2,3] + }, + "error": false + }, + { + "inputs": { + "length": 12, + "maxcount": 3, + "nextcarry": [0,1,3,6,8,9,10,12,15,17,2,4,7,11,13,16,5,14], + "nextlen": 18, + "offsets": [0,1,3,6,6,8,9,10,12,15,17,18,18], + "starts": [0,6], + "outer_offsets": [0,6,12], + "outlength": 2 + }, + "outputs": { + "nummissing": [1,3,5], + "missing": [0,0,1,0,1,2,1,2,1,0,0,1,0,1,2,0,1,0], + "nextshifts": [0,0,0,1,1,0,0,0,0,0,1,1,2,1,1,1,2,2] + }, + "error": false + }, + { + "inputs": { + "length": 12, + "maxcount": 3, + "nextcarry": [0,1,3,6,8,9,10,12,15,17,2,4,7,11,13,16,5,14], + "nextlen": 18, + "offsets": [0,1,3,6,6,8,9,10,12,15,17,17,18], + "starts": [0,6], + "outer_offsets": [0,6,12], + "outlength": 2 + }, + "outputs": { + "nummissing": [1,3,5], + "missing": [0,0,1,0,1,2,1,2,1,0,0,1,0,1,2,0,1,1], + "nextshifts": [0,0,0,1,1,0,0,0,0,1,1,1,2,1,1,1,2,2] + }, + "error": false + }, + { + "inputs": { + "length": 12, + "maxcount": 3, + "nextcarry": [0,1,3,6,8,9,10,12,15,17,2,4,7,11,13,16,5,14], + "nextlen": 18, + "offsets": [0,1,3,6,6,8,9,10,12,15,15,17,18], + "starts": [0,6], + "outer_offsets": [0,6,12], + "outlength": 2 + }, + "outputs": { + "nummissing": [1,3,5], + "missing": [0,0,1,0,1,2,1,2,1,0,0,1,0,1,2,1,2,1], + "nextshifts": [0,0,0,1,1,0,0,0,1,1,1,1,2,1,1,2,2,2] + }, + "error": false + }, + { + "inputs": { + "length": 12, + "maxcount": 3, + "nextcarry": [0,1,3,6,8,9,10,12,15,17,2,4,7,11,13,16,5,14], + "nextlen": 18, + "offsets": [0,1,3,6,6,8,9,10,12,12,15,17,18], + "starts": [0,6], + "outer_offsets": [0,6,12], + "outlength": 2 + }, + "outputs": { + "nummissing": [1,3,5], + "missing": [0,0,1,0,1,2,1,2,1,0,0,1,1,2,3,1,2,1], + "nextshifts": [0,0,0,1,1,0,0,1,1,1,1,1,2,1,2,2,2,3] + }, + "error": false + }, + { + "inputs": { + "length": 12, + "maxcount": 3, + "nextcarry": [0,1,3,6,8,9,10,12,15,17,2,4,7,11,13,16,5,14], + "nextlen": 18, + "offsets": [0,1,3,6,6,8,9,9,10,12,15,17,18], + "starts": [0,6], + "outer_offsets": [0,6,12], + "outlength": 2 + }, + "outputs": { + "nummissing": [1,3,5], + "missing": [0,0,1,0,1,2,1,2,1,1,1,2,1,2,3,1,2,1], + "nextshifts": [0,0,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3] + }, + "error": false + }, + { + "inputs": { + "length": 12, + "maxcount": 3, + "nextcarry": [0,1,3,6,8,9,10,12,15,17,2,4,7,11,13,16,5,14], + "nextlen": 18, + "offsets": [0,0,1,3,6,8,9,10,12,15,17,18,18], + "starts": [0,6], + "outer_offsets": [0,6,12], + "outlength": 2 + }, + "outputs": { + "nummissing": [1,3,5], + "missing": [1,1,2,1,2,3,1,2,1,0,0,1,0,1,2,0,1,0], + "nextshifts": [1,1,1,1,1,0,0,0,0,0,2,2,2,1,1,1,3,2] + }, + "error": false + }, + { + "inputs": { + "length": 12, + "maxcount": 3, + "nextcarry": [0,1,3,6,8,9,10,12,15,17,2,4,7,11,13,16,5,14], + "nextlen": 18, + "offsets": [0,0,1,3,6,8,9,10,12,15,17,17,18], + "starts": [0,6], + "outer_offsets": [0,6,12], + "outlength": 2 + }, + "outputs": { + "nummissing": [1,3,5], + "missing": [1,1,2,1,2,3,1,2,1,0,0,1,0,1,2,0,1,1], + "nextshifts": [1,1,1,1,1,0,0,0,0,1,2,2,2,1,1,1,3,2] + }, + "error": false + }, + { + "inputs": { + "length": 12, + "maxcount": 3, + "nextcarry": [0,1,3,6,8,9,10,12,15,17,2,4,7,11,13,16,5,14], + "nextlen": 18, + "offsets": [0,0,1,3,6,8,9,10,12,15,15,17,18], + "starts": [0,6], + "outer_offsets": [0,6,12], + "outlength": 2 + }, + "outputs": { + "nummissing": [1,3,5], + "missing": [1,1,2,1,2,3,1,2,1,0,0,1,0,1,2,1,2,1], + "nextshifts": [1,1,1,1,1,0,0,0,1,1,2,2,2,1,1,2,3,2] + }, + "error": false + }, + { + "inputs": { + "length": 12, + "maxcount": 3, + "nextcarry": [0,1,3,6,8,9,10,12,15,17,2,4,7,11,13,16,5,14], + "nextlen": 18, + "offsets": [0,0,1,3,6,8,9,10,12,12,15,17,18], + "starts": [0,6], + "outer_offsets": [0,6,12], + "outlength": 2 + }, + "outputs": { + "nummissing": [1,3,5], + "missing": [1,1,2,1,2,3,1,2,1,0,0,1,1,2,3,1,2,1], + "nextshifts": [1,1,1,1,1,0,0,1,1,1,2,2,2,1,2,2,3,3] + }, + "error": false + }, + { + "inputs": { + "length": 12, + "maxcount": 3, + "nextcarry": [0,1,3,6,8,9,10,12,15,17,2,4,7,11,13,16,5,14], + "nextlen": 18, + "offsets": [0,0,1,3,6,8,9,9,10,12,15,17,18], + "starts": [0,6], + "outer_offsets": [0,6,12], + "outlength": 2 + }, + "outputs": { + "nummissing": [1,3,5], + "missing": [1,1,2,1,2,3,1,2,1,1,1,2,1,2,3,1,2,1], + "nextshifts": [1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3] + }, + "error": false + }, + { + "inputs": { + "length": 12, + "maxcount": 3, + "nextcarry": [0,1,3,6,8,9,10,12,15,17,2,4,7,11,13,16,5,14], + "nextlen": 18, + "offsets": [0,1,3,6,8,9,9,9,10,12,15,17,18], + "starts": [0,5], + "outer_offsets": [0,5,12], + "outlength": 2 + }, + "outputs": { + "nummissing": [2,4,6], + "missing": [0,0,1,0,1,2,0,1,0,2,2,3,2,3,4,2,3,2], + "nextshifts": [0,0,0,0,0,2,2,2,2,2,1,1,1,3,3,3,2,4] + }, + "error": false + }, + { + "inputs": { + "length": 13, + "maxcount": 3, + "nextcarry": [0,1,3,6,8,9,10,12,15,17,2,4,7,11,13,16,5,14], + "nextlen": 18, + "offsets": [0,1,3,6,6,8,9,9,9,10,12,15,17,18], + "starts": [0,6], + "outer_offsets": [0,6,13], + "outlength": 2 + }, + "outputs": { + "nummissing": [2,4,6], + "missing": [0,0,1,0,1,2,1,2,1,2,2,3,2,3,4,2,3,2], + "nextshifts": [0,0,0,1,1,2,2,2,2,2,1,1,2,3,3,3,2,4] + }, + "error": false + }, + { + "inputs": { + "length": 13, + "maxcount": 3, + "nextcarry": [0,1,3,6,8,9,10,12,15,17,2,4,7,11,13,16,5,14], + "nextlen": 18, + "offsets": [0,0,1,3,6,8,9,9,9,10,12,15,17,18], + "starts": [0,6], + "outer_offsets": [0,6,13], + "outlength": 2 + }, + "outputs": { + "nummissing": [2,4,6], + "missing": [1,1,2,1,2,3,1,2,1,2,2,3,2,3,4,2,3,2], + "nextshifts": [1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,4] + }, + "error": false + }, + { + "inputs": { + "length": 9, + "maxcount": 4, + "nextcarry": [0,1,3,6,10,13,15,2,4,7,11,14,5,8,12,9], + "nextlen": 16, + "offsets": [0,0,1,3,6,10,13,15,16,16], + "starts": [0], + "outer_offsets": [0,9], + "outlength": 1 + }, + "outputs": { + "nummissing": [2,4,6,8], + "missing": [1,1,2,1,2,3,1,2,3,4,1,2,3,1,2,1], + "nextshifts": [1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,4] + }, + "error": false + } + ] + }, + { + "name": "awkward_ListOffsetArray_reduce_local_nextparents_64", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "length": 0, + "offsets": [0], + "nextparents_length": 0 + }, + "outputs": { + "nextparents": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "offsets": [0,1], + "nextparents_length": 1 + }, + "outputs": { + "nextparents": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 18, + "offsets": [0,0,1,3,3,6,8,9,9,9,10,10,12,15,15,17,18,18,18], + "nextparents_length": 18 + }, + "outputs": { + "nextparents": [1,2,2,4,4,4,5,5,6,9,11,11,12,12,12,14,14,15] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 4, + "offsets": [0,1,3,5,5], + "nextparents_length": 5 + }, + "outputs": { + "nextparents": [0,1,1,2,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "offsets": [0,1,1,3,5,7], + "nextparents_length": 7 + }, + "outputs": { + "nextparents": [0,2,2,3,3,4,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5, + "offsets": [0,0,1,1,2,2], + "nextparents_length": 2 + }, + "outputs": { + "nextparents": [1,3] + } + } + ] + }, + { + "name": "awkward_ListOffsetArray_reduce_nonlocal_nextstarts_64", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "nextlen": 0, + "nextparents": [] + }, + "outputs": { + "nextstarts": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "nextlen": 18, + "nextparents": [0,0,0,0,0,3,3,3,3,3,1,1,1,4,4,4,2,5] + }, + "outputs": { + "nextstarts": [0,10,16,5,13,17] + } + }, + { + "error": false, + "message": "", + "inputs": { + "nextlen": 21, + "nextparents": [0,0,0,0,0,3,3,3,3,3,1,1,1,4,4,4,4,2,5,5,5] + }, + "outputs": { + "nextstarts": [0,10,17,5,13,18] + } + }, + { + "error": false, + "message": "", + "inputs": { + "nextlen": 3, + "nextparents": [0,1,2] + }, + "outputs": { + "nextstarts": [0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "nextlen": 5, + "nextparents": [0,0,1,2,3] + }, + "outputs": { + "nextstarts": [0,2,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "nextlen": 6, + "nextparents": [0,0,1,1,2,2] + }, + "outputs": { + "nextstarts": [0,2,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "nextlen": 6, + "nextparents": [0,0,1,1,2,3] + }, + "outputs": { + "nextstarts": [0,2,4,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "nextlen": 8, + "nextparents": [0,0,1,1,2,2,3,3] + }, + "outputs": { + "nextstarts": [0,2,4,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "nextlen": 7, + "nextparents": [0,0,1,1,2,2,3] + }, + "outputs": { + "nextstarts": [0,2,4,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "nextlen": 6, + "nextparents": [0,0,0,1,1,1] + }, + "outputs": { + "nextstarts": [0,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "nextlen": 5, + "nextparents": [0,0,0,1,1] + }, + "outputs": { + "nextstarts": [0,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "nextlen": 7, + "nextparents": [0,0,0,1,1,2,3] + }, + "outputs": { + "nextstarts": [0,3,5,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "nextlen": 9, + "nextparents": [0,0,0,1,1,2,2,3,4] + }, + "outputs": { + "nextstarts": [0,3,5,7,8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "nextlen": 7, + "nextparents": [0,0,0,1,1,1,2] + }, + "outputs": { + "nextstarts": [0,3,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "nextlen": 9, + "nextparents": [0,0,0,1,1,1,2,2,3] + }, + "outputs": { + "nextstarts": [0,3,6,8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "nextlen": 10, + "nextparents": [0,0,0,1,1,1,2,2,2,3] + }, + "outputs": { + "nextstarts": [0,3,6,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "nextlen": 12, + "nextparents": [0,0,0,1,1,1,2,2,2,3,3,3] + }, + "outputs": { + "nextstarts": [0,3,6,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "nextlen": 12, + "nextparents": [0,0,0,1,1,1,2,2,2,3,3,4] + }, + "outputs": { + "nextstarts": [0,3,6,9,11] + } + }, + { + "error": false, + "message": "", + "inputs": { + "nextlen": 15, + "nextparents": [0,0,0,1,1,1,2,2,2,3,3,3,4,4,4] + }, + "outputs": { + "nextstarts": [0,3,6,9,12] + } + }, + { + "error": false, + "message": "", + "inputs": { + "nextlen": 15, + "nextparents": [0,5,5,1,6,6,2,7,7,3,8,8,4,9,9] + }, + "outputs": { + "nextstarts": [0,3,6,9,12,1,4,7,10,13] + } + }, + { + "error": false, + "message": "", + "inputs": { + "nextlen": 15, + "nextparents": [0,5,10,1,6,11,2,7,12,3,8,13,4,9,14] + }, + "outputs": { + "nextstarts": [0,3,6,9,12,1,4,7,10,13,2,5,8,11,14] + } + }, + { + "error": false, + "message": "", + "inputs": { + "nextlen": 15, + "nextparents": [0,0,5,1,1,6,2,2,7,3,3,8,4,4,9] + }, + "outputs": { + "nextstarts": [0,3,6,9,12,2,5,8,11,14] + } + }, + { + "error": false, + "message": "", + "inputs": { + "nextlen": 6, + "nextparents": [0,0,0,0,1,1] + }, + "outputs": { + "nextstarts": [0,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "nextlen": 9, + "nextparents": [0,0,0,0,1,1,1,2,2] + }, + "outputs": { + "nextstarts": [0,4,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "nextlen": 20, + "nextparents": [0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4] + }, + "outputs": { + "nextstarts": [0,4,8,12,16] + } + }, + { + "error": false, + "message": "", + "inputs": { + "nextlen": 20, + "nextparents": [0,0,5,5,1,1,6,6,2,2,7,7,3,3,8,8,4,4,9,9] + }, + "outputs": { + "nextstarts": [0,4,8,12,16,2,6,10,14,18] + } + }, + { + "error": false, + "message": "", + "inputs": { + "nextlen": 9, + "nextparents": [0,0,3,3,1,1,4,4,2] + }, + "outputs": { + "nextstarts": [0,4,8,2,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "nextlen": 12, + "nextparents": [0,0,3,3,1,1,4,4,2,2,5,5] + }, + "outputs": { + "nextstarts": [0,4,8,2,6,10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "nextlen": 15, + "nextparents": [0,0,0,0,0,1,1,1,1,1,2,2,2,2,2] + }, + "outputs": { + "nextstarts": [0,5,10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "nextlen": 17, + "nextparents": [0,0,0,0,0,1,1,1,1,1,2,2,2,2,2,3,4] + }, + "outputs": { + "nextstarts": [0,5,10,15,16] + } + }, + { + "error": false, + "message": "", + "inputs": { + "nextlen": 25, + "nextparents": [0,0,0,0,0,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4] + }, + "outputs": { + "nextstarts": [0,5,10,15,20] + } + }, + { + "error": false, + "message": "", + "inputs": { + "nextlen": 9, + "nextparents": [0,0,0,3,3,1,1,4,2] + }, + "outputs": { + "nextstarts": [0,5,8,3,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "nextlen": 22, + "nextparents": [0,0,0,5,5,5,1,1,6,6,2,2,7,7,3,3,8,8,4,4,9,9] + }, + "outputs": { + "nextstarts": [0,6,10,14,18,3,8,12,16,20] + } + }, + { + "error": false, + "message": "", + "inputs": { + "nextlen": 16, + "nextparents": [0,0,0,0,0,0,0,1,1,1,1,1,2,2,2,3] + }, + "outputs": { + "nextstarts": [0,7,12,15] + } + } + ] + }, + { + "name": "awkward_ListOffsetArray_reduce_nonlocal_outstartsstops_64", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "distincts": [], + "lendistincts": 0, + "outlength": 0 + }, + "outputs": { + "outstarts": [], + "outstops": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "distincts": [], + "lendistincts": 0, + "outlength": 1 + }, + "outputs": { + "outstarts": [0], + "outstops": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "distincts": [0,0,0,0,0,-1,-1,-1,-1,-1,2,2,2,2,2], + "lendistincts": 15, + "outlength": 3 + }, + "outputs": { + "outstarts": [0,5,10], + "outstops": [5,5,15] + } + }, + { + "error": false, + "message": "", + "inputs": { + "distincts": [0,0,0,0,0,-1,-1,-1,-1,-1,1,1,1,1,1], + "lendistincts": 15, + "outlength": 3 + }, + "outputs": { + "outstarts": [0,5,10], + "outstops": [5,5,15] + } + }, + { + "error": false, + "message": "", + "inputs": { + "distincts": [0,0], + "lendistincts": 2, + "outlength": 1 + }, + "outputs": { + "outstarts": [0], + "outstops": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "distincts": [0,0,0], + "lendistincts": 3, + "outlength": 1 + }, + "outputs": { + "outstarts": [0], + "outstops": [3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "distincts": [0,0,0,1,1,-1], + "lendistincts": 6, + "outlength": 2 + }, + "outputs": { + "outstarts": [0,3], + "outstops": [3,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "distincts": [0,0,0,1,1,1], + "lendistincts": 6, + "outlength": 2 + }, + "outputs": { + "outstarts": [0,3], + "outstops": [3,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "distincts": [0,0,0,1,1,-1,2,-1,-1], + "lendistincts": 9, + "outlength": 3 + }, + "outputs": { + "outstarts": [0,3,6], + "outstops": [3,5,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "distincts": [0,0,0,1,-1,-1,2,1,-1,3,-1,-1], + "lendistincts": 12, + "outlength": 4 + }, + "outputs": { + "outstarts": [0,3,6,9], + "outstops": [3,4,8,10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "distincts": [0,0,-1,1,-1,-1,-1,-1,-1,2,1,0], + "lendistincts": 12, + "outlength": 4 + }, + "outputs": { + "outstarts": [0,3,6,9], + "outstops": [2,4,6,12] + } + }, + { + "error": false, + "message": "", + "inputs": { + "distincts": [0,0,0,0], + "lendistincts": 4, + "outlength": 1 + }, + "outputs": { + "outstarts": [0], + "outstops": [4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "distincts": [0,0,0,-1,1,1,1,0], + "lendistincts": 8, + "outlength": 2 + }, + "outputs": { + "outstarts": [0,4], + "outstops": [3,8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "distincts": [0,0,0,0,0], + "lendistincts": 5, + "outlength": 1 + }, + "outputs": { + "outstarts": [0], + "outstops": [5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "distincts": [0,0,0,0,0,1,1,1,1,1,2,2,2,2,-1], + "lendistincts": 15, + "outlength": 3 + }, + "outputs": { + "outstarts": [0,5,10], + "outstops": [5,10,14] + } + }, + { + "error": false, + "message": "", + "inputs": { + "distincts": [0,0,0,0,0,1,1,1,1,1,2,2,2,2,2], + "lendistincts": 15, + "outlength": 3 + }, + "outputs": { + "outstarts": [0,5,10], + "outstops": [5,10,15] + } + }, + { + "error": false, + "message": "", + "inputs": { + "distincts": [0,0,0,0,0,1,-1,-1,-1,-1,2,1,1,1,1], + "lendistincts": 15, + "outlength": 3 + }, + "outputs": { + "outstarts": [0,5,10], + "outstops": [5,6,15] + } + }, + { + "error": false, + "message": "", + "inputs": { + "distincts": [0,0,0,0,0,1,1,1,1,-1,2,2,2,2,1], + "lendistincts": 15, + "outlength": 3 + }, + "outputs": { + "outstarts": [0,5,10], + "outstops": [5,9,15] + } + }, + { + "error": false, + "message": "", + "inputs": { + "distincts": [0,0,0,0,0,1,1,1,1,1,-1,-1,-1,-1,-1], + "lendistincts": 15, + "outlength": 3 + }, + "outputs": { + "outstarts": [0,5,10], + "outstops": [5,10,10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "distincts": [0,0,0,0,0,1,1,1,1,1], + "lendistincts": 10, + "outlength": 2 + }, + "outputs": { + "outstarts": [0,5], + "outstops": [5,10] + } + }, + { + "error": false, + "message": "", + "inputs": { + "distincts": [0,0,0,-1,-1,-1,1,1,-1], + "lendistincts": 9, + "outlength": 3 + }, + "outputs": { + "outstarts": [0,3,6], + "outstops": [3,3,8] + } + }, + { + "error": false, + "message": "", + "inputs": { + "distincts": [0,0,0,-1,-1,-1,1,1,1], + "lendistincts": 9, + "outlength": 3 + }, + "outputs": { + "outstarts": [0,3,6], + "outstops": [3,3,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "distincts": [0,0,-1,-1,-1,-1,1,-1,-1,2,1,0], + "lendistincts": 12, + "outlength": 4 + }, + "outputs": { + "outstarts": [0,3,6,9], + "outstops": [2,3,7,12] + } + }, + { + "error": false, + "message": "", + "inputs": { + "distincts": [0,0,-1,-1,-1,-1,-1,-1,-1,1,1,0], + "lendistincts": 12, + "outlength": 4 + }, + "outputs": { + "outstarts": [0,3,6,9], + "outstops": [2,3,6,12] + } + }, + { + "error": false, + "message": "", + "inputs": { + "distincts": [0,0,0,-1,-1,-1,-1,-1,-1,1,1,1], + "lendistincts": 12, + "outlength": 4 + }, + "outputs": { + "outstarts": [0,3,6,9], + "outstops": [3,3,6,12] + } + }, + { + "error": false, + "message": "", + "inputs": { + "distincts": [], + "lendistincts": 0, + "outlength": 1 + }, + "outputs": { + "outstarts": [0], + "outstops": [0] + } + } + ] + }, + { + "name": "awkward_NumpyArray_pad_zero_to_length", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,2,3], + "fromptr": [0,1,3], + "offsetslength": 3, + "target": 2 + }, + "outputs": { + "toptr": [0,1,3,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [], + "fromptr": [], + "offsetslength": 0, + "target": 0 + }, + "outputs": { + "toptr": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,2,2,4], + "fromptr": [1,3,3,5], + "offsetslength": 4, + "target": 4 + }, + "outputs": { + "toptr": [1,3,0,0,0,0,0,0,3,5,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,0], + "fromptr": [3,5], + "offsetslength": 2, + "target": 4 + }, + "outputs": { + "toptr": [0,0,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,1,2,3,5], + "fromptr": [0,3,3,5,6], + "offsetslength": 5, + "target": 4 + }, + "outputs": { + "toptr": [0,0,0,0,3,0,0,0,3,0,0,0,5,6,0,0] + } + } + ] + }, + { + "name": "awkward_NumpyArray_rearrange_shifted", + "status": true, + "tests": [ + { + "inputs": { + "fromshifts": [], + "length": 0, + "fromoffsets": [], + "fromparents": [], + "fromstarts": [], + "outlength": 0, + "toptr": [] + }, + "outputs": { + "toptr": [] + }, + "error": false + }, + { + "inputs": { + "fromshifts": [0,1,2,3,4,5,6], + "length": 4, + "fromoffsets": [0,1,3,3,5,7,9], + "fromparents": [0,1,3,6], + "fromstarts": [0,1,2,3,4,5,6], + "outlength": 6, + "toptr": [0,1,2,3,4,5,6,7,8] + }, + "outputs": { + "toptr": [0,3,3,6,7,10,11,14,15] + }, + "error": false + }, + { + "inputs": { + "fromshifts": [0,1,2,3,4,5,6], + "length": 4, + "fromoffsets": [0,2,5,8], + "fromparents": [0,1,3,6], + "fromstarts": [0,1,2,3,4,5,6], + "outlength": 3, + "toptr": [0,1,2,3,4,5,6,7] + }, + "outputs": { + "toptr": [0,1,5,4,6,10,11,12] + }, + "error": false + } + ] + }, + { + "name": "awkward_NumpyArray_reduce_mask_ByteMaskedArray_64", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "outlength": 0, + "offsets": [0] + }, + "outputs": { + "toptr": [] + } + }, + { + "error": false, + "message": "30 parents across 15 bins (all full)", + "inputs": { + "outlength": 15, + "offsets": [0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30] + }, + "outputs": { + "toptr": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] + } + }, + { + "error": false, + "message": "30 parents across 10 bins (all full)", + "inputs": { + "outlength": 10, + "offsets": [0,3,6,9,12,15,18,21,24,27,30] + }, + "outputs": { + "toptr": [0,0,0,0,0,0,0,0,0,0] + } + }, + { + "error": false, + "message": "Empty bin test (bin 3 is empty)", + "inputs": { + "outlength": 8, + "offsets": [0,5,8,11,11,16,20,21,22] + }, + "outputs": { + "toptr": [0,0,0,1,0,0,0,0] + } + }, + { + "error": false, + "message": "Multiple empty bins", + "inputs": { + "outlength": 8, + "offsets": [0,3,5,6,6,6,6,8,9] + }, + "outputs": { + "toptr": [0,0,0,1,1,1,0,0] + } + }, + { + "error": false, + "message": "Bin 1 empty", + "inputs": { + "outlength": 4, + "offsets": [0,5,5,8,9] + }, + "outputs": { + "toptr": [0,1,0,0] + } + }, + { + "error": false, + "message": "Discontiguous empty bins", + "inputs": { + "outlength": 7, + "offsets": [0,3,3,5,6,6,6,9] + }, + "outputs": { + "toptr": [0,1,0,0,1,1,0] + } + } + ] + }, + { + "name": "awkward_NumpyArray_reduce_adjust_starts_64", + "status": true, + "tests": [ + { + "inputs": { + "toptr": [], + "starts": [], + "outlength": 0, + "offsets": [0] + }, + "outputs": { + "toptr": [] + }, + "error": false + }, + { + "inputs": { + "toptr": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], + "starts": [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14], + "outlength": 15, + "offsets": [0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30] + }, + "outputs": { + "toptr": [0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14] + }, + "error": false + }, + { + "inputs": { + "toptr": [0,0,0,0,0,0], + "starts": [0,0,0,0,0,0], + "outlength": 6, + "offsets": [0,5,8,9,14,17,18] + }, + "outputs": { + "toptr": [0,0,0,0,0,0] + }, + "error": false + }, + { + "inputs": { + "toptr": [0], + "starts": [-1], + "outlength": 1, + "offsets": [0,5] + }, + "outputs": { + "toptr": [1] + }, + "error": false + }, + { + "inputs": { + "toptr": [0,0,0,1,0,0,0,0], + "starts": [8,7,6,5,4,3,2,1], + "outlength": 8, + "offsets": [0,5,8,9,9,14,18,21,22] + }, + "outputs": { + "toptr": [-8,-7,-6,-4,-4,-3,-2,-1] + }, + "error": false + }, + { + "inputs": { + "toptr": [0,0,0,1,1,1,0,0], + "starts": [-1,-2,-3,-4,-5,-6,-7,-8], + "outlength": 8, + "offsets": [0,3,5,5,5,5,5,7,8] + }, + "outputs": { + "toptr": [1,2,3,5,6,7,7,8] + }, + "error": false + }, + { + "inputs": { + "toptr": [0,0,0,-1,-1,-1,0,0], + "starts": [-1,-2,-3,-4,-5,-6,-7,-8], + "outlength": 8, + "offsets": [0,3,5,5,5,5,5,7,8] + }, + "outputs": { + "toptr": [1,2,3,-1,-1,-1,7,8] + }, + "error": false + }, + { + "inputs": { + "toptr": [0,1,0,0,0,0], + "starts": [-1,1,0,-5,2,3], + "outlength": 6, + "offsets": [0,3,3,5,6,8,9] + }, + "outputs": { + "toptr": [1,0,0,5,-2,-3] + }, + "error": false + }, + { + "inputs": { + "toptr": [0,1,0], + "starts": [-1,0,1], + "outlength": 3, + "offsets": [0,2,2,3] + }, + "outputs": { + "toptr": [1,1,-1] + }, + "error": false + }, + { + "inputs": { + "toptr": [-1,-1,-1,-1,-1,-1,-1], + "starts": [0,1,0,2,1,0,3], + "outlength": 7, + "offsets": [0,3,3,5,6,6,6,9] + }, + "outputs": { + "toptr": [-1,-1,-1,-1,-1,-1,-1] + }, + "error": false + }, + { + "inputs": { + "toptr": [0,1,0,0,1,1,0], + "starts": [0,1,0,2,1,0,3], + "outlength": 7, + "offsets": [0,3,3,5,6,6,6,9] + }, + "outputs": { + "toptr": [0,0,0,-2,0,1,-3] + }, + "error": false + } + ] + }, + { + "name": "awkward_NumpyArray_reduce_adjust_starts_shifts_64", + "status": true, + "tests": [ + { + "inputs": { + "starts": [], + "shifts": [], + "outlength": 0, + "offsets": [0], + "toptr": [] + }, + "outputs": { + "toptr": [] + }, + "error": false + }, + { + "inputs": { + "starts": [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14], + "shifts": [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14], + "outlength": 15, + "offsets": [0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30], + "toptr": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] + }, + "outputs": { + "toptr": [0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14] + }, + "error": false + }, + { + "inputs": { + "starts": [0,0,0,0,0,0], + "shifts": [4,0,5,2,1,3], + "outlength": 6, + "offsets": [0,5,8,9,14,17,18], + "toptr": [0,0,0,0,0,0] + }, + "outputs": { + "toptr": [4,4,4,4,4,4] + }, + "error": false + }, + { + "inputs": { + "starts": [-1], + "shifts": [-1], + "outlength": 1, + "offsets": [0,5], + "toptr": [0] + }, + "outputs": { + "toptr": [0] + }, + "error": false + }, + { + "inputs": { + "starts": [8,7,6,5,4,3,2,1], + "shifts": [1,2,3,4,5,6,7,8], + "outlength": 8, + "offsets": [0,5,8,9,9,14,18,21,22], + "toptr": [0,0,0,0,0,0,0,0] + }, + "outputs": { + "toptr": [-7,-6,-5,-4,-3,-2,-1,0] + }, + "error": false + }, + { + "inputs": { + "starts": [1,2,3,4,5,6,7,8], + "shifts": [8,7,6,5,4,3,2,1], + "outlength": 8, + "offsets": [0,5,8,9,9,14,18,21,22], + "toptr": [0,0,0,0,0,0,0,0] + }, + "outputs": { + "toptr": [7,6,5,4,3,2,1,0] + }, + "error": false + }, + { + "inputs": { + "starts": [-1,-2,-3,-4,-5,-6,-7,-8], + "shifts": [-1,-2,-3,-4,-5,-6,-7,-8], + "outlength": 8, + "offsets": [0,3,5,5,5,5,5,7,8], + "toptr": [0,0,0,0,0,0,0,0] + }, + "outputs": { + "toptr": [0,1,2,3,4,5,6,7] + }, + "error": false + }, + { + "inputs": { + "starts": [-1,-2,-3,-4,-5,-6,-7,-8], + "shifts": [-1,2,-3,4,-5,6,-7,8], + "outlength": 8, + "offsets": [0,3,5,5,5,5,5,7,8], + "toptr": [0,0,0,0,0,0,0,0] + }, + "outputs": { + "toptr": [0,1,2,3,4,5,6,7] + }, + "error": false + }, + { + "inputs": { + "starts": [-1,1,0,-5,2,3], + "shifts": [1,-1,0,5,-2,-3], + "outlength": 6, + "offsets": [0,3,3,5,6,8,9], + "toptr": [0,0,0,0,0,0] + }, + "outputs": { + "toptr": [2,0,1,6,-1,-2] + }, + "error": false + }, + { + "inputs": { + "starts": [-1,0,1], + "shifts": [1,-1,1], + "outlength": 3, + "offsets": [0,2,2,3], + "toptr": [0,0,0] + }, + "outputs": { + "toptr": [2,1,0] + }, + "error": false + }, + { + "inputs": { + "starts": [0,1,0,2,1,0,3], + "shifts": [1,0,2,0,1,2,0], + "outlength": 7, + "offsets": [0,3,3,5,6,6,6,9], + "toptr": [0,0,0,0,0,0,0] + }, + "outputs": { + "toptr": [1,0,1,-1,0,1,-2] + }, + "error": false + }, + { + "inputs": { + "starts": [0,1,0,2,1,0,3], + "shifts": [0,1,0,2,1,0,3], + "outlength": 7, + "offsets": [0,3,3,5,6,6,6,9], + "toptr": [0,0,0,0,0,0,0] + }, + "outputs": { + "toptr": [0,-1,0,-2,-1,0,-3] + }, + "error": false + } + ] + }, + { + "name": "awkward_UnionArray_fillna", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromindex": [], + "length": 0 + }, + "outputs": { + "toindex": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [-1,-1,-1,-1,-1], + "length": 5 + }, + "outputs": { + "toindex": [0,0,0,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [-1,-1,0,-1,1,2,3,4,5,-1,-1,-1], + "length": 12 + }, + "outputs": { + "toindex": [0,0,0,0,1,2,3,4,5,0,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [-1,0,1,-1], + "length": 4 + }, + "outputs": { + "toindex": [0,0,1,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,-1,1], + "length": 3 + }, + "outputs": { + "toindex": [0,0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,-1,1,-1,2], + "length": 5 + }, + "outputs": { + "toindex": [0,0,1,0,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,-1,1,2], + "length": 4 + }, + "outputs": { + "toindex": [0,0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,1,-1], + "length": 3 + }, + "outputs": { + "toindex": [0,1,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,1,-1,2], + "length": 4 + }, + "outputs": { + "toindex": [0,1,0,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,1,-1,2,3,-1,4], + "length": 7 + }, + "outputs": { + "toindex": [0,1,0,2,3,0,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,1,2,-1,-1,-1], + "length": 6 + }, + "outputs": { + "toindex": [0,1,2,0,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,1,2,-1,-1,3,4,5,-1,-1], + "length": 10 + }, + "outputs": { + "toindex": [0,1,2,0,0,3,4,5,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,1,2,3,4,-1,-1], + "length": 7 + }, + "outputs": { + "toindex": [0,1,2,3,4,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [13,9,13,4,8,3,15,-1,16,2,8], + "length": 11 + }, + "outputs": { + "toindex": [13,9,13,4,8,3,15,0,16,2,8] + } + } + ] + }, + { + "name": "awkward_UnionArray_filltags", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "base": 0, + "fromtags": [], + "length": 0, + "totagsoffset": 0 + }, + "outputs": { + "totags": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "base": 0, + "fromtags": [0,0,0,1,1,1], + "length": 6, + "totagsoffset": 0 + }, + "outputs": { + "totags": [0,0,0,1,1,1] + } + } + ] + }, + { + "name": "awkward_UnionArray_filltags_const", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "base": 0, + "length": 0, + "totagsoffset": 0 + }, + "outputs": { + "totags": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "base": 0, + "length": 6, + "totagsoffset": 0 + }, + "outputs": { + "totags": [0,0,0,0,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "base": 3, + "length": 5, + "totagsoffset": 0 + }, + "outputs": { + "totags": [3,3,3,3,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "base": 0, + "length": 3, + "totagsoffset": 3 + }, + "outputs": { + "totags": [123,123,123,0,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "base": 2, + "length": 2, + "totagsoffset": 2 + }, + "outputs": { + "totags": [123,123,2,2] + } + } + ] + }, + { + "name": "awkward_UnionArray_nestedfill_tags_index", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "tmpstarts": [], + "fromcounts": [], + "length": 0, + "tag": 0 + }, + "outputs": { + "totags": [], + "toindex": [], + "tmpstarts": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "tmpstarts": [0], + "fromcounts": [1], + "length": 1, + "tag": 1 + }, + "outputs": { + "totags": [1], + "toindex": [0], + "tmpstarts": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "tmpstarts": [0,1], + "fromcounts": [1,2], + "length": 2, + "tag": 0 + }, + "outputs": { + "totags": [0,0,0], + "toindex": [0,1,2], + "tmpstarts": [1,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "tmpstarts": [0,5,5,6,8], + "fromcounts": [5,0,2,3,1], + "length": 5, + "tag": 1 + }, + "outputs": { + "totags": [1,1,1,1,1,1,1,1,1], + "toindex": [0,1,2,3,4,5,7,8,10], + "tmpstarts": [5,5,7,9,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "tmpstarts": [0,2,4,5,7], + "fromcounts": [2,3,2,2,0], + "length": 5, + "tag": 1 + }, + "outputs": { + "totags": [1,1,1,1,1,1,1], + "toindex": [0,1,2,3,5,7,8], + "tmpstarts": [2,5,6,7,7] + } + } + ] + }, + { + "name": "awkward_UnionArray_project", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromindex": [], + "fromtags": [], + "length": 0, + "which": 0 + }, + "outputs": { + "lenout": [0], + "tocarry": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [], + "fromtags": [], + "length": 0, + "which": 1 + }, + "outputs": { + "lenout": [0], + "tocarry": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [1], + "fromtags": [1], + "length": 1, + "which": 1 + }, + "outputs": { + "lenout": [1], + "tocarry": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,0], + "fromtags": [1,1], + "length": 2, + "which": 1 + }, + "outputs": { + "lenout": [2], + "tocarry": [0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,1], + "fromtags": [0,0], + "length": 2, + "which": 0 + }, + "outputs": { + "lenout": [2], + "tocarry": [0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,1], + "fromtags": [1,1], + "length": 2, + "which": 1 + }, + "outputs": { + "lenout": [2], + "tocarry": [0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [2,3], + "fromtags": [0,0], + "length": 2, + "which": 0 + }, + "outputs": { + "lenout": [2], + "tocarry": [2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [2,3], + "fromtags": [1,1], + "length": 2, + "which": 1 + }, + "outputs": { + "lenout": [2], + "tocarry": [2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,1,2], + "fromtags": [0,0,0], + "length": 3, + "which": 0 + }, + "outputs": { + "lenout": [3], + "tocarry": [0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,1,2], + "fromtags": [1,1,1], + "length": 3, + "which": 1 + }, + "outputs": { + "lenout": [3], + "tocarry": [0,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,1,2,3,4], + "fromtags": [0,0,0,0,0], + "length": 5, + "which": 0 + }, + "outputs": { + "lenout": [5], + "tocarry": [0,1,2,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromindex": [0,1,2,3,4], + "fromtags": [1,1,1,1,1], + "length": 5, + "which": 1 + }, + "outputs": { + "lenout": [5], + "tocarry": [0,1,2,3,4] + } + } + ] + }, + { + "name": "awkward_UnionArray_simplify_one", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "base": 0, + "fromindex": [], + "fromtags": [], + "fromwhich": 0, + "length": 0, + "towhich": 0 + }, + "outputs": { + "toindex": [], + "totags": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "base": 0, + "fromindex": [0,0,0,0,0], + "fromtags": [1,1,1,1,1], + "fromwhich": 1, + "length": 5, + "towhich": 0 + }, + "outputs": { + "toindex": [0,0,0,0,0], + "totags": [0,0,0,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "base": 9, + "fromindex": [0,1,2,3,4,5,6,7,8], + "fromtags": [1,1,1,1,1,1,1,1,1], + "fromwhich": 1, + "length": 9, + "towhich": 0 + }, + "outputs": { + "toindex": [9,10,11,12,13,14,15,16,17], + "totags": [0,0,0,0,0,0,0,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "base": 0, + "fromindex": [0,1], + "fromtags": [1,1], + "fromwhich": 1, + "length": 2, + "towhich": 0 + }, + "outputs": { + "toindex": [0,1], + "totags": [0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "base": 0, + "fromindex": [0], + "fromtags": [1], + "fromwhich": 1, + "length": 1, + "towhich": 0 + }, + "outputs": { + "toindex": [0], + "totags": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "base": 0, + "fromindex": [], + "fromtags": [], + "fromwhich": 1, + "length": 0, + "towhich": 0 + }, + "outputs": { + "toindex": [], + "totags": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "base": 0, + "fromindex": [], + "fromtags": [], + "fromwhich": 1, + "length": 0, + "towhich": 1 + }, + "outputs": { + "toindex": [], + "totags": [] + } + } + ] + }, + { + "name": "awkward_localindex", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "length": 0 + }, + "outputs": { + "toindex": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 2 + }, + "outputs": { + "toindex": [0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 4 + }, + "outputs": { + "toindex": [0,1,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 5 + }, + "outputs": { + "toindex": [0,1,2,3,4] + } + } + ] + }, + { + "name": "awkward_BitMaskedArray_to_IndexedOptionArray", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "bitmasklength": 0, + "frombitmask": [], + "lsb_order": false, + "validwhen": false + }, + "outputs": { + "toindex": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "bitmasklength": 0, + "frombitmask": [], + "lsb_order": true, + "validwhen": false + }, + "outputs": { + "toindex": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "bitmasklength": 1, + "frombitmask": [66], + "lsb_order": true, + "validwhen": false + }, + "outputs": { + "toindex": [0,-1,2,3,4,5,-1,7] + } + }, + { + "error": false, + "message": "", + "inputs": { + "bitmasklength": 2, + "frombitmask": [58,59], + "lsb_order": true, + "validwhen": false + }, + "outputs": { + "toindex": [0,-1,2,-1,-1,-1,6,7,-1,-1,10,-1,-1,-1,14,15] + } + }, + { + "error": false, + "message": "", + "inputs": { + "bitmasklength": 2, + "frombitmask": [58,59], + "lsb_order": false, + "validwhen": false + }, + "outputs": { + "toindex": [0,1,-1,-1,-1,5,-1,7,8,9,-1,-1,-1,13,-1,-1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "bitmasklength": 1, + "frombitmask": [27], + "lsb_order": false, + "validwhen": false + }, + "outputs": { + "toindex": [0,1,2,-1,-1,5,-1,-1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "bitmasklength": 3, + "frombitmask": [1,1,1], + "lsb_order": false, + "validwhen": false + }, + "outputs": { + "toindex": [0,1,2,3,4,5,6,-1,8,9,10,11,12,13,14,-1,16,17,18,19,20,21,22,-1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "bitmasklength": 3, + "frombitmask": [1,1,1], + "lsb_order": false, + "validwhen": true + }, + "outputs": { + "toindex": [-1,-1,-1,-1,-1,-1,-1,7,-1,-1,-1,-1,-1,-1,-1,15,-1,-1,-1,-1,-1,-1,-1,23] + } + }, + { + "error": false, + "message": "", + "inputs": { + "bitmasklength": 4, + "frombitmask": [0,0,0,0], + "lsb_order": false, + "validwhen": false + }, + "outputs": { + "toindex": [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31] + } + }, + { + "error": false, + "message": "", + "inputs": { + "bitmasklength": 4, + "frombitmask": [0,0,0,0], + "lsb_order": true, + "validwhen": false + }, + "outputs": { + "toindex": [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31] + } + } + ] + }, + { + "name": "awkward_ListArray_getitem_jagged_numvalid", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "length": 0, + "missing": [], + "missinglength": 0, + "slicestarts": [], + "slicestops": [] + }, + "outputs": { + "numvalid": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 4, + "missing": [0,0,0,0], + "missinglength": 4, + "slicestarts": [0,2,3,3], + "slicestops": [2,3,3,4] + }, + "outputs": { + "numvalid": [4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 4, + "missing": [0,-1,0,-1,0,-1,0], + "missinglength": 7, + "slicestarts": [0,2,3,5], + "slicestops": [2,3,5,7] + }, + "outputs": { + "numvalid": [4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 4, + "missing": [0,0,0,0], + "missinglength": 4, + "slicestarts": [0,0,0,0], + "slicestops": [0,0,0,0] + }, + "outputs": { + "numvalid": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 4, + "missing": [0,-1,0,-1], + "missinglength": 4, + "slicestarts": [0,2,2,2], + "slicestops": [2,2,2,2] + }, + "outputs": { + "numvalid": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 4, + "missing": [0,-1,0,-1], + "missinglength": 4, + "slicestarts": [0,1,2,3], + "slicestops": [1,2,3,3] + }, + "outputs": { + "numvalid": [2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 4, + "missing": [0,-1,0,-1], + "missinglength": 4, + "slicestarts": [0,2,2,2], + "slicestops": [2,2,2,2] + }, + "outputs": { + "numvalid": [1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 4, + "missing": [-1,-1,-1,-1], + "missinglength": 4, + "slicestarts": [0,2,3,3], + "slicestops": [2,3,3,4] + }, + "outputs": { + "numvalid": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 4, + "missing": [-1,-1,-1,-1], + "missinglength": 4, + "slicestarts": [0,2,3,3], + "slicestops": [2,3,3,4] + }, + "outputs": { + "numvalid": [0] + } + }, + { + "error": true, + "message": "jagged slice's stops[i] < starts[i]", + "inputs": { + "length": 2, + "missing": [0,0], + "missinglength": 2, + "slicestarts": [4,2], + "slicestops": [2,4] + }, + "outputs": { + "numvalid": [] + } + }, + { + "error": true, + "message": "jagged slice's offsets extend beyond its content", + "inputs": { + "length": 2, + "missing": [0], + "missinglength": 1, + "slicestarts": [0,2], + "slicestops": [2,3] + }, + "outputs": { + "numvalid": [] + } + } + ] + }, + { + "name": "awkward_ListArray_getitem_jagged_shrink", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "length": 0, + "missing": [], + "slicestarts": [], + "slicestops": [] + }, + "outputs": { + "tocarry": [], + "tolargeoffsets": [0], + "tosmalloffsets": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 1, + "missing": [0,0,0,0], + "slicestarts": [0], + "slicestops": [4] + }, + "outputs": { + "tocarry": [0,1,2,3], + "tolargeoffsets": [0,4], + "tosmalloffsets": [0,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 2, + "missing": [0,0], + "slicestarts": [0,2], + "slicestops": [2,2] + }, + "outputs": { + "tocarry": [0,1], + "tolargeoffsets": [0,2,2], + "tosmalloffsets": [0,2,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 3, + "missing": [0,0,0,0], + "slicestarts": [0,2,2], + "slicestops": [2,2,4] + }, + "outputs": { + "tocarry": [0,1,2,3], + "tolargeoffsets": [0,2,2,4], + "tosmalloffsets": [0,2,2,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 3, + "missing": [-1,0,-1,0], + "slicestarts": [0,2,2], + "slicestops": [2,2,4] + }, + "outputs": { + "tocarry": [1,3], + "tolargeoffsets": [0,2,2,4], + "tosmalloffsets": [0,1,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 4, + "missing": [-1,-1,-1,-1], + "slicestarts": [0,2,3,3], + "slicestops": [2,3,3,4] + }, + "outputs": { + "tocarry": [], + "tolargeoffsets": [0,2,3,3,4], + "tosmalloffsets": [0,0,0,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 4, + "missing": [0,0,0,0], + "slicestarts": [0,2,3,3], + "slicestops": [2,3,3,4] + }, + "outputs": { + "tocarry": [0,1,2,3], + "tolargeoffsets": [0,2,3,3,4], + "tosmalloffsets": [0,2,3,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "length": 4, + "missing": [0,0,0,0,0,0], + "slicestarts": [0,2,3,3], + "slicestops": [2,3,3,6] + }, + "outputs": { + "tocarry": [0,1,2,3,4,5], + "tolargeoffsets": [0,2,3,3,6], + "tosmalloffsets": [0,2,3,3,6] + } + } + ] + }, + { + "name": "awkward_Content_getitem_next_missing_jagged_getmaskstartstop", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "index_in": [0,-1], + "length": 2, + "offsets_in": [0,1] + }, + "outputs": { + "mask_out": [0,-1], + "starts_out": [0,1], + "stops_out": [1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index_in": [], + "length": 0, + "offsets_in": [] + }, + "outputs": { + "mask_out": [], + "starts_out": [], + "stops_out": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index_in": [0,-1], + "length": 2, + "offsets_in": [0,4] + }, + "outputs": { + "mask_out": [0,-1], + "starts_out": [0,4], + "stops_out": [4,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index_in": [0,-1,-1], + "length": 3, + "offsets_in": [0,1] + }, + "outputs": { + "mask_out": [0,-1,-1], + "starts_out": [0,1,1], + "stops_out": [1,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index_in": [0,-1,1], + "length": 3, + "offsets_in": [0,1,2] + }, + "outputs": { + "mask_out": [0,-1,2], + "starts_out": [0,1,1], + "stops_out": [1,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index_in": [0,-1,1], + "length": 3, + "offsets_in": [0,2,4] + }, + "outputs": { + "mask_out": [0,-1,2], + "starts_out": [0,2,2], + "stops_out": [2,2,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index_in": [0,-1,-1,1], + "length": 4, + "offsets_in": [0,0,0] + }, + "outputs": { + "mask_out": [0,-1,-1,3], + "starts_out": [0,0,0,0], + "stops_out": [0,0,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index_in": [0,-1,-1,1], + "length": 4, + "offsets_in": [0,1,2] + }, + "outputs": { + "mask_out": [0,-1,-1,3], + "starts_out": [0,1,1,1], + "stops_out": [1,1,1,2] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index_in": [0,-1,1,-1], + "length": 4, + "offsets_in": [0,2,3] + }, + "outputs": { + "mask_out": [0,-1,2,-1], + "starts_out": [0,2,2,3], + "stops_out": [2,2,3,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index_in": [0,-1,1,-1,2], + "length": 5, + "offsets_in": [0,2,2,4] + }, + "outputs": { + "mask_out": [0,-1,2,-1,4], + "starts_out": [0,2,2,2,2], + "stops_out": [2,2,2,2,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index_in": [0,1,-1,2], + "length": 4, + "offsets_in": [0,0,0,0] + }, + "outputs": { + "mask_out": [0,1,-1,3], + "starts_out": [0,0,0,0], + "stops_out": [0,0,0,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index_in": [0,1,-1,2], + "length": 4, + "offsets_in": [0,0,1,1] + }, + "outputs": { + "mask_out": [0,1,-1,3], + "starts_out": [0,0,1,1], + "stops_out": [0,1,1,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index_in": [0,-1,1,2], + "length": 4, + "offsets_in": [0,1,2,3] + }, + "outputs": { + "mask_out": [0,-1,2,3], + "starts_out": [0,1,1,2], + "stops_out": [1,1,2,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index_in": [0,1,-1,2], + "length": 4, + "offsets_in": [0,2,3,3] + }, + "outputs": { + "mask_out": [0,1,-1,3], + "starts_out": [0,2,3,3], + "stops_out": [2,3,3,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index_in": [0,1,-1,2], + "length": 4, + "offsets_in": [0,2,3,4] + }, + "outputs": { + "mask_out": [0,1,-1,3], + "starts_out": [0,2,3,3], + "stops_out": [2,3,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index_in": [0,1,-1,2], + "length": 4, + "offsets_in": [0,2,3,5] + }, + "outputs": { + "mask_out": [0,1,-1,3], + "starts_out": [0,2,3,3], + "stops_out": [2,3,3,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index_in": [0,-1,1,2], + "length": 4, + "offsets_in": [0,2,3,5] + }, + "outputs": { + "mask_out": [0,-1,2,3], + "starts_out": [0,2,2,3], + "stops_out": [2,2,3,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index_in": [0,1,-1,2], + "length": 4, + "offsets_in": [0,2,3,6] + }, + "outputs": { + "mask_out": [0,1,-1,3], + "starts_out": [0,2,3,3], + "stops_out": [2,3,3,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index_in": [0,1,-1,2], + "length": 4, + "offsets_in": [0,2,4,5] + }, + "outputs": { + "mask_out": [0,1,-1,3], + "starts_out": [0,2,4,4], + "stops_out": [2,4,4,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index_in": [0,-1,1,2], + "length": 4, + "offsets_in": [0,3,3,4] + }, + "outputs": { + "mask_out": [0,-1,2,3], + "starts_out": [0,3,3,3], + "stops_out": [3,3,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index_in": [0,1,-1,2], + "length": 4, + "offsets_in": [0,3,3,5] + }, + "outputs": { + "mask_out": [0,1,-1,3], + "starts_out": [0,3,3,3], + "stops_out": [3,3,3,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index_in": [0,1,-1,2], + "length": 4, + "offsets_in": [0,4,5,6] + }, + "outputs": { + "mask_out": [0,1,-1,3], + "starts_out": [0,4,5,5], + "stops_out": [4,5,5,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index_in": [0,-1,1,2], + "length": 4, + "offsets_in": [0,4,5,6] + }, + "outputs": { + "mask_out": [0,-1,2,3], + "starts_out": [0,4,4,5], + "stops_out": [4,4,5,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index_in": [0,-1,1,2,-1,3,4,5], + "length": 8, + "offsets_in": [0,2,4,6,8,10,12] + }, + "outputs": { + "mask_out": [0,-1,2,3,-1,5,6,7], + "starts_out": [0,2,2,4,6,6,8,10], + "stops_out": [2,2,4,6,6,8,10,12] + } + }, + { + "error": false, + "message": "", + "inputs": { + "index_in": [0,-1,1,2,3,4,5,6], + "length": 8, + "offsets_in": [0,1,1,1,1,1,1,1] + }, + "outputs": { + "mask_out": [0,-1,2,3,4,5,6,7], + "starts_out": [0,1,1,1,1,1,1,1], + "stops_out": [1,1,1,1,1,1,1,1] + } + } + ] + }, + { + "name": "awkward_reduce_sum_bool", + "status": true, + "tests": [ + { + "inputs": { + "fromptr": [], + "outlength": 0, + "offsets": [0] + }, + "outputs": { + "toptr": [] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,0,0,1,1,0,1,0,0,0], + "outlength": 4, + "offsets": [0,3,6,9,10] + }, + "outputs": { + "toptr": [ + false, + true, + true, + false + ] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,0,1,0,0,1,0,1,1], + "outlength": 6, + "offsets": [0,3,3,5,6,8,9] + }, + "outputs": { + "toptr": [ + true, + false, + false, + true, + true, + true + ] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,0,1,0,1,0,0,1,1], + "outlength": 8, + "offsets": [0,3,5,6,6,6,6,8,9] + }, + "outputs": { + "toptr": [ + true, + true, + false, + false, + false, + false, + true, + true + ] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,1,1,0,1,0,0,0,0,0], + "outlength": 3, + "offsets": [0,3,6,10] + }, + "outputs": { + "toptr": [ + true, + true, + false + ] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,2,3,0,2,0,0,0,0,0], + "outlength": 3, + "offsets": [0,3,6,10] + }, + "outputs": { + "toptr": [ + true, + true, + false + ] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,0,0,2,2,0,3,0,0,0], + "outlength": 4, + "offsets": [0,3,6,9,10] + }, + "outputs": { + "toptr": [ + true, + true, + true, + false + ] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,2,3], + "outlength": 1, + "offsets": [0,3] + }, + "outputs": { + "toptr": [ + true + ] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,2,3,4,5,6], + "outlength": 1, + "offsets": [0,6] + }, + "outputs": { + "toptr": [ + true + ] + }, + "error": false + } + ] + }, + { + "name": "awkward_reduce_prod_bool", + "status": true, + "tests": [ + { + "inputs": { + "fromptr": [], + "outlength": 0, + "offsets": [0] + }, + "outputs": { + "toptr": [] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,0,1,0,1,0,0,1,1], + "outlength": 8, + "offsets": [0,3,5,6,6,6,6,8,9] + }, + "outputs": { + "toptr": [ + false, + false, + false, + true, + true, + true, + false, + true + ] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,0,0,1,1,1], + "outlength": 2, + "offsets": [0,3,6] + }, + "outputs": { + "toptr": [ + false, + true + ] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,0,1,0,0,1,0,1,1], + "outlength": 6, + "offsets": [0,3,3,5,6,8,9] + }, + "outputs": { + "toptr": [ + false, + true, + false, + true, + false, + true + ] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,0,0,1,1,1,1,0,0,1], + "outlength": 4, + "offsets": [0,3,6,9,10] + }, + "outputs": { + "toptr": [ + false, + true, + false, + true + ] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,0,0,2,2,2,3,0,0,4], + "outlength": 4, + "offsets": [0,3,6,9,10] + }, + "outputs": { + "toptr": [ + false, + true, + false, + true + ] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,0,0,1,1,1,1,1,1,1], + "outlength": 3, + "offsets": [0,3,6,10] + }, + "outputs": { + "toptr": [ + false, + true, + true + ] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1], + "outlength": 6, + "offsets": [0,3,6,10,15,21,25] + }, + "outputs": { + "toptr": [ + false, + true, + true, + false, + true, + true + ] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,0,0,1,1,1,1,1,1,1,1,1,0,0,0], + "outlength": 5, + "offsets": [0,3,6,9,12,15] + }, + "outputs": { + "toptr": [ + false, + true, + true, + true, + false + ] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0], + "outlength": 6, + "offsets": [0,3,6,11,15,19,22] + }, + "outputs": { + "toptr": [ + true, + false, + false, + true, + true, + false + ] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,1,1,0,1,0,0,1,0,1], + "outlength": 3, + "offsets": [0,3,6,10] + }, + "outputs": { + "toptr": [ + true, + false, + false + ] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1], + "outlength": 5, + "offsets": [0,5,8,11,14,19] + }, + "outputs": { + "toptr": [ + true, + false, + false, + true, + true + ] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,2,3,0,2,0,0,2,0,4], + "outlength": 3, + "offsets": [0,3,6,10] + }, + "outputs": { + "toptr": [ + true, + false, + false + ] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,1,1,0,0,0], + "outlength": 2, + "offsets": [0,3,6] + }, + "outputs": { + "toptr": [ + true, + false + ] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,1,1,1,1,1,0,0,0], + "outlength": 3, + "offsets": [0,3,6,9] + }, + "outputs": { + "toptr": [ + true, + true, + false + ] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,1,1,1,1,1,0,0,0,1,1,1,1,1,1], + "outlength": 5, + "offsets": [0,3,6,9,12,15] + }, + "outputs": { + "toptr": [ + true, + true, + false, + true, + true + ] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,1,1,1,1,1,1,1,1,1,1], + "outlength": 3, + "offsets": [0,3,6,11] + }, + "outputs": { + "toptr": [ + true, + true, + true + ] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1], + "outlength": 5, + "offsets": [0,3,6,10,14,17] + }, + "outputs": { + "toptr": [ + true, + true, + true, + true, + true + ] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1], + "outlength": 5, + "offsets": [0,3,8,12,16,19] + }, + "outputs": { + "toptr": [ + true, + true, + true, + true, + true + ] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1], + "outlength": 6, + "offsets": [0,3,6,11,15,19,22] + }, + "outputs": { + "toptr": [ + true, + true, + true, + true, + true, + true + ] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,2,3], + "outlength": 1, + "offsets": [0,3] + }, + "outputs": { + "toptr": [ + true + ] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,2,3,4,5,6], + "outlength": 1, + "offsets": [0,6] + }, + "outputs": { + "toptr": [ + true + ] + }, + "error": false + } + ] + }, + { + "name": "awkward_reduce_argmax", + "status": true, + "tests": [ + { + "inputs": { + "fromptr": [], + "outlength": 0, + "starts": [], + "offsets": [0] + }, + "outputs": { + "toptr": [] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,-1,1,-1,1,21], + "outlength": 3, + "starts": [0,1,3], + "offsets": [0,1,3,6] + }, + "outputs": { + "toptr": [0,2,5] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,2,3,4,6,7], + "outlength": 3, + "starts": [0,1,3,6], + "offsets": [0,1,3,6] + }, + "outputs": { + "toptr": [0,2,5] + }, + "error": false + }, + { + "inputs": { + "fromptr": [6,1,10,33,-1,21,2,45,4], + "outlength": 5, + "starts": [0,2,4,5,7], + "offsets": [0,2,4,5,7,9] + }, + "outputs": { + "toptr": [0,3,4,5,7] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,2,3,4,6], + "outlength": 3, + "starts": [0,2,3,5], + "offsets": [0,2,3,5] + }, + "outputs": { + "toptr": [1,2,4] + }, + "error": false + }, + { + "inputs": { + "fromptr": [3,4,2,1,2,3,6,1,-1,1,7,4], + "outlength": 5, + "starts": [0,3,6,9,11], + "offsets": [0,3,6,9,11,12] + }, + "outputs": { + "toptr": [1,5,6,10,11] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,2,3], + "outlength": 1, + "starts": [0], + "offsets": [0,3] + }, + "outputs": { + "toptr": [2] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,1,2,3,4,6], + "outlength": 3, + "starts": [0,3,5], + "offsets": [0,3,5,6] + }, + "outputs": { + "toptr": [2,4,5] + }, + "error": false + }, + { + "inputs": { + "fromptr": [3,1,6,1,4,4,2,1,7,2,3,-1], + "outlength": 3, + "starts": [0,5,9], + "offsets": [0,5,9,12] + }, + "outputs": { + "toptr": [2,8,10] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,0,4,4,6], + "outlength": 1, + "starts": [0], + "offsets": [0,5] + }, + "outputs": { + "toptr": [4] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,2,3,4,6], + "outlength": 1, + "starts": [0], + "offsets": [0,5] + }, + "outputs": { + "toptr": [4] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,2,3,4,5,6], + "outlength": 1, + "starts": [0], + "offsets": [0,6] + }, + "outputs": { + "toptr": [5] + }, + "error": false + } + ] + }, + { + "name": "awkward_reduce_argmin_complex", + "status": true, + "tests": [ + { + "inputs": { + "fromptr": [], + "outlength": 0, + "offsets": [0] + }, + "outputs": { + "toptr": [] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,0], + "outlength": 1, + "offsets": [0,1] + }, + "outputs": { + "toptr": [0] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,0,0,1], + "outlength": 1, + "offsets": [0,2] + }, + "outputs": { + "toptr": [1] + }, + "error": false + }, + { + "inputs": { + "fromptr": [2,2,3,3,5,5,7,7,11,11,13,13,17,17,19,19,23,23], + "outlength": 6, + "offsets": [0,3,3,5,6,8,9] + }, + "outputs": { + "toptr": [0,-1,3,5,6,8] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,1,0,1,0,0,1,0,0,1,0,1], + "outlength": 4, + "offsets": [0,3,3,5,6] + }, + "outputs": { + "toptr": [2,-1,4,5] + }, + "error": false + } + ] + }, + { + "name": "awkward_reduce_argmax_complex", + "status": true, + "tests": [ + { + "inputs": { + "fromptr": [], + "outlength": 0, + "offsets": [0] + }, + "outputs": { + "toptr": [] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,0], + "outlength": 1, + "offsets": [0,1] + }, + "outputs": { + "toptr": [0] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,0,0,1], + "outlength": 1, + "offsets": [0,2] + }, + "outputs": { + "toptr": [0] + }, + "error": false + }, + { + "inputs": { + "fromptr": [2,2,3,3,5,5,7,7,11,11,13,13,17,17,19,19,23,23], + "outlength": 6, + "offsets": [0,3,3,5,6,8,9] + }, + "outputs": { + "toptr": [2,-1,4,5,7,8] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,1,0,1,0,0,1,1,0,0,0,1], + "outlength": 4, + "offsets": [0,3,3,5,6] + }, + "outputs": { + "toptr": [0,-1,3,5] + }, + "error": false + } + ] + }, + { + "name": "awkward_reduce_max", + "status": true, + "tests": [ + { + "inputs": { + "fromptr": [], + "identity": -9223372036854775808, + "outlength": 0, + "offsets": [0] + }, + "outputs": { + "toptr": [] + }, + "error": false + }, + { + "inputs": { + "fromptr": [2,7,13,17,23,3,11,19,5], + "identity": -9223372036854775808, + "outlength": 8, + "offsets": [0,3,5,6,6,6,6,8,9] + }, + "outputs": { + "toptr": [13,23,3,-9223372036854775808,-9223372036854775808,-9223372036854775808,19,5] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,1,3,4,5,6], + "identity": -9223372036854775808, + "outlength": 4, + "offsets": [0,2,3,3,6] + }, + "outputs": { + "toptr": [1,3,-9223372036854775808,6] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,2,3], + "identity": -9223372036854775808, + "outlength": 1, + "offsets": [0,3] + }, + "outputs": { + "toptr": [3] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,4,1,3,5,6], + "identity": -9223372036854775808, + "outlength": 4, + "offsets": [0,2,5,5,6] + }, + "outputs": { + "toptr": [4,5,-9223372036854775808,6] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,2,5,3,3,5,1,4,2], + "identity": -9223372036854775808, + "outlength": 5, + "offsets": [0,3,5,7,8,9] + }, + "outputs": { + "toptr": [5,3,5,4,2] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,3,5,4,2,2,3,1,5], + "identity": 4, + "outlength": 4, + "offsets": [0,5,5,8,9] + }, + "outputs": { + "toptr": [5,4,4,5] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,3,6,4,2,2,3,1,6], + "identity": 4, + "outlength": 4, + "offsets": [0,5,5,8,9] + }, + "outputs": { + "toptr": [6,4,4,6] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,3,2,5,3,7,3,1,5,8,1,9,4,2,7,10,2,4,7,2], + "identity": -9223372036854775808, + "outlength": 5, + "offsets": [0,4,8,12,16,20] + }, + "outputs": { + "toptr": [5,7,9,10,7] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,3,5,4,2,3,7,8,2,4,2,3,1,7,7,5,1,9,10,2], + "identity": -9223372036854775808, + "outlength": 4, + "offsets": [0,5,10,15,20] + }, + "outputs": { + "toptr": [5,8,7,10] + }, + "error": false + }, + { + "inputs": { + "fromptr": [2,3,5,7,11,13,17,19,23], + "identity": -9223372036854775808, + "outlength": 6, + "offsets": [0,3,3,5,6,8,9] + }, + "outputs": { + "toptr": [5,-9223372036854775808,11,13,19,23] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,3,5,4,2,2,3,1,5], + "identity": -9223372036854775808, + "outlength": 4, + "offsets": [0,5,5,8,9] + }, + "outputs": { + "toptr": [5,-9223372036854775808,3,5] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,2,3,4,5,6], + "identity": -9223372036854775808, + "outlength": 1, + "offsets": [0,6] + }, + "outputs": { + "toptr": [6] + }, + "error": false + } + ] + }, + { + "name": "awkward_reduce_countnonzero", + "status": true, + "tests": [ + { + "inputs": { + "fromptr": [], + "outlength": 0, + "offsets": [0] + }, + "outputs": { + "toptr": [] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,0,0,2,2,2,3,0,0,4], + "outlength": 4, + "offsets": [0,3,6,9,10] + }, + "outputs": { + "toptr": [1,3,1,1] + }, + "error": false + }, + { + "inputs": { + "fromptr": [2,3,5,7,11,13,17,19,23], + "outlength": 6, + "offsets": [0,3,3,5,6,8,9] + }, + "outputs": { + "toptr": [3,0,2,1,2,1] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,2,3,0,2,0,0,2,0,4], + "outlength": 3, + "offsets": [0,3,6,10] + }, + "outputs": { + "toptr": [3,1,2] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,2,3], + "outlength": 1, + "offsets": [0,3] + }, + "outputs": { + "toptr": [3] + }, + "error": false + }, + { + "inputs": { + "fromptr": [2,7,13,17,23,3,11,19,5], + "outlength": 8, + "offsets": [0,3,5,6,6,6,6,8,9] + }, + "outputs": { + "toptr": [3,2,1,0,0,0,2,1] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,2,3,4,5,6], + "outlength": 1, + "offsets": [0,6] + }, + "outputs": { + "toptr": [6] + }, + "error": false + } + ] + }, + { + "name": "awkward_reduce_count_64", + "status": true, + "tests": [ + { + "inputs": { + "outlength": 0, + "offsets": [0] + }, + "outputs": { + "toptr": [] + }, + "error": false + }, + { + "inputs": { + "outlength": 9, + "offsets": [0,0,3,3,8,12,12,16,19,19] + }, + "outputs": { + "toptr": [0,3,0,5,4,0,4,3,0] + }, + "error": false + }, + { + "inputs": { + "outlength": 8, + "offsets": [0,0,3,3,8,12,12,16,19] + }, + "outputs": { + "toptr": [0,3,0,5,4,0,4,3] + }, + "error": false + }, + { + "inputs": { + "outlength": 331, + "offsets": [0,626,636,646,656,666,676,686,696,706,716,726,736,746,756,766,776,786,796,806,816,826,836,846,856,866,876,886,896,896,896,896,896,896,896,906,916,926,936,946,956,966,976,976,976,976,976,976,976,976,976,976,986,996,1006,1016,1026,1036,1046,1056,1056,1056,1056,1056,1056,1056,1056,1056,1056,1066,1076,1086,1096,1106,1116,1126,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1146,1156,1166,1176,1186,1196,1206,1216,1216,1216,1216,1216,1216,1216,1216,1216,1216,1226,1236,1246,1256,1266,1276,1286,1296,1296,1296,1296,1296,1296,1296,1296,1296,1296,1306,1316,1326,1336,1346,1356,1366,1376,1376,1376,1376,1376,1376,1376,1376,1376,1376,1386,1396,1406,1416,1426,1436,1446,1456,1456,1456,1456,1456,1456,1456,1456,1456,1456,1466,1476,1486,1496,1506,1516,1526,1536,1536,1536,1536,1536,1536,1536,1536,1536,1536,1546,1556,1566,1576,1586,1596,1606,1616,1616,1616,1616,1616,1616,1616,1616,1616,1616,1626,1636,1646,1656,1666,1676,1686,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696,1696] + }, + "outputs": { + "toptr": [626,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,0,0,0,0,0,0,10,10,10,10,10,10,10,10,0,0,0,0,0,0,0,0,0,10,10,10,10,10,10,10,10,0,0,0,0,0,0,0,0,0,10,10,10,10,10,10,10,10,0,0,0,0,0,0,0,0,0,10,10,10,10,10,10,10,10,0,0,0,0,0,0,0,0,0,10,10,10,10,10,10,10,10,0,0,0,0,0,0,0,0,0,10,10,10,10,10,10,10,10,0,0,0,0,0,0,0,0,0,10,10,10,10,10,10,10,10,0,0,0,0,0,0,0,0,0,10,10,10,10,10,10,10,10,0,0,0,0,0,0,0,0,0,10,10,10,10,10,10,10,10,0,0,0,0,0,0,0,0,0,10,10,10,10,10,10,10,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] + }, + "error": false + }, + { + "inputs": { + "outlength": 3, + "offsets": [0,2,2,3] + }, + "outputs": { + "toptr": [2,0,1] + }, + "error": false + }, + { + "inputs": { + "outlength": 1, + "offsets": [0,3] + }, + "outputs": { + "toptr": [3] + }, + "error": false + }, + { + "inputs": { + "outlength": 6, + "offsets": [0,3,3,5,6,8,9] + }, + "outputs": { + "toptr": [3,0,2,1,2,1] + }, + "error": false + }, + { + "inputs": { + "outlength": 8, + "offsets": [0,3,5,6,6,6,6,8,9] + }, + "outputs": { + "toptr": [3,2,1,0,0,0,2,1] + }, + "error": false + }, + { + "inputs": { + "outlength": 9, + "offsets": [0,3,6,6,10,14,14,18,21,21] + }, + "outputs": { + "toptr": [3,3,0,4,4,0,4,3,0] + }, + "error": false + }, + { + "inputs": { + "outlength": 8, + "offsets": [0,3,6,6,10,14,14,18,21] + }, + "outputs": { + "toptr": [3,3,0,4,4,0,4,3] + }, + "error": false + }, + { + "inputs": { + "outlength": 9, + "offsets": [0,3,6,6,11,15,15,19,22,22] + }, + "outputs": { + "toptr": [3,3,0,5,4,0,4,3,0] + }, + "error": false + }, + { + "inputs": { + "outlength": 8, + "offsets": [0,3,6,6,11,15,15,19,22] + }, + "outputs": { + "toptr": [3,3,0,5,4,0,4,3] + }, + "error": false + }, + { + "inputs": { + "outlength": 9, + "offsets": [0,3,6,8,13,17,17,21,24,24] + }, + "outputs": { + "toptr": [3,3,2,5,4,0,4,3,0] + }, + "error": false + }, + { + "inputs": { + "outlength": 8, + "offsets": [0,3,6,8,13,17,17,21,24] + }, + "outputs": { + "toptr": [3,3,2,5,4,0,4,3] + }, + "error": false + }, + { + "inputs": { + "outlength": 3, + "offsets": [0,3,6,9] + }, + "outputs": { + "toptr": [3,3,3] + }, + "error": false + }, + { + "inputs": { + "outlength": 4, + "offsets": [0,3,6,9,10] + }, + "outputs": { + "toptr": [3,3,3,1] + }, + "error": false + }, + { + "inputs": { + "outlength": 6, + "offsets": [0,3,6,9,12,15,18] + }, + "outputs": { + "toptr": [3,3,3,3,3,3] + }, + "error": false + }, + { + "inputs": { + "outlength": 7, + "offsets": [0,3,6,9,12,15,18,21] + }, + "outputs": { + "toptr": [3,3,3,3,3,3,3] + }, + "error": false + }, + { + "inputs": { + "outlength": 10, + "offsets": [0,3,6,9,12,15,18,21,24,27,30] + }, + "outputs": { + "toptr": [3,3,3,3,3,3,3,3,3,3] + }, + "error": false + }, + { + "inputs": { + "outlength": 7, + "offsets": [0,3,6,9,12,15,20,23] + }, + "outputs": { + "toptr": [3,3,3,3,3,5,3] + }, + "error": false + }, + { + "inputs": { + "outlength": 7, + "offsets": [0,3,6,9,12,17,20,23] + }, + "outputs": { + "toptr": [3,3,3,3,5,3,3] + }, + "error": false + }, + { + "inputs": { + "outlength": 3, + "offsets": [0,3,6,10] + }, + "outputs": { + "toptr": [3,3,4] + }, + "error": false + }, + { + "inputs": { + "outlength": 10, + "offsets": [0,3,6,10,12,16,21,27,31,36,43] + }, + "outputs": { + "toptr": [3,3,4,2,4,5,6,4,5,7] + }, + "error": false + }, + { + "inputs": { + "outlength": 10, + "offsets": [0,3,6,10,13,16,21,27,31,34,39] + }, + "outputs": { + "toptr": [3,3,4,3,3,5,6,4,3,5] + }, + "error": false + }, + { + "inputs": { + "outlength": 3, + "offsets": [0,3,6,11] + }, + "outputs": { + "toptr": [3,3,5] + }, + "error": false + }, + { + "inputs": { + "outlength": 6, + "offsets": [0,3,6,11,14,17,20] + }, + "outputs": { + "toptr": [3,3,5,3,3,3] + }, + "error": false + }, + { + "inputs": { + "outlength": 7, + "offsets": [0,3,6,11,14,17,20,25] + }, + "outputs": { + "toptr": [3,3,5,3,3,3,5] + }, + "error": false + }, + { + "inputs": { + "outlength": 1, + "offsets": [0,5] + }, + "outputs": { + "toptr": [5] + }, + "error": false + }, + { + "inputs": { + "outlength": 2, + "offsets": [0,5,10] + }, + "outputs": { + "toptr": [5,5] + }, + "error": false + }, + { + "inputs": { + "outlength": 7, + "offsets": [0,5,10,15,18,21,24,29] + }, + "outputs": { + "toptr": [5,5,5,3,3,3,5] + }, + "error": false + }, + { + "inputs": { + "outlength": 1, + "offsets": [0,6] + }, + "outputs": { + "toptr": [6] + }, + "error": false + } + ] + }, + { + "name": "awkward_reduce_sum_complex", + "status": true, + "tests": [ + { + "inputs": { + "fromptr": [], + "outlength": 0, + "offsets": [0] + }, + "outputs": { + "toptr": [] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,0], + "outlength": 1, + "offsets": [0,1] + }, + "outputs": { + "toptr": [0,0] + }, + "error": false + }, + { + "inputs": { + "fromptr": [2,2,3,3,5,5,7,7,11,11,13,13,17,17,19,19,23,23], + "outlength": 6, + "offsets": [0,3,3,5,6,8,9] + }, + "outputs": { + "toptr": [10,10,0,0,18,18,13,13,36,36,23,23] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,1,0,1,0,1,1,1,0,1,0,1], + "outlength": 4, + "offsets": [0,3,3,5,6] + }, + "outputs": { + "toptr": [1,3,0,0,1,2,0,1] + }, + "error": false + } + ] + }, + { + "name": "awkward_reduce_sum_bool_complex", + "status": true, + "tests": [ + { + "inputs": { + "fromptr": [], + "outlength": 0, + "offsets": [0] + }, + "outputs": { + "toptr": [] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,0], + "outlength": 1, + "offsets": [0,1] + }, + "outputs": { + "toptr": [ + false + ] + }, + "error": false + }, + { + "inputs": { + "fromptr": [2,2,3,3,5,5,7,7,11,11,13,13,17,17,19,19,23,23], + "outlength": 6, + "offsets": [0,3,3,5,6,8,9] + }, + "outputs": { + "toptr": [ + true, + false, + true, + true, + true, + true + ] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,1,0,1,0,1,1,1,0,0,0,0], + "outlength": 4, + "offsets": [0,3,3,5,6] + }, + "outputs": { + "toptr": [ + true, + false, + true, + false + ] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,1,0,1,0,1,1,1,0,1,0,1], + "outlength": 4, + "offsets": [0,3,3,5,6] + }, + "outputs": { + "toptr": [ + true, + false, + true, + true + ] + }, + "error": false + } + ] + }, + { + "name": "awkward_reduce_prod_bool_complex", + "status": true, + "tests": [ + { + "inputs": { + "fromptr": [], + "outlength": 0, + "offsets": [0] + }, + "outputs": { + "toptr": [] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,0], + "outlength": 1, + "offsets": [0,1] + }, + "outputs": { + "toptr": [ + false + ] + }, + "error": false + }, + { + "inputs": { + "fromptr": [2,2,3,3,5,5,7,7,11,11,13,13,17,17,19,19,23,23], + "outlength": 6, + "offsets": [0,3,3,5,6,8,9] + }, + "outputs": { + "toptr": [ + true, + true, + true, + true, + true, + true + ] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,1,0,1,0,1,1,1,0,1,0,1], + "outlength": 4, + "offsets": [0,3,3,5,6] + }, + "outputs": { + "toptr": [ + true, + true, + true, + true + ] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,1,0,1,0,1,1,1,0,0,0,0], + "outlength": 4, + "offsets": [0,3,3,5,6] + }, + "outputs": { + "toptr": [ + true, + true, + false, + false + ] + }, + "error": false + } + ] + }, + { + "name": "awkward_reduce_countnonzero_complex", + "status": true, + "tests": [ + { + "inputs": { + "fromptr": [], + "outlength": 0, + "offsets": [0] + }, + "outputs": { + "toptr": [] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,0], + "outlength": 1, + "offsets": [0,1] + }, + "outputs": { + "toptr": [0] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,0], + "outlength": 1, + "offsets": [0,1] + }, + "outputs": { + "toptr": [1] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,1], + "outlength": 1, + "offsets": [0,1] + }, + "outputs": { + "toptr": [1] + }, + "error": false + }, + { + "inputs": { + "fromptr": [2,2,3,3,5,5,7,7,11,11,13,13,17,17,19,19,23,23], + "outlength": 6, + "offsets": [0,3,3,5,6,8,9] + }, + "outputs": { + "toptr": [3,0,2,1,2,1] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,1,0,1,0,1,1,1,0,1,0,0], + "outlength": 4, + "offsets": [0,3,3,5,6] + }, + "outputs": { + "toptr": [3,0,2,0] + }, + "error": false + } + ] + }, + { + "name": "awkward_reduce_min_complex", + "status": true, + "tests": [ + { + "inputs": { + "identity": 9223372036854775807, + "fromptr": [], + "outlength": 0, + "offsets": [0] + }, + "outputs": { + "toptr": [] + }, + "error": false + }, + { + "inputs": { + "identity": 9223372036854775807, + "fromptr": [0,0], + "outlength": 1, + "offsets": [0,1] + }, + "outputs": { + "toptr": [0,0] + }, + "error": false + }, + { + "inputs": { + "identity": 9223372036854775807, + "fromptr": [1,0,0,1], + "outlength": 1, + "offsets": [0,2] + }, + "outputs": { + "toptr": [0,1] + }, + "error": false + }, + { + "inputs": { + "identity": 9223372036854775807, + "fromptr": [2,2,3,3,5,5,7,7,11,11,13,13,17,17,19,19,23,23], + "outlength": 6, + "offsets": [0,3,3,5,6,8,9] + }, + "outputs": { + "toptr": [2,2,9223372036854775807,0,7,7,13,13,17,17,23,23] + }, + "error": false + }, + { + "inputs": { + "identity": 9223372036854775807, + "fromptr": [1,1,0,1,0,0,1,1,0,1,0,1], + "outlength": 4, + "offsets": [0,3,3,5,6] + }, + "outputs": { + "toptr": [0,0,9223372036854775807,0,0,1,0,1] + }, + "error": false + } + ] + }, + { + "name": "awkward_reduce_max_complex", + "status": true, + "tests": [ + { + "inputs": { + "identity": -9223372036854775808, + "fromptr": [], + "outlength": 0, + "offsets": [0] + }, + "outputs": { + "toptr": [] + }, + "error": false + }, + { + "inputs": { + "identity": -9223372036854775808, + "fromptr": [0,0], + "outlength": 1, + "offsets": [0,1] + }, + "outputs": { + "toptr": [0,0] + }, + "error": false + }, + { + "inputs": { + "identity": -9223372036854775808, + "fromptr": [1,0,0,1], + "outlength": 1, + "offsets": [0,2] + }, + "outputs": { + "toptr": [1,0] + }, + "error": false + }, + { + "inputs": { + "identity": -9223372036854775808, + "fromptr": [2,2,3,3,5,5,7,7,11,11,13,13,17,17,19,19,23,23], + "outlength": 6, + "offsets": [0,3,3,5,6,8,9] + }, + "outputs": { + "toptr": [5,5,-9223372036854775808,0,11,11,13,13,19,19,23,23] + }, + "error": false + }, + { + "inputs": { + "identity": -9223372036854775808, + "fromptr": [1,1,0,1,0,0,1,1,0,1,0,1], + "outlength": 4, + "offsets": [0,3,3,5,6] + }, + "outputs": { + "toptr": [1,1,-9223372036854775808,0,1,1,0,1] + }, + "error": false + } + ] + }, + { + "name": "awkward_reduce_prod_complex", + "status": true, + "tests": [ + { + "inputs": { + "fromptr": [], + "outlength": 0, + "offsets": [0] + }, + "outputs": { + "toptr": [] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,0], + "outlength": 1, + "offsets": [0,1] + }, + "outputs": { + "toptr": [0,0] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,0], + "outlength": 1, + "offsets": [0,1] + }, + "outputs": { + "toptr": [1,0] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,0,0,1], + "outlength": 1, + "offsets": [0,2] + }, + "outputs": { + "toptr": [0,1] + }, + "error": false + }, + { + "inputs": { + "fromptr": [2,2,3,3,5,5,7,7,11,11,13,13,17,17,19,19,23,23], + "outlength": 6, + "offsets": [0,3,3,5,6,8,9] + }, + "outputs": { + "toptr": [-60,60,1,0,0,154,13,13,0,646,23,23] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,1,0,1,0,1,1,1,0,1,0,1], + "outlength": 4, + "offsets": [0,3,3,5,6] + }, + "outputs": { + "toptr": [-1,-1,1,0,-1,1,0,1] + }, + "error": false + } + ] + }, + { + "name": "awkward_reduce_sum", + "status": true, + "tests": [ + { + "inputs": { + "fromptr": [], + "outlength": 0, + "offsets": [0] + }, + "outputs": { + "toptr": [] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0], + "outlength": 1, + "offsets": [0,1] + }, + "outputs": { + "toptr": [0] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,5,20,1,6,21,2,7,22,3,8,23,4,9,24], + "outlength": 10, + "offsets": [0,1,2,3,4,5,7,9,11,13,15] + }, + "outputs": { + "toptr": [0,5,20,1,6,23,29,11,27,33] + }, + "error": false + }, + { + "inputs": { + "fromptr": [2,3,5,7,11,13,17,19,23], + "outlength": 6, + "offsets": [0,3,3,5,6,8,9] + }, + "outputs": { + "toptr": [10,0,18,13,36,23] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,0,0,1,0,0], + "outlength": 4, + "offsets": [0,3,3,5,6] + }, + "outputs": { + "toptr": [1,0,1,0] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,1,2,3,4,5,6,7,8,9,20,21,22,23,24], + "outlength": 3, + "offsets": [0,5,10,15] + }, + "outputs": { + "toptr": [10,35,110] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29], + "outlength": 6, + "offsets": [0,5,10,15,20,25,30] + }, + "outputs": { + "toptr": [10,35,60,85,110,135] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,1,3,4,5,6], + "outlength": 4, + "offsets": [0,2,3,3,6] + }, + "outputs": { + "toptr": [1,3,0,15] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,5,10,15,25,1,11,16,26,2,12,17,27,8,18,28,4,9,14,29], + "outlength": 10, + "offsets": [0,3,5,7,8,11,13,15,17,19,20] + }, + "outputs": { + "toptr": [15,40,12,16,40,44,26,32,23,29] + }, + "error": false + }, + { + "inputs": { + "fromptr": [15,20,25,16,21,26,17,22,27,18,23,28,19,24,29], + "outlength": 15, + "offsets": [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] + }, + "outputs": { + "toptr": [15,20,25,16,21,26,17,22,27,18,23,28,19,24,29] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,15,5,10,25,1,16,11,26,2,17,12,27,18,8,28,4,9,14,29], + "outlength": 15, + "offsets": [0,2,4,6,7,8,9,9,9,10,11,13,15,17,18,20] + }, + "outputs": { + "toptr": [15,15,26,16,11,26,0,0,2,17,39,26,32,9,43] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,15,5,20,10,25,1,16,6,21,11,26,2,17,7,22,12,27,3,18,8,23,13,28,4,19,9,24,14,29], + "outlength": 15, + "offsets": [0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30] + }, + "outputs": { + "toptr": [15,25,35,17,27,37,19,29,39,21,31,41,23,33,43] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,5,10,15,20,25,1,6,11,16,21,26,2,7,12,17,22,27,3,8,13,18,23,28,4,9,14,19,24,29], + "outlength": 10, + "offsets": [0,3,6,9,12,15,18,21,24,27,30] + }, + "outputs": { + "toptr": [15,60,18,63,21,66,24,69,27,72] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,2,4,8,16,32,64,128,0,0,0,0], + "outlength": 3, + "offsets": [0,4,8,12] + }, + "outputs": { + "toptr": [15,240,0] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,2,3,4,5,1,2,3,4,5], + "outlength": 2, + "offsets": [0,5,10] + }, + "outputs": { + "toptr": [15,15] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,2,3,4,5,6], + "outlength": 1, + "offsets": [0,6] + }, + "outputs": { + "toptr": [21] + }, + "error": false + }, + { + "inputs": { + "fromptr": [2,7,13,17,23,3,11,19,5], + "outlength": 8, + "offsets": [0,3,5,6,6,6,6,8,9] + }, + "outputs": { + "toptr": [22,40,3,0,0,0,30,5] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,16,0,2,32,0,4,64,0,8,128,0], + "outlength": 4, + "offsets": [0,3,6,9,12] + }, + "outputs": { + "toptr": [17,34,68,136] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,1,2,3,4,5], + "outlength": 4, + "offsets": [0,3,3,5,6] + }, + "outputs": { + "toptr": [3,0,7,5] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,4,1,3,5,6], + "outlength": 4, + "offsets": [0,2,5,5,6] + }, + "outputs": { + "toptr": [4,9,0,6] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,4,9,16,25,1,4,9,16,25], + "outlength": 2, + "offsets": [0,5,10] + }, + "outputs": { + "toptr": [55,55] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,4,9,16,26,1,4,10,16,24], + "outlength": 2, + "offsets": [0,5,10] + }, + "outputs": { + "toptr": [56,55] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,5,20,1,6,21,2,7,22,3,8,23,4,9,24], + "outlength": 10, + "offsets": [0,2,4,6,8,10,11,12,13,14,15] + }, + "outputs": { + "toptr": [5,21,27,9,25,8,23,4,9,24] + }, + "error": false + }, + { + "inputs": { + "fromptr": [15,20,25,16,21,26,17,22,27,18,23,28,19,24,29], + "outlength": 5, + "offsets": [0,3,6,9,12,15] + }, + "outputs": { + "toptr": [60,63,66,69,72] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,2,3], + "outlength": 1, + "offsets": [0,3] + }, + "outputs": { + "toptr": [6] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,1,2,4,5,8,9,10,11,12,14,15,16,17,18,25,26,27,28,29], + "outlength": 6, + "offsets": [0,4,7,11,15,15,20] + }, + "outputs": { + "toptr": [7,22,47,66,0,135] + }, + "error": false + }, + { + "inputs": { + "fromptr": [2,2,4,5,5], + "outlength": 3, + "offsets": [0,3,3,5] + }, + "outputs": { + "toptr": [8,0,10] + }, + "error": false + }, + { + "inputs": { + "fromptr": [15,16,17,18,19,20,21,22,23,24,25,26,27,28,29], + "outlength": 3, + "offsets": [0,5,10,15] + }, + "outputs": { + "toptr": [85,110,135] + }, + "error": false + }, + { + "inputs": { + "fromptr": [4,1,0,1,4,5,1,0,1,3], + "outlength": 2, + "offsets": [0,5,10] + }, + "outputs": { + "toptr": [10,10] + }, + "error": false + }, + { + "inputs": { + "fromptr": [4,1,0,1,4,4,1,0,1,4], + "outlength": 2, + "offsets": [0,5,10] + }, + "outputs": { + "toptr": [10,10] + }, + "error": false + } + ] + }, + { + "name": "awkward_reduce_sum_int32_bool_64", + "status": true, + "tests": [ + { + "inputs": { + "fromptr": [], + "outlength": 0, + "offsets": [0] + }, + "outputs": { + "toptr": [] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0], + "outlength": 1, + "offsets": [0,1] + }, + "outputs": { + "toptr": [0] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,5,20,1,6,21,2,7,22,3,8,23,4,9,24], + "outlength": 10, + "offsets": [0,1,2,3,4,5,7,9,11,13,15] + }, + "outputs": { + "toptr": [0,1,1,1,1,2,2,2,2,2] + }, + "error": false + }, + { + "inputs": { + "fromptr": [2,3,5,7,11,13,17,19,23], + "outlength": 6, + "offsets": [0,3,3,5,6,8,9] + }, + "outputs": { + "toptr": [3,0,2,1,2,1] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,0,0,1,0,0], + "outlength": 4, + "offsets": [0,3,3,5,6] + }, + "outputs": { + "toptr": [1,0,1,0] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,1,2,3,4,5,6,7,8,9,20,21,22,23,24], + "outlength": 3, + "offsets": [0,5,10,15] + }, + "outputs": { + "toptr": [4,5,5] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29], + "outlength": 6, + "offsets": [0,5,10,15,20,25,30] + }, + "outputs": { + "toptr": [4,5,5,5,5,5] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,1,3,4,5,6], + "outlength": 4, + "offsets": [0,2,3,3,6] + }, + "outputs": { + "toptr": [1,1,0,3] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,5,10,15,25,1,11,16,26,2,12,17,27,8,18,28,4,9,14,29], + "outlength": 10, + "offsets": [0,3,5,7,8,11,13,15,17,19,20] + }, + "outputs": { + "toptr": [2,2,2,1,3,2,2,2,2,1] + }, + "error": false + }, + { + "inputs": { + "fromptr": [15,20,25,16,21,26,17,22,27,18,23,28,19,24,29], + "outlength": 15, + "offsets": [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] + }, + "outputs": { + "toptr": [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,15,5,10,25,1,16,11,26,2,17,12,27,18,8,28,4,9,14,29], + "outlength": 15, + "offsets": [0,2,4,6,7,8,9,9,9,10,11,13,15,17,18,20] + }, + "outputs": { + "toptr": [1,2,2,1,1,1,0,0,1,1,2,2,2,1,2] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,15,5,20,10,25,1,16,6,21,11,26,2,17,7,22,12,27,3,18,8,23,13,28,4,19,9,24,14,29], + "outlength": 15, + "offsets": [0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30] + }, + "outputs": { + "toptr": [1,2,2,2,2,2,2,2,2,2,2,2,2,2,2] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,5,10,15,20,25,1,6,11,16,21,26,2,7,12,17,22,27,3,8,13,18,23,28,4,9,14,19,24,29], + "outlength": 10, + "offsets": [0,3,6,9,12,15,18,21,24,27,30] + }, + "outputs": { + "toptr": [2,3,3,3,3,3,3,3,3,3] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,2,4,8,16,32,64,128,0,0,0,0], + "outlength": 3, + "offsets": [0,4,8,12] + }, + "outputs": { + "toptr": [4,4,0] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,2,3,4,5,1,2,3,4,5], + "outlength": 2, + "offsets": [0,5,10] + }, + "outputs": { + "toptr": [5,5] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,2,3,4,5,6], + "outlength": 1, + "offsets": [0,6] + }, + "outputs": { + "toptr": [6] + }, + "error": false + }, + { + "inputs": { + "fromptr": [2,7,13,17,23,3,11,19,5], + "outlength": 8, + "offsets": [0,3,5,6,6,6,6,8,9] + }, + "outputs": { + "toptr": [3,2,1,0,0,0,2,1] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,16,0,2,32,0,4,64,0,8,128,0], + "outlength": 4, + "offsets": [0,3,6,9,12] + }, + "outputs": { + "toptr": [2,2,2,2] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,1,2,3,4,5], + "outlength": 4, + "offsets": [0,3,3,5,6] + }, + "outputs": { + "toptr": [2,0,2,1] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,4,1,3,5,6], + "outlength": 4, + "offsets": [0,2,5,5,6] + }, + "outputs": { + "toptr": [1,3,0,1] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,4,9,16,25,1,4,9,16,25], + "outlength": 2, + "offsets": [0,5,10] + }, + "outputs": { + "toptr": [5,5] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,4,9,16,26,1,4,10,16,24], + "outlength": 2, + "offsets": [0,5,10] + }, + "outputs": { + "toptr": [5,5] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,5,20,1,6,21,2,7,22,3,8,23,4,9,24], + "outlength": 10, + "offsets": [0,2,4,6,8,10,11,12,13,14,15] + }, + "outputs": { + "toptr": [1,2,2,2,2,1,1,1,1,1] + }, + "error": false + }, + { + "inputs": { + "fromptr": [15,20,25,16,21,26,17,22,27,18,23,28,19,24,29], + "outlength": 5, + "offsets": [0,3,6,9,12,15] + }, + "outputs": { + "toptr": [3,3,3,3,3] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,2,3], + "outlength": 1, + "offsets": [0,3] + }, + "outputs": { + "toptr": [3] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,1,2,4,5,8,9,10,11,12,14,15,16,17,18,25,26,27,28,29], + "outlength": 6, + "offsets": [0,4,7,11,15,15,20] + }, + "outputs": { + "toptr": [3,3,4,4,0,5] + }, + "error": false + }, + { + "inputs": { + "fromptr": [2,2,4,5,5], + "outlength": 3, + "offsets": [0,3,3,5] + }, + "outputs": { + "toptr": [3,0,2] + }, + "error": false + }, + { + "inputs": { + "fromptr": [15,16,17,18,19,20,21,22,23,24,25,26,27,28,29], + "outlength": 3, + "offsets": [0,5,10,15] + }, + "outputs": { + "toptr": [5,5,5] + }, + "error": false + }, + { + "inputs": { + "fromptr": [4,1,0,1,4,5,1,0,1,3], + "outlength": 2, + "offsets": [0,5,10] + }, + "outputs": { + "toptr": [4,4] + }, + "error": false + }, + { + "inputs": { + "fromptr": [4,1,0,1,4,4,1,0,1,4], + "outlength": 2, + "offsets": [0,5,10] + }, + "outputs": { + "toptr": [4,4] + }, + "error": false + } + ] + }, + { + "name": "awkward_reduce_sum_int64_bool_64", + "status": true, + "tests": [ + { + "inputs": { + "fromptr": [], + "outlength": 0, + "offsets": [0] + }, + "outputs": { + "toptr": [] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0], + "outlength": 1, + "offsets": [0,1] + }, + "outputs": { + "toptr": [0] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,5,20,1,6,21,2,7,22,3,8,23,4,9,24], + "outlength": 10, + "offsets": [0,1,2,3,4,5,7,9,11,13,15] + }, + "outputs": { + "toptr": [0,1,1,1,1,2,2,2,2,2] + }, + "error": false + }, + { + "inputs": { + "fromptr": [2,3,5,7,11,13,17,19,23], + "outlength": 6, + "offsets": [0,3,3,5,6,8,9] + }, + "outputs": { + "toptr": [3,0,2,1,2,1] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,0,0,1,0,0], + "outlength": 4, + "offsets": [0,3,3,5,6] + }, + "outputs": { + "toptr": [1,0,1,0] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,1,2,3,4,5,6,7,8,9,20,21,22,23,24], + "outlength": 3, + "offsets": [0,5,10,15] + }, + "outputs": { + "toptr": [4,5,5] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29], + "outlength": 6, + "offsets": [0,5,10,15,20,25,30] + }, + "outputs": { + "toptr": [4,5,5,5,5,5] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,1,3,4,5,6], + "outlength": 4, + "offsets": [0,2,3,3,6] + }, + "outputs": { + "toptr": [1,1,0,3] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,5,10,15,25,1,11,16,26,2,12,17,27,8,18,28,4,9,14,29], + "outlength": 10, + "offsets": [0,3,5,7,8,11,13,15,17,19,20] + }, + "outputs": { + "toptr": [2,2,2,1,3,2,2,2,2,1] + }, + "error": false + }, + { + "inputs": { + "fromptr": [15,20,25,16,21,26,17,22,27,18,23,28,19,24,29], + "outlength": 15, + "offsets": [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] + }, + "outputs": { + "toptr": [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,15,5,10,25,1,16,11,26,2,17,12,27,18,8,28,4,9,14,29], + "outlength": 15, + "offsets": [0,2,4,6,7,8,9,9,9,10,11,13,15,17,18,20] + }, + "outputs": { + "toptr": [1,2,2,1,1,1,0,0,1,1,2,2,2,1,2] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,15,5,20,10,25,1,16,6,21,11,26,2,17,7,22,12,27,3,18,8,23,13,28,4,19,9,24,14,29], + "outlength": 15, + "offsets": [0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30] + }, + "outputs": { + "toptr": [1,2,2,2,2,2,2,2,2,2,2,2,2,2,2] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,5,10,15,20,25,1,6,11,16,21,26,2,7,12,17,22,27,3,8,13,18,23,28,4,9,14,19,24,29], + "outlength": 10, + "offsets": [0,3,6,9,12,15,18,21,24,27,30] + }, + "outputs": { + "toptr": [2,3,3,3,3,3,3,3,3,3] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,2,4,8,16,32,64,128,0,0,0,0], + "outlength": 3, + "offsets": [0,4,8,12] + }, + "outputs": { + "toptr": [4,4,0] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,2,3,4,5,1,2,3,4,5], + "outlength": 2, + "offsets": [0,5,10] + }, + "outputs": { + "toptr": [5,5] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,2,3,4,5,6], + "outlength": 1, + "offsets": [0,6] + }, + "outputs": { + "toptr": [6] + }, + "error": false + }, + { + "inputs": { + "fromptr": [2,7,13,17,23,3,11,19,5], + "outlength": 8, + "offsets": [0,3,5,6,6,6,6,8,9] + }, + "outputs": { + "toptr": [3,2,1,0,0,0,2,1] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,16,0,2,32,0,4,64,0,8,128,0], + "outlength": 4, + "offsets": [0,3,6,9,12] + }, + "outputs": { + "toptr": [2,2,2,2] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,1,2,3,4,5], + "outlength": 4, + "offsets": [0,3,3,5,6] + }, + "outputs": { + "toptr": [2,0,2,1] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,4,1,3,5,6], + "outlength": 4, + "offsets": [0,2,5,5,6] + }, + "outputs": { + "toptr": [1,3,0,1] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,4,9,16,25,1,4,9,16,25], + "outlength": 2, + "offsets": [0,5,10] + }, + "outputs": { + "toptr": [5,5] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,4,9,16,26,1,4,10,16,24], + "outlength": 2, + "offsets": [0,5,10] + }, + "outputs": { + "toptr": [5,5] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,5,20,1,6,21,2,7,22,3,8,23,4,9,24], + "outlength": 10, + "offsets": [0,2,4,6,8,10,11,12,13,14,15] + }, + "outputs": { + "toptr": [1,2,2,2,2,1,1,1,1,1] + }, + "error": false + }, + { + "inputs": { + "fromptr": [15,20,25,16,21,26,17,22,27,18,23,28,19,24,29], + "outlength": 5, + "offsets": [0,3,6,9,12,15] + }, + "outputs": { + "toptr": [3,3,3,3,3] + }, + "error": false + }, + { + "inputs": { + "fromptr": [1,2,3], + "outlength": 1, + "offsets": [0,3] + }, + "outputs": { + "toptr": [3] + }, + "error": false + }, + { + "inputs": { + "fromptr": [0,1,2,4,5,8,9,10,11,12,14,15,16,17,18,25,26,27,28,29], + "outlength": 6, + "offsets": [0,4,7,11,15,15,20] + }, + "outputs": { + "toptr": [3,3,4,4,0,5] + }, + "error": false + }, + { + "inputs": { + "fromptr": [2,2,4,5,5], + "outlength": 3, + "offsets": [0,3,3,5] + }, + "outputs": { + "toptr": [3,0,2] + }, + "error": false + }, + { + "inputs": { + "fromptr": [15,16,17,18,19,20,21,22,23,24,25,26,27,28,29], + "outlength": 3, + "offsets": [0,5,10,15] + }, + "outputs": { + "toptr": [5,5,5] + }, + "error": false + }, + { + "inputs": { + "fromptr": [4,1,0,1,4,5,1,0,1,3], + "outlength": 2, + "offsets": [0,5,10] + }, + "outputs": { + "toptr": [4,4] + }, + "error": false + }, + { + "inputs": { + "fromptr": [4,1,0,1,4,4,1,0,1,4], + "outlength": 2, + "offsets": [0,5,10] + }, + "outputs": { + "toptr": [4,4] + }, + "error": false + } + ] }, - "unit-tests": [ - { - "name": "awkward_missing_repeat", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "index": [], - "indexlength": 0, - "regularsize": 0, - "repetitions": 0 - }, - "outputs": { - "outindex": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0], - "indexlength": 1, - "regularsize": 1, - "repetitions": 1 - }, - "outputs": { - "outindex": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1], - "indexlength": 2, - "regularsize": 1, - "repetitions": 1 - }, - "outputs": { - "outindex": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 1], - "indexlength": 3, - "regularsize": 1, - "repetitions": 1 - }, - "outputs": { - "outindex": [0, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 1], - "indexlength": 3, - "regularsize": 2, - "repetitions": 1 - }, - "outputs": { - "outindex": [0, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 1, 1], - "indexlength": 4, - "regularsize": 1, - "repetitions": 1 - }, - "outputs": { - "outindex": [0, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 1, 1], - "indexlength": 4, - "regularsize": 2, - "repetitions": 1 - }, - "outputs": { - "outindex": [0, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 1, 1, 1], - "indexlength": 5, - "regularsize": 1, - "repetitions": 1 - }, - "outputs": { - "outindex": [0, 1, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 1, 1, 1], - "indexlength": 5, - "regularsize": 2, - "repetitions": 1 - }, - "outputs": { - "outindex": [0, 1, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 1, 1, 2], - "indexlength": 5, - "regularsize": 3, - "repetitions": 1 - }, - "outputs": { - "outindex": [0, 1, 1, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 1, 1, 2, 3], - "indexlength": 6, - "regularsize": 4, - "repetitions": 1 - }, - "outputs": { - "outindex": [0, 1, 1, 1, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 1, 2], - "indexlength": 4, - "regularsize": 3, - "repetitions": 1 - }, - "outputs": { - "outindex": [0, 1, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 1, 2, 1], - "indexlength": 5, - "regularsize": 3, - "repetitions": 1 - }, - "outputs": { - "outindex": [0, 1, 1, 2, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 1, 2, 3], - "indexlength": 5, - "regularsize": 4, - "repetitions": 1 - }, - "outputs": { - "outindex": [0, 1, 1, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 1, 2, 3, 4, 5], - "indexlength": 7, - "regularsize": 6, - "repetitions": 1 - }, - "outputs": { - "outindex": [0, 1, 1, 2, 3, 4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 2, 1], - "indexlength": 4, - "regularsize": 3, - "repetitions": 1 - }, - "outputs": { - "outindex": [0, 1, 2, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 2, 1, 1], - "indexlength": 5, - "regularsize": 3, - "repetitions": 1 - }, - "outputs": { - "outindex": [0, 1, 2, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 2, 1, 3], - "indexlength": 5, - "regularsize": 4, - "repetitions": 1 - }, - "outputs": { - "outindex": [0, 1, 2, 1, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 2, 3, 1], - "indexlength": 5, - "regularsize": 4, - "repetitions": 1 - }, - "outputs": { - "outindex": [0, 1, 2, 3, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 2, 3, 1, 4, 5], - "indexlength": 7, - "regularsize": 6, - "repetitions": 1 - }, - "outputs": { - "outindex": [0, 1, 2, 3, 1, 4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 2, 3, 4, 5], - "indexlength": 6, - "regularsize": 6, - "repetitions": 1 - }, - "outputs": { - "outindex": [0, 1, 2, 3, 4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 0], - "indexlength": 2, - "regularsize": 1, - "repetitions": 1 - }, - "outputs": { - "outindex": [1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 0, 1], - "indexlength": 3, - "regularsize": 1, - "repetitions": 1 - }, - "outputs": { - "outindex": [1, 0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 0, 1], - "indexlength": 3, - "regularsize": 2, - "repetitions": 1 - }, - "outputs": { - "outindex": [1, 0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 0, 1, 1], - "indexlength": 4, - "regularsize": 1, - "repetitions": 1 - }, - "outputs": { - "outindex": [1, 0, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 0, 1, 1], - "indexlength": 4, - "regularsize": 2, - "repetitions": 1 - }, - "outputs": { - "outindex": [1, 0, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 0, 1, 1, 1], - "indexlength": 5, - "regularsize": 1, - "repetitions": 1 - }, - "outputs": { - "outindex": [1, 0, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 0, 1, 1, 1], - "indexlength": 5, - "regularsize": 2, - "repetitions": 1 - }, - "outputs": { - "outindex": [1, 0, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 0, 1, 1, 2], - "indexlength": 5, - "regularsize": 3, - "repetitions": 1 - }, - "outputs": { - "outindex": [1, 0, 1, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 0, 1, 2], - "indexlength": 4, - "regularsize": 3, - "repetitions": 1 - }, - "outputs": { - "outindex": [1, 0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 0, 1, 2, 1], - "indexlength": 5, - "regularsize": 3, - "repetitions": 1 - }, - "outputs": { - "outindex": [1, 0, 1, 2, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 0, 1, 2, 3], - "indexlength": 5, - "regularsize": 4, - "repetitions": 1 - }, - "outputs": { - "outindex": [1, 0, 1, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 1, 0], - "indexlength": 3, - "regularsize": 1, - "repetitions": 1 - }, - "outputs": { - "outindex": [1, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 1, 0, 1], - "indexlength": 4, - "regularsize": 1, - "repetitions": 1 - }, - "outputs": { - "outindex": [1, 1, 0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 1, 0, 1], - "indexlength": 4, - "regularsize": 2, - "repetitions": 1 - }, - "outputs": { - "outindex": [1, 1, 0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 1, 0, 1, 1], - "indexlength": 5, - "regularsize": 1, - "repetitions": 1 - }, - "outputs": { - "outindex": [1, 1, 0, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 1, 0, 1, 1], - "indexlength": 5, - "regularsize": 2, - "repetitions": 1 - }, - "outputs": { - "outindex": [1, 1, 0, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 1, 0, 1, 2], - "indexlength": 5, - "regularsize": 3, - "repetitions": 1 - }, - "outputs": { - "outindex": [1, 1, 0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 1, 1, 0], - "indexlength": 4, - "regularsize": 1, - "repetitions": 1 - }, - "outputs": { - "outindex": [1, 1, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 1, 1, 0, 1], - "indexlength": 5, - "regularsize": 1, - "repetitions": 1 - }, - "outputs": { - "outindex": [1, 1, 1, 0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 1, 1, 0, 1], - "indexlength": 5, - "regularsize": 2, - "repetitions": 1 - }, - "outputs": { - "outindex": [1, 1, 1, 0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1], - "indexlength": 1, - "regularsize": 0, - "repetitions": 1 - }, - "outputs": { - "outindex": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 1, 1, 1, 0], - "indexlength": 5, - "regularsize": 1, - "repetitions": 1 - }, - "outputs": { - "outindex": [1, 1, 1, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 1, 1, 1, 1], - "indexlength": 5, - "regularsize": 0, - "repetitions": 1 - }, - "outputs": { - "outindex": [1, 1, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 1, 1, 1], - "indexlength": 4, - "regularsize": 0, - "repetitions": 1 - }, - "outputs": { - "outindex": [1, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 1, 1], - "indexlength": 3, - "regularsize": 0, - "repetitions": 1 - }, - "outputs": { - "outindex": [1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 1], - "indexlength": 2, - "regularsize": 0, - "repetitions": 1 - }, - "outputs": { - "outindex": [1, 1] - } - } - ] + { + "name": "awkward_reduce_prod", + "status": true, + "tests": [ + { + "inputs": { + "fromptr": [1,0,0,1,0,0], + "outlength": 4, + "offsets": [0,3,3,5,6] + }, + "outputs": { + "toptr": [0,1,0,0] + }, + "error": false }, { - "name": "awkward_index_rpad_and_clip_axis0", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "length": 0, - "target": 0 - }, - "outputs": { - "toindex": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 2, - "target": 2 - }, - "outputs": { - "toindex": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "target": 2 - }, - "outputs": { - "toindex": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "target": 3 - }, - "outputs": { - "toindex": [0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "target": 4 - }, - "outputs": { - "toindex": [0, 1, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "target": 5 - }, - "outputs": { - "toindex": [0, 1, 2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 6, - "target": 6 - }, - "outputs": { - "toindex": [0, 1, 2, 3, 4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "target": 3 - }, - "outputs": { - "toindex": [0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 6, - "target": 3 - }, - "outputs": { - "toindex": [0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "target": 2 - }, - "outputs": { - "toindex": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "target": 1 - }, - "outputs": { - "toindex": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "target": 1 - }, - "outputs": { - "toindex": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 6, - "target": 1 - }, - "outputs": { - "toindex": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "target": 5 - }, - "outputs": { - "toindex": [0, 1, 2, -1, -1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 0, - "target": 3 - }, - "outputs": { - "toindex": [-1, -1, -1] - } - } - ] + "inputs": { + "fromptr": [], + "outlength": 0, + "offsets": [0] + }, + "outputs": { + "toptr": [] + }, + "error": false }, { - "name": "awkward_Index_nones_as_index", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "length": 0, - "toindex": [] - }, - "outputs": { - "toindex": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "toindex": [0] - }, - "outputs": { - "toindex": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "toindex": [-1] - }, - "outputs": { - "toindex": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "toindex": [-1, -1, -1] - }, - "outputs": { - "toindex": [0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "toindex": [0, 1, 2, 3, 4] - }, - "outputs": { - "toindex": [0, 1, 2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "toindex": [0, -1, -1, 1, -1] - }, - "outputs": { - "toindex": [0, 2, 3, 1, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 7, - "toindex": [-1, 0, -1, -1, 1, -1, 2] - }, - "outputs": { - "toindex": [3, 0, 4, 5, 1, 6, 2] - } - } - ] + "inputs": { + "fromptr": [0,1,2,3,4,5], + "outlength": 4, + "offsets": [0,3,3,5,6] + }, + "outputs": { + "toptr": [0,1,12,5] + }, + "error": false }, { - "name": "awkward_BitMaskedArray_to_ByteMaskedArray", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "bitmasklength": 0, - "frombitmask": [], - "lsb_order": false, - "validwhen": false - }, - "outputs": { - "tobytemask": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "bitmasklength": 0, - "frombitmask": [], - "lsb_order": true, - "validwhen": false - }, - "outputs": { - "tobytemask": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "bitmasklength": 1, - "frombitmask": [66], - "lsb_order": true, - "validwhen": false - }, - "outputs": { - "tobytemask": [0, 1, 0, 0, 0, 0, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "bitmasklength": 2, - "frombitmask": [58, 59], - "lsb_order": false, - "validwhen": false - }, - "outputs": { - "tobytemask": [0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "bitmasklength": 1, - "frombitmask": [27], - "lsb_order": false, - "validwhen": false - }, - "outputs": { - "tobytemask": [0, 0, 0, 1, 1, 0, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "bitmasklength": 3, - "frombitmask": [1, 1, 1], - "lsb_order": false, - "validwhen": false - }, - "outputs": { - "tobytemask": [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "bitmasklength": 3, - "frombitmask": [1, 1, 1], - "lsb_order": false, - "validwhen": true - }, - "outputs": { - "tobytemask": [1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "bitmasklength": 4, - "frombitmask": [0, 0, 0, 0], - "lsb_order": false, - "validwhen": false - }, - "outputs": { - "tobytemask": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "bitmasklength": 4, - "frombitmask": [0, 0, 0, 0], - "lsb_order": true, - "validwhen": false - }, - "outputs": { - "tobytemask": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "bitmasklength": 2, - "frombitmask": [58, 59], - "lsb_order": true, - "validwhen": false - }, - "outputs": { - "tobytemask": [0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0] - } - } - ] + "inputs": { + "fromptr": [2,53,31,101,3,59,37,103,5,61,41,107,7,67,43,109,11,71,47,113], + "outlength": 15, + "offsets": [0,2,4,6,8,10,10,10,10,10,10,12,14,16,18,20] + }, + "outputs": { + "toptr": [106,3131,177,3811,305,1,1,1,1,1,4387,469,4687,781,5311] + }, + "error": false }, { - "name": "awkward_ByteMaskedArray_getitem_nextcarry", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "length": 0, - "mask": [], - "validwhen": false - }, - "outputs": { - "tocarry": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 2, - "mask": [0, 0], - "validwhen": false - }, - "outputs": { - "tocarry": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "mask": [0, 0, 1, 1, 0], - "validwhen": false - }, - "outputs": { - "tocarry": [0, 1, 4] - } - } - ] + "inputs": { + "fromptr": [2,53,13,73,31,101,3,59,17,79,37,103,5,61,19,83,41,107,7,67,23,89,43,109,11,71,47,113], + "outlength": 15, + "offsets": [0,2,4,6,8,10,12,14,16,18,18,20,22,24,26,28] + }, + "outputs": { + "toptr": [106,949,3131,177,1343,3811,305,1577,4387,1,469,2047,4687,781,5311] + }, + "error": false }, { - "name": "awkward_ByteMaskedArray_getitem_nextcarry_outindex", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "length": 0, - "mask": [], - "validwhen": true - }, - "outputs": { - "outindex": [], - "tocarry": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "mask": [0], - "validwhen": true - }, - "outputs": { - "outindex": [-1], - "tocarry": [123] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 4, - "mask": [0, 0, 0, 0], - "validwhen": true - }, - "outputs": { - "outindex": [-1, -1, -1, -1], - "tocarry": [123, 123, 123, 123] - } - } - ] + "inputs": { + "fromptr": [2,53,13,73,31,101,3,59,17,79,37,103,5,61,19,83,41,107,7,67,23,89,43,11,71,29,97,47], + "outlength": 15, + "offsets": [0,2,4,6,8,10,12,14,16,18,20,22,24,26,27,28] + }, + "outputs": { + "toptr": [106,949,3131,177,1343,3811,305,1577,4387,469,2047,473,2059,97,47] + }, + "error": false }, { - "name": "awkward_ByteMaskedArray_numnull", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "length": 0, - "mask": [], - "validwhen": false - }, - "outputs": { - "numnull": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 4, - "mask": [0, 0, 0, 0], - "validwhen": false - }, - "outputs": { - "numnull": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 2, - "mask": [0, 0], - "validwhen": false - }, - "outputs": { - "numnull": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "mask": [0], - "validwhen": false - }, - "outputs": { - "numnull": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 30, - "mask": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], - "validwhen": false - }, - "outputs": { - "numnull": [10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 30, - "mask": [0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0], - "validwhen": false - }, - "outputs": { - "numnull": [10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 30, - "mask": [0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0], - "validwhen": false - }, - "outputs": { - "numnull": [10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 4, - "mask": [0, 1, 0, 0], - "validwhen": false - }, - "outputs": { - "numnull": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "mask": [0], - "validwhen": true - }, - "outputs": { - "numnull": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "mask": [0, 1, 1], - "validwhen": true - }, - "outputs": { - "numnull": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 6, - "mask": [0, 0, 1, 1, 0, 0], - "validwhen": false - }, - "outputs": { - "numnull": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "mask": [0, 0, 1, 1, 0], - "validwhen": false - }, - "outputs": { - "numnull": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 9, - "mask": [0, 1, 0, 0, 0, 0, 1, 0, 0], - "validwhen": false - }, - "outputs": { - "numnull": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 6, - "mask": [0, 1, 0, 0, 1, 0], - "validwhen": false - }, - "outputs": { - "numnull": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "mask": [0, 1, 0], - "validwhen": true - }, - "outputs": { - "numnull": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "mask": [1, 1, 0], - "validwhen": false - }, - "outputs": { - "numnull": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 8, - "mask": [0, 1, 0, 0, 1, 0, 1, 0], - "validwhen": false - }, - "outputs": { - "numnull": [3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 10, - "mask": [0, 1, 1, 0, 1, 0, 0, 1, 1, 0], - "validwhen": true - }, - "outputs": { - "numnull": [5] - } - } - ] + "inputs": { + "fromptr": [2,53,13,73,31,101,3,59,17,79,37,103,5,61,19,83,41,107,7,67,23,89,43,109,11,71,29,97], + "outlength": 14, + "offsets": [0,2,4,6,8,10,12,14,16,18,20,22,24,26,28] + }, + "outputs": { + "toptr": [106,949,3131,177,1343,3811,305,1577,4387,469,2047,4687,781,2813] + }, + "error": false }, { - "name": "awkward_ByteMaskedArray_toIndexedOptionArray", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "length": 0, - "mask": [], - "validwhen": false - }, - "outputs": { - "toindex": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 2, - "mask": [0, 0], - "validwhen": false - }, - "outputs": { - "toindex": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 4, - "mask": [0, 0, 0, 0], - "validwhen": false - }, - "outputs": { - "toindex": [0, 1, 2, 3] - } - } - ] + "inputs": { + "fromptr": [2,53,13,73,31,101,3,59,17,79,37,103,5,61,19,83,41,107,7,67,23,89,43,109,11,71,29,97,47], + "outlength": 15, + "offsets": [0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,29] + }, + "outputs": { + "toptr": [106,949,3131,177,1343,3811,305,1577,4387,469,2047,4687,781,2813,47] + }, + "error": false }, { - "name": "awkward_IndexedArray_flatten_nextcarry", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromindex": [], - "lencontent": 0, - "lenindex": 0 - }, - "outputs": { - "tocarry": [] - } - }, - { - "error": true, - "message": "index out of range", - "inputs": { - "fromindex": [0, 1], - "lencontent": 0, - "lenindex": 2 - }, - "outputs": { - "tocarry": [] - } - }, - { - "error": true, - "message": "index out of range", - "inputs": { - "fromindex": [0, 2], - "lencontent": 2, - "lenindex": 2 - }, - "outputs": { - "tocarry": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 1], - "lencontent": 2, - "lenindex": 2 - }, - "outputs": { - "tocarry": [0, 1] - } - } - ] + "inputs": { + "fromptr": [2,53,13,73,31,101,3,59,17,79,37,103,5,61,19,83,41,107,7,67,23,89,43,109,11,71,29,97,47,113], + "outlength": 15, + "offsets": [0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30] + }, + "outputs": { + "toptr": [106,949,3131,177,1343,3811,305,1577,4387,469,2047,4687,781,2813,5311] + }, + "error": false }, { - "name": "awkward_IndexedArray_getitem_nextcarry", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromindex": [], - "lencontent": 0, - "lenindex": 0 - }, - "outputs": { - "tocarry": [] - } - }, - { - "error": true, - "message": "index out of range", - "inputs": { - "fromindex": [0, 1], - "lencontent": 0, - "lenindex": 2 - }, - "outputs": { - "tocarry": [] - } - }, - { - "error": true, - "message": "index out of range", - "inputs": { - "fromindex": [0, 0, 0, 1, 0, 2, 0], - "lencontent": 1, - "lenindex": 7 - }, - "outputs": { - "tocarry": [0, 0, 0, 0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 0, 0, 0, 0, 0, 0], - "lencontent": 1, - "lenindex": 7 - }, - "outputs": { - "tocarry": [0, 0, 0, 0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 0, 0, 0, 0, 0], - "lencontent": 1, - "lenindex": 6 - }, - "outputs": { - "tocarry": [0, 0, 0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 0, 0, 0, 0], - "lencontent": 1, - "lenindex": 5 - }, - "outputs": { - "tocarry": [0, 0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 0, 0], - "lencontent": 1, - "lenindex": 3 - }, - "outputs": { - "tocarry": [0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 0], - "lencontent": 1, - "lenindex": 2 - }, - "outputs": { - "tocarry": [0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 0, 0, 1, 1, 1, 2, 2, 2], - "lencontent": 3, - "lenindex": 9 - }, - "outputs": { - "tocarry": [0, 0, 0, 1, 1, 1, 2, 2, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 0, 0, 2, 3, 3, 4], - "lencontent": 5, - "lenindex": 7 - }, - "outputs": { - "tocarry": [0, 0, 0, 2, 3, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 1], - "lencontent": 2, - "lenindex": 2 - }, - "outputs": { - "tocarry": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 1, 2], - "lencontent": 3, - "lenindex": 3 - }, - "outputs": { - "tocarry": [0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 1, 2, 3], - "lencontent": 4, - "lenindex": 4 - }, - "outputs": { - "tocarry": [0, 1, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 1, 2, 3, 4], - "lencontent": 5, - "lenindex": 5 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [1, 1, 1], - "lencontent": 6, - "lenindex": 3 - }, - "outputs": { - "tocarry": [1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [1], - "lencontent": 5, - "lenindex": 1 - }, - "outputs": { - "tocarry": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [1], - "lencontent": 6, - "lenindex": 1 - }, - "outputs": { - "tocarry": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [1, 2], - "lencontent": 3, - "lenindex": 2 - }, - "outputs": { - "tocarry": [1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [1, 3], - "lencontent": 6, - "lenindex": 2 - }, - "outputs": { - "tocarry": [1, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [2, 1, 0, 3, 3, 4], - "lencontent": 5, - "lenindex": 6 - }, - "outputs": { - "tocarry": [2, 1, 0, 3, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [2, 2, 1, 0], - "lencontent": 3, - "lenindex": 4 - }, - "outputs": { - "tocarry": [2, 2, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [2, 2, 1, 0, 3], - "lencontent": 4, - "lenindex": 5 - }, - "outputs": { - "tocarry": [2, 2, 1, 0, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [2], - "lencontent": 3, - "lenindex": 1 - }, - "outputs": { - "tocarry": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [2], - "lencontent": 5, - "lenindex": 1 - }, - "outputs": { - "tocarry": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [2, 4, 4, 0, 8], - "lencontent": 10, - "lenindex": 5 - }, - "outputs": { - "tocarry": [2, 4, 4, 0, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [3, 2, 1, 0], - "lencontent": 4, - "lenindex": 4 - }, - "outputs": { - "tocarry": [3, 2, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [4, 3, 2, 1, 0], - "lencontent": 5, - "lenindex": 5 - }, - "outputs": { - "tocarry": [4, 3, 2, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [4], - "lencontent": 5, - "lenindex": 1 - }, - "outputs": { - "tocarry": [4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [6, 4, 4, 8, 0], - "lencontent": 10, - "lenindex": 5 - }, - "outputs": { - "tocarry": [6, 4, 4, 8, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [6, 5, 4, 3, 2, 1, 0], - "lencontent": 7, - "lenindex": 7 - }, - "outputs": { - "tocarry": [6, 5, 4, 3, 2, 1, 0] - } - } - ] + "inputs": { + "fromptr": [2,53,13,73,31,101,3,59,17,79,37,103,5,61,19,83,41,107,7,67,23,89,43,109,11,71,29,47], + "outlength": 15, + "offsets": [0,2,4,6,8,10,12,14,16,18,19,21,23,25,27,28] + }, + "outputs": { + "toptr": [106,949,3131,177,1343,3811,305,1577,4387,7,1541,3827,1199,2059,47] + }, + "error": false }, { - "name": "awkward_IndexedArray_getitem_nextcarry_outindex", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromindex": [], - "lencontent": 0, - "lenindex": 0 - }, - "outputs": { - "tocarry": [], - "toindex": [] - } - }, - { - "error": true, - "message": "index out of range", - "inputs": { - "fromindex": [0, 1, 2, 4], - "lencontent": 0, - "lenindex": 4 - }, - "outputs": { - "tocarry": [], - "toindex": [] - } - }, - { - "error": true, - "message": "index out of range", - "inputs": { - "fromindex": [0, 1, 2, 4], - "lencontent": 4, - "lenindex": 4 - }, - "outputs": { - "tocarry": [0, 1, 2, 3], - "toindex": [0, 1, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 1, 2, 3], - "lencontent": 4, - "lenindex": 4 - }, - "outputs": { - "tocarry": [0, 1, 2, 3], - "toindex": [0, 1, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [3, 2, 1, 0], - "lencontent": 4, - "lenindex": 4 - }, - "outputs": { - "tocarry": [3, 2, 1, 0], - "toindex": [0, 1, 2, 3] - } - } - ] + "inputs": { + "fromptr": [0], + "outlength": 3, + "offsets": [0,0,0,1] + }, + "outputs": { + "toptr": [1,1,0] + }, + "error": false }, { - "name": "awkward_IndexedArray_numnull", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromindex": [], - "lenindex": 0 - }, - "outputs": { - "numnull": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [1], - "lenindex": 1 - }, - "outputs": { - "numnull": [0] - } - }, - { - "error": false, - "inputs": { - "fromindex": [-1], - "lenindex": 1 - }, - "outputs": { - "numnull": [1] - } - }, - { - "error": false, - "inputs": { - "fromindex": [-1, -1, -1, -1], - "lenindex": 4 - }, - "outputs": { - "numnull": [4] - } - }, - { - "error": false, - "inputs": { - "fromindex": [0, -1, 2, -1, -1, -1, -1], - "lenindex": 7 - }, - "outputs": { - "numnull": [5] - } - }, - { - "error": false, - "inputs": { - "fromindex": [0, 1], - "lenindex": 2 - }, - "outputs": { - "numnull": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 1, 2, 3], - "lenindex": 4 - }, - "outputs": { - "numnull": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 1, 2, 3, 4, 5, 6], - "lenindex": 7 - }, - "outputs": { - "numnull": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [1, 2], - "lenindex": 2 - }, - "outputs": { - "numnull": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [1, 2, 3], - "lenindex": 3 - }, - "outputs": { - "numnull": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [1, 2, 3, 4], - "lenindex": 4 - }, - "outputs": { - "numnull": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [2, 3], - "lenindex": 2 - }, - "outputs": { - "numnull": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [2, 3, 4], - "lenindex": 3 - }, - "outputs": { - "numnull": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [3, 2, 1, 0], - "lenindex": 4 - }, - "outputs": { - "numnull": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [3, 4], - "lenindex": 2 - }, - "outputs": { - "numnull": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [4, 3, 2, 1, 0], - "lenindex": 5 - }, - "outputs": { - "numnull": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [5, 2, 4, 1, 3, 0], - "lenindex": 6 - }, - "outputs": { - "numnull": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [5, 4, 3, 2, 1, 0], - "lenindex": 6 - }, - "outputs": { - "numnull": [0] - } - } - ] + "inputs": { + "fromptr": [101,103,107,109,113,53,59,61,67,71,31,37,41,43,47,2,3,5,7,11], + "outlength": 6, + "offsets": [0,5,5,10,15,15,20] + }, + "outputs": { + "toptr": [13710311357,1,907383479,95041567,1,2310] + }, + "error": false }, { - "name": "awkward_IndexedArray_numnull_parents", - "status": true, - "tests": [ - { - "error": false, - "inputs": { - "fromindex": [], - "lenindex": 0 - }, - "outputs": { - "numnull": [], - "tolength": [0] - } - }, - { - "error": false, - "inputs": { - "fromindex": [1], - "lenindex": 1 - }, - "outputs": { - "numnull": [0], - "tolength": [0] - } - }, - { - "error": false, - "inputs": { - "fromindex": [-1], - "lenindex": 1 - }, - "outputs": { - "numnull": [1], - "tolength": [1] - } - }, - { - "error": false, - "inputs": { - "fromindex": [-1, -1, -1, -1], - "lenindex": 4 - }, - "outputs": { - "numnull": [1, 1, 1, 1], - "tolength": [4] - } - }, - { - "error": false, - "inputs": { - "fromindex": [0, -1, 2, -1, -1, -1, -1], - "lenindex": 7 - }, - "outputs": { - "numnull": [0, 1, 0, 1, 1, 1, 1], - "tolength": [5] - } - }, - { - "error": false, - "inputs": { - "fromindex": [0, 1], - "lenindex": 2 - }, - "outputs": { - "numnull": [0, 0], - "tolength": [0] - } - }, - { - "error": false, - "inputs": { - "fromindex": [0, 1, 2, 3], - "lenindex": 4 - }, - "outputs": { - "numnull": [0, 0, 0, 0], - "tolength": [0] - } - }, - { - "error": false, - "inputs": { - "fromindex": [0, 1, -2, 3, -4, 5, -6], - "lenindex": 7 - }, - "outputs": { - "numnull": [0, 0, 1, 0, 1, 0, 1], - "tolength": [3] - } - } - ] + "inputs": { + "fromptr": [101,103,107,109,113,73,79,83,89,97,53,59,61,67,71,31,37,41,43,47,13,17,19,23,29,2,3,5,7,11], + "outlength": 6, + "offsets": [0,5,10,15,20,25,30] + }, + "outputs": { + "toptr": [13710311357,4132280413,907383479,95041567,2800733,2310] + }, + "error": false }, { - "name": "awkward_IndexedArray_numnull_unique_64", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "lenindex": 4 - }, - "outputs": { - "toindex": [0, 1, 2, 3, -1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenindex": 2 - }, - "outputs": { - "toindex": [0, 1, -1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenindex": 0 - }, - "outputs": { - "toindex": [-1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenindex": 3 - }, - "outputs": { - "toindex": [0, 1, 2, -1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenindex": 1 - }, - "outputs": { - "toindex": [0, -1] - } - } - ] + "inputs": { + "fromptr": [101,103,107,109,113,53,59,61,67,71,31,37,41,43,47,2,3,5,7,11], + "outlength": 4, + "offsets": [0,5,10,15,20] + }, + "outputs": { + "toptr": [13710311357,907383479,95041567,2310] + }, + "error": false }, { - "name": "awkward_IndexedArray_overlay_mask", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromindex": [], - "length": 0, - "mask": [] - }, - "outputs": { - "toindex": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [5, 4, 3, 2, 1, 0], - "length": 6, - "mask": [0, 0, 0, 0, 0, 0] - }, - "outputs": { - "toindex": [5, 4, 3, 2, 1, 0] - } - } - ] + "inputs": { + "fromptr": [2,7,17,29,3,11,19,31,5,13,23,37], + "outlength": 6, + "offsets": [0,2,4,6,8,10,12] + }, + "outputs": { + "toptr": [14,493,33,589,65,851] + }, + "error": false }, { - "name": "awkward_IndexedArray_ranges_next_64", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "index": [], - "fromstarts": [], - "fromstops": [], - "length": 0 - }, - "outputs": { - "tostarts": [], - "tostops": [], - "tolength": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [-1], - "fromstarts": [0], - "fromstops": [1], - "length": 1 - }, - "outputs": { - "tostarts": [0], - "tostops": [0], - "tolength": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1], - "fromstarts": [0], - "fromstops": [2], - "length": 1 - }, - "outputs": { - "tostarts": [0], - "tostops": [2], - "tolength": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 2], - "fromstarts": [0, 2], - "fromstops": [2, 3], - "length": 2 - }, - "outputs": { - "tostarts": [0, 2], - "tostops": [2, 3], - "tolength": [3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [-1, -1, -1], - "fromstarts": [0, 2], - "fromstops": [2, 3], - "length": 2 - }, - "outputs": { - "tostarts": [0, 0], - "tostops": [0, 0], - "tolength": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, -1, 1, -1, 2], - "fromstarts": [0, 2, 3], - "fromstops": [2, 3, 5], - "length": 3 - }, - "outputs": { - "tostarts": [0, 1, 2], - "tostops": [1, 2, 3], - "tolength": [3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [3, -1 ,-1, 2, 1, 0, -1], - "fromstarts": [0, 1, 2, 3, 5], - "fromstops": [1, 2, 3, 5, 7], - "length": 5 - }, - "outputs": { - "tostarts": [0, 1, 1, 1, 3], - "tostops": [1, 1, 1, 3, 4], - "tolength": [4] - } - } - ] + "inputs": { + "fromptr": [3,53,13,73,31,101,5,59,17,79,37,103,7,61,19,83,41,107,67,23,89,43,109,71,29,97,47,113], + "outlength": 15, + "offsets": [0,2,4,6,7,8,10,12,14,16,18,20,22,24,26,28] + }, + "outputs": { + "toptr": [159,949,3131,5,59,1343,3811,427,1577,4387,1541,3827,7739,2813,5311] + }, + "error": false }, { - "name": "awkward_IndexedArray_ranges_carry_next_64", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "index": [], - "fromstarts": [], - "fromstops": [], - "length": 0 - }, - "outputs": { - "tocarry": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1], - "fromstarts": [0], - "fromstops": [1], - "length": 1 - }, - "outputs": { - "tocarry": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [-1], - "fromstarts": [0], - "fromstops": [1], - "length": 1 - }, - "outputs": { - "tocarry": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [-1, -1, -1], - "fromstarts": [0, 2], - "fromstops": [2, 3], - "length": 2 - }, - "outputs": { - "tocarry": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 2], - "fromstarts": [0, 2], - "fromstops": [2, 3], - "length": 2 - }, - "outputs": { - "tocarry": [0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, -1, 1, -1, 2], - "fromstarts": [0, 2, 3], - "fromstops": [2, 3, 5], - "length": 3 - }, - "outputs": { - "tocarry": [0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [3, -1 ,-1, 2, 1, 0, -1], - "fromstarts": [0, 1, 2, 3, 5], - "fromstops": [1, 2, 3, 5, 7], - "length": 5 - }, - "outputs": { - "tocarry": [3, 2, 1, 0] - } - } - ] + "inputs": { + "fromptr": [3,53,13,73,31,101,5,59,17,79,37,103,7,61,19,83,41,107,11,67,23,89,43,109,71,29,97,47,113], + "outlength": 15, + "offsets": [0,2,4,6,8,9,11,13,15,17,19,21,23,25,27,29] + }, + "outputs": { + "toptr": [159,949,3131,295,17,2923,721,1159,3403,1177,1541,3827,7739,2813,5311] + }, + "error": false }, { - "name": "awkward_ListArray_broadcast_tooffsets", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [], - "fromstarts": [], - "fromstops": [], - "lencontent": 0, - "offsetslength": 0 - }, - "outputs": { - "tocarry": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 1], - "fromstarts": [0], - "fromstops": [1], - "lencontent": 1, - "offsetslength": 2 - }, - "outputs": { - "tocarry": [0] - } - }, - { - "error": true, - "message": "stops[i] > len(content)", - "inputs": { - "fromoffsets": [0, 1], - "fromstarts": [0], - "fromstops": [2], - "lencontent": 1, - "offsetslength": 2 - }, - "outputs": { - "tocarry": [] - } - }, - { - "error": true, - "message": "broadcast's offsets must be monotonically increasing", - "inputs": { - "fromoffsets": [2, 1], - "fromstarts": [0], - "fromstops": [1], - "lencontent": 1, - "offsetslength": 2 - }, - "outputs": { - "tocarry": [] - } - }, - { - "error": true, - "message": "cannot broadcast nested list", - "inputs": { - "fromoffsets": [0, 2], - "fromstarts": [0], - "fromstops": [1], - "lencontent": 1, - "offsetslength": 2 - }, - "outputs": { - "tocarry": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 2, 4, 6, 8, 10, 12, 13, 14, 15, 16], - "fromstarts": [0, 0, 0, 0, 0, 0, 4, 4, 4, 4], - "fromstops": [2, 2, 2, 2, 2, 2, 5, 5, 5, 5], - "lencontent": 5, - "offsetslength": 11 - }, - "outputs": { - "tocarry": [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 4, 4, 4, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 2, 4, 6, 8, 10], - "fromstarts": [0, 0, 0, 3, 3], - "fromstops": [2, 2, 2, 5, 5], - "lencontent": 5, - "offsetslength": 6 - }, - "outputs": { - "tocarry": [0, 1, 0, 1, 0, 1, 3, 4, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20], - "fromstarts": [0, 0, 0, 3, 3, 5, 5, 5, 8, 8], - "fromstops": [2, 2, 2, 5, 5, 7, 7, 7, 10, 10], - "lencontent": 10, - "offsetslength": 11 - }, - "outputs": { - "tocarry": [0, 1, 0, 1, 0, 1, 3, 4, 3, 4, 5, 6, 5, 6, 5, 6, 8, 9, 8, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 6, 9, 12, 15, 18, 21], - "fromstarts": [0, 0, 0, 0, 0, 0, 0], - "fromstops": [3, 3, 3, 3, 3, 3, 3], - "lencontent": 3, - "offsetslength": 8 - }, - "outputs": { - "tocarry": [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 6, 9, 12, 15, 18], - "fromstarts": [0, 0, 0, 0, 0, 0], - "fromstops": [3, 3, 3, 3, 3, 3], - "lencontent": 3, - "offsetslength": 7 - }, - "outputs": { - "tocarry": [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 6, 9, 12, 15], - "fromstarts": [0, 0, 0, 0, 0], - "fromstops": [3, 3, 3, 3, 3], - "lencontent": 3, - "offsetslength": 6 - }, - "outputs": { - "tocarry": [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 6, 9], - "fromstarts": [0, 0, 0], - "fromstops": [3, 3, 3], - "lencontent": 3, - "offsetslength": 4 - }, - "outputs": { - "tocarry": [0, 1, 2, 0, 1, 2, 0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 6], - "fromstarts": [0, 0], - "fromstops": [3, 3], - "lencontent": 3, - "offsetslength": 3 - }, - "outputs": { - "tocarry": [0, 1, 2, 0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 3], - "fromstarts": [0, 3], - "fromstops": [3, 3], - "lencontent": 20, - "offsetslength": 3 - }, - "outputs": { - "tocarry": [0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 8, 13, 18, 23, 28], - "fromstarts": [0, 13, 3, 18, 8, 23], - "fromstops": [3, 18, 8, 23, 13, 28], - "lencontent": 28, - "offsetslength": 7 - }, - "outputs": { - "tocarry": [0, 1, 2, 13, 14, 15, 16, 17, 3, 4, 5, 6, 7, 18, 19, 20, 21, 22, 8, 9, 10, 11, 12, 23, 24, 25, 26, 27] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 2, 4], - "fromstarts": [0, 2], - "fromstops": [2, 4], - "lencontent": 4, - "offsetslength": 3 - }, - "outputs": { - "tocarry": [0, 1, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 4, 9, 13, 18, 23, 28], - "fromstarts": [0, 13, 4, 18, 8, 23], - "fromstops": [4, 18, 8, 23, 13, 28], - "lencontent": 28, - "offsetslength": 7 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 13, 14, 15, 16, 17, 4, 5, 6, 7, 18, 19, 20, 21, 22, 8, 9, 10, 11, 12, 23, 24, 25, 26, 27] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 4, 9, 14, 19, 24, 29], - "fromstarts": [0, 14, 4, 19, 9, 24], - "fromstops": [4, 19, 9, 24, 14, 29], - "lencontent": 29, - "offsetslength": 7 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 14, 15, 16, 17, 18, 4, 5, 6, 7, 8, 19, 20, 21, 22, 23, 9, 10, 11, 12, 13, 24, 25, 26, 27, 28] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 5, 10, 15, 18, 21, 24, 29], - "fromstarts": [0, 0, 0, 8, 11, 11, 14], - "fromstops": [5, 5, 5, 11, 14, 14, 19], - "lencontent": 19, - "offsetslength": 8 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 8, 9, 10, 11, 12, 13, 11, 12, 13, 14, 15, 16, 17, 18] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 3, 4, 5], - "fromstarts": [0, 3, 3, 4], - "fromstops": [3, 3, 4, 5], - "lencontent": 5, - "offsetslength": 5 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 3, 5], - "fromstarts": [0, 3, 3], - "fromstops": [3, 3, 5], - "lencontent": 10, - "offsetslength": 4 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 3, 5], - "fromstarts": [0, 3, 3], - "fromstops": [3, 3, 5], - "lencontent": 5, - "offsetslength": 4 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 3, 5, 5, 8], - "fromstarts": [0, 3, 3, 10, 10], - "fromstops": [3, 3, 5, 10, 13], - "lencontent": 13, - "offsetslength": 6 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 10, 11, 12] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 5, 10, 15, 20], - "fromstarts": [0, 10, 15, 25], - "fromstops": [5, 15, 20, 30], - "lencontent": 30, - "offsetslength": 5 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 25, 26, 27, 28, 29] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 5, 10, 11, 12, 17, 22], - "fromstarts": [0, 11, 5, 16, 6, 17], - "fromstops": [5, 16, 6, 17, 11, 22], - "lencontent": 22, - "offsetslength": 7 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 11, 12, 13, 14, 15, 5, 16, 6, 7, 8, 9, 10, 17, 18, 19, 20, 21] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 5, 10, 14, 18, 23, 28], - "fromstarts": [0, 14, 5, 19, 9, 23], - "fromstops": [5, 19, 9, 23, 14, 28], - "lencontent": 28, - "offsetslength": 7 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 14, 15, 16, 17, 18, 5, 6, 7, 8, 19, 20, 21, 22, 9, 10, 11, 12, 13, 23, 24, 25, 26, 27] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 5, 10, 15, 20, 24, 28], - "fromstarts": [0, 14, 5, 19, 10, 24], - "fromstops": [5, 19, 10, 24, 14, 28], - "lencontent": 28, - "offsetslength": 7 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 14, 15, 16, 17, 18, 5, 6, 7, 8, 9, 19, 20, 21, 22, 23, 10, 11, 12, 13, 24, 25, 26, 27] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 3, 5, 6, 10], - "fromstarts": [0, 3, 3, 15, 16], - "fromstops": [3, 3, 5, 16, 20], - "lencontent": 20, - "offsetslength": 6 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 15, 16, 17, 18, 19] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 5, 10, 15, 20], - "fromstarts": [0, 15, 10, 25], - "fromstops": [5, 20, 15, 30], - "lencontent": 30, - "offsetslength": 5 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 15, 16, 17, 18, 19, 10, 11, 12, 13, 14, 25, 26, 27, 28, 29] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 5, 10, 15, 19, 24, 28], - "fromstarts": [0, 15, 5, 20, 10, 24], - "fromstops": [5, 20, 10, 24, 15, 28], - "lencontent": 28, - "offsetslength": 7 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 15, 16, 17, 18, 19, 5, 6, 7, 8, 9, 20, 21, 22, 23, 10, 11, 12, 13, 14, 24, 25, 26, 27] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 5, 10, 15, 20, 25, 28], - "fromstarts": [0, 15, 5, 20, 10, 25], - "fromstops": [5, 20, 10, 25, 15, 28], - "lencontent": 28, - "offsetslength": 7 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 15, 16, 17, 18, 19, 5, 6, 7, 8, 9, 20, 21, 22, 23, 24, 10, 11, 12, 13, 14, 25, 26, 27] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 5, 10, 15, 20, 25, 29], - "fromstarts": [0, 15, 5, 20, 10, 25], - "fromstops": [5, 20, 10, 25, 15, 29], - "lencontent": 29, - "offsetslength": 7 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 15, 16, 17, 18, 19, 5, 6, 7, 8, 9, 20, 21, 22, 23, 24, 10, 11, 12, 13, 14, 25, 26, 27, 28] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 5, 10, 15, 20, 25, 30], - "fromstarts": [0, 15, 5, 20, 10, 25], - "fromstops": [5, 20, 10, 25, 15, 30], - "lencontent": 30, - "offsetslength": 7 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 15, 16, 17, 18, 19, 5, 6, 7, 8, 9, 20, 21, 22, 23, 24, 10, 11, 12, 13, 14, 25, 26, 27, 28, 29] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 5, 10, 15, 20, 25, 30], - "fromstarts": [0, 45, 5, 50, 10, 55], - "fromstops": [5, 50, 10, 55, 15, 60], - "lencontent": 60, - "offsetslength": 7 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 45, 46, 47, 48, 49, 5, 6, 7, 8, 9, 50, 51, 52, 53, 54, 10, 11, 12, 13, 14, 55, 56, 57, 58, 59] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 6], - "fromstarts": [0, 3], - "fromstops": [3, 6], - "lencontent": 25, - "offsetslength": 3 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 6], - "fromstarts": [0, 3], - "fromstops": [3, 6], - "lencontent": 6, - "offsetslength": 3 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 6, 10, 14, 17], - "fromstarts": [0, 3, 10, 14, 18], - "fromstops": [3, 6, 14, 18, 21], - "lencontent": 21, - "offsetslength": 6 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 6, 9, 12, 15], - "fromstarts": [0, 3, 11, 14, 17], - "fromstops": [3, 6, 14, 17, 20], - "lencontent": 20, - "offsetslength": 6 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 5, 11, 12, 13, 14, 15, 16, 17, 18, 19] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 6, 9, 12, 15], - "fromstarts": [0, 3, 11, 14, 17], - "fromstops": [3, 6, 14, 17, 20], - "lencontent": 25, - "offsetslength": 6 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 5, 11, 12, 13, 14, 15, 16, 17, 18, 19] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 6, 10, 14, 17], - "fromstarts": [0, 3, 11, 15, 19], - "fromstops": [3, 6, 15, 19, 22], - "lencontent": 22, - "offsetslength": 6 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 5, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 3, 4, 6, 7], - "fromstarts": [0, 3, 3, 4, 6], - "fromstops": [3, 3, 4, 6, 7], - "lencontent": 7, - "offsetslength": 6 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 5, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 3, 7], - "fromstarts": [0, 3, 3], - "fromstops": [3, 3, 7], - "lencontent": 7, - "offsetslength": 4 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 5, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 7], - "fromstarts": [0, 3], - "fromstops": [3, 7], - "lencontent": 7, - "offsetslength": 3 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 5, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 3, 5, 6, 10], - "fromstarts": [0, 3, 3, 5, 6], - "fromstops": [3, 3, 5, 6, 10], - "lencontent": 10, - "offsetslength": 6 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 3, 5, 8, 8, 10], - "fromstarts": [0, 3, 3, 5, 8, 8], - "fromstops": [3, 3, 5, 8, 8, 10], - "lencontent": 10, - "offsetslength": 7 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 5, 10], - "fromstarts": [0, 5], - "fromstops": [5, 10], - "lencontent": 10, - "offsetslength": 3 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 4, 7, 7, 9, 9, 11], - "fromstarts": [0, 4, 7, 7, 9, 9], - "fromstops": [4, 7, 7, 9, 9, 11], - "lencontent": 11, - "offsetslength": 7 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 8, 12, 16, 19], - "fromstarts": [0, 3, 8, 12, 16], - "fromstops": [3, 8, 12, 16, 19], - "lencontent": 19, - "offsetslength": 6 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 6, 11, 15, 19, 22], - "fromstarts": [0, 3, 6, 11, 15, 19], - "fromstops": [3, 6, 11, 15, 19, 22], - "lencontent": 22, - "offsetslength": 7 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 5, 10, 15, 20, 25, 30], - "fromstarts": [0, 5, 10, 15, 20, 25], - "fromstops": [5, 10, 15, 20, 25, 30], - "lencontent": 30, - "offsetslength": 7 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 77, 84, 91, 98, 105, 112, 119, 126, 133, 140, 147, 154, 161, 168, 175, 182, 189, 196, 203, 210], - "fromstarts": [0, 7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 77, 84, 91, 98, 105, 112, 119, 126, 133, 140, 147, 154, 161, 168, 175, 182, 189, 196, 203], - "fromstops": [7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 77, 84, 91, 98, 105, 112, 119, 126, 133, 140, 147, 154, 161, 168, 175, 182, 189, 196, 203, 210], - "lencontent": 210, - "offsetslength": 31 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 5, 10, 15, 20, 25, 30], - "fromstarts": [0, 5, 10, 45, 50, 55], - "fromstops": [5, 10, 15, 50, 55, 60], - "lencontent": 60, - "offsetslength": 7 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 6, 11, 15, 19, 22], - "fromstarts": [0, 3, 8, 13, 17, 21], - "fromstops": [3, 6, 13, 17, 21, 24], - "lencontent": 24, - "offsetslength": 7 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 5, 8, 11, 14, 19], - "fromstarts": [0, 8, 11, 11, 14], - "fromstops": [5, 11, 14, 14, 19], - "lencontent": 19, - "offsetslength": 6 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 8, 9, 10, 11, 12, 13, 11, 12, 13, 14, 15, 16, 17, 18] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 3, 5, 8, 9], - "fromstarts": [0, 3, 4, 5, 8], - "fromstops": [3, 3, 6, 8, 9], - "lencontent": 10, - "offsetslength": 6 - }, - "outputs": { - "tocarry": [0, 1, 2, 4, 5, 5, 6, 7, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 5, 6, 7, 7, 9], - "fromstarts": [0, 4, 6, 3, 6, 7], - "fromstops": [3, 6, 7, 4, 6, 9], - "lencontent": 9, - "offsetslength": 7 - }, - "outputs": { - "tocarry": [0, 1, 2, 4, 5, 6, 3, 7, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 5, 6, 7, 9], - "fromstarts": [0, 4, 6, 3, 7], - "fromstops": [3, 6, 7, 4, 9], - "lencontent": 9, - "offsetslength": 6 - }, - "outputs": { - "tocarry": [0, 1, 2, 4, 5, 6, 3, 7, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 2, 3, 4, 5, 6, 8], - "fromstarts": [0, 2, 4, 5, 6, 9], - "fromstops": [2, 3, 5, 6, 7, 11], - "lencontent": 11, - "offsetslength": 7 - }, - "outputs": { - "tocarry": [0, 1, 2, 4, 5, 6, 9, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 3, 5, 6, 8], - "fromstarts": [0, 4, 4, 6, 9], - "fromstops": [3, 4, 6, 7, 11], - "lencontent": 11, - "offsetslength": 6 - }, - "outputs": { - "tocarry": [0, 1, 2, 4, 5, 6, 9, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 3, 5], - "fromstarts": [0, 3, 5], - "fromstops": [3, 3, 7], - "lencontent": 7, - "offsetslength": 4 - }, - "outputs": { - "tocarry": [0, 1, 2, 5, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 3, 7], - "fromstarts": [0, 3, 5], - "fromstops": [3, 3, 9], - "lencontent": 9, - "offsetslength": 4 - }, - "outputs": { - "tocarry": [0, 1, 2, 5, 6, 7, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 7], - "fromstarts": [0, 5], - "fromstops": [3, 9], - "lencontent": 9, - "offsetslength": 3 - }, - "outputs": { - "tocarry": [0, 1, 2, 5, 6, 7, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 5, 7, 8, 9, 10], - "fromstarts": [0, 6, 3, 8, 5, 9], - "fromstops": [3, 8, 5, 9, 6, 10], - "lencontent": 10, - "offsetslength": 7 - }, - "outputs": { - "tocarry": [0, 1, 2, 6, 7, 3, 4, 8, 5, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 5, 5, 6, 8, 9], - "fromstarts": [0, 6, 3, 8, 3, 5], - "fromstops": [3, 8, 3, 9, 5, 6], - "lencontent": 9, - "offsetslength": 7 - }, - "outputs": { - "tocarry": [0, 1, 2, 6, 7, 8, 3, 4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 3, 7], - "fromstarts": [0, 3, 6], - "fromstops": [3, 3, 10], - "lencontent": 10, - "offsetslength": 4 - }, - "outputs": { - "tocarry": [0, 1, 2, 6, 7, 8, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 2, 4, 5, 6, 6, 6], - "fromstarts": [0, 3, 2, 5, 3, 6], - "fromstops": [2, 5, 3, 6, 3, 6], - "lencontent": 6, - "offsetslength": 7 - }, - "outputs": { - "tocarry": [0, 1, 3, 4, 2, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 2, 2, 4, 5, 6], - "fromstarts": [0, 3, 3, 5, 8], - "fromstops": [2, 3, 5, 6, 9], - "lencontent": 9, - "offsetslength": 6 - }, - "outputs": { - "tocarry": [0, 1, 3, 4, 5, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 6, 9], - "fromstarts": [11, 14, 17], - "fromstops": [14, 17, 20], - "lencontent": 25, - "offsetslength": 4 - }, - "outputs": { - "tocarry": [11, 12, 13, 14, 15, 16, 17, 18, 19] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 5, 10, 15, 20, 25, 30], - "fromstarts": [1, 16, 6, 21, 11, 26], - "fromstops": [6, 21, 11, 26, 16, 31], - "lencontent": 31, - "offsetslength": 7 - }, - "outputs": { - "tocarry": [1, 2, 3, 4, 5, 16, 17, 18, 19, 20, 6, 7, 8, 9, 10, 21, 22, 23, 24, 25, 11, 12, 13, 14, 15, 26, 27, 28, 29, 30] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 3, 5], - "fromstarts": [1, 99, 5], - "fromstops": [4, 99, 7], - "lencontent": 7, - "offsetslength": 4 - }, - "outputs": { - "tocarry": [1, 2, 3, 5, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 5, 10, 15, 20], - "fromstarts": [15, 10, 5, 0], - "fromstops": [20, 15, 10, 5], - "lencontent": 20, - "offsetslength": 5 - }, - "outputs": { - "tocarry": [15, 16, 17, 18, 19, 10, 11, 12, 13, 14, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 5, 10, 15, 20], - "fromstarts": [15, 5, 10, 0], - "fromstops": [20, 10, 15, 5], - "lencontent": 20, - "offsetslength": 5 - }, - "outputs": { - "tocarry": [15, 16, 17, 18, 19, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 1, 2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 4], - "fromstarts": [16], - "fromstops": [20], - "lencontent": 20, - "offsetslength": 2 - }, - "outputs": { - "tocarry": [16, 17, 18, 19] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 0, 1, 3], - "fromstarts": [2, 2, 3], - "fromstops": [2, 3, 5], - "lencontent": 5, - "offsetslength": 4 - }, - "outputs": { - "tocarry": [2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 1, 2, 3], - "fromstarts": [2, 4, 5], - "fromstops": [3, 5, 6], - "lencontent": 6, - "offsetslength": 4 - }, - "outputs": { - "tocarry": [2, 4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 5, 10, 15, 20, 25, 30], - "fromstarts": [25, 10, 20, 5, 15, 0], - "fromstops": [30, 15, 25, 10, 20, 5], - "lencontent": 30, - "offsetslength": 7 - }, - "outputs": { - "tocarry": [25, 26, 27, 28, 29, 10, 11, 12, 13, 14, 20, 21, 22, 23, 24, 5, 6, 7, 8, 9, 15, 16, 17, 18, 19, 0, 1, 2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 5, 10, 15, 20, 25, 30], - "fromstarts": [25, 20, 15, 10, 5, 0], - "fromstops": [30, 25, 20, 15, 10, 5], - "lencontent": 30, - "offsetslength": 7 - }, - "outputs": { - "tocarry": [25, 26, 27, 28, 29, 20, 21, 22, 23, 24, 15, 16, 17, 18, 19, 10, 11, 12, 13, 14, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 1, 2, 2, 5, 7], - "fromstarts": [3, 3, 3, 0, 4], - "fromstops": [4, 4, 3, 3, 6], - "lencontent": 6, - "offsetslength": 6 - }, - "outputs": { - "tocarry": [3, 3, 0, 1, 2, 4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 2, 2, 5, 6, 7, 11], - "fromstarts": [3, 3, 0, 5, 5, 6], - "fromstops": [5, 3, 3, 6, 6, 10], - "lencontent": 10, - "offsetslength": 7 - }, - "outputs": { - "tocarry": [3, 4, 0, 1, 2, 5, 5, 6, 7, 8, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 2, 3], - "fromstarts": [3, 15], - "fromstops": [5, 16], - "lencontent": 20, - "offsetslength": 3 - }, - "outputs": { - "tocarry": [3, 4, 15] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 2, 4, 4, 7], - "fromstarts": [3, 3, 3, 0], - "fromstops": [5, 5, 3, 3], - "lencontent": 5, - "offsetslength": 5 - }, - "outputs": { - "tocarry": [3, 4, 3, 4, 0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 4, 7, 7, 9, 9, 11], - "fromstarts": [3, 0, 999, 2, 6, 10], - "fromstops": [7, 3, 999, 4, 6, 12], - "lencontent": 12, - "offsetslength": 7 - }, - "outputs": { - "tocarry": [3, 4, 5, 6, 0, 1, 2, 2, 3, 10, 11] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 2, 2, 2, 2, 6], - "fromstarts": [3, 5, 5, 5, 5], - "fromstops": [5, 5, 5, 5, 9], - "lencontent": 9, - "offsetslength": 6 - }, - "outputs": { - "tocarry": [3, 4, 5, 6, 7, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 6, 9, 12, 14, 16], - "fromstarts": [3, 6, 17, 20, 11, 25], - "fromstops": [6, 9, 20, 23, 13, 27], - "lencontent": 28, - "offsetslength": 7 - }, - "outputs": { - "tocarry": [3, 4, 5, 6, 7, 8, 17, 18, 19, 20, 21, 22, 11, 12, 25, 26] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 8, 12, 16, 19], - "fromstarts": [3, 6, 11, 15, 19], - "fromstops": [6, 11, 15, 19, 22], - "lencontent": 22, - "offsetslength": 6 - }, - "outputs": { - "tocarry": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 0, 2, 6], - "fromstarts": [3, 3, 6], - "fromstops": [3, 5, 10], - "lencontent": 10, - "offsetslength": 4 - }, - "outputs": { - "tocarry": [3, 4, 6, 7, 8, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 2, 6], - "fromstarts": [3, 6], - "fromstops": [5, 10], - "lencontent": 10, - "offsetslength": 3 - }, - "outputs": { - "tocarry": [3, 4, 6, 7, 8, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 0, 2], - "fromstarts": [4, 4], - "fromstops": [4, 6], - "lencontent": 6, - "offsetslength": 3 - }, - "outputs": { - "tocarry": [4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 0, 2, 7], - "fromstarts": [4, 4, 7], - "fromstops": [4, 6, 12], - "lencontent": 12, - "offsetslength": 4 - }, - "outputs": { - "tocarry": [4, 5, 7, 8, 9, 10, 11] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 1, 2, 5, 5, 7, 7, 11], - "fromstarts": [5, 5, 0, 3, 3, 6, 6], - "fromstops": [6, 6, 3, 3, 5, 6, 10], - "lencontent": 10, - "offsetslength": 8 - }, - "outputs": { - "tocarry": [5, 5, 0, 1, 2, 3, 4, 6, 7, 8, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 0, 1, 4], - "fromstarts": [5, 5, 6], - "fromstops": [5, 6, 9], - "lencontent": 9, - "offsetslength": 4 - }, - "outputs": { - "tocarry": [5, 6, 7, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 1, 1, 5], - "fromstarts": [5, 6, 6], - "fromstops": [6, 6, 10], - "lencontent": 10, - "offsetslength": 4 - }, - "outputs": { - "tocarry": [5, 6, 7, 8, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 1, 5], - "fromstarts": [5, 6], - "fromstops": [6, 10], - "lencontent": 10, - "offsetslength": 3 - }, - "outputs": { - "tocarry": [5, 6, 7, 8, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 4, 6, 6, 9], - "fromstarts": [6, 5, 3, 3, 0], - "fromstops": [9, 6, 5, 3, 3], - "lencontent": 9, - "offsetslength": 6 - }, - "outputs": { - "tocarry": [6, 7, 8, 5, 3, 4, 0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3, 4, 7, 10], - "fromstarts": [6, 5, 6, 0], - "fromstops": [9, 6, 9, 3], - "lencontent": 9, - "offsetslength": 5 - }, - "outputs": { - "tocarry": [6, 7, 8, 5, 6, 7, 8, 0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 1, 1, 6], - "fromstarts": [6, 7, 7], - "fromstops": [7, 7, 12], - "lencontent": 12, - "offsetslength": 4 - }, - "outputs": { - "tocarry": [6, 7, 8, 9, 10, 11] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 5, 8, 11, 14, 19], - "fromstarts": [6, 11, 14, 17, 20], - "fromstops": [11, 14, 17, 20, 25], - "lencontent": 25, - "offsetslength": 6 - }, - "outputs": { - "tocarry": [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 4, 5, 7, 10], - "fromstarts": [6, 5, 3, 0], - "fromstops": [10, 6, 5, 3], - "lencontent": 10, - "offsetslength": 5 - }, - "outputs": { - "tocarry": [6, 7, 8, 9, 5, 3, 4, 0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 4, 5, 7, 7, 10], - "fromstarts": [6, 5, 3, 3, 0], - "fromstops": [10, 6, 5, 3, 3], - "lencontent": 10, - "offsetslength": 6 - }, - "outputs": { - "tocarry": [6, 7, 8, 9, 5, 3, 4, 0, 1, 2] - } - } - ] + "inputs": { + "fromptr": [3,53,13,73,31,101,5,59,17,79,37,103,7,61,19,83,41,107,11,67,23,89,43,109,71,97,47,113], + "outlength": 15, + "offsets": [0,2,4,6,8,9,11,13,15,17,18,20,22,24,26,28] + }, + "outputs": { + "toptr": [159,949,3131,295,17,2923,721,1159,3403,107,737,2047,4687,6887,5311] + }, + "error": false }, { - "name": "awkward_ListArray_compact_offsets", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [], - "fromstops": [], - "length": 0 - }, - "outputs": { - "tooffsets": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [1], - "fromstops": [1], - "length": 1 - }, - "outputs": { - "tooffsets": [0, 0] - } - }, - { - "error": true, - "message": "stops[i] < starts[i]", - "inputs": { - "fromstarts": [2, 2, 6], - "fromstops": [2, 3, 5], - "length": 3 - }, - "outputs": { - "tooffsets": [0, 0, 1, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [2, 2, 3], - "fromstops": [2, 3, 5], - "length": 3 - }, - "outputs": { - "tooffsets": [0, 0, 1, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [5, 5, 6], - "fromstops": [5, 6, 9], - "length": 3 - }, - "outputs": { - "tooffsets": [0, 0, 1, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [4, 4], - "fromstops": [4, 6], - "length": 2 - }, - "outputs": { - "tooffsets": [0, 0, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [3, 3, 6], - "fromstops": [3, 5, 10], - "length": 3 - }, - "outputs": { - "tooffsets": [0, 0, 2, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [4, 4, 7], - "fromstops": [4, 6, 12], - "length": 3 - }, - "outputs": { - "tooffsets": [0, 0, 2, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [5, 6, 6], - "fromstops": [6, 6, 10], - "length": 3 - }, - "outputs": { - "tooffsets": [0, 1, 1, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [6, 7, 7], - "fromstops": [7, 7, 12], - "length": 3 - }, - "outputs": { - "tooffsets": [0, 1, 1, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [3, 3, 3, 0, 4], - "fromstops": [4, 4, 3, 3, 6], - "length": 5 - }, - "outputs": { - "tooffsets": [0, 1, 2, 2, 5, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [2, 4, 5], - "fromstops": [3, 5, 6], - "length": 3 - }, - "outputs": { - "tooffsets": [0, 1, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [5, 5, 0, 3, 3, 6, 6], - "fromstops": [6, 6, 3, 3, 5, 6, 10], - "length": 7 - }, - "outputs": { - "tooffsets": [0, 1, 2, 5, 5, 7, 7, 11] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [3, 5, 5, 5, 5], - "fromstops": [5, 5, 5, 5, 9], - "length": 5 - }, - "outputs": { - "tooffsets": [0, 2, 2, 2, 2, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3, 3, 5, 8], - "fromstops": [2, 3, 5, 6, 9], - "length": 5 - }, - "outputs": { - "tooffsets": [0, 2, 2, 4, 5, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [3, 3, 0, 5, 5, 6], - "fromstops": [5, 3, 3, 6, 6, 10], - "length": 6 - }, - "outputs": { - "tooffsets": [0, 2, 2, 5, 6, 7, 11] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [3, 15], - "fromstops": [5, 16], - "length": 2 - }, - "outputs": { - "tooffsets": [0, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 2, 4, 5, 6, 9], - "fromstops": [2, 3, 5, 6, 7, 11], - "length": 6 - }, - "outputs": { - "tooffsets": [0, 2, 3, 4, 5, 6, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 2], - "fromstops": [2, 4], - "length": 2 - }, - "outputs": { - "tooffsets": [0, 2, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [3, 3, 3, 0], - "fromstops": [5, 5, 3, 3], - "length": 4 - }, - "outputs": { - "tooffsets": [0, 2, 4, 4, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3, 2, 5, 3, 6], - "fromstops": [2, 5, 3, 6, 3, 6], - "length": 6 - }, - "outputs": { - "tooffsets": [0, 2, 4, 5, 6, 6, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 0, 0, 3, 3], - "fromstops": [2, 2, 2, 5, 5], - "length": 5 - }, - "outputs": { - "tooffsets": [0, 2, 4, 6, 8, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 0, 0, 0, 0, 0, 4, 4, 4, 4], - "fromstops": [2, 2, 2, 2, 2, 2, 5, 5, 5, 5], - "length": 10 - }, - "outputs": { - "tooffsets": [0, 2, 4, 6, 8, 10, 12, 13, 14, 15, 16] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 0, 0, 3, 3, 5, 5, 5, 8, 8], - "fromstops": [2, 2, 2, 5, 5, 7, 7, 7, 10, 10], - "length": 10 - }, - "outputs": { - "tooffsets": [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [3, 6], - "fromstops": [5, 10], - "length": 2 - }, - "outputs": { - "tooffsets": [0, 2, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3], - "fromstops": [3, 3], - "length": 2 - }, - "outputs": { - "tooffsets": [0, 3, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3, 3, 4], - "fromstops": [3, 3, 4, 5], - "length": 4 - }, - "outputs": { - "tooffsets": [0, 3, 3, 4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3, 3], - "fromstops": [3, 3, 5], - "length": 3 - }, - "outputs": { - "tooffsets": [0, 3, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3, 5], - "fromstops": [3, 3, 7], - "length": 3 - }, - "outputs": { - "tooffsets": [0, 3, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [1, 99, 5], - "fromstops": [4, 99, 7], - "length": 3 - }, - "outputs": { - "tooffsets": [0, 3, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3, 3, 10, 10], - "fromstops": [3, 3, 5, 10, 13], - "length": 5 - }, - "outputs": { - "tooffsets": [0, 3, 3, 5, 5, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3, 3, 15, 16], - "fromstops": [3, 3, 5, 16, 20], - "length": 5 - }, - "outputs": { - "tooffsets": [0, 3, 3, 5, 6, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 4, 4, 6, 9], - "fromstops": [3, 4, 6, 7, 11], - "length": 5 - }, - "outputs": { - "tooffsets": [0, 3, 3, 5, 6, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3, 4, 5, 8], - "fromstops": [3, 3, 6, 8, 9], - "length": 5 - }, - "outputs": { - "tooffsets": [0, 3, 3, 5, 8, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3, 5], - "fromstops": [3, 3, 9], - "length": 3 - }, - "outputs": { - "tooffsets": [0, 3, 3, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3, 6], - "fromstops": [3, 3, 10], - "length": 3 - }, - "outputs": { - "tooffsets": [0, 3, 3, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [6, 5, 3, 3, 0], - "fromstops": [9, 6, 5, 3, 3], - "length": 5 - }, - "outputs": { - "tooffsets": [0, 3, 4, 6, 6, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [6, 5, 6, 0], - "fromstops": [9, 6, 9, 3], - "length": 4 - }, - "outputs": { - "tooffsets": [0, 3, 4, 7, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 6, 3, 8, 3, 5], - "fromstops": [3, 8, 3, 9, 5, 6], - "length": 6 - }, - "outputs": { - "tooffsets": [0, 3, 5, 5, 6, 8, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 4, 6, 3, 6, 7], - "fromstops": [3, 6, 7, 4, 6, 9], - "length": 6 - }, - "outputs": { - "tooffsets": [0, 3, 5, 6, 7, 7, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 4, 6, 3, 7], - "fromstops": [3, 6, 7, 4, 9], - "length": 5 - }, - "outputs": { - "tooffsets": [0, 3, 5, 6, 7, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 6, 3, 8, 5, 9], - "fromstops": [3, 8, 5, 9, 6, 10], - "length": 6 - }, - "outputs": { - "tooffsets": [0, 3, 5, 7, 8, 9, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 0], - "fromstops": [3, 3], - "length": 2 - }, - "outputs": { - "tooffsets": [0, 3, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3], - "fromstops": [3, 6], - "length": 2 - }, - "outputs": { - "tooffsets": [0, 3, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3, 10, 14, 18], - "fromstops": [3, 6, 14, 18, 21], - "length": 5 - }, - "outputs": { - "tooffsets": [0, 3, 6, 10, 14, 17] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3, 6, 11, 15, 19], - "fromstops": [3, 6, 11, 15, 19, 22], - "length": 6 - }, - "outputs": { - "tooffsets": [0, 3, 6, 11, 15, 19, 22] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 0, 0], - "fromstops": [3, 3, 3], - "length": 3 - }, - "outputs": { - "tooffsets": [0, 3, 6, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [3, 6, 17, 20, 11, 25], - "fromstops": [6, 9, 20, 23, 13, 27], - "length": 6 - }, - "outputs": { - "tooffsets": [0, 3, 6, 9, 12, 14, 16] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 0, 0, 0, 0], - "fromstops": [3, 3, 3, 3, 3], - "length": 5 - }, - "outputs": { - "tooffsets": [0, 3, 6, 9, 12, 15] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3, 11, 14, 17], - "fromstops": [3, 6, 14, 17, 20], - "length": 5 - }, - "outputs": { - "tooffsets": [0, 3, 6, 9, 12, 15] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 0, 0, 0, 0, 0], - "fromstops": [3, 3, 3, 3, 3, 3], - "length": 6 - }, - "outputs": { - "tooffsets": [0, 3, 6, 9, 12, 15, 18] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 0, 0, 0, 0, 0, 0], - "fromstops": [3, 3, 3, 3, 3, 3, 3], - "length": 7 - }, - "outputs": { - "tooffsets": [0, 3, 6, 9, 12, 15, 18, 21] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 5], - "fromstops": [3, 9], - "length": 2 - }, - "outputs": { - "tooffsets": [0, 3, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [3, 6, 11, 15, 19], - "fromstops": [6, 11, 15, 19, 22], - "length": 5 - }, - "outputs": { - "tooffsets": [0, 3, 8, 12, 16, 19] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 13, 3, 18, 8, 23], - "fromstops": [3, 18, 8, 23, 13, 28], - "length": 6 - }, - "outputs": { - "tooffsets": [0, 3, 8, 13, 18, 23, 28] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [16], - "fromstops": [20], - "length": 1 - }, - "outputs": { - "tooffsets": [0, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [6, 5, 3, 0], - "fromstops": [10, 6, 5, 3], - "length": 4 - }, - "outputs": { - "tooffsets": [0, 4, 5, 7, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [6, 5, 3, 3, 0], - "fromstops": [10, 6, 5, 3, 3], - "length": 5 - }, - "outputs": { - "tooffsets": [0, 4, 5, 7, 7, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [3, 0, 999, 2, 6, 10], - "fromstops": [7, 3, 999, 4, 6, 12], - "length": 6 - }, - "outputs": { - "tooffsets": [0, 4, 7, 7, 9, 9, 11] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 13, 4, 18, 8, 23], - "fromstops": [4, 18, 8, 23, 13, 28], - "length": 6 - }, - "outputs": { - "tooffsets": [0, 4, 9, 13, 18, 23, 28] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 14, 4, 19, 9, 24], - "fromstops": [4, 19, 9, 24, 14, 29], - "length": 6 - }, - "outputs": { - "tooffsets": [0, 4, 9, 14, 19, 24, 29] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 11, 5, 16, 6, 17], - "fromstops": [5, 16, 6, 17, 11, 22], - "length": 6 - }, - "outputs": { - "tooffsets": [0, 5, 10, 11, 12, 17, 22] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 14, 5, 19, 9, 23], - "fromstops": [5, 19, 9, 23, 14, 28], - "length": 6 - }, - "outputs": { - "tooffsets": [0, 5, 10, 14, 18, 23, 28] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 0, 0, 8, 11, 11, 14], - "fromstops": [5, 5, 5, 11, 14, 14, 19], - "length": 7 - }, - "outputs": { - "tooffsets": [0, 5, 10, 15, 18, 21, 24, 29] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 15, 5, 20, 10, 24], - "fromstops": [5, 20, 10, 24, 15, 28], - "length": 6 - }, - "outputs": { - "tooffsets": [0, 5, 10, 15, 19, 24, 28] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 10, 15, 25], - "fromstops": [5, 15, 20, 30], - "length": 4 - }, - "outputs": { - "tooffsets": [0, 5, 10, 15, 20] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 15, 10, 25], - "fromstops": [5, 20, 15, 30], - "length": 4 - }, - "outputs": { - "tooffsets": [0, 5, 10, 15, 20] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [15, 10, 5, 0], - "fromstops": [20, 15, 10, 5], - "length": 4 - }, - "outputs": { - "tooffsets": [0, 5, 10, 15, 20] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [15, 5, 10, 0], - "fromstops": [20, 10, 15, 5], - "length": 4 - }, - "outputs": { - "tooffsets": [0, 5, 10, 15, 20] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 14, 5, 19, 10, 24], - "fromstops": [5, 19, 10, 24, 14, 28], - "length": 6 - }, - "outputs": { - "tooffsets": [0, 5, 10, 15, 20, 24, 28] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 15, 5, 20, 10, 25], - "fromstops": [5, 20, 10, 25, 15, 28], - "length": 6 - }, - "outputs": { - "tooffsets": [0, 5, 10, 15, 20, 25, 28] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 15, 5, 20, 10, 25], - "fromstops": [5, 20, 10, 25, 15, 29], - "length": 6 - }, - "outputs": { - "tooffsets": [0, 5, 10, 15, 20, 25, 29] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 15, 5, 20, 10, 25], - "fromstops": [5, 20, 10, 25, 15, 30], - "length": 6 - }, - "outputs": { - "tooffsets": [0, 5, 10, 15, 20, 25, 30] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 45, 5, 50, 10, 55], - "fromstops": [5, 50, 10, 55, 15, 60], - "length": 6 - }, - "outputs": { - "tooffsets": [0, 5, 10, 15, 20, 25, 30] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 5, 10, 15, 20, 25], - "fromstops": [5, 10, 15, 20, 25, 30], - "length": 6 - }, - "outputs": { - "tooffsets": [0, 5, 10, 15, 20, 25, 30] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 5, 10, 45, 50, 55], - "fromstops": [5, 10, 15, 50, 55, 60], - "length": 6 - }, - "outputs": { - "tooffsets": [0, 5, 10, 15, 20, 25, 30] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [1, 16, 6, 21, 11, 26], - "fromstops": [6, 21, 11, 26, 16, 31], - "length": 6 - }, - "outputs": { - "tooffsets": [0, 5, 10, 15, 20, 25, 30] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [25, 10, 20, 5, 15, 0], - "fromstops": [30, 15, 25, 10, 20, 5], - "length": 6 - }, - "outputs": { - "tooffsets": [0, 5, 10, 15, 20, 25, 30] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [25, 20, 15, 10, 5, 0], - "fromstops": [30, 25, 20, 15, 10, 5], - "length": 6 - }, - "outputs": { - "tooffsets": [0, 5, 10, 15, 20, 25, 30] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 8, 11, 11, 14], - "fromstops": [5, 11, 14, 14, 19], - "length": 5 - }, - "outputs": { - "tooffsets": [0, 5, 8, 11, 14, 19] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [6, 11, 14, 17, 20], - "fromstops": [11, 14, 17, 20, 25], - "length": 5 - }, - "outputs": { - "tooffsets": [0, 5, 8, 11, 14, 19] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 77, 84, 91, 98, 105, 112, 119, 126, 133, 140, 147, 154, 161, 168, 175, 182, 189, 196, 203], - "fromstops": [7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 77, 84, 91, 98, 105, 112, 119, 126, 133, 140, 147, 154, 161, 168, 175, 182, 189, 196, 203, 210], - "length": 30 - }, - "outputs": { - "tooffsets": [0, 7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 77, 84, 91, 98, 105, 112, 119, 126, 133, 140, 147, 154, 161, 168, 175, 182, 189, 196, 203, 210] - } - } - ] + "inputs": { + "fromptr": [2,7,13,17,23,3,11,19,5], + "outlength": 8, + "offsets": [0,3,5,6,6,6,6,8,9] + }, + "outputs": { + "toptr": [182,391,3,1,1,1,209,5] + }, + "error": false }, { - "name": "awkward_RegularArray_reduce_local_nextparents_64", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "size": 3, - "length": 0 - }, - "outputs": { - "nextparents": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "size": 0, - "length": 0 - }, - "outputs": { - "nextparents": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "size": 0, - "length": 2 - }, - "outputs": { - "nextparents": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "size": 3, - "length": 2 - }, - "outputs": { - "nextparents": [0, 0, 0, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "size": 1, - "length": 1 - }, - "outputs": { - "nextparents": [0] - } - } - ] + "inputs": { + "fromptr": [2,3,5,7,11,13,17,19,23,29,31,37], + "outlength": 3, + "offsets": [0,4,8,12] + }, + "outputs": { + "toptr": [210,46189,765049] + }, + "error": false }, { - "name": "awkward_RegularArray_reduce_nonlocal_preparenext_64", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "parents": [], - "size": 3, - "length": 0 - }, - "outputs": { - "nextcarry": [], - "nextparents": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "parents": [], - "size": 0, - "length": 0 - }, - "outputs": { - "nextcarry": [], - "nextparents": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "parents": [0, 1], - "size": 0, - "length": 2 - }, - "outputs": { - "nextcarry": [], - "nextparents": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "parents": [0, 1], - "size": 3, - "length": 2 - }, - "outputs": { - "nextcarry": [0, 3, 1, 4, 2, 5], - "nextparents": [0, 3, 1, 4, 2, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "parents": [2, 4, 6], - "size": 3, - "length": 3 - }, - "outputs": { - "nextcarry": [0, 3, 6, 1, 4, 7, 2, 5, 8], - "nextparents": [6, 12, 18, 7, 13, 19, 8, 14, 20] - } - }, - { - "error": false, - "message": "", - "inputs": { - "parents": [0], - "size": 1, - "length": 1 - }, - "outputs": { - "nextcarry": [0], - "nextparents": [0] - } - } - ] + "inputs": { + "fromptr": [2,3,5,7,11,31,37,41,43,47,53,59,61,67,71,101,103,107,109,113], + "outlength": 6, + "offsets": [0,5,5,10,15,15,20] + }, + "outputs": { + "toptr": [2310,1,95041567,907383479,1,13710311357] + }, + "error": false }, { - "name": "awkward_RegularArray_localindex", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "length": 0, - "size": 3 - }, - "outputs": { - "toindex": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 0, - "size": 0 - }, - "outputs": { - "toindex": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 2, - "size": 0 - }, - "outputs": { - "toindex": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 2, - "size": 3 - }, - "outputs": { - "toindex": [0, 1, 2, 0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 6, - "size": 5 - }, - "outputs": { - "toindex": [0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4] - } - } - ] + "inputs": { + "fromptr": [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113], + "outlength": 6, + "offsets": [0,5,10,15,20,25,30] + }, + "outputs": { + "toptr": [2310,2800733,95041567,907383479,4132280413,13710311357] + }, + "error": false }, { - "name": "awkward_RegularArray_rpad_and_clip_axis1", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "size": 0, - "target": 2 - }, - "outputs": { - "toindex": [-1, -1, -1, -1, -1, -1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 0, - "size": 0, - "target": 0 - }, - "outputs": { - "toindex": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 0, - "size": 0, - "target": 2 - }, - "outputs": { - "toindex": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 0, - "size": 2, - "target": 2 - }, - "outputs": { - "toindex": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "size": 2, - "target": 2 - }, - "outputs": { - "toindex": [0, 1, 2, 3, 4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 2, - "size": 3, - "target": 3 - }, - "outputs": { - "toindex": [0, 1, 2, 3, 4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "size": 3, - "target": 3 - }, - "outputs": { - "toindex": [0, 1, 2, 3, 4, 5, 6, 7, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "size": 3, - "target": 2 - }, - "outputs": { - "toindex": [0, 1, 3, 4, 6, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 6, - "size": 5, - "target": 2 - }, - "outputs": { - "toindex": [0, 1, 5, 6, 10, 11, 15, 16, 20, 21, 25, 26] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "size": 2, - "target": 1 - }, - "outputs": { - "toindex": [0, 2, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "size": 3, - "target": 1 - }, - "outputs": { - "toindex": [0, 3, 6] - } - } - ] + "inputs": { + "fromptr": [2,3,5,7,11,31,37,41,43,47,53,59,61,67,71,101,103,107,109,113], + "outlength": 4, + "offsets": [0,5,10,15,20] + }, + "outputs": { + "toptr": [2310,95041567,907383479,13710311357] + }, + "error": false }, { - "name": "awkward_RegularArray_getitem_carry", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [0, 0], - "lencarry": 2, - "size": 0 - }, - "outputs": { - "tocarry": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [], - "lencarry": 0, - "size": 1 - }, - "outputs": { - "tocarry": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [], - "lencarry": 0, - "size": 0 - }, - "outputs": { - "tocarry": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [0, 0], - "lencarry": 2, - "size": 1 - }, - "outputs": { - "tocarry": [0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [0, 0, 0, 1, 1, 1], - "lencarry": 6, - "size": 1 - }, - "outputs": { - "tocarry": [0, 0, 0, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [0, 0, 0, 2, 2], - "lencarry": 5, - "size": 1 - }, - "outputs": { - "tocarry": [0, 0, 0, 2, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [0, 0, 1, 1, 2, 2, 3, 3, 4, 4], - "lencarry": 10, - "size": 1 - }, - "outputs": { - "tocarry": [0, 0, 1, 1, 2, 2, 3, 3, 4, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [0, 1, 0, 1, 0, 1, 3, 4, 3, 4], - "lencarry": 10, - "size": 1 - }, - "outputs": { - "tocarry": [0, 1, 0, 1, 0, 1, 3, 4, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [0, 0, 1, 1], - "lencarry": 4, - "size": 2 - }, - "outputs": { - "tocarry": [0, 1, 0, 1, 2, 3, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [0, 0, 0, 0], - "lencarry": 4, - "size": 3 - }, - "outputs": { - "tocarry": [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [0, 1, 1, 2], - "lencarry": 4, - "size": 2 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 2, 3, 4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [0, 0], - "lencarry": 2, - "size": 5 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 0, 1, 2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [0, 0, 0, 1, 1, 1], - "lencarry": 6, - "size": 5 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 5, 6, 7, 8, 9, 5, 6, 7, 8, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [0, 2, 3, 5], - "lencarry": 4, - "size": 5 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 25, 26, 27, 28, 29] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [0, 2, 4], - "lencarry": 3, - "size": 5 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 10, 11, 12, 13, 14, 20, 21, 22, 23, 24] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [0, 3, 6, 9], - "lencarry": 4, - "size": 5 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 15, 16, 17, 18, 19, 30, 31, 32, 33, 34, 45, 46, 47, 48, 49] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [0, 3, 1, 4, 2, 5], - "lencarry": 6, - "size": 5 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 15, 16, 17, 18, 19, 5, 6, 7, 8, 9, 20, 21, 22, 23, 24, 10, 11, 12, 13, 14, 25, 26, 27, 28, 29] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [0, 4, 8, 10], - "lencarry": 4, - "size": 5 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 20, 21, 22, 23, 24, 40, 41, 42, 43, 44, 50, 51, 52, 53, 54] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [0, 1, 1, 1], - "lencarry": 4, - "size": 3 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 5, 3, 4, 5, 3, 4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2], - "lencarry": 12, - "size": 5 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [0, 1, 2, 3, 4, 5, 3, 4, 5, 3, 4, 5], - "lencarry": 12, - "size": 5 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [2, 0, 0, 1], - "lencarry": 4, - "size": 5 - }, - "outputs": { - "tocarry": [10, 11, 12, 13, 14, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [2, 2, 2, 2], - "lencarry": 4, - "size": 5 - }, - "outputs": { - "tocarry": [10, 11, 12, 13, 14, 10, 11, 12, 13, 14, 10, 11, 12, 13, 14, 10, 11, 12, 13, 14] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [2], - "lencarry": 1, - "size": 5 - }, - "outputs": { - "tocarry": [10, 11, 12, 13, 14] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [2, 5, 8, 11], - "lencarry": 4, - "size": 5 - }, - "outputs": { - "tocarry": [10, 11, 12, 13, 14, 25, 26, 27, 28, 29, 40, 41, 42, 43, 44, 55, 56, 57, 58, 59] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [1], - "lencarry": 1, - "size": 1 - }, - "outputs": { - "tocarry": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [3, 4, 5, 0, 1, 2, 0, 1, 2, 3, 4, 5], - "lencarry": 12, - "size": 5 - }, - "outputs": { - "tocarry": [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [3, 4, 5, 3, 4, 5, 3, 4, 5, 3, 4, 5], - "lencarry": 12, - "size": 5 - }, - "outputs": { - "tocarry": [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [3, 4, 5], - "lencarry": 3, - "size": 5 - }, - "outputs": { - "tocarry": [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [4, 4, 4, 4], - "lencarry": 4, - "size": 5 - }, - "outputs": { - "tocarry": [20, 21, 22, 23, 24, 20, 21, 22, 23, 24, 20, 21, 22, 23, 24, 20, 21, 22, 23, 24] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [4], - "lencarry": 1, - "size": 5 - }, - "outputs": { - "tocarry": [20, 21, 22, 23, 24] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [2], - "lencarry": 1, - "size": 1 - }, - "outputs": { - "tocarry": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [1, 0], - "lencarry": 2, - "size": 2 - }, - "outputs": { - "tocarry": [2, 3, 0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [1], - "lencarry": 1, - "size": 2 - }, - "outputs": { - "tocarry": [2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [1, 1, 0, 0], - "lencarry": 4, - "size": 2 - }, - "outputs": { - "tocarry": [2, 3, 2, 3, 0, 1, 0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [1, 2], - "lencarry": 2, - "size": 2 - }, - "outputs": { - "tocarry": [2, 3, 4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [1, 0, 0, 1], - "lencarry": 4, - "size": 3 - }, - "outputs": { - "tocarry": [3, 4, 5, 0, 1, 2, 0, 1, 2, 3, 4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [1], - "lencarry": 1, - "size": 3 - }, - "outputs": { - "tocarry": [3, 4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [1, 1, 1, 1], - "lencarry": 4, - "size": 3 - }, - "outputs": { - "tocarry": [3, 4, 5, 3, 4, 5, 3, 4, 5, 3, 4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [2], - "lencarry": 1, - "size": 2 - }, - "outputs": { - "tocarry": [4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [1, 2], - "lencarry": 2, - "size": 4 - }, - "outputs": { - "tocarry": [4, 5, 6, 7, 8, 9, 10, 11] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [1, 2], - "lencarry": 2, - "size": 5 - }, - "outputs": { - "tocarry": [5, 6, 7, 8, 9, 10, 11, 12, 13, 14] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [1, 2, 3, 4, 5], - "lencarry": 5, - "size": 5 - }, - "outputs": { - "tocarry": [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [1], - "lencarry": 1, - "size": 5 - }, - "outputs": { - "tocarry": [5, 6, 7, 8, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [1, 3, 6, 10], - "lencarry": 4, - "size": 5 - }, - "outputs": { - "tocarry": [5, 6, 7, 8, 9, 15, 16, 17, 18, 19, 30, 31, 32, 33, 34, 50, 51, 52, 53, 54] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [1, 4, 0, 5], - "lencarry": 4, - "size": 5 - }, - "outputs": { - "tocarry": [5, 6, 7, 8, 9, 20, 21, 22, 23, 24, 0, 1, 2, 3, 4, 25, 26, 27, 28, 29] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromcarry": [2, 1, 1, 2], - "lencarry": 4, - "size": 4 - }, - "outputs": { - "tocarry": [8, 9, 10, 11, 4, 5, 6, 7, 4, 5, 6, 7, 8, 9, 10, 11] - } - } - ] + "inputs": { + "fromptr": [2,7,3,11,5], + "outlength": 8, + "offsets": [0,1,2,3,3,3,3,4,5] + }, + "outputs": { + "toptr": [2,7,3,1,1,1,11,5] + }, + "error": false }, { - "name": "awkward_RegularArray_getitem_jagged_expand", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "regularlength": 0, - "regularsize": 0, - "singleoffsets": [0] - }, - "outputs": { - "multistarts": [], - "multistops": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "regularlength": 1, - "regularsize": 0, - "singleoffsets": [1] - }, - "outputs": { - "multistarts": [], - "multistops": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "regularlength": 0, - "regularsize": 0, - "singleoffsets": [0] - }, - "outputs": { - "multistarts": [], - "multistops": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "regularlength": 1, - "regularsize": 1, - "singleoffsets": [0, 2] - }, - "outputs": { - "multistarts": [0], - "multistops": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "regularlength": 2, - "regularsize": 1, - "singleoffsets": [0, 2] - }, - "outputs": { - "multistarts": [0, 0], - "multistops": [2, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "regularlength": 1, - "regularsize": 4, - "singleoffsets": [0, 0, 0, 0, 0] - }, - "outputs": { - "multistarts": [0, 0, 0, 0], - "multistops": [0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "regularlength": 1, - "regularsize": 3, - "singleoffsets": [0, 0, 0, 0] - }, - "outputs": { - "multistarts": [0, 0, 0], - "multistops": [0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "regularlength": 1, - "regularsize": 4, - "singleoffsets": [0, 0, 1, 1, 1] - }, - "outputs": { - "multistarts": [0, 0, 1, 1], - "multistops": [0, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "regularlength": 1, - "regularsize": 3, - "singleoffsets": [0, 1, 1, 3] - }, - "outputs": { - "multistarts": [0, 1, 1], - "multistops": [1, 1, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "regularlength": 1, - "regularsize": 5, - "singleoffsets": [0, 1, 1, 3, 3, 5] - }, - "outputs": { - "multistarts": [0, 1, 1, 3, 3], - "multistops": [1, 1, 3, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "regularlength": 1, - "regularsize": 5, - "singleoffsets": [0, 2, 2, 2, 2, 6] - }, - "outputs": { - "multistarts": [0, 2, 2, 2, 2], - "multistops": [2, 2, 2, 2, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "regularlength": 1, - "regularsize": 3, - "singleoffsets": [0, 2, 2, 3] - }, - "outputs": { - "multistarts": [0, 2, 2], - "multistops": [2, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "regularlength": 1, - "regularsize": 3, - "singleoffsets": [0, 2, 2, 4] - }, - "outputs": { - "multistarts": [0, 2, 2], - "multistops": [2, 2, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "regularlength": 1, - "regularsize": 2, - "singleoffsets": [0, 2, 4] - }, - "outputs": { - "multistarts": [0, 2], - "multistops": [2, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "regularlength": 1, - "regularsize": 7, - "singleoffsets": [0, 2, 2, 4, 4, 5, 5, 8] - }, - "outputs": { - "multistarts": [0, 2, 2, 4, 4, 5, 5], - "multistops": [2, 2, 4, 4, 5, 5, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "regularlength": 1, - "regularsize": 5, - "singleoffsets": [0, 2, 2, 4, 5, 6] - }, - "outputs": { - "multistarts": [0, 2, 2, 4, 5], - "multistops": [2, 2, 4, 5, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "regularlength": 1, - "regularsize": 5, - "singleoffsets": [0, 2, 2, 4, 5, 8] - }, - "outputs": { - "multistarts": [0, 2, 2, 4, 5], - "multistops": [2, 2, 4, 5, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "regularlength": 1, - "regularsize": 5, - "singleoffsets": [0, 2, 2, 4, 5, 9] - }, - "outputs": { - "multistarts": [0, 2, 2, 4, 5], - "multistops": [2, 2, 4, 5, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "regularlength": 1, - "regularsize": 3, - "singleoffsets": [0, 2, 3, 4] - }, - "outputs": { - "multistarts": [0, 2, 3], - "multistops": [2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "regularlength": 1, - "regularsize": 4, - "singleoffsets": [0, 2, 3, 3, 5] - }, - "outputs": { - "multistarts": [0, 2, 3, 3], - "multistops": [2, 3, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "regularlength": 1, - "regularsize": 4, - "singleoffsets": [0, 2, 3, 4, 7] - }, - "outputs": { - "multistarts": [0, 2, 3, 4], - "multistops": [2, 3, 4, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "regularlength": 1, - "regularsize": 3, - "singleoffsets": [0, 2, 5, 7] - }, - "outputs": { - "multistarts": [0, 2, 5], - "multistops": [2, 5, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "regularlength": 1, - "regularsize": 3, - "singleoffsets": [0, 2, 6, 8] - }, - "outputs": { - "multistarts": [0, 2, 6], - "multistops": [2, 6, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "regularlength": 2, - "regularsize": 2, - "singleoffsets": [0, 3, 4] - }, - "outputs": { - "multistarts": [0, 3, 0, 3], - "multistops": [3, 4, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "regularlength": 1, - "regularsize": 3, - "singleoffsets": [0, 3, 3, 4] - }, - "outputs": { - "multistarts": [0, 3, 3], - "multistops": [3, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "regularlength": 1, - "regularsize": 3, - "singleoffsets": [0, 3, 3, 5] - }, - "outputs": { - "multistarts": [0, 3, 3], - "multistops": [3, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "regularlength": 1, - "regularsize": 5, - "singleoffsets": [0, 3, 3, 3, 4, 7] - }, - "outputs": { - "multistarts": [0, 3, 3, 3, 4], - "multistops": [3, 3, 3, 4, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "regularlength": 1, - "regularsize": 2, - "singleoffsets": [0, 3, 4] - }, - "outputs": { - "multistarts": [0, 3], - "multistops": [3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "regularlength": 1, - "regularsize": 4, - "singleoffsets": [0, 3, 3, 4, 5] - }, - "outputs": { - "multistarts": [0, 3, 3, 4], - "multistops": [3, 3, 4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "regularlength": 1, - "regularsize": 5, - "singleoffsets": [0, 3, 3, 4, 5, 8] - }, - "outputs": { - "multistarts": [0, 3, 3, 4, 5], - "multistops": [3, 3, 4, 5, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "regularlength": 1, - "regularsize": 5, - "singleoffsets": [0, 3, 3, 5, 6, 9] - }, - "outputs": { - "multistarts": [0, 3, 3, 5, 6], - "multistops": [3, 3, 5, 6, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "regularlength": 1, - "regularsize": 2, - "singleoffsets": [0, 3, 6] - }, - "outputs": { - "multistarts": [0, 3], - "multistops": [3, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "regularlength": 1, - "regularsize": 3, - "singleoffsets": [0, 4, 6, 6] - }, - "outputs": { - "multistarts": [0, 4, 6], - "multistops": [4, 6, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "regularlength": 1, - "regularsize": 5, - "singleoffsets": [0, 5, 5, 6, 8, 10] - }, - "outputs": { - "multistarts": [0, 5, 5, 6, 8], - "multistops": [5, 5, 6, 8, 10] - } - } - ] + "inputs": { + "fromptr": [5,53,13,73,31,101,7,59,17,79,37,103,11,61,19,83,41,107,67,23,89,43,109,71,29,97,47,113], + "outlength": 15, + "offsets": [0,2,4,6,7,8,10,12,14,16,18,20,22,24,26,28] + }, + "outputs": { + "toptr": [265,949,3131,7,59,1343,3811,671,1577,4387,1541,3827,7739,2813,5311] + }, + "error": false }, { - "name": "awkward_RegularArray_getitem_next_array", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromarray": [], - "lenarray": 0, - "length": 0, - "size": 0 - }, - "outputs": { - "toadvanced": [], - "tocarry": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 0, 0, 0], - "lenarray": 4, - "length": 1, - "size": 2 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 0], - "lenarray": 2, - "length": 1, - "size": 3 - }, - "outputs": { - "toadvanced": [0, 1], - "tocarry": [0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0], - "lenarray": 1, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0], - "tocarry": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 0, 1, 1, 1, 0], - "lenarray": 6, - "length": 1, - "size": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3, 4, 5], - "tocarry": [0, 0, 1, 1, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1], - "lenarray": 2, - "length": 1, - "size": 3 - }, - "outputs": { - "toadvanced": [0, 1], - "tocarry": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1], - "lenarray": 2, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1], - "tocarry": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1], - "lenarray": 2, - "length": 1, - "size": 6 - }, - "outputs": { - "toadvanced": [0, 1], - "tocarry": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1, 1, 1], - "lenarray": 4, - "length": 1, - "size": 2 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [0, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1, 2], - "lenarray": 3, - "length": 1, - "size": 3 - }, - "outputs": { - "toadvanced": [0, 1, 2], - "tocarry": [0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1, 2], - "lenarray": 3, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1, 2], - "tocarry": [0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1, 2, 3], - "lenarray": 4, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [0, 1, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1], - "lenarray": 2, - "length": 4, - "size": 2 - }, - "outputs": { - "toadvanced": [0, 1, 0, 1, 0, 1, 0, 1], - "tocarry": [0, 1, 2, 3, 4, 5, 6, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1, 2, 4], - "lenarray": 4, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [0, 1, 2, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1, 3], - "lenarray": 3, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1, 2], - "tocarry": [0, 1, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1, 3, 4], - "lenarray": 4, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [0, 1, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1, 3, 4, 5], - "lenarray": 5, - "length": 1, - "size": 6 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3, 4], - "tocarry": [0, 1, 3, 4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1, 3, 4, 5], - "lenarray": 5, - "length": 1, - "size": 7 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3, 4], - "tocarry": [0, 1, 3, 4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1, 3, 4, 6, 7], - "lenarray": 6, - "length": 1, - "size": 8 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3, 4, 5], - "tocarry": [0, 1, 3, 4, 6, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1, 3, 4, 6, 7], - "lenarray": 6, - "length": 1, - "size": 9 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3, 4, 5], - "tocarry": [0, 1, 3, 4, 6, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1, 4], - "lenarray": 3, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1, 2], - "tocarry": [0, 1, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1, 4, 6, 7], - "lenarray": 5, - "length": 1, - "size": 8 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3, 4], - "tocarry": [0, 1, 4, 6, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1, 4, 6, 7], - "lenarray": 5, - "length": 1, - "size": 9 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3, 4], - "tocarry": [0, 1, 4, 6, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 2], - "lenarray": 2, - "length": 1, - "size": 3 - }, - "outputs": { - "toadvanced": [0, 1], - "tocarry": [0, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 2], - "lenarray": 2, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1], - "tocarry": [0, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 2, 1, 0], - "lenarray": 4, - "length": 1, - "size": 3 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [0, 2, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 2, 3], - "lenarray": 3, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1, 2], - "tocarry": [0, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 2, 3, 4], - "lenarray": 4, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [0, 2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 2, 4], - "lenarray": 3, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1, 2], - "tocarry": [0, 2, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 3], - "lenarray": 2, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1], - "tocarry": [0, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 3, 4], - "lenarray": 3, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1, 2], - "tocarry": [0, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 3], - "lenarray": 2, - "length": 2, - "size": 4 - }, - "outputs": { - "toadvanced": [0, 1, 0, 1], - "tocarry": [0, 3, 4, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 3], - "lenarray": 2, - "length": 3, - "size": 4 - }, - "outputs": { - "toadvanced": [0, 1, 0, 1, 0, 1], - "tocarry": [0, 3, 4, 7, 8, 11] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 4], - "lenarray": 2, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1], - "tocarry": [0, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 0, 0, 1], - "lenarray": 4, - "length": 1, - "size": 2 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [1, 0, 0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 0], - "lenarray": 2, - "length": 1, - "size": 2 - }, - "outputs": { - "toadvanced": [0, 1], - "tocarry": [1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 0, 1, 1, 1, 0], - "lenarray": 6, - "length": 1, - "size": 2 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3, 4, 5], - "tocarry": [1, 0, 1, 1, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1], - "lenarray": 1, - "length": 1, - "size": 2 - }, - "outputs": { - "toadvanced": [0], - "tocarry": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1], - "lenarray": 1, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0], - "tocarry": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 0, 1], - "lenarray": 3, - "length": 4, - "size": 2 - }, - "outputs": { - "toadvanced": [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2], - "tocarry": [1, 0, 1, 3, 2, 3, 5, 4, 5, 7, 6, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 0], - "lenarray": 2, - "length": 4, - "size": 2 - }, - "outputs": { - "toadvanced": [0, 1, 0, 1, 0, 1, 0, 1], - "tocarry": [1, 0, 3, 2, 5, 4, 7, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 1, 1, 1], - "lenarray": 4, - "length": 1, - "size": 2 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [1, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 2], - "lenarray": 2, - "length": 1, - "size": 3 - }, - "outputs": { - "toadvanced": [0, 1], - "tocarry": [1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 2], - "lenarray": 2, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1], - "tocarry": [1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 2, 3], - "lenarray": 3, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1, 2], - "tocarry": [1, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 2, 3, 4], - "lenarray": 4, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [1, 2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 2, 4], - "lenarray": 3, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1, 2], - "tocarry": [1, 2, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 3], - "lenarray": 2, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1], - "tocarry": [1, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 3, 4], - "lenarray": 3, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1, 2], - "tocarry": [1, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 3, 4, 6, 7], - "lenarray": 5, - "length": 1, - "size": 8 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3, 4], - "tocarry": [1, 3, 4, 6, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 3, 4, 6, 7], - "lenarray": 5, - "length": 1, - "size": 9 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3, 4], - "tocarry": [1, 3, 4, 6, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 4], - "lenarray": 2, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1], - "tocarry": [1, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 4, 0, 5], - "lenarray": 4, - "length": 1, - "size": 6 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [1, 4, 0, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [2, 0, 0, 1], - "lenarray": 4, - "length": 1, - "size": 6 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [2, 0, 0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [2, 0], - "lenarray": 2, - "length": 1, - "size": 3 - }, - "outputs": { - "toadvanced": [0, 1], - "tocarry": [2, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [2, 0, 0, 1, 4], - "lenarray": 5, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3, 4], - "tocarry": [2, 0, 0, 1, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [2, 0, 0, 2], - "lenarray": 4, - "length": 1, - "size": 3 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [2, 0, 0, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [2, 0, 0, 4], - "lenarray": 4, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [2, 0, 0, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [2], - "lenarray": 1, - "length": 1, - "size": 3 - }, - "outputs": { - "toadvanced": [0], - "tocarry": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [2], - "lenarray": 1, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0], - "tocarry": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [2, 1, 1, 2], - "lenarray": 4, - "length": 1, - "size": 3 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [2, 1, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [2, 1, 1, 3], - "lenarray": 4, - "length": 2, - "size": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3, 0, 1, 2, 3], - "tocarry": [2, 1, 1, 3, 6, 5, 5, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [2, 1, 1, 3], - "lenarray": 4, - "length": 3, - "size": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], - "tocarry": [2, 1, 1, 3, 6, 5, 5, 7, 10, 9, 9, 11] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [2, 2], - "lenarray": 2, - "length": 1, - "size": 4 - }, - "outputs": { - "toadvanced": [0, 1], - "tocarry": [2, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [2, 2, 2, 2], - "lenarray": 4, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [2, 2, 2, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [2, 2, 2, 2], - "lenarray": 4, - "length": 1, - "size": 6 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [2, 2, 2, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [2, 3], - "lenarray": 2, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1], - "tocarry": [2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [2, 3], - "lenarray": 2, - "length": 1, - "size": 6 - }, - "outputs": { - "toadvanced": [0, 1], - "tocarry": [2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [2, 3, 4], - "lenarray": 3, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1, 2], - "tocarry": [2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [2, 3, 4, 5, 6], - "lenarray": 5, - "length": 1, - "size": 7 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3, 4], - "tocarry": [2, 3, 4, 5, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [2, 4], - "lenarray": 2, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1], - "tocarry": [2, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [3], - "lenarray": 1, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0], - "tocarry": [3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [3, 1, 1, 7], - "lenarray": 4, - "length": 1, - "size": 10 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [3, 1, 1, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [3, 2, 1, 0], - "lenarray": 4, - "length": 1, - "size": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [3, 2, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [3, 2, 1], - "lenarray": 3, - "length": 1, - "size": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2], - "tocarry": [3, 2, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [3, 3, 3], - "lenarray": 3, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1, 2], - "tocarry": [3, 3, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [3, 4], - "lenarray": 2, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1], - "tocarry": [3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [3, 6, 8, 6], - "lenarray": 4, - "length": 1, - "size": 10 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [3, 6, 8, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [4], - "lenarray": 1, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0], - "tocarry": [4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [4, 3, 2], - "lenarray": 3, - "length": 1, - "size": 8 - }, - "outputs": { - "toadvanced": [0, 1, 2], - "tocarry": [4, 3, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [4, 3, 2, 1], - "lenarray": 4, - "length": 1, - "size": 8 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [4, 3, 2, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [4, 4], - "lenarray": 2, - "length": 1, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1], - "tocarry": [4, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [4, 4, 4, 4], - "lenarray": 4, - "length": 1, - "size": 6 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [4, 4, 4, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [4, 5], - "lenarray": 2, - "length": 1, - "size": 6 - }, - "outputs": { - "toadvanced": [0, 1], - "tocarry": [4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [7, 3, 0, 2, 3, 7], - "lenarray": 6, - "length": 1, - "size": 8 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3, 4, 5], - "tocarry": [7, 3, 0, 2, 3, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [7, 3, 2, 0, 2, 3, 7], - "lenarray": 7, - "length": 1, - "size": 8 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3, 4, 5, 6], - "tocarry": [7, 3, 2, 0, 2, 3, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [7, 3, 2, 0, 3, 7], - "lenarray": 6, - "length": 1, - "size": 8 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3, 4, 5], - "tocarry": [7, 3, 2, 0, 3, 7] - } - } - ] + "inputs": { + "fromptr": [2,3,5,7,11,13,17,19,23,29,31,37], + "outlength": 8, + "offsets": [0,3,3,3,6,9,9,9,12] + }, + "outputs": { + "toptr": [30,1,1,1001,7429,1,1,33263] + }, + "error": false }, { - "name": "awkward_RegularArray_getitem_next_array_advanced", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [], - "fromarray": [], - "length": 0, - "size": 0 - }, - "outputs": { - "toadvanced": [], - "tocarry": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [0, 1, 0, 1], - "length": 4, - "size": 2 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [0, 3, 4, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [0, 0, 0, 0], - "length": 4, - "size": 3 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [0, 3, 6, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [0, 1, 2, 1], - "length": 4, - "size": 3 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [0, 4, 8, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [0, 0, 0, 0], - "length": 4, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [0, 5, 10, 15] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [0, 1, 4, 1], - "length": 4, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [0, 6, 14, 16] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [1, 0, 1, 0], - "length": 4, - "size": 2 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [1, 2, 5, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [1, 0, 0, 1], - "length": 4, - "size": 3 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [1, 3, 6, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [1, 0, 0, 1], - "length": 4, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [1, 5, 10, 16] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [1, 3, 0, 4], - "length": 4, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [1, 8, 10, 19] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [2, 0, 0, 1], - "length": 4, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [2, 5, 10, 16] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [2, 2, 2, 2], - "length": 4, - "size": 3 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [2, 5, 8, 11] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [2, 2, 2, 2], - "length": 4, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [2, 7, 12, 17] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [3, 3, 3, 3], - "length": 4, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [3, 8, 13, 18] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [4, 4, 4, 4], - "length": 4, - "size": 5 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [4, 9, 14, 19] - } - } - ] + "inputs": { + "fromptr": [2,3,5,7,11,13], + "outlength": 4, + "offsets": [0,3,3,5,6] + }, + "outputs": { + "toptr": [30,1,77,13] + }, + "error": false }, { - "name": "awkward_RegularArray_getitem_next_array_regularize", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromarray": [], - "lenarray": 0, - "size": 2 - }, - "outputs": { - "toarray": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 0, 0, 0], - "lenarray": 4, - "size": 2 - }, - "outputs": { - "toarray": [0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 0, 0, 0], - "lenarray": 4, - "size": 3 - }, - "outputs": { - "toarray": [0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 0, 0, 0], - "lenarray": 4, - "size": 5 - }, - "outputs": { - "toarray": [0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 0], - "lenarray": 2, - "size": 3 - }, - "outputs": { - "toarray": [0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0], - "lenarray": 1, - "size": 5 - }, - "outputs": { - "toarray": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1, 0, 1], - "lenarray": 4, - "size": 2 - }, - "outputs": { - "toarray": [0, 1, 0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1], - "lenarray": 2, - "size": 2 - }, - "outputs": { - "toarray": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1], - "lenarray": 2, - "size": 3 - }, - "outputs": { - "toarray": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1], - "lenarray": 2, - "size": 5 - }, - "outputs": { - "toarray": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1], - "lenarray": 2, - "size": 6 - }, - "outputs": { - "toarray": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1, 1, 1], - "lenarray": 4, - "size": 2 - }, - "outputs": { - "toarray": [0, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1, 2], - "lenarray": 3, - "size": 3 - }, - "outputs": { - "toarray": [0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1, 2], - "lenarray": 3, - "size": 5 - }, - "outputs": { - "toarray": [0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1, 1, 1], - "lenarray": 4, - "size": 3 - }, - "outputs": { - "toarray": [0, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1, 2, 3], - "lenarray": 4, - "size": 5 - }, - "outputs": { - "toarray": [0, 1, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1, 2, 4], - "lenarray": 4, - "size": 5 - }, - "outputs": { - "toarray": [0, 1, 2, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1, 3], - "lenarray": 3, - "size": 5 - }, - "outputs": { - "toarray": [0, 1, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1, 3, 4], - "lenarray": 4, - "size": 5 - }, - "outputs": { - "toarray": [0, 1, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1, 3, 4, 5], - "lenarray": 5, - "size": 6 - }, - "outputs": { - "toarray": [0, 1, 3, 4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1, 3, 4, 5], - "lenarray": 5, - "size": 7 - }, - "outputs": { - "toarray": [0, 1, 3, 4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1, 3, 4, 6, 7], - "lenarray": 6, - "size": 8 - }, - "outputs": { - "toarray": [0, 1, 3, 4, 6, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1, 3, 4, 6, 7], - "lenarray": 6, - "size": 9 - }, - "outputs": { - "toarray": [0, 1, 3, 4, 6, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1, 4], - "lenarray": 3, - "size": 5 - }, - "outputs": { - "toarray": [0, 1, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1, 4, 6, 7], - "lenarray": 5, - "size": 8 - }, - "outputs": { - "toarray": [0, 1, 4, 6, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 1, 4, 6, 7], - "lenarray": 5, - "size": 9 - }, - "outputs": { - "toarray": [0, 1, 4, 6, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 2], - "lenarray": 2, - "size": 3 - }, - "outputs": { - "toarray": [0, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 2], - "lenarray": 2, - "size": 5 - }, - "outputs": { - "toarray": [0, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 2, 1, 0], - "lenarray": 4, - "size": 3 - }, - "outputs": { - "toarray": [0, 2, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 2, 3], - "lenarray": 3, - "size": 5 - }, - "outputs": { - "toarray": [0, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 2, 3, 4], - "lenarray": 4, - "size": 5 - }, - "outputs": { - "toarray": [0, 2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 2, 4], - "lenarray": 3, - "size": 5 - }, - "outputs": { - "toarray": [0, 2, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 3], - "lenarray": 2, - "size": 4 - }, - "outputs": { - "toarray": [0, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 3], - "lenarray": 2, - "size": 5 - }, - "outputs": { - "toarray": [0, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 3, 4], - "lenarray": 3, - "size": 5 - }, - "outputs": { - "toarray": [0, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 4], - "lenarray": 2, - "size": 5 - }, - "outputs": { - "toarray": [0, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 0, 0, 1], - "lenarray": 4, - "size": 2 - }, - "outputs": { - "toarray": [1, 0, 0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 0, 0, 1], - "lenarray": 4, - "size": 3 - }, - "outputs": { - "toarray": [1, 0, 0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 0, 0, 1], - "lenarray": 4, - "size": 5 - }, - "outputs": { - "toarray": [1, 0, 0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 0, 1, 0], - "lenarray": 4, - "size": 2 - }, - "outputs": { - "toarray": [1, 0, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 0], - "lenarray": 2, - "size": 2 - }, - "outputs": { - "toarray": [1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 0, 1], - "lenarray": 3, - "size": 2 - }, - "outputs": { - "toarray": [1, 0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 0, 1, 1, 1, 0], - "lenarray": 6, - "size": 2 - }, - "outputs": { - "toarray": [1, 0, 1, 1, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 1, 1, 1], - "lenarray": 4, - "size": 2 - }, - "outputs": { - "toarray": [1, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1], - "lenarray": 1, - "size": 2 - }, - "outputs": { - "toarray": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1], - "lenarray": 1, - "size": 5 - }, - "outputs": { - "toarray": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 2], - "lenarray": 2, - "size": 3 - }, - "outputs": { - "toarray": [1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 2], - "lenarray": 2, - "size": 5 - }, - "outputs": { - "toarray": [1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 2, 3], - "lenarray": 3, - "size": 5 - }, - "outputs": { - "toarray": [1, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 2, 3, 4], - "lenarray": 4, - "size": 5 - }, - "outputs": { - "toarray": [1, 2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 2, 4], - "lenarray": 3, - "size": 5 - }, - "outputs": { - "toarray": [1, 2, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 3], - "lenarray": 2, - "size": 5 - }, - "outputs": { - "toarray": [1, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 3, 4], - "lenarray": 3, - "size": 5 - }, - "outputs": { - "toarray": [1, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 3, 4, 6, 7], - "lenarray": 5, - "size": 8 - }, - "outputs": { - "toarray": [1, 3, 4, 6, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 3, 4, 6, 7], - "lenarray": 5, - "size": 9 - }, - "outputs": { - "toarray": [1, 3, 4, 6, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 4], - "lenarray": 2, - "size": 5 - }, - "outputs": { - "toarray": [1, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [2, 0, 0, 1], - "lenarray": 4, - "size": 5 - }, - "outputs": { - "toarray": [2, 0, 0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [2, 0, 0, 1], - "lenarray": 4, - "size": 6 - }, - "outputs": { - "toarray": [2, 0, 0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [2, 0], - "lenarray": 2, - "size": 3 - }, - "outputs": { - "toarray": [2, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [2], - "lenarray": 1, - "size": 3 - }, - "outputs": { - "toarray": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [2], - "lenarray": 1, - "size": 5 - }, - "outputs": { - "toarray": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [2, 2, 2, 2], - "lenarray": 4, - "size": 5 - }, - "outputs": { - "toarray": [2, 2, 2, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [2, 2, 2, 2], - "lenarray": 4, - "size": 6 - }, - "outputs": { - "toarray": [2, 2, 2, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [2, 2], - "lenarray": 2, - "size": 4 - }, - "outputs": { - "toarray": [2, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [2, 3], - "lenarray": 2, - "size": 5 - }, - "outputs": { - "toarray": [2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [2, 3], - "lenarray": 2, - "size": 6 - }, - "outputs": { - "toarray": [2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [2, 3, 4], - "lenarray": 3, - "size": 5 - }, - "outputs": { - "toarray": [2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [2, 3, 4, 5, 6], - "lenarray": 5, - "size": 7 - }, - "outputs": { - "toarray": [2, 3, 4, 5, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [2, 4], - "lenarray": 2, - "size": 5 - }, - "outputs": { - "toarray": [2, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [3, 1, 1, 7], - "lenarray": 4, - "size": 10 - }, - "outputs": { - "toarray": [3, 1, 1, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [3, 2, 1, 0], - "lenarray": 4, - "size": 4 - }, - "outputs": { - "toarray": [3, 2, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [3, 2, 1], - "lenarray": 3, - "size": 4 - }, - "outputs": { - "toarray": [3, 2, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [3], - "lenarray": 1, - "size": 5 - }, - "outputs": { - "toarray": [3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [3, 3, 3], - "lenarray": 3, - "size": 5 - }, - "outputs": { - "toarray": [3, 3, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [3, 4], - "lenarray": 2, - "size": 5 - }, - "outputs": { - "toarray": [3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [4, 3, 2, 1], - "lenarray": 4, - "size": 8 - }, - "outputs": { - "toarray": [4, 3, 2, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [4, 3, 2], - "lenarray": 3, - "size": 8 - }, - "outputs": { - "toarray": [4, 3, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [4], - "lenarray": 1, - "size": 5 - }, - "outputs": { - "toarray": [4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [4, 4], - "lenarray": 2, - "size": 5 - }, - "outputs": { - "toarray": [4, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [4, 5], - "lenarray": 2, - "size": 6 - }, - "outputs": { - "toarray": [4, 5] - } - } - ] + "inputs": { + "fromptr": [2,3,5,7,11,13,17,19,23], + "outlength": 6, + "offsets": [0,3,3,5,6,8,9] + }, + "outputs": { + "toptr": [30,1,77,13,323,23] + }, + "error": false }, { - "name": "awkward_RegularArray_getitem_next_at", - "status": true, - "tests": [ - { - "error": true, - "message": "index out of range", - "inputs": { - "at": -2, - "length": 1, - "size": 1 - }, - "outputs": { - "tocarry": [0] - } - }, - { - "error": true, - "message": "index out of range", - "inputs": { - "at": 6, - "length": 2, - "size": 5 - }, - "outputs": { - "tocarry": [0, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 0, - "length": 1, - "size": 1 - }, - "outputs": { - "tocarry": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 0, - "length": 0, - "size": 1 - }, - "outputs": { - "tocarry": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 0, - "length": 1, - "size": 2 - }, - "outputs": { - "tocarry": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 0, - "length": 1, - "size": 3 - }, - "outputs": { - "tocarry": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 0, - "length": 1, - "size": 5 - }, - "outputs": { - "tocarry": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 0, - "length": 1, - "size": 6 - }, - "outputs": { - "tocarry": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 0, - "length": 2, - "size": 5 - }, - "outputs": { - "tocarry": [0, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 1, - "length": 1, - "size": 2 - }, - "outputs": { - "tocarry": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 1, - "length": 1, - "size": 3 - }, - "outputs": { - "tocarry": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 1, - "length": 1, - "size": 4 - }, - "outputs": { - "tocarry": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 1, - "length": 1, - "size": 5 - }, - "outputs": { - "tocarry": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 1, - "length": 1, - "size": 6 - }, - "outputs": { - "tocarry": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 1, - "length": 2, - "size": 5 - }, - "outputs": { - "tocarry": [1, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 2, - "length": 1, - "size": 3 - }, - "outputs": { - "tocarry": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 2, - "length": 1, - "size": 4 - }, - "outputs": { - "tocarry": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 2, - "length": 1, - "size": 5 - }, - "outputs": { - "tocarry": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 2, - "length": 1, - "size": 6 - }, - "outputs": { - "tocarry": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 2, - "length": 5, - "size": 5 - }, - "outputs": { - "tocarry": [2, 7, 12, 17, 22] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 3, - "length": 1, - "size": 4 - }, - "outputs": { - "tocarry": [3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 3, - "length": 1, - "size": 5 - }, - "outputs": { - "tocarry": [3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 4, - "length": 1, - "size": 5 - }, - "outputs": { - "tocarry": [4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 4, - "length": 1, - "size": 6 - }, - "outputs": { - "tocarry": [4] - } - } - ] + "inputs": { + "fromptr": [2,3,5,7,11,13,17,19], + "outlength": 5, + "offsets": [0,3,3,5,6,8] + }, + "outputs": { + "toptr": [30,1,77,13,323] + }, + "error": false }, { - "name": "awkward_RegularArray_getitem_next_range", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "length": 0, - "nextsize": 0, - "regular_start": 0, - "size": 0, - "step": 0 - }, - "outputs": { - "tocarry": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 1, - "regular_start": 0, - "size": 1, - "step": 1 - }, - "outputs": { - "tocarry": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 1, - "regular_start": 0, - "size": 2, - "step": 1 - }, - "outputs": { - "tocarry": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 1, - "regular_start": 0, - "size": 5, - "step": 1 - }, - "outputs": { - "tocarry": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 1, - "regular_start": 0, - "size": 3, - "step": 3 - }, - "outputs": { - "tocarry": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 1, - "regular_start": 0, - "size": 5, - "step": 3 - }, - "outputs": { - "tocarry": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 2, - "regular_start": 0, - "size": 2, - "step": 1 - }, - "outputs": { - "tocarry": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 2, - "regular_start": 0, - "size": 3, - "step": 1 - }, - "outputs": { - "tocarry": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 3, - "regular_start": 0, - "size": 3, - "step": 1 - }, - "outputs": { - "tocarry": [0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 4, - "regular_start": 0, - "size": 4, - "step": 1 - }, - "outputs": { - "tocarry": [0, 1, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 4, - "regular_start": 0, - "size": 5, - "step": 1 - }, - "outputs": { - "tocarry": [0, 1, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 2, - "nextsize": 2, - "regular_start": 0, - "size": 2, - "step": 1 - }, - "outputs": { - "tocarry": [0, 1, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 5, - "regular_start": 0, - "size": 5, - "step": 1 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 5, - "regular_start": 0, - "size": 6, - "step": 1 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 6, - "regular_start": 0, - "size": 6, - "step": 1 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 8, - "regular_start": 0, - "size": 8, - "step": 1 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 5, 6, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 10, - "regular_start": 0, - "size": 10, - "step": 1 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "nextsize": 5, - "regular_start": 0, - "size": 5, - "step": 1 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "nextsize": 5, - "regular_start": 0, - "size": 5, - "step": 1 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 2, - "nextsize": 4, - "regular_start": 0, - "size": 5, - "step": 1 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 5, 6, 7, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "nextsize": 4, - "regular_start": 0, - "size": 5, - "step": 1 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 5, 6, 7, 8, 10, 11, 12, 13] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "nextsize": 4, - "regular_start": 0, - "size": 5, - "step": 1 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 15, 16, 17, 18, 20, 21, 22, 23] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 6, - "nextsize": 4, - "regular_start": 0, - "size": 5, - "step": 1 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 15, 16, 17, 18, 20, 21, 22, 23, 25, 26, 27, 28] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 2, - "regular_start": 0, - "size": 3, - "step": 2 - }, - "outputs": { - "tocarry": [0, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 2, - "regular_start": 0, - "size": 5, - "step": 2 - }, - "outputs": { - "tocarry": [0, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 3, - "regular_start": 0, - "size": 5, - "step": 2 - }, - "outputs": { - "tocarry": [0, 2, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 3, - "regular_start": 0, - "size": 6, - "step": 2 - }, - "outputs": { - "tocarry": [0, 2, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "nextsize": 3, - "regular_start": 0, - "size": 5, - "step": 2 - }, - "outputs": { - "tocarry": [0, 2, 4, 5, 7, 9, 10, 12, 14, 15, 17, 19, 20, 22, 24] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 6, - "nextsize": 3, - "regular_start": 0, - "size": 5, - "step": 2 - }, - "outputs": { - "tocarry": [0, 2, 4, 5, 7, 9, 10, 12, 14, 15, 17, 19, 20, 22, 24, 25, 27, 29] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 4, - "regular_start": 0, - "size": 8, - "step": 2 - }, - "outputs": { - "tocarry": [0, 2, 4, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 2, - "regular_start": 0, - "size": 5, - "step": 3 - }, - "outputs": { - "tocarry": [0, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 1, - "regular_start": 1, - "size": 2, - "step": 1 - }, - "outputs": { - "tocarry": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 1, - "regular_start": 1, - "size": 3, - "step": 2 - }, - "outputs": { - "tocarry": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 1, - "regular_start": 1, - "size": 3, - "step": 3 - }, - "outputs": { - "tocarry": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 1, - "regular_start": 1, - "size": 5, - "step": 3 - }, - "outputs": { - "tocarry": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 2, - "regular_start": 1, - "size": 3, - "step": 1 - }, - "outputs": { - "tocarry": [1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 2, - "regular_start": 1, - "size": 4, - "step": 1 - }, - "outputs": { - "tocarry": [1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 3, - "regular_start": 1, - "size": 5, - "step": 1 - }, - "outputs": { - "tocarry": [1, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 4, - "regular_start": 1, - "size": 5, - "step": 1 - }, - "outputs": { - "tocarry": [1, 2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 5, - "regular_start": 1, - "size": 6, - "step": 1 - }, - "outputs": { - "tocarry": [1, 2, 3, 4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "nextsize": 4, - "regular_start": 1, - "size": 5, - "step": 1 - }, - "outputs": { - "tocarry": [1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "nextsize": 4, - "regular_start": 1, - "size": 5, - "step": 1 - }, - "outputs": { - "tocarry": [1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14, 16, 17, 18, 19, 21, 22, 23, 24] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 6, - "nextsize": 4, - "regular_start": 1, - "size": 5, - "step": 1 - }, - "outputs": { - "tocarry": [1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14, 16, 17, 18, 19, 21, 22, 23, 24, 26, 27, 28, 29] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 2, - "nextsize": 4, - "regular_start": 1, - "size": 5, - "step": 1 - }, - "outputs": { - "tocarry": [1, 2, 3, 4, 6, 7, 8, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 2, - "regular_start": 1, - "size": 5, - "step": 2 - }, - "outputs": { - "tocarry": [1, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 2, - "regular_start": 1, - "size": 5, - "step": 3 - }, - "outputs": { - "tocarry": [1, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 1, - "regular_start": 2, - "size": 3, - "step": 1 - }, - "outputs": { - "tocarry": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 1, - "regular_start": 2, - "size": 3, - "step": 2 - }, - "outputs": { - "tocarry": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 1, - "regular_start": 2, - "size": 3, - "step": 3 - }, - "outputs": { - "tocarry": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 1, - "regular_start": 2, - "size": 5, - "step": 3 - }, - "outputs": { - "tocarry": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 3, - "regular_start": 2, - "size": 5, - "step": 1 - }, - "outputs": { - "tocarry": [2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "nextsize": 2, - "regular_start": 3, - "size": 5, - "step": 1 - }, - "outputs": { - "tocarry": [3, 4] - } - } - ] + "inputs": { + "fromptr": [6,5,7,11,13,17,19], + "outlength": 5, + "offsets": [0,2,2,4,5,7] + }, + "outputs": { + "toptr": [30,1,77,13,323] + }, + "error": false }, { - "name": "awkward_ListArray_getitem_next_range_spreadadvanced", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [], - "fromoffsets": [], - "lenstarts": 0 - }, - "outputs": { - "toadvanced": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0], - "fromoffsets": [0, 3], - "lenstarts": 1 - }, - "outputs": { - "toadvanced": [0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1], - "fromoffsets": [0, 3, 6], - "lenstarts": 2 - }, - "outputs": { - "toadvanced": [0, 0, 0, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromoffsets": [0, 4, 5, 7, 10], - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 0, 0, 0, 1, 2, 2, 3, 3, 3] - } - } - ] + "inputs": { + "fromptr": [2,3,5,7,11], + "outlength": 3, + "offsets": [0,3,3,5] + }, + "outputs": { + "toptr": [30,1,77] + }, + "error": false }, { - "name": "awkward_RegularArray_getitem_next_range_spreadadvanced", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [], - "length": 0, - "nextsize": 2 - }, - "outputs": { - "toadvanced": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [], - "length": 1, - "nextsize": 0 - }, - "outputs": { - "toadvanced": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [], - "length": 0, - "nextsize": 0 - }, - "outputs": { - "toadvanced": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0], - "length": 1, - "nextsize": 2 - }, - "outputs": { - "toadvanced": [0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1], - "length": 2, - "nextsize": 2 - }, - "outputs": { - "toadvanced": [0, 0, 1, 1] - } - } - ] + "inputs": { + "fromptr": [2,3,5], + "outlength": 1, + "offsets": [0,3] + }, + "outputs": { + "toptr": [30] + }, + "error": false }, { - "name": "awkward_ListOffsetArray_local_preparenext_64", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromindex": [], - "length": 0 - }, - "outputs": { - "tocarry": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0], - "length": 1 - }, - "outputs": { - "tocarry": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [2, 0], - "length": 2 - }, - "outputs": { - "tocarry": [1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 2], - "length": 2 - }, - "outputs": { - "tocarry": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 2, 3, 5, 7], - "length": 5 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [7, 5, 3, 2, 0], - "length": 5 - }, - "outputs": { - "tocarry": [4, 3, 2, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 2, 7, 5, 3], - "length": 5 - }, - "outputs": { - "tocarry": [0, 1, 4, 3, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [1, 0, 2, 4, 3, 6, 5, 7], - "length": 8 - }, - "outputs": { - "tocarry": [1, 0, 2, 4, 3, 6, 5, 7] - } - } - ] + "inputs": { + "fromptr": [2,3,5,7,11], + "outlength": 4, + "offsets": [0,3,4,5,5] + }, + "outputs": { + "toptr": [30,7,11,1] + }, + "error": false }, { - "name": "awkward_ListOffsetArray_drop_none_indexes", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "noneindexes": [], - "length_indexes": 0, - "fromoffsets": [], - "length_offsets": 0 - }, - "outputs": { - "tooffsets": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "noneindexes": [0], - "length_indexes": 1, - "fromoffsets": [], - "length_offsets": 0 - }, - "outputs": { - "tooffsets": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "noneindexes": [], - "length_indexes": 0, - "fromoffsets": [0], - "length_offsets": 1 - }, - "outputs": { - "tooffsets": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "noneindexes": [-1, -1, -1, -1, -1, -1, -1], - "length_indexes": 7, - "fromoffsets": [0, 2, 3, 5, 7], - "length_offsets": 5 - }, - "outputs": { - "tooffsets": [0, 0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "noneindexes": [-1, 0, -1, 0, 0, -1, 0], - "length_indexes": 7, - "fromoffsets": [0, 2, 3, 5, 7], - "length_offsets": 5 - }, - "outputs": { - "tooffsets": [0, 1, 1, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "noneindexes": [0, 0, 0, 0, 0, 0], - "length_indexes": 6, - "fromoffsets": [0, 2, 3, 5, 6], - "length_offsets": 5 - }, - "outputs": { - "tooffsets": [0, 2, 3, 5, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "noneindexes": [0, 0, 0, 0, 0, 0], - "length_indexes": 6, - "fromoffsets": [0, 0, 0, 0, 0], - "length_offsets": 5 - }, - "outputs": { - "tooffsets": [0, 0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "noneindexes": [0, 0, 0, 0, 0, 0], - "length_indexes": 6, - "fromoffsets": [0, 2, 3, 3, 6], - "length_offsets": 5 - }, - "outputs": { - "tooffsets": [0, 2, 3, 3, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "noneindexes": [-1, -1, -1, -1, -1, -1], - "length_indexes": 6, - "fromoffsets": [0, 2, 3, 3, 6], - "length_offsets": 5 - }, - "outputs": { - "tooffsets": [0, 0, 0, 0, 0] - } - } - ] + "inputs": { + "fromptr": [2,3,5,7,11], + "outlength": 3, + "offsets": [0,3,4,5] + }, + "outputs": { + "toptr": [30,7,11] + }, + "error": false }, { - "name": "awkward_ListOffsetArray_flatten_offsets", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "inneroffsets": [0], - "outeroffsets": [], - "outeroffsetslen": 0 - }, - "outputs": { - "tooffsets": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "inneroffsets": [0, 1, 2, 3], - "outeroffsets": [0, 0, 0, 1, 3], - "outeroffsetslen": 5 - }, - "outputs": { - "tooffsets": [0, 0, 0, 1, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "inneroffsets": [0, 1, 2, 3, 4, 5, 6], - "outeroffsets": [0, 0, 1, 3, 6], - "outeroffsetslen": 5 - }, - "outputs": { - "tooffsets": [0, 0, 1, 3, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "inneroffsets": [0, 1, 1, 5], - "outeroffsets": [0, 0, 1, 3], - "outeroffsetslen": 4 - }, - "outputs": { - "tooffsets": [0, 0, 1, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "inneroffsets": [0, 1, 1, 6, 6], - "outeroffsets": [0, 0, 1, 4], - "outeroffsetslen": 4 - }, - "outputs": { - "tooffsets": [0, 0, 1, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "inneroffsets": [0, 4, 8, 12, 14, 16], - "outeroffsets": [0, 3, 3, 5], - "outeroffsetslen": 4 - }, - "outputs": { - "tooffsets": [0, 12, 12, 16] - } - }, - { - "error": false, - "message": "", - "inputs": { - "inneroffsets": [0, 1, 2, 5, 5, 7, 7, 11], - "outeroffsets": [0, 1, 2, 2, 5, 7], - "outeroffsetslen": 6 - }, - "outputs": { - "tooffsets": [0, 1, 2, 2, 7, 11] - } - }, - { - "error": false, - "message": "", - "inputs": { - "inneroffsets": [0, 1, 2, 3, 4, 5, 6], - "outeroffsets": [0, 1, 3, 6], - "outeroffsetslen": 4 - }, - "outputs": { - "tooffsets": [0, 1, 3, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "inneroffsets": [0, 5, 10, 15, 20, 25, 30], - "outeroffsets": [0, 3, 6], - "outeroffsetslen": 3 - }, - "outputs": { - "tooffsets": [0, 15, 30] - } - }, - { - "error": false, - "message": "", - "inputs": { - "inneroffsets": [0, 2, 6], - "outeroffsets": [0, 1, 1, 1, 2], - "outeroffsetslen": 5 - }, - "outputs": { - "tooffsets": [0, 2, 2, 2, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "inneroffsets": [0, 0, 2, 6], - "outeroffsets": [0, 2, 2, 2, 3], - "outeroffsetslen": 5 - }, - "outputs": { - "tooffsets": [0, 2, 2, 2, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "inneroffsets": [0, 0, 0, 2, 6], - "outeroffsets": [0, 3, 3, 3, 4], - "outeroffsetslen": 5 - }, - "outputs": { - "tooffsets": [0, 2, 2, 2, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "inneroffsets": [0, 0, 0, 0, 2, 7, 7], - "outeroffsets": [0, 4, 4, 4, 6], - "outeroffsetslen": 5 - }, - "outputs": { - "tooffsets": [0, 2, 2, 2, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "inneroffsets": [0, 3, 5, 6, 6], - "outeroffsets": [0, 1, 2, 3, 4], - "outeroffsetslen": 5 - }, - "outputs": { - "tooffsets": [0, 3, 5, 6, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "inneroffsets": [0, 7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 77, 84, 91, 98, 105, 112, 119, 126, 133, 140, 147, 154, 161, 168, 175, 182, 189, 196, 203, 210], - "outeroffsets": [0, 5, 10, 15, 20, 25, 30], - "outeroffsetslen": 7 - }, - "outputs": { - "tooffsets": [0, 35, 70, 105, 140, 175, 210] - } - }, - { - "error": false, - "message": "", - "inputs": { - "inneroffsets": [0, 2, 4, 6, 8, 10, 12, 13, 14, 15, 16], - "outeroffsets": [0, 2, 4, 6, 8, 10], - "outeroffsetslen": 6 - }, - "outputs": { - "tooffsets": [0, 4, 8, 12, 14, 16] - } - }, - { - "error": false, - "message": "", - "inputs": { - "inneroffsets": [0, 3, 5, 6, 6, 10], - "outeroffsets": [0, 2, 2, 3, 5], - "outeroffsetslen": 5 - }, - "outputs": { - "tooffsets": [0, 5, 5, 6, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "inneroffsets": [0, 3, 3, 5, 6, 6, 10], - "outeroffsets": [0, 3, 3, 4, 6], - "outeroffsetslen": 5 - }, - "outputs": { - "tooffsets": [0, 5, 5, 6, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "inneroffsets": [0, 3, 3, 3, 5, 6, 6, 10], - "outeroffsets": [0, 4, 4, 5, 7], - "outeroffsetslen": 5 - }, - "outputs": { - "tooffsets": [0, 5, 5, 6, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "inneroffsets": [0, 3, 3, 5, 5, 8], - "outeroffsets": [0, 3, 3, 5], - "outeroffsetslen": 4 - }, - "outputs": { - "tooffsets": [0, 5, 5, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "inneroffsets": [0, 3, 6, 9, 12, 14, 16], - "outeroffsets": [0, 2, 4, 5, 6, 6, 6], - "outeroffsetslen": 7 - }, - "outputs": { - "tooffsets": [0, 6, 12, 14, 16, 16, 16] - } - }, - { - "error": false, - "message": "", - "inputs": { - "inneroffsets": [0, 2, 4, 6, 8, 10], - "outeroffsets": [0, 3, 3, 5], - "outeroffsetslen": 4 - }, - "outputs": { - "tooffsets": [0, 6, 6, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "inneroffsets": [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20], - "outeroffsets": [0, 3, 3, 5, 8, 8, 10], - "outeroffsetslen": 7 - }, - "outputs": { - "tooffsets": [0, 6, 6, 10, 16, 16, 20] - } - }, - { - "error": false, - "message": "", - "inputs": { - "inneroffsets": [0, 4, 4, 4, 4, 6, 7, 7, 12, 12], - "outeroffsets": [0, 5, 5, 6, 9], - "outeroffsetslen": 5 - }, - "outputs": { - "tooffsets": [0, 6, 6, 7, 12] - } - }, - { - "error": false, - "message": "", - "inputs": { - "inneroffsets": [0, 3, 6, 9, 11, 13, 14], - "outeroffsets": [0, 3, 5, 6], - "outeroffsetslen": 4 - }, - "outputs": { - "tooffsets": [0, 9, 13, 14] - } - }, - { - "error": false, - "message": "", - "inputs": { - "inneroffsets": [0, 3, 5, 6, 6], - "outeroffsets": [1, 2, 3, 4], - "outeroffsetslen": 4 - }, - "outputs": { - "tooffsets": [3, 5, 6, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "inneroffsets": [0, 3, 3, 5, 6, 6, 10], - "outeroffsets": [3, 3, 4, 6], - "outeroffsetslen": 4 - }, - "outputs": { - "tooffsets": [5, 5, 6, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "inneroffsets": [0, 3, 3, 3, 5, 6, 6, 10], - "outeroffsets": [4, 4, 5, 7], - "outeroffsetslen": 4 - }, - "outputs": { - "tooffsets": [5, 5, 6, 10] - } - } - ] + "inputs": { + "fromptr": [101,31,53,2,103,37,59,3,107,41,61,5,109,43,67,7,113,47,71,11], + "outlength": 15, + "offsets": [0,2,4,6,8,10,10,10,10,10,10,12,14,16,18,20] + }, + "outputs": { + "toptr": [3131,106,3811,177,4387,1,1,1,1,1,305,4687,469,5311,781] + }, + "error": false }, { - "name": "awkward_ListOffsetArray_toRegularArray", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [], - "offsetslength": 0 - }, - "outputs": { - "size": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0], - "offsetslength": 1 - }, - "outputs": { - "size": [0] - } - }, - { - "error": true, - "message": "offsets must be monotonically increasing", - "inputs": { - "fromoffsets": [0, -1, -2], - "offsetslength": 3 - }, - "outputs": { - "size": [-1] - } - }, - { - "error": true, - "message": "cannot convert to RegularArray because subarray lengths are not regular", - "inputs": { - "fromoffsets": [0, 2, 5], - "offsetslength": 3 - }, - "outputs": { - "size": [-1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 0, 0, 0], - "offsetslength": 4 - }, - "outputs": { - "size": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 1, 2, 3], - "offsetslength": 4 - }, - "outputs": { - "size": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 2, 4], - "offsetslength": 3 - }, - "outputs": { - "size": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 2, 4, 6], - "offsetslength": 4 - }, - "outputs": { - "size": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 4], - "offsetslength": 2 - }, - "outputs": { - "size": [4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 5, 10], - "offsetslength": 3 - }, - "outputs": { - "size": [5] - } - } - ] + "inputs": { + "fromptr": [101,31,73,13,53,2,103,37,79,17,59,3,107,41,83,19,61,5,109,43,89,23,67,7,113,47,97,29,71,11], + "outlength": 15, + "offsets": [0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30] + }, + "outputs": { + "toptr": [3131,949,106,3811,1343,177,4387,1577,305,4687,2047,469,5311,2813,781] + }, + "error": false }, { - "name": "awkward_ListOffsetArray_rpad_axis1", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [], - "fromlength": 0, - "target": 0 - }, - "outputs": { - "toindex": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 0], - "fromlength": 1, - "target": 2 - }, - "outputs": { - "toindex": [-1, -1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [1, 3], - "fromlength": 1, - "target": 3 - }, - "outputs": { - "toindex": [1, 2, -1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 1, 2, 3, 5, 7, 11], - "fromlength": 6, - "target": 3 - }, - "outputs": { - "toindex": [0, -1, -1, 1, -1, -1, 2, -1, -1, 3, 4, -1, 5, 6, -1, 7, 8, 9, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 1, 2, 3, 5, 7, 11], - "fromlength": 6, - "target": 2 - }, - "outputs": { - "toindex": [0, -1, 1, -1, 2, -1, 3, 4, 5, 6, 7, 8, 9, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 1, 2, 3, 5, 7, 11], - "fromlength": 6, - "target": 1 - }, - "outputs": { - "toindex": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 1, 2, 3, 4], - "fromlength": 4, - "target": 0 - }, - "outputs": { - "toindex": [0, 1, 2, 3] - } - } - ] + "inputs": { + "fromptr": [2,17,-1,7,29,3,19,11,31,13,37], + "outlength": 12, + "offsets": [0,2,4,4,5,5,5,5,5,5,7,9,11] + }, + "outputs": { + "toptr": [34,-7,1,29,1,1,1,1,1,57,341,481] + }, + "error": false }, { - "name": "awkward_ListOffsetArray_rpad_length_axis1", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [], - "fromlength": 0, - "target": 0 - }, - "outputs": { - "tolength": [0], - "tooffsets": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 0], - "fromlength": 1, - "target": 3 - }, - "outputs": { - "tolength": [3], - "tooffsets": [0, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [1, 3], - "fromlength": 1, - "target": 3 - }, - "outputs": { - "tolength": [3], - "tooffsets": [0, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 1, 2, 3, 5, 7, 11], - "fromlength": 6, - "target": 3 - }, - "outputs": { - "tolength": [19], - "tooffsets": [0, 3, 6, 9, 12, 15, 19] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 1, 2, 3, 4], - "fromlength": 4, - "target": 0 - }, - "outputs": { - "tolength": [4], - "tooffsets": [0, 1, 2, 3, 4] - } - } - ] + "inputs": { + "fromptr": [2,17,-1,7,29,3,19,11,31,13,37], + "outlength": 12, + "offsets": [0,2,4,4,4,4,4,5,5,5,7,9,11] + }, + "outputs": { + "toptr": [34,-7,1,1,1,1,29,1,1,57,341,481] + }, + "error": false }, { - "name": "awkward_MaskedArray_getitem_next_jagged_project", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "index": [], - "length": 0, - "starts_in": [], - "stops_in": [] - }, - "outputs": { - "starts_out": [], - "stops_out": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 2, 3], - "length": 4, - "starts_in": [0, 2, 3, 3], - "stops_in": [2, 3, 3, 3] - }, - "outputs": { - "starts_out": [0, 2, 3, 3], - "stops_out": [2, 3, 3, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 2, 3], - "length": 4, - "starts_in": [0, 2, 3, 3], - "stops_in": [2, 3, 3, 5] - }, - "outputs": { - "starts_out": [0, 2, 3, 3], - "stops_out": [2, 3, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 2, 3], - "length": 4, - "starts_in": [0, 2, 3, 3], - "stops_in": [2, 3, 3, 6] - }, - "outputs": { - "starts_out": [0, 2, 3, 3], - "stops_out": [2, 3, 3, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 2, 3], - "length": 4, - "starts_in": [0, 2, 3, 4], - "stops_in": [2, 3, 4, 7] - }, - "outputs": { - "starts_out": [0, 2, 3, 4], - "stops_out": [2, 3, 4, 7] - } - } - ] + "inputs": { + "fromptr": [2,17,7,29,3,19,11,31,13,37], + "outlength": 12, + "offsets": [0,2,4,4,4,4,4,4,4,4,6,8,10] + }, + "outputs": { + "toptr": [34,203,1,1,1,1,1,1,1,57,341,481] + }, + "error": false }, { - "name": "awkward_ListOffsetArray_reduce_nonlocal_maxcount_offsetscopy_64", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "length": 0, - "offsets": [0] - }, - "outputs": { - "maxcount": [0], - "offsetscopy": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "offsets": [0, 2] - }, - "outputs": { - "maxcount": [2], - "offsetscopy": [0, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "offsets": [0, 2, 3, 5] - }, - "outputs": { - "maxcount": [2], - "offsetscopy": [0, 2, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "offsets": [0, 2, 4, 6] - }, - "outputs": { - "maxcount": [2], - "offsetscopy": [0, 2, 4, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "offsets": [0, 3, 3, 5] - }, - "outputs": { - "maxcount": [3], - "offsetscopy": [0, 3, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 6, - "offsets": [0, 3, 3, 5, 6, 8, 9] - }, - "outputs": { - "maxcount": [3], - "offsetscopy": [0, 3, 3, 5, 6, 8, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "offsets": [0, 3, 3, 5, 6, 9] - }, - "outputs": { - "maxcount": [3], - "offsetscopy": [0, 3, 3, 5, 6, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 6, - "offsets": [0, 3, 5, 5, 6, 8, 9] - }, - "outputs": { - "maxcount": [3], - "offsetscopy": [0, 3, 5, 5, 6, 8, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 6, - "offsets": [0, 3, 5, 6, 7, 7, 9] - }, - "outputs": { - "maxcount": [3], - "offsetscopy": [0, 3, 5, 6, 7, 7, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "offsets": [0, 3, 5, 6, 7, 9] - }, - "outputs": { - "maxcount": [3], - "offsetscopy": [0, 3, 5, 6, 7, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 6, - "offsets": [0, 3, 5, 7, 8, 9, 10] - }, - "outputs": { - "maxcount": [3], - "offsetscopy": [0, 3, 5, 7, 8, 9, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 2, - "offsets": [0, 3, 6] - }, - "outputs": { - "maxcount": [3], - "offsetscopy": [0, 3, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "offsets": [0, 3, 6, 9, 12, 15] - }, - "outputs": { - "maxcount": [3], - "offsetscopy": [0, 3, 6, 9, 12, 15] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 9, - "offsets": [0, 0, 1, 3, 6, 10, 13, 15, 16, 16] - }, - "outputs": { - "maxcount": [4], - "offsetscopy": [0, 0, 1, 3, 6, 10, 13, 15, 16, 16] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "offsets": [0, 3, 3, 7] - }, - "outputs": { - "maxcount": [4], - "offsetscopy": [0, 3, 3, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "offsets": [0, 3, 6, 10] - }, - "outputs": { - "maxcount": [4], - "offsetscopy": [0, 3, 6, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "offsets": [0, 4, 4, 6] - }, - "outputs": { - "maxcount": [4], - "offsetscopy": [0, 4, 4, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 2, - "offsets": [0, 4, 6] - }, - "outputs": { - "maxcount": [4], - "offsetscopy": [0, 4, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "offsets": [0, 4, 8, 12] - }, - "outputs": { - "maxcount": [4], - "offsetscopy": [0, 4, 8, 12] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 6, - "offsets": [0, 3, 8, 13, 18, 23, 28] - }, - "outputs": { - "maxcount": [5], - "offsetscopy": [0, 3, 8, 13, 18, 23, 28] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 6, - "offsets": [0, 4, 9, 13, 18, 23, 28] - }, - "outputs": { - "maxcount": [5], - "offsetscopy": [0, 4, 9, 13, 18, 23, 28] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 6, - "offsets": [0, 4, 9, 14, 19, 24, 29] - }, - "outputs": { - "maxcount": [5], - "offsetscopy": [0, 4, 9, 14, 19, 24, 29] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 6, - "offsets": [0, 5, 10, 11, 12, 17, 22] - }, - "outputs": { - "maxcount": [5], - "offsetscopy": [0, 5, 10, 11, 12, 17, 22] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 6, - "offsets": [0, 5, 10, 14, 18, 23, 28] - }, - "outputs": { - "maxcount": [5], - "offsetscopy": [0, 5, 10, 14, 18, 23, 28] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "offsets": [0, 5, 10, 15] - }, - "outputs": { - "maxcount": [5], - "offsetscopy": [0, 5, 10, 15] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 6, - "offsets": [0, 5, 10, 15, 19, 24, 28] - }, - "outputs": { - "maxcount": [5], - "offsetscopy": [0, 5, 10, 15, 19, 24, 28] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 4, - "offsets": [0, 5, 10, 15, 20] - }, - "outputs": { - "maxcount": [5], - "offsetscopy": [0, 5, 10, 15, 20] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 6, - "offsets": [0, 5, 10, 15, 20, 24, 28] - }, - "outputs": { - "maxcount": [5], - "offsetscopy": [0, 5, 10, 15, 20, 24, 28] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "offsets": [0, 5, 10, 15, 20, 25] - }, - "outputs": { - "maxcount": [5], - "offsetscopy": [0, 5, 10, 15, 20, 25] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 6, - "offsets": [0, 5, 10, 15, 20, 25, 28] - }, - "outputs": { - "maxcount": [5], - "offsetscopy": [0, 5, 10, 15, 20, 25, 28] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 6, - "offsets": [0, 5, 10, 15, 20, 25, 29] - }, - "outputs": { - "maxcount": [5], - "offsetscopy": [0, 5, 10, 15, 20, 25, 29] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 6, - "offsets": [0, 5, 10, 15, 20, 25, 30] - }, - "outputs": { - "maxcount": [5], - "offsetscopy": [0, 5, 10, 15, 20, 25, 30] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 6, - "offsets": [0, 5, 6, 11, 16, 17, 22] - }, - "outputs": { - "maxcount": [5], - "offsetscopy": [0, 5, 6, 11, 16, 17, 22] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "offsets": [0, 5, 8, 11, 14, 17] - }, - "outputs": { - "maxcount": [5], - "offsetscopy": [0, 5, 8, 11, 14, 17] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "offsets": [0, 5, 9, 12] - }, - "outputs": { - "maxcount": [5], - "offsetscopy": [0, 5, 9, 12] - } - } - ] + "inputs": { + "fromptr": [2,17,-1,29,3,19,31,37], + "outlength": 12, + "offsets": [0,2,4,4,5,5,5,5,5,5,6,7,8] + }, + "outputs": { + "toptr": [34,-29,1,3,1,1,1,1,1,19,31,37] + }, + "error": false }, { - "name": "awkward_ByteMaskedArray_overlay_mask", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "length": 0, - "mymask": [], - "theirmask": [], - "validwhen": false - }, - "outputs": { - "tomask": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 2, - "mymask": [0, 0], - "theirmask": [0, 0], - "validwhen": false - }, - "outputs": { - "tomask": [0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 2, - "mymask": [0, 0], - "theirmask": [0, 0], - "validwhen": true - }, - "outputs": { - "tomask": [1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 2, - "mymask": [1, 0], - "theirmask": [0, 1], - "validwhen": false - }, - "outputs": { - "tomask": [1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 2, - "mymask": [0, 0], - "theirmask": [0, 1], - "validwhen": false - }, - "outputs": { - "tomask": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 2, - "mymask": [1, 0], - "theirmask": [0, 0], - "validwhen": false - }, - "outputs": { - "tomask": [1, 0] - } - } - ] + "inputs": { + "fromptr": [2,17,-1,29,3,19,31,37], + "outlength": 12, + "offsets": [0,2,4,4,4,4,4,5,5,5,6,7,8] + }, + "outputs": { + "toptr": [34,-29,1,1,1,1,3,1,1,19,31,37] + }, + "error": false }, { - "name": "awkward_IndexedArray_flatten_none2empty", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "offsets": [0], - "offsetslength": 1, - "outindex": [], - "outindexlength": 0 - }, - "outputs": { - "outoffsets": [0] - } - }, - { - "error": true, - "message": "flattening offset out of range", - "inputs": { - "offsets": [0], - "offsetslength": 0, - "outindex": [0], - "outindexlength": 1 - }, - "outputs": { - "outoffsets": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "offsets": [0, 1, 1, 6], - "offsetslength": 4, - "outindex": [0, 1, 2, 1], - "outindexlength": 4 - }, - "outputs": { - "outoffsets": [0, 1, 1, 6, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "offsets": [0, 1, 1, 6], - "offsetslength": 4, - "outindex": [0, 1, 2, 1], - "outindexlength": 4 - }, - "outputs": { - "outoffsets": [0, 1, 1, 6, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "offsets": [0, 1, 1, 6], - "offsetslength": 4, - "outindex": [0, -1, 2, -1], - "outindexlength": 4 - }, - "outputs": { - "outoffsets": [0, 1, 1, 6, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "offsets": [0, 3, 3, 5], - "offsetslength": 4, - "outindex": [0, 1, 1, 1, 2], - "outindexlength": 5 - }, - "outputs": { - "outoffsets": [0, 3, 3, 3, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "offsets": [0, 3, 3, 5], - "offsetslength": 4, - "outindex": [0, -1, 1, -1, 2], - "outindexlength": 5 - }, - "outputs": { - "outoffsets": [0, 3, 3, 3, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "offsets": [0, 3, 3, 4, 7], - "offsetslength": 5, - "outindex": [0, 1, 2, 1, 3], - "outindexlength": 5 - }, - "outputs": { - "outoffsets": [0, 3, 3, 4, 4, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "offsets": [0, 3, 3, 4, 7], - "offsetslength": 5, - "outindex": [0, -1, 2, -1, 3], - "outindexlength": 5 - }, - "outputs": { - "outoffsets": [0, 3, 3, 4, 4, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "offsets": [0, 3, 3, 5, 6, 6, 10], - "offsetslength": 7, - "outindex": [0, 1, 2, 3, 4, 1, 5], - "outindexlength": 7 - }, - "outputs": { - "outoffsets": [0, 3, 3, 5, 6, 6, 6, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "offsets": [0, 4, 4, 6], - "offsetslength": 4, - "outindex": [0, 1, 1, 1, 2, 1], - "outindexlength": 6 - }, - "outputs": { - "outoffsets": [0, 4, 4, 4, 4, 6, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "offsets": [0, 4, 4, 6, 7, 7, 12], - "offsetslength": 7, - "outindex": [0, 1, 1, 1, 2, 3, 4, 5, 1], - "outindexlength": 9 - }, - "outputs": { - "outoffsets": [0, 4, 4, 4, 4, 6, 7, 7, 12, 12] - } - }, - { - "error": false, - "message": "", - "inputs": { - "offsets": [0, 5, 5, 6, 9], - "offsetslength": 5, - "outindex": [0, 1, 1, 2, 1, 3], - "outindexlength": 6 - }, - "outputs": { - "outoffsets": [0, 5, 5, 5, 6, 6, 9] - } - - } - ] + "inputs": { + "fromptr": [2,17,29,3,19,31,37], + "outlength": 12, + "offsets": [0,2,4,4,4,4,4,4,4,4,5,6,7] + }, + "outputs": { + "toptr": [34,87,1,1,1,1,1,1,1,19,31,37] + }, + "error": false }, { - "name": "awkward_IndexedArray_reduce_next_64", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "index": [], - "length": 0, - "parents": [] - }, - "outputs": { - "nextcarry": [], - "nextparents": [], - "outindex": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1], - "length": 2, - "parents": [0, 0] - }, - "outputs": { - "nextcarry": [0, 1], - "nextparents": [0, 0], - "outindex": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 2, 3, 4, 5, 6], - "length": 7, - "parents": [0, 0, 2, 2, 3, 4, 4] - }, - "outputs": { - "nextcarry": [0, 1, 2, 3, 4, 5, 6], - "nextparents": [0, 0, 2, 2, 3, 4, 4], - "outindex": [0, 1, 2, 3, 4, 5, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 2], - "length": 2, - "parents": [0, 0] - }, - "outputs": { - "nextcarry": [1, 2], - "nextparents": [0, 0], - "outindex": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 2, 3], - "length": 3, - "parents": [0, 0, 0] - }, - "outputs": { - "nextcarry": [1, 2, 3], - "nextparents": [0, 0, 0], - "outindex": [0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 2, 3, 4], - "length": 4, - "parents": [0, 0, 0, 0] - }, - "outputs": { - "nextcarry": [1, 2, 3, 4], - "nextparents": [0, 0, 0, 0], - "outindex": [0, 1, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [2, 3], - "length": 2, - "parents": [0, 0] - }, - "outputs": { - "nextcarry": [2, 3], - "nextparents": [0, 0], - "outindex": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [2, 3, 4], - "length": 3, - "parents": [0, 0, 0] - }, - "outputs": { - "nextcarry": [2, 3, 4], - "nextparents": [0, 0, 0], - "outindex": [0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [3, 4], - "length": 2, - "parents": [0, 0] - }, - "outputs": { - "nextcarry": [3, 4], - "nextparents": [0, 0], - "outindex": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [4, 3, 2, 1, 0], - "length": 5, - "parents": [0, 0, 0, 0, 0] - }, - "outputs": { - "nextcarry": [4, 3, 2, 1, 0], - "nextparents": [0, 0, 0, 0, 0], - "outindex": [0, 1, 2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [5, 2, 4, 1, 3, 0], - "length": 6, - "parents": [0, 0, 1, 1, 2, 2] - }, - "outputs": { - "nextcarry": [5, 2, 4, 1, 3, 0], - "nextparents": [0, 0, 1, 1, 2, 2], - "outindex": [0, 1, 2, 3, 4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [5, 4, 3, 2, 1, 0], - "length": 6, - "parents": [0, 0, 0, 1, 1, 1] - }, - "outputs": { - "nextcarry": [5, 4, 3, 2, 1, 0], - "nextparents": [0, 0, 0, 1, 1, 1], - "outindex": [0, 1, 2, 3, 4, 5] - } - } - ] + "inputs": { + "fromptr": [2,17,-1,39,7,29,3,19,11,31,13,37], + "outlength": 12, + "offsets": [0,2,4,4,4,4,4,6,6,6,8,10,12] + }, + "outputs": { + "toptr": [34,-39,1,1,1,1,203,1,1,57,341,481] + }, + "error": false }, { - "name": "awkward_IndexedArray_simplify", - "status": true, - "tests": [ - { - "error": true, - "message": "index out of range", - "inputs": { - "innerindex": [], - "innerlength": 0, - "outerindex": [0, 3], - "outerlength": 2 - }, - "outputs": { - "toindex": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [], - "innerlength": 0, - "outerindex": [], - "outerlength": 0 - }, - "outputs": { - "toindex": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [0, 1], - "innerlength": 2, - "outerindex": [], - "outerlength": 0 - }, - "outputs": { - "toindex": [123, 123] - } - }, - { - "error": true, - "message": "index out of range", - "inputs": { - "innerindex": [0, 1], - "innerlength": 2, - "outerindex": [0, 3], - "outerlength": 2 - }, - "outputs": { - "toindex": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [0, 1], - "innerlength": 2, - "outerindex": [0, 1], - "outerlength": 2 - }, - "outputs": { - "toindex": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [0, 1, 1, 1, 2], - "innerlength": 5, - "outerindex": [0, 1, 2], - "outerlength": 3 - }, - "outputs": { - "toindex": [0, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [0, 1, 1, 1, 4], - "innerlength": 5, - "outerindex": [0, 1, 2], - "outerlength": 3 - }, - "outputs": { - "toindex": [0, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [0, 1, 2], - "innerlength": 3, - "outerindex": [0, 1, 1, 1, 1, 2], - "outerlength": 6 - }, - "outputs": { - "toindex": [0, 1, 1, 1, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [0, 1, 2, 1, 1], - "innerlength": 5, - "outerindex": [0, 1, 1, 1, 2], - "outerlength": 5 - }, - "outputs": { - "toindex": [0, 1, 1, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [0, 1, 1, 1, 2], - "innerlength": 5, - "outerindex": [0, 1, 2, 3, 4, 1, 1], - "outerlength": 7 - }, - "outputs": { - "toindex": [0, 1, 1, 1, 2, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [0, 1, 1, 1, 4], - "innerlength": 5, - "outerindex": [0, 1, 2, 3, 4, 1, 1], - "outerlength": 7 - }, - "outputs": { - "toindex": [0, 1, 1, 1, 4, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [0, 1, 2, 1], - "innerlength": 4, - "outerindex": [0, 1, 1, 2], - "outerlength": 4 - }, - "outputs": { - "toindex": [0, 1, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [0, 1, 1, 2], - "innerlength": 4, - "outerindex": [0, 1, 1, 3], - "outerlength": 4 - }, - "outputs": { - "toindex": [0, 1, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [0, 1, 1, 2], - "innerlength": 4, - "outerindex": [0, 1, 2, 3], - "outerlength": 4 - }, - "outputs": { - "toindex": [0, 1, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [0, 1, 2, 3], - "innerlength": 4, - "outerindex": [0, 1, 1, 2, 3], - "outerlength": 5 - }, - "outputs": { - "toindex": [0, 1, 1, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [0, 1, 2, 3], - "innerlength": 4, - "outerindex": [0, 1, 1, 3], - "outerlength": 4 - }, - "outputs": { - "toindex": [0, 1, 1, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [0, 1, 2], - "innerlength": 3, - "outerindex": [0, 1, 2], - "outerlength": 3 - }, - "outputs": { - "toindex": [0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [0, 1, 2, 3], - "innerlength": 4, - "outerindex": [0, 1, 2, 1, 3], - "outerlength": 5 - }, - "outputs": { - "toindex": [0, 1, 2, 1, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [0, 1, 2, 1, 4], - "innerlength": 5, - "outerindex": [0, 1, 2, 3, 4], - "outerlength": 5 - }, - "outputs": { - "toindex": [0, 1, 2, 1, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [0, 1, 2, 3, 4, 5, 6, 7, 1, 1], - "innerlength": 10, - "outerindex": [0, 1, 2, 3, 4, 1, 1, 1, 5, 6, 1, 1, 7, 8, 9, 1], - "outerlength": 16 - }, - "outputs": { - "toindex": [0, 1, 2, 3, 4, 1, 1, 1, 5, 6, 1, 1, 7, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [0, 1, 1, 2, 1, 1, 3, 4], - "innerlength": 8, - "outerindex": [2, 2, 1, 6, 5], - "outerlength": 5 - }, - "outputs": { - "toindex": [1, 1, 1, 3, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [13, 9, 13, 4, 8, 3, 15, 1, 16, 2, 8], - "innerlength": 11, - "outerindex": [0, 3, 6], - "outerlength": 3 - }, - "outputs": { - "toindex": [13, 4, 15] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [13, 9, 13, 4, 8, 3, 15, 1, 16, 2, 8], - "innerlength": 11, - "outerindex": [0, 1, 2, 3, 4, 5, 6, 7, 8], - "outerlength": 9 - }, - "outputs": { - "toindex": [13, 9, 13, 4, 8, 3, 15, 1, 16] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [13, 9, 13, 4, 8, 3, 15, 1, 16, 2, 8], - "innerlength": 11, - "outerindex": [0, 1, 3, 4, 6, 7], - "outerlength": 6 - }, - "outputs": { - "toindex": [13, 9, 4, 8, 15, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [2, 1, 1, 0], - "innerlength": 4, - "outerindex": [0, 1, 2, 1, 3], - "outerlength": 5 - }, - "outputs": { - "toindex": [2, 1, 1, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [3, 1, 1, 7], - "innerlength": 4, - "outerindex": [0, 1, 1, 2, 3], - "outerlength": 5 - }, - "outputs": { - "toindex": [3, 1, 1, 1, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [3, 1, 2, 1], - "innerlength": 4, - "outerindex": [0, 1, 2, 1, 3], - "outerlength": 5 - }, - "outputs": { - "toindex": [3, 1, 2, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [4, 3, 2, 1, 0], - "innerlength": 5, - "outerindex": [0], - "outerlength": 1 - }, - "outputs": { - "toindex": [4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [4, 3, 2, 1, 0], - "innerlength": 5, - "outerindex": [0, 1], - "outerlength": 2 - }, - "outputs": { - "toindex": [4, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [4, 5, 6, 7, 3, 1, 2, 0, 1, 1], - "innerlength": 10, - "outerindex": [0, 4, 5, 7], - "outerlength": 4 - }, - "outputs": { - "toindex": [4, 3, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [4, 3, 2, 1, 0], - "innerlength": 5, - "outerindex": [0, 1, 2], - "outerlength": 3 - }, - "outputs": { - "toindex": [4, 3, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [4, 3, 2, 1, 0], - "innerlength": 5, - "outerindex": [0, 1, 2, 3, 4], - "outerlength": 5 - }, - "outputs": { - "toindex": [4, 3, 2, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [4, 3, 2, 1, 0], - "innerlength": 5, - "outerindex": [0, 1, 2, 3], - "outerlength": 4 - }, - "outputs": { - "toindex": [4, 3, 2, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [0, 1, 1, 1, 2, 3, 4, 5, 6, 7], - "innerlength": 10, - "outerindex": [6, 7, 8, 9, 5, 1, 1, 1, 3, 4, 1, 1, 0, 1, 2, 1], - "outerlength": 16 - }, - "outputs": { - "toindex": [4, 5, 6, 7, 3, 1, 1, 1, 1, 2, 1, 1, 0, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [0, 1, 1, 1, 2, 3, 4, 5, 6, 7], - "innerlength": 10, - "outerindex": [6, 7, 8, 9, 5, 1, 1, 3, 4, 1, 0, 1, 2], - "outerlength": 13 - }, - "outputs": { - "toindex": [4, 5, 6, 7, 3, 1, 1, 1, 2, 1, 0, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [0, 1, 1, 1, 2, 3, 4, 5, 6, 7], - "innerlength": 10, - "outerindex": [6, 7, 8, 9, 5, 3, 4, 0, 1, 2], - "outerlength": 10 - }, - "outputs": { - "toindex": [4, 5, 6, 7, 3, 1, 2, 0, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [6, 5, 1, 3, 1, 1, 0], - "innerlength": 7, - "outerindex": [0, 2, 4, 6], - "outerlength": 4 - }, - "outputs": { - "toindex": [6, 1, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "innerindex": [6, 5, 4, 3, 2, 1, 0], - "innerlength": 7, - "outerindex": [0, 2, 4, 6], - "outerlength": 4 - }, - "outputs": { - "toindex": [6, 4, 2, 0] - } - } - ] + "inputs": { + "fromptr": [2,17,-1,39,29,3,19,31,37], + "outlength": 12, + "offsets": [0,2,4,4,4,4,4,6,6,6,7,8,9] + }, + "outputs": { + "toptr": [34,-39,1,1,1,1,87,1,1,19,31,37] + }, + "error": false }, { - "name": "awkward_IndexedArray_validity", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "index": [], - "isoption": true, - "lencontent": 3, - "length": 0 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [], - "isoption": true, - "lencontent": 0, - "length": 0 - }, - "outputs": {} - }, - { - "error": true, - "message": "index[i] >= len(content)", - "inputs": { - "index": [0, 1, 1, 1, 1, 3], - "isoption": true, - "lencontent": 0, - "length": 6 - }, - "outputs": {} - }, - { - "error": true, - "message": "index[i] >= len(content)", - "inputs": { - "index": [0, 1, 1, 1, 1, 3], - "isoption": true, - "lencontent": 3, - "length": 6 - }, - "outputs": {} - }, - { - "error": true, - "message": "index[i] < 0", - "inputs": { - "index": [2, -4, 4, 0, 8], - "isoption": false, - "lencontent": 10, - "length": 5 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 1, 1, 1, 2], - "isoption": true, - "lencontent": 3, - "length": 6 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 1, 1, 1], - "isoption": true, - "lencontent": 2, - "length": 5 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 1, 1, 2, 3, 4], - "isoption": true, - "lencontent": 5, - "length": 7 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 1, 1, 2, 3], - "isoption": true, - "lencontent": 4, - "length": 6 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 1, 1, 2], - "isoption": true, - "lencontent": 3, - "length": 5 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 1, 1], - "isoption": true, - "lencontent": 2, - "length": 4 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 1, 2, 1, 3], - "isoption": true, - "lencontent": 4, - "length": 6 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 1, 2, 1], - "isoption": true, - "lencontent": 3, - "length": 5 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 1, 2, 3, 1, 4, 5, 6], - "isoption": true, - "lencontent": 7, - "length": 9 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 1, 2, 3, 4, 1, 5], - "isoption": true, - "lencontent": 6, - "length": 8 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 1, 2, 3, 4, 5, 6, 7], - "isoption": true, - "lencontent": 8, - "length": 9 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 1, 2, 3, 4, 5], - "isoption": true, - "lencontent": 6, - "length": 7 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 1, 2, 3], - "isoption": true, - "lencontent": 4, - "length": 5 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 1, 2], - "isoption": true, - "lencontent": 3, - "length": 4 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 1], - "isoption": true, - "lencontent": 2, - "length": 3 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 2, 1, 1], - "isoption": true, - "lencontent": 3, - "length": 5 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 2, 1, 3, 1, 4], - "isoption": true, - "lencontent": 5, - "length": 7 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 2, 1, 3], - "isoption": true, - "lencontent": 4, - "length": 5 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 2, 1], - "isoption": true, - "lencontent": 3, - "length": 4 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 2, 3, 1, 4, 5, 6, 7, 8, 1, 9], - "isoption": true, - "lencontent": 10, - "length": 12 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 2, 3, 1, 4, 5, 6], - "isoption": true, - "lencontent": 7, - "length": 8 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 2, 3, 1, 4], - "isoption": true, - "lencontent": 5, - "length": 6 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 2, 3, 1], - "isoption": true, - "lencontent": 4, - "length": 5 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 0, 1, 1, 1], - "isoption": true, - "lencontent": 2, - "length": 5 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 0, 1, 1, 2], - "isoption": true, - "lencontent": 3, - "length": 5 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 0, 1, 2, 1, 3], - "isoption": true, - "lencontent": 4, - "length": 6 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 0, 1, 2, 1], - "isoption": true, - "lencontent": 3, - "length": 5 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 0, 1, 2, 3], - "isoption": true, - "lencontent": 4, - "length": 5 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 0, 1, 2], - "isoption": true, - "lencontent": 3, - "length": 4 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 1, 0, 1, 1], - "isoption": true, - "lencontent": 2, - "length": 5 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 1, 0, 1, 2], - "isoption": true, - "lencontent": 3, - "length": 5 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 1, 1, 0, 1], - "isoption": true, - "lencontent": 2, - "length": 5 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [1, 4, 4, 1, 0], - "isoption": true, - "lencontent": 10, - "length": 5 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [2, 1, 4, 0, 8], - "isoption": true, - "lencontent": 10, - "length": 5 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [2, 2, 0, 1, 4], - "isoption": true, - "lencontent": 5, - "length": 5 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [2, 4, 4, 0, 8], - "isoption": false, - "lencontent": 10, - "length": 5 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [6, 4, 4, 8, 0], - "isoption": false, - "lencontent": 10, - "length": 5 - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [6, 5, 4, 3, 2, 1, 0], - "isoption": false, - "lencontent": 7, - "length": 7 - }, - "outputs": {} - } - ] + "inputs": { + "fromptr": [2,17,7,29,3,19,11,31,5,23,13,37], + "outlength": 12, + "offsets": [0,2,4,6,6,6,6,6,6,6,8,10,12] + }, + "outputs": { + "toptr": [34,203,57,1,1,1,1,1,1,341,115,481] + }, + "error": false }, { - "name": "awkward_IndexedOptionArray_rpad_and_clip_mask_axis1", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "frommask": [], - "length": 0 - }, - "outputs": { - "toindex": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "frommask": [0, 0, 0, 0], - "length": 4 - }, - "outputs": { - "toindex": [0, 1, 2, 3] - } - } - ] + "inputs": { + "fromptr": [2,17,-1,39,7,29,3,19,11,31,13,37], + "outlength": 12, + "offsets": [0,2,4,4,6,6,6,6,6,6,8,10,12] + }, + "outputs": { + "toptr": [34,-39,1,203,1,1,1,1,1,57,341,481] + }, + "error": false }, { - "name": "awkward_index_rpad_and_clip_axis1", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "length": 0, - "target": 1 - }, - "outputs": { - "tostarts": [], - "tostops": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 4, - "target": 1 - }, - "outputs": { - "tostarts": [0, 1, 2, 3], - "tostops": [1, 2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "target": 1 - }, - "outputs": { - "tostarts": [0, 1, 2, 3, 4], - "tostops": [1, 2, 3, 4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 6, - "target": 1 - }, - "outputs": { - "tostarts": [0, 1, 2, 3, 4, 5], - "tostops": [1, 2, 3, 4, 5, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "target": 2 - }, - "outputs": { - "tostarts": [0, 2, 4], - "tostops": [2, 4, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 7, - "target": 2 - }, - "outputs": { - "tostarts": [0, 2, 4, 6, 8, 10, 12], - "tostops": [2, 4, 6, 8, 10, 12, 14] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 6, - "target": 2 - }, - "outputs": { - "tostarts": [0, 2, 4, 6, 8, 10], - "tostops": [2, 4, 6, 8, 10, 12] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "target": 2 - }, - "outputs": { - "tostarts": [0, 2, 4, 6, 8], - "tostops": [2, 4, 6, 8, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 6, - "target": 3 - }, - "outputs": { - "tostarts": [0, 3, 6, 9, 12, 15], - "tostops": [3, 6, 9, 12, 15, 18] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "target": 3 - }, - "outputs": { - "tostarts": [0, 3, 6, 9, 12], - "tostops": [3, 6, 9, 12, 15] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 6, - "target": 4 - }, - "outputs": { - "tostarts": [0, 4, 8, 12, 16, 20], - "tostops": [4, 8, 12, 16, 20, 24] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "target": 4 - }, - "outputs": { - "tostarts": [0, 4, 8, 12, 16], - "tostops": [4, 8, 12, 16, 20] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 6, - "target": 5 - }, - "outputs": { - "tostarts": [0, 5, 10, 15, 20, 25], - "tostops": [5, 10, 15, 20, 25, 30] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "target": 5 - }, - "outputs": { - "tostarts": [0, 5, 10, 15, 20], - "tostops": [5, 10, 15, 20, 25] - } - } - ] + "inputs": { + "fromptr": [2,17,-1,39,29,3,19,31,37], + "outlength": 12, + "offsets": [0,2,4,4,6,6,6,6,6,6,7,8,9] + }, + "outputs": { + "toptr": [34,-39,1,87,1,1,1,1,1,19,31,37] + }, + "error": false }, { - "name": "awkward_ListArray_combinations", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromindex": [], - "length": 0, - "n": 0, - "replacement": false, - "starts": [], - "stops": [] - }, - "outputs": { - "tocarry": [[], []], - "toindex": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 0], - "length": 1, - "n": 2, - "replacement": false, - "starts": [0], - "stops": [2] - }, - "outputs": { - "tocarry": [[0], [1]], - "toindex": [1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 0, 0], - "length": 2, - "n": 2, - "replacement": false, - "starts": [0, 2], - "stops": [2, 3] - }, - "outputs": { - "tocarry": [[0], [1]], - "toindex": [1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 0, 0], - "length": 2, - "n": 2, - "replacement": true, - "starts": [0, 2], - "stops": [2, 3] - }, - "outputs": { - "tocarry": [[0, 0, 1, 2], [0, 1, 1, 2]], - "toindex": [4, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 0, 0, 0, 0, 0], - "length": 5, - "n": 2, - "replacement": false, - "starts": [0, 4, 4, 7, 8], - "stops": [4, 4, 7, 8, 13] - }, - "outputs": { - "tocarry": [[0, 0, 0, 1, 1, 2, 4, 4, 5, 8, 8, 8, 8, 9, 9, 9, 10, 10, 11], [1, 2, 3, 2, 3, 3, 5, 6, 6, 9, 10, 11, 12, 10, 11, 12, 11, 12, 12]], - "toindex": [19, 19] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 0, 0, 0, 0, 0], - "length": 5, - "n": 2, - "replacement": true, - "starts": [0, 4, 4, 7, 8], - "stops": [4, 4, 7, 8, 13] - }, - "outputs": { - "tocarry": [[0, 0, 0, 0, 1, 1, 1, 2, 2, 3, 4, 4, 4, 5, 5, 6, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 11, 11, 12], [0, 1, 2, 3, 1, 2, 3, 2, 3, 3, 4, 5, 6, 5, 6, 6, 7, 8, 9, 10, 11, 12, 9, 10, 11, 12, 10, 11, 12, 11, 12, 12]], - "toindex": [32, 32] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 0, 0, 0, 0, 0], - "length": 5, - "n": 2, - "replacement": false, - "starts": [0, 3, 3, 10, 10], - "stops": [3, 3, 5, 10, 13] - }, - "outputs": { - "tocarry": [[0, 0, 1, 3, 10, 10, 11], [1, 2, 2, 4, 11, 12, 12]], - "toindex": [7, 7] - } - } - ] + "inputs": { + "fromptr": [2,17,7,23,13,29,3,19,11,5], + "outlength": 7, + "offsets": [0,2,4,5,7,8,8,10] + }, + "outputs": { + "toptr": [34,161,13,87,19,1,55] + }, + "error": false }, { - "name": "awkward_RegularArray_combinations_64", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromindex": [], - "length": 0, - "n": 0, - "replacement": false, - "size": 0 - }, - "outputs": { - "tocarry": [[], []], - "toindex": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 0], - "length": 1, - "n": 2, - "replacement": false, - "size": 2 - }, - "outputs": { - "tocarry": [[0], [1]], - "toindex": [1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 0], - "length": 1, - "n": 2, - "replacement": true, - "size": 2 - }, - "outputs": { - "tocarry": [[0, 0, 1], [0, 1, 1]], - "toindex": [3, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 0, 0, 0], - "length": 3, - "n": 2, - "replacement": false, - "size": 2 - }, - "outputs": { - "tocarry": [[0, 2, 4], [1, 3, 5]], - "toindex": [3, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 0, 0, 0, 0, 0], - "length": 5, - "n": 2, - "replacement": true, - "size": 3 - }, - "outputs": { - "tocarry": [[0, 0, 0, 1, 1, 2, 3, 3, 3, 4, 4, 5, 6, 6, 6, 7, 7, 8, 9, 9, 9, 10, 10, 11, 12, 12, 12, 13, 13, 14], [0, 1, 2, 1, 2, 2, 3, 4, 5, 4, 5, 5, 6, 7, 8, 7, 8, 8, 9, 10, 11, 10, 11, 11, 12, 13, 14, 13, 14, 14]], - "toindex": [30, 30] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 0, 0, 0, 0, 0], - "length": 5, - "n": 2, - "replacement": false, - "size": 3 - }, - "outputs": { - "tocarry": [[0, 0, 1, 3, 3, 4, 6, 6, 7, 9, 9, 10, 12, 12, 13], [1, 2, 2, 4, 5, 5, 7, 8, 8, 10, 11, 11, 13, 14, 14]], - "toindex": [15, 15] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 0, 0, 0, 0, 0], - "length": 5, - "n": 2, - "replacement": false, - "size": 4 - }, - "outputs": { - "tocarry": [[0, 0, 0, 1, 1, 2, 4, 4, 4, 5, 5, 6, 8, 8, 8, 9, 9, 10, 12, 12, 12, 13, 13, 14, 16, 16, 16, 17, 17, 18], [1, 2, 3, 2, 3, 3, 5, 6, 7, 6, 7, 7, 9, 10, 11, 10, 11, 11, 13, 14, 15, 14, 15, 15, 17, 18, 19, 18, 19, 19]], - "toindex": [30, 30] - } - } - ] + "inputs": { + "fromptr": [2,17,23,7,13,3,19,11,5], + "outlength": 10, + "offsets": [0,2,4,5,6,6,6,7,8,8,9] + }, + "outputs": { + "toptr": [34,161,13,3,1,1,19,11,1,5] + }, + "error": false }, { - "name": "awkward_ListArray_combinations_length", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "length": 0, - "n": 0, - "replacement": false, - "starts": [], - "stops": [] - }, - "outputs": { - "tooffsets": [0], - "totallen": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "n": 3, - "replacement": false, - "starts": [0, 4, 4, 7, 8], - "stops": [4, 4, 7, 8, 13] - }, - "outputs": { - "tooffsets": [0, 4, 4, 5, 5, 15], - "totallen": [15] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "n": 2, - "replacement": false, - "starts": [0], - "stops": [1] - }, - "outputs": { - "tooffsets": [0, 0], - "totallen": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "n": 2, - "replacement": false, - "starts": [0], - "stops": [2] - }, - "outputs": { - "tooffsets": [0, 1], - "totallen": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "n": 2, - "replacement": false, - "starts": [0, 4, 4, 7, 8], - "stops": [4, 4, 7, 8, 13] - }, - "outputs": { - "tooffsets": [0, 6, 6, 9, 9, 19], - "totallen": [19] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "n": 2, - "replacement": true, - "starts": [0, 4, 4, 7, 8], - "stops": [4, 4, 7, 8, 13] - }, - "outputs": { - "tooffsets": [0, 10, 10, 16, 17, 32], - "totallen": [32] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "n": 2, - "replacement": false, - "starts": [0, 3, 3], - "stops": [3, 3, 5] - }, - "outputs": { - "tooffsets": [0, 3, 3, 4], - "totallen": [4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "n": 2, - "replacement": false, - "starts": [0, 3, 5], - "stops": [3, 3, 7] - }, - "outputs": { - "tooffsets": [0, 3, 3, 4], - "totallen": [4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "n": 3, - "replacement": true, - "starts": [0, 4, 4, 7, 8], - "stops": [4, 4, 7, 8, 13] - }, - "outputs": { - "tooffsets": [0, 20, 20, 30, 31, 66], - "totallen": [66] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "n": 2, - "replacement": false, - "starts": [0, 3, 3, 10, 10], - "stops": [3, 3, 5, 10, 13] - }, - "outputs": { - "tooffsets": [0, 3, 3, 4, 4, 7], - "totallen": [7] - } - } - ] + "inputs": { + "fromptr": [2,11,17,7,19,3,13,23,5], + "outlength": 5, + "offsets": [0,3,5,6,8,9] + }, + "outputs": { + "toptr": [374,133,3,299,5] + }, + "error": false }, { - "name": "awkward_ListArray_getitem_jagged_carrylen", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "slicestarts": [], - "slicestops": [], - "sliceouterlen": 0 - }, - "outputs": { - "carrylen": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "slicestarts": [0, 2], - "slicestops": [0, 2], - "sliceouterlen": 2 - }, - "outputs": { - "carrylen": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "slicestarts": [2], - "slicestops": [4], - "sliceouterlen": 1 - }, - "outputs": { - "carrylen": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "slicestarts": [1], - "slicestops": [1], - "sliceouterlen": 1 - }, - "outputs": { - "carrylen": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 4, - "slicestarts": [0, 0, 0, 0], - "slicestops": [0, 0, 0, 0] - }, - "outputs": { - "carrylen": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 3, - "slicestarts": [0, 0, 0], - "slicestops": [0, 0, 0] - }, - "outputs": { - "carrylen": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 4, - "slicestarts": [0, 0, 1, 1], - "slicestops": [0, 1, 1, 1] - }, - "outputs": { - "carrylen": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 6, - "slicestarts": [0, 1, 3, 5, 6, 8], - "slicestops": [1, 3, 5, 6, 8, 10] - }, - "outputs": { - "carrylen": [10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 5, - "slicestarts": [0, 5, 5, 6, 8], - "slicestops": [5, 5, 6, 8, 10] - }, - "outputs": { - "carrylen": [10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 4, - "slicestarts": [0, 3, 4, 7], - "slicestops": [3, 4, 7, 11] - }, - "outputs": { - "carrylen": [11] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 6, - "slicestarts": [0, 1, 3, 6, 7, 9], - "slicestops": [1, 3, 6, 7, 9, 12] - }, - "outputs": { - "carrylen": [12] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 3, - "slicestarts": [0, 0, 0], - "slicestops": [0, 0, 2] - }, - "outputs": { - "carrylen": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 3, - "slicestarts": [0, 2, 2], - "slicestops": [2, 2, 2] - }, - "outputs": { - "carrylen": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 3, - "slicestarts": [0, 1, 1], - "slicestops": [1, 1, 3] - }, - "outputs": { - "carrylen": [3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 5, - "slicestarts": [0, 1, 1, 2, 2], - "slicestops": [1, 1, 2, 2, 3] - }, - "outputs": { - "carrylen": [3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 3, - "slicestarts": [0, 2, 2], - "slicestops": [2, 2, 3] - }, - "outputs": { - "carrylen": [3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 4, - "slicestarts": [0, 2, 3, 3], - "slicestops": [2, 3, 3, 3] - }, - "outputs": { - "carrylen": [3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 5, - "slicestarts": [0, 2, 2, 2, 2], - "slicestops": [2, 2, 2, 2, 4] - }, - "outputs": { - "carrylen": [4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 3, - "slicestarts": [0, 2, 2], - "slicestops": [2, 2, 4] - }, - "outputs": { - "carrylen": [4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 2, - "slicestarts": [0, 3], - "slicestops": [3, 4] - }, - "outputs": { - "carrylen": [4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 5, - "slicestarts": [0, 1, 1, 3, 3], - "slicestops": [1, 1, 3, 3, 5] - }, - "outputs": { - "carrylen": [5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 3, - "slicestarts": [0, 2, 3], - "slicestops": [2, 3, 5] - }, - "outputs": { - "carrylen": [5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 4, - "slicestarts": [0, 2, 3, 3], - "slicestops": [2, 3, 3, 5] - }, - "outputs": { - "carrylen": [5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 3, - "slicestarts": [0, 3, 3], - "slicestops": [3, 3, 5] - }, - "outputs": { - "carrylen": [5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 3, - "slicestarts": [0, 4, 5], - "slicestops": [4, 4, 6] - }, - "outputs": { - "carrylen": [5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 4, - "slicestarts": [0, 1, 3, 4], - "slicestops": [1, 3, 4, 6] - }, - "outputs": { - "carrylen": [6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 5, - "slicestarts": [0, 2, 2, 2, 2], - "slicestops": [2, 2, 2, 2, 6] - }, - "outputs": { - "carrylen": [6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 2, - "slicestarts": [0, 3], - "slicestops": [3, 6] - }, - "outputs": { - "carrylen": [6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 3, - "slicestarts": [0, 4, 5], - "slicestops": [4, 5, 6] - }, - "outputs": { - "carrylen": [6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 3, - "slicestarts": [0, 4, 6], - "slicestops": [4, 6, 6] - }, - "outputs": { - "carrylen": [6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 3, - "slicestarts": [0, 2, 5], - "slicestops": [2, 5, 7] - }, - "outputs": { - "carrylen": [7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 5, - "slicestarts": [0, 3, 3, 3, 4], - "slicestops": [3, 3, 3, 4, 7] - }, - "outputs": { - "carrylen": [7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 4, - "slicestarts": [0, 1, 4, 5], - "slicestops": [1, 4, 5, 8] - }, - "outputs": { - "carrylen": [8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 7, - "slicestarts": [0, 2, 2, 4, 4, 5, 5], - "slicestops": [2, 2, 4, 4, 5, 5, 8] - }, - "outputs": { - "carrylen": [8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 5, - "slicestarts": [0, 2, 2, 4, 5], - "slicestops": [2, 2, 4, 5, 8] - }, - "outputs": { - "carrylen": [8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 4, - "slicestarts": [0, 3, 0, 3], - "slicestops": [3, 4, 3, 4] - }, - "outputs": { - "carrylen": [8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 5, - "slicestarts": [0, 3, 3, 4, 5], - "slicestops": [3, 3, 4, 5, 8] - }, - "outputs": { - "carrylen": [8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 5, - "slicestarts": [0, 2, 2, 4, 5], - "slicestops": [2, 2, 4, 5, 9] - }, - "outputs": { - "carrylen": [9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "sliceouterlen": 5, - "slicestarts": [0, 3, 3, 5, 6], - "slicestops": [3, 3, 5, 6, 9] - }, - "outputs": { - "carrylen": [9] - } - } - ] + "inputs": { + "fromptr": [101,73,53,31,13,2,103,79,59,37,17,3,107,83,61,41,19,5,109,89,67,43,23,7,113,97,71,47,29,11], + "outlength": 10, + "offsets": [0,3,6,9,12,15,18,21,24,27,30] + }, + "outputs": { + "toptr": [390769,806,480083,1887,541741,3895,649967,6923,778231,14993] + }, + "error": false }, { - "name": "awkward_ListArray_getitem_jagged_descend", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [], - "fromstops": [], - "sliceouterlen": 0, - "slicestarts": [], - "slicestops": [] - }, - "outputs": { - "tooffsets": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0], - "fromstops": [2], - "sliceouterlen": 1, - "slicestarts": [0], - "slicestops": [2] - }, - "outputs": { - "tooffsets": [0, 2] - } - }, - { - "error": true, - "message": "jagged slice inner length differs from array inner length", - "inputs": { - "fromstarts": [0, 2], - "fromstops": [2, 4], - "sliceouterlen": 2, - "slicestarts": [0, 2], - "slicestops": [3, 4] - }, - "outputs": { - "tooffsets": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 2], - "fromstops": [2, 4], - "sliceouterlen": 2, - "slicestarts": [0, 2], - "slicestops": [2, 4] - }, - "outputs": { - "tooffsets": [0, 2, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3, 3, 4], - "fromstops": [3, 3, 4, 5], - "sliceouterlen": 4, - "slicestarts": [0, 3, 3, 4], - "slicestops": [3, 3, 4, 5] - }, - "outputs": { - "tooffsets": [0, 3, 3, 4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3, 3], - "fromstops": [3, 3, 5], - "sliceouterlen": 3, - "slicestarts": [0, 3, 3], - "slicestops": [3, 3, 5] - }, - "outputs": { - "tooffsets": [0, 3, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3], - "fromstops": [3, 6], - "sliceouterlen": 2, - "slicestarts": [0, 3], - "slicestops": [3, 6] - }, - "outputs": { - "tooffsets": [0, 3, 6] - } - } - ] + "inputs": { + "fromptr": [2,11,23,3,13,29,5,17,31,7,19,37], + "outlength": 4, + "offsets": [0,3,6,9,12] + }, + "outputs": { + "toptr": [506,1131,2635,4921] + }, + "error": false }, { - "name": "awkward_ListArray_getitem_jagged_expand", - "status": true, - "tests": [ - { - "error": true, - "message": "cannot fit jagged slice into nested list", - "inputs": { - "fromstarts": [0, 2], - "fromstops": [2, 4], - "jaggedsize": 1, - "length": 2, - "singleoffsets": [0, 3, 4] - }, - "outputs": { - "multistarts": [0, 3, 0, 3], - "multistops": [3, 4, 3, 4], - "tocarry": [0, 1, 2, 3] - } - }, - { - "error": true, - "message": "stops[i] < starts[i]", - "inputs": { - "fromstarts": [5], - "fromstops": [4], - "jaggedsize": 2, - "length": 1, - "singleoffsets": [0, 3, 4] - }, - "outputs": { - "multistarts": [0, 3], - "multistops": [3, 4], - "tocarry": [2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 2], - "fromstops": [2, 4], - "jaggedsize": 2, - "length": 2, - "singleoffsets": [0, 3, 4] - }, - "outputs": { - "multistarts": [0, 3, 0, 3], - "multistops": [3, 4, 3, 4], - "tocarry": [0, 1, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [], - "fromstops": [], - "jaggedsize": 0, - "length": 0, - "singleoffsets": [] - }, - "outputs": { - "multistarts": [], - "multistops": [], - "tocarry": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [2], - "fromstops": [4], - "jaggedsize": 2, - "length": 1, - "singleoffsets": [0, 3, 4] - }, - "outputs": { - "multistarts": [0, 3], - "multistops": [3, 4], - "tocarry": [2, 3] - } - } - ] + "inputs": { + "fromptr": [101,53,31,2,103,59,37,3,107,61,41,5,109,67,43,7,113,71,47,11], + "outlength": 10, + "offsets": [0,2,4,6,8,10,12,14,16,18,20] + }, + "outputs": { + "toptr": [5353,62,6077,111,6527,205,7303,301,8023,517] + }, + "error": false }, { - "name": "awkward_ListArray_getitem_next_range_carrylength", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [], - "fromstops": [], - "lenstarts": 0, - "start": 0, - "stop": 0, - "step": 0 - }, - "outputs": { - "carrylength": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 2, 2, 3, 5], - "fromstops": [2, 2, 3, 5, 7], - "lenstarts": 5, - "start": 0, - "stop": 3, - "step": 1 - }, - "outputs": { - "carrylength": [7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 2, 2, 3, 5], - "fromstops": [2, 2, 3, 5, 7], - "lenstarts": 5, - "start": 7, - "stop": 0, - "step": -1 - }, - "outputs": { - "carrylength": [3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 2, 2, 3, 5], - "fromstops": [2, 2, 3, 5, 7], - "lenstarts": 5, - "start": 0, - "stop": 2, - "step": 0 - }, - "outputs": { - "carrylength": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 2, 2, 3, 5], - "fromstops": [2, 2, 3, 5, 7], - "lenstarts": 5, - "start": 0, - "stop": 6, - "step": 2 - }, - "outputs": { - "carrylength": [4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 2, 2, 3, 5], - "fromstops": [2, 2, 3, 5, 7], - "lenstarts": 5, - "start": 7, - "stop": 0, - "step": -2 - }, - "outputs": { - "carrylength": [3] - } - } - ] + "inputs": { + "fromptr": [1,2,3], + "outlength": 1, + "offsets": [0,3] + }, + "outputs": { + "toptr": [6] + }, + "error": false }, { - "name": "awkward_ListArray_getitem_next_range", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [], - "fromstops": [], - "lenstarts": 0, - "start": 0, - "stop": 0, - "step": 0 - }, - "outputs": { - "tooffsets": [0], - "tocarry": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 2, 2, 3, 5], - "fromstops": [2, 2, 3, 5, 7], - "lenstarts": 5, - "start": 0, - "stop": 3, - "step": 1 - }, - "outputs": { - "tooffsets": [0, 2, 2, 3, 5, 7], - "tocarry": [0, 1, 2, 3, 4, 5, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 2, 2, 3, 5], - "fromstops": [2, 2, 3, 5, 7], - "lenstarts": 5, - "start": 7, - "stop": 0, - "step": -1 - }, - "outputs": { - "tooffsets": [0, 1, 1, 1, 2, 3], - "tocarry": [1, 4, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 2, 2, 3, 5], - "fromstops": [2, 2, 3, 5, 7], - "lenstarts": 5, - "start": 0, - "stop": 2, - "step": 0 - }, - "outputs": { - "tooffsets": [0, 0, 0, 0, 0, 0], - "tocarry": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3, 3, 5, 7, 9], - "fromstops": [3, 3, 5, 7, 9, 11], - "lenstarts": 6, - "start": 0, - "stop": 6, - "step": 2 - }, - "outputs": { - "tooffsets": [0, 2, 2, 3, 4, 5, 6], - "tocarry": [0, 2, 3, 5, 7, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3, 3, 5, 7, 9], - "fromstops": [3, 3, 5, 7, 9, 11], - "lenstarts": 6, - "start": 2, - "stop": 6, - "step": 2 - }, - "outputs": { - "tooffsets": [0, 1, 1, 1, 1, 1, 1], - "tocarry": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3, 3, 5, 7, 9], - "fromstops": [3, 3, 5, 7, 9, 11], - "lenstarts": 6, - "start": 6, - "stop": 2, - "step": -2 - }, - "outputs": { - "tooffsets": [0, 0, 0, 0, 0, 0, 0], - "tocarry": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3, 3, 5, 7, 9], - "fromstops": [3, 3, 5, 7, 9, 11], - "lenstarts": 6, - "start": 0, - "stop": 6, - "step": -2 - }, - "outputs": { - "tooffsets": [0, 0, 0, 0, 0, 0, 0], - "tocarry": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 2, 2, 3, 5], - "fromstops": [2, 2, 3, 5, 7], - "lenstarts": 5, - "start": 7, - "stop": 0, - "step": -2 - }, - "outputs": { - "tooffsets": [0, 1, 1, 1, 2, 3], - "tocarry": [1, 4, 6] - } - } - ] + "inputs": { + "fromptr": [2,31,53,101,3,37,59,103,5,41,61,107,7,43,67,109,11,47,71,113], + "outlength": 10, + "offsets": [0,2,4,6,8,10,12,14,16,18,20] + }, + "outputs": { + "toptr": [62,5353,111,6077,205,6527,301,7303,517,8023] + }, + "error": false }, { - "name": "awkward_ListArray_getitem_next_array", - "status": true, - "tests": [ - { - "error": true, - "message": "index out of range", - "inputs": { - "fromarray": [-3, 0, 1, 1], - "fromstarts": [0], - "fromstops": [2], - "lenarray": 4, - "lencontent": 3, - "lenstarts": 1 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [0, 0, 1, 1] - } - }, - { - "error": true, - "message": "stops[i] < starts[i]", - "inputs": { - "fromarray": [0, 3], - "fromstarts": [5, 4, 8], - "fromstops": [4, 8, 12], - "lenarray": 2, - "lencontent": 13, - "lenstarts": 3 - }, - "outputs": { - "toadvanced": [0, 1, 0, 1, 0, 1], - "tocarry": [0, 3, 4, 7, 8, 11] - } - }, - { - "error": true, - "message": "stops[i] > len(content)", - "inputs": { - "fromarray": [0, 3], - "fromstarts": [4, 8], - "fromstops": [8, 14], - "lenarray": 2, - "lencontent": 13, - "lenstarts": 2 - }, - "outputs": { - "toadvanced": [0, 1, 0, 1], - "tocarry": [4, 7, 8, 11] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 0, 1, 1], - "fromstarts": [0], - "fromstops": [2], - "lenarray": 4, - "lencontent": 3, - "lenstarts": 1 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [0, 0, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 3], - "fromstarts": [0, 4, 8], - "fromstops": [4, 8, 12], - "lenarray": 2, - "lencontent": 13, - "lenstarts": 3 - }, - "outputs": { - "toadvanced": [0, 1, 0, 1, 0, 1], - "tocarry": [0, 3, 4, 7, 8, 11] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [1, 1, 0, 0], - "fromstarts": [0], - "fromstops": [2], - "lenarray": 4, - "lencontent": 3, - "lenstarts": 1 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [1, 1, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [], - "fromstarts": [], - "fromstops": [], - "lenarray": 0, - "lencontent": 0, - "lenstarts": 0 - }, - "outputs": { - "toadvanced": [], - "tocarry": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [0, 3], - "fromstarts": [4, 8], - "fromstops": [8, 12], - "lenarray": 2, - "lencontent": 13, - "lenstarts": 2 - }, - "outputs": { - "toadvanced": [0, 1, 0, 1], - "tocarry": [4, 7, 8, 11] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromarray": [2, 1, 1, 0], - "fromstarts": [6], - "fromstops": [10], - "lenarray": 4, - "lencontent": 10, - "lenstarts": 1 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [8, 7, 7, 6] - } - } - ] + "inputs": { + "fromptr": [2,3,5,7,11,13,17,19], + "outlength": 7, + "offsets": [0,2,3,4,5,6,7,8] + }, + "outputs": { + "toptr": [6,5,7,11,13,17,19] + }, + "error": false }, { - "name": "awkward_ListArray_min_range", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [], - "fromstops": [], - "lenstarts": 0 - }, - "outputs": { - "tomin": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3, 4, 5, 8], - "fromstops": [3, 3, 6, 8, 9], - "lenstarts": 5 - }, - "outputs": { - "tomin": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3, 5], - "fromstops": [3, 3, 7], - "lenstarts": 3 - }, - "outputs": { - "tomin": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [6, 5, 3, 3, 0], - "fromstops": [10, 6, 5, 3, 3], - "lenstarts": 5 - }, - "outputs": { - "tomin": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [6, 5, 3, 0], - "fromstops": [10, 6, 5, 3], - "lenstarts": 4 - }, - "outputs": { - "tomin": [1] - } - } - ] + "inputs": { + "fromptr": [2,3,5,7,11,13,17,19], + "outlength": 6, + "offsets": [0,2,3,4,5,6,8] + }, + "outputs": { + "toptr": [6,5,7,11,13,323] + }, + "error": false }, { - "name": "awkward_ListArray_rpad_and_clip_length_axis1", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [], - "fromstops": [], - "lenstarts": 0, - "target": 1 - }, - "outputs": { - "tomin": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3, 4, 5, 8], - "fromstops": [3, 3, 6, 8, 9], - "lenstarts": 5, - "target": 1 - }, - "outputs": { - "tomin": [10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [6, 5, 3, 0], - "fromstops": [10, 6, 5, 3], - "lenstarts": 4, - "target": 1 - }, - "outputs": { - "tomin": [10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3, 4, 5, 8], - "fromstops": [3, 3, 6, 8, 9], - "lenstarts": 5, - "target": 2 - }, - "outputs": { - "tomin": [12] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [6, 5, 3, 0], - "fromstops": [10, 6, 5, 3], - "lenstarts": 4, - "target": 3 - }, - "outputs": { - "tomin": [13] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [6, 5, 3, 3, 0], - "fromstops": [10, 6, 5, 3, 3], - "lenstarts": 5, - "target": 2 - }, - "outputs": { - "tomin": [13] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3, 4, 5, 8], - "fromstops": [3, 3, 6, 8, 9], - "lenstarts": 5, - "target": 3 - }, - "outputs": { - "tomin": [15] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [6, 5, 3, 0], - "fromstops": [10, 6, 5, 3], - "lenstarts": 4, - "target": 4 - }, - "outputs": { - "tomin": [16] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [6, 5, 3, 3, 0], - "fromstops": [10, 6, 5, 3, 3], - "lenstarts": 5, - "target": 3 - }, - "outputs": { - "tomin": [16] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3, 4, 5, 8], - "fromstops": [3, 3, 6, 8, 9], - "lenstarts": 5, - "target": 4 - }, - "outputs": { - "tomin": [20] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [6, 5, 3, 3, 0], - "fromstops": [10, 6, 5, 3, 3], - "lenstarts": 5, - "target": 4 - }, - "outputs": { - "tomin": [20] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3, 5], - "fromstops": [3, 3, 7], - "lenstarts": 3, - "target": 3 - }, - "outputs": { - "tomin": [9] - } - } - ] + "inputs": { + "fromptr": [1,2,3,4,5,6], + "outlength": 1, + "offsets": [0,6] + }, + "outputs": { + "toptr": [720] + }, + "error": false }, { - "name": "awkward_ListArray_validity", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "lencontent": 0, - "length": 0, - "starts": [], - "stops": [] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 2, - "length": 0, - "starts": [], - "stops": [] - }, - "outputs": {} - }, - { - "error": true, - "message": "stop[i] > len(content)", - "inputs": { - "lencontent": 0, - "length": 3, - "starts": [0, 0, 1], - "stops": [0, 1, 5] - }, - "outputs": {} - }, - { - "error": true, - "message": "start[i] > stop[i]", - "inputs": { - "lencontent": 1, - "length": 3, - "starts": [1, 0, 1], - "stops": [0, 1, 1] - }, - "outputs": {} - }, - { - "error": true, - "message": "stop[i] > len(content)", - "inputs": { - "lencontent": 4, - "length": 3, - "starts": [0, 0, 1], - "stops": [0, 1, 5] - }, - "outputs": {} - }, - { - "error": true, - "message": "start[i] < 0", - "inputs": { - "lencontent": 1, - "length": 4, - "starts": [-1, 0, 1, 1], - "stops": [0, 1, 1, 1] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 0, - "length": 5, - "starts": [0, 0, 0, 0, 0], - "stops": [0, 0, 0, 0, 0] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 0, - "length": 4, - "starts": [0, 0, 0, 0], - "stops": [0, 0, 0, 0] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 0, - "length": 3, - "starts": [0, 0, 0], - "stops": [0, 0, 0] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 1, - "length": 3, - "starts": [0, 0, 1], - "stops": [0, 1, 1] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 4, - "length": 3, - "starts": [0, 0, 1], - "stops": [0, 1, 4] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 1, - "length": 4, - "starts": [0, 0, 1, 1], - "stops": [0, 1, 1, 1] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 6, - "length": 4, - "starts": [0, 0, 1, 3], - "stops": [0, 1, 3, 6] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 10, - "length": 5, - "starts": [0, 0, 1, 3, 6], - "stops": [0, 1, 3, 6, 10] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 19, - "length": 8, - "starts": [0, 0, 3, 3, 8, 12, 12, 16], - "stops": [0, 3, 3, 8, 12, 12, 16, 19] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 19, - "length": 9, - "starts": [0, 0, 3, 3, 8, 12, 12, 16, 19], - "stops": [0, 3, 3, 8, 12, 12, 16, 19, 19] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 6, - "length": 3, - "starts": [0, 1, 3], - "stops": [1, 3, 6] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 15, - "length": 5, - "starts": [0, 1, 3, 6, 10], - "stops": [1, 3, 6, 10, 15] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 12, - "length": 6, - "starts": [0, 1, 3, 6, 7, 9], - "stops": [1, 3, 6, 7, 9, 12] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 8, - "length": 4, - "starts": [0, 1, 4, 5], - "stops": [1, 4, 5, 8] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 3, - "length": 3, - "starts": [0, 2, 2], - "stops": [2, 2, 3] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 4, - "length": 3, - "starts": [0, 2, 2], - "stops": [2, 2, 4] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 3, - "length": 2, - "starts": [0, 2], - "stops": [2, 3] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 4, - "length": 2, - "starts": [0, 2], - "stops": [2, 4] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 8, - "length": 7, - "starts": [0, 2, 2, 4, 4, 5, 5], - "stops": [2, 2, 4, 4, 5, 5, 8] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 6, - "length": 5, - "starts": [0, 2, 2, 4, 5], - "stops": [2, 2, 4, 5, 6] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 9, - "length": 5, - "starts": [0, 2, 2, 4, 5], - "stops": [2, 2, 4, 5, 9] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 3, - "length": 3, - "starts": [0, 2, 3], - "stops": [2, 3, 3] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 4, - "length": 3, - "starts": [0, 2, 3], - "stops": [2, 3, 4] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 5, - "length": 3, - "starts": [0, 2, 3], - "stops": [2, 3, 5] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 6, - "length": 3, - "starts": [0, 2, 3], - "stops": [2, 3, 6] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 5, - "length": 4, - "starts": [0, 2, 3, 3], - "stops": [2, 3, 3, 5] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 7, - "length": 4, - "starts": [0, 2, 3, 4], - "stops": [2, 3, 4, 7] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 6, - "length": 3, - "starts": [0, 2, 4], - "stops": [2, 4, 6] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 7, - "length": 3, - "starts": [0, 2, 5], - "stops": [2, 5, 7] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 8, - "length": 3, - "starts": [0, 2, 6], - "stops": [2, 6, 8] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 5, - "length": 3, - "starts": [0, 3, 3], - "stops": [3, 3, 5] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 7, - "length": 3, - "starts": [0, 3, 3], - "stops": [3, 3, 7] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 8, - "length": 3, - "starts": [0, 3, 3], - "stops": [3, 3, 8] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 4, - "length": 2, - "starts": [0, 3], - "stops": [3, 4] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 9, - "length": 4, - "starts": [0, 3, 3, 5], - "stops": [3, 3, 5, 9] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 11, - "length": 6, - "starts": [0, 3, 3, 5, 6, 10], - "stops": [3, 3, 5, 6, 10, 11] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 9, - "length": 5, - "starts": [0, 3, 3, 5, 6], - "stops": [3, 3, 5, 6, 9] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 9, - "length": 6, - "starts": [0, 3, 3, 5, 6, 8], - "stops": [3, 3, 5, 6, 8, 9] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 6, - "length": 2, - "starts": [0, 3], - "stops": [3, 6] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 7, - "length": 2, - "starts": [0, 3], - "stops": [3, 7] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 11, - "length": 4, - "starts": [0, 3, 4, 7], - "stops": [3, 4, 7, 11] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 25, - "length": 7, - "starts": [0, 3, 6, 11, 14, 17, 20], - "stops": [3, 6, 11, 14, 17, 20, 25] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 20, - "length": 6, - "starts": [0, 3, 6, 11, 14, 17], - "stops": [3, 6, 11, 14, 17, 20] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 19, - "length": 5, - "starts": [0, 3, 6, 11, 15], - "stops": [3, 6, 11, 15, 19] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 10, - "length": 3, - "starts": [0, 3, 6], - "stops": [3, 6, 10] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 11, - "length": 3, - "starts": [0, 3, 6], - "stops": [3, 6, 11] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 21, - "length": 9, - "starts": [0, 3, 6, 6, 10, 14, 14, 18, 21], - "stops": [3, 6, 6, 10, 14, 14, 18, 21, 21] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 21, - "length": 8, - "starts": [0, 3, 6, 6, 10, 14, 14, 18], - "stops": [3, 6, 6, 10, 14, 14, 18, 21] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 22, - "length": 9, - "starts": [0, 3, 6, 6, 11, 15, 15, 19, 22], - "stops": [3, 6, 6, 11, 15, 15, 19, 22, 22] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 22, - "length": 8, - "starts": [0, 3, 6, 6, 11, 15, 15, 19], - "stops": [3, 6, 6, 11, 15, 15, 19, 22] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 24, - "length": 9, - "starts": [0, 3, 6, 8, 13, 17, 17, 21, 24], - "stops": [3, 6, 8, 13, 17, 17, 21, 24, 24] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 24, - "length": 8, - "starts": [0, 3, 6, 8, 13, 17, 17, 21], - "stops": [3, 6, 8, 13, 17, 17, 21, 24] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 9, - "length": 3, - "starts": [0, 3, 7], - "stops": [3, 7, 9] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 10, - "length": 2, - "starts": [0, 4], - "stops": [4, 10] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 6, - "length": 3, - "starts": [0, 4, 4], - "stops": [4, 4, 6] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 10, - "length": 3, - "starts": [0, 4, 6], - "stops": [4, 6, 10] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 14, - "length": 4, - "starts": [0, 4, 6, 9], - "stops": [4, 6, 9, 14] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 11, - "length": 6, - "starts": [0, 4, 7, 7, 9, 9], - "stops": [4, 7, 7, 9, 9, 11] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 12, - "length": 3, - "starts": [0, 4, 8], - "stops": [4, 8, 12] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 30, - "length": 6, - "starts": [0, 5, 10, 15, 20, 25], - "stops": [5, 10, 15, 20, 25, 30] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 10, - "length": 2, - "starts": [0, 5], - "stops": [5, 10] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "lencontent": 12, - "length": 6, - "starts": [3, 0, 999, 2, 6, 10], - "stops": [7, 3, 999, 4, 6, 12] - }, - "outputs": {} - } - ] + "inputs": { + "fromptr": [2,13,31,53,73,101,3,17,37,59,79,103,5,19,41,61,83,107,7,23,43,67,89,109,11,29,47,71,97,113], + "outlength": 10, + "offsets": [0,3,6,9,12,15,18,21,24,27,30] + }, + "outputs": { + "toptr": [806,390769,1887,480083,3895,541741,6923,649967,14993,778231] + }, + "error": false + } + ] + }, + { + "name": "awkward_reduce_min", + "status": true, + "tests": [ + { + "inputs": { + "fromptr": [], + "identity": 9223372036854775807, + "outlength": 0, + "offsets": [0] + }, + "outputs": { + "toptr": [] + }, + "error": false }, { - "name": "awkward_ListArray_getitem_jagged_apply", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "contentlen": 0, - "fromstarts": [], - "fromstops": [], - "sliceindex": [], - "sliceinnerlen": 0, - "sliceouterlen": 0, - "slicestarts": [], - "slicestops": [] - }, - "outputs": { - "tocarry": [], - "tooffsets": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "contentlen": 0, - "fromstarts": [0, 0, 0, 0], - "fromstops": [0, 0, 0, 0], - "sliceindex": [], - "sliceinnerlen": 0, - "sliceouterlen": 4, - "slicestarts": [0, 0, 0, 0], - "slicestops": [0, 0, 0, 0] - }, - "outputs": { - "tocarry": [], - "tooffsets": [0, 0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "contentlen": 5, - "fromstarts": [0, 3, 3], - "fromstops": [3, 3, 5], - "sliceindex": [], - "sliceinnerlen": 0, - "sliceouterlen": 3, - "slicestarts": [0, 0, 0], - "slicestops": [0, 0, 0] - }, - "outputs": { - "tocarry": [], - "tooffsets": [0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "contentlen": 5, - "fromstarts": [0, 3, 3], - "fromstops": [3, 3, 5], - "sliceindex": [0, 1], - "sliceinnerlen": 2, - "sliceouterlen": 3, - "slicestarts": [0, 0, 0], - "slicestops": [0, 0, 2] - }, - "outputs": { - "tocarry": [3, 4], - "tooffsets": [0, 0, 0, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "contentlen": 5, - "fromstarts": [0, 3, 3], - "fromstops": [3, 3, 5], - "sliceindex": [0, 0, 1], - "sliceinnerlen": 3, - "sliceouterlen": 3, - "slicestarts": [0, 1, 1], - "slicestops": [1, 1, 3] - }, - "outputs": { - "tocarry": [0, 3, 4], - "tooffsets": [0, 1, 1, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "contentlen": 5, - "fromstarts": [0, 3, 3], - "fromstops": [3, 3, 5], - "sliceindex": [2, 0, 1], - "sliceinnerlen": 3, - "sliceouterlen": 3, - "slicestarts": [0, 1, 1], - "slicestops": [1, 1, 3] - }, - "outputs": { - "tocarry": [2, 3, 4], - "tooffsets": [0, 1, 1, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "contentlen": 10, - "fromstarts": [0, 3, 3, 5, 6], - "fromstops": [3, 3, 5, 6, 10], - "sliceindex": [1, 0, 1, 0, 3], - "sliceinnerlen": 5, - "sliceouterlen": 5, - "slicestarts": [0, 1, 1, 3, 3], - "slicestops": [1, 1, 3, 3, 5] - }, - "outputs": { - "tocarry": [1, 3, 4, 6, 9], - "tooffsets": [0, 1, 1, 3, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "contentlen": 5, - "fromstarts": [0, 3, 3], - "fromstops": [3, 3, 5], - "sliceindex": [0, 1], - "sliceinnerlen": 2, - "sliceouterlen": 3, - "slicestarts": [0, 2, 2], - "slicestops": [2, 2, 2] - }, - "outputs": { - "tocarry": [0, 1], - "tooffsets": [0, 2, 2, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "contentlen": 4, - "fromstarts": [0, 1, 1, 1, 1], - "fromstops": [1, 1, 1, 1, 4], - "sliceindex": [0, 0, 2, 1, 1, 2], - "sliceinnerlen": 6, - "sliceouterlen": 5, - "slicestarts": [0, 2, 2, 2, 2], - "slicestops": [2, 2, 2, 2, 6] - }, - "outputs": { - "tocarry": [0, 0, 3, 2, 2, 3], - "tooffsets": [0, 2, 2, 2, 2, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "contentlen": 5, - "fromstarts": [0, 3, 3], - "fromstops": [3, 3, 5], - "sliceindex": [0, 1, 0], - "sliceinnerlen": 3, - "sliceouterlen": 3, - "slicestarts": [0, 2, 2], - "slicestops": [2, 2, 3] - }, - "outputs": { - "tocarry": [0, 1, 3], - "tooffsets": [0, 2, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "contentlen": 5, - "fromstarts": [0, 3, 3], - "fromstops": [3, 3, 5], - "sliceindex": [0, 1, 1], - "sliceinnerlen": 3, - "sliceouterlen": 3, - "slicestarts": [0, 2, 2], - "slicestops": [2, 2, 3] - }, - "outputs": { - "tocarry": [0, 1, 4], - "tooffsets": [0, 2, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "contentlen": 5, - "fromstarts": [0, 3, 3], - "fromstops": [3, 3, 5], - "sliceindex": [2, 0, 1], - "sliceinnerlen": 3, - "sliceouterlen": 3, - "slicestarts": [0, 2, 2], - "slicestops": [2, 2, 3] - }, - "outputs": { - "tocarry": [2, 0, 4], - "tooffsets": [0, 2, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "contentlen": 5, - "fromstarts": [0, 3, 3], - "fromstops": [3, 3, 5], - "sliceindex": [0, 2, 0, 1], - "sliceinnerlen": 4, - "sliceouterlen": 3, - "slicestarts": [0, 2, 2], - "slicestops": [2, 2, 4] - }, - "outputs": { - "tocarry": [0, 2, 3, 4], - "tooffsets": [0, 2, 2, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "contentlen": 9, - "fromstarts": [0, 3, 3, 5, 6], - "fromstops": [3, 3, 5, 6, 9], - "sliceindex": [0, 2, 0, 1, 0, 0, 1, 2], - "sliceinnerlen": 8, - "sliceouterlen": 5, - "slicestarts": [0, 2, 2, 4, 5], - "slicestops": [2, 2, 4, 5, 8] - }, - "outputs": { - "tocarry": [0, 2, 3, 4, 5, 6, 7, 8], - "tooffsets": [0, 2, 2, 4, 5, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "contentlen": 9, - "fromstarts": [0, 3, 3, 5, 6], - "fromstops": [3, 3, 5, 6, 9], - "sliceindex": [1, 2, 0, 1, 0, 0, 1, 2], - "sliceinnerlen": 8, - "sliceouterlen": 5, - "slicestarts": [0, 2, 2, 4, 5], - "slicestops": [2, 2, 4, 5, 8] - }, - "outputs": { - "tocarry": [1, 2, 3, 4, 5, 6, 7, 8], - "tooffsets": [0, 2, 2, 4, 5, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "contentlen": 9, - "fromstarts": [0, 3, 3, 5, 6], - "fromstops": [3, 3, 5, 6, 9], - "sliceindex": [0, 1, 2, 0, 0, 1, 2], - "sliceinnerlen": 7, - "sliceouterlen": 5, - "slicestarts": [0, 3, 3, 3, 4], - "slicestops": [3, 3, 3, 4, 7] - }, - "outputs": { - "tocarry": [0, 1, 2, 5, 6, 7, 8], - "tooffsets": [0, 3, 3, 3, 4, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "contentlen": 9, - "fromstarts": [0, 3, 3, 5, 6], - "fromstops": [3, 3, 5, 6, 9], - "sliceindex": [0, 1, 2, 1, 0, 0, 1, 2], - "sliceinnerlen": 8, - "sliceouterlen": 5, - "slicestarts": [0, 3, 3, 4, 5], - "slicestops": [3, 3, 4, 5, 8] - }, - "outputs": { - "tocarry": [0, 1, 2, 4, 5, 6, 7, 8], - "tooffsets": [0, 3, 3, 4, 5, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "contentlen": 5, - "fromstarts": [0, 3, 3], - "fromstops": [3, 3, 5], - "sliceindex": [0, 1, 2, 0, 1], - "sliceinnerlen": 5, - "sliceouterlen": 3, - "slicestarts": [0, 3, 3], - "slicestops": [3, 3, 5] - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4], - "tooffsets": [0, 3, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "contentlen": 5, - "fromstarts": [0, 3, 3], - "fromstops": [3, 3, 5], - "sliceindex": [2, 1, 0, 0, 1], - "sliceinnerlen": 5, - "sliceouterlen": 3, - "slicestarts": [0, 3, 3], - "slicestops": [3, 3, 5] - }, - "outputs": { - "tocarry": [2, 1, 0, 3, 4], - "tooffsets": [0, 3, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "contentlen": 9, - "fromstarts": [0, 3, 3, 5, 6], - "fromstops": [3, 3, 5, 6, 9], - "sliceindex": [0, 1, 2, 0, 1, 0, 0, 1, 2], - "sliceinnerlen": 9, - "sliceouterlen": 5, - "slicestarts": [0, 3, 3, 5, 6], - "slicestops": [3, 3, 5, 6, 9] - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 5, 6, 7, 8], - "tooffsets": [0, 3, 3, 5, 6, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "contentlen": 6, - "fromstarts": [0, 3], - "fromstops": [3, 6], - "sliceindex": [2, 1, 0, 2, 1, 0], - "sliceinnerlen": 6, - "sliceouterlen": 2, - "slicestarts": [0, 3], - "slicestops": [3, 6] - }, - "outputs": { - "tocarry": [2, 1, 0, 5, 4, 3], - "tooffsets": [0, 3, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "contentlen": 6, - "fromstarts": [0, 3, 5], - "fromstops": [3, 5, 6], - "sliceindex": [2, 1, 1, 0, 1, 0], - "sliceinnerlen": 6, - "sliceouterlen": 3, - "slicestarts": [0, 4, 5], - "slicestops": [4, 4, 6] - }, - "outputs": { - "tocarry": [2, 1, 1, 0, 5], - "tooffsets": [0, 4, 4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "contentlen": 6, - "fromstarts": [0, 3, 5], - "fromstops": [3, 5, 6], - "sliceindex": [2, 1, 1, 0, 1, 0], - "sliceinnerlen": 6, - "sliceouterlen": 3, - "slicestarts": [0, 4, 5], - "slicestops": [4, 5, 6] - }, - "outputs": { - "tocarry": [2, 1, 1, 0, 4, 5], - "tooffsets": [0, 4, 5, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "contentlen": 8, - "fromstarts": [0, 4, 7], - "fromstops": [4, 7, 8], - "sliceindex": [3, 2, 2, 1, 1, 2], - "sliceinnerlen": 6, - "sliceouterlen": 3, - "slicestarts": [0, 4, 6], - "slicestops": [4, 6, 6] - }, - "outputs": { - "tocarry": [3, 2, 2, 1, 5, 6], - "tooffsets": [0, 4, 6, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "contentlen": 13, - "fromstarts": [0, 4, 4, 7, 8], - "fromstops": [4, 4, 7, 8, 13], - "sliceindex": [3, 2, 1, 1, 0, 1, 0, 0, 1, 2], - "sliceinnerlen": 10, - "sliceouterlen": 5, - "slicestarts": [0, 5, 5, 6, 8], - "slicestops": [5, 5, 6, 8, 10] - }, - "outputs": { - "tocarry": [3, 2, 1, 1, 0, 5, 7, 7, 9, 10], - "tooffsets": [0, 5, 5, 6, 8, 10] - } - } - ] + "inputs": { + "fromptr": [0,4,1,1,5,6], + "identity": 9223372036854775807, + "outlength": 4, + "offsets": [0,2,5,5,6] + }, + "outputs": { + "toptr": [0,1,9223372036854775807,6] + }, + "error": false }, { - "name": "awkward_UnionArray_regular_index", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromtags": [], - "length": 0, - "size": 0 - }, - "outputs": { - "current": [], - "toindex": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromtags": [0, 1, 0, 1, 0, 1], - "length": 6, - "size": 2 - }, - "outputs": { - "current": [3, 3], - "toindex": [0, 0, 1, 1, 2, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromtags": [1, 0, 1, 1], - "length": 4, - "size": 2 - }, - "outputs": { - "current": [1, 3], - "toindex": [0, 0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromtags": [1, 1, 0, 0, 1, 0, 1, 1], - "length": 8, - "size": 2 - }, - "outputs": { - "current": [3, 5], - "toindex": [0, 1, 0, 1, 2, 2, 3, 4] - } - } - ] + "inputs": { + "fromptr": [0,1,3,4,5,6], + "identity": 9223372036854775807, + "outlength": 4, + "offsets": [0,2,3,3,6] + }, + "outputs": { + "toptr": [0,3,9223372036854775807,4] + }, + "error": false }, { - "name": "awkward_UnionArray_regular_index_getsize", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromtags": [], - "length": 0 - }, - "outputs": { - "size": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromtags": [0], - "length": 1 - }, - "outputs": { - "size": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromtags": [-1], - "length": 1 - }, - "outputs": { - "size": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromtags": [0, 1, 0, 1, 0, 1], - "length": 6 - }, - "outputs": { - "size": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromtags": [1, 0, 1, 1], - "length": 4 - }, - "outputs": { - "size": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromtags": [1, 1, 0, 0, 1, 0, 1, 1], - "length": 8 - }, - "outputs": { - "size": [2] - } - } - ] + "inputs": { + "fromptr": [1,3,2,5,3,7,3,1,5,8,1,9,4,2,7,10,2,4,7,2], + "identity": 9223372036854775807, + "outlength": 5, + "offsets": [0,4,8,12,16,20] + }, + "outputs": { + "toptr": [1,1,1,2,2] + }, + "error": false }, { - "name": "awkward_IndexedArray_fill", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "base": 0, - "fromindex": [], - "length": 0, - "toindexoffset": 0 - }, - "outputs": { - "toindex": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "base": 0, - "fromindex": [0, 1, -1, -1, 4], - "length": 5, - "toindexoffset": 0 - }, - "outputs": { - "toindex": [0, 1, -1, -1, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "base": 0, - "fromindex": [0, 1, 2, 3, -1], - "length": 5, - "toindexoffset": 0 - }, - "outputs": { - "toindex": [0, 1, 2, 3, -1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "base": 0, - "fromindex": [0, 1, 2], - "length": 3, - "toindexoffset": 0 - }, - "outputs": { - "toindex": [0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "base": 0, - "fromindex": [-1, -1, 0, -1, 1, 2], - "length": 6, - "toindexoffset": 0 - }, - "outputs": { - "toindex": [-1, -1, 0, -1, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "base": 0, - "fromindex": [2, 0, -1, 0, 1, 2], - "length": 6, - "toindexoffset": 0 - }, - "outputs": { - "toindex": [2, 0, -1, 0, 1, 2] - } - } - ] + "inputs": { + "fromptr": [1,2,3], + "identity": 9223372036854775807, + "outlength": 1, + "offsets": [0,3] + }, + "outputs": { + "toptr": [1] + }, + "error": false }, { - "name": "awkward_IndexedArray_fill_count", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "base": 0, - "length": 0, - "toindexoffset": 0 - }, - "outputs": { - "toindex": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "base": 0, - "length": 5, - "toindexoffset": 0 - }, - "outputs": { - "toindex": [0, 1, 2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "base": 0, - "length": 3, - "toindexoffset": 3 - }, - "outputs": { - "toindex": [123, 123, 123, 0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "base": 3, - "length": 4, - "toindexoffset": 0 - }, - "outputs": { - "toindex": [3, 4, 5, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "base": 3, - "length": 5, - "toindexoffset": 2 - }, - "outputs": { - "toindex": [123, 123, 3, 4, 5, 6, 7] - } - } - ] + "inputs": { + "fromptr": [1,2,3,4,5,6], + "identity": 9223372036854775807, + "outlength": 1, + "offsets": [0,6] + }, + "outputs": { + "toptr": [1] + }, + "error": false }, { - "name": "awkward_ListArray_fill", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "base": 0, - "fromstarts": [], - "fromstops": [], - "length": 0, - "tostartsoffset": 0, - "tostopsoffset": 0 - }, - "outputs": { - "tostarts": [], - "tostops": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "base": 0, - "fromstarts": [0, 0, 1], - "fromstops": [0, 1, 3], - "length": 3, - "tostartsoffset": 0, - "tostopsoffset": 0 - }, - "outputs": { - "tostarts": [0, 0, 1], - "tostops": [0, 1, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "base": 0, - "fromstarts": [0, 2, 2], - "fromstops": [2, 2, 4], - "length": 3, - "tostartsoffset": 0, - "tostopsoffset": 0 - }, - "outputs": { - "tostarts": [0, 2, 2], - "tostops": [2, 2, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "base": 0, - "fromstarts": [0, 2, 4], - "fromstops": [2, 4, 6], - "length": 3, - "tostartsoffset": 0, - "tostopsoffset": 0 - }, - "outputs": { - "tostarts": [0, 2, 4], - "tostops": [2, 4, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "base": 0, - "fromstarts": [0, 3, 3, 5, 6], - "fromstops": [3, 3, 5, 6, 10], - "length": 5, - "tostartsoffset": 0, - "tostopsoffset": 0 - }, - "outputs": { - "tostarts": [0, 3, 3, 5, 6], - "tostops": [3, 3, 5, 6, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "base": 0, - "fromstarts": [0, 3, 3], - "fromstops": [3, 3, 5], - "length": 3, - "tostartsoffset": 0, - "tostopsoffset": 0 - }, - "outputs": { - "tostarts": [0, 3, 3], - "tostops": [3, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "base": 0, - "fromstarts": [0, 3, 6], - "fromstops": [3, 6, 11], - "length": 3, - "tostartsoffset": 0, - "tostopsoffset": 0 - }, - "outputs": { - "tostarts": [0, 3, 6], - "tostops": [3, 6, 11] - } - }, - { - "error": false, - "message": "", - "inputs": { - "base": 0, - "fromstarts": [0, 5, 10], - "fromstops": [5, 10, 15], - "length": 3, - "tostartsoffset": 0, - "tostopsoffset": 0 - }, - "outputs": { - "tostarts": [0, 5, 10], - "tostops": [5, 10, 15] - } - }, - { - "error": false, - "message": "", - "inputs": { - "base": 0, - "fromstarts": [0, 7], - "fromstops": [7, 14], - "length": 2, - "tostartsoffset": 0, - "tostopsoffset": 0 - }, - "outputs": { - "tostarts": [0, 7], - "tostops": [7, 14] - } - }, - { - "error": false, - "message": "", - "inputs": { - "base": 0, - "fromstarts": [1, 3, 3, 3], - "fromstops": [3, 3, 3, 5], - "length": 4, - "tostartsoffset": 0, - "tostopsoffset": 0 - }, - "outputs": { - "tostarts": [1, 3, 3, 3], - "tostops": [3, 3, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "base": 0, - "fromstarts": [3, 5], - "fromstops": [5, 5], - "length": 2, - "tostartsoffset": 0, - "tostopsoffset": 0 - }, - "outputs": { - "tostarts": [3, 5], - "tostops": [5, 5] - } - } - ] + "inputs": { + "fromptr": [1,3,6,4,2,2,3,1,6], + "identity": 4, + "outlength": 4, + "offsets": [0,5,5,8,9] + }, + "outputs": { + "toptr": [1,4,1,4] + }, + "error": false }, { - "name": "awkward_UnionArray_fillindex", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 0, 1, 1], - "length": 4, - "toindexoffset": 0 - }, - "outputs": { - "toindex": [0, 0, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [], - "length": 0, - "toindexoffset": 0 - }, - "outputs": { - "toindex": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 1, 2, 0, 1, 2], - "length": 6, - "toindexoffset": 0 - }, - "outputs": { - "toindex": [0, 1, 2, 0, 1, 2] - } - } - ] + "inputs": { + "fromptr": [1,3,5,4,2,3,7,8,2,4,2,3,1,7,7,5,1,9,10,2], + "identity": 9223372036854775807, + "outlength": 4, + "offsets": [0,5,10,15,20] + }, + "outputs": { + "toptr": [1,2,1,1] + }, + "error": false }, { - "name": "awkward_UnionArray_flatten_length", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromtags": [], - "fromindex": [], - "length": 0, - "offsetsraws": [[], []] - }, - "outputs": { - "total_length": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromtags": [0, 1, 0, 1], - "fromindex": [0, 0, 1, 1], - "length": 4, - "offsetsraws": [[0, 2, 2, 3, 5], [2, 2, 3, 5, 6]] - }, - "outputs": { - "total_length": [3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromtags": [0, 0, 0, 0], - "fromindex": [0, 1, 2, 3], - "length": 4, - "offsetsraws": [[0, 1, 3, 5, 7], [1, 3, 5, 7, 9]] - }, - "outputs": { - "total_length": [7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromtags": [1, 1, 1, 1], - "fromindex": [0, 1, 2, 3], - "length": 4, - "offsetsraws": [[0, 1, 3, 5, 7], [1, 3, 5, 7, 9]] - }, - "outputs": { - "total_length": [8] - } - } - ] + "inputs": { + "fromptr": [1,4,4,2,2,5,3,3,3,6,2,4], + "identity": 9223372036854775807, + "outlength": 9, + "offsets": [0,2,4,6,6,6,6,8,10,12] + }, + "outputs": { + "toptr": [1,2,2,9223372036854775807,9223372036854775807,9223372036854775807,3,3,2] + }, + "error": false }, { - "name": "awkward_UnionArray_flatten_combine", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromtags": [], - "fromindex": [], - "length": 0, - "offsetsraws": [[], []] - }, - "outputs": { - "totags": [], - "toindex": [], - "tooffsets": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromtags": [0, 1, 0, 1], - "fromindex": [0, 0, 1, 1], - "length": 4, - "offsetsraws": [[0, 2, 2, 3, 5], [2, 2, 3, 5, 6]] - }, - "outputs": { - "totags": [0, 0, 1], - "toindex": [0, 1, 2], - "tooffsets": [0, 2, 2, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromtags": [0, 0, 0, 0], - "fromindex": [0, 1, 2, 3], - "length": 4, - "offsetsraws": [[0, 1, 3, 5, 7], [1, 3, 5, 7, 9]] - }, - "outputs": { - "totags": [0, 0, 0, 0, 0, 0, 0], - "toindex": [0, 1, 2, 3, 4, 5, 6], - "tooffsets": [0, 1, 3, 5, 7] - } - } - ] + "inputs": { + "fromptr": [1,2,5,3,3,5,1,4,2], + "identity": 9223372036854775807, + "outlength": 5, + "offsets": [0,3,5,7,8,9] + }, + "outputs": { + "toptr": [1,3,1,4,2] + }, + "error": false }, { - "name": "awkward_UnionArray_validity", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "index": [], - "lencontents": [], - "length": 0, - "numcontents": 2, - "tags": [] - }, - "outputs": {} - }, - { - "error": true, - "message": "tags[i] < 0", - "inputs": { - "index": [0, 1, 2, 3, 0, 1], - "lencontents": [4, 2, 0, 945], - "length": 6, - "numcontents": 2, - "tags": [-1, 0, 0, 0, 1, 1] - }, - "outputs": {} - }, - { - "error": true, - "message": "index[i] < 0", - "inputs": { - "index": [-1, 1, 2, 0, 1, 2, 3], - "lencontents": [3, 4], - "length": 7, - "numcontents": 2, - "tags": [0, 0, 0, 1, 1, 1, 1] - }, - "outputs": {} - }, - { - "error": true, - "message": "tags[i] >= len(contents)", - "inputs": { - "index": [0, 1, 0, 1, 2, 3], - "lencontents": [2, 4, 32, 49, 0, 0], - "length": 6, - "numcontents": 2, - "tags": [0, 0, 1, 1, 1, 2] - }, - "outputs": {} - }, - { - "error": true, - "message": "index[i] >= len(content[tags[i]])", - "inputs": { - "index": [5, 0, 1, 1, 2, 3, 2, 4], - "lencontents": [5, 3, 32, 33], - "length": 8, - "numcontents": 2, - "tags": [0, 1, 1, 0, 0, 0, 1, 0] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 2, 3, 0, 1], - "lencontents": [4, 2, 0, 945], - "length": 6, - "numcontents": 2, - "tags": [0, 0, 0, 0, 1, 1] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 2, 0, 1, 2, 3], - "lencontents": [3, 4], - "length": 7, - "numcontents": 2, - "tags": [0, 0, 0, 1, 1, 1, 1] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 0, 1, 2, 3], - "lencontents": [2, 4, 32, 49, 0, 0], - "length": 6, - "numcontents": 2, - "tags": [0, 0, 1, 1, 1, 1] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 0, 1, 1, 2, 3, 2, 4], - "lencontents": [5, 3, 32, 33], - "length": 8, - "numcontents": 2, - "tags": [0, 1, 1, 0, 0, 0, 1, 0] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 0, 1, 1, 2, 3, 2, 4], - "lencontents": [5, 3, 32, 625, 0, 0, 0], - "length": 8, - "numcontents": 2, - "tags": [0, 1, 1, 0, 0, 0, 1, 0] - }, - "outputs": {} - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 0, 1, 1, 2, 2, 3], - "lencontents": [3, 4, 32, 177], - "length": 7, - "numcontents": 2, - "tags": [0, 1, 1, 0, 0, 1, 1] - }, - "outputs": {} - } - ] + "inputs": { + "fromptr": [1,3,5,4,2,2,3,1,5], + "identity": 4, + "outlength": 4, + "offsets": [0,5,5,8,9] + }, + "outputs": { + "toptr": [1,4,1,4] + }, + "error": false }, { - "name": "awkward_ByteMaskedArray_reduce_next_nonlocal_nextshifts_fromshifts_64", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "length": 0, - "mask": [], - "valid_when": false, - "shifts": [] - }, - "outputs": { - "nextshifts": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 7, - "mask": [0, 0, 0, 1, 1, 0, 0], - "valid_when": false, - "shifts": [0, 1, 1, 0, 1, 1, 0] - }, - "outputs": { - "nextshifts": [0, 1, 1, 3, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "mask": [0], - "valid_when": false, - "shifts": [0] - }, - "outputs": { - "nextshifts": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "mask": [0], - "valid_when": false, - "shifts": [1] - }, - "outputs": { - "nextshifts": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "mask": [0], - "valid_when": true, - "shifts": [1] - }, - "outputs": { - "nextshifts": [123] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 7, - "mask": [0, 0, 0, 1, 1, 0, 0], - "valid_when": true, - "shifts": [0, 1, 1, 0, 1, 1, 0] - }, - "outputs": { - "nextshifts": [3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "mask": [0, 1, 0, 1, 1], - "valid_when": true, - "shifts": [0, 0, 1, 0, 0] - }, - "outputs": { - "nextshifts": [1, 2, 2] - } - } - ] + "inputs": { + "fromptr": [1,3,5,4,2,2,3,1,5], + "identity": 9223372036854775807, + "outlength": 4, + "offsets": [0,5,5,8,9] + }, + "outputs": { + "toptr": [1,9223372036854775807,1,5] + }, + "error": false }, { - "name": "awkward_ByteMaskedArray_reduce_next_nonlocal_nextshifts_64", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "length": 0, - "mask": [], - "valid_when": false - }, - "outputs": { - "nextshifts": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 7, - "mask": [0, 0, 0, 1, 1, 0, 0], - "valid_when": false - }, - "outputs": { - "nextshifts": [0, 0, 0, 2, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "mask": [0], - "valid_when": false - }, - "outputs": { - "nextshifts": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "mask": [0], - "valid_when": true - }, - "outputs": { - "nextshifts": [123] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 7, - "mask": [0, 0, 0, 1, 1, 0, 0], - "valid_when": true - }, - "outputs": { - "nextshifts": [3, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "mask": [0, 1, 0, 1, 1], - "valid_when": true - }, - "outputs": { - "nextshifts": [1, 2, 2] - } - } - ] + "inputs": { + "fromptr": [2,7,13,17,23,3,11,19,5], + "identity": 9223372036854775807, + "outlength": 8, + "offsets": [0,3,5,6,6,6,6,8,9] + }, + "outputs": { + "toptr": [2,17,3,9223372036854775807,9223372036854775807,9223372036854775807,11,5] + }, + "error": false }, { - "name": "awkward_ByteMaskedArray_reduce_next_64", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "mask": [], - "parents": [], - "length": 0, - "validwhen": false - }, - "outputs": { - "nextcarry": [], - "nextparents": [], - "outindex": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "mask": [0, 0, 0, 1, 1, 0, 0], - "parents": [0, 0, 1, 1, 2, 2, 2], - "length": 7, - "validwhen": false - }, - "outputs": { - "nextcarry": [0, 1, 2, 5, 6], - "nextparents": [0, 0, 1, 2, 2], - "outindex": [0, 1, 2, -1, -1, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "mask": [0], - "parents": [2], - "length": 1, - "validwhen": false - }, - "outputs": { - "nextcarry": [0], - "nextparents": [2], - "outindex": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "mask": [1], - "parents": [1], - "length": 1, - "validwhen": false - }, - "outputs": { - "nextcarry": [123], - "nextparents": [123], - "outindex": [-1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "mask": [0, 1, 0, 1, 1], - "parents": [0, 0, 1, 1, 1], - "length": 5, - "validwhen": true - }, - "outputs": { - "nextcarry": [1, 3, 4], - "nextparents": [0, 1, 1], - "outindex": [-1, 0, -1, 1, 2] - } - } - ] + "inputs": { + "fromptr": [2,3,5,7,11,13,17,19,23], + "identity": 9223372036854775807, + "outlength": 6, + "offsets": [0,3,3,5,6,8,9] + }, + "outputs": { + "toptr": [2,9223372036854775807,7,13,17,23] + }, + "error": false + } + ] + }, + { + "name": "awkward_reduce_argmin", + "status": true, + "tests": [ + { + "inputs": { + "fromptr": [0,0,4,4,6], + "outlength": 1, + "starts": [0], + "offsets": [0,5] + }, + "outputs": { + "toptr": [0] + }, + "error": false }, { - "name": "awkward_IndexedArray_local_preparenext_64", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "nextlen": 4, - "nextparents": [0, 0, 0, 0], - "parentslength": 5, - "parents": [0, 0, 0, 0, 0], - "starts": [0] - }, - "outputs": { - "tocarry": [0, 1, 2, 3, -1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 7, - "nextparents": [0, 0, 0, 0, 1, 1, 1], - "parentslength": 11, - "parents": [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1], - "starts": [0, 6] - }, - "outputs": { - "tocarry": [0, 1, 2, 3, -1, -1, 4, 5, 6, -1, -1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 0, - "nextparents": [], - "parentslength": 0, - "parents": [], - "starts": [] - }, - "outputs": { - "tocarry": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 9, - "nextparents": [0, 0, 0, 2, 2, 3, 4, 4, 4], - "parentslength": 17, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4], - "starts": [0, 5, 8, 11, 14] - }, - "outputs": { - "tocarry": [0, 1, 2, -1, -1, -1, -1, -1, 3, 4, -1, 5, -1, -1, 6, 7, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 10, - "nextparents": [0, 0, 0, 1, 2, 2, 3, 4, 4, 4], - "parentslength": 17, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4], - "starts": [0, 5, 8, 11, 14] - }, - "outputs": { - "tocarry": [0, 1, 2, -1, -1, 3, -1, -1, 4, 5, -1, 6, -1, -1, 7, 8, 9] - } - } - ] + "inputs": { + "fromptr": [], + "outlength": 0, + "starts": [], + "offsets": [0] + }, + "outputs": { + "toptr": [] + }, + "error": false }, { - "name": "awkward_IndexedArray_index_of_nulls", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromindex": [], - "lenindex": 0, - "parents": [], - "starts": [] - }, - "outputs": { - "toindex": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [-1, -1, 0, 1, 2, -1, -1, -1, 3, -1, 4, 5, -1, -1, 6, 7, 8], - "lenindex": 17, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4], - "starts": [0, 5, 8, 11, 14] - }, - "outputs": { - "toindex": [0, 1, 0, 1, 2, 1, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [-1, -1, 3, 5, 6, -1, -1, -1, -1, 7, 0, -1, 4, -1, 8, 1, 2], - "lenindex": 17, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 4], - "starts": [0, 5, 10, 15, 16] - }, - "outputs": { - "toindex": [0, 1, 0, 1, 2, 3, 1, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [-1, -1, 0, 1, 2], - "lenindex": 5, - "parents": [0, 0, 0, 0, 0], - "starts": [0] - }, - "outputs": { - "toindex": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, -1, 3, 5, 6, 1, -1, 4, -1, 7, 2, -1, -1, -1, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], - "lenindex": 25, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4], - "starts": [0, 5, 10, 15, 20] - }, - "outputs": { - "toindex": [1, 1, 3, 1, 2, 3, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, -1, 1, 2, -1, 3, 4, 5], - "lenindex": 8, - "parents": [0, 0, 0, 0, 0, 0, 0, 0], - "starts": [0] - }, - "outputs": { - "toindex": [1, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 1, -1, 2], - "lenindex": 4, - "parents": [0, 0, 0, 0], - "starts": [0] - }, - "outputs": { - "toindex": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 1, -1, -1, 4], - "lenindex": 5, - "parents": [0, 0, 0, 0, 0], - "starts": [0] - }, - "outputs": { - "toindex": [2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 1, -1, 2, 3, -1], - "lenindex": 6, - "parents": [0, 0, 0, 0, 0, 0], - "starts": [0] - }, - "outputs": { - "toindex": [2, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 1, -1, 2, 3, -1, 4, 5, -1, 6, 7, -1], - "lenindex": 12, - "parents": [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1], - "starts": [0, 6] - }, - "outputs": { - "toindex": [2, 5, 2, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 1, 2, -1, -1, -1, -1, 7, 8], - "lenindex": 9, - "parents": [0, 0, 0, 0, 1, 1, 1, 1, 1], - "starts": [0, 4] - }, - "outputs": { - "toindex": [3, 0, 1, 2] - } - } - ] + "inputs": { + "fromptr": [1,2,3], + "outlength": 1, + "starts": [0], + "offsets": [0,3] + }, + "outputs": { + "toptr": [0] + }, + "error": false }, { - "name": "awkward_IndexedArray_reduce_next_fix_offsets_64", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "outindexlength": 6, - "starts": [0, 1, 2, 5], - "startslength": 4 - }, - "outputs": { - "outoffsets": [0, 1, 2, 5, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "outindexlength": 0, - "starts": [], - "startslength": 0 - }, - "outputs": { - "outoffsets": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "outindexlength": 2, - "starts": [0], - "startslength": 1 - }, - "outputs": { - "outoffsets": [0, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "outindexlength": 9, - "starts": [0, 3, 3, 5, 6], - "startslength": 5 - }, - "outputs": { - "outoffsets": [0, 3, 3, 5, 6, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "outindexlength": 6, - "starts": [0, 3], - "startslength": 2 - }, - "outputs": { - "outoffsets": [0, 3, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "outindexlength": 4, - "starts": [0], - "startslength": 1 - }, - "outputs": { - "outoffsets": [0, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "outindexlength": 5, - "starts": [0], - "startslength": 1 - }, - "outputs": { - "outoffsets": [0, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "outindexlength": 8, - "starts": [0], - "startslength": 1 - }, - "outputs": { - "outoffsets": [0, 8] - } - } - ] + "inputs": { + "fromptr": [1,2,3,4,5,6], + "outlength": 1, + "starts": [0], + "offsets": [0,6] + }, + "outputs": { + "toptr": [0] + }, + "error": false }, { - "name": "awkward_IndexedArray_reduce_next_nonlocal_nextshifts_64", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "index": [], - "length": 0 - }, - "outputs": { - "nextshifts": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 2, -1, 3, -1, 4], - "length": 7 - }, - "outputs": { - "nextshifts": [0, 0, 0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, 2, -1, -1, -1, -1, 7, 8], - "length": 9 - }, - "outputs": { - "nextshifts": [0, 0, 0, 4, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, -1, 2, 3, -1], - "length": 6 - }, - "outputs": { - "nextshifts": [0, 0, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, -1, 2, 3, 4], - "length": 6 - }, - "outputs": { - "nextshifts": [0, 0, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, -1, 2, 3, -1, 4], - "length": 7 - }, - "outputs": { - "nextshifts": [0, 0, 1, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, -1, 2, 3, -1, 4, 5, -1, 6, 7, -1], - "length": 12 - }, - "outputs": { - "nextshifts": [0, 0, 1, 1, 2, 2, 3, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 1, -1, -1, 4], - "length": 5 - }, - "outputs": { - "nextshifts": [0, 0, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [4, 2, -1, -1, 1, 0, 1], - "length": 7 - }, - "outputs": { - "nextshifts": [0, 0, 2, 2, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [-1, -1, 0, 1, 2], - "length": 5 - }, - "outputs": { - "nextshifts": [2, 2, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [-1, -1, 0, 1, 2, -1, -1, -1, 3, -1, 4, 5, -1, -1, 6, 7, 8], - "length": 17 - }, - "outputs": { - "nextshifts": [2, 2, 2, 5, 6, 6, 8, 8, 8] - } - } - ] + "inputs": { + "fromptr": [0,1,2,3,4,6], + "outlength": 3, + "starts": [0,3,5], + "offsets": [0,3,5,6] + }, + "outputs": { + "toptr": [0,3,5] + }, + "error": false }, { - "name": "awkward_IndexedArray_reduce_next_nonlocal_nextshifts_fromshifts_64", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "index": [], - "length": 0, - "shifts": [] - }, - "outputs": { - "nextshifts": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 3, 4, 1, -1, 5, 2], - "length": 7, - "shifts": [0, 0, 1, 0, 0, 1, 0] - }, - "outputs": { - "nextshifts": [0, 0, 1, 0, 2, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, 3, 4, 1, -1, 5, 2], - "length": 7, - "shifts": [0, 1, 1, 0, 1, 1, 0] - }, - "outputs": { - "nextshifts": [0, 1, 1, 0, 2, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, -1, 3, 5, 6, 1, -1, 4, -1, 7, 2, -1, -1, -1, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], - "length": 25, - "shifts": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] - }, - "outputs": { - "nextshifts": [0, 1, 1, 1, 1, 2, 3, 3, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [0, -1, 4, 1, 3, 5, 2], - "length": 7, - "shifts": [0, 1, 1, 0, 1, 1, 0] - }, - "outputs": { - "nextshifts": [0, 2, 1, 2, 2, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index": [-1, -1, 3, 5, 6, -1, -1, -1, -1, 7, 0, -1, 4, -1, 8, 1, 2], - "length": 17, - "shifts": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] - }, - "outputs": { - "nextshifts": [2, 2, 2, 6, 6, 7, 8, 8, 8] - } - } - ] + "inputs": { + "fromptr": [1,4,2,6,3,0,-10], + "outlength": 4, + "starts": [0,3,5,6], + "offsets": [0,3,5,6,7] + }, + "outputs": { + "toptr": [0,4,5,6] + }, + "error": false }, { - "name": "awkward_ListArray_getitem_next_array_advanced", - "status": true, - "tests": [ - { - "error": true, - "message": "stops[i] < starts[i]", - "inputs": { - "fromadvanced": [0, 1], - "fromarray": [0, 0], - "fromstarts": [0, 0], - "fromstops": [-1, 1], - "lencontent": 5, - "lenstarts": 2 - }, - "outputs": { - "toadvanced": [0, 1], - "tocarry": [0, 0] - } - }, - { - "error": true, - "message": "stops[i] > len(content)", - "inputs": { - "fromadvanced": [0], - "fromarray": [0], - "fromstarts": [0], - "fromstops": [5], - "lencontent": 4, - "lenstarts": 1 - }, - "outputs": { - "toadvanced": [0], - "tocarry": [0] - } - }, - { - "error": true, - "message": "index out of range", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [0, 1, -4, 1], - "fromstarts": [0, 0, 0, 0], - "fromstops": [3, 3, 3, 3], - "lencontent": 6, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [0, 1, 2, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1], - "fromarray": [0, 0], - "fromstarts": [0, 0], - "fromstops": [1, 1], - "lencontent": 5, - "lenstarts": 2 - }, - "outputs": { - "toadvanced": [0, 1], - "tocarry": [0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0], - "fromarray": [0], - "fromstarts": [0], - "fromstops": [2], - "lencontent": 4, - "lenstarts": 1 - }, - "outputs": { - "toadvanced": [0], - "tocarry": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [], - "fromarray": [], - "fromstarts": [], - "fromstops": [], - "lencontent": 0, - "lenstarts": 0 - }, - "outputs": { - "toadvanced": [], - "tocarry": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [0, 1, -1, 1], - "fromstarts": [0, 0, 0, 0], - "fromstops": [3, 3, 3, 3], - "lencontent": 6, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [0, 1, 2, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [0, 0, 0, 0], - "fromstarts": [0, 3, 3, 3], - "fromstops": [3, 6, 6, 6], - "lencontent": 6, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [0, 3, 3, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1], - "fromarray": [1, 0], - "fromstarts": [0, 0], - "fromstops": [3, 3], - "lencontent": 5, - "lenstarts": 2 - }, - "outputs": { - "toadvanced": [0, 1], - "tocarry": [1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [1, 0, 0, 1], - "fromstarts": [0, 0, 0, 0], - "fromstops": [3, 3, 3, 3], - "lencontent": 6, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [1, 0, 0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1], - "fromarray": [0, 0], - "fromstarts": [1, 0], - "fromstops": [3, 2], - "lencontent": 3, - "lenstarts": 2 - }, - "outputs": { - "toadvanced": [0, 1], - "tocarry": [1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [0, 1, -1, 1], - "fromstarts": [10, 10, 10, 10], - "fromstops": [15, 15, 15, 15], - "lencontent": 30, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [10, 11, 14, 11] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0], - "fromarray": [0], - "fromstarts": [1], - "fromstops": [3], - "lencontent": 3, - "lenstarts": 1 - }, - "outputs": { - "toadvanced": [0], - "tocarry": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [1, 0, 0, 1], - "fromstarts": [10, 10, 10, 10], - "fromstops": [15, 15, 15, 15], - "lencontent": 30, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [11, 10, 10, 11] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [1, -2, 0, -1], - "fromstarts": [10, 10, 10, 10], - "fromstops": [15, 15, 15, 15], - "lencontent": 30, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [11, 13, 10, 14] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [1, -2, 0, -1], - "fromstarts": [10, 0, 0, 5], - "fromstops": [15, 5, 5, 10], - "lencontent": 30, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [11, 3, 0, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [1, 0, 0, 1], - "fromstarts": [0, 15, 15, 15], - "fromstops": [5, 20, 20, 20], - "lencontent": 30, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [1, 15, 15, 16] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1], - "fromarray": [1, 2], - "fromstarts": [0, 0], - "fromstops": [3, 3], - "lencontent": 5, - "lenstarts": 2 - }, - "outputs": { - "toadvanced": [0, 1], - "tocarry": [1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [2, 0, 0, 1], - "fromstarts": [10, 10, 10, 10], - "fromstops": [15, 15, 15, 15], - "lencontent": 30, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [12, 10, 10, 11] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [2, 2, 2, 2], - "fromstarts": [10, 0, 0, 5], - "fromstops": [15, 5, 5, 10], - "lencontent": 30, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [12, 2, 2, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [-2, -2, -2, -2], - "fromstarts": [10, 10, 10, 10], - "fromstops": [15, 15, 15, 15], - "lencontent": 30, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [13, 13, 13, 13] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [-2, -2, -2, -2], - "fromstarts": [10, 0, 0, 5], - "fromstops": [15, 5, 5, 10], - "lencontent": 30, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [13, 3, 3, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [1, 0, 0, 1], - "fromstarts": [0, 3, 3, 3], - "fromstops": [3, 6, 6, 6], - "lencontent": 6, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [1, 3, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [1, 0, 0, 1], - "fromstarts": [0, 5, 10, 5], - "fromstops": [5, 10, 15, 10], - "lencontent": 30, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [1, 5, 10, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [0, 1, -1, 1], - "fromstarts": [15, 0, 0, 15], - "fromstops": [20, 5, 5, 20], - "lencontent": 30, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [15, 1, 4, 16] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [0, 1, -1, 1], - "fromstarts": [15, 15, 15, 15], - "fromstops": [20, 20, 20, 20], - "lencontent": 30, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [15, 16, 19, 16] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [1, 0, 0, 1], - "fromstarts": [15, 15, 15, 15], - "fromstops": [20, 20, 20, 20], - "lencontent": 30, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [16, 15, 15, 16] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [-1, -1, -1, -1], - "fromstarts": [15, 0, 0, 15], - "fromstops": [20, 5, 5, 20], - "lencontent": 30, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [19, 4, 4, 19] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1], - "fromarray": [-1, 0], - "fromstarts": [0, 0], - "fromstops": [3, 3], - "lencontent": 5, - "lenstarts": 2 - }, - "outputs": { - "toadvanced": [0, 1], - "tocarry": [2, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [-1, -1, -1, -1], - "fromstarts": [0, 0, 0, 0], - "fromstops": [3, 3, 3, 3], - "lencontent": 6, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [2, 2, 2, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1], - "fromarray": [1, 2], - "fromstarts": [1, 1], - "fromstops": [4, 4], - "lencontent": 4, - "lenstarts": 2 - }, - "outputs": { - "toadvanced": [0, 1], - "tocarry": [2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [-1, -1, -1, -1], - "fromstarts": [0, 3, 3, 3], - "fromstops": [3, 6, 6, 6], - "lencontent": 6, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [2, 5, 5, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [0, 0, 0, 0], - "fromstarts": [3, 0, 0, 3], - "fromstops": [6, 3, 3, 6], - "lencontent": 6, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [3, 0, 0, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0], - "fromarray": [1], - "fromstarts": [2], - "fromstops": [5], - "lencontent": 5, - "lenstarts": 1 - }, - "outputs": { - "toadvanced": [0], - "tocarry": [3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1], - "fromarray": [-1, 0], - "fromstarts": [1, 1], - "fromstops": [4, 4], - "lencontent": 4, - "lenstarts": 2 - }, - "outputs": { - "toadvanced": [0, 1], - "tocarry": [3, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [0, 1, -1, 1], - "fromstarts": [3, 0, 0, 3], - "fromstops": [6, 3, 3, 6], - "lencontent": 6, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [3, 1, 2, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [0, 0, 0, 0], - "fromstarts": [3, 3, 3, 3], - "fromstops": [6, 6, 6, 6], - "lencontent": 6, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [3, 3, 3, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [0, 1, -1, 1], - "fromstarts": [3, 3, 3, 3], - "fromstops": [6, 6, 6, 6], - "lencontent": 6, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [3, 4, 5, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1], - "fromarray": [1, 1], - "fromstarts": [3, 0], - "fromstops": [5, 3], - "lencontent": 5, - "lenstarts": 2 - }, - "outputs": { - "toadvanced": [0, 1], - "tocarry": [4, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [1, 1, 0, 0], - "fromstarts": [3, 0, 0, 6], - "fromstops": [5, 3, 3, 9], - "lencontent": 9, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [4, 1, 0, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [-1, -1, -1, -1], - "fromstarts": [0, 15, 15, 15], - "fromstops": [5, 20, 20, 20], - "lencontent": 30, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [4, 19, 19, 19] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [1, -1, 0, 0], - "fromstarts": [3, 0, 0, 3], - "fromstops": [5, 3, 3, 5], - "lencontent": 5, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [4, 2, 0, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [1, 0, 0, 1], - "fromstarts": [3, 3, 3, 3], - "fromstops": [6, 6, 6, 6], - "lencontent": 6, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [4, 3, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [-1, -1, -1, -1], - "fromstarts": [0, 5, 10, 5], - "fromstops": [5, 10, 15, 10], - "lencontent": 30, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [4, 9, 14, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3, 4, 5], - "fromarray": [2, 0, 1, 1, 2, 0], - "fromstarts": [3, 0, 3, 3, 3, 0], - "fromstops": [6, 3, 6, 6, 6, 3], - "lencontent": 6, - "lenstarts": 6 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3, 4, 5], - "tocarry": [5, 0, 4, 4, 5, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [0, 1, -1, 1], - "fromstarts": [5, 0, 0, 5], - "fromstops": [10, 5, 5, 10], - "lencontent": 30, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [5, 1, 4, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [-1, -1, -1, -1], - "fromstarts": [3, 0, 0, 3], - "fromstops": [6, 3, 3, 6], - "lencontent": 6, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [5, 2, 2, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [1, 1, 0, 0], - "fromstarts": [6, 0, 0, 6], - "fromstops": [9, 3, 3, 9], - "lencontent": 9, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [7, 1, 0, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromadvanced": [0, 1, 2, 3], - "fromarray": [-1, -1, -1, -1], - "fromstarts": [5, 0, 0, 5], - "fromstops": [10, 5, 5, 10], - "lencontent": 30, - "lenstarts": 4 - }, - "outputs": { - "toadvanced": [0, 1, 2, 3], - "tocarry": [9, 4, 4, 9] - } - } - ] + "inputs": { + "fromptr": [2,1,3,4,6,6,-4,-6,-7], + "outlength": 5, + "starts": [0,-1,3,5,6], + "offsets": [0,3,3,5,6,9] + }, + "outputs": { + "toptr": [1,-1,3,5,8] + }, + "error": false }, { - "name": "awkward_ListArray_getitem_next_at", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "at": -2, - "fromstarts": [], - "fromstops": [], - "lenstarts": 0 - }, - "outputs": { - "tocarry": [] - } - }, - { - "error": true, - "message": "index out of range", - "inputs": { - "at": -2, - "fromstarts": [0], - "fromstops": [1], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [0] - } - }, - { - "error": true, - "message": "index out of range", - "inputs": { - "at": 1, - "fromstarts": [3, 5, 6], - "fromstops": [5, 6, 9], - "lenstarts": 3 - }, - "outputs": { - "tocarry": [3, 5, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 0, - "fromstarts": [], - "fromstops": [], - "lenstarts": 0 - }, - "outputs": { - "tocarry": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 0, - "fromstarts": [0], - "fromstops": [1], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 0, - "fromstarts": [0], - "fromstops": [2], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 0, - "fromstarts": [0], - "fromstops": [3], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": -5, - "fromstarts": [0], - "fromstops": [5], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 0, - "fromstarts": [0, 1], - "fromstops": [1, 2], - "lenstarts": 2 - }, - "outputs": { - "tocarry": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 0, - "fromstarts": [0, 1, 2, 3], - "fromstops": [1, 2, 3, 4], - "lenstarts": 4 - }, - "outputs": { - "tocarry": [0, 1, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 0, - "fromstarts": [0, 1, 2, 3, 4], - "fromstops": [1, 2, 3, 4, 5], - "lenstarts": 5 - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 0, - "fromstarts": [0, 2, 3], - "fromstops": [2, 3, 5], - "lenstarts": 3 - }, - "outputs": { - "tocarry": [0, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 0, - "fromstarts": [0, 3, 5, 6], - "fromstops": [3, 5, 6, 10], - "lenstarts": 4 - }, - "outputs": { - "tocarry": [0, 3, 5, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 0, - "fromstarts": [10], - "fromstops": [15], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 1, - "fromstarts": [0], - "fromstops": [2], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 1, - "fromstarts": [0], - "fromstops": [3], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": -2, - "fromstarts": [0], - "fromstops": [3], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 1, - "fromstarts": [0], - "fromstops": [5], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 1, - "fromstarts": [10], - "fromstops": [15], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [11] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 0, - "fromstarts": [1], - "fromstops": [2], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 0, - "fromstarts": [1], - "fromstops": [3], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": -2, - "fromstarts": [10], - "fromstops": [15], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [13] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 1, - "fromstarts": [0, 3], - "fromstops": [3, 5], - "lenstarts": 2 - }, - "outputs": { - "tocarry": [1, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 1, - "fromstarts": [0, 5], - "fromstops": [5, 10], - "lenstarts": 2 - }, - "outputs": { - "tocarry": [1, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 1, - "fromstarts": [15], - "fromstops": [20], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [16] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": -2, - "fromstarts": [15], - "fromstops": [20], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [18] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": -1, - "fromstarts": [15], - "fromstops": [20], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [19] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": -1, - "fromstarts": [0], - "fromstops": [3], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 1, - "fromstarts": [1], - "fromstops": [3], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 1, - "fromstarts": [1], - "fromstops": [4], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 0, - "fromstarts": [2], - "fromstops": [3], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 1, - "fromstarts": [2], - "fromstops": [5], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 0, - "fromstarts": [3], - "fromstops": [5], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 0, - "fromstarts": [3], - "fromstops": [6], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 0, - "fromstarts": [3, 5, 6], - "fromstops": [5, 6, 9], - "lenstarts": 3 - }, - "outputs": { - "tocarry": [3, 5, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": -1, - "fromstarts": [0], - "fromstops": [5], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 4, - "fromstarts": [0], - "fromstops": [5], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 1, - "fromstarts": [3], - "fromstops": [5], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 1, - "fromstarts": [3], - "fromstops": [6], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": -2, - "fromstarts": [3], - "fromstops": [6], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": -1, - "fromstarts": [3, 5, 6], - "fromstops": [5, 6, 9], - "lenstarts": 3 - }, - "outputs": { - "tocarry": [4, 5, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": -1, - "fromstarts": [0, 5], - "fromstops": [5, 10], - "lenstarts": 2 - }, - "outputs": { - "tocarry": [4, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 0, - "fromstarts": [5, 10], - "fromstops": [10, 15], - "lenstarts": 2 - }, - "outputs": { - "tocarry": [5, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": -1, - "fromstarts": [3], - "fromstops": [6], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 0, - "fromstarts": [5], - "fromstops": [10], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": -5, - "fromstarts": [5], - "fromstops": [10], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 1, - "fromstarts": [5, 10], - "fromstops": [10, 15], - "lenstarts": 2 - }, - "outputs": { - "tocarry": [6, 11] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 1, - "fromstarts": [5], - "fromstops": [10], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 1, - "fromstarts": [6], - "fromstops": [10], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 1, - "fromstarts": [6], - "fromstops": [9], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": -2, - "fromstarts": [5], - "fromstops": [10], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": -1, - "fromstarts": [5, 10], - "fromstops": [10, 15], - "lenstarts": 2 - }, - "outputs": { - "tocarry": [9, 14] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": -1, - "fromstarts": [5], - "fromstops": [10], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "at": 4, - "fromstarts": [5], - "fromstops": [10], - "lenstarts": 1 - }, - "outputs": { - "tocarry": [9] - } - } - ] + "inputs": { + "fromptr": [2,1,3,-4,-6,-7], + "outlength": 3, + "starts": [0,-1,3], + "offsets": [0,3,3,6] + }, + "outputs": { + "toptr": [1,-1,5] + }, + "error": false }, { - "name": "awkward_ListArray_getitem_next_range_counts", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [], - "lenstarts": 0 - }, - "outputs": { - "total": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 2, 2, 4, 4, 5, 6, 7, 9, 9], - "lenstarts": 9 - }, - "outputs": { - "total": [9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 2, 4, 5, 6, 7, 9], - "lenstarts": 6 - }, - "outputs": { - "total": [9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 0, 0, 0], - "lenstarts": 3 - }, - "outputs": { - "total": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 3], - "lenstarts": 1 - }, - "outputs": { - "total": [3] - } - } - ] + "inputs": { + "fromptr": [2,1,3,2,1], + "outlength": 3, + "starts": [0,2,3], + "offsets": [0,2,3,5] + }, + "outputs": { + "toptr": [1,2,4] + }, + "error": false }, { - "name": "awkward_ListArray_localindex", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "length": 0, - "offsets": [0] - }, - "outputs": { - "toindex": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "offsets": [0, 1] - }, - "outputs": { - "toindex": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "offsets": [0, 2, 3, 5] - }, - "outputs": { - "toindex": [0, 1, 0, 0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 4, - "offsets": [0, 2, 3, 3, 6] - }, - "outputs": { - "toindex": [0, 1, 0, 0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 2, - "offsets": [0, 2, 3] - }, - "outputs": { - "toindex": [0, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "offsets": [0, 2] - }, - "outputs": { - "toindex": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 4, - "offsets": [0, 3, 3, 4, 5] - }, - "outputs": { - "toindex": [0, 1, 2, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 7, - "offsets": [0, 3, 3, 5, 6, 10, 10, 13] - }, - "outputs": { - "toindex": [0, 1, 2, 0, 1, 0, 0, 1, 2, 3, 0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "offsets": [0, 3, 3, 5, 6, 10] - }, - "outputs": { - "toindex": [0, 1, 2, 0, 1, 0, 0, 1, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 6, - "offsets": [0, 3, 3, 5, 6, 6, 10] - }, - "outputs": { - "toindex": [0, 1, 2, 0, 1, 0, 0, 1, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "offsets": [0, 3, 3, 5] - }, - "outputs": { - "toindex": [0, 1, 2, 0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "offsets": [0, 4, 4, 7, 8, 13] - }, - "outputs": { - "toindex": [0, 1, 2, 3, 0, 1, 2, 0, 0, 1, 2, 3, 4] - } - } - ] + "inputs": { + "fromptr": [2,2,1,0,1,0], + "outlength": 3, + "starts": [0,2,5], + "offsets": [0,2,5,6] + }, + "outputs": { + "toptr": [0,3,5] + }, + "error": false }, { - "name": "awkward_ListArray_rpad_axis1", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [], - "fromstops": [], - "length": 0, - "target": 4 - }, - "outputs": { - "toindex": [], - "tostarts": [], - "tostops": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [], - "fromstops": [], - "length": 0, - "target": 0 - }, - "outputs": { - "toindex": [], - "tostarts": [], - "tostops": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3, 4, 5, 8], - "fromstops": [3, 3, 6, 8, 9], - "length": 5, - "target": 0 - }, - "outputs": { - "toindex": [0, 1, 2, 4, 5, 5, 6, 7, 8, 123, 123], - "tostarts": [0, 3, 3, 5, 8], - "tostops": [3, 3, 5, 8, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3, 4, 5, 8], - "fromstops": [3, 3, 6, 8, 9], - "length": 5, - "target": 4 - }, - "outputs": { - "toindex": [0, 1, 2, -1, -1, -1, -1, -1, 4, 5, -1, -1, 5, 6, 7, -1, 8, -1, -1, -1], - "tostarts": [0, 4, 8, 12, 16], - "tostops": [4, 8, 12, 16, 20] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3, 4, 5, 8], - "fromstops": [3, 3, 6, 8, 9], - "length": 5, - "target": 3 - }, - "outputs": { - "toindex": [0, 1, 2, -1, -1, -1, 4, 5, -1, 5, 6, 7, 8, -1, -1], - "tostarts": [0, 3, 6, 9, 12], - "tostops": [3, 6, 9, 12, 15] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3, 5], - "fromstops": [3, 3, 7], - "length": 3, - "target": 3 - }, - "outputs": { - "toindex": [0, 1, 2, -1, -1, -1, 5, 6, -1], - "tostarts": [0, 3, 6], - "tostops": [3, 6, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3, 4, 5, 8], - "fromstops": [3, 3, 6, 8, 9], - "length": 5, - "target": 2 - }, - "outputs": { - "toindex": [0, 1, 2, -1, -1, 4, 5, 5, 6, 7, 8, -1], - "tostarts": [0, 3, 5, 7, 10], - "tostops": [3, 5, 7, 10, 12] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [0, 3, 4, 5, 8], - "fromstops": [3, 3, 6, 8, 9], - "length": 5, - "target": 1 - }, - "outputs": { - "toindex": [0, 1, 2, -1, 4, 5, 5, 6, 7, 8], - "tostarts": [0, 3, 4, 6, 9], - "tostops": [3, 4, 6, 9, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [6, 5, 3, 0], - "fromstops": [10, 6, 5, 3], - "length": 4, - "target": 4 - }, - "outputs": { - "toindex": [6, 7, 8, 9, 5, -1, -1, -1, 3, 4, -1, -1, 0, 1, 2, -1], - "tostarts": [0, 4, 8, 12], - "tostops": [4, 8, 12, 16] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [6, 5, 3, 3, 0], - "fromstops": [10, 6, 5, 3, 3], - "length": 5, - "target": 4 - }, - "outputs": { - "toindex": [6, 7, 8, 9, 5, -1, -1, -1, 3, 4, -1, -1, -1, -1, -1, -1, 0, 1, 2, -1], - "tostarts": [0, 4, 8, 12, 16], - "tostops": [4, 8, 12, 16, 20] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [6, 5, 3, 0], - "fromstops": [10, 6, 5, 3], - "length": 4, - "target": 3 - }, - "outputs": { - "toindex": [6, 7, 8, 9, 5, -1, -1, 3, 4, -1, 0, 1, 2], - "tostarts": [0, 4, 7, 10], - "tostops": [4, 7, 10, 13] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [6, 5, 3, 3, 0], - "fromstops": [10, 6, 5, 3, 3], - "length": 5, - "target": 3 - }, - "outputs": { - "toindex": [6, 7, 8, 9, 5, -1, -1, 3, 4, -1, -1, -1, -1, 0, 1, 2], - "tostarts": [0, 4, 7, 10, 13], - "tostops": [4, 7, 10, 13, 16] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [6, 5, 3, 3, 0], - "fromstops": [10, 6, 5, 3, 3], - "length": 5, - "target": 2 - }, - "outputs": { - "toindex": [6, 7, 8, 9, 5, -1, 3, 4, -1, -1, 0, 1, 2], - "tostarts": [0, 4, 6, 8, 10], - "tostops": [4, 6, 8, 10, 13] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromstarts": [6, 5, 3, 0], - "fromstops": [10, 6, 5, 3], - "length": 4, - "target": 1 - }, - "outputs": { - "toindex": [6, 7, 8, 9, 5, 3, 4, 0, 1, 2], - "tostarts": [0, 4, 5, 7], - "tostops": [4, 5, 7, 10] - } - } - ] + "inputs": { + "fromptr": [2,0,2,1,1,0], + "outlength": 3, + "starts": [0,3,5], + "offsets": [0,3,5,6] + }, + "outputs": { + "toptr": [1,3,5] + }, + "error": false }, { - "name": "awkward_ListOffsetArray_reduce_local_outoffsets_64", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "lenparents": 0, - "outlength": 0, - "parents": [] - }, - "outputs": { - "outoffsets": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 10, - "outlength": 1, - "parents": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] - }, - "outputs": { - "outoffsets": [0, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 1, - "outlength": 1, - "parents": [0] - }, - "outputs": { - "outoffsets": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 3, - "outlength": 3, - "parents": [0, 2, 2] - }, - "outputs": { - "outoffsets": [0, 1, 1, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 3, - "outlength": 4, - "parents": [0, 1, 3] - }, - "outputs": { - "outoffsets": [0, 1, 2, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 3, - "outlength": 3, - "parents": [0, 1, 1] - }, - "outputs": { - "outoffsets": [0, 1, 3, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 4, - "outlength": 3, - "parents": [0, 1, 1, 2] - }, - "outputs": { - "outoffsets": [0, 1, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 2, - "outlength": 1, - "parents": [0, 0] - }, - "outputs": { - "outoffsets": [0, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 6, - "outlength": 5, - "parents": [0, 0, 2, 2, 3, 4] - }, - "outputs": { - "outoffsets": [0, 2, 2, 4, 5, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 7, - "outlength": 5, - "parents": [0, 0, 2, 2, 3, 4, 4] - }, - "outputs": { - "outoffsets": [0, 2, 2, 4, 5, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 3, - "outlength": 2, - "parents": [0, 0, 1] - }, - "outputs": { - "outoffsets": [0, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 4, - "outlength": 2, - "parents": [0, 0, 1, 1] - }, - "outputs": { - "outoffsets": [0, 2, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 3, - "outlength": 1, - "parents": [0, 0, 0] - }, - "outputs": { - "outoffsets": [0, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 6, - "outlength": 2, - "parents": [0, 0, 0, 1, 1, 1] - }, - "outputs": { - "outoffsets": [0, 3, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 4, - "outlength": 1, - "parents": [0, 0, 0, 0] - }, - "outputs": { - "outoffsets": [0, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 6, - "outlength": 3, - "parents": [0, 0, 0, 0, 2, 2] - }, - "outputs": { - "outoffsets": [0, 4, 4, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 8, - "outlength": 2, - "parents": [0, 0, 0, 0, 1, 1, 1, 1] - }, - "outputs": { - "outoffsets": [0, 4, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 5, - "outlength": 1, - "parents": [0, 0, 0, 0, 0] - }, - "outputs": { - "outoffsets": [0, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 6, - "outlength": 1, - "parents": [0, 0, 0, 0, 0, 0] - }, - "outputs": { - "outoffsets": [0, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 7, - "outlength": 1, - "parents": [0, 0, 0, 0, 0, 0, 0] - }, - "outputs": { - "outoffsets": [0, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 8, - "outlength": 1, - "parents": [0, 0, 0, 0, 0, 0, 0, 0] - }, - "outputs": { - "outoffsets": [0, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 9, - "outlength": 1, - "parents": [0, 0, 0, 0, 0, 0, 0, 0, 0] - }, - "outputs": { - "outoffsets": [0, 9] - } - } - ] + "inputs": { + "fromptr": [3,-3,4,4,2,2,2,2,2,-2,1,1,6,-6,1,1,4,4,1,1,3,-3,3,3,4,4,6,6,6,-6], + "outlength": 15, + "starts": [0,6,12,18,24,2,8,14,20,26,4,10,16,22,28], + "offsets": [0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30] + }, + "outputs": { + "toptr": [1,2,4,6,9,10,13,14,16,18,21,22,24,26,29] + }, + "error": false }, { - "name": "awkward_ListOffsetArray_reduce_nonlocal_preparenext_64", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "length": 0, - "maxcount": 0, - "distinctslen": 0, - "nextlen": 0, - "parents": [], - "offsets": [], - "offsetscopy": [] - }, - "outputs": { - "nextcarry": [], - "nextparents": [], - "maxnextparents": [0], - "distincts": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "maxcount": 5, - "distinctslen": 0, - "nextlen": 15, - "parents": [0, 0, 0], - "offsets": [0, 5, 10, 15], - "offsetscopy": [0, 5, 10, 15] - }, - "outputs": { - "nextcarry": [0, 5, 10, 1, 6, 11, 2, 7, 12, 3, 8, 13, 4, 9, 14], - "nextparents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4], - "maxnextparents": [4], - "distincts": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "maxcount": 5, - "distinctslen": 2, - "nextlen": 15, - "parents": [0, 0, 0], - "offsets": [0, 5, 10, 15], - "offsetscopy": [0, 5, 10, 15] - }, - "outputs": { - "nextcarry": [0, 5, 10, 1, 6, 11, 2, 7, 12, 3, 8, 13, 4, 9, 14], - "nextparents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4], - "maxnextparents": [4], - "distincts": [0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 2, - "maxcount": 3, - "distinctslen": 2, - "nextlen": 6, - "parents": [0, 0], - "offsets": [0, 3, 6], - "offsetscopy": [0, 3, 6] - }, - "outputs": { - "nextcarry": [0, 3, 1, 4, 2, 5], - "nextparents": [0, 0, 1, 1, 2, 2], - "maxnextparents": [2], - "distincts": [0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "maxcount": 5, - "distinctslen": 6, - "nextlen": 17, - "parents": [0, 0, 0, 0, 0], - "offsets": [0, 5, 8, 11, 14, 17], - "offsetscopy": [0, 5, 8, 11, 14, 17] - }, - "outputs": { - "nextcarry": [0, 5, 8, 11, 14, 1, 6, 9, 12, 15, 2, 7, 10, 13, 16, 3, 4], - "nextparents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 4], - "maxnextparents": [4], - "distincts": [0, 0, 0, 0, 0, -1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 10, - "maxcount": 3, - "distinctslen": 6, - "nextlen": 18, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1], - "offsets": [0, 1, 3, 6, 8, 9, 10, 12, 15, 17, 18], - "offsetscopy": [0, 1, 3, 6, 8, 9, 10, 12, 15, 17, 18] - }, - "outputs": { - "nextcarry": [0, 1, 3, 6, 8, 9, 10, 12, 15, 17, 2, 4, 7, 11, 13, 16, 5, 14], - "nextparents": [0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 1, 1, 1, 4, 4, 4, 2, 5], - "maxnextparents": [5], - "distincts": [0, 0, 0, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 10, - "maxcount": 4, - "distinctslen": 6, - "nextlen": 18, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1], - "offsets": [0, 1, 3, 6, 8, 9, 10, 12, 15, 17, 18], - "offsetscopy": [0, 1, 3, 6, 8, 9, 10, 12, 15, 17, 18] - }, - "outputs": { - "nextcarry": [0, 1, 3, 6, 8, 9, 10, 12, 15, 17, 2, 4, 7, 11, 13, 16, 5, 14], - "nextparents": [0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 1, 1, 1, 5, 5, 5, 2, 6], - "maxnextparents": [6], - "distincts": [0, 0, 0, -1, 1, 1] - } - } - ] + "inputs": { + "fromptr": [3,1,6,1,4,4,2,1,7,2,3,-1], + "outlength": 3, + "starts": [0,5,9], + "offsets": [0,5,9,12] + }, + "outputs": { + "toptr": [1,7,11] + }, + "error": false }, { - "name": "awkward_ListOffsetArray_reduce_nonlocal_nextshifts_64", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "length": 0, - "maxcount": 0, - "nextcarry": [], - "nextlen": 0, - "offsets": [], - "parents": [], - "starts": [] - }, - "outputs": { - "missing": [], - "nextshifts": [], - "nummissing": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "maxcount": 5, - "nextcarry": [0, 5, 10, 1, 6, 11, 2, 7, 12, 3, 8, 13, 4, 9, 14], - "nextlen": 15, - "offsets": [0, 5, 10, 15], - "parents": [0, 0, 0], - "starts": [0] - }, - "outputs": { - "missing": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "nextshifts": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "nummissing": [0, 0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 2, - "maxcount": 3, - "nextcarry": [0, 3, 1, 4, 2, 5], - "nextlen": 6, - "offsets": [0, 3, 6], - "parents": [0, 0], - "starts": [0] - }, - "outputs": { - "missing": [0, 0, 0, 0, 0, 0], - "nextshifts": [0, 0, 0, 0, 0, 0], - "nummissing": [0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "maxcount": 5, - "nextcarry": [0, 5, 9, 1, 6, 10, 2, 7, 11, 3, 8, 4], - "nextlen": 12, - "offsets": [0, 5, 9, 12], - "parents": [0, 0, 0], - "starts": [0] - }, - "outputs": { - "missing": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "nextshifts": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "nummissing": [0, 0, 0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "maxcount": 5, - "nextcarry": [0, 5, 8, 11, 14, 1, 6, 9, 12, 15, 2, 7, 10, 13, 16, 3, 4], - "nextlen": 17, - "offsets": [0, 5, 8, 11, 14, 17], - "parents": [0, 0, 0, 0, 0], - "starts": [0] - }, - "outputs": { - "missing": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "nextshifts": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "nummissing": [0, 0, 0, 4, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 4, - "maxcount": 3, - "nextcarry": [0, 2, 5, 7, 1, 3, 6, 8, 4], - "nextlen": 9, - "offsets": [0, 2, 5, 7, 9], - "parents": [0, 0, 1, 1], - "starts": [0, 2] - }, - "outputs": { - "missing": [0, 0, 0, 0, 1, 0, 0, 0, 0], - "nextshifts": [0, 0, 0, 0, 0, 0, 0, 0, 1], - "nummissing": [0, 0, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "maxcount": 4, - "nextcarry": [0, 2, 3, 1, 4, 5, 6], - "nextlen": 7, - "offsets": [0, 2, 3, 7], - "parents": [0, 0, 0], - "starts": [0] - }, - "outputs": { - "missing": [0, 0, 0, 0, 1, 2, 2], - "nextshifts": [0, 0, 0, 0, 1, 2, 2], - "nummissing": [0, 1, 2, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 10, - "maxcount": 3, - "nextcarry": [0, 1, 3, 6, 8, 9, 10, 12, 15, 17, 2, 4, 7, 11, 13, 16, 5, 14], - "nextlen": 18, - "offsets": [0, 1, 3, 6, 8, 9, 10, 12, 15, 17, 18], - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1], - "starts": [0, 5] - }, - "outputs": { - "missing": [0, 0, 1, 0, 1, 2, 0, 1, 0, 0, 0, 1, 0, 1, 2, 0, 1, 0], - "nextshifts": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2], - "nummissing": [0, 2, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 11, - "maxcount": 3, - "nextcarry": [0, 1, 3, 6, 8, 9, 10, 12, 15, 17, 2, 4, 7, 11, 13, 16, 5, 14], - "nextlen": 18, - "offsets": [0, 1, 3, 6, 6, 8, 9, 10, 12, 15, 17, 18], - "parents": [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1], - "starts": [0, 6] - }, - "outputs": { - "missing": [0, 0, 1, 0, 1, 2, 1, 2, 1, 0, 0, 1, 0, 1, 2, 0, 1, 0], - "nextshifts": [0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 2, 1, 1, 1, 2, 2], - "nummissing": [0, 2, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 11, - "maxcount": 3, - "nextcarry": [0, 1, 3, 6, 8, 9, 10, 12, 15, 17, 2, 4, 7, 11, 13, 16, 5, 14], - "nextlen": 18, - "offsets": [0, 0, 1, 3, 6, 8, 9, 10, 12, 15, 17, 18], - "parents": [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1], - "starts": [0, 6] - }, - "outputs": { - "missing": [1, 1, 2, 1, 2, 3, 1, 2, 1, 0, 0, 1, 0, 1, 2, 0, 1, 0], - "nextshifts": [1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 2, 2, 2, 1, 1, 1, 3, 2], - "nummissing": [0, 2, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "maxcount": 4, - "nextcarry": [0, 3, 1, 4, 2, 5, 6], - "nextlen": 7, - "offsets": [0, 3, 3, 7], - "parents": [0, 0, 0], - "starts": [0] - }, - "outputs": { - "missing": [0, 0, 0, 1, 1, 1, 2], - "nextshifts": [0, 1, 0, 1, 0, 1, 2], - "nummissing": [1, 1, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 4, - "maxcount": 3, - "nextcarry": [0, 3, 5, 1, 4, 6, 2], - "nextlen": 7, - "offsets": [0, 3, 5, 5, 7], - "parents": [0, 0, 0, 0], - "starts": [0] - }, - "outputs": { - "missing": [0, 0, 0, 0, 0, 1, 1], - "nextshifts": [0, 0, 1, 0, 0, 1, 0], - "nummissing": [1, 1, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 4, - "maxcount": 3, - "nextcarry": [0, 3, 5, 1, 4, 6, 2], - "nextlen": 7, - "offsets": [0, 3, 3, 5, 7], - "parents": [0, 0, 0, 0], - "starts": [0] - }, - "outputs": { - "missing": [0, 0, 0, 1, 1, 1, 1], - "nextshifts": [0, 1, 1, 0, 1, 1, 0], - "nummissing": [1, 1, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 11, - "maxcount": 3, - "nextcarry": [0, 1, 3, 6, 8, 9, 10, 12, 15, 17, 2, 4, 7, 11, 13, 16, 5, 14], - "nextlen": 18, - "offsets": [0, 1, 3, 6, 8, 9, 10, 12, 15, 17, 18, 18], - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1], - "starts": [0, 5] - }, - "outputs": { - "missing": [0, 0, 1, 0, 1, 2, 0, 1, 0, 0, 0, 1, 0, 1, 2, 0, 1, 0], - "nextshifts": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2], - "nummissing": [1, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 11, - "maxcount": 3, - "nextcarry": [0, 1, 3, 6, 8, 9, 10, 12, 15, 17, 2, 4, 7, 11, 13, 16, 5, 14], - "nextlen": 18, - "offsets": [0, 1, 3, 6, 8, 9, 10, 12, 15, 17, 17, 18], - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1], - "starts": [0, 5] - }, - "outputs": { - "missing": [0, 0, 1, 0, 1, 2, 0, 1, 0, 0, 0, 1, 0, 1, 2, 0, 1, 1], - "nextshifts": [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2], - "nummissing": [1, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 11, - "maxcount": 3, - "nextcarry": [0, 1, 3, 6, 8, 9, 10, 12, 15, 17, 2, 4, 7, 11, 13, 16, 5, 14], - "nextlen": 18, - "offsets": [0, 1, 3, 6, 8, 9, 10, 12, 15, 15, 17, 18], - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1], - "starts": [0, 5] - }, - "outputs": { - "missing": [0, 0, 1, 0, 1, 2, 0, 1, 0, 0, 0, 1, 0, 1, 2, 1, 2, 1], - "nextshifts": [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2], - "nummissing": [1, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 11, - "maxcount": 3, - "nextcarry": [0, 1, 3, 6, 8, 9, 10, 12, 15, 17, 2, 4, 7, 11, 13, 16, 5, 14], - "nextlen": 18, - "offsets": [0, 1, 3, 6, 8, 9, 10, 12, 12, 15, 17, 18], - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1], - "starts": [0, 5] - }, - "outputs": { - "missing": [0, 0, 1, 0, 1, 2, 0, 1, 0, 0, 0, 1, 1, 2, 3, 1, 2, 1], - "nextshifts": [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 3], - "nummissing": [1, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 11, - "maxcount": 3, - "nextcarry": [0, 1, 3, 6, 8, 9, 10, 12, 15, 17, 2, 4, 7, 11, 13, 16, 5, 14], - "nextlen": 18, - "offsets": [0, 1, 3, 6, 8, 9, 9, 10, 12, 15, 17, 18], - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1], - "starts": [0, 5] - }, - "outputs": { - "missing": [0, 0, 1, 0, 1, 2, 0, 1, 0, 1, 1, 2, 1, 2, 3, 1, 2, 1], - "nextshifts": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3], - "nummissing": [1, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 12, - "maxcount": 3, - "nextcarry": [0, 1, 3, 6, 8, 9, 10, 12, 15, 17, 2, 4, 7, 11, 13, 16, 5, 14], - "nextlen": 18, - "offsets": [0, 1, 3, 6, 6, 8, 9, 10, 12, 15, 17, 18, 18], - "parents": [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1], - "starts": [0, 6] - }, - "outputs": { - "missing": [0, 0, 1, 0, 1, 2, 1, 2, 1, 0, 0, 1, 0, 1, 2, 0, 1, 0], - "nextshifts": [0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 2, 1, 1, 1, 2, 2], - "nummissing": [1, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 12, - "maxcount": 3, - "nextcarry": [0, 1, 3, 6, 8, 9, 10, 12, 15, 17, 2, 4, 7, 11, 13, 16, 5, 14], - "nextlen": 18, - "offsets": [0, 1, 3, 6, 6, 8, 9, 10, 12, 15, 17, 17, 18], - "parents": [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1], - "starts": [0, 6] - }, - "outputs": { - "missing": [0, 0, 1, 0, 1, 2, 1, 2, 1, 0, 0, 1, 0, 1, 2, 0, 1, 1], - "nextshifts": [0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 2, 1, 1, 1, 2, 2], - "nummissing": [1, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 12, - "maxcount": 3, - "nextcarry": [0, 1, 3, 6, 8, 9, 10, 12, 15, 17, 2, 4, 7, 11, 13, 16, 5, 14], - "nextlen": 18, - "offsets": [0, 1, 3, 6, 6, 8, 9, 10, 12, 15, 15, 17, 18], - "parents": [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1], - "starts": [0, 6] - }, - "outputs": { - "missing": [0, 0, 1, 0, 1, 2, 1, 2, 1, 0, 0, 1, 0, 1, 2, 1, 2, 1], - "nextshifts": [0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 2, 1, 1, 2, 2, 2], - "nummissing": [1, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 12, - "maxcount": 3, - "nextcarry": [0, 1, 3, 6, 8, 9, 10, 12, 15, 17, 2, 4, 7, 11, 13, 16, 5, 14], - "nextlen": 18, - "offsets": [0, 1, 3, 6, 6, 8, 9, 10, 12, 12, 15, 17, 18], - "parents": [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1], - "starts": [0, 6] - }, - "outputs": { - "missing": [0, 0, 1, 0, 1, 2, 1, 2, 1, 0, 0, 1, 1, 2, 3, 1, 2, 1], - "nextshifts": [0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 2, 1, 2, 2, 2, 3], - "nummissing": [1, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 12, - "maxcount": 3, - "nextcarry": [0, 1, 3, 6, 8, 9, 10, 12, 15, 17, 2, 4, 7, 11, 13, 16, 5, 14], - "nextlen": 18, - "offsets": [0, 1, 3, 6, 6, 8, 9, 9, 10, 12, 15, 17, 18], - "parents": [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1], - "starts": [0, 6] - }, - "outputs": { - "missing": [0, 0, 1, 0, 1, 2, 1, 2, 1, 1, 1, 2, 1, 2, 3, 1, 2, 1], - "nextshifts": [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3], - "nummissing": [1, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 12, - "maxcount": 3, - "nextcarry": [0, 1, 3, 6, 8, 9, 10, 12, 15, 17, 2, 4, 7, 11, 13, 16, 5, 14], - "nextlen": 18, - "offsets": [0, 0, 1, 3, 6, 8, 9, 10, 12, 15, 17, 18, 18], - "parents": [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1], - "starts": [0, 6] - }, - "outputs": { - "missing": [1, 1, 2, 1, 2, 3, 1, 2, 1, 0, 0, 1, 0, 1, 2, 0, 1, 0], - "nextshifts": [1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 2, 2, 2, 1, 1, 1, 3, 2], - "nummissing": [1, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 12, - "maxcount": 3, - "nextcarry": [0, 1, 3, 6, 8, 9, 10, 12, 15, 17, 2, 4, 7, 11, 13, 16, 5, 14], - "nextlen": 18, - "offsets": [0, 0, 1, 3, 6, 8, 9, 10, 12, 15, 17, 17, 18], - "parents": [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1], - "starts": [0, 6] - }, - "outputs": { - "missing": [1, 1, 2, 1, 2, 3, 1, 2, 1, 0, 0, 1, 0, 1, 2, 0, 1, 1], - "nextshifts": [1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 2, 2, 2, 1, 1, 1, 3, 2], - "nummissing": [1, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 12, - "maxcount": 3, - "nextcarry": [0, 1, 3, 6, 8, 9, 10, 12, 15, 17, 2, 4, 7, 11, 13, 16, 5, 14], - "nextlen": 18, - "offsets": [0, 0, 1, 3, 6, 8, 9, 10, 12, 15, 15, 17, 18], - "parents": [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1], - "starts": [0, 6] - }, - "outputs": { - "missing": [1, 1, 2, 1, 2, 3, 1, 2, 1, 0, 0, 1, 0, 1, 2, 1, 2, 1], - "nextshifts": [1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 2, 2, 2, 1, 1, 2, 3, 2], - "nummissing": [1, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 12, - "maxcount": 3, - "nextcarry": [0, 1, 3, 6, 8, 9, 10, 12, 15, 17, 2, 4, 7, 11, 13, 16, 5, 14], - "nextlen": 18, - "offsets": [0, 0, 1, 3, 6, 8, 9, 10, 12, 12, 15, 17, 18], - "parents": [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1], - "starts": [0, 6] - }, - "outputs": { - "missing": [1, 1, 2, 1, 2, 3, 1, 2, 1, 0, 0, 1, 1, 2, 3, 1, 2, 1], - "nextshifts": [1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 2, 2, 2, 1, 2, 2, 3, 3], - "nummissing": [1, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 12, - "maxcount": 3, - "nextcarry": [0, 1, 3, 6, 8, 9, 10, 12, 15, 17, 2, 4, 7, 11, 13, 16, 5, 14], - "nextlen": 18, - "offsets": [0, 0, 1, 3, 6, 8, 9, 9, 10, 12, 15, 17, 18], - "parents": [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1], - "starts": [0, 6] - }, - "outputs": { - "missing": [1, 1, 2, 1, 2, 3, 1, 2, 1, 1, 1, 2, 1, 2, 3, 1, 2, 1], - "nextshifts": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3], - "nummissing": [1, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 12, - "maxcount": 3, - "nextcarry": [0, 1, 3, 6, 8, 9, 10, 12, 15, 17, 2, 4, 7, 11, 13, 16, 5, 14], - "nextlen": 18, - "offsets": [0, 1, 3, 6, 8, 9, 9, 9, 10, 12, 15, 17, 18], - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1], - "starts": [0, 5] - }, - "outputs": { - "missing": [0, 0, 1, 0, 1, 2, 0, 1, 0, 2, 2, 3, 2, 3, 4, 2, 3, 2], - "nextshifts": [0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 1, 1, 1, 3, 3, 3, 2, 4], - "nummissing": [2, 4, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 13, - "maxcount": 3, - "nextcarry": [0, 1, 3, 6, 8, 9, 10, 12, 15, 17, 2, 4, 7, 11, 13, 16, 5, 14], - "nextlen": 18, - "offsets": [0, 1, 3, 6, 6, 8, 9, 9, 9, 10, 12, 15, 17, 18], - "parents": [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1], - "starts": [0, 6] - }, - "outputs": { - "missing": [0, 0, 1, 0, 1, 2, 1, 2, 1, 2, 2, 3, 2, 3, 4, 2, 3, 2], - "nextshifts": [0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 3, 3, 3, 2, 4], - "nummissing": [2, 4, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 13, - "maxcount": 3, - "nextcarry": [0, 1, 3, 6, 8, 9, 10, 12, 15, 17, 2, 4, 7, 11, 13, 16, 5, 14], - "nextlen": 18, - "offsets": [0, 0, 1, 3, 6, 8, 9, 9, 9, 10, 12, 15, 17, 18], - "parents": [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1], - "starts": [0, 6] - }, - "outputs": { - "missing": [1, 1, 2, 1, 2, 3, 1, 2, 1, 2, 2, 3, 2, 3, 4, 2, 3, 2], - "nextshifts": [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4], - "nummissing": [2, 4, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 9, - "maxcount": 4, - "nextcarry": [0, 1, 3, 6, 10, 13, 15, 2, 4, 7, 11, 14, 5, 8, 12, 9], - "nextlen": 16, - "offsets": [0, 0, 1, 3, 6, 10, 13, 15, 16, 16], - "parents": [0, 0, 0, 0, 0, 0, 0, 0, 0], - "starts": [0] - }, - "outputs": { - "missing": [1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 1, 2, 1], - "nextshifts": [1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4], - "nummissing": [2, 4, 6, 8] - } - } - ] + "inputs": { + "fromptr": [-4,-6,-7,6,4,6,2,1,3], + "outlength": 5, + "starts": [0,3,4,-1,6], + "offsets": [0,3,4,6,6,9] + }, + "outputs": { + "toptr": [2,3,4,-1,7] + }, + "error": false }, { - "name": "awkward_ListOffsetArray_reduce_local_nextparents_64", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "length": 0, - "offsets": [0], - "nextparents_length": 0 - }, - "outputs": { - "nextparents": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "offsets": [0, 1], - "nextparents_length": 1 - }, - "outputs": { - "nextparents": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 18, - "offsets": [0, 0, 1, 3, 3, 6, 8, 9, 9, 9, 10, 10, 12, 15, 15, 17, 18, 18, 18], - "nextparents_length": 18 - }, - "outputs": { - "nextparents": [1, 2, 2, 4, 4, 4, 5, 5, 6, 9, 11, 11, 12, 12, 12, 14, 14, 15] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 4, - "offsets": [0, 1, 3, 5, 5], - "nextparents_length": 5 - }, - "outputs": { - "nextparents": [0, 1, 1, 2, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "offsets": [0, 1, 1, 3, 5, 7], - "nextparents_length": 7 - }, - "outputs": { - "nextparents": [0, 2, 2, 3, 3, 4, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "offsets": [0, 0, 1, 1, 2, 2], - "nextparents_length": 2 - }, - "outputs": { - "nextparents": [1, 3] - } - } - ] + "inputs": { + "fromptr": [-4,-6,-7,6,-4,-6,-7,2,1,3], + "outlength": 4, + "starts": [0,3,4,7], + "offsets": [0,3,4,7,10] + }, + "outputs": { + "toptr": [2,3,6,8] + }, + "error": false }, { - "name": "awkward_ListOffsetArray_reduce_nonlocal_nextstarts_64", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "nextlen": 0, - "nextparents": [] - }, - "outputs": { - "nextstarts": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 18, - "nextparents": [0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 1, 1, 1, 4, 4, 4, 2, 5] - }, - "outputs": { - "nextstarts": [0, 10, 16, 5, 13, 17] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 21, - "nextparents": [0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 1, 1, 1, 4, 4, 4, 4, 2, 5, 5, 5] - }, - "outputs": { - "nextstarts": [0, 10, 17, 5, 13, 18] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 3, - "nextparents": [0, 1, 2] - }, - "outputs": { - "nextstarts": [0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 5, - "nextparents": [0, 0, 1, 2, 3] - }, - "outputs": { - "nextstarts": [0, 2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 6, - "nextparents": [0, 0, 1, 1, 2, 2] - }, - "outputs": { - "nextstarts": [0, 2, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 6, - "nextparents": [0, 0, 1, 1, 2, 3] - }, - "outputs": { - "nextstarts": [0, 2, 4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 8, - "nextparents": [0, 0, 1, 1, 2, 2, 3, 3] - }, - "outputs": { - "nextstarts": [0, 2, 4, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 7, - "nextparents": [0, 0, 1, 1, 2, 2, 3] - }, - "outputs": { - "nextstarts": [0, 2, 4, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 6, - "nextparents": [0, 0, 0, 1, 1, 1] - }, - "outputs": { - "nextstarts": [0, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 5, - "nextparents": [0, 0, 0, 1, 1] - }, - "outputs": { - "nextstarts": [0, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 7, - "nextparents": [0, 0, 0, 1, 1, 2, 3] - }, - "outputs": { - "nextstarts": [0, 3, 5, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 9, - "nextparents": [0, 0, 0, 1, 1, 2, 2, 3, 4] - }, - "outputs": { - "nextstarts": [0, 3, 5, 7, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 7, - "nextparents": [0, 0, 0, 1, 1, 1, 2] - }, - "outputs": { - "nextstarts": [0, 3, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 9, - "nextparents": [0, 0, 0, 1, 1, 1, 2, 2, 3] - }, - "outputs": { - "nextstarts": [0, 3, 6, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 10, - "nextparents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3] - }, - "outputs": { - "nextstarts": [0, 3, 6, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 12, - "nextparents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3] - }, - "outputs": { - "nextstarts": [0, 3, 6, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 12, - "nextparents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 4] - }, - "outputs": { - "nextstarts": [0, 3, 6, 9, 11] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 15, - "nextparents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4] - }, - "outputs": { - "nextstarts": [0, 3, 6, 9, 12] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 15, - "nextparents": [0, 5, 5, 1, 6, 6, 2, 7, 7, 3, 8, 8, 4, 9, 9] - }, - "outputs": { - "nextstarts": [0, 3, 6, 9, 12, 1, 4, 7, 10, 13] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 15, - "nextparents": [0, 5, 10, 1, 6, 11, 2, 7, 12, 3, 8, 13, 4, 9, 14] - }, - "outputs": { - "nextstarts": [0, 3, 6, 9, 12, 1, 4, 7, 10, 13, 2, 5, 8, 11, 14] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 15, - "nextparents": [0, 0, 5, 1, 1, 6, 2, 2, 7, 3, 3, 8, 4, 4, 9] - }, - "outputs": { - "nextstarts": [0, 3, 6, 9, 12, 2, 5, 8, 11, 14] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 6, - "nextparents": [0, 0, 0, 0, 1, 1] - }, - "outputs": { - "nextstarts": [0, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 9, - "nextparents": [0, 0, 0, 0, 1, 1, 1, 2, 2] - }, - "outputs": { - "nextstarts": [0, 4, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 20, - "nextparents": [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4] - }, - "outputs": { - "nextstarts": [0, 4, 8, 12, 16] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 20, - "nextparents": [0, 0, 5, 5, 1, 1, 6, 6, 2, 2, 7, 7, 3, 3, 8, 8, 4, 4, 9, 9] - }, - "outputs": { - "nextstarts": [0, 4, 8, 12, 16, 2, 6, 10, 14, 18] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 9, - "nextparents": [0, 0, 3, 3, 1, 1, 4, 4, 2] - }, - "outputs": { - "nextstarts": [0, 4, 8, 2, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 12, - "nextparents": [0, 0, 3, 3, 1, 1, 4, 4, 2, 2, 5, 5] - }, - "outputs": { - "nextstarts": [0, 4, 8, 2, 6, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 15, - "nextparents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2] - }, - "outputs": { - "nextstarts": [0, 5, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 17, - "nextparents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 4] - }, - "outputs": { - "nextstarts": [0, 5, 10, 15, 16] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 25, - "nextparents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4] - }, - "outputs": { - "nextstarts": [0, 5, 10, 15, 20] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 9, - "nextparents": [0, 0, 0, 3, 3, 1, 1, 4, 2] - }, - "outputs": { - "nextstarts": [0, 5, 8, 3, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 22, - "nextparents": [0, 0, 0, 5, 5, 5, 1, 1, 6, 6, 2, 2, 7, 7, 3, 3, 8, 8, 4, 4, 9, 9] - }, - "outputs": { - "nextstarts": [0, 6, 10, 14, 18, 3, 8, 12, 16, 20] - } - }, - { - "error": false, - "message": "", - "inputs": { - "nextlen": 16, - "nextparents": [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 3] - }, - "outputs": { - "nextstarts": [0, 7, 12, 15] - } - } - ] + "inputs": { + "fromptr": [3,4,2,1,2,3,6,1,-1,1,7,4], + "outlength": 5, + "starts": [0,3,6,9,11], + "offsets": [0,3,6,9,11,12] + }, + "outputs": { + "toptr": [2,3,8,9,11] + }, + "error": false }, { - "name": "awkward_ListOffsetArray_reduce_nonlocal_outstartsstops_64", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "distincts": [], - "lendistincts": 0, - "outlength": 0 - }, - "outputs": { - "outstarts": [], - "outstops": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "distincts": [], - "lendistincts": 0, - "outlength": 1 - }, - "outputs": { - "outstarts": [0], - "outstops": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "distincts": [0, 0, 0, 0, 0, -1, -1, -1, -1, -1, 2, 2, 2, 2, 2], - "lendistincts": 15, - "outlength": 3 - }, - "outputs": { - "outstarts": [0, 5, 10], - "outstops": [5, 5, 15] - } - }, - { - "error": false, - "message": "", - "inputs": { - "distincts": [0, 0, 0, 0, 0, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1], - "lendistincts": 15, - "outlength": 3 - }, - "outputs": { - "outstarts": [0, 5, 10], - "outstops": [5, 5, 15] - } - }, - { - "error": false, - "message": "", - "inputs": { - "distincts": [0, 0], - "lendistincts": 2, - "outlength": 1 - }, - "outputs": { - "outstarts": [0], - "outstops": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "distincts": [0, 0, 0], - "lendistincts": 3, - "outlength": 1 - }, - "outputs": { - "outstarts": [0], - "outstops": [3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "distincts": [0, 0, 0, 1, 1, -1], - "lendistincts": 6, - "outlength": 2 - }, - "outputs": { - "outstarts": [0, 3], - "outstops": [3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "distincts": [0, 0, 0, 1, 1, 1], - "lendistincts": 6, - "outlength": 2 - }, - "outputs": { - "outstarts": [0, 3], - "outstops": [3, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "distincts": [0, 0, 0, 1, 1, -1, 2, -1, -1], - "lendistincts": 9, - "outlength": 3 - }, - "outputs": { - "outstarts": [0, 3, 6], - "outstops": [3, 5, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "distincts": [0, 0, 0, 1, -1, -1, 2, 1, -1, 3, -1, -1], - "lendistincts": 12, - "outlength": 4 - }, - "outputs": { - "outstarts": [0, 3, 6, 9], - "outstops": [3, 4, 8, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "distincts": [0, 0, -1, 1, -1, -1, -1, -1, -1, 2, 1, 0], - "lendistincts": 12, - "outlength": 4 - }, - "outputs": { - "outstarts": [0, 3, 6, 9], - "outstops": [2, 4, 6, 12] - } - }, - { - "error": false, - "message": "", - "inputs": { - "distincts": [0, 0, 0, 0], - "lendistincts": 4, - "outlength": 1 - }, - "outputs": { - "outstarts": [0], - "outstops": [4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "distincts": [0, 0, 0, -1, 1, 1, 1, 0], - "lendistincts": 8, - "outlength": 2 - }, - "outputs": { - "outstarts": [0, 4], - "outstops": [3, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "distincts": [0, 0, 0, 0, 0], - "lendistincts": 5, - "outlength": 1 - }, - "outputs": { - "outstarts": [0], - "outstops": [5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "distincts": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, -1], - "lendistincts": 15, - "outlength": 3 - }, - "outputs": { - "outstarts": [0, 5, 10], - "outstops": [5, 10, 14] - } - }, - { - "error": false, - "message": "", - "inputs": { - "distincts": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2], - "lendistincts": 15, - "outlength": 3 - }, - "outputs": { - "outstarts": [0, 5, 10], - "outstops": [5, 10, 15] - } - }, - { - "error": false, - "message": "", - "inputs": { - "distincts": [0, 0, 0, 0, 0, 1, -1, -1, -1, -1, 2, 1, 1, 1, 1], - "lendistincts": 15, - "outlength": 3 - }, - "outputs": { - "outstarts": [0, 5, 10], - "outstops": [5, 6, 15] - } - }, - { - "error": false, - "message": "", - "inputs": { - "distincts": [0, 0, 0, 0, 0, 1, 1, 1, 1, -1, 2, 2, 2, 2, 1], - "lendistincts": 15, - "outlength": 3 - }, - "outputs": { - "outstarts": [0, 5, 10], - "outstops": [5, 9, 15] - } - }, - { - "error": false, - "message": "", - "inputs": { - "distincts": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1], - "lendistincts": 15, - "outlength": 3 - }, - "outputs": { - "outstarts": [0, 5, 10], - "outstops": [5, 10, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "distincts": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1], - "lendistincts": 10, - "outlength": 2 - }, - "outputs": { - "outstarts": [0, 5], - "outstops": [5, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "distincts": [0, 0, 0, -1, -1, -1, 1, 1, -1], - "lendistincts": 9, - "outlength": 3 - }, - "outputs": { - "outstarts": [0, 3, 6], - "outstops": [3, 3, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "distincts": [0, 0, 0, -1, -1, -1, 1, 1, 1], - "lendistincts": 9, - "outlength": 3 - }, - "outputs": { - "outstarts": [0, 3, 6], - "outstops": [3, 3, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "distincts": [0, 0, -1, -1, -1, -1, 1, -1, -1, 2, 1, 0], - "lendistincts": 12, - "outlength": 4 - }, - "outputs": { - "outstarts": [0, 3, 6, 9], - "outstops": [2, 3, 7, 12] - } - }, - { - "error": false, - "message": "", - "inputs": { - "distincts": [0, 0, -1, -1, -1, -1, -1, -1, -1, 1, 1, 0], - "lendistincts": 12, - "outlength": 4 - }, - "outputs": { - "outstarts": [0, 3, 6, 9], - "outstops": [2, 3, 6, 12] - } - }, - { - "error": false, - "message": "", - "inputs": { - "distincts": [0, 0, 0, -1, -1, -1, -1, -1, -1, 1, 1, 1], - "lendistincts": 12, - "outlength": 4 - }, - "outputs": { - "outstarts": [0, 3, 6, 9], - "outstops": [3, 3, 6, 12] - } - }, - { - "error": false, - "message": "", - "inputs": { - "distincts": [], - "lendistincts": 0, - "outlength": 1 - }, - "outputs": { - "outstarts": [0], - "outstops": [0] - } - } - ] + "inputs": { + "fromptr": [3,4,2,2,2,1,6,1,4,1,3,3,4,6,6], + "outlength": 5, + "starts": [0,3,6,9,12], + "offsets": [0,3,6,9,12,15] + }, + "outputs": { + "toptr": [2,5,7,9,12] + }, + "error": false }, { - "name": "awkward_NumpyArray_pad_zero_to_length", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 2, 3], - "fromptr": [0, 1, 3], - "offsetslength": 3, - "target": 2 - }, - "outputs": { - "toptr": [0, 1, 3, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [], - "fromptr": [], - "offsetslength": 0, - "target": 0 - }, - "outputs": { - "toptr": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 2, 2, 4], - "fromptr": [1, 3, 3, 5], - "offsetslength": 4, - "target": 4 - }, - "outputs": { - "toptr": [1, 3, 0, 0, 0, 0, 0, 0, 3, 5, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 0], - "fromptr": [3, 5], - "offsetslength": 2, - "target": 4 - }, - "outputs": { - "toptr": [0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 1, 2, 3, 5], - "fromptr": [0, 3, 3, 5, 6], - "offsetslength": 5, - "target": 4 - }, - "outputs": { - "toptr": [0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 5, 6, 0, 0] - } - } - ] + "inputs": { + "fromptr": [3,4,2,-3,4,2,2,2,1,2,-2,1,6,1,4,-6,1,4,1,3,3,1,-3,3,4,6,6,4,6,-6], + "outlength": 10, + "starts": [0,6,12,18,24,3,9,15,21,27], + "offsets": [0,3,6,9,12,15,18,21,24,27,30] + }, + "outputs": { + "toptr": [2,3,8,10,13,15,18,22,24,29] + }, + "error": false }, { - "name": "awkward_NumpyArray_rearrange_shifted", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromshifts": [], - "length": 0, - "fromoffsets": [], - "offsetslength": 0, - "fromparents": [], - "fromstarts": [] - }, - "outputs": { - "toptr": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "toptr": [0, 1, 2, 3, 4, 5, 6, 7, 8], - "fromshifts": [0, 1, 2, 3, 4, 5, 6], - "length": 4, - "fromoffsets": [0, 1, 3, 3, 5, 7, 9], - "offsetslength": 7, - "fromparents": [0, 1, 3, 6], - "fromstarts": [0, 1, 2, 3, 4, 5, 6] - }, - "outputs": { - "toptr": [0, 3, 3, 6, 7, 10, 11, 14, 15] - } - }, - { - "error": false, - "message": "", - "inputs": { - "toptr": [0, 0, 0, 0, 0, 0, 0, 0], - "fromshifts": [0, 1, 2, 3, 4, 5, 6], - "length": 4, - "fromoffsets": [0, 2, 5, 8], - "offsetslength": 4, - "fromparents": [0, 1, 3, 6], - "fromstarts": [0, 1, 2, 3, 4, 5, 6] - }, - "outputs": { - "toptr": [0, -1, 1, -2, 2, 5, 5, 5] - } - } - ] + "inputs": { + "fromptr": [6,3,2,1,2], + "outlength": 1, + "starts": [0], + "offsets": [0,5] + }, + "outputs": { + "toptr": [3] + }, + "error": false }, { - "name": "awkward_NumpyArray_reduce_mask_ByteMaskedArray_64", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "lenparents": 0, - "outlength": 0, - "parents": [] - }, - "outputs": { - "toptr": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 30, - "outlength": 15, - "parents": [0, 0, 5, 5, 10, 10, 1, 1, 6, 6, 11, 11, 2, 2, 7, 7, 12, 12, 3, 3, 8, 8, 13, 13, 4, 4, 9, 9, 14, 14] - }, - "outputs": { - "toptr": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 30, - "outlength": 10, - "parents": [0, 0, 0, 5, 5, 5, 1, 1, 1, 6, 6, 6, 2, 2, 2, 7, 7, 7, 3, 3, 3, 8, 8, 8, 4, 4, 4, 9, 9, 9] - }, - "outputs": { - "toptr": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 30, - "outlength": 6, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5] - }, - "outputs": { - "toptr": [0, 0, 0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 18, - "outlength": 6, - "parents": [0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 1, 1, 1, 4, 4, 4, 2, 5] - }, - "outputs": { - "toptr": [0, 0, 0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 21, - "outlength": 6, - "parents": [0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 1, 1, 1, 4, 4, 4, 4, 2, 5, 5, 5] - }, - "outputs": { - "toptr": [0, 0, 0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 20, - "outlength": 4, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3] - }, - "outputs": { - "toptr": [0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 20, - "outlength": 5, - "parents": [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4] - }, - "outputs": { - "toptr": [0, 0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 15, - "outlength": 3, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2] - }, - "outputs": { - "toptr": [0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 12, - "outlength": 3, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2] - }, - "outputs": { - "toptr": [0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 15, - "outlength": 5, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4] - }, - "outputs": { - "toptr": [0, 0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 12, - "outlength": 5, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 4] - }, - "outputs": { - "toptr": [0, 0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 9, - "outlength": 5, - "parents": [0, 0, 0, 1, 1, 2, 2, 3, 4] - }, - "outputs": { - "toptr": [0, 0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 10, - "outlength": 2, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1] - }, - "outputs": { - "toptr": [0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 10, - "outlength": 4, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3] - }, - "outputs": { - "toptr": [0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 7, - "outlength": 4, - "parents": [0, 0, 0, 1, 1, 2, 3] - }, - "outputs": { - "toptr": [0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 10, - "outlength": 4, - "parents": [0, 0, 0, 1, 2, 2, 2, 3, 3, 3] - }, - "outputs": { - "toptr": [0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 9, - "outlength": 5, - "parents": [0, 0, 3, 3, 1, 1, 4, 4, 2] - }, - "outputs": { - "toptr": [0, 0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 10, - "outlength": 3, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 2] - }, - "outputs": { - "toptr": [0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 6, - "outlength": 3, - "parents": [0, 0, 0, 1, 1, 2] - }, - "outputs": { - "toptr": [0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 5, - "outlength": 1, - "parents": [0, 0, 0, 0, 0] - }, - "outputs": { - "toptr": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 6, - "outlength": 3, - "parents": [0, 0, 1, 1, 1, 2] - }, - "outputs": { - "toptr": [0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 5, - "outlength": 3, - "parents": [0, 0, 1, 2, 2] - }, - "outputs": { - "toptr": [0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 6, - "outlength": 3, - "parents": [0, 1, 1, 2, 2, 2] - }, - "outputs": { - "toptr": [0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 22, - "outlength": 8, - "parents": [0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 1, 1, 1, 5, 5, 5, 5, 2, 6, 6, 6, 7] - }, - "outputs": { - "toptr": [0, 0, 0, 1, 0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 9, - "outlength": 5, - "parents": [0, 0, 0, 1, 2, 2, 4, 4, 4] - }, - "outputs": { - "toptr": [0, 0, 0, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 9, - "outlength": 8, - "parents": [0, 0, 0, 6, 6, 1, 1, 7, 2] - }, - "outputs": { - "toptr": [0, 0, 0, 1, 1, 1, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 12, - "outlength": 9, - "parents": [0, 0, 6, 6, 1, 1, 7, 7, 2, 2, 8, 8] - }, - "outputs": { - "toptr": [0, 0, 0, 1, 1, 1, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 6, - "outlength": 4, - "parents": [0, 0, 1, 1, 1, 3] - }, - "outputs": { - "toptr": [0, 0, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 6, - "outlength": 4, - "parents": [0, 0, 1, 3, 3, 3] - }, - "outputs": { - "toptr": [0, 0, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 9, - "outlength": 4, - "parents": [0, 0, 0, 0, 0, 2, 2, 2, 3] - }, - "outputs": { - "toptr": [0, 1, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 9, - "outlength": 6, - "parents": [0, 0, 0, 2, 2, 3, 4, 4, 5] - }, - "outputs": { - "toptr": [0, 1, 0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 9, - "outlength": 5, - "parents": [0, 0, 0, 2, 2, 3, 4, 4, 4] - }, - "outputs": { - "toptr": [0, 1, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 6, - "outlength": 3, - "parents": [0, 0, 0, 2, 2, 2] - }, - "outputs": { - "toptr": [0, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 3, - "outlength": 3, - "parents": [0, 0, 2] - }, - "outputs": { - "toptr": [0, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 9, - "outlength": 7, - "parents": [0, 0, 0, 2, 2, 3, 6, 6, 6] - }, - "outputs": { - "toptr": [0, 1, 0, 0, 1, 1, 0] - } - } - ] + "inputs": { + "fromptr": [3,2,6,1,4,4,2,1,3,6,2,1,4,3,6,-3,2,-6,1,4,4,-2,1,-3,6,2,1,4,3,-6], + "outlength": 6, + "starts": [0,5,10,15,20,25], + "offsets": [0,5,10,15,20,25,30] + }, + "outputs": { + "toptr": [3,7,11,17,23,29] + }, + "error": false }, { - "name": "awkward_NumpyArray_reduce_adjust_starts_64", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "toptr": [], - "starts": [], - "outlength": 0, - "parents": [] - }, - "outputs": { - "toptr": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "toptr": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "starts": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], - "outlength": 15, - "parents": [0, 0, 5, 5, 10, 10, 1, 1, 6, 6, 11, 11, 2, 2, 7, 7, 12, 12, 3, 3, 8, 8, 13, 13, 4, 4, 9, 9, 14, 14] - }, - "outputs": { - "toptr": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "toptr": [0, 0, 0, 0, 0, 0], - "starts": [0, 0, 0, 0, 0, 0], - "outlength": 6, - "parents": [0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 1, 1, 1, 4, 4, 4, 2, 5] - }, - "outputs": { - "toptr": [0, 0, 0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "toptr": [0], - "starts": [-1], - "outlength": 1, - "parents": [0, 0, 0, 0, 0] - }, - "outputs": { - "toptr": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "toptr": [0, 0, 0, 1, 0, 0, 0, 0], - "starts": [8, 7, 6, 5, 4, 3, 2, 1], - "outlength": 8, - "parents": [0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 1, 1, 1, 5, 5, 5, 5, 2, 6, 6, 6, 7] - }, - "outputs": { - "toptr": [-8, -8, -8, -7, -8, -8, -8, -8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "toptr": [0, 0, 0, 1, 1, 1, 0, 0], - "starts": [-1, -2, -3, -4, -5, -6, -7, -8], - "outlength": 8, - "parents": [0, 0, 0, 6, 6, 1, 1, 7] - }, - "outputs": { - "toptr": [1, 1, 1, 2, 2, 2, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "toptr": [0, 0, 0, -1, -1, -1, 0, 0], - "starts": [-1, -2, -3, -4, -5, -6, -7, -8], - "outlength": 8, - "parents": [0, 0, 0, 6, 6, 1, 1, 7] - }, - "outputs": { - "toptr": [1, 1, 1, -1, -1, -1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "toptr": [0, 1, 0, 0, 0, 0], - "starts": [-1, 1, 0, -5, 2, 3], - "outlength": 6, - "parents": [0, 0, 0, 2, 2, 3, 4, 4, 5] - }, - "outputs": { - "toptr": [1, 2, 1, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "toptr": [0, 1, 0], - "starts": [-1, 0, 1], - "outlength": 3, - "parents": [0, 0, 2] - }, - "outputs": { - "toptr": [1, 2, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "toptr": [-1, -1, -1, -1, -1, -1, -1], - "starts": [0, 1, 0, 2, 1, 0, 3], - "outlength": 7, - "parents": [0, 0, 0, 2, 2, 3, 6, 6, 6] - }, - "outputs": { - "toptr": [-1, -1, -1, -1, -1, -1, -1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "toptr": [0, 1, 0, 0, 1, 1, 0], - "starts": [0, 1, 0, 2, 1, 0, 3], - "outlength": 7, - "parents": [0, 0, 0, 2, 2, 3, 6, 6, 6] - }, - "outputs": { - "toptr": [0, 1, 0, 0, 1, 1, 0] - } - } - ] + "inputs": { + "fromptr": [3,2,6,1,4,4,2,1,3,6,2,1,4,3,6], + "outlength": 3, + "starts": [0,5,10], + "offsets": [0,5,10,15] + }, + "outputs": { + "toptr": [3,7,11] + }, + "error": false }, { - "name": "awkward_NumpyArray_reduce_adjust_starts_shifts_64", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "toptr": [], - "starts": [], - "shifts": [], - "outlength": 0, - "parents": [] - }, - "outputs": { - "toptr": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "toptr": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "starts": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], - "shifts": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], - "outlength": 15, - "parents": [0, 0, 5, 5, 10, 10, 1, 1, 6, 6, 11, 11, 2, 2, 7, 7, 12, 12, 3, 3, 8, 8, 13, 13, 4, 4, 9, 9, 14, 14] - }, - "outputs": { - "toptr": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "toptr": [0, 0, 0, 0, 0, 0], - "starts": [0, 0, 0, 0, 0, 0], - "shifts": [4, 0, 5, 2, 1, 3], - "outlength": 6, - "parents": [0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 1, 1, 1, 4, 4, 4, 2, 5] - }, - "outputs": { - "toptr": [4, 4, 4, 4, 4, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "toptr": [0], - "starts": [-1], - "shifts": [-1], - "outlength": 1, - "parents": [0, 0, 0, 0, 0] - }, - "outputs": { - "toptr": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "toptr": [0, 0, 0, 1, 0, 0, 0, 0], - "starts": [8, 7, 6, 5, 4, 3, 2, 1], - "shifts": [1, 2, 3, 4, 5, 6, 7, 8], - "outlength": 8, - "parents": [0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 1, 1, 1, 5, 5, 5, 5, 2, 6, 6, 6, 7] - }, - "outputs": { - "toptr": [-7, -7, -7, -5, -7, -7, -7, -7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "toptr": [0, 0, 0, 1, 0, 0, 0, 0], - "starts": [1, 2, 3, 4, 5, 6, 7, 8], - "shifts": [8, 7, 6, 5, 4, 3, 2, 1], - "outlength": 8, - "parents": [0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 1, 1, 1, 5, 5, 5, 5, 2, 6, 6, 6, 7] - }, - "outputs": { - "toptr": [7, 7, 7, 7, 7, 7, 7, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "toptr": [0, 0, 0, 1, 1, 1, 0, 0], - "starts": [-1, -2, -3, -4, -5, -6, -7, -8], - "shifts": [-1, -2, -3, -4, -5, -6, -7, -8], - "outlength": 8, - "parents": [0, 0, 0, 6, 6, 1, 1, 7] - }, - "outputs": { - "toptr": [0, 0, 0, 0, 0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "toptr": [0, 0, 0, -1, -1, -1, 0, 0], - "starts": [-1, -2, -3, -4, -5, -6, -7, -8], - "shifts": [-1, 2, -3, 4, -5, 6, -7, 8], - "outlength": 8, - "parents": [0, 0, 0, 6, 6, 1, 1, 7] - }, - "outputs": { - "toptr": [0, 0, 0, -1, -1, -1, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "toptr": [0, 1, 0, 0, 0, 0], - "starts": [-1, 1, 0, -5, 2, 3], - "shifts": [1, -1, 0, 5, -2, -3], - "outlength": 6, - "parents": [0, 0, 0, 2, 2, 3, 4, 4, 5] - }, - "outputs": { - "toptr": [2, 1, 2, 2, 2, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "toptr": [0, 1, 0], - "starts": [-1, 0, 1], - "shifts": [1, -1, 1], - "outlength": 3, - "parents": [0, 0, 2] - }, - "outputs": { - "toptr": [2, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "toptr": [-1, -1, -1, -1, -1, -1, -1], - "starts": [0, 1, 0, 2, 1, 0, 3], - "shifts": [1, 0, 2, 0, 1, 2, 0], - "outlength": 7, - "parents": [0, 0, 0, 2, 2, 3, 6, 6, 6] - }, - "outputs": { - "toptr": [-1, -1, -1, -1, -1, -1, -1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "toptr": [0, 1, 0, 0, 1, 1, 0], - "starts": [0, 1, 0, 2, 1, 0, 3], - "shifts": [0, 1, 0, 2, 1, 0, 3], - "outlength": 7, - "parents": [0, 0, 0, 2, 2, 3, 6, 6, 6] - }, - "outputs": { - "toptr": [0, 2, 0, 0, 2, 2, 0] - } - } - ] + "inputs": { + "fromptr": [1,1,1,999,1,1,1,1,999,1,2,2,2,2,2,2,3,3], + "outlength": 6, + "starts": [0,10,16,5,13,17], + "offsets": [0,5,8,9,14,17,18] + }, + "outputs": { + "toptr": [0,5,8,9,14,17] + }, + "error": false }, { - "name": "awkward_UnionArray_fillna", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromindex": [], - "length": 0 - }, - "outputs": { - "toindex": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [-1, -1, -1, -1, -1], - "length": 5 - }, - "outputs": { - "toindex": [0, 0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [-1, -1, 0, -1, 1, 2, 3, 4, 5, -1, -1, -1], - "length": 12 - }, - "outputs": { - "toindex": [0, 0, 0, 0, 1, 2, 3, 4, 5, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [-1, 0, 1, -1], - "length": 4 - }, - "outputs": { - "toindex": [0, 0, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, -1, 1], - "length": 3 - }, - "outputs": { - "toindex": [0, 0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, -1, 1, -1, 2], - "length": 5 - }, - "outputs": { - "toindex": [0, 0, 1, 0, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, -1, 1, 2], - "length": 4 - }, - "outputs": { - "toindex": [0, 0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 1, -1], - "length": 3 - }, - "outputs": { - "toindex": [0, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 1, -1, 2], - "length": 4 - }, - "outputs": { - "toindex": [0, 1, 0, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 1, -1, 2, 3, -1, 4], - "length": 7 - }, - "outputs": { - "toindex": [0, 1, 0, 2, 3, 0, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 1, 2, -1, -1, -1], - "length": 6 - }, - "outputs": { - "toindex": [0, 1, 2, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 1, 2, -1, -1, 3, 4, 5, -1, -1], - "length": 10 - }, - "outputs": { - "toindex": [0, 1, 2, 0, 0, 3, 4, 5, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 1, 2, 3, 4, -1, -1], - "length": 7 - }, - "outputs": { - "toindex": [0, 1, 2, 3, 4, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [13, 9, 13, 4, 8, 3, 15, -1, 16, 2, 8], - "length": 11 - }, - "outputs": { - "toindex": [13, 9, 13, 4, 8, 3, 15, 0, 16, 2, 8] - } - } - ] + "inputs": { + "fromptr": [1,1,1,999,1,1,1,1,999,1,2,2,2,999,2,2,2,3,999,999,3,999], + "outlength": 8, + "starts": [0,10,17,-1,5,13,18,21], + "offsets": [0,5,8,9,9,14,18,21,22] + }, + "outputs": { + "toptr": [0,5,8,-1,9,14,20,21] + }, + "error": false }, { - "name": "awkward_UnionArray_filltags", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "base": 0, - "fromtags": [], - "length": 0, - "totagsoffset": 0 - }, - "outputs": { - "totags": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "base": 0, - "fromtags": [0, 0, 0, 1, 1, 1], - "length": 6, - "totagsoffset": 0 - }, - "outputs": { - "totags": [0, 0, 0, 1, 1, 1] - } - } - ] + "inputs": { + "fromptr": [1,1,1,999,1,1,1,1,999,1,2,2,2,999,2,2,2,3,999,999,3], + "outlength": 6, + "starts": [0,10,17,5,13,18], + "offsets": [0,5,8,9,14,18,21] + }, + "outputs": { + "toptr": [0,5,8,9,14,20] + }, + "error": false + } + ] + }, + { + "name": "awkward_UnionArray_fillindex_count", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "length": 3, + "toindexoffset": 4 + }, + "outputs": { + "toindex": [123,123,123,123,0,1,2] + } }, { - "name": "awkward_UnionArray_filltags_const", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "base": 0, - "length": 0, - "totagsoffset": 0 - }, - "outputs": { - "totags": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "base": 0, - "length": 6, - "totagsoffset": 0 - }, - "outputs": { - "totags": [0, 0, 0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "base": 3, - "length": 5, - "totagsoffset": 0 - }, - "outputs": { - "totags": [3, 3, 3, 3, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "base": 0, - "length": 3, - "totagsoffset": 3 - }, - "outputs": { - "totags": [123, 123, 123, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "base": 2, - "length": 2, - "totagsoffset": 2 - }, - "outputs": { - "totags": [123, 123, 2, 2] - } - } - ] + "error": false, + "message": "", + "inputs": { + "length": 0, + "toindexoffset": 0 + }, + "outputs": { + "toindex": [] + } }, { - "name": "awkward_UnionArray_nestedfill_tags_index", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "tmpstarts": [], - "fromcounts": [], - "length": 0, - "tag": 0 - }, - "outputs": { - "totags": [], - "toindex": [], - "tmpstarts": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "tmpstarts": [0], - "fromcounts": [1], - "length": 1, - "tag": 1 - }, - "outputs": { - "totags": [1], - "toindex": [0], - "tmpstarts": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "tmpstarts": [0, 1], - "fromcounts": [1, 2], - "length": 2, - "tag": 0 - }, - "outputs": { - "totags": [0, 0, 0], - "toindex": [0, 1, 2], - "tmpstarts": [1, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "tmpstarts": [0, 5, 5, 6, 8], - "fromcounts": [5, 0, 2, 3, 1], - "length": 5, - "tag": 1 - }, - "outputs": { - "totags": [1, 1, 1, 1, 1, 1, 1, 1, 1], - "toindex": [0, 1, 2, 3, 4, 5, 7, 8, 10], - "tmpstarts": [5, 5, 7, 9, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "tmpstarts": [0, 2, 4, 5, 7], - "fromcounts": [2, 3, 2, 2, 0], - "length": 5, - "tag": 1 - }, - "outputs": { - "totags": [1, 1, 1, 1, 1, 1, 1], - "toindex": [0, 1, 2, 3, 5, 7, 8], - "tmpstarts": [2, 5, 6, 7, 7] - } - } - ] + "error": false, + "message": "", + "inputs": { + "length": 2, + "toindexoffset": 2 + }, + "outputs": { + "toindex": [123,123,0,1] + } }, { - "name": "awkward_UnionArray_project", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromindex": [], - "fromtags": [], - "length": 0, - "which": 0 - }, - "outputs": { - "lenout": [0], - "tocarry": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [], - "fromtags": [], - "length": 0, - "which": 1 - }, - "outputs": { - "lenout": [0], - "tocarry": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [1], - "fromtags": [1], - "length": 1, - "which": 1 - }, - "outputs": { - "lenout": [1], - "tocarry": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 0], - "fromtags": [1, 1], - "length": 2, - "which": 1 - }, - "outputs": { - "lenout": [2], - "tocarry": [0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 1], - "fromtags": [0, 0], - "length": 2, - "which": 0 - }, - "outputs": { - "lenout": [2], - "tocarry": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 1], - "fromtags": [1, 1], - "length": 2, - "which": 1 - }, - "outputs": { - "lenout": [2], - "tocarry": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [2, 3], - "fromtags": [0, 0], - "length": 2, - "which": 0 - }, - "outputs": { - "lenout": [2], - "tocarry": [2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [2, 3], - "fromtags": [1, 1], - "length": 2, - "which": 1 - }, - "outputs": { - "lenout": [2], - "tocarry": [2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 1, 2], - "fromtags": [0, 0, 0], - "length": 3, - "which": 0 - }, - "outputs": { - "lenout": [3], - "tocarry": [0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 1, 2], - "fromtags": [1, 1, 1], - "length": 3, - "which": 1 - }, - "outputs": { - "lenout": [3], - "tocarry": [0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 1, 2, 3, 4], - "fromtags": [0, 0, 0, 0, 0], - "length": 5, - "which": 0 - }, - "outputs": { - "lenout": [5], - "tocarry": [0, 1, 2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromindex": [0, 1, 2, 3, 4], - "fromtags": [1, 1, 1, 1, 1], - "length": 5, - "which": 1 - }, - "outputs": { - "lenout": [5], - "tocarry": [0, 1, 2, 3, 4] - } - } - ] + "error": false, + "message": "", + "inputs": { + "length": 2, + "toindexoffset": 0 + }, + "outputs": { + "toindex": [0,1] + } }, { - "name": "awkward_UnionArray_simplify_one", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "base": 0, - "fromindex": [], - "fromtags": [], - "fromwhich": 0, - "length": 0, - "towhich": 0 - }, - "outputs": { - "toindex": [], - "totags": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "base": 0, - "fromindex": [0, 0, 0, 0, 0], - "fromtags": [1, 1, 1, 1, 1], - "fromwhich": 1, - "length": 5, - "towhich": 0 - }, - "outputs": { - "toindex": [0, 0, 0, 0, 0], - "totags": [0, 0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "base": 9, - "fromindex": [0, 1, 2, 3, 4, 5, 6, 7, 8], - "fromtags": [1, 1, 1, 1, 1, 1, 1, 1, 1], - "fromwhich": 1, - "length": 9, - "towhich": 0 - }, - "outputs": { - "toindex": [9, 10, 11, 12, 13, 14, 15, 16, 17], - "totags": [0, 0, 0, 0, 0, 0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "base": 0, - "fromindex": [0, 1], - "fromtags": [1, 1], - "fromwhich": 1, - "length": 2, - "towhich": 0 - }, - "outputs": { - "toindex": [0, 1], - "totags": [0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "base": 0, - "fromindex": [0], - "fromtags": [1], - "fromwhich": 1, - "length": 1, - "towhich": 0 - }, - "outputs": { - "toindex": [0], - "totags": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "base": 0, - "fromindex": [], - "fromtags": [], - "fromwhich": 1, - "length": 0, - "towhich": 0 - }, - "outputs": { - "toindex": [], - "totags": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "base": 0, - "fromindex": [], - "fromtags": [], - "fromwhich": 1, - "length": 0, - "towhich": 1 - }, - "outputs": { - "toindex": [], - "totags": [] - } - } - ] + "error": false, + "message": "", + "inputs": { + "length": 3, + "toindexoffset": 6 + }, + "outputs": { + "toindex": [123,123,123,123,123,123,0,1,2] + } }, { - "name": "awkward_localindex", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "length": 0 - }, - "outputs": { - "toindex": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 2 - }, - "outputs": { - "toindex": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 4 - }, - "outputs": { - "toindex": [0, 1, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5 - }, - "outputs": { - "toindex": [0, 1, 2, 3, 4] - } - } - ] + "error": false, + "message": "", + "inputs": { + "length": 3, + "toindexoffset": 0 + }, + "outputs": { + "toindex": [0,1,2] + } }, { - "name": "awkward_BitMaskedArray_to_IndexedOptionArray", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "bitmasklength": 0, - "frombitmask": [], - "lsb_order": false, - "validwhen": false - }, - "outputs": { - "toindex": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "bitmasklength": 0, - "frombitmask": [], - "lsb_order": true, - "validwhen": false - }, - "outputs": { - "toindex": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "bitmasklength": 1, - "frombitmask": [66], - "lsb_order": true, - "validwhen": false - }, - "outputs": { - "toindex": [0, -1, 2, 3, 4, 5, -1, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "bitmasklength": 2, - "frombitmask": [58, 59], - "lsb_order": true, - "validwhen": false - }, - "outputs": { - "toindex": [0, -1, 2, -1, -1, -1, 6, 7, -1, -1, 10, -1, -1, -1, 14, 15] - } - }, - { - "error": false, - "message": "", - "inputs": { - "bitmasklength": 2, - "frombitmask": [58, 59], - "lsb_order": false, - "validwhen": false - }, - "outputs": { - "toindex": [0, 1, -1, -1, -1, 5, -1, 7, 8, 9, -1, -1, -1, 13, -1, -1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "bitmasklength": 1, - "frombitmask": [27], - "lsb_order": false, - "validwhen": false - }, - "outputs": { - "toindex": [0, 1, 2, -1, -1, 5, -1, -1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "bitmasklength": 3, - "frombitmask": [1, 1, 1], - "lsb_order": false, - "validwhen": false - }, - "outputs": { - "toindex": [0, 1, 2, 3, 4, 5, 6, -1, 8, 9, 10, 11, 12, 13, 14, -1, 16, 17, 18, 19, 20, 21, 22, -1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "bitmasklength": 3, - "frombitmask": [1, 1, 1], - "lsb_order": false, - "validwhen": true - }, - "outputs": { - "toindex": [-1, -1, -1, -1, -1, -1, -1, 7, -1, -1, -1, -1, -1, -1, -1, 15, -1, -1, -1, -1, -1, -1, -1, 23] - } - }, - { - "error": false, - "message": "", - "inputs": { - "bitmasklength": 4, - "frombitmask": [0, 0, 0, 0], - "lsb_order": false, - "validwhen": false - }, - "outputs": { - "toindex": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31] - } - }, - { - "error": false, - "message": "", - "inputs": { - "bitmasklength": 4, - "frombitmask": [0, 0, 0, 0], - "lsb_order": true, - "validwhen": false - }, - "outputs": { - "toindex": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31] - } - } - ] + "error": false, + "message": "", + "inputs": { + "length": 5, + "toindexoffset": 9 + }, + "outputs": { + "toindex": [123,123,123,123,123,123,123,123,123,0,1,2,3,4] + } }, { - "name": "awkward_ListArray_getitem_jagged_numvalid", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "length": 0, - "missing": [], - "missinglength": 0, - "slicestarts": [], - "slicestops": [] - }, - "outputs": { - "numvalid": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 4, - "missing": [0, 0, 0, 0], - "missinglength": 4, - "slicestarts": [0, 2, 3, 3], - "slicestops": [2, 3, 3, 4] - }, - "outputs": { - "numvalid": [4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 4, - "missing": [0, -1, 0, -1, 0, -1, 0], - "missinglength": 7, - "slicestarts": [0, 2, 3, 5], - "slicestops": [2, 3, 5, 7] - }, - "outputs": { - "numvalid": [4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 4, - "missing": [0, 0, 0, 0], - "missinglength": 4, - "slicestarts": [0, 0, 0, 0], - "slicestops": [0, 0, 0, 0] - }, - "outputs": { - "numvalid": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 4, - "missing": [0, -1, 0, -1], - "missinglength": 4, - "slicestarts": [0, 2, 2, 2], - "slicestops": [2, 2, 2, 2] - }, - "outputs": { - "numvalid": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 4, - "missing": [0, -1, 0, -1], - "missinglength": 4, - "slicestarts": [0, 1, 2, 3], - "slicestops": [1, 2, 3, 3] - }, - "outputs": { - "numvalid": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 4, - "missing": [0, -1, 0, -1], - "missinglength": 4, - "slicestarts": [0, 2, 2, 2], - "slicestops": [2, 2, 2, 2] - }, - "outputs": { - "numvalid": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 4, - "missing": [-1, -1, -1, -1], - "missinglength": 4, - "slicestarts": [0, 2, 3, 3], - "slicestops": [2, 3, 3, 4] - }, - "outputs": { - "numvalid": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 4, - "missing": [-1, -1, -1, -1], - "missinglength": 4, - "slicestarts": [0, 2, 3, 3], - "slicestops": [2, 3, 3, 4] - }, - "outputs": { - "numvalid": [0] - } - }, - { - "error": true, - "message": "jagged slice's stops[i] < starts[i]", - "inputs": { - "length": 2, - "missing": [0, 0], - "missinglength": 2, - "slicestarts": [4, 2], - "slicestops": [2, 4] - }, - "outputs": { - "numvalid": [] - } - }, - { - "error": true, - "message": "jagged slice's offsets extend beyond its content", - "inputs": { - "length": 2, - "missing": [0], - "missinglength": 1, - "slicestarts": [0, 2], - "slicestops": [2, 3] - }, - "outputs": { - "numvalid": [] - } - } - ] + "error": false, + "message": "", + "inputs": { + "length": 4, + "toindexoffset": 5 + }, + "outputs": { + "toindex": [123,123,123,123,123,0,1,2,3] + } }, { - "name": "awkward_ListArray_getitem_jagged_shrink", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "length": 0, - "missing": [], - "slicestarts": [], - "slicestops": [] - }, - "outputs": { - "tocarry": [], - "tolargeoffsets": [0], - "tosmalloffsets": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 1, - "missing": [0, 0, 0, 0], - "slicestarts": [0], - "slicestops": [4] - }, - "outputs": { - "tocarry": [0, 1, 2, 3], - "tolargeoffsets": [0, 4], - "tosmalloffsets": [0, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 2, - "missing": [0, 0], - "slicestarts": [0, 2], - "slicestops": [2, 2] - }, - "outputs": { - "tocarry": [0, 1], - "tolargeoffsets": [0, 2, 2], - "tosmalloffsets": [0, 2, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "missing": [0, 0, 0, 0], - "slicestarts": [0, 2, 2], - "slicestops": [2, 2, 4] - }, - "outputs": { - "tocarry": [0, 1, 2, 3], - "tolargeoffsets": [0, 2, 2, 4], - "tosmalloffsets": [0, 2, 2, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "missing": [-1, 0, -1, 0], - "slicestarts": [0, 2, 2], - "slicestops": [2, 2, 4] - }, - "outputs": { - "tocarry": [1, 3], - "tolargeoffsets": [0, 2, 2, 4], - "tosmalloffsets": [0, 1, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 4, - "missing": [-1, -1, -1, -1], - "slicestarts": [0, 2, 3, 3], - "slicestops": [2, 3, 3, 4] - }, - "outputs": { - "tocarry": [], - "tolargeoffsets": [0, 2, 3, 3, 4], - "tosmalloffsets": [0, 0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 4, - "missing": [0, 0, 0, 0], - "slicestarts": [0, 2, 3, 3], - "slicestops": [2, 3, 3, 4] - }, - "outputs": { - "tocarry": [0, 1, 2, 3], - "tolargeoffsets": [0, 2, 3, 3, 4], - "tosmalloffsets": [0, 2, 3, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 4, - "missing": [0, 0, 0, 0, 0, 0], - "slicestarts": [0, 2, 3, 3], - "slicestops": [2, 3, 3, 6] - }, - "outputs": { - "tocarry": [0, 1, 2, 3, 4, 5], - "tolargeoffsets": [0, 2, 3, 3, 6], - "tosmalloffsets": [0, 2, 3, 3, 6] - } - } - ] + "error": false, + "message": "", + "inputs": { + "length": 5, + "toindexoffset": 0 + }, + "outputs": { + "toindex": [0,1,2,3,4] + } + } + ] + }, + { + "name": "awkward_UnionArray_simplify", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "base": 0, + "innerindex": [], + "innertags": [], + "innerwhich": 0, + "length": 0, + "outerindex": [], + "outertags": [], + "outerwhich": 1, + "towhich": 1 + }, + "outputs": { + "toindex": [], + "totags": [] + } }, { - "name": "awkward_Content_getitem_next_missing_jagged_getmaskstartstop", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "index_in": [0, -1], - "length": 2, - "offsets_in": [0, 1] - }, - "outputs": { - "mask_out": [0, -1], - "starts_out": [0, 1], - "stops_out": [1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index_in": [], - "length": 0, - "offsets_in": [] - }, - "outputs": { - "mask_out": [], - "starts_out": [], - "stops_out": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index_in": [0, -1], - "length": 2, - "offsets_in": [0, 4] - }, - "outputs": { - "mask_out": [0, -1], - "starts_out": [0, 4], - "stops_out": [4, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index_in": [0, -1, -1], - "length": 3, - "offsets_in": [0, 1] - }, - "outputs": { - "mask_out": [0, -1, -1], - "starts_out": [0, 1, 1], - "stops_out": [1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index_in": [0, -1, 1], - "length": 3, - "offsets_in": [0, 1, 2] - }, - "outputs": { - "mask_out": [0, -1, 2], - "starts_out": [0, 1, 1], - "stops_out": [1, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index_in": [0, -1, 1], - "length": 3, - "offsets_in": [0, 2, 4] - }, - "outputs": { - "mask_out": [0, -1, 2], - "starts_out": [0, 2, 2], - "stops_out": [2, 2, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index_in": [0, -1, -1, 1], - "length": 4, - "offsets_in": [0, 0, 0] - }, - "outputs": { - "mask_out": [0, -1, -1, 3], - "starts_out": [0, 0, 0, 0], - "stops_out": [0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index_in": [0, -1, -1, 1], - "length": 4, - "offsets_in": [0, 1, 2] - }, - "outputs": { - "mask_out": [0, -1, -1, 3], - "starts_out": [0, 1, 1, 1], - "stops_out": [1, 1, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index_in": [0, -1, 1, -1], - "length": 4, - "offsets_in": [0, 2, 3] - }, - "outputs": { - "mask_out": [0, -1, 2, -1], - "starts_out": [0, 2, 2, 3], - "stops_out": [2, 2, 3, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index_in": [0, -1, 1, -1, 2], - "length": 5, - "offsets_in": [0, 2, 2, 4] - }, - "outputs": { - "mask_out": [0, -1, 2, -1, 4], - "starts_out": [0, 2, 2, 2, 2], - "stops_out": [2, 2, 2, 2, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index_in": [0, 1, -1, 2], - "length": 4, - "offsets_in": [0, 0, 0, 0] - }, - "outputs": { - "mask_out": [0, 1, -1, 3], - "starts_out": [0, 0, 0, 0], - "stops_out": [0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index_in": [0, 1, -1, 2], - "length": 4, - "offsets_in": [0, 0, 1, 1] - }, - "outputs": { - "mask_out": [0, 1, -1, 3], - "starts_out": [0, 0, 1, 1], - "stops_out": [0, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index_in": [0, -1, 1, 2], - "length": 4, - "offsets_in": [0, 1, 2, 3] - }, - "outputs": { - "mask_out": [0, -1, 2, 3], - "starts_out": [0, 1, 1, 2], - "stops_out": [1, 1, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index_in": [0, 1, -1, 2], - "length": 4, - "offsets_in": [0, 2, 3, 3] - }, - "outputs": { - "mask_out": [0, 1, -1, 3], - "starts_out": [0, 2, 3, 3], - "stops_out": [2, 3, 3, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index_in": [0, 1, -1, 2], - "length": 4, - "offsets_in": [0, 2, 3, 4] - }, - "outputs": { - "mask_out": [0, 1, -1, 3], - "starts_out": [0, 2, 3, 3], - "stops_out": [2, 3, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index_in": [0, 1, -1, 2], - "length": 4, - "offsets_in": [0, 2, 3, 5] - }, - "outputs": { - "mask_out": [0, 1, -1, 3], - "starts_out": [0, 2, 3, 3], - "stops_out": [2, 3, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index_in": [0, -1, 1, 2], - "length": 4, - "offsets_in": [0, 2, 3, 5] - }, - "outputs": { - "mask_out": [0, -1, 2, 3], - "starts_out": [0, 2, 2, 3], - "stops_out": [2, 2, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index_in": [0, 1, -1, 2], - "length": 4, - "offsets_in": [0, 2, 3, 6] - }, - "outputs": { - "mask_out": [0, 1, -1, 3], - "starts_out": [0, 2, 3, 3], - "stops_out": [2, 3, 3, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index_in": [0, 1, -1, 2], - "length": 4, - "offsets_in": [0, 2, 4, 5] - }, - "outputs": { - "mask_out": [0, 1, -1, 3], - "starts_out": [0, 2, 4, 4], - "stops_out": [2, 4, 4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index_in": [0, -1, 1, 2], - "length": 4, - "offsets_in": [0, 3, 3, 4] - }, - "outputs": { - "mask_out": [0, -1, 2, 3], - "starts_out": [0, 3, 3, 3], - "stops_out": [3, 3, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index_in": [0, 1, -1, 2], - "length": 4, - "offsets_in": [0, 3, 3, 5] - }, - "outputs": { - "mask_out": [0, 1, -1, 3], - "starts_out": [0, 3, 3, 3], - "stops_out": [3, 3, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index_in": [0, 1, -1, 2], - "length": 4, - "offsets_in": [0, 4, 5, 6] - }, - "outputs": { - "mask_out": [0, 1, -1, 3], - "starts_out": [0, 4, 5, 5], - "stops_out": [4, 5, 5, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index_in": [0, -1, 1, 2], - "length": 4, - "offsets_in": [0, 4, 5, 6] - }, - "outputs": { - "mask_out": [0, -1, 2, 3], - "starts_out": [0, 4, 4, 5], - "stops_out": [4, 4, 5, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index_in": [0, -1, 1, 2, -1, 3, 4, 5], - "length": 8, - "offsets_in": [0, 2, 4, 6, 8, 10, 12] - }, - "outputs": { - "mask_out": [0, -1, 2, 3, -1, 5, 6, 7], - "starts_out": [0, 2, 2, 4, 6, 6, 8, 10], - "stops_out": [2, 2, 4, 6, 6, 8, 10, 12] - } - }, - { - "error": false, - "message": "", - "inputs": { - "index_in": [0, -1, 1, 2, 3, 4, 5, 6], - "length": 8, - "offsets_in": [0, 1, 1, 1, 1, 1, 1, 1] - }, - "outputs": { - "mask_out": [0, -1, 2, 3, 4, 5, 6, 7], - "starts_out": [0, 1, 1, 1, 1, 1, 1, 1], - "stops_out": [1, 1, 1, 1, 1, 1, 1, 1] - } - } - ] + "error": false, + "message": "", + "inputs": { + "base": 0, + "innerindex": [0,0,1,1,2,3,2], + "innertags": [0,1,0,1,0,0,1], + "innerwhich": 0, + "length": 12, + "outerindex": [0,1,0,1,2,2,3,4,5,3,6,4], + "outertags": [0,0,1,1,1,0,1,1,1,0,1,0], + "outerwhich": 1, + "towhich": 1 + }, + "outputs": { + "toindex": [123,123,0,123,1,123,123,2,3,123,123,123], + "totags": [123,123,1,123,1,123,123,1,1,123,123,123] + } }, { - "name": "awkward_reduce_sum_bool", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromptr": [], - "lenparents": 0, - "outlength": 0, - "parents": [], - "offsets": [] - }, - "outputs": { - "toptr": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 0, 0, 1, 1, 0, 1, 0, 0, 0], - "lenparents": 10, - "outlength": 4, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3], - "offsets": [0, 3, 6, 9, 10] - }, - "outputs": { - "toptr": [0, 1, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 0, 1, 0, 0, 1, 0, 1, 1], - "lenparents": 9, - "outlength": 6, - "parents": [0, 0, 0, 2, 2, 3, 4, 4, 5], - "offsets": [0, 3, 3, 5, 6, 8, 9] - }, - "outputs": { - "toptr": [1, 0, 0, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 0, 1, 0, 1, 0, 0, 1, 1], - "lenparents": 9, - "outlength": 8, - "parents": [0, 0, 0, 6, 6, 1, 1, 7, 2], - "offsets": [0, 3, 5, 6, 6, 6, 6, 8, 9] - }, - "outputs": { - "toptr": [1, 0, 1, 0, 0, 0, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 1, 1, 0, 1, 0, 0, 0, 0, 0], - "lenparents": 10, - "outlength": 3, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 2], - "offsets": [0, 3, 6, 10] - }, - "outputs": { - "toptr": [1, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 3, 0, 2, 0, 0, 0, 0, 0], - "lenparents": 10, - "outlength": 3, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 2], - "offsets": [0, 3, 6, 10] - }, - "outputs": { - "toptr": [1, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 0, 0, 2, 2, 0, 3, 0, 0, 0], - "lenparents": 10, - "outlength": 4, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3], - "offsets": [0, 3, 6, 9, 10] - }, - "outputs": { - "toptr": [1, 1, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 3], - "lenparents": 3, - "outlength": 1, - "parents": [0, 0, 0], - "offsets": [0, 3] - }, - "outputs": { - "toptr": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 3, 4, 5, 6], - "lenparents": 6, - "outlength": 1, - "parents": [0, 0, 0, 0, 0, 0], - "offsets": [0, 6] - }, - "outputs": { - "toptr": [1] - } - } - ] + "error": false, + "message": "", + "inputs": { + "base": 5, + "innerindex": [0,0,1,1,2,3,2], + "innertags": [0,1,0,1,0,0,1], + "innerwhich": 1, + "length": 12, + "outerindex": [0,1,0,1,2,2,3,4,5,3,6,4], + "outertags": [0,0,1,1,1,0,1,1,1,0,1,0], + "outerwhich": 1, + "towhich": 0 + }, + "outputs": { + "toindex": [123,123,123,5,123,123,6,123,123,123,7,123], + "totags": [123,123,123,0,123,123,0,123,123,123,0,123] + } + } + ] + }, + { + "name": "awkward_sorting_ranges", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "parents": [], + "parentslength": 0, + "tolength": 2 + }, + "outputs": { + "toindex": [0,0] + } }, { - "name": "awkward_reduce_prod_bool", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromptr": [], - "lenparents": 0, - "outlength": 0, - "parents": [], - "offsets": [] - }, - "outputs": { - "toptr": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 0, 1, 0, 1, 0, 0, 1, 1], - "lenparents": 9, - "outlength": 8, - "parents": [0, 0, 0, 6, 6, 1, 1, 7, 2], - "offsets": [0, 3, 5, 6, 6, 6, 6, 8, 9] - }, - "outputs": { - "toptr": [0, 0, 1, 1, 1, 1, 0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 0, 0, 1, 1, 1], - "lenparents": 6, - "outlength": 2, - "parents": [0, 0, 0, 1, 1, 1], - "offsets": [0, 3, 6] - }, - "outputs": { - "toptr": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 0, 1, 0, 0, 1, 0, 1, 1], - "lenparents": 9, - "outlength": 6, - "parents": [0, 0, 0, 2, 2, 3, 4, 4, 5], - "offsets": [0, 3, 3, 5, 6, 8, 9] - }, - "outputs": { - "toptr": [0, 1, 0, 1, 0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 0, 0, 1, 1, 1, 1, 0, 0, 1], - "lenparents": 10, - "outlength": 4, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3], - "offsets": [0, 3, 6, 9, 10] - }, - "outputs": { - "toptr": [0, 1, 0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 0, 0, 2, 2, 2, 3, 0, 0, 4], - "lenparents": 10, - "outlength": 4, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3], - "offsets": [0, 3, 6, 9, 10] - }, - "outputs": { - "toptr": [0, 1, 0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 0, 0, 1, 1, 1, 1, 1, 1, 1], - "lenparents": 10, - "outlength": 3, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 2], - "offsets": [0, 3, 6, 10] - }, - "outputs": { - "toptr": [0, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], - "lenparents": 25, - "outlength": 6, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5], - "offsets": [0, 3, 6, 10, 15, 21, 25] - }, - "outputs": { - "toptr": [0, 1, 1, 0, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0], - "lenparents": 15, - "outlength": 5, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4], - "offsets": [0, 3, 6, 9, 12, 15] - }, - "outputs": { - "toptr": [0, 1, 1, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], - "lenparents": 22, - "outlength": 6, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5], - "offsets": [0, 3, 6, 11, 15, 19, 22] - }, - "outputs": { - "toptr": [1, 0, 0, 1, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 1, 1, 0, 1, 0, 0, 1, 0, 1], - "lenparents": 10, - "outlength": 3, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 2], - "offsets": [0, 3, 6, 10] - }, - "outputs": { - "toptr": [1, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1], - "lenparents": 19, - "outlength": 5, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4], - "offsets": [0, 5, 8, 11, 14, 19] - }, - "outputs": { - "toptr": [1, 0, 0, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 3, 0, 2, 0, 0, 2, 0, 4], - "lenparents": 10, - "outlength": 3, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 2], - "offsets": [0, 3, 6, 10] - }, - "outputs": { - "toptr": [1, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 1, 1, 0, 0, 0], - "lenparents": 6, - "outlength": 2, - "parents": [0, 0, 0, 1, 1, 1], - "offsets": [0, 3, 6] - }, - "outputs": { - "toptr": [1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 1, 1, 1, 1, 1, 0, 0, 0], - "lenparents": 9, - "outlength": 3, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2], - "offsets": [0, 3, 6, 9] - }, - "outputs": { - "toptr": [1, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1], - "lenparents": 15, - "outlength": 5, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4], - "offsets": [0, 3, 6, 9, 12, 15] - }, - "outputs": { - "toptr": [1, 1, 0, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], - "lenparents": 11, - "outlength": 3, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2], - "offsets": [0, 3, 6, 11] - }, - "outputs": { - "toptr": [1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], - "lenparents": 17, - "outlength": 5, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4], - "offsets": [0, 3, 6, 10, 14, 17] - }, - "outputs": { - "toptr": [1, 1, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], - "lenparents": 19, - "outlength": 5, - "parents": [0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4], - "offsets": [0, 3, 8, 12, 16, 19] - }, - "outputs": { - "toptr": [1, 1, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], - "lenparents": 22, - "outlength": 6, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5], - "offsets": [0, 3, 6, 11, 15, 19, 22] - }, - "outputs": { - "toptr": [1, 1, 1, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 3], - "lenparents": 3, - "outlength": 1, - "parents": [0, 0, 0], - "offsets": [0, 3] - }, - "outputs": { - "toptr": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 3, 4, 5, 6], - "lenparents": 6, - "outlength": 1, - "parents": [0, 0, 0, 0, 0, 0], - "offsets": [0, 6] - }, - "outputs": { - "toptr": [1] - } - } - ] + "error": false, + "message": "", + "inputs": { + "parents": [0,1], + "parentslength": 2, + "tolength": 3 + }, + "outputs": { + "toindex": [0,1,2] + } }, { - "name": "awkward_reduce_argmax", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromptr": [], - "lenparents": 0, - "outlength": 0, - "parents": [], - "starts": [], - "offsets": [] - }, - "outputs": { - "toptr": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, -1, 1, -1, 1, 21], - "lenparents": 6, - "outlength": 3, - "parents": [0, 1, 1, 2, 2, 2], - "starts": [0, 1, 3], - "offsets": [0, 1, 3, 6] - }, - "outputs": { - "toptr": [0, 2, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 3, 4, 6, 7], - "lenparents": 6, - "outlength": 3, - "parents": [0, 1, 1, 2, 2, 2], - "starts": [0, 1, 3, 6], - "offsets": [0, 1, 3, 6] - }, - "outputs": { - "toptr": [0, 2, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [6, 1, 10, 33, -1, 21, 2, 45, 4], - "lenparents": 9, - "outlength": 5, - "parents": [0, 0, 3, 3, 1, 1, 4, 4, 2], - "starts": [0, 2, 4, 5, 7], - "offsets": [0, 2, 4, 5, 7, 9] - }, - "outputs": { - "toptr": [0, 5, 8, 3, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 3, 4, 6], - "lenparents": 5, - "outlength": 3, - "parents": [0, 0, 1, 2, 2], - "starts": [0, 2, 3, 5], - "offsets": [0, 2, 3, 5] - }, - "outputs": { - "toptr": [1, 2, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [3, 4, 2, 1, 2, 3, 6, 1, -1, 1, 7, 4], - "lenparents": 12, - "outlength": 5, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 4], - "starts": [0, 3, 6, 9, 11], - "offsets": [0, 3, 6, 9, 11, 12] - }, - "outputs": { - "toptr": [1, 5, 6, 10, 11] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 3], - "lenparents": 3, - "outlength": 1, - "parents": [0, 0, 0], - "starts": [0], - "offsets": [0, 3] - }, - "outputs": { - "toptr": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 1, 2, 3, 4, 6], - "lenparents": 6, - "outlength": 3, - "parents": [0, 0, 0, 1, 1, 2], - "starts": [0, 3, 5], - "offsets": [0, 3, 5, 6] - }, - "outputs": { - "toptr": [2, 4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [3, 1, 6, 1, 4, 4, 2, 1, 7, 2, 3, -1], - "lenparents": 12, - "outlength": 3, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2], - "starts": [0, 5, 9], - "offsets": [0, 5, 9, 12] - }, - "outputs": { - "toptr": [2, 8, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 0, 4, 4, 6], - "lenparents": 5, - "outlength": 1, - "parents": [0, 0, 0, 0, 0], - "starts": [0], - "offsets": [0, 5] - }, - "outputs": { - "toptr": [4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 3, 4, 6], - "lenparents": 5, - "outlength": 1, - "parents": [0, 0, 0, 0, 0], - "starts": [0], - "offsets": [0, 5] - }, - "outputs": { - "toptr": [4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 3, 4, 5, 6], - "lenparents": 6, - "outlength": 1, - "parents": [0, 0, 0, 0, 0, 0], - "starts": [0], - "offsets": [0, 6] - }, - "outputs": { - "toptr": [5] - } - } - ] + "error": false, + "message": "", + "inputs": { + "parents": [0,3,6,9], + "parentslength": 4, + "tolength": 5 + }, + "outputs": { + "toindex": [0,1,2,3,4] + } }, { - "name": "awkward_reduce_argmin_complex", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromptr": [], - "lenparents": 0, - "outlength": 0, - "parents": [], - "offsets": [] - }, - "outputs": { - "toptr": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 0], - "lenparents": 1, - "outlength": 1, - "parents": [0], - "offsets": [0, 1] - }, - "outputs": { - "toptr": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 0, 0, 1], - "lenparents": 2, - "outlength": 1, - "parents": [0, 0], - "offsets": [0, 2] - }, - "outputs": { - "toptr": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 2, 3, 3, 5, 5, 7, 7, 11, 11, 13, 13, 17, 17, 19, 19, 23, 23], - "lenparents": 9, - "outlength": 6, - "parents": [0, 0, 0, 2, 2, 3, 4, 4, 5], - "offsets": [0, 3, 3, 5, 6, 8, 9] - }, - "outputs": { - "toptr": [0, -1, 3, 5, 6, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1], - "lenparents": 6, - "outlength": 4, - "parents": [0, 0, 0, 2, 2, 3], - "offsets": [0, 3, 3, 5, 6] - }, - "outputs": { - "toptr": [2, -1, 4, 5] - } - } - ] + "error": false, + "message": "", + "inputs": { + "parents": [3,3,3,3], + "parentslength": 4, + "tolength": 2 + }, + "outputs": { + "toindex": [0,4] + } }, { - "name": "awkward_reduce_argmax_complex", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromptr": [], - "lenparents": 0, - "outlength": 0, - "parents": [], - "offsets": [] - }, - "outputs": { - "toptr": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 0], - "lenparents": 1, - "outlength": 1, - "parents": [0], - "offsets": [0, 1] - }, - "outputs": { - "toptr": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 0, 0, 1], - "lenparents": 2, - "outlength": 1, - "parents": [0, 0], - "offsets": [0, 2] - }, - "outputs": { - "toptr": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 2, 3, 3, 5, 5, 7, 7, 11, 11, 13, 13, 17, 17, 19, 19, 23, 23], - "lenparents": 9, - "outlength": 6, - "parents": [0, 0, 0, 2, 2, 3, 4, 4, 5], - "offsets": [0, 3, 3, 5, 6, 8, 9] - }, - "outputs": { - "toptr": [2, -1, 4, 5, 7, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1], - "lenparents": 6, - "outlength": 4, - "parents": [0, 0, 0, 2, 2, 3], - "offsets": [0, 3, 3, 5, 6] - }, - "outputs": { - "toptr": [0, -1, 3, 5] - } - } - ] + "error": false, + "message": "", + "inputs": { + "parents": [2,4,4], + "parentslength": 3, + "tolength": 3 + }, + "outputs": { + "toindex": [0,1,3] + } + } + ] + }, + { + "name": "awkward_sorting_ranges_length", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "parents": [], + "parentslength": 0 + }, + "outputs": { + "tolength": [2] + } }, { - "name": "awkward_reduce_max", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromptr": [], - "identity": -9223372036854775808, - "lenparents": 0, - "outlength": 0, - "parents": [], - "offsets": [] - }, - "outputs": { - "toptr": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 7, 13, 17, 23, 3, 11, 19, 5], - "identity": -9223372036854775808, - "lenparents": 9, - "outlength": 8, - "parents": [0, 0, 0, 6, 6, 1, 1, 7, 2], - "offsets": [0, 3, 5, 6, 6, 6, 6, 8, 9] - }, - "outputs": { - "toptr": [13, 11, 5, -9223372036854775808, -9223372036854775808, -9223372036854775808, 23, 19] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 1, 3, 4, 5, 6], - "identity": -9223372036854775808, - "lenparents": 6, - "outlength": 4, - "parents": [0, 0, 1, 3, 3, 3], - "offsets": [0, 2, 3, 3, 6] - }, - "outputs": { - "toptr": [1, 3, -9223372036854775808, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 3], - "identity": -9223372036854775808, - "lenparents": 3, - "outlength": 1, - "parents": [0, 0, 0], - "offsets": [0, 3] - }, - "outputs": { - "toptr": [3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 4, 1, 3, 5, 6], - "identity": -9223372036854775808, - "lenparents": 6, - "outlength": 4, - "parents": [0, 0, 1, 1, 1, 3], - "offsets": [0, 2, 5, 5, 6] - }, - "outputs": { - "toptr": [4, 5, -9223372036854775808, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 5, 3, 3, 5, 1, 4, 2], - "identity": -9223372036854775808, - "lenparents": 9, - "outlength": 5, - "parents": [0, 0, 0, 1, 1, 2, 2, 3, 4], - "offsets": [0, 3, 5, 7, 8, 9] - }, - "outputs": { - "toptr": [5, 3, 5, 4, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 3, 5, 4, 2, 2, 3, 1, 5], - "identity": 4, - "lenparents": 9, - "outlength": 4, - "parents": [0, 0, 0, 0, 0, 2, 2, 2, 3], - "offsets": [0, 5, 5, 8, 9] - }, - "outputs": { - "toptr": [5, 4, 4, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 3, 6, 4, 2, 2, 3, 1, 6], - "identity": 4, - "lenparents": 9, - "outlength": 4, - "parents": [0, 0, 0, 0, 0, 2, 2, 2, 3], - "offsets": [0, 5, 5, 8, 9] - }, - "outputs": { - "toptr": [6, 4, 4, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 3, 2, 5, 3, 7, 3, 1, 5, 8, 1, 9, 4, 2, 7, 10, 2, 4, 7, 2], - "identity": -9223372036854775808, - "lenparents": 20, - "outlength": 5, - "parents": [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4], - "offsets": [0, 4, 8, 12, 16, 20] - }, - "outputs": { - "toptr": [5, 7, 9, 10, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 3, 5, 4, 2, 3, 7, 8, 2, 4, 2, 3, 1, 7, 7, 5, 1, 9, 10, 2], - "identity": -9223372036854775808, - "lenparents": 20, - "outlength": 4, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3], - "offsets": [0, 5, 10, 15, 20] - }, - "outputs": { - "toptr": [5, 8, 7, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 3, 5, 7, 11, 13, 17, 19, 23], - "identity": -9223372036854775808, - "lenparents": 9, - "outlength": 6, - "parents": [0, 0, 0, 2, 2, 3, 4, 4, 5], - "offsets": [0, 3, 3, 5, 6, 8, 9] - }, - "outputs": { - "toptr": [5, -9223372036854775808, 11, 13, 19, 23] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 3, 5, 4, 2, 2, 3, 1, 5], - "identity": -9223372036854775808, - "lenparents": 9, - "outlength": 4, - "parents": [0, 0, 0, 0, 0, 2, 2, 2, 3], - "offsets": [0, 5, 5, 8, 9] - }, - "outputs": { - "toptr": [5, -9223372036854775808, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 3, 4, 5, 6], - "identity": -9223372036854775808, - "lenparents": 6, - "outlength": 1, - "parents": [0, 0, 0, 0, 0, 0], - "offsets": [0, 6] - }, - "outputs": { - "toptr": [6] - } - } - ] + "error": false, + "message": "", + "inputs": { + "parents": [0,1], + "parentslength": 2 + }, + "outputs": { + "tolength": [3] + } }, { - "name": "awkward_reduce_countnonzero", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromptr": [], - "lenparents": 0, - "outlength": 0, - "parents": [] - }, - "outputs": { - "toptr": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 0, 0, 2, 2, 2, 3, 0, 0, 4], - "lenparents": 10, - "outlength": 4, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3] - }, - "outputs": { - "toptr": [1, 3, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 3, 5, 7, 11, 13, 17, 19, 23], - "lenparents": 9, - "outlength": 6, - "parents": [0, 0, 0, 2, 2, 3, 4, 4, 5] - }, - "outputs": { - "toptr": [3, 0, 2, 1, 2, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 3, 0, 2, 0, 0, 2, 0, 4], - "lenparents": 10, - "outlength": 3, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 2] - }, - "outputs": { - "toptr": [3, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 3], - "lenparents": 3, - "outlength": 1, - "parents": [0, 0, 0] - }, - "outputs": { - "toptr": [3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 7, 13, 17, 23, 3, 11, 19, 5], - "lenparents": 9, - "outlength": 8, - "parents": [0, 0, 0, 6, 6, 1, 1, 7, 2] - }, - "outputs": { - "toptr": [3, 2, 1, 0, 0, 0, 2, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 3, 4, 5, 6], - "lenparents": 6, - "outlength": 1, - "parents": [0, 0, 0, 0, 0, 0] - }, - "outputs": { - "toptr": [6] - } - } - ] + "error": false, + "message": "", + "inputs": { + "parents": [0,3,6,9], + "parentslength": 4 + }, + "outputs": { + "tolength": [5] + } }, { - "name": "awkward_reduce_count_64", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "lenparents": 0, - "outlength": 0, - "parents": [] - }, - "outputs": { - "toptr": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 19, - "outlength": 9, - "parents": [1, 1, 1, 3, 3, 3, 3, 3, 4, 4, 4, 4, 6, 6, 6, 6, 7, 7, 7] - }, - "outputs": { - "toptr": [0, 3, 0, 5, 4, 0, 4, 3, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 19, - "outlength": 8, - "parents": [1, 1, 1, 3, 3, 3, 3, 3, 4, 4, 4, 4, 6, 6, 6, 6, 7, 7, 7] - }, - "outputs": { - "toptr": [0, 3, 0, 5, 4, 0, 4, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 1696, - "outlength": 331, - "parents": [194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] - }, - "outputs": { - "toptr": [626, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 3, - "outlength": 3, - "parents": [0, 0, 2] - }, - "outputs": { - "toptr": [2, 0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 3, - "outlength": 1, - "parents": [0, 0, 0] - }, - "outputs": { - "toptr": [3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 9, - "outlength": 6, - "parents": [0, 0, 0, 2, 2, 3, 4, 4, 5] - }, - "outputs": { - "toptr": [3, 0, 2, 1, 2, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 9, - "outlength": 8, - "parents": [0, 0, 0, 6, 6, 1, 1, 7, 2] - }, - "outputs": { - "toptr": [3, 2, 1, 0, 0, 0, 2, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 21, - "outlength": 9, - "parents": [0, 0, 0, 1, 1, 1, 3, 3, 3, 3, 4, 4, 4, 4, 6, 6, 6, 6, 7, 7, 7] - }, - "outputs": { - "toptr": [3, 3, 0, 4, 4, 0, 4, 3, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 21, - "outlength": 8, - "parents": [0, 0, 0, 1, 1, 1, 3, 3, 3, 3, 4, 4, 4, 4, 6, 6, 6, 6, 7, 7, 7] - }, - "outputs": { - "toptr": [3, 3, 0, 4, 4, 0, 4, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 22, - "outlength": 9, - "parents": [0, 0, 0, 1, 1, 1, 3, 3, 3, 3, 3, 4, 4, 4, 4, 6, 6, 6, 6, 7, 7, 7] - }, - "outputs": { - "toptr": [3, 3, 0, 5, 4, 0, 4, 3, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 22, - "outlength": 8, - "parents": [0, 0, 0, 1, 1, 1, 3, 3, 3, 3, 3, 4, 4, 4, 4, 6, 6, 6, 6, 7, 7, 7] - }, - "outputs": { - "toptr": [3, 3, 0, 5, 4, 0, 4, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 24, - "outlength": 9, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 6, 6, 6, 6, 7, 7, 7] - }, - "outputs": { - "toptr": [3, 3, 2, 5, 4, 0, 4, 3, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 24, - "outlength": 8, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 6, 6, 6, 6, 7, 7, 7] - }, - "outputs": { - "toptr": [3, 3, 2, 5, 4, 0, 4, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 9, - "outlength": 3, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2] - }, - "outputs": { - "toptr": [3, 3, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 10, - "outlength": 4, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3] - }, - "outputs": { - "toptr": [3, 3, 3, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 18, - "outlength": 6, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5] - }, - "outputs": { - "toptr": [3, 3, 3, 3, 3, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 21, - "outlength": 7, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6] - }, - "outputs": { - "toptr": [3, 3, 3, 3, 3, 3, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 30, - "outlength": 10, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9] - }, - "outputs": { - "toptr": [3, 3, 3, 3, 3, 3, 3, 3, 3, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 23, - "outlength": 7, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6] - }, - "outputs": { - "toptr": [3, 3, 3, 3, 3, 5, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 23, - "outlength": 7, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 6, 6, 6] - }, - "outputs": { - "toptr": [3, 3, 3, 3, 5, 3, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 10, - "outlength": 3, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 2] - }, - "outputs": { - "toptr": [3, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 43, - "outlength": 10, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9] - }, - "outputs": { - "toptr": [3, 3, 4, 2, 4, 5, 6, 4, 5, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 39, - "outlength": 10, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9] - }, - "outputs": { - "toptr": [3, 3, 4, 3, 3, 5, 6, 4, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 11, - "outlength": 3, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2] - }, - "outputs": { - "toptr": [3, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 20, - "outlength": 6, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5] - }, - "outputs": { - "toptr": [3, 3, 5, 3, 3, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 25, - "outlength": 7, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 6, 6] - }, - "outputs": { - "toptr": [3, 3, 5, 3, 3, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 5, - "outlength": 1, - "parents": [0, 0, 0, 0, 0] - }, - "outputs": { - "toptr": [5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 10, - "outlength": 2, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1] - }, - "outputs": { - "toptr": [5, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 29, - "outlength": 7, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 6, 6] - }, - "outputs": { - "toptr": [5, 5, 5, 3, 3, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "lenparents": 6, - "outlength": 1, - "parents": [0, 0, 0, 0, 0, 0] - }, - "outputs": { - "toptr": [6] - } - } - ] + "error": false, + "message": "", + "inputs": { + "parents": [3,3,3,3], + "parentslength": 4 + }, + "outputs": { + "tolength": [2] + } }, { - "name": "awkward_reduce_sum_complex", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromptr": [], - "lenparents": 0, - "outlength": 0, - "parents": [], - "offsets": [] - }, - "outputs": { - "toptr": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 0], - "lenparents": 1, - "outlength": 1, - "parents": [0], - "offsets": [0, 1] - }, - "outputs": { - "toptr": [0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 2, 3, 3, 5, 5, 7, 7, 11, 11, 13, 13, 17, 17, 19, 19, 23, 23], - "lenparents": 9, - "outlength": 6, - "parents": [0, 0, 0, 2, 2, 3, 4, 4, 5], - "offsets": [0, 3, 3, 5, 6, 8, 9] - }, - "outputs": { - "toptr": [10, 10, 0, 0, 18, 18, 13, 13, 36, 36, 23, 23] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1], - "lenparents": 6, - "outlength": 4, - "parents": [0, 0, 0, 2, 2, 3], - "offsets": [0, 3, 3, 5, 6] - }, - "outputs": { - "toptr": [1, 3, 0, 0, 1, 2, 0, 1] - } - } - ] + "error": false, + "message": "", + "inputs": { + "parents": [2,4,4], + "parentslength": 3 + }, + "outputs": { + "tolength": [3] + } + } + ] + }, + { + "name": "awkward_NumpyArray_subrange_equal", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "tmpptr": [], + "fromstarts": [], + "fromstops": [], + "length": 0 + }, + "outputs": { + "toequal": [0] + } }, { - "name": "awkward_reduce_sum_bool_complex", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromptr": [], - "lenparents": 0, - "outlength": 0, - "parents": [], - "offsets": [] - }, - "outputs": { - "toptr": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 0], - "lenparents": 1, - "outlength": 1, - "parents": [0], - "offsets": [0, 1] - }, - "outputs": { - "toptr": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 2, 3, 3, 5, 5, 7, 7, 11, 11, 13, 13, 17, 17, 19, 19, 23, 23], - "lenparents": 9, - "outlength": 6, - "parents": [0, 0, 0, 2, 2, 3, 4, 4, 5], - "offsets": [0, 3, 3, 5, 6, 8, 9] - }, - "outputs": { - "toptr": [1, 0, 1, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0], - "lenparents": 6, - "outlength": 4, - "parents": [0, 0, 0, 2, 2, 3], - "offsets": [0, 3, 3, 5, 6] - }, - "outputs": { - "toptr": [1, 0, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1], - "lenparents": 6, - "outlength": 4, - "parents": [0, 0, 0, 2, 2, 3], - "offsets": [0, 3, 3, 5, 6] - }, - "outputs": { - "toptr": [1, 0, 1, 1] - } - } - ] + "error": false, + "message": "", + "inputs": { + "tmpptr": [0,1,2,3,4,5,6,7], + "fromstarts": [0,1,3,5], + "fromstops": [1,3,5,7], + "length": 4 + }, + "outputs": { + "toequal": [0] + } }, { - "name": "awkward_reduce_prod_bool_complex", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromptr": [], - "lenparents": 0, - "outlength": 0, - "parents": [], - "offsets": [] - }, - "outputs": { - "toptr": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 0], - "lenparents": 1, - "outlength": 1, - "parents": [0], - "offsets": [0, 1] - }, - "outputs": { - "toptr": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 2, 3, 3, 5, 5, 7, 7, 11, 11, 13, 13, 17, 17, 19, 19, 23, 23], - "lenparents": 9, - "outlength": 6, - "parents": [0, 0, 0, 2, 2, 3, 4, 4, 5], - "offsets": [0, 3, 3, 5, 6, 8, 9] - }, - "outputs": { - "toptr": [1, 1, 1, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1], - "lenparents": 6, - "outlength": 4, - "parents": [0, 0, 0, 2, 2, 3], - "offsets": [0, 3, 3, 5, 6] - }, - "outputs": { - "toptr": [1, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0], - "lenparents": 6, - "outlength": 4, - "parents": [0, 0, 0, 2, 2, 3], - "offsets": [0, 3, 3, 5, 6] - }, - "outputs": { - "toptr": [1, 1, 0, 0] - } - } - ] + "error": false, + "message": "", + "inputs": { + "tmpptr": [0,2,2,3,5], + "fromstarts": [0,2,3,3], + "fromstops": [2,3,3,5], + "length": 5 + }, + "outputs": { + "toequal": [0] + } }, { - "name": "awkward_reduce_countnonzero_complex", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromptr": [], - "lenparents": 0, - "outlength": 0, - "parents": [] - }, - "outputs": { - "toptr": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 0], - "lenparents": 1, - "outlength": 1, - "parents": [0] - }, - "outputs": { - "toptr": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 0], - "lenparents": 1, - "outlength": 1, - "parents": [0] - }, - "outputs": { - "toptr": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 1], - "lenparents": 1, - "outlength": 1, - "parents": [0] - }, - "outputs": { - "toptr": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 2, 3, 3, 5, 5, 7, 7, 11, 11, 13, 13, 17, 17, 19, 19, 23, 23], - "lenparents": 9, - "outlength": 6, - "parents": [0, 0, 0, 2, 2, 3, 4, 4, 5] - }, - "outputs": { - "toptr": [3, 0, 2, 1, 2, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0], - "lenparents": 6, - "outlength": 4, - "parents": [0, 0, 0, 2, 2, 3] - }, - "outputs": { - "toptr": [3, 0, 2, 0] - } - } - ] + "error": false, + "message": "", + "inputs": { + "tmpptr": [0,2,2,0,2], + "fromstarts": [0,2,3,3], + "fromstops": [2,3,3,5], + "length": 5 + }, + "outputs": { + "toequal": [1] + } }, { - "name": "awkward_reduce_min_complex", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "identity": 9223372036854775807, - "fromptr": [], - "lenparents": 0, - "outlength": 0, - "parents": [], - "offsets": [] - }, - "outputs": { - "toptr": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "identity": 9223372036854775807, - "fromptr": [0, 0], - "lenparents": 1, - "outlength": 1, - "parents": [0], - "offsets": [0, 1] - }, - "outputs": { - "toptr": [0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "identity": 9223372036854775807, - "fromptr": [1, 0, 0, 1], - "lenparents": 2, - "outlength": 1, - "parents": [0, 0], - "offsets": [0, 2] - }, - "outputs": { - "toptr": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "identity": 9223372036854775807, - "fromptr": [2, 2, 3, 3, 5, 5, 7, 7, 11, 11, 13, 13, 17, 17, 19, 19, 23, 23], - "lenparents": 9, - "outlength": 6, - "parents": [0, 0, 0, 2, 2, 3, 4, 4, 5], - "offsets": [0, 3, 3, 5, 6, 8, 9] - }, - "outputs": { - "toptr": [2, 2, 9223372036854775807, 0, 7, 7, 13, 13, 17, 17, 23, 23] - } - }, - { - "error": false, - "message": "", - "inputs": { - "identity": 9223372036854775807, - "fromptr": [1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1], - "lenparents": 6, - "outlength": 4, - "parents": [0, 0, 0, 2, 2, 3], - "offsets": [0, 3, 3, 5, 6] - }, - "outputs": { - "toptr": [0, 0, 9223372036854775807, 0, 0, 1, 0, 1] - } - } - ] + "error": false, + "message": "", + "inputs": { + "tmpptr": [0,0,0,0,0], + "fromstarts": [0,2,3,3], + "fromstops": [2,3,3,5], + "length": 5 + }, + "outputs": { + "toequal": [1] + } }, { - "name": "awkward_reduce_max_complex", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "identity": -9223372036854775808, - "fromptr": [], - "lenparents": 0, - "outlength": 0, - "parents": [], - "offsets": [] - }, - "outputs": { - "toptr": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "identity": -9223372036854775808, - "fromptr": [0, 0], - "lenparents": 1, - "outlength": 1, - "parents": [0], - "offsets": [0, 1] - }, - "outputs": { - "toptr": [0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "identity": -9223372036854775808, - "fromptr": [1, 0, 0, 1], - "lenparents": 2, - "outlength": 1, - "parents": [0, 0], - "offsets": [0, 2] - }, - "outputs": { - "toptr": [1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "identity": -9223372036854775808, - "fromptr": [2, 2, 3, 3, 5, 5, 7, 7, 11, 11, 13, 13, 17, 17, 19, 19, 23, 23], - "lenparents": 9, - "outlength": 6, - "parents": [0, 0, 0, 2, 2, 3, 4, 4, 5], - "offsets": [0, 3, 3, 5, 6, 8, 9] - }, - "outputs": { - "toptr": [5, 5, -9223372036854775808, 0, 11, 11, 13, 13, 19, 19, 23, 23] - } - }, - { - "error": false, - "message": "", - "inputs": { - "identity": -9223372036854775808, - "fromptr": [1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1], - "lenparents": 6, - "outlength": 4, - "parents": [0, 0, 0, 2, 2, 3], - "offsets": [0, 3, 3, 5, 6] - }, - "outputs": { - "toptr": [1, 1, -9223372036854775808, 0, 1, 1, 0, 1] - } - } - ] + "error": false, + "message": "", + "inputs": { + "tmpptr": [0,0,0,0,0,0,0,0,0,0,0,0], + "fromstarts": [0,2,4,6,8,10], + "fromstops": [2,4,6,8,10,12], + "length": 6 + }, + "outputs": { + "toequal": [1] + } }, { - "name": "awkward_reduce_prod_complex", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromptr": [], - "lenparents": 0, - "outlength": 0, - "parents": [], - "offsets": [] - }, - "outputs": { - "toptr": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 0], - "lenparents": 1, - "outlength": 1, - "parents": [0], - "offsets": [0, 1] - }, - "outputs": { - "toptr": [0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 0], - "lenparents": 1, - "outlength": 1, - "parents": [0], - "offsets": [0, 1] - }, - "outputs": { - "toptr": [1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 0, 0, 1], - "lenparents": 2, - "outlength": 1, - "parents": [0, 0], - "offsets": [0, 2] - }, - "outputs": { - "toptr": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 2, 3, 3, 5, 5, 7, 7, 11, 11, 13, 13, 17, 17, 19, 19, 23, 23], - "lenparents": 9, - "outlength": 6, - "parents": [0, 0, 0, 2, 2, 3, 4, 4, 5], - "offsets": [0, 3, 3, 5, 6, 8, 9] - }, - "outputs": { - "toptr": [-60, 60, 1, 0, 0, 154, 13, 13, 0, 646, 23, 23] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1], - "lenparents": 6, - "outlength": 4, - "parents": [0, 0, 0, 2, 2, 3], - "offsets": [0, 3, 3, 5, 6] - }, - "outputs": { - "toptr": [-1, -1, 1, 0, -1, 1, 0, 1] - } - } - ] + "error": false, + "message": "", + "inputs": { + "tmpptr": [0,1,0,1,0,1,0,1,0,1,0,1], + "fromstarts": [0,2,4,6,8,10], + "fromstops": [2,4,6,8,10,12], + "length": 6 + }, + "outputs": { + "toequal": [1] + } }, { - "name": "awkward_reduce_sum", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromptr": [], - "lenparents": 0, - "outlength": 0, - "parents": [], - "offsets": [] - }, - "outputs": { - "toptr": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0], - "lenparents": 1, - "outlength": 1, - "parents": [0], - "offsets": [0, 1] - }, - "outputs": { - "toptr": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 5, 20, 1, 6, 21, 2, 7, 22, 3, 8, 23, 4, 9, 24], - "lenparents": 15, - "outlength": 10, - "parents": [0, 5, 5, 1, 6, 6, 2, 7, 7, 3, 8, 8, 4, 9, 9], - "offsets": [0, 1, 2, 3, 4, 5, 7, 9, 11, 13, 15] - }, - "outputs": { - "toptr": [0, 1, 2, 3, 4, 25, 27, 29, 31, 33] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 3, 5, 7, 11, 13, 17, 19, 23], - "lenparents": 9, - "outlength": 6, - "parents": [0, 0, 0, 2, 2, 3, 4, 4, 5], - "offsets": [0, 3, 3, 5, 6, 8, 9] - }, - "outputs": { - "toptr": [10, 0, 18, 13, 36, 23] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 0, 0, 1, 0, 0], - "lenparents": 6, - "outlength": 4, - "parents": [0, 0, 0, 2, 2, 3], - "offsets": [0, 3, 3, 5, 6] - }, - "outputs": { - "toptr": [1, 0, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 20, 21, 22, 23, 24], - "lenparents": 15, - "outlength": 3, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2], - "offsets": [0, 5, 10, 15] - }, - "outputs": { - "toptr": [10, 35, 110] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], - "lenparents": 30, - "outlength": 6, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5], - "offsets": [0, 5, 10, 15, 20, 25, 30] - }, - "outputs": { - "toptr": [10, 35, 60, 85, 110, 135] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 1, 3, 4, 5, 6], - "lenparents": 6, - "outlength": 4, - "parents": [0, 0, 1, 3, 3, 3], - "offsets": [0, 2, 3, 3, 6] - }, - "outputs": { - "toptr": [1, 3, 0, 15] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 5, 10, 15, 25, 1, 11, 16, 26, 2, 12, 17, 27, 8, 18, 28, 4, 9, 14, 29], - "lenparents": 20, - "outlength": 10, - "parents": [0, 0, 0, 5, 5, 1, 1, 6, 6, 2, 2, 7, 7, 3, 8, 8, 4, 4, 4, 9], - "offsets": [0, 3, 5, 7, 8, 11, 13, 15, 17, 19, 20] - }, - "outputs": { - "toptr": [15, 12, 14, 8, 27, 40, 42, 44, 46, 29] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [15, 20, 25, 16, 21, 26, 17, 22, 27, 18, 23, 28, 19, 24, 29], - "lenparents": 15, - "outlength": 15, - "parents": [0, 5, 10, 1, 6, 11, 2, 7, 12, 3, 8, 13, 4, 9, 14], - "offsets": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] - }, - "outputs": { - "toptr": [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 15, 5, 10, 25, 1, 16, 11, 26, 2, 17, 12, 27, 18, 8, 28, 4, 9, 14, 29], - "lenparents": 20, - "outlength": 15, - "parents": [0, 0, 5, 10, 10, 1, 1, 11, 11, 2, 2, 12, 12, 3, 8, 13, 4, 9, 14, 14], - "offsets": [0, 2, 4, 6, 7, 8, 9, 9, 9, 10, 11, 13, 15, 17, 18, 20] - }, - "outputs": { - "toptr": [15, 17, 19, 18, 4, 5, 0, 0, 8, 9, 35, 37, 39, 28, 43] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 15, 5, 20, 10, 25, 1, 16, 6, 21, 11, 26, 2, 17, 7, 22, 12, 27, 3, 18, 8, 23, 13, 28, 4, 19, 9, 24, 14, 29], - "lenparents": 30, - "outlength": 15, - "parents": [0, 0, 5, 5, 10, 10, 1, 1, 6, 6, 11, 11, 2, 2, 7, 7, 12, 12, 3, 3, 8, 8, 13, 13, 4, 4, 9, 9, 14, 14], - "offsets": [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30] - }, - "outputs": { - "toptr": [15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 5, 10, 15, 20, 25, 1, 6, 11, 16, 21, 26, 2, 7, 12, 17, 22, 27, 3, 8, 13, 18, 23, 28, 4, 9, 14, 19, 24, 29], - "lenparents": 30, - "outlength": 10, - "parents": [0, 0, 0, 5, 5, 5, 1, 1, 1, 6, 6, 6, 2, 2, 2, 7, 7, 7, 3, 3, 3, 8, 8, 8, 4, 4, 4, 9, 9, 9], - "offsets": [0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30] - }, - "outputs": { - "toptr": [15, 18, 21, 24, 27, 60, 63, 66, 69, 72] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 4, 8, 16, 32, 64, 128, 0, 0, 0, 0], - "lenparents": 12, - "outlength": 3, - "parents": [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], - "offsets": [0, 4, 8, 12] - }, - "outputs": { - "toptr": [15, 240, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 3, 4, 5, 1, 2, 3, 4, 5], - "lenparents": 10, - "outlength": 2, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1], - "offsets": [0, 5, 10] - }, - "outputs": { - "toptr": [15, 15] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 3, 4, 5, 6], - "lenparents": 6, - "outlength": 1, - "parents": [0, 0, 0, 0, 0, 0], - "offsets": [0, 6] - }, - "outputs": { - "toptr": [21] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 7, 13, 17, 23, 3, 11, 19, 5], - "lenparents": 9, - "outlength": 8, - "parents": [0, 0, 0, 6, 6, 1, 1, 7, 2], - "offsets": [0, 3, 5, 6, 6, 6, 6, 8, 9] - }, - "outputs": { - "toptr": [22, 14, 5, 0, 0, 0, 40, 19] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 16, 0, 2, 32, 0, 4, 64, 0, 8, 128, 0], - "lenparents": 12, - "outlength": 4, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3], - "offsets": [0, 3, 6, 9, 12] - }, - "outputs": { - "toptr": [17, 34, 68, 136] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 1, 2, 3, 4, 5], - "lenparents": 6, - "outlength": 4, - "parents": [0, 0, 0, 2, 2, 3], - "offsets": [0, 3, 3, 5, 6] - }, - "outputs": { - "toptr": [3, 0, 7, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 4, 1, 3, 5, 6], - "lenparents": 6, - "outlength": 4, - "parents": [0, 0, 1, 1, 1, 3], - "offsets": [0, 2, 5, 5, 6] - }, - "outputs": { - "toptr": [4, 9, 0, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 4, 9, 16, 25, 1, 4, 9, 16, 25], - "lenparents": 10, - "outlength": 2, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1], - "offsets": [0, 5, 10] - }, - "outputs": { - "toptr": [55, 55] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 4, 9, 16, 26, 1, 4, 10, 16, 24], - "lenparents": 10, - "outlength": 2, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1], - "offsets": [0, 5, 10] - }, - "outputs": { - "toptr": [56, 55] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 5, 20, 1, 6, 21, 2, 7, 22, 3, 8, 23, 4, 9, 24], - "lenparents": 15, - "outlength": 10, - "parents": [0, 0, 5, 1, 1, 6, 2, 2, 7, 3, 3, 8, 4, 4, 9], - "offsets": [0, 2, 4, 6, 8, 10, 11, 12, 13, 14, 15] - }, - "outputs": { - "toptr": [5, 7, 9, 11, 13, 20, 21, 22, 23, 24] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [15, 20, 25, 16, 21, 26, 17, 22, 27, 18, 23, 28, 19, 24, 29], - "lenparents": 15, - "outlength": 5, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4], - "offsets": [0, 3, 6, 9, 12, 15] - }, - "outputs": { - "toptr": [60, 63, 66, 69, 72] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 3], - "lenparents": 3, - "outlength": 1, - "parents": [0, 0, 0], - "offsets": [0, 3] - }, - "outputs": { - "toptr": [6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 1, 2, 4, 5, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 25, 26, 27, 28, 29], - "lenparents": 20, - "outlength": 6, - "parents": [0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 5, 5, 5, 5, 5], - "offsets": [0, 4, 7, 11, 15, 15, 20] - }, - "outputs": { - "toptr": [7, 22, 47, 66, 0, 135] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 2, 4, 5, 5], - "lenparents": 5, - "outlength": 3, - "parents": [0, 0, 0, 2, 2], - "offsets": [0, 3, 3, 5] - }, - "outputs": { - "toptr": [8, 0, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], - "lenparents": 15, - "outlength": 3, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2], - "offsets": [0, 5, 10, 15] - }, - "outputs": { - "toptr": [85, 110, 135] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [4, 1, 0, 1, 4, 5, 1, 0, 1, 3], - "lenparents": 10, - "outlength": 2, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1], - "offsets": [0, 5, 10] - }, - "outputs": { - "toptr": [10, 10] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [4, 1, 0, 1, 4, 4, 1, 0, 1, 4], - "lenparents": 10, - "outlength": 2, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1], - "offsets": [0, 5, 10] - }, - "outputs": { - "toptr": [10, 10] - } - } - ] + "error": false, + "message": "", + "inputs": { + "tmpptr": [0,1,0,1,0,1,0,1,0,1,1,2], + "fromstarts": [0,2,4,6,8,10], + "fromstops": [2,4,6,8,10,12], + "length": 6 + }, + "outputs": { + "toequal": [1] + } }, { - "name": "awkward_reduce_sum_int32_bool_64", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromptr": [], - "lenparents": 0, - "outlength": 0, - "parents": [], - "offsets": [] - }, - "outputs": { - "toptr": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0], - "lenparents": 1, - "outlength": 1, - "parents": [0], - "offsets": [0, 1] - }, - "outputs": { - "toptr": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 5, 20, 1, 6, 21, 2, 7, 22, 3, 8, 23, 4, 9, 24], - "lenparents": 15, - "outlength": 10, - "parents": [0, 5, 5, 1, 6, 6, 2, 7, 7, 3, 8, 8, 4, 9, 9], - "offsets": [0, 1, 2, 3, 4, 5, 7, 9, 11, 13, 15] - }, - "outputs": { - "toptr": [0, 1, 1, 1, 1, 2, 2, 2, 2, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 3, 5, 7, 11, 13, 17, 19, 23], - "lenparents": 9, - "outlength": 6, - "parents": [0, 0, 0, 2, 2, 3, 4, 4, 5], - "offsets": [0, 3, 3, 5, 6, 8, 9] - }, - "outputs": { - "toptr": [3, 0, 2, 1, 2, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 0, 0, 1, 0, 0], - "lenparents": 6, - "outlength": 4, - "parents": [0, 0, 0, 2, 2, 3], - "offsets": [0, 3, 3, 5, 6] - }, - "outputs": { - "toptr": [1, 0, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 20, 21, 22, 23, 24], - "lenparents": 15, - "outlength": 3, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2], - "offsets": [0, 5, 10, 15] - }, - "outputs": { - "toptr": [4, 5, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], - "lenparents": 30, - "outlength": 6, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5], - "offsets": [0, 5, 10, 15, 20, 25, 30] - }, - "outputs": { - "toptr": [4, 5, 5, 5, 5, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 1, 3, 4, 5, 6], - "lenparents": 6, - "outlength": 4, - "parents": [0, 0, 1, 3, 3, 3], - "offsets": [0, 2, 3, 3, 6] - }, - "outputs": { - "toptr": [1, 1, 0, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 5, 10, 15, 25, 1, 11, 16, 26, 2, 12, 17, 27, 8, 18, 28, 4, 9, 14, 29], - "lenparents": 20, - "outlength": 10, - "parents": [0, 0, 0, 5, 5, 1, 1, 6, 6, 2, 2, 7, 7, 3, 8, 8, 4, 4, 4, 9], - "offsets": [0, 3, 5, 7, 8, 11, 13, 15, 17, 19, 20] - }, - "outputs": { - "toptr": [2, 2, 2, 1, 3, 2, 2, 2, 2, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [15, 20, 25, 16, 21, 26, 17, 22, 27, 18, 23, 28, 19, 24, 29], - "lenparents": 15, - "outlength": 15, - "parents": [0, 5, 10, 1, 6, 11, 2, 7, 12, 3, 8, 13, 4, 9, 14], - "offsets": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] - }, - "outputs": { - "toptr": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 15, 5, 10, 25, 1, 16, 11, 26, 2, 17, 12, 27, 18, 8, 28, 4, 9, 14, 29], - "lenparents": 20, - "outlength": 15, - "parents": [0, 0, 5, 10, 10, 1, 1, 11, 11, 2, 2, 12, 12, 3, 8, 13, 4, 9, 14, 14], - "offsets": [0, 2, 4, 6, 7, 8, 9, 9, 9, 10, 11, 13, 15, 17, 18, 20] - }, - "outputs": { - "toptr": [1, 2, 2, 1, 1, 1, 0, 0, 1, 1, 2, 2, 2, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 15, 5, 20, 10, 25, 1, 16, 6, 21, 11, 26, 2, 17, 7, 22, 12, 27, 3, 18, 8, 23, 13, 28, 4, 19, 9, 24, 14, 29], - "lenparents": 30, - "outlength": 15, - "parents": [0, 0, 5, 5, 10, 10, 1, 1, 6, 6, 11, 11, 2, 2, 7, 7, 12, 12, 3, 3, 8, 8, 13, 13, 4, 4, 9, 9, 14, 14], - "offsets": [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30] - }, - "outputs": { - "toptr": [1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 5, 10, 15, 20, 25, 1, 6, 11, 16, 21, 26, 2, 7, 12, 17, 22, 27, 3, 8, 13, 18, 23, 28, 4, 9, 14, 19, 24, 29], - "lenparents": 30, - "outlength": 10, - "parents": [0, 0, 0, 5, 5, 5, 1, 1, 1, 6, 6, 6, 2, 2, 2, 7, 7, 7, 3, 3, 3, 8, 8, 8, 4, 4, 4, 9, 9, 9], - "offsets": [0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30] - }, - "outputs": { - "toptr": [2, 3, 3, 3, 3, 3, 3, 3, 3, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 4, 8, 16, 32, 64, 128, 0, 0, 0, 0], - "lenparents": 12, - "outlength": 3, - "parents": [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], - "offsets": [0, 4, 8, 12] - }, - "outputs": { - "toptr": [4, 4, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 3, 4, 5, 1, 2, 3, 4, 5], - "lenparents": 10, - "outlength": 2, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1], - "offsets": [0, 5, 10] - }, - "outputs": { - "toptr": [5, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 3, 4, 5, 6], - "lenparents": 6, - "outlength": 1, - "parents": [0, 0, 0, 0, 0, 0], - "offsets": [0, 6] - }, - "outputs": { - "toptr": [6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 7, 13, 17, 23, 3, 11, 19, 5], - "lenparents": 9, - "outlength": 8, - "parents": [0, 0, 0, 6, 6, 1, 1, 7, 2], - "offsets": [0, 3, 5, 6, 6, 6, 6, 8, 9] - }, - "outputs": { - "toptr": [3, 2, 1, 0, 0, 0, 2, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 16, 0, 2, 32, 0, 4, 64, 0, 8, 128, 0], - "lenparents": 12, - "outlength": 4, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3], - "offsets": [0, 3, 6, 9, 12] - }, - "outputs": { - "toptr": [2, 2, 2, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 1, 2, 3, 4, 5], - "lenparents": 6, - "outlength": 4, - "parents": [0, 0, 0, 2, 2, 3], - "offsets": [0, 3, 3, 5, 6] - }, - "outputs": { - "toptr": [2, 0, 2, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 4, 1, 3, 5, 6], - "lenparents": 6, - "outlength": 4, - "parents": [0, 0, 1, 1, 1, 3], - "offsets": [0, 2, 5, 5, 6] - }, - "outputs": { - "toptr": [1, 3, 0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 4, 9, 16, 25, 1, 4, 9, 16, 25], - "lenparents": 10, - "outlength": 2, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1], - "offsets": [0, 5, 10] - }, - "outputs": { - "toptr": [5, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 4, 9, 16, 26, 1, 4, 10, 16, 24], - "lenparents": 10, - "outlength": 2, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1], - "offsets": [0, 5, 10] - }, - "outputs": { - "toptr": [5, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 5, 20, 1, 6, 21, 2, 7, 22, 3, 8, 23, 4, 9, 24], - "lenparents": 15, - "outlength": 10, - "parents": [0, 0, 5, 1, 1, 6, 2, 2, 7, 3, 3, 8, 4, 4, 9], - "offsets": [0, 2, 4, 6, 8, 10, 11, 12, 13, 14, 15] - }, - "outputs": { - "toptr": [1, 2, 2, 2, 2, 1, 1, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [15, 20, 25, 16, 21, 26, 17, 22, 27, 18, 23, 28, 19, 24, 29], - "lenparents": 15, - "outlength": 5, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4], - "offsets": [0, 3, 6, 9, 12, 15] - }, - "outputs": { - "toptr": [3, 3, 3, 3, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 3], - "lenparents": 3, - "outlength": 1, - "parents": [0, 0, 0], - "offsets": [0, 3] - }, - "outputs": { - "toptr": [3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 1, 2, 4, 5, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 25, 26, 27, 28, 29], - "lenparents": 20, - "outlength": 6, - "parents": [0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 5, 5, 5, 5, 5], - "offsets": [0, 4, 7, 11, 15, 15, 20] - }, - "outputs": { - "toptr": [3, 3, 4, 4, 0, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 2, 4, 5, 5], - "lenparents": 5, - "outlength": 3, - "parents": [0, 0, 0, 2, 2], - "offsets": [0, 3, 3, 5] - }, - "outputs": { - "toptr": [3, 0, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], - "lenparents": 15, - "outlength": 3, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2], - "offsets": [0, 5, 10, 15] - }, - "outputs": { - "toptr": [5, 5, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [4, 1, 0, 1, 4, 5, 1, 0, 1, 3], - "lenparents": 10, - "outlength": 2, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1], - "offsets": [0, 5, 10] - }, - "outputs": { - "toptr": [4, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [4, 1, 0, 1, 4, 4, 1, 0, 1, 4], - "lenparents": 10, - "outlength": 2, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1], - "offsets": [0, 5, 10] - }, - "outputs": { - "toptr": [4, 4] - } - } - ] + "error": false, + "message": "", + "inputs": { + "tmpptr": [1,1,1,1,1,1], + "fromstarts": [2,2,2,2,2,2], + "fromstops": [4,4,4,4,4,4], + "length": 6 + }, + "outputs": { + "toequal": [1] + } }, { - "name": "awkward_reduce_sum_int64_bool_64", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromptr": [], - "lenparents": 0, - "outlength": 0, - "parents": [], - "offsets": [] - }, - "outputs": { - "toptr": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0], - "lenparents": 1, - "outlength": 1, - "parents": [0], - "offsets": [0, 1] - }, - "outputs": { - "toptr": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 5, 20, 1, 6, 21, 2, 7, 22, 3, 8, 23, 4, 9, 24], - "lenparents": 15, - "outlength": 10, - "parents": [0, 5, 5, 1, 6, 6, 2, 7, 7, 3, 8, 8, 4, 9, 9], - "offsets": [0, 1, 2, 3, 4, 5, 7, 9, 11, 13, 15] - }, - "outputs": { - "toptr": [0, 1, 1, 1, 1, 2, 2, 2, 2, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 3, 5, 7, 11, 13, 17, 19, 23], - "lenparents": 9, - "outlength": 6, - "parents": [0, 0, 0, 2, 2, 3, 4, 4, 5], - "offsets": [0, 3, 3, 5, 6, 8, 9] - }, - "outputs": { - "toptr": [3, 0, 2, 1, 2, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 0, 0, 1, 0, 0], - "lenparents": 6, - "outlength": 4, - "parents": [0, 0, 0, 2, 2, 3], - "offsets": [0, 3, 3, 5, 6] - }, - "outputs": { - "toptr": [1, 0, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 20, 21, 22, 23, 24], - "lenparents": 15, - "outlength": 3, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2], - "offsets": [0, 5, 10, 15] - }, - "outputs": { - "toptr": [4, 5, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], - "lenparents": 30, - "outlength": 6, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5], - "offsets": [0, 5, 10, 15, 20, 25, 30] - }, - "outputs": { - "toptr": [4, 5, 5, 5, 5, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 1, 3, 4, 5, 6], - "lenparents": 6, - "outlength": 4, - "parents": [0, 0, 1, 3, 3, 3], - "offsets": [0, 2, 3, 3, 6] - }, - "outputs": { - "toptr": [1, 1, 0, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 5, 10, 15, 25, 1, 11, 16, 26, 2, 12, 17, 27, 8, 18, 28, 4, 9, 14, 29], - "lenparents": 20, - "outlength": 10, - "parents": [0, 0, 0, 5, 5, 1, 1, 6, 6, 2, 2, 7, 7, 3, 8, 8, 4, 4, 4, 9], - "offsets": [0, 3, 5, 7, 8, 11, 13, 15, 17, 19, 20] - }, - "outputs": { - "toptr": [2, 2, 2, 1, 3, 2, 2, 2, 2, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [15, 20, 25, 16, 21, 26, 17, 22, 27, 18, 23, 28, 19, 24, 29], - "lenparents": 15, - "outlength": 15, - "parents": [0, 5, 10, 1, 6, 11, 2, 7, 12, 3, 8, 13, 4, 9, 14], - "offsets": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] - }, - "outputs": { - "toptr": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 15, 5, 10, 25, 1, 16, 11, 26, 2, 17, 12, 27, 18, 8, 28, 4, 9, 14, 29], - "lenparents": 20, - "outlength": 15, - "parents": [0, 0, 5, 10, 10, 1, 1, 11, 11, 2, 2, 12, 12, 3, 8, 13, 4, 9, 14, 14], - "offsets": [0, 2, 4, 6, 7, 8, 9, 9, 9, 10, 11, 13, 15, 17, 18, 20] - }, - "outputs": { - "toptr": [1, 2, 2, 1, 1, 1, 0, 0, 1, 1, 2, 2, 2, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 15, 5, 20, 10, 25, 1, 16, 6, 21, 11, 26, 2, 17, 7, 22, 12, 27, 3, 18, 8, 23, 13, 28, 4, 19, 9, 24, 14, 29], - "lenparents": 30, - "outlength": 15, - "parents": [0, 0, 5, 5, 10, 10, 1, 1, 6, 6, 11, 11, 2, 2, 7, 7, 12, 12, 3, 3, 8, 8, 13, 13, 4, 4, 9, 9, 14, 14], - "offsets": [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30] - }, - "outputs": { - "toptr": [1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 5, 10, 15, 20, 25, 1, 6, 11, 16, 21, 26, 2, 7, 12, 17, 22, 27, 3, 8, 13, 18, 23, 28, 4, 9, 14, 19, 24, 29], - "lenparents": 30, - "outlength": 10, - "parents": [0, 0, 0, 5, 5, 5, 1, 1, 1, 6, 6, 6, 2, 2, 2, 7, 7, 7, 3, 3, 3, 8, 8, 8, 4, 4, 4, 9, 9, 9], - "offsets": [0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30] - }, - "outputs": { - "toptr": [2, 3, 3, 3, 3, 3, 3, 3, 3, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 4, 8, 16, 32, 64, 128, 0, 0, 0, 0], - "lenparents": 12, - "outlength": 3, - "parents": [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], - "offsets": [0, 4, 8, 12] - }, - "outputs": { - "toptr": [4, 4, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 3, 4, 5, 1, 2, 3, 4, 5], - "lenparents": 10, - "outlength": 2, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1], - "offsets": [0, 5, 10] - }, - "outputs": { - "toptr": [5, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 3, 4, 5, 6], - "lenparents": 6, - "outlength": 1, - "parents": [0, 0, 0, 0, 0, 0], - "offsets": [0, 6] - }, - "outputs": { - "toptr": [6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 7, 13, 17, 23, 3, 11, 19, 5], - "lenparents": 9, - "outlength": 8, - "parents": [0, 0, 0, 6, 6, 1, 1, 7, 2], - "offsets": [0, 3, 5, 6, 6, 6, 6, 8, 9] - }, - "outputs": { - "toptr": [3, 2, 1, 0, 0, 0, 2, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 16, 0, 2, 32, 0, 4, 64, 0, 8, 128, 0], - "lenparents": 12, - "outlength": 4, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3], - "offsets": [0, 3, 6, 9, 12] - }, - "outputs": { - "toptr": [2, 2, 2, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 1, 2, 3, 4, 5], - "lenparents": 6, - "outlength": 4, - "parents": [0, 0, 0, 2, 2, 3], - "offsets": [0, 3, 3, 5, 6] - }, - "outputs": { - "toptr": [2, 0, 2, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 4, 1, 3, 5, 6], - "lenparents": 6, - "outlength": 4, - "parents": [0, 0, 1, 1, 1, 3], - "offsets": [0, 2, 5, 5, 6] - }, - "outputs": { - "toptr": [1, 3, 0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 4, 9, 16, 25, 1, 4, 9, 16, 25], - "lenparents": 10, - "outlength": 2, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1], - "offsets": [0, 5, 10] - }, - "outputs": { - "toptr": [5, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 4, 9, 16, 26, 1, 4, 10, 16, 24], - "lenparents": 10, - "outlength": 2, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1], - "offsets": [0, 5, 10] - }, - "outputs": { - "toptr": [5, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 5, 20, 1, 6, 21, 2, 7, 22, 3, 8, 23, 4, 9, 24], - "lenparents": 15, - "outlength": 10, - "parents": [0, 0, 5, 1, 1, 6, 2, 2, 7, 3, 3, 8, 4, 4, 9], - "offsets": [0, 2, 4, 6, 8, 10, 11, 12, 13, 14, 15] - }, - "outputs": { - "toptr": [1, 2, 2, 2, 2, 1, 1, 1, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [15, 20, 25, 16, 21, 26, 17, 22, 27, 18, 23, 28, 19, 24, 29], - "lenparents": 15, - "outlength": 5, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4], - "offsets": [0, 3, 6, 9, 12, 15] - }, - "outputs": { - "toptr": [3, 3, 3, 3, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 3], - "lenparents": 3, - "outlength": 1, - "parents": [0, 0, 0], - "offsets": [0, 3] - }, - "outputs": { - "toptr": [3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 1, 2, 4, 5, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 25, 26, 27, 28, 29], - "lenparents": 20, - "outlength": 6, - "parents": [0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 5, 5, 5, 5, 5], - "offsets": [0, 4, 7, 11, 15, 15, 20] - }, - "outputs": { - "toptr": [3, 3, 4, 4, 0, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 2, 4, 5, 5], - "lenparents": 5, - "outlength": 3, - "parents": [0, 0, 0, 2, 2], - "offsets": [0, 3, 3, 5] - }, - "outputs": { - "toptr": [3, 0, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], - "lenparents": 15, - "outlength": 3, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2], - "offsets": [0, 5, 10, 15] - }, - "outputs": { - "toptr": [5, 5, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [4, 1, 0, 1, 4, 5, 1, 0, 1, 3], - "lenparents": 10, - "outlength": 2, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1], - "offsets": [0, 5, 10] - }, - "outputs": { - "toptr": [4, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [4, 1, 0, 1, 4, 4, 1, 0, 1, 4], - "lenparents": 10, - "outlength": 2, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1], - "offsets": [0, 5, 10] - }, - "outputs": { - "toptr": [4, 4] - } - } - ] + "error": false, + "message": "", + "inputs": { + "tmpptr": [1,2,3,4,5,6], + "fromstarts": [2,2,2,2,2,2], + "fromstops": [4,4,4,4,4,4], + "length": 6 + }, + "outputs": { + "toequal": [1] + } + } + ] + }, + { + "name": "awkward_NumpyArray_subrange_equal_bool", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "tmpptr": [], + "fromstarts": [], + "fromstops": [], + "length": 0 + }, + "outputs": { + "toequal": [0] + } }, { - "name": "awkward_reduce_prod", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 0, 0, 1, 0, 0], - "lenparents": 6, - "outlength": 4, - "parents": [0, 0, 0, 2, 2, 3], - "offsets": [0, 3, 3, 5, 6] - }, - "outputs": { - "toptr": [0, 1, 0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [], - "lenparents": 0, - "outlength": 0, - "parents": [], - "offsets": [] - }, - "outputs": { - "toptr": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 1, 2, 3, 4, 5], - "lenparents": 6, - "outlength": 4, - "parents": [0, 0, 0, 2, 2, 3], - "offsets": [0, 3, 3, 5, 6] - }, - "outputs": { - "toptr": [0, 1, 12, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 53, 31, 101, 3, 59, 37, 103, 5, 61, 41, 107, 7, 67, 43, 109, 11, 71, 47, 113], - "lenparents": 20, - "outlength": 15, - "parents": [0, 0, 10, 10, 1, 1, 11, 11, 2, 2, 12, 12, 3, 3, 13, 13, 4, 4, 14, 14], - "offsets": [0, 2, 4, 6, 8, 10, 10, 10, 10, 10, 10, 12, 14, 16, 18, 20] - }, - "outputs": { - "toptr": [106, 177, 305, 469, 781, 1, 1, 1, 1, 1, 3131, 3811, 4387, 4687, 5311] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 53, 13, 73, 31, 101, 3, 59, 17, 79, 37, 103, 5, 61, 19, 83, 41, 107, 7, 67, 23, 89, 43, 109, 11, 71, 47, 113], - "lenparents": 28, - "outlength": 15, - "parents": [0, 0, 5, 5, 10, 10, 1, 1, 6, 6, 11, 11, 2, 2, 7, 7, 12, 12, 3, 3, 8, 8, 13, 13, 4, 4, 14, 14], - "offsets": [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 18, 20, 22, 24, 26, 28] - }, - "outputs": { - "toptr": [106, 177, 305, 469, 781, 949, 1343, 1577, 2047, 1, 3131, 3811, 4387, 4687, 5311] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 53, 13, 73, 31, 101, 3, 59, 17, 79, 37, 103, 5, 61, 19, 83, 41, 107, 7, 67, 23, 89, 43, 11, 71, 29, 97, 47], - "lenparents": 28, - "outlength": 15, - "parents": [0, 0, 5, 5, 10, 10, 1, 1, 6, 6, 11, 11, 2, 2, 7, 7, 12, 12, 3, 3, 8, 8, 13, 4, 4, 9, 9, 14], - "offsets": [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 23, 25, 27, 28] - }, - "outputs": { - "toptr": [106, 177, 305, 469, 781, 949, 1343, 1577, 2047, 2813, 3131, 3811, 4387, 43, 47] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 53, 13, 73, 31, 101, 3, 59, 17, 79, 37, 103, 5, 61, 19, 83, 41, 107, 7, 67, 23, 89, 43, 109, 11, 71, 29, 97], - "lenparents": 28, - "outlength": 14, - "parents": [0, 0, 5, 5, 10, 10, 1, 1, 6, 6, 11, 11, 2, 2, 7, 7, 12, 12, 3, 3, 8, 8, 13, 13, 4, 4, 9, 9], - "offsets": [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28] - }, - "outputs": { - "toptr": [106, 177, 305, 469, 781, 949, 1343, 1577, 2047, 2813, 3131, 3811, 4387, 4687] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 53, 13, 73, 31, 101, 3, 59, 17, 79, 37, 103, 5, 61, 19, 83, 41, 107, 7, 67, 23, 89, 43, 109, 11, 71, 29, 97, 47], - "lenparents": 29, - "outlength": 15, - "parents": [0, 0, 5, 5, 10, 10, 1, 1, 6, 6, 11, 11, 2, 2, 7, 7, 12, 12, 3, 3, 8, 8, 13, 13, 4, 4, 9, 9, 14], - "offsets": [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 29] - }, - "outputs": { - "toptr": [106, 177, 305, 469, 781, 949, 1343, 1577, 2047, 2813, 3131, 3811, 4387, 4687, 47] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 53, 13, 73, 31, 101, 3, 59, 17, 79, 37, 103, 5, 61, 19, 83, 41, 107, 7, 67, 23, 89, 43, 109, 11, 71, 29, 97, 47, 113], - "lenparents": 30, - "outlength": 15, - "parents": [0, 0, 5, 5, 10, 10, 1, 1, 6, 6, 11, 11, 2, 2, 7, 7, 12, 12, 3, 3, 8, 8, 13, 13, 4, 4, 9, 9, 14, 14], - "offsets": [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30] - }, - "outputs": { - "toptr": [106, 177, 305, 469, 781, 949, 1343, 1577, 2047, 2813, 3131, 3811, 4387, 4687, 5311] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 53, 13, 73, 31, 101, 3, 59, 17, 79, 37, 103, 5, 61, 19, 83, 41, 107, 7, 67, 23, 89, 43, 109, 11, 71, 29, 47], - "lenparents": 28, - "outlength": 15, - "parents": [0, 0, 5, 5, 10, 10, 1, 1, 6, 6, 11, 11, 2, 2, 7, 7, 12, 12, 3, 3, 8, 8, 13, 13, 4, 4, 9, 14], - "offsets": [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 27, 28] - }, - "outputs": { - "toptr": [106, 177, 305, 469, 781, 949, 1343, 1577, 2047, 29, 3131, 3811, 4387, 4687, 47] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0], - "lenparents": 1, - "outlength": 3, - "parents": [2], - "offsets": [0, 0, 0, 1] - }, - "outputs": { - "toptr": [1, 1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [101, 103, 107, 109, 113, 53, 59, 61, 67, 71, 31, 37, 41, 43, 47, 2, 3, 5, 7, 11], - "lenparents": 20, - "outlength": 6, - "parents": [0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5], - "offsets": [0, 5, 5, 10, 15, 15, 20] - }, - "outputs": { - "toptr": [13710311357, 1, 907383479, 95041567, 1, 2310] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [101, 103, 107, 109, 113, 73, 79, 83, 89, 97, 53, 59, 61, 67, 71, 31, 37, 41, 43, 47, 13, 17, 19, 23, 29, 2, 3, 5, 7, 11], - "lenparents": 30, - "outlength": 6, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5], - "offsets": [0, 5, 10, 15, 20, 25, 30] - }, - "outputs": { - "toptr": [13710311357, 4132280413, 907383479, 95041567, 2800733, 2310] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [101, 103, 107, 109, 113, 53, 59, 61, 67, 71, 31, 37, 41, 43, 47, 2, 3, 5, 7, 11], - "lenparents": 20, - "outlength": 4, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3], - "offsets": [0, 5, 10, 15, 20] - }, - "outputs": { - "toptr": [13710311357, 907383479, 95041567, 2310] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 7, 17, 29, 3, 11, 19, 31, 5, 13, 23, 37], - "lenparents": 12, - "outlength": 6, - "parents": [0, 0, 3, 3, 1, 1, 4, 4, 2, 2, 5, 5], - "offsets": [0, 2, 4, 6, 8, 10, 12] - }, - "outputs": { - "toptr": [14, 33, 65, 493, 589, 851] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [3, 53, 13, 73, 31, 101, 5, 59, 17, 79, 37, 103, 7, 61, 19, 83, 41, 107, 67, 23, 89, 43, 109, 71, 29, 97, 47, 113], - "lenparents": 28, - "outlength": 15, - "parents": [0, 0, 5, 5, 10, 10, 1, 1, 6, 6, 11, 11, 2, 2, 7, 7, 12, 12, 3, 8, 8, 13, 13, 4, 9, 9, 14, 14], - "offsets": [0, 2, 4, 6, 7, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28] - }, - "outputs": { - "toptr": [159, 295, 427, 67, 71, 949, 1343, 1577, 2047, 2813, 3131, 3811, 4387, 4687, 5311] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [3, 53, 13, 73, 31, 101, 5, 59, 17, 79, 37, 103, 7, 61, 19, 83, 41, 107, 11, 67, 23, 89, 43, 109, 71, 29, 97, 47, 113], - "lenparents": 29, - "outlength": 15, - "parents": [0, 0, 5, 5, 10, 10, 1, 1, 6, 6, 11, 11, 2, 2, 7, 7, 12, 12, 3, 3, 8, 8, 13, 13, 4, 9, 9, 14, 14], - "offsets": [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30] - }, - "outputs": { - "toptr": [159, 295, 427, 737, 71, 949, 1343, 1577, 2047, 2813, 3131, 3811, 4387, 4687, 5311] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [3, 53, 13, 73, 31, 101, 5, 59, 17, 79, 37, 103, 7, 61, 19, 83, 41, 107, 11, 67, 23, 89, 43, 109, 71, 97, 47, 113], - "lenparents": 28, - "outlength": 15, - "parents": [0, 0, 5, 5, 10, 10, 1, 1, 6, 6, 11, 11, 2, 2, 7, 7, 12, 12, 3, 3, 8, 8, 13, 13, 4, 9, 14, 14], - "offsets": [0, 2, 4, 6, 8, 9, 11, 13, 15, 17, 18, 20, 22, 24, 26, 28] - }, - "outputs": { - "toptr": [159, 295, 427, 737, 71, 949, 1343, 1577, 2047, 97, 3131, 3811, 4387, 4687, 5311] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 7, 13, 17, 23, 3, 11, 19, 5], - "lenparents": 9, - "outlength": 8, - "parents": [0, 0, 0, 6, 6, 1, 1, 7, 2], - "offsets": [0, 3, 5, 6, 6, 6, 6, 8, 9] - }, - "outputs": { - "toptr": [182, 33, 5, 1, 1, 1, 391, 19] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37], - "lenparents": 12, - "outlength": 3, - "parents": [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], - "offsets": [0, 4, 8, 12] - }, - "outputs": { - "toptr": [210, 46189, 765049] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 3, 5, 7, 11, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 101, 103, 107, 109, 113], - "lenparents": 20, - "outlength": 6, - "parents": [0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5], - "offsets": [0, 5, 5, 10, 15, 15, 20] - }, - "outputs": { - "toptr": [2310, 1, 95041567, 907383479, 1, 13710311357] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113], - "lenparents": 30, - "outlength": 6, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5], - "offsets": [0, 5, 10, 15, 20, 25, 30] - }, - "outputs": { - "toptr": [2310, 2800733, 95041567, 907383479, 4132280413, 13710311357] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 3, 5, 7, 11, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 101, 103, 107, 109, 113], - "lenparents": 20, - "outlength": 4, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3], - "offsets": [0, 5, 10, 15, 20] - }, - "outputs": { - "toptr": [2310, 95041567, 907383479, 13710311357] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 7, 3, 11, 5], - "lenparents": 5, - "outlength": 8, - "parents": [0, 6, 1, 7, 2], - "offsets": [0, 1, 2, 3, 3, 3, 3, 4, 5] - }, - "outputs": { - "toptr": [2, 3, 5, 1, 1, 1, 7, 11] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [5, 53, 13, 73, 31, 101, 7, 59, 17, 79, 37, 103, 11, 61, 19, 83, 41, 107, 67, 23, 89, 43, 109, 71, 29, 97, 47, 113], - "lenparents": 28, - "outlength": 15, - "parents": [0, 0, 5, 5, 10, 10, 1, 1, 6, 6, 11, 11, 2, 2, 7, 7, 12, 12, 3, 8, 8, 13, 13, 4, 9, 9, 14, 14], - "offsets": [0, 2, 4, 6, 7, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28] - }, - "outputs": { - "toptr": [265, 413, 671, 67, 71, 949, 1343, 1577, 2047, 2813, 3131, 3811, 4387, 4687, 5311] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37], - "lenparents": 12, - "outlength": 8, - "parents": [0, 0, 0, 3, 3, 3, 4, 4, 4, 7, 7, 7], - "offsets": [0, 3, 3, 3, 6, 9, 9, 9, 12] - }, - "outputs": { - "toptr": [30, 1, 1, 1001, 7429, 1, 1, 33263] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 3, 5, 7, 11, 13], - "lenparents": 6, - "outlength": 4, - "parents": [0, 0, 0, 2, 2, 3], - "offsets": [0, 3, 3, 5, 6] - }, - "outputs": { - "toptr": [30, 1, 77, 13] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 3, 5, 7, 11, 13, 17, 19, 23], - "lenparents": 9, - "outlength": 6, - "parents": [0, 0, 0, 2, 2, 3, 4, 4, 5], - "offsets": [0, 3, 3, 5, 6, 8, 9] - }, - "outputs": { - "toptr": [30, 1, 77, 13, 323, 23] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 3, 5, 7, 11, 13, 17, 19], - "lenparents": 8, - "outlength": 5, - "parents": [0, 0, 0, 2, 2, 3, 4, 4], - "offsets": [0, 3, 3, 5, 6, 8] - }, - "outputs": { - "toptr": [30, 1, 77, 13, 323] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [6, 5, 7, 11, 13, 17, 19], - "lenparents": 7, - "outlength": 5, - "parents": [0, 0, 2, 2, 3, 4, 4], - "offsets": [0, 2, 2, 4, 5, 7] - }, - "outputs": { - "toptr": [30, 1, 77, 13, 323] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 3, 5, 7, 11], - "lenparents": 5, - "outlength": 3, - "parents": [0, 0, 0, 2, 2], - "offsets": [0, 3, 3, 5] - }, - "outputs": { - "toptr": [30, 1, 77] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 3, 5], - "lenparents": 3, - "outlength": 1, - "parents": [0, 0, 0], - "offsets": [0, 3] - }, - "outputs": { - "toptr": [30] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 3, 5, 7, 11], - "lenparents": 5, - "outlength": 4, - "parents": [0, 0, 0, 1, 2], - "offsets": [0, 3, 4, 5, 5] - }, - "outputs": { - "toptr": [30, 7, 11, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 3, 5, 7, 11], - "lenparents": 5, - "outlength": 3, - "parents": [0, 0, 0, 1, 2], - "offsets": [0, 3, 4, 5] - }, - "outputs": { - "toptr": [30, 7, 11] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [101, 31, 53, 2, 103, 37, 59, 3, 107, 41, 61, 5, 109, 43, 67, 7, 113, 47, 71, 11], - "lenparents": 20, - "outlength": 15, - "parents": [0, 0, 10, 10, 1, 1, 11, 11, 2, 2, 12, 12, 3, 3, 13, 13, 4, 4, 14, 14], - "offsets": [0, 2, 4, 6, 8, 10, 10, 10, 10, 10, 10, 12, 14, 16, 18, 20] - }, - "outputs": { - "toptr": [3131, 3811, 4387, 4687, 5311, 1, 1, 1, 1, 1, 106, 177, 305, 469, 781] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [101, 31, 73, 13, 53, 2, 103, 37, 79, 17, 59, 3, 107, 41, 83, 19, 61, 5, 109, 43, 89, 23, 67, 7, 113, 47, 97, 29, 71, 11], - "lenparents": 30, - "outlength": 15, - "parents": [0, 0, 5, 5, 10, 10, 1, 1, 6, 6, 11, 11, 2, 2, 7, 7, 12, 12, 3, 3, 8, 8, 13, 13, 4, 4, 9, 9, 14, 14], - "offsets": [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30] - }, - "outputs": { - "toptr": [3131, 3811, 4387, 4687, 5311, 949, 1343, 1577, 2047, 2813, 106, 177, 305, 469, 781] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 17, -1, 7, 29, 3, 19, 11, 31, 13, 37], - "lenparents": 11, - "outlength": 12, - "parents": [0, 0, 3, 9, 9, 1, 1, 10, 10, 11, 11], - "offsets": [0, 2, 4, 4, 5, 5, 5, 5, 5, 5, 7, 9, 11] - }, - "outputs": { - "toptr": [34, 57, 1, -1, 1, 1, 1, 1, 1, 203, 341, 481] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 17, -1, 7, 29, 3, 19, 11, 31, 13, 37], - "lenparents": 11, - "outlength": 12, - "parents": [0, 0, 6, 9, 9, 1, 1, 10, 10, 11, 11], - "offsets": [0, 2, 4, 4, 4, 4, 4, 5, 5, 5, 7, 9, 11] - }, - "outputs": { - "toptr": [34, 57, 1, 1, 1, 1, -1, 1, 1, 203, 341, 481] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 17, 7, 29, 3, 19, 11, 31, 13, 37], - "lenparents": 10, - "outlength": 12, - "parents": [0, 0, 9, 9, 1, 1, 10, 10, 11, 11], - "offsets": [0, 2, 4, 4, 4, 4, 4, 4, 4, 4, 6, 8, 10] - }, - "outputs": { - "toptr": [34, 57, 1, 1, 1, 1, 1, 1, 1, 203, 341, 481] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 17, -1, 29, 3, 19, 31, 37], - "lenparents": 8, - "outlength": 12, - "parents": [0, 0, 3, 9, 1, 1, 10, 11], - "offsets": [0, 2, 4, 4, 5, 5, 5, 5, 5, 5, 6, 7, 8] - }, - "outputs": { - "toptr": [34, 57, 1, -1, 1, 1, 1, 1, 1, 29, 31, 37] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 17, -1, 29, 3, 19, 31, 37], - "lenparents": 8, - "outlength": 12, - "parents": [0, 0, 6, 9, 1, 1, 10, 11], - "offsets": [0, 2, 4, 4, 4, 4, 4, 5, 5, 5, 6, 7, 8] - }, - "outputs": { - "toptr": [34, 57, 1, 1, 1, 1, -1, 1, 1, 29, 31, 37] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 17, 29, 3, 19, 31, 37], - "lenparents": 7, - "outlength": 12, - "parents": [0, 0, 9, 1, 1, 10, 11], - "offsets": [0, 2, 4, 4, 4, 4, 4, 4, 4, 4, 5, 6, 7] - }, - "outputs": { - "toptr": [34, 57, 1, 1, 1, 1, 1, 1, 1, 29, 31, 37] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 17, -1, 39, 7, 29, 3, 19, 11, 31, 13, 37], - "lenparents": 12, - "outlength": 12, - "parents": [0, 0, 6, 6, 9, 9, 1, 1, 10, 10, 11, 11], - "offsets": [0, 2, 4, 4, 4, 4, 4, 6, 6, 6, 8, 10, 12] - }, - "outputs": { - "toptr": [34, 57, 1, 1, 1, 1, -39, 1, 1, 203, 341, 481] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 17, -1, 39, 29, 3, 19, 31, 37], - "lenparents": 9, - "outlength": 12, - "parents": [0, 0, 6, 6, 9, 1, 1, 10, 11], - "offsets": [0, 2, 4, 4, 4, 4, 4, 6, 6, 6, 7, 8, 9] - }, - "outputs": { - "toptr": [34, 57, 1, 1, 1, 1, -39, 1, 1, 29, 31, 37] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 17, 7, 29, 3, 19, 11, 31, 5, 23, 13, 37], - "lenparents": 12, - "outlength": 12, - "parents": [0, 0, 9, 9, 1, 1, 10, 10, 2, 2, 11, 11], - "offsets": [0, 2, 4, 6, 6, 6, 6, 6, 6, 6, 8, 10, 12] - }, - "outputs": { - "toptr": [34, 57, 115, 1, 1, 1, 1, 1, 1, 203, 341, 481] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 17, -1, 39, 7, 29, 3, 19, 11, 31, 13, 37], - "lenparents": 12, - "outlength": 12, - "parents": [0, 0, 3, 3, 9, 9, 1, 1, 10, 10, 11, 11], - "offsets": [0, 2, 4, 4, 6, 6, 6, 6, 6, 6, 8, 10, 12] - }, - "outputs": { - "toptr": [34, 57, 1, -39, 1, 1, 1, 1, 1, 203, 341, 481] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 17, -1, 39, 29, 3, 19, 31, 37], - "lenparents": 9, - "outlength": 12, - "parents": [0, 0, 3, 3, 9, 1, 1, 10, 11], - "offsets": [0, 2, 4, 4, 6, 6, 6, 6, 6, 6, 7, 8, 9] - }, - "outputs": { - "toptr": [34, 57, 1, -39, 1, 1, 1, 1, 1, 29, 31, 37] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 17, 7, 23, 13, 29, 3, 19, 11, 5], - "lenparents": 10, - "outlength": 7, - "parents": [0, 0, 3, 3, 6, 6, 1, 1, 4, 2], - "offsets": [0, 2, 4, 5, 7, 8, 8, 10] - }, - "outputs": { - "toptr": [34, 57, 5, 161, 11, 1, 377] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 17, 23, 7, 13, 3, 19, 11, 5], - "lenparents": 9, - "outlength": 10, - "parents": [0, 0, 3, 6, 9, 1, 1, 7, 2], - "offsets": [0, 2, 4, 5, 6, 6, 6, 7, 8, 8, 9] - }, - "outputs": { - "toptr": [34, 57, 5, 23, 1, 1, 7, 11, 1, 13] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 11, 17, 7, 19, 3, 13, 23, 5], - "lenparents": 9, - "outlength": 5, - "parents": [0, 0, 0, 3, 3, 1, 1, 4, 2], - "offsets": [0, 3, 5, 7, 8, 9] - }, - "outputs": { - "toptr": [374, 39, 5, 133, 23] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [101, 73, 53, 31, 13, 2, 103, 79, 59, 37, 17, 3, 107, 83, 61, 41, 19, 5, 109, 89, 67, 43, 23, 7, 113, 97, 71, 47, 29, 11], - "lenparents": 30, - "outlength": 10, - "parents": [0, 0, 0, 5, 5, 5, 1, 1, 1, 6, 6, 6, 2, 2, 2, 7, 7, 7, 3, 3, 3, 8, 8, 8, 4, 4, 4, 9, 9, 9], - "offsets": [0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30] - }, - "outputs": { - "toptr": [390769, 480083, 541741, 649967, 778231, 806, 1887, 3895, 6923, 14993] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 11, 23, 3, 13, 29, 5, 17, 31, 7, 19, 37], - "lenparents": 12, - "outlength": 4, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3], - "offsets": [0, 3, 6, 9, 12] - }, - "outputs": { - "toptr": [506, 1131, 2635, 4921] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [101, 53, 31, 2, 103, 59, 37, 3, 107, 61, 41, 5, 109, 67, 43, 7, 113, 71, 47, 11], - "lenparents": 20, - "outlength": 10, - "parents": [0, 0, 5, 5, 1, 1, 6, 6, 2, 2, 7, 7, 3, 3, 8, 8, 4, 4, 9, 9], - "offsets": [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20] - }, - "outputs": { - "toptr": [5353, 6077, 6527, 7303, 8023, 62, 111, 205, 301, 517] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 3], - "lenparents": 3, - "outlength": 1, - "parents": [0, 0, 0], - "offsets": [0, 3] - }, - "outputs": { - "toptr": [6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 31, 53, 101, 3, 37, 59, 103, 5, 41, 61, 107, 7, 43, 67, 109, 11, 47, 71, 113], - "lenparents": 20, - "outlength": 10, - "parents": [0, 0, 5, 5, 1, 1, 6, 6, 2, 2, 7, 7, 3, 3, 8, 8, 4, 4, 9, 9], - "offsets": [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20] - }, - "outputs": { - "toptr": [62, 111, 205, 301, 517, 5353, 6077, 6527, 7303, 8023] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 3, 5, 7, 11, 13, 17, 19], - "lenparents": 8, - "outlength": 7, - "parents": [0, 0, 1, 2, 3, 4, 5, 6], - "offsets": [0, 2, 3, 4, 5, 6, 7, 8] - }, - "outputs": { - "toptr": [6, 5, 7, 11, 13, 17, 19] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 3, 5, 7, 11, 13, 17, 19], - "lenparents": 8, - "outlength": 6, - "parents": [0, 0, 1, 2, 3, 4, 5, 5], - "offsets": [0, 2, 3, 4, 5, 6, 8] - }, - "outputs": { - "toptr": [6, 5, 7, 11, 13, 323] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 3, 4, 5, 6], - "lenparents": 6, - "outlength": 1, - "parents": [0, 0, 0, 0, 0, 0], - "offsets": [0, 6] - }, - "outputs": { - "toptr": [720] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 13, 31, 53, 73, 101, 3, 17, 37, 59, 79, 103, 5, 19, 41, 61, 83, 107, 7, 23, 43, 67, 89, 109, 11, 29, 47, 71, 97, 113], - "lenparents": 30, - "outlength": 10, - "parents": [0, 0, 0, 5, 5, 5, 1, 1, 1, 6, 6, 6, 2, 2, 2, 7, 7, 7, 3, 3, 3, 8, 8, 8, 4, 4, 4, 9, 9, 9], - "offsets": [0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30] - }, - "outputs": { - "toptr": [806, 1887, 3895, 6923, 14993, 390769, 480083, 541741, 649967, 778231] - } - } - ] + "error": false, + "message": "", + "inputs": { + "tmpptr": [0,1,2,3,4,5,6,7], + "fromstarts": [0,1,3,5], + "fromstops": [1,3,5,7], + "length": 4 + }, + "outputs": { + "toequal": [1] + } }, { - "name": "awkward_reduce_min", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromptr": [], - "identity": 9223372036854775807, - "lenparents": 0, - "outlength": 0, - "parents": [], - "offsets": [] - }, - "outputs": { - "toptr": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 4, 1, 1, 5, 6], - "identity": 9223372036854775807, - "lenparents": 6, - "outlength": 4, - "parents": [0, 0, 1, 1, 1, 3], - "offsets": [0, 2, 5, 5, 6] - }, - "outputs": { - "toptr": [0, 1, 9223372036854775807, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 1, 3, 4, 5, 6], - "identity": 9223372036854775807, - "lenparents": 6, - "outlength": 4, - "parents": [0, 0, 1, 3, 3, 3], - "offsets": [0, 2, 3, 3, 6] - }, - "outputs": { - "toptr": [0, 3, 9223372036854775807, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 3, 2, 5, 3, 7, 3, 1, 5, 8, 1, 9, 4, 2, 7, 10, 2, 4, 7, 2], - "identity": 9223372036854775807, - "lenparents": 20, - "outlength": 5, - "parents": [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4], - "offsets": [0, 4, 8, 12, 16, 20] - }, - "outputs": { - "toptr": [1, 1, 1, 2, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 3], - "identity": 9223372036854775807, - "lenparents": 3, - "outlength": 1, - "parents": [0, 0, 0], - "offsets": [0, 3] - }, - "outputs": { - "toptr": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 3, 4, 5, 6], - "identity": 9223372036854775807, - "lenparents": 6, - "outlength": 1, - "parents": [0, 0, 0, 0, 0, 0], - "offsets": [0, 6] - }, - "outputs": { - "toptr": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 3, 6, 4, 2, 2, 3, 1, 6], - "identity": 4, - "lenparents": 9, - "outlength": 4, - "parents": [0, 0, 0, 0, 0, 2, 2, 2, 3], - "offsets": [0, 5, 5, 8, 9] - }, - "outputs": { - "toptr": [1, 4, 1, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 3, 5, 4, 2, 3, 7, 8, 2, 4, 2, 3, 1, 7, 7, 5, 1, 9, 10, 2], - "identity": 9223372036854775807, - "lenparents": 20, - "outlength": 4, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3], - "offsets": [0, 5, 10, 15, 20] - }, - "outputs": { - "toptr": [1, 2, 1, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 4, 4, 2, 2, 5, 3, 3, 3, 6, 2, 4], - "identity": 9223372036854775807, - "lenparents": 12, - "outlength": 9, - "parents": [0, 0, 6, 6, 1, 1, 7, 7, 2, 2, 8, 8], - "offsets": [0, 2, 4, 6, 6, 6, 6, 8, 10, 12] - }, - "outputs": { - "toptr": [1, 2, 3, 9223372036854775807, 9223372036854775807, 9223372036854775807, 2, 3, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 5, 3, 3, 5, 1, 4, 2], - "identity": 9223372036854775807, - "lenparents": 9, - "outlength": 5, - "parents": [0, 0, 0, 1, 1, 2, 2, 3, 4], - "offsets": [0, 3, 5, 7, 8, 9] - }, - "outputs": { - "toptr": [1, 3, 1, 4, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 3, 5, 4, 2, 2, 3, 1, 5], - "identity": 4, - "lenparents": 9, - "outlength": 4, - "parents": [0, 0, 0, 0, 0, 2, 2, 2, 3], - "offsets": [0, 5, 5, 8, 9] - }, - "outputs": { - "toptr": [1, 4, 1, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 3, 5, 4, 2, 2, 3, 1, 5], - "identity": 9223372036854775807, - "lenparents": 9, - "outlength": 4, - "parents": [0, 0, 0, 0, 0, 2, 2, 2, 3], - "offsets": [0, 5, 5, 8, 9] - }, - "outputs": { - "toptr": [1, 9223372036854775807, 1, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 7, 13, 17, 23, 3, 11, 19, 5], - "identity": 9223372036854775807, - "lenparents": 9, - "outlength": 8, - "parents": [0, 0, 0, 6, 6, 1, 1, 7, 2], - "offsets": [0, 3, 5, 6, 6, 6, 6, 8, 9] - }, - "outputs": { - "toptr": [2, 3, 5, 9223372036854775807, 9223372036854775807, 9223372036854775807, 17, 19] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 3, 5, 7, 11, 13, 17, 19, 23], - "identity": 9223372036854775807, - "lenparents": 9, - "outlength": 6, - "parents": [0, 0, 0, 2, 2, 3, 4, 4, 5], - "offsets": [0, 3, 3, 5, 6, 8, 9] - }, - "outputs": { - "toptr": [2, 9223372036854775807, 7, 13, 17, 23] - } - } - ] + "error": false, + "message": "", + "inputs": { + "tmpptr": [0,2,2,3,5], + "fromstarts": [0,2,3,3], + "fromstops": [2,3,3,5], + "length": 5 + }, + "outputs": { + "toequal": [0] + } }, { - "name": "awkward_reduce_argmin", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 0, 4, 4, 6], - "lenparents": 5, - "outlength": 1, - "parents": [0, 0, 0, 0, 0], - "starts": [0], - "offsets": [0, 5] - }, - "outputs": { - "toptr": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [], - "lenparents": 0, - "outlength": 0, - "parents": [], - "starts": [], - "offsets": [] - }, - "outputs": { - "toptr": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 3], - "lenparents": 3, - "outlength": 1, - "parents": [0, 0, 0], - "starts": [0], - "offsets": [0, 3] - }, - "outputs": { - "toptr": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 2, 3, 4, 5, 6], - "lenparents": 6, - "outlength": 1, - "parents": [0, 0, 0, 0, 0, 0], - "starts": [0], - "offsets": [0, 6] - }, - "outputs": { - "toptr": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [0, 1, 2, 3, 4, 6], - "lenparents": 6, - "outlength": 3, - "parents": [0, 0, 0, 1, 1, 2], - "starts": [0, 3, 5], - "offsets": [0, 3, 5, 6] - }, - "outputs": { - "toptr": [0, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 4, 2, 6, 3, 0, -10], - "lenparents": 7, - "outlength": 4, - "parents": [0, 0, 0, 1, 1, 2, 3], - "starts": [0, 3, 5, 6], - "offsets": [0, 3, 5, 6, 7] - }, - "outputs": { - "toptr": [0, 4, 5, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 1, 3, 4, 6, 6, -4, -6, -7], - "lenparents": 9, - "outlength": 5, - "parents": [0, 0, 0, 2, 2, 3, 4, 4, 4], - "starts": [0, -1, 3, 5, 6], - "offsets": [0, 3, 3, 5, 6, 9] - }, - "outputs": { - "toptr": [1, -1, 3, 5, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 1, 3, -4, -6, -7], - "lenparents": 6, - "outlength": 3, - "parents": [0, 0, 0, 2, 2, 2], - "starts": [0, -1, 3], - "offsets": [0, 3, 3, 6] - }, - "outputs": { - "toptr": [1, -1, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 1, 3, 2, 1], - "lenparents": 5, - "outlength": 3, - "parents": [0, 0, 1, 2, 2], - "starts": [0, 2, 3], - "offsets": [0, 2, 3, 5] - }, - "outputs": { - "toptr": [1, 2, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 2, 1, 0, 1, 0], - "lenparents": 6, - "outlength": 3, - "parents": [0, 0, 1, 1, 1, 2], - "starts": [0, 2, 5], - "offsets": [0, 2, 5, 6] - }, - "outputs": { - "toptr": [0, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [2, 0, 2, 1, 1, 0], - "lenparents": 6, - "outlength": 3, - "parents": [0, 0, 0, 1, 1, 2], - "starts": [0, 3, 5], - "offsets": [0, 3, 5, 6] - }, - "outputs": { - "toptr": [1, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [3, -3, 4, 4, 2, 2, 2, 2, 2, -2, 1, 1, 6, -6, 1, 1, 4, 4, 1, 1, 3, -3, 3, 3, 4, 4, 6, 6, 6, -6], - "lenparents": 30, - "outlength": 15, - "parents": [0, 0, 5, 5, 10, 10, 1, 1, 6, 6, 11, 11, 2, 2, 7, 7, 12, 12, 3, 3, 8, 8, 13, 13, 4, 4, 9, 9, 14, 14], - "starts": [0, 6, 12, 18, 24, 2, 8, 14, 20, 26, 4, 10, 16, 22, 28], - "offsets": [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30] - }, - "outputs": { - "toptr": [1, 6, 13, 18, 24, 2, 9, 14, 21, 26, 4, 10, 16, 22, 29] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [3, 1, 6, 1, 4, 4, 2, 1, 7, 2, 3, -1], - "lenparents": 12, - "outlength": 3, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2], - "starts": [0, 5, 9], - "offsets": [0, 5, 9, 12] - }, - "outputs": { - "toptr": [1, 7, 11] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [-4, -6, -7, 6, 4, 6, 2, 1, 3], - "lenparents": 9, - "outlength": 5, - "parents": [0, 0, 0, 1, 2, 2, 4, 4, 4], - "starts": [0, 3, 4, -1, 6], - "offsets": [0, 3, 4, 6, 6, 9] - }, - "outputs": { - "toptr": [2, 3, 4, -1, 7] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [-4, -6, -7, 6, -4, -6, -7, 2, 1, 3], - "lenparents": 10, - "outlength": 4, - "parents": [0, 0, 0, 1, 2, 2, 2, 3, 3, 3], - "starts": [0, 3, 4, 7], - "offsets": [0, 3, 4, 7, 10] - }, - "outputs": { - "toptr": [2, 3, 6, 8] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [3, 4, 2, 1, 2, 3, 6, 1, -1, 1, 7, 4], - "lenparents": 12, - "outlength": 5, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 4], - "starts": [0, 3, 6, 9, 11], - "offsets": [0, 3, 6, 9, 11, 12] - }, - "outputs": { - "toptr": [2, 3, 8, 9, 11] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [3, 4, 2, 2, 2, 1, 6, 1, 4, 1, 3, 3, 4, 6, 6], - "lenparents": 15, - "outlength": 5, - "parents": [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4], - "starts": [0, 3, 6, 9, 12], - "offsets": [0, 3, 6, 9, 12, 15] - }, - "outputs": { - "toptr": [2, 5, 7, 9, 12] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [3, 4, 2, -3, 4, 2, 2, 2, 1, 2, -2, 1, 6, 1, 4, -6, 1, 4, 1, 3, 3, 1, -3, 3, 4, 6, 6, 4, 6, -6], - "lenparents": 30, - "outlength": 10, - "parents": [0, 0, 0, 5, 5, 5, 1, 1, 1, 6, 6, 6, 2, 2, 2, 7, 7, 7, 3, 3, 3, 8, 8, 8, 4, 4, 4, 9, 9, 9], - "starts": [0, 6, 12, 18, 24, 3, 9, 15, 21, 27], - "offsets": [0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30] - }, - "outputs": { - "toptr": [2, 8, 13, 18, 24, 3, 10, 15, 22, 29] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [6, 3, 2, 1, 2], - "lenparents": 5, - "outlength": 1, - "parents": [0, 0, 0, 0, 0], - "starts": [0], - "offsets": [0, 5] - }, - "outputs": { - "toptr": [3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [3, 2, 6, 1, 4, 4, 2, 1, 3, 6, 2, 1, 4, 3, 6, -3, 2, -6, 1, 4, 4, -2, 1, -3, 6, 2, 1, 4, 3, -6], - "lenparents": 30, - "outlength": 6, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5], - "starts": [0, 5, 10, 15, 20, 25], - "offsets": [0, 5, 10, 15, 20, 25, 30] - }, - "outputs": { - "toptr": [3, 7, 11, 17, 23, 29] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [3, 2, 6, 1, 4, 4, 2, 1, 3, 6, 2, 1, 4, 3, 6], - "lenparents": 15, - "outlength": 3, - "parents": [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2], - "starts": [0, 5, 10], - "offsets": [0, 5, 10, 15] - }, - "outputs": { - "toptr": [3, 7, 11] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 1, 1, 999, 1, 1, 1, 1, 999, 1, 2, 2, 2, 2, 2, 2, 3, 3], - "lenparents": 18, - "outlength": 6, - "parents": [0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 1, 1, 1, 4, 4, 4, 2, 5], - "starts": [0, 10, 16, 5, 13, 17], - "offsets": [0, 5, 8, 9, 14, 17, 18] - }, - "outputs": { - "toptr": [0, 10, 16, 5, 13, 17] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 1, 1, 999, 1, 1, 1, 1, 999, 1, 2, 2, 2, 999, 2, 2, 2, 3, 999, 999, 3, 999], - "lenparents": 22, - "outlength": 8, - "parents": [0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 1, 1, 1, 5, 5, 5, 5, 2, 6, 6, 6, 7], - "starts": [0, 10, 17, -1, 5, 13, 18, 21], - "offsets": [0, 5, 8, 9, 9, 14, 18, 21, 22] - }, - "outputs": { - "toptr": [0, 10, 17, -1, 5, 14, 20, 21] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [1, 1, 1, 999, 1, 1, 1, 1, 999, 1, 2, 2, 2, 999, 2, 2, 2, 3, 999, 999, 3], - "lenparents": 21, - "outlength": 6, - "parents": [0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 1, 1, 1, 4, 4, 4, 4, 2, 5, 5, 5], - "starts": [0, 10, 17, 5, 13, 18], - "offsets": [0, 5, 8, 9, 14, 18, 21] - }, - "outputs": { - "toptr": [0, 10, 17, 5, 14, 20] - } - } - ] + "error": false, + "message": "", + "inputs": { + "tmpptr": [0,2,2,0,2], + "fromstarts": [0,2,3,3], + "fromstops": [2,3,3,5], + "length": 5 + }, + "outputs": { + "toequal": [1] + } }, { - "name": "awkward_UnionArray_fillindex_count", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "toindexoffset": 4 - }, - "outputs": { - "toindex": [123, 123, 123, 123, 0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 0, - "toindexoffset": 0 - }, - "outputs": { - "toindex": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 2, - "toindexoffset": 2 - }, - "outputs": { - "toindex": [123, 123, 0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 2, - "toindexoffset": 0 - }, - "outputs": { - "toindex": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "toindexoffset": 6 - }, - "outputs": { - "toindex": [123, 123, 123, 123, 123, 123, 0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 3, - "toindexoffset": 0 - }, - "outputs": { - "toindex": [0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "toindexoffset": 9 - }, - "outputs": { - "toindex": [123, 123, 123, 123, 123, 123, 123, 123, 123, 0, 1, 2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 4, - "toindexoffset": 5 - }, - "outputs": { - "toindex": [123, 123, 123, 123, 123, 0, 1, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "length": 5, - "toindexoffset": 0 - }, - "outputs": { - "toindex": [0, 1, 2, 3, 4] - } - } - ] + "error": false, + "message": "", + "inputs": { + "tmpptr": [0,0,0,0,0], + "fromstarts": [0,2,3,3], + "fromstops": [2,3,3,5], + "length": 5 + }, + "outputs": { + "toequal": [1] + } }, { - "name": "awkward_UnionArray_simplify", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "base": 0, - "innerindex": [], - "innertags": [], - "innerwhich": 0, - "length": 0, - "outerindex": [], - "outertags": [], - "outerwhich": 1, - "towhich": 1 - }, - "outputs": { - "toindex": [], - "totags": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "base": 0, - "innerindex": [0, 0, 1, 1, 2, 3, 2], - "innertags": [0, 1, 0, 1, 0, 0, 1], - "innerwhich": 0, - "length": 12, - "outerindex": [0, 1, 0, 1, 2, 2, 3, 4, 5, 3, 6, 4], - "outertags": [0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0], - "outerwhich": 1, - "towhich": 1 - }, - "outputs": { - "toindex": [123, 123, 0, 123, 1, 123, 123, 2, 3, 123, 123, 123], - "totags": [123, 123, 1, 123, 1, 123, 123, 1, 1, 123, 123, 123] - } - }, - { - "error": false, - "message": "", - "inputs": { - "base": 5, - "innerindex": [0, 0, 1, 1, 2, 3, 2], - "innertags": [0, 1, 0, 1, 0, 0, 1], - "innerwhich": 1, - "length": 12, - "outerindex": [0, 1, 0, 1, 2, 2, 3, 4, 5, 3, 6, 4], - "outertags": [0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0], - "outerwhich": 1, - "towhich": 0 - }, - "outputs": { - "toindex": [123, 123, 123, 5, 123, 123, 6, 123, 123, 123, 7, 123], - "totags": [123, 123, 123, 0, 123, 123, 0, 123, 123, 123, 0, 123] - } - } - ] + "error": false, + "message": "", + "inputs": { + "tmpptr": [0,0,0,0,0,0,0,0,0,0,0,0], + "fromstarts": [0,2,4,6,8,10], + "fromstops": [2,4,6,8,10,12], + "length": 6 + }, + "outputs": { + "toequal": [1] + } }, { - "name": "awkward_sorting_ranges", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "parents": [], - "parentslength": 0, - "tolength": 2 - }, - "outputs": { - "toindex": [0, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "parents": [0, 1], - "parentslength": 2, - "tolength": 3 - }, - "outputs": { - "toindex": [0, 1, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "parents": [0, 3, 6, 9], - "parentslength": 4, - "tolength": 5 - }, - "outputs": { - "toindex": [0, 1, 2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "parents": [3, 3, 3, 3], - "parentslength": 4, - "tolength": 2 - }, - "outputs": { - "toindex": [0, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "parents": [2, 4, 4], - "parentslength": 3, - "tolength": 3 - }, - "outputs": { - "toindex": [0, 1, 3] - } - } - ] + "error": false, + "message": "", + "inputs": { + "tmpptr": [0,1,0,1,0,1,0,1,0,1,0,1], + "fromstarts": [0,2,4,6,8,10], + "fromstops": [2,4,6,8,10,12], + "length": 6 + }, + "outputs": { + "toequal": [1] + } }, { - "name": "awkward_sorting_ranges_length", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "parents": [], - "parentslength": 0 - }, - "outputs": { - "tolength": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "parents": [0, 1], - "parentslength": 2 - }, - "outputs": { - "tolength": [3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "parents": [0, 3, 6, 9], - "parentslength": 4 - }, - "outputs": { - "tolength": [5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "parents": [3, 3, 3, 3], - "parentslength": 4 - }, - "outputs": { - "tolength": [2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "parents": [2, 4, 4], - "parentslength": 3 - }, - "outputs": { - "tolength": [3] - } - } - ] + "error": false, + "message": "", + "inputs": { + "tmpptr": [0,1,0,1,0,1,0,1,0,1,1,2], + "fromstarts": [0,2,4,6,8,10], + "fromstops": [2,4,6,8,10,12], + "length": 6 + }, + "outputs": { + "toequal": [1] + } }, { - "name": "awkward_NumpyArray_subrange_equal", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "tmpptr": [], - "fromstarts": [], - "fromstops": [], - "length": 0 - }, - "outputs": { - "toequal": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "tmpptr": [0, 1, 2, 3, 4, 5, 6, 7], - "fromstarts": [0, 1, 3, 5], - "fromstops": [1, 3, 5, 7], - "length": 4 - }, - "outputs": { - "toequal": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "tmpptr": [0, 2, 2, 3, 5], - "fromstarts": [0, 2, 3, 3], - "fromstops": [2, 3, 3, 5], - "length": 5 - }, - "outputs": { - "toequal": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "tmpptr": [0, 2, 2, 0, 2], - "fromstarts": [0, 2, 3, 3], - "fromstops": [2, 3, 3, 5], - "length": 5 - }, - "outputs": { - "toequal": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "tmpptr": [0, 0, 0, 0, 0], - "fromstarts": [0, 2, 3, 3], - "fromstops": [2, 3, 3, 5], - "length": 5 - }, - "outputs": { - "toequal": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "tmpptr": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "fromstarts": [0, 2, 4, 6, 8, 10], - "fromstops": [2, 4, 6, 8, 10, 12], - "length": 6 - }, - "outputs": { - "toequal": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "tmpptr": [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1], - "fromstarts": [0, 2, 4, 6, 8, 10], - "fromstops": [2, 4, 6, 8, 10, 12], - "length": 6 - }, - "outputs": { - "toequal": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "tmpptr": [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 2], - "fromstarts": [0, 2, 4, 6, 8, 10], - "fromstops": [2, 4, 6, 8, 10, 12], - "length": 6 - }, - "outputs": { - "toequal": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "tmpptr": [1, 1, 1, 1, 1, 1], - "fromstarts": [2, 2, 2, 2, 2, 2], - "fromstops": [4, 4, 4, 4, 4, 4], - "length": 6 - }, - "outputs": { - "toequal": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "tmpptr": [1, 2, 3, 4, 5, 6], - "fromstarts": [2, 2, 2, 2, 2, 2], - "fromstops": [4, 4, 4, 4, 4, 4], - "length": 6 - }, - "outputs": { - "toequal": [1] - } - } - ] + "error": false, + "message": "", + "inputs": { + "tmpptr": [1,1,1,1,1,1], + "fromstarts": [2,2,2,2,2,2], + "fromstops": [4,4,4,4,4,4], + "length": 6 + }, + "outputs": { + "toequal": [1] + } }, { - "name": "awkward_NumpyArray_subrange_equal_bool", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "tmpptr": [], - "fromstarts": [], - "fromstops": [], - "length": 0 - }, - "outputs": { - "toequal": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "tmpptr": [0, 1, 2, 3, 4, 5, 6, 7], - "fromstarts": [0, 1, 3, 5], - "fromstops": [1, 3, 5, 7], - "length": 4 - }, - "outputs": { - "toequal": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "tmpptr": [0, 2, 2, 3, 5], - "fromstarts": [0, 2, 3, 3], - "fromstops": [2, 3, 3, 5], - "length": 5 - }, - "outputs": { - "toequal": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "tmpptr": [0, 2, 2, 0, 2], - "fromstarts": [0, 2, 3, 3], - "fromstops": [2, 3, 3, 5], - "length": 5 - }, - "outputs": { - "toequal": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "tmpptr": [0, 0, 0, 0, 0], - "fromstarts": [0, 2, 3, 3], - "fromstops": [2, 3, 3, 5], - "length": 5 - }, - "outputs": { - "toequal": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "tmpptr": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "fromstarts": [0, 2, 4, 6, 8, 10], - "fromstops": [2, 4, 6, 8, 10, 12], - "length": 6 - }, - "outputs": { - "toequal": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "tmpptr": [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1], - "fromstarts": [0, 2, 4, 6, 8, 10], - "fromstops": [2, 4, 6, 8, 10, 12], - "length": 6 - }, - "outputs": { - "toequal": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "tmpptr": [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 2], - "fromstarts": [0, 2, 4, 6, 8, 10], - "fromstops": [2, 4, 6, 8, 10, 12], - "length": 6 - }, - "outputs": { - "toequal": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "tmpptr": [1, 1, 1, 1, 1, 1], - "fromstarts": [2, 2, 2, 2, 2, 2], - "fromstops": [4, 4, 4, 4, 4, 4], - "length": 6 - }, - "outputs": { - "toequal": [1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "tmpptr": [1, 2, 3, 4, 5, 6], - "fromstarts": [2, 2, 2, 2, 2, 2], - "fromstops": [4, 4, 4, 4, 4, 4], - "length": 6 - }, - "outputs": { - "toequal": [1] - } - } - ] + "error": false, + "message": "", + "inputs": { + "tmpptr": [1,2,3,4,5,6], + "fromstarts": [2,2,2,2,2,2], + "fromstops": [4,4,4,4,4,4], + "length": 6 + }, + "outputs": { + "toequal": [1] + } + } + ] + }, + { + "name": "awkward_unique_offsets", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0], + "starts": [], + "startslength": 0, + "length": 1 + }, + "outputs": { + "tooffsets": [0] + } }, { - "name": "awkward_unique_offsets", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0], - "starts": [], - "startslength": 0, - "length": 1 - }, - "outputs": { - "tooffsets": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 2, 2, 3, 4, 5], - "starts": [0, 2, 4, 6], - "startslength": 4, - "length": 6 - }, - "outputs": { - "tooffsets": [0, 2, 2, 3, 5, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 1, 2, 2, 3], - "starts": [0, 1, 3, 4], - "startslength": 4, - "length": 5 - }, - "outputs": { - "tooffsets": [0, 1, 2, 2, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromoffsets": [0, 1, 2, 2, 3], - "starts": [0, 1, 2, 3], - "startslength": 4, - "length": 5 - }, - "outputs": { - "tooffsets": [0, 1, 2, 2, 3] - } - } - ] + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,2,2,3,4,5], + "starts": [0,2,4,6], + "startslength": 4, + "length": 6 + }, + "outputs": { + "tooffsets": [0,2,2,3,5,5] + } }, { - "name": "awkward_unique_ranges", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "toptr": [], - "fromoffsets": [0], - "offsetslength": 1 - }, - "outputs": { - "toptr": [], - "tooffsets": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "toptr": [1, 2], - "fromoffsets": [0, 2], - "offsetslength": 2 - }, - "outputs": { - "toptr": [1, 2], - "tooffsets": [0, 2] - } - }, - { - "error": false, - "message": "", - "inputs": { - "toptr": [0, 1, 2, 3, 4, 5], - "fromoffsets": [0, 3, 5, 6], - "offsetslength": 4 - }, - "outputs": { - "toptr": [0, 1, 2, 3, 4, 5], - "tooffsets": [0, 3, 5, 6] - } - }, - { - "error": false, - "message": "", - "inputs": { - "toptr": [3, 2, 1, 0], - "fromoffsets": [0, 0, 3, 3], - "offsetslength": 4 - }, - "outputs": { - "toptr": [3, 3, 1, 0], - "tooffsets": [0, 1, 3, 4] - } - } - ] + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,1,2,2,3], + "starts": [0,1,3,4], + "startslength": 4, + "length": 5 + }, + "outputs": { + "tooffsets": [0,1,2,2,3] + } }, { - "name": "awkward_unique_ranges_bool", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "toptr": [], - "fromoffsets": [0], - "offsetslength": 1 - }, - "outputs": { - "toptr": [], - "tooffsets": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "toptr": [1, 1], - "fromoffsets": [0, 2], - "offsetslength": 2 - }, - "outputs": { - "toptr": [1, 1], - "tooffsets": [0, 1] - } - }, - { - "error": false, - "message": "", - "inputs": { - "toptr": [0, 1, 1, 1, 1, 1], - "fromoffsets": [0, 3, 5, 6], - "offsetslength": 4 - }, - "outputs": { - "toptr": [0, 1, 1, 1, 1, 1], - "tooffsets": [0, 2, 3, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "toptr": [1, 1, 1, 0], - "fromoffsets": [0, 0, 3, 3], - "offsetslength": 4 - }, - "outputs": { - "toptr": [1, 1, 0, 0], - "tooffsets": [0, 1, 2, 3] - } - } - ] + "error": false, + "message": "", + "inputs": { + "fromoffsets": [0,1,2,2,3], + "starts": [0,1,2,3], + "startslength": 4, + "length": 5 + }, + "outputs": { + "tooffsets": [0,1,2,2,3] + } + } + ] + }, + { + "name": "awkward_unique_ranges", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "toptr": [], + "fromoffsets": [0], + "offsetslength": 1 + }, + "outputs": { + "toptr": [], + "tooffsets": [0] + } }, { - "name": "awkward_sort", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "fromptr": [], - "offsets": [], - "offsetslength": 0, - "parentslength": 0, - "length": 1, - "ascending": true, - "stable": true - }, - "outputs": { - "toptr": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [8, 6, 7, 5, 3, 0, 9], - "offsets": [0, 3, 3, 7], - "offsetslength": 4, - "parentslength": 7, - "length": 7, - "ascending": true, - "stable": true - }, - "outputs": { - "toptr": [6, 7, 8, 0, 3, 5, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [8, 6, 7, 5, 3, 0, 9], - "offsets": [0, 3, 3, 7], - "offsetslength": 4, - "parentslength": 7, - "length": 7, - "ascending": false, - "stable": true - }, - "outputs": { - "toptr": [8, 7, 6, 9, 5, 3, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [8, 6, 7, 5, 3, 0, 9], - "offsets": [0, 3, 3, 7], - "offsetslength": 4, - "parentslength": 7, - "length": 7, - "ascending": true, - "stable": false - }, - "outputs": { - "toptr": [6, 7, 8, 0, 3, 5, 9] - } - }, - { - "error": false, - "message": "", - "inputs": { - "fromptr": [8, 6, 7, 5, 3, 0, 9], - "offsets": [0, 3, 3, 7], - "offsetslength": 4, - "parentslength": 7, - "length": 7, - "ascending": false, - "stable": false - }, - "outputs": { - "toptr": [8, 7, 6, 9, 5, 3, 0] - } - } - ] + "error": false, + "message": "", + "inputs": { + "toptr": [1,2], + "fromoffsets": [0,2], + "offsetslength": 2 + }, + "outputs": { + "toptr": [1,2], + "tooffsets": [0,2] + } }, { - "name": "awkward_RecordArray_reduce_nonlocal_outoffsets_64", - "status": true, - "tests": [ - { - "error": false, - "message": "", - "inputs": { - "outlength": 0, - "parents": [], - "lenparents": 0 - }, - "outputs": { - "outoffsets": [0], - "outcarry": [] - } - }, - { - "error": false, - "message": "", - "inputs": { - "outlength": 1, - "parents": [0, 0], - "lenparents": 2 - }, - "outputs": { - "outoffsets": [0, 2], - "outcarry": [0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "outlength": 2, - "parents": [1, 1], - "lenparents": 2 - }, - "outputs": { - "outoffsets": [0, 2, 2], - "outcarry": [1, 0] - } - }, - { - "error": false, - "message": "", - "inputs": { - "outlength": 6, - "parents": [0, 0, 0, 1, 1, 1, 2, 3, 5, 5, 5], - "lenparents": 11 - }, - "outputs": { - "outoffsets": [0, 3, 6, 7, 8, 11, 11], - "outcarry": [0, 1, 2, 3, 5, 4] - } - }, - { - "error": false, - "message": "", - "inputs": { - "outlength": 6, - "parents": [0, 0, 0, 1, 1, 1, 3, 3, 5, 5, 5], - "lenparents": 11 - }, - "outputs": { - "outoffsets": [0, 3, 6, 8, 11, 11, 11], - "outcarry": [0, 1, 4, 2, 5, 3] - } - }, - { - "error": false, - "message": "", - "inputs": { - "outlength": 6, - "parents": [0, 0, 3, 3, 1, 1, 4, 4, 2, 2, 5], - "lenparents": 11 - }, - "outputs": { - "outoffsets": [0, 2, 4, 6, 8, 10, 11], - "outcarry": [0, 2, 4, 1, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "outlength": 6, - "parents": [0, 0, 0, 3, 1, 1, 4, 4, 2, 2, 5], - "lenparents": 11 - }, - "outputs": { - "outoffsets": [0, 3, 4, 6, 8, 10, 11], - "outcarry": [0, 2, 4, 1, 3, 5] - } - }, - { - "error": false, - "message": "", - "inputs": { - "outlength": 5, - "parents": [0, 0, 1, 1, 1, 2, 3, 3, 4, 4], - "lenparents": 10 - }, - "outputs": { - "outoffsets": [0, 2, 5, 6, 8, 10], - "outcarry": [0, 1, 2, 3, 4] - } - } - ] + "error": false, + "message": "", + "inputs": { + "toptr": [0,1,2,3,4,5], + "fromoffsets": [0,3,5,6], + "offsetslength": 4 + }, + "outputs": { + "toptr": [0,1,2,3,4,5], + "tooffsets": [0,3,5,6] + } + }, + { + "error": false, + "message": "", + "inputs": { + "toptr": [3,2,1,0], + "fromoffsets": [0,0,3,3], + "offsetslength": 4 + }, + "outputs": { + "toptr": [3,3,1,0], + "tooffsets": [0,1,3,4] + } + } + ] + }, + { + "name": "awkward_unique_ranges_bool", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "toptr": [], + "fromoffsets": [0], + "offsetslength": 1 + }, + "outputs": { + "toptr": [], + "tooffsets": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "toptr": [1,1], + "fromoffsets": [0,2], + "offsetslength": 2 + }, + "outputs": { + "toptr": [1,1], + "tooffsets": [0,1] + } + }, + { + "error": false, + "message": "", + "inputs": { + "toptr": [0,1,1,1,1,1], + "fromoffsets": [0,3,5,6], + "offsetslength": 4 + }, + "outputs": { + "toptr": [0,1,1,1,1,1], + "tooffsets": [0,2,3,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "toptr": [1,1,1,0], + "fromoffsets": [0,0,3,3], + "offsetslength": 4 + }, + "outputs": { + "toptr": [1,1,0,0], + "tooffsets": [0,1,2,3] + } + } + ] + }, + { + "name": "awkward_sort", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "fromptr": [], + "offsets": [], + "offsetslength": 0, + "parentslength": 0, + "length": 1, + "ascending": true, + "stable": true + }, + "outputs": { + "toptr": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromptr": [8,6,7,5,3,0,9], + "offsets": [0,3,3,7], + "offsetslength": 4, + "parentslength": 7, + "length": 7, + "ascending": true, + "stable": true + }, + "outputs": { + "toptr": [6,7,8,0,3,5,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromptr": [8,6,7,5,3,0,9], + "offsets": [0,3,3,7], + "offsetslength": 4, + "parentslength": 7, + "length": 7, + "ascending": false, + "stable": true + }, + "outputs": { + "toptr": [8,7,6,9,5,3,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromptr": [8,6,7,5,3,0,9], + "offsets": [0,3,3,7], + "offsetslength": 4, + "parentslength": 7, + "length": 7, + "ascending": true, + "stable": false + }, + "outputs": { + "toptr": [6,7,8,0,3,5,9] + } + }, + { + "error": false, + "message": "", + "inputs": { + "fromptr": [8,6,7,5,3,0,9], + "offsets": [0,3,3,7], + "offsetslength": 4, + "parentslength": 7, + "length": 7, + "ascending": false, + "stable": false + }, + "outputs": { + "toptr": [8,7,6,9,5,3,0] + } + } + ] + }, + { + "name": "awkward_RecordArray_reduce_nonlocal_outoffsets_64", + "status": true, + "tests": [ + { + "error": false, + "message": "", + "inputs": { + "outlength": 0, + "parents": [], + "lenparents": 0 + }, + "outputs": { + "outoffsets": [0], + "outcarry": [] + } + }, + { + "error": false, + "message": "", + "inputs": { + "outlength": 1, + "parents": [0,0], + "lenparents": 2 + }, + "outputs": { + "outoffsets": [0,2], + "outcarry": [0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "outlength": 2, + "parents": [1,1], + "lenparents": 2 + }, + "outputs": { + "outoffsets": [0,2,2], + "outcarry": [1,0] + } + }, + { + "error": false, + "message": "", + "inputs": { + "outlength": 6, + "parents": [0,0,0,1,1,1,2,3,5,5,5], + "lenparents": 11 + }, + "outputs": { + "outoffsets": [0,3,6,7,8,11,11], + "outcarry": [0,1,2,3,5,4] + } + }, + { + "error": false, + "message": "", + "inputs": { + "outlength": 6, + "parents": [0,0,0,1,1,1,3,3,5,5,5], + "lenparents": 11 + }, + "outputs": { + "outoffsets": [0,3,6,8,11,11,11], + "outcarry": [0,1,4,2,5,3] + } + }, + { + "error": false, + "message": "", + "inputs": { + "outlength": 6, + "parents": [0,0,3,3,1,1,4,4,2,2,5], + "lenparents": 11 + }, + "outputs": { + "outoffsets": [0,2,4,6,8,10,11], + "outcarry": [0,2,4,1,3,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "outlength": 6, + "parents": [0,0,0,3,1,1,4,4,2,2,5], + "lenparents": 11 + }, + "outputs": { + "outoffsets": [0,3,4,6,8,10,11], + "outcarry": [0,2,4,1,3,5] + } + }, + { + "error": false, + "message": "", + "inputs": { + "outlength": 5, + "parents": [0,0,1,1,1,2,3,3,4,4], + "lenparents": 10 + }, + "outputs": { + "outoffsets": [0,2,5,6,8,10], + "outcarry": [0,1,2,3,4] + } } - ] + ] + } + ] } diff --git a/src/awkward/_backends/cupy.py b/src/awkward/_backends/cupy.py index b4a8efe718..75ecc16674 100644 --- a/src/awkward/_backends/cupy.py +++ b/src/awkward/_backends/cupy.py @@ -36,143 +36,99 @@ def __getitem__( kernel_name = index[0] if index else "" - # Try CuPy kernels first (primary implementation) cupy = cuda.import_cupy("Awkward Arrays with CUDA") _cuda_kernels = cuda.initialize_cuda_kernels(cupy) func = _cuda_kernels[index] if func is not None: - # CuPy kernel exists, use it return CupyKernel(func, index) - # CuPy kernel not found, try cuda.compute as fallback if self._supports_cuda_compute(kernel_name): if cuda_compute.is_available(): - # Return CudaComputeKernel for supported operations compute_impl = self._get_cuda_compute_impl(kernel_name) if compute_impl is not None: return CudaComputeKernel(compute_impl, index) else: - # cuda.compute is needed but not available raise NotImplementedError( - f"Operation '{kernel_name}' on CUDA backend requires cuda.compute library " - f"(no CuPy kernel available). " - f"Please install cuda.compute or use the CPU backend: " - f"ak.to_backend(array, 'cpu')" + f"Operation '{kernel_name}' requires cuda.compute but it is not available." ) - # Neither CuPy kernel nor cuda.compute implementation found raise AssertionError( - f"Operation '{kernel_name}' is not supported on CUDA backend. " - f"CuPy kernel not found: {index!r}" + f"Operation '{kernel_name}' is not supported on CUDA backend." ) + # --------------------------------------------------------- + # CUDA compute support table + # --------------------------------------------------------- def _supports_cuda_compute(self, kernel_name: str) -> bool: - """ - Check if the given kernel operation is supported by cuda.compute. - - All the reducers are handled separately in awkward/_connect/cuda/reducers.py - Other kernels that are currently supported: - - awkward_sort - - awkward_argsort (future) - - These kernels should be moved to awkward/_connect/cuda/reducers.py too in the next PR: - - awkward_sum - - awkward_sum_int32_bool_64 - - awkward_sum_int64_bool_64 - - awkward_sum_bool - - awkward_max - - awkward_min - - awkward_prod - - awkward_prod_bool - - awkward_count_64 - - awkward_countnonzero - - awkward_missing_repeat - - awkward_index_rpad_and_clip_axis0 - - awkward_reduce_sum_complex - - awkward_index_rpad_and_clip_axis1 - - awkward_reduce_max_complex - """ return kernel_name in ( - "awkward_sort", + # core reducers "awkward_reduce_sum", + "awkward_reduce_sum_bool", + "awkward_reduce_sum_bool_complex", + "awkward_reduce_sum_bool_complex64_64", # alias → _bool_complex + "awkward_reduce_sum_bool_complex128_64", # alias → _bool_complex "awkward_reduce_sum_int32_bool_64", "awkward_reduce_sum_int64_bool_64", - "awkward_reduce_sum_bool", "awkward_reduce_sum_complex", "awkward_reduce_max", "awkward_reduce_max_complex", "awkward_reduce_min", + "awkward_reduce_min_complex", "awkward_reduce_prod", "awkward_reduce_prod_bool", + "awkward_reduce_prod_complex", + "awkward_reduce_prod_bool_complex", + "awkward_reduce_argmax", + "awkward_reduce_argmax_complex", + "awkward_reduce_argmin", + "awkward_reduce_argmin_complex", "awkward_reduce_count_64", "awkward_reduce_countnonzero", + "awkward_reduce_countnonzero_complex", + # indexing / structure "awkward_missing_repeat", "awkward_index_rpad_and_clip_axis0", "awkward_index_rpad_and_clip_axis1", + # sort + "awkward_sort", ) + # --------------------------------------------------------- + # CUDA compute dispatch table + # --------------------------------------------------------- def _get_cuda_compute_impl(self, kernel_name: str): - """ - Get the cuda.compute implementation for a kernel operation. - - Args: - kernel_name: Name of the kernel operation (e.g., "awkward_sort") - - Returns: - Callable implementing the operation, or None if not supported - """ from awkward._connect.cuda import _compute as cuda_compute - if kernel_name == "awkward_sort": - return cuda_compute.segmented_sort - - if kernel_name == "awkward_reduce_sum": - return cuda_compute.awkward_reduce_sum - - if kernel_name in { - "awkward_reduce_sum_int32_bool_64", - "awkward_reduce_sum_int64_bool_64", - }: - return cuda_compute.awkward_reduce_sum_int32_bool_64 - - if kernel_name == "awkward_reduce_sum_bool": - return cuda_compute.awkward_reduce_sum_bool - - if kernel_name == "awkward_reduce_sum_complex": - return cuda_compute.awkward_reduce_sum_complex - - if kernel_name == "awkward_reduce_max": - return cuda_compute.awkward_reduce_max - - if kernel_name == "awkward_reduce_max_complex": - return cuda_compute.awkward_reduce_max_complex - - if kernel_name == "awkward_reduce_min": - return cuda_compute.awkward_reduce_min - - if kernel_name == "awkward_reduce_prod": - return cuda_compute.awkward_reduce_prod - - if kernel_name == "awkward_reduce_prod_bool": - return cuda_compute.awkward_reduce_prod_bool - - if kernel_name == "awkward_reduce_count_64": - return cuda_compute.awkward_reduce_count_64 - - if kernel_name == "awkward_reduce_countnonzero": - return cuda_compute.awkward_reduce_countnonzero - - if kernel_name == "awkward_missing_repeat": - return cuda_compute.awkward_missing_repeat - - if kernel_name == "awkward_index_rpad_and_clip_axis0": - return cuda_compute.awkward_index_rpad_and_clip_axis0 - - if kernel_name == "awkward_index_rpad_and_clip_axis1": - return cuda_compute.awkward_index_rpad_and_clip_axis1 - - return None + return { + "awkward_sort": cuda_compute.segmented_sort, + "awkward_reduce_sum": cuda_compute.awkward_reduce_sum, + "awkward_reduce_sum_bool": cuda_compute.awkward_reduce_sum_bool, + "awkward_reduce_sum_int32_bool_64": cuda_compute.awkward_reduce_sum_int32_bool_64, + "awkward_reduce_sum_int64_bool_64": cuda_compute.awkward_reduce_sum_int64_bool_64, + "awkward_reduce_sum_complex": cuda_compute.awkward_reduce_sum_complex, + "awkward_reduce_sum_bool_complex": cuda_compute.awkward_reduce_sum_bool_complex, + "awkward_reduce_sum_bool_complex64_64": cuda_compute.awkward_reduce_sum_bool_complex, + "awkward_reduce_sum_bool_complex128_64": cuda_compute.awkward_reduce_sum_bool_complex, + "awkward_reduce_max": cuda_compute.awkward_reduce_max, + "awkward_reduce_max_complex": cuda_compute.awkward_reduce_max_complex, + "awkward_reduce_min": cuda_compute.awkward_reduce_min, + "awkward_reduce_min_complex": cuda_compute.awkward_reduce_min_complex, + "awkward_reduce_prod": cuda_compute.awkward_reduce_prod, + "awkward_reduce_prod_bool": cuda_compute.awkward_reduce_prod_bool, + "awkward_reduce_prod_complex": cuda_compute.awkward_reduce_prod_complex, + "awkward_reduce_prod_bool_complex": cuda_compute.awkward_reduce_prod_bool_complex, + "awkward_reduce_argmax": cuda_compute.awkward_reduce_argmax, + "awkward_reduce_argmax_complex": cuda_compute.awkward_reduce_argmax_complex, + "awkward_reduce_argmin": cuda_compute.awkward_reduce_argmin, + "awkward_reduce_argmin_complex": cuda_compute.awkward_reduce_argmin_complex, + "awkward_reduce_count_64": cuda_compute.awkward_reduce_count_64, + "awkward_reduce_countnonzero": cuda_compute.awkward_reduce_countnonzero, + "awkward_reduce_countnonzero_complex": cuda_compute.awkward_reduce_countnonzero_complex, + "awkward_missing_repeat": cuda_compute.awkward_missing_repeat, + "awkward_index_rpad_and_clip_axis0": cuda_compute.awkward_index_rpad_and_clip_axis0, + "awkward_index_rpad_and_clip_axis1": cuda_compute.awkward_index_rpad_and_clip_axis1, + }.get(kernel_name) def prepare_reducer(self, reducer: ak._reducers.Reducer) -> ak._reducers.Reducer: from awkward._connect.cuda import get_cuda_compute_reducer diff --git a/src/awkward/_connect/cuda/_compute.py b/src/awkward/_connect/cuda/_compute.py index 3b5fed2c0e..fcdc6459f9 100644 --- a/src/awkward/_connect/cuda/_compute.py +++ b/src/awkward/_connect/cuda/_compute.py @@ -4,9 +4,11 @@ from cuda.compute import ( CountingIterator, - reduce_into, + OpKind, + segmented_reduce, unary_transform, ) +from numba import cuda from awkward._nplikes.cupy import Cupy from awkward._nplikes.numpy import Numpy @@ -37,6 +39,29 @@ def is_available() -> bool: return _cuda_compute_available +def make_segment_views(offsets): + """ + Returns (starts, stops) views for segmented operations. + """ + return offsets[:-1], offsets[1:] + + +def normalize_index_dtype(dtype): + dt = cp.dtype(dtype) + if dt.kind in ("u", "i"): + return cp.int64 + return dt + + +def infer_complex_dtype(dtype): + dt = cp.dtype(dtype) + if dt == cp.float32: + return cp.complex64 + if dt == cp.float64: + return cp.complex128 + raise TypeError(f"Expected float32/float64 interleaved complex buffer, got {dt}") + + def segmented_sort( toptr, fromptr, @@ -59,8 +84,7 @@ def segmented_sort( num_segments = offsetslength - 1 num_items = int(offsets[-1]) if len(offsets) > 0 else 0 - start_offsets = offsets[:-1] - end_offsets = offsets[1:] + start_o, end_o = make_segment_views(offsets) order = SortOrder.ASCENDING if ascending else SortOrder.DESCENDING @@ -71,643 +95,679 @@ def segmented_sort( d_out_values=None, num_items=num_items, num_segments=num_segments, - start_offsets_in=start_offsets, - end_offsets_in=end_offsets, + start_offsets_in=start_o, + end_offsets_in=end_o, order=order, stream=None, ) -def parents_to_offsets(parents, parents_length): - if parents_length == 0: - return cp.array([0], dtype=parents.dtype) - - # count how many elements belong to each parent - counts = cp.bincount(parents) +def awkward_reduce_argmax( + result, + input_data, + offsets_data, + starts, + outlength, +): + index_dtype = normalize_index_dtype(offsets_data.dtype) - # add a start offset - offsets = cp.concatenate([cp.array([0], dtype=counts.dtype), counts.cumsum()]) + start_o, end_o = make_segment_views(offsets_data) - return offsets + def segment_reduce_argmax(segment_id): + start_idx = start_o[segment_id] + end_idx = end_o[segment_id] + segment = input_data[start_idx:end_idx] + if start_idx == end_idx: + return -1 + # return a global index + return np.argmax(segment) + start_idx + segment_ids = CountingIterator(index_dtype(0)) -def local_idx_from_parents(parents, parents_length): - if parents_length == 0: - return cp.empty(0, dtype=parents.dtype) + # TODO: replace with segmented_reduce once available/fixed in CCCL + unary_transform( + d_in=segment_ids, + d_out=result, + op=segment_reduce_argmax, + num_items=outlength, + ) - # mark the beginning of each subarray - new_group = cp.empty(parents_length, dtype=cp.bool_) - new_group[0] = True - new_group[1:] = parents[1:] != parents[:-1] - # find the start index of each subarray - group_starts = cp.nonzero(new_group)[0] # shape = (num_groups,) +@cuda.jit(device=True) +def lexargmax_complex(values, start_idx, end_idx): + if start_idx == end_idx: + return np.int64(-1) - # Assign subarray id (1..#subarray) to each element - group_id = cp.cumsum(new_group) + best_idx = start_idx + best = values[start_idx] - # For each element, the start index of its group - start_pos = group_starts[group_id - 1] + i = start_idx + 1 + while i < end_idx: + value = values[i] + if value.real > best.real or ( + value.real == best.real and value.imag > best.imag + ): + best = value + best_idx = i + i += 1 - # local_index = global_index - start_pos - return cp.arange(parents_length) - start_pos + return best_idx -def starts_to_offsets(starts, parents_length): - offsets_dtype = starts.dtype +def awkward_reduce_argmax_complex( + result, + input_data, + offsets_data, + outlength, +): + complex_dtype = infer_complex_dtype(input_data.dtype) + input_complex = input_data.view(complex_dtype) - if parents_length == 0: - return cp.array([0], dtype=offsets_dtype) + index_dtype = normalize_index_dtype(offsets_data.dtype) + start_o, end_o = make_segment_views(offsets_data) - offsets = cp.empty(len(starts) + 1, dtype=offsets_dtype) - offsets[:-1] = starts - offsets[-1] = parents_length - return offsets + def segment_reduce_argmax(segment_id): + return lexargmax_complex( + input_complex, + start_o[segment_id], + end_o[segment_id], + ) + segment_ids = CountingIterator(index_dtype(0)) -def rearrange_by_parents(input_data, parents): - order = cp.argsort(parents, kind="stable") - return input_data[order] + unary_transform( + d_in=segment_ids, + d_out=result, + op=segment_reduce_argmax, + num_items=outlength, + ) -# the inputs for this function we get from file ~/awkward/src/awkward/_reducers.py:239, in ArgMax.apply(self, array, parents, starts, shifts, outlength) -def awkward_reduce_argmax( +def awkward_reduce_argmin( result, input_data, - parents_data, offsets_data, - parents_length, starts, outlength, ): - index_dtype = parents_data.dtype + index_dtype = normalize_index_dtype(offsets_data.dtype) + start_o, end_o = make_segment_views(offsets_data) - def segment_reduce_argmax(segment_id): + def segment_reduce_argmin(segment_id): start_idx = start_o[segment_id] end_idx = end_o[segment_id] segment = input_data[start_idx:end_idx] - if len(segment) == 0: + if start_idx == end_idx: return -1 # return a global index - return np.argmax(segment) + start_idx + return np.argmin(segment) + start_idx - # Prepare the start and end offsets - offsets = starts_to_offsets(starts, parents_length) - start_o = offsets[:-1] - end_o = offsets[1:] + segment_ids = CountingIterator(index_dtype(0)) - # Perform the segmented reduce - # type_wrapper is always cp.int64 - type_wrapper = cp.dtype(index_dtype).type - segment_ids = CountingIterator(type_wrapper(0)) - # TODO: try using segmented_reduce instead when https://github.com/NVIDIA/cccl/issues/6171 is fixed + # TODO: replace with segmented_reduce once available/fixed in CCCL unary_transform( - d_in=segment_ids, d_out=result, op=segment_reduce_argmax, num_items=outlength + d_in=segment_ids, + d_out=result, + op=segment_reduce_argmin, + num_items=outlength, ) -# this function is called from ~/awkward/src/awkward/_reducers.py:161 (ArgMin.apply()) -def awkward_reduce_argmin( +@cuda.jit(device=True) +def lexargmin_complex(values, start_idx, end_idx): + if start_idx == end_idx: + return np.int64(-1) + + best_idx = start_idx + best = values[start_idx] + + i = start_idx + 1 + while i < end_idx: + value = values[i] + + if value.real < best.real or ( + value.real == best.real and value.imag < best.imag + ): + best = value + best_idx = i + i += 1 + + return best_idx + + +def awkward_reduce_argmin_complex( result, input_data, - parents_data, offsets_data, - parents_length, - starts, outlength, ): - index_dtype = parents_data.dtype + index_dtype = normalize_index_dtype(offsets_data.dtype) + + complex_dtype = infer_complex_dtype(input_data.dtype) + input_complex = input_data.view(complex_dtype) + + start_o, end_o = make_segment_views(offsets_data) def segment_reduce_argmin(segment_id): - start_idx = start_o[segment_id] - end_idx = end_o[segment_id] - segment = input_data[start_idx:end_idx] - if len(segment) == 0: - return -1 - # return a global index - return np.argmin(segment) + start_idx + return lexargmin_complex( + input_complex, + start_o[segment_id], + end_o[segment_id], + ) - # Prepare the start and end offsets - offsets = starts_to_offsets(starts, parents_length) - start_o = offsets[:-1] - end_o = offsets[1:] + segment_ids = CountingIterator(index_dtype(0)) - # Perform the segmented reduce - # type_wrapper is always cp.int64 - type_wrapper = cp.dtype(index_dtype).type - segment_ids = CountingIterator(type_wrapper(0)) - # TODO: try using segmented_reduce instead when https://github.com/NVIDIA/cccl/issues/6171 is fixed unary_transform( - d_in=segment_ids, d_out=result, op=segment_reduce_argmin, num_items=outlength + d_in=segment_ids, + d_out=result, + op=segment_reduce_argmin, + num_items=outlength, ) -def awkward_axis_none_reduce_max(array): - data_dtype = array.dtype - index_dtype = np.int64 - # initialize the minimum value depending on the dtype - if data_dtype.kind in "iu": # int/uint - min = cp.iinfo(data_dtype).min - elif data_dtype.kind == "f": # float - min = cp.finfo(data_dtype).min - else: - raise TypeError("Unsupported dtype to get the minimal value") - - def reduce_op(a, b): - return max(a, b) - - result_scalar = cp.empty(1, dtype=index_dtype) - h_init = np.array([min], dtype=index_dtype) - reduce_into( - d_in=array, - d_out=result_scalar, - op=reduce_op, - num_items=len(array), +def awkward_reduce_sum( + result, + input_data, + offsets_data, + outlength, +): + d_input = input_data.astype(result.dtype, copy=False) + start_o, end_o = make_segment_views(offsets_data) + + h_init = np.asarray(0, dtype=result.dtype) + + segmented_reduce( + d_in=d_input, + d_out=result, + num_segments=outlength, + start_offsets_in=start_o, + end_offsets_in=end_o, + op=OpKind.PLUS, h_init=h_init, ) - return result_scalar +def awkward_reduce_sum_bool( + result, + input_data, + offsets_data, + outlength, +): + # ak.any semantics: result is True for a bin iff any element is non-zero. + # If we feed wider-than-bool input straight into a MAX reduction and then + # truncate to int8 on store, an input like [256, 512, ...] reduces to MAX + # = 512 which truncates to 0 → spurious False. Map to {0, 1} first, then + # MAX = OR. Symmetric to awkward_reduce_prod_bool (MIN = AND). + if input_data.dtype == cp.bool_: + mapped = input_data.view(cp.int8) + else: + mapped = cp.empty(input_data.shape, dtype=cp.int8) + + def is_nonzero(x): + return cp.int8(1) if x != 0 else cp.int8(0) + + unary_transform( + d_in=input_data, + d_out=mapped, + op=is_nonzero, + num_items=input_data.size, + ) + + d_out = result.view(cp.int8) if result.dtype == cp.bool_ else result + start_o, end_o = make_segment_views(offsets_data) + h_init = np.asarray(0, dtype=cp.int8) # identity for MAX over {0, 1} + + segmented_reduce( + d_in=mapped, + d_out=d_out, + num_segments=outlength, + start_offsets_in=start_o, + end_offsets_in=end_o, + op=OpKind.MAXIMUM, + h_init=h_init, + ) -def awkward_reduce_sum( + +def awkward_reduce_sum_bool_complex( result, input_data, - parents_data, offsets_data, - parents_length, outlength, ): - index_dtype = parents_data.dtype + complex_dtype = infer_complex_dtype(input_data.dtype) + input_complex = input_data.view(complex_dtype) + + d_out = result.view(cp.int8) if result.dtype == cp.bool_ else result + + mapped_data = cp.empty(input_complex.shape, dtype=cp.int8) + + def is_nonzero_complex(c): + # A complex number is non-zero if either real or imag is non-zero + if c.real != 0 or c.imag != 0: + return 1 + return 0 - def segment_reduce_sum(segment_id): - start_idx = start_o[segment_id] - end_idx = end_o[segment_id] - segment = input_data[start_idx:end_idx] - if len(segment) == 0: - return 0 - return np.sum(segment) - - # sort input in case a user wants to call `CudaComputeKernel awkward_reduce_max` directly and specify unordered parents - input_data = rearrange_by_parents(input_data, parents_data) - - # Prepare the start and end offsets - # TODO: This should at least be starts_to_offsets - offsets = parents_to_offsets(parents_data, parents_length) - start_o = offsets[:-1] - end_o = offsets[1:] - - # Perform the segmented reduce - # type_wrapper: cp.int64 - type_wrapper = cp.dtype(index_dtype).type - segment_ids = CountingIterator(type_wrapper(0)) - # TODO: try using segmented_reduce instead when https://github.com/NVIDIA/cccl/issues/6171 is fixed unary_transform( - d_in=segment_ids, d_out=result, op=segment_reduce_sum, num_items=outlength + d_in=input_complex, + d_out=mapped_data, + op=is_nonzero_complex, + num_items=input_complex.size, ) + start_o, end_o = make_segment_views(offsets_data) + h_init = np.asarray(0, dtype=cp.int8) # Identity for OR is False -def awkward_reduce_sum_complex( + segmented_reduce( + d_in=mapped_data, + d_out=d_out, + num_segments=outlength, + start_offsets_in=start_o, + end_offsets_in=end_o, + op=OpKind.MAXIMUM, + h_init=h_init, + ) + + +def awkward_reduce_sum_int32_bool_64( result, input_data, - parents_data, offsets_data, - parents_length, outlength, ): - # Complex values arrive as a flat float32/float64 array of length 2*N - # (real/imag interleaved). Caller in _reducers.py views complex128 -> float64 - # (or complex64 -> float32) and doubles the length. We re-view those buffers - # back to the matching complex dtype so we can reuse the same segmented-sum - # pattern as `awkward_reduce_sum`. - if input_data.dtype == cp.float32: - complex_dtype = cp.complex64 - else: - complex_dtype = cp.complex128 + d_input = input_data.astype(result.dtype, copy=False) + start_o, end_o = make_segment_views(offsets_data) + h_init = np.asarray(0, dtype=result.dtype) + + segmented_reduce( + d_in=d_input, + d_out=result, + num_segments=outlength, + start_offsets_in=start_o, + end_offsets_in=end_o, + op=OpKind.PLUS, + h_init=h_init, + ) + + +def awkward_reduce_sum_int64_bool_64( + result, + input_data, + offsets_data, + outlength, +): + d_input = input_data.astype(result.dtype, copy=False) + start_o, end_o = make_segment_views(offsets_data) + h_init = np.asarray(0, dtype=result.dtype) + + segmented_reduce( + d_in=d_input, + d_out=result, + num_segments=outlength, + start_offsets_in=start_o, + end_offsets_in=end_o, + op=OpKind.PLUS, + h_init=h_init, + ) + +def awkward_reduce_sum_complex( + result, + input_data, + offsets_data, + outlength, +): + complex_dtype = infer_complex_dtype(input_data.dtype) input_complex = input_data.view(complex_dtype) result_complex = result.view(complex_dtype) - index_dtype = parents_data.dtype + start_o, end_o = make_segment_views(offsets_data) - def segment_reduce_sum(segment_id): - start_idx = start_o[segment_id] - end_idx = end_o[segment_id] - segment = input_complex[start_idx:end_idx] - if len(segment) == 0: - return complex_dtype(0) - return np.sum(segment) - - # sort input in case a user wants to call `CudaComputeKernel awkward_reduce_sum_complex` - # directly and specify unordered parents - input_complex = rearrange_by_parents(input_complex, parents_data) - - # Prepare the start and end offsets - # TODO: This should at least be starts_to_offsets - offsets = parents_to_offsets(parents_data, parents_length) - start_o = offsets[:-1] - end_o = offsets[1:] - - # Perform the segmented reduce - # type_wrapper: cp.int64 - type_wrapper = cp.dtype(index_dtype).type - segment_ids = CountingIterator(type_wrapper(0)) - # TODO: try using segmented_reduce instead when https://github.com/NVIDIA/cccl/issues/6171 is fixed - unary_transform( - d_in=segment_ids, + h_init = np.asarray(0, dtype=complex_dtype) + + def sum_op(a, b): + return a + b + + segmented_reduce( + d_in=input_complex, d_out=result_complex, - op=segment_reduce_sum, - num_items=outlength, + num_segments=outlength, + start_offsets_in=start_o, + end_offsets_in=end_o, + op=sum_op, + h_init=h_init, ) -# original implementation - currently bools don't work because of a bug on numba side -def awkward_reduce_sum_bool( +# `awkward_reduce_sum_bool_complex` (above) handles both float32- and +# float64-interleaved inputs via `infer_complex_dtype`. The previous +# `awkward_reduce_sum_bool_complex64_64` / `_complex128_64` specialisations +# were verbatim duplicates with a hardcoded complex dtype — dispatch now +# routes both names to the generic implementation in _backends/cupy.py. + + +def awkward_reduce_prod( result, input_data, - parents_data, offsets_data, - parents_length, outlength, ): - # temporary workaround - fix this (currently bools don't work because of a bug on numba side) - if input_data.dtype == cp.bool_: - input_data = input_data.view(cp.int8) # cast bool -> int8 + d_input = input_data.astype(result.dtype, copy=False) - index_dtype = parents_data.dtype + start_o, end_o = make_segment_views(offsets_data) + h_init = np.asarray(1, dtype=result.dtype) - def segment_reduce_sum(segment_id): - start_idx = start_o[segment_id] - end_idx = end_o[segment_id] - segment = input_data[start_idx:end_idx] - return np.any(segment) - - # sort input in case a user wants to call `CudaComputeKernel awkward_reduce_max` directly and specify unordered parents - input_data = rearrange_by_parents(input_data, parents_data) - - # Prepare the start and end offsets - # TODO: This should at least be starts_to_offsets - offsets = parents_to_offsets(parents_data, parents_length) - start_o = offsets[:-1] - end_o = offsets[1:] - - # Perform the segmented reduce - # type_wrapper: cp.int64 - type_wrapper = cp.dtype(index_dtype).type - segment_ids = CountingIterator(type_wrapper(0)) - # TODO: try using segmented_reduce instead when https://github.com/NVIDIA/cccl/issues/6171 is fixed - unary_transform( - d_in=segment_ids, d_out=result, op=segment_reduce_sum, num_items=outlength + def prod_op(a, b): + return a * b + + segmented_reduce( + d_in=d_input, + d_out=result, + num_segments=outlength, + start_offsets_in=start_o, + end_offsets_in=end_o, + op=prod_op, + h_init=h_init, ) -# this is the same as awkward_reduce_sum (we can possibly use it after the bug on numba side is fixed) -def awkward_reduce_sum_int32_bool_64( +def awkward_reduce_prod_complex( result, input_data, - parents_data, offsets_data, - parents_length, outlength, ): - # temporary workaround - fix this (currently bools don't work because of a bug on numba side) - if input_data.dtype == cp.bool_: - input_data = input_data.view(cp.int8) # cast bool -> int8 + complex_dtype = infer_complex_dtype(input_data.dtype) - index_dtype = parents_data.dtype + input_complex = input_data.view(complex_dtype) + result_complex = result.view(complex_dtype) + start_o, end_o = make_segment_views(offsets_data) - def segment_reduce_sum(segment_id): - start_idx = start_o[segment_id] - end_idx = end_o[segment_id] - segment = input_data[start_idx:end_idx] - if len(segment) == 0: - return 0 - return np.sum(segment) - - # sort input in case a user wants to call `CudaComputeKernel awkward_reduce_max` directly and specify unordered parents - input_data = rearrange_by_parents(input_data, parents_data) - - # Prepare the start and end offsets - # TODO: This should at least be starts_to_offsets - offsets = parents_to_offsets(parents_data, parents_length) - start_o = offsets[:-1] - end_o = offsets[1:] - - # Perform the segmented reduce - # type_wrapper: cp.int64 - type_wrapper = cp.dtype(index_dtype).type - segment_ids = CountingIterator(type_wrapper(0)) - # TODO: try using segmented_reduce instead when https://github.com/NVIDIA/cccl/issues/6171 is fixed - unary_transform( - d_in=segment_ids, d_out=result, op=segment_reduce_sum, num_items=outlength + h_init = np.asarray(1.0 + 0.0j, dtype=complex_dtype) + + def prod_op(a, b): + return a * b + + segmented_reduce( + d_in=input_complex, + d_out=result_complex, + num_segments=outlength, + start_offsets_in=start_o, + end_offsets_in=end_o, + op=prod_op, + h_init=h_init, ) -def awkward_reduce_prod( +def awkward_reduce_prod_bool( result, input_data, - parents_data, offsets_data, - parents_length, outlength, ): - index_dtype = parents_data.dtype + # ak.all semantics: result is True for a bin iff every element is non-zero. + # We must NOT use integer multiplication here — for an int64 input array, + # the running product overflows mod 2^64 and frequently collapses to 0 + # even when every element is non-zero, giving a spurious False. + # Instead, map each element to {0, 1} once and reduce with MIN (= AND). + # This mirrors awkward_reduce_sum_bool's MAX-over-{0,1} for ak.any. + mapped = cp.empty(input_data.shape, dtype=cp.int8) + + def is_nonzero(x): + return cp.int8(1) if x != 0 else cp.int8(0) - def segment_reduce_prod(segment_id): - start_idx = start_o[segment_id] - end_idx = end_o[segment_id] - segment = input_data[start_idx:end_idx] - if len(segment) == 0: - # that's what a cpu kernel passes for empty arrays (awkward-cpp/src/cpu-kernels/awkward_reduce_prod.cpp#L15) - return 1 - return np.prod(segment) - - # sort input in case a user wants to call `CudaComputeKernel awkward_reduce_max` directly and specify unordered parents - input_data = rearrange_by_parents(input_data, parents_data) - - # Prepare the start and end offsets - # TODO: This should at least be starts_to_offsets - offsets = parents_to_offsets(parents_data, parents_length) - start_o = offsets[:-1] - end_o = offsets[1:] - - # Perform the segmented reduce - # type_wrapper: cp.int64 - type_wrapper = cp.dtype(index_dtype).type - segment_ids = CountingIterator(type_wrapper(0)) - # TODO: try using segmented_reduce instead when https://github.com/NVIDIA/cccl/issues/6171 is fixed unary_transform( - d_in=segment_ids, d_out=result, op=segment_reduce_prod, num_items=outlength + d_in=input_data, + d_out=mapped, + op=is_nonzero, + num_items=input_data.size, ) + d_out = result.view(cp.int8) if result.dtype == cp.bool_ else result + start_o, end_o = make_segment_views(offsets_data) + h_init = np.asarray(1, dtype=cp.int8) # identity for MIN over {0, 1} + + segmented_reduce( + d_in=mapped, + d_out=d_out, + num_segments=outlength, + start_offsets_in=start_o, + end_offsets_in=end_o, + op=OpKind.MINIMUM, + h_init=h_init, + ) -def awkward_reduce_prod_bool( + +def awkward_reduce_prod_bool_complex( result, input_data, - parents_data, offsets_data, - parents_length, outlength, ): - # temporary workaround - fix this (currently bools don't work because of a bug on numba side) - if input_data.dtype == cp.bool_: - input_data = input_data.view(cp.int8) # cast bool -> int8 + complex_dtype = infer_complex_dtype(input_data.dtype) + input_complex = input_data.view(complex_dtype) - index_dtype = parents_data.dtype + mapped_input = cp.empty(input_complex.shape, dtype=cp.int8) + + def is_nonzero(c): + return cp.int8(c.real != 0 or c.imag != 0) - def segment_reduce_prod(segment_id): - start_idx = start_o[segment_id] - end_idx = end_o[segment_id] - segment = input_data[start_idx:end_idx] - return np.all(segment) - - # sort input in case a user wants to call `CudaComputeKernel awkward_reduce_max` directly and specify unordered parents - input_data = rearrange_by_parents(input_data, parents_data) - - # Prepare the start and end offsets - # TODO: This should at least be starts_to_offsets - offsets = parents_to_offsets(parents_data, parents_length) - start_o = offsets[:-1] - end_o = offsets[1:] - - # Perform the segmented reduce - # type_wrapper: cp.int64 - type_wrapper = cp.dtype(index_dtype).type - segment_ids = CountingIterator(type_wrapper(0)) - # TODO: try using segmented_reduce instead when https://github.com/NVIDIA/cccl/issues/6171 is fixed unary_transform( - d_in=segment_ids, d_out=result, op=segment_reduce_prod, num_items=outlength + d_in=input_complex, + d_out=mapped_input, + op=is_nonzero, + num_items=input_complex.size, + ) + + start_o, end_o = make_segment_views(offsets_data) + d_result = result.view(cp.int8) + + h_init = np.asarray(1, dtype=cp.int8) + + def prod_op(a, b): + return a * b + + segmented_reduce( + d_in=mapped_input, + d_out=d_result, + num_segments=outlength, + start_offsets_in=start_o, + end_offsets_in=end_o, + op=prod_op, + h_init=h_init, ) def awkward_reduce_max( result, input_data, - parents_data, offsets_data, - parents_length, outlength, - # the initial value for the reduction identity, ): - index_dtype = parents_data.dtype + start_o, end_o = make_segment_views(offsets_data) - def segment_reduce_max(segment_id): - start_idx = start_o[segment_id] - end_idx = end_o[segment_id] - segment = input_data[start_idx:end_idx] - if len(segment) == 0: - return identity - max_value = max(segment) - # return identity if it is > than max_value from input_data - return max(max_value, identity) - - # sort input in case a user wants to call `CudaComputeKernel awkward_reduce_max` directly and specify unordered parents - # TODO: delete this? (it is only used in tests-cuda-kernels-explicit) - input_data = rearrange_by_parents(input_data, parents_data) - - # Prepare the start and end offsets - # TODO: This should at least be starts_to_offsets - offsets = parents_to_offsets(parents_data, parents_length) - start_o = offsets[:-1] - end_o = offsets[1:] - - # Perform the segmented reduce - # type_wrapper: cp.int64 - type_wrapper = cp.dtype(index_dtype).type - segment_ids = CountingIterator(type_wrapper(0)) - # TODO: try using segmented_reduce instead when https://github.com/NVIDIA/cccl/issues/6171 is fixed - unary_transform( - d_in=segment_ids, d_out=result, op=segment_reduce_max, num_items=outlength + h_init = np.asarray(identity, dtype=input_data.dtype) + + # def max_op(a, b): + # return a if a > b else b + + segmented_reduce( + d_in=input_data, + d_out=result, + num_segments=outlength, + start_offsets_in=start_o, + end_offsets_in=end_o, + op=OpKind.MAXIMUM, + h_init=h_init, ) def awkward_reduce_max_complex( result, input_data, - parents_data, offsets_data, - parents_length, outlength, - # the initial value for the reduction (real component; imag identity is 0) identity, ): - # Complex values arrive as a flat float32/float64 array of length 2*N - # (real/imag interleaved). Caller in _reducers.py views complex128 -> float64 - # (or complex64 -> float32) and doubles the length. We re-view those buffers - # back to the matching complex dtype so the segment reducer can read the - # real/imag components via .real / .imag attribute access, avoiding the - # gpu_struct pattern that failed in earlier attempts. - if input_data.dtype == cp.float32: - complex_dtype = cp.complex64 - else: - complex_dtype = cp.complex128 - + complex_dtype = infer_complex_dtype(input_data.dtype) input_complex = input_data.view(complex_dtype) result_complex = result.view(complex_dtype) - index_dtype = parents_data.dtype + start_o, end_o = make_segment_views(offsets_data) - def segment_reduce_max(segment_id): - start_idx = start_o[segment_id] - end_idx = end_o[segment_id] - # Start with (identity, 0) per the CPU kernel; empty segments keep this. - max_real = identity - max_imag = 0.0 - for i in range(start_idx, end_idx): - c = input_complex[i] - x = c.real - y = c.imag - # Lex compare on (real, imag) - if x > max_real or (x == max_real and y > max_imag): - max_real = x - max_imag = y - return complex(max_real, max_imag) - - # sort input in case a user wants to call `CudaComputeKernel awkward_reduce_max_complex` - # directly and specify unordered parents - input_complex = rearrange_by_parents(input_complex, parents_data) - - # Prepare the start and end offsets - # TODO: This should at least be starts_to_offsets - offsets = parents_to_offsets(parents_data, parents_length) - start_o = offsets[:-1] - end_o = offsets[1:] - - # Perform the segmented reduce - # type_wrapper: cp.int64 - type_wrapper = cp.dtype(index_dtype).type - segment_ids = CountingIterator(type_wrapper(0)) - # TODO: try using segmented_reduce instead when https://github.com/NVIDIA/cccl/issues/6171 is fixed - unary_transform( - d_in=segment_ids, + h_init = np.asarray(identity + 0.0j, dtype=complex_dtype) + + def lex_max_op(a, b): + if a.real > b.real: + return a + if a.real == b.real and a.imag > b.imag: + return a + return b + + segmented_reduce( + d_in=input_complex, d_out=result_complex, - op=segment_reduce_max, - num_items=outlength, + num_segments=outlength, + start_offsets_in=start_o, + end_offsets_in=end_o, + op=lex_max_op, + h_init=h_init, ) def awkward_reduce_min( result, input_data, - parents_data, offsets_data, - parents_length, outlength, - # the initial value for the reduction identity, ): - index_dtype = parents_data.dtype + start_o, end_o = make_segment_views(offsets_data) - def segment_reduce_min(segment_id): - start_idx = start_o[segment_id] - end_idx = end_o[segment_id] - segment = input_data[start_idx:end_idx] - if len(segment) == 0: - return identity - min_value = min(segment) - # return identity if it is < than min_value from input_data - return min(min_value, identity) - - # sort input in case a user wants to call `CudaComputeKernel awkward_reduce_min` directly and specify unordered parents - # TODO: delete this? (it is only used in tests-cuda-kernels-explicit) - input_data = rearrange_by_parents(input_data, parents_data) - - # Prepare the start and end offsets - # TODO: This should at least be starts_to_offsets - offsets = parents_to_offsets(parents_data, parents_length) - start_o = offsets[:-1] - end_o = offsets[1:] - - # Perform the segmented reduce - # type_wrapper: cp.int64 - type_wrapper = cp.dtype(index_dtype).type - segment_ids = CountingIterator(type_wrapper(0)) - # TODO: try using segmented_reduce instead when https://github.com/NVIDIA/cccl/issues/6171 is fixed - unary_transform( - d_in=segment_ids, d_out=result, op=segment_reduce_min, num_items=outlength + h_init = np.asarray(identity, dtype=input_data.dtype) + + segmented_reduce( + d_in=input_data, + d_out=result, + num_segments=outlength, + start_offsets_in=start_o, + end_offsets_in=end_o, + op=OpKind.MINIMUM, + h_init=h_init, ) -def awkward_reduce_count_64( +def awkward_reduce_min_complex( result, - parents_data, - parents_length, + input_data, + offsets_data, outlength, + identity, ): - index_dtype = parents_data.dtype + complex_dtype = infer_complex_dtype(input_data.dtype) + input_complex = input_data.view(complex_dtype) + result_complex = result.view(complex_dtype) - def segment_reduce_count(segment_id): - if segment_id > offsets_len: - # (when we will pass offsets directly, this won't be needed) - return 0 - start_idx = start_o[segment_id] - end_idx = end_o[segment_id] - if end_idx < start_idx: - # if there are empty arrays at the end (when we will pass offsets directly, this won't be needed) - return 0 - return end_idx - start_idx - - # initialize all results values to be 0 by default - result[:] = 0 - - # Prepare the start and end offsets - # TODO: This should at least be starts_to_offsets - offsets = parents_to_offsets(parents_data, parents_length) - start_o = offsets[:-1] - end_o = offsets[1:] - offsets_len = len(offsets) - 2 - - # Perform the segmented reduce - # type_wrapper: cp.int64 - type_wrapper = cp.dtype(index_dtype).type - segment_ids = CountingIterator(type_wrapper(0)) - # TODO: try using segmented_reduce instead when https://github.com/NVIDIA/cccl/issues/6171 is fixed - unary_transform( - d_in=segment_ids, d_out=result, op=segment_reduce_count, num_items=outlength + start_o, end_o = make_segment_views(offsets_data) + + h_init = np.asarray(identity + 0.0j, dtype=complex_dtype) + + def lex_min_op(a, b): + if a.real < b.real: + return a + if a.real == b.real and a.imag < b.imag: + return a + return b + + segmented_reduce( + d_in=input_complex, + d_out=result_complex, + num_segments=outlength, + start_offsets_in=start_o, + end_offsets_in=end_o, + op=lex_min_op, + h_init=h_init, ) +def awkward_reduce_count_64( + result, + offsets_data, + _outlength, +): + result[:] = offsets_data[1:] - offsets_data[:-1] + + def awkward_reduce_countnonzero( result, input_data, - parents_data, - parents_length, + offsets_data, outlength, ): - # temporary workaround - fix this (currently bools don't work because of a bug on numba side) + # Temporary workaround for bool instability if input_data.dtype == cp.bool_: - input_data = input_data.view(cp.int8) # cast bool -> int8 - index_dtype = parents_data.dtype + input_data = input_data.view(cp.int8) + + mapped_data = cp.empty(input_data.shape, dtype=result.dtype) + + def is_nonzero_map(x): + return result.dtype.type(1) if x != 0 else result.dtype.type(0) + + unary_transform( + d_in=input_data, + d_out=mapped_data, + op=is_nonzero_map, + num_items=input_data.size, + ) - def segment_reduce_count_nonzero(segment_id): - if segment_id > offsets_len: - # (when we will pass offsets directly, this won't be needed) - return 0 + start_o, end_o = make_segment_views(offsets_data) + h_init = np.asarray(0, dtype=result.dtype) + + segmented_reduce( + d_in=mapped_data, + d_out=result, + num_segments=outlength, + start_offsets_in=start_o, + end_offsets_in=end_o, + op=OpKind.PLUS, + h_init=h_init, + ) + + +def awkward_reduce_countnonzero_complex( + result, + input_data, + offsets_data, + outlength, +): + # Complex values arrive as a flat float32/float64 array of length 2*N + # (real/imag interleaved). Re-view into complex dtype for reduction. + + complex_dtype = infer_complex_dtype(input_data.dtype) + + input_complex = input_data.view(complex_dtype) + + index_dtype = normalize_index_dtype(offsets_data.dtype) + start_o, end_o = make_segment_views(offsets_data) + + def segment_reduce_countnonzero(segment_id): start_idx = start_o[segment_id] end_idx = end_o[segment_id] - segment = input_data[start_idx:end_idx] + count = 0 - for i in range(end_idx - start_idx): - if segment[i] != 0: + + for i in range(start_idx, end_idx): + if input_complex[i] != complex_dtype(0): count += 1 + return count - # Prepare the start and end offsets - # TODO: This should at least be starts_to_offsets - offsets = parents_to_offsets(parents_data, parents_length) - start_o = offsets[:-1] - end_o = offsets[1:] - offsets_len = len(offsets) - 2 - - # Perform the segmented reduce - # type_wrapper: cp.int64 - type_wrapper = cp.dtype(index_dtype).type - segment_ids = CountingIterator(type_wrapper(0)) - # TODO: try using segmented_reduce instead when https://github.com/NVIDIA/cccl/issues/6171 is fixed + segment_ids = CountingIterator(index_dtype(0)) + unary_transform( d_in=segment_ids, d_out=result, - op=segment_reduce_count_nonzero, + op=segment_reduce_countnonzero, num_items=outlength, ) @@ -736,35 +796,67 @@ def fill(i): ) -# Fills tostarts and tostops with evenly spaced offsets of size `target` for each of the `length` lists def awkward_index_rpad_and_clip_axis1(tostarts, tostops, target, length): + """ + Fills `tostarts` and `tostops` with rpad/clip offsets for axis=1 lists. + Each list is padded or clipped to length `target`. + """ + def fill(i): - tostarts[i] = tostarts.dtype.type(i * target) - return tostarts.dtype.type(i * target + target) + start = i * target + end = start + target + + tostarts[i] = tostarts.dtype.type(start) + return tostarts.dtype.type(end) segment_ids = CountingIterator(tostarts.dtype.type(0)) - unary_transform(d_in=segment_ids, d_out=tostops, op=fill, num_items=length) + + unary_transform( + d_in=segment_ids, + d_out=tostops, + op=fill, + num_items=length, + ) -def awkward_missing_repeat(outindex, index, indexlength, repetitions, regularsize): +def awkward_missing_repeat( + outindex, + index, + indexlength, + repetitions, + regularsize, +): """ - Repeats an index array `repetitions` times, adjusting valid (non-negative) indices - by an offset(regularsize) each repetition. - Missing values (-1) are preserved as-is across all repetitions. + Repeats an index array `repetitions` times, adjusting valid (non-negative) + indices by an offset of `regularsize` per repetition. + Missing values (-1) are preserved. """ - index_dtype = outindex.dtype.type + output_size = repetitions * indexlength + + reg_size = index_dtype(regularsize) + idx_len = index_dtype(indexlength) + + def fill(counter): + # Position in the original index array + j = counter % idx_len + # Which repetition block are we in? + i = counter // idx_len - def fill_missing_repeat(counter): - i = counter // indexlength # number of repetition we're in - j = counter % indexlength # position within the current repetition - val_offset = i * regularsize base = index[j] - adjustment = index_dtype(val_offset) if base >= 0 else index_dtype(0) - return base + adjustment - output_size = repetitions * indexlength + # Awkward convention: -1 and lower are masked/missing + if base >= 0: + return index_dtype(base + i * reg_size) + else: + # Preserve the exact missing value (usually -1) + return base + counters = CountingIterator(index_dtype(0)) + unary_transform( - d_in=counters, d_out=outindex, op=fill_missing_repeat, num_items=output_size + d_in=counters, + d_out=outindex, + num_items=output_size, + op=fill, ) diff --git a/src/awkward/_connect/cuda/cuda_kernels/awkward_ByteMaskedArray_reduce_next_64.cu b/src/awkward/_connect/cuda/cuda_kernels/awkward_ByteMaskedArray_reduce_next_64.cu index dae309d005..d4100641fe 100644 --- a/src/awkward/_connect/cuda/cuda_kernels/awkward_ByteMaskedArray_reduce_next_64.cu +++ b/src/awkward/_connect/cuda/cuda_kernels/awkward_ByteMaskedArray_reduce_next_64.cu @@ -2,30 +2,48 @@ // BEGIN PYTHON // def f(grid, block, args): -// (nextcarry, nextparents, outindex, mask, parents, length, validwhen, invocation_index, err_code) = args +// (nextcarry, nextoffsets, outindex, mask, offsets, outlength, validwhen, invocation_index, err_code) = args +// # In the offsets-pipeline, total element count = offsets[outlength]. +// length = int(offsets[int(outlength)].item()) if hasattr(offsets[int(outlength)], "item") else int(offsets[int(outlength)]) // scan_in_array = cupy.zeros(length, dtype=cupy.int64) -// cuda_kernel_templates.get_function(fetch_specialization(['awkward_ByteMaskedArray_reduce_next_64_a', nextcarry.dtype, nextparents.dtype, outindex.dtype, mask.dtype, parents.dtype]))(grid, block, (nextcarry, nextparents, outindex, mask, parents, length, validwhen, scan_in_array, invocation_index, err_code)) +// # Phases a and b need `length` threads; phase c needs `outlength + 1`. +// # Compute per-phase grid sizes; reuse the caller's block size. +// block_size = block[0] if isinstance(block, tuple) else block +// if block_size <= 0: +// block_size = 1 +// grid_ab = ((length + block_size - 1) //block_size,) if length > 0 else (1,) +// grid_c = ((int(outlength) + 1 + block_size - 1) //block_size,) +// # Phase a: per-element, mark valid elements with 1 in scan_in_array. +// cuda_kernel_templates.get_function(fetch_specialization(['awkward_ByteMaskedArray_reduce_next_64_a', nextcarry.dtype, nextoffsets.dtype, outindex.dtype, mask.dtype, offsets.dtype]))(grid_ab, (block_size,), (nextcarry, nextoffsets, outindex, mask, offsets, outlength, validwhen, scan_in_array, invocation_index, err_code)) +// # Inclusive cumulative sum: scan_in_array[i] now holds the count of valid +// # elements in [0, i]. // scan_in_array = cupy.cumsum(scan_in_array) -// cuda_kernel_templates.get_function(fetch_specialization(['awkward_ByteMaskedArray_reduce_next_64_b', nextcarry.dtype, nextparents.dtype, outindex.dtype, mask.dtype, parents.dtype]))(grid, block, (nextcarry, nextparents, outindex, mask, parents, length, validwhen, scan_in_array, invocation_index, err_code)) +// # Phase b: per-element, write nextcarry / outindex using the prefix-sum. +// cuda_kernel_templates.get_function(fetch_specialization(['awkward_ByteMaskedArray_reduce_next_64_b', nextcarry.dtype, nextoffsets.dtype, outindex.dtype, mask.dtype, offsets.dtype]))(grid_ab, (block_size,), (nextcarry, nextoffsets, outindex, mask, offsets, outlength, validwhen, scan_in_array, invocation_index, err_code)) +// # Phase c: per-bin-boundary, write nextoffsets[bin] = cumulative valid +// # count just before offsets[bin]. Needs outlength + 1 threads. +// cuda_kernel_templates.get_function(fetch_specialization(['awkward_ByteMaskedArray_reduce_next_64_c', nextcarry.dtype, nextoffsets.dtype, outindex.dtype, mask.dtype, offsets.dtype]))(grid_c, (block_size,), (nextcarry, nextoffsets, outindex, mask, offsets, outlength, validwhen, scan_in_array, invocation_index, err_code)) // out["awkward_ByteMaskedArray_reduce_next_64_a", {dtype_specializations}] = None // out["awkward_ByteMaskedArray_reduce_next_64_b", {dtype_specializations}] = None +// out["awkward_ByteMaskedArray_reduce_next_64_c", {dtype_specializations}] = None // END PYTHON template __global__ void awkward_ByteMaskedArray_reduce_next_64_a( T* nextcarry, - C* nextparents, + C* nextoffsets, U* outindex, const V* mask, - const W* parents, - int64_t length, + const W* offsets, + int64_t outlength, bool validwhen, int64_t* scan_in_array, uint64_t* invocation_index, uint64_t* err_code) { if (err_code[0] == NO_ERROR) { int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; + int64_t length = (int64_t)offsets[outlength]; if (thread_id < length) { if ((mask[thread_id] != 0) == validwhen) { @@ -39,22 +57,22 @@ template __global__ void awkward_ByteMaskedArray_reduce_next_64_b( T* nextcarry, - C* nextparents, + C* nextoffsets, U* outindex, const V* mask, - const W* parents, - int64_t length, + const W* offsets, + int64_t outlength, bool validwhen, int64_t* scan_in_array, uint64_t* invocation_index, uint64_t* err_code) { if (err_code[0] == NO_ERROR) { int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; + int64_t length = (int64_t)offsets[outlength]; if (thread_id < length) { if ((mask[thread_id] != 0) == validwhen) { nextcarry[scan_in_array[thread_id] - 1] = thread_id; - nextparents[scan_in_array[thread_id] - 1] = parents[thread_id]; outindex[thread_id] = scan_in_array[thread_id] - 1; } else { outindex[thread_id] = -1; @@ -62,3 +80,37 @@ awkward_ByteMaskedArray_reduce_next_64_b( } } } + +// Phase c: write nextoffsets per-bin boundary. nextoffsets has outlength + 1 +// entries; thread `bin_boundary` writes nextoffsets[bin_boundary]. +// +// nextoffsets[0] = 0 +// nextoffsets[b] = #valid elements in [0, offsets[b]) for b > 0 +// = scan_in_array[offsets[b] - 1] (when offsets[b] > 0) +// = 0 (when offsets[b] == 0) +template +__global__ void +awkward_ByteMaskedArray_reduce_next_64_c( + T* nextcarry, + C* nextoffsets, + U* outindex, + const V* mask, + const W* offsets, + int64_t outlength, + bool validwhen, + int64_t* scan_in_array, + uint64_t* invocation_index, + uint64_t* err_code) { + if (err_code[0] == NO_ERROR) { + int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; + + if (thread_id < outlength + 1) { + int64_t boundary = (int64_t)offsets[thread_id]; + if (boundary == 0) { + nextoffsets[thread_id] = 0; + } else { + nextoffsets[thread_id] = scan_in_array[boundary - 1]; + } + } + } +} diff --git a/src/awkward/_connect/cuda/cuda_kernels/awkward_IndexedArray_index_of_nulls.cu b/src/awkward/_connect/cuda/cuda_kernels/awkward_IndexedArray_index_of_nulls.cu index 7a40f6d3ab..784f543248 100644 --- a/src/awkward/_connect/cuda/cuda_kernels/awkward_IndexedArray_index_of_nulls.cu +++ b/src/awkward/_connect/cuda/cuda_kernels/awkward_IndexedArray_index_of_nulls.cu @@ -2,7 +2,21 @@ // BEGIN PYTHON // def f(grid, block, args): -// (toindex, fromindex, lenindex, parents, starts, invocation_index, err_code) = args +// (toindex, fromindex, offsets, outlength, starts, invocation_index, err_code) = args +// # In the offsets-pipeline, "lenindex" = total elements = offsets[outlength]. +// lenindex = int(offsets[int(outlength)].item()) +// # Derive parents from offsets so the kernel body (still parents-driven) +// # runs unchanged. +// if int(outlength) > 0 and lenindex > 0: +// # CuPy refuses cupy.ndarray as `repeats`; use searchsorted to +// # derive parents on-device with the same result. +// parents = cupy.searchsorted( +// offsets[1:int(outlength) + 1], +// cupy.arange(int(lenindex), dtype=cupy.int64), +// side='right', +// ).astype(cupy.int64) +// else: +// parents = cupy.zeros(0, dtype=cupy.int64) // scan_in_array = cupy.zeros(lenindex, dtype=cupy.int64) // cuda_kernel_templates.get_function(fetch_specialization(["awkward_IndexedArray_index_of_nulls_a", toindex.dtype, fromindex.dtype, parents.dtype, starts.dtype]))(grid, block, (toindex, fromindex, lenindex, parents, starts, scan_in_array, invocation_index, err_code)) // scan_in_array = cupy.cumsum(scan_in_array) diff --git a/src/awkward/_connect/cuda/cuda_kernels/awkward_IndexedArray_local_preparenext_64.cu b/src/awkward/_connect/cuda/cuda_kernels/awkward_IndexedArray_local_preparenext_64.cu index ac0246fd33..5d8c665d4e 100644 --- a/src/awkward/_connect/cuda/cuda_kernels/awkward_IndexedArray_local_preparenext_64.cu +++ b/src/awkward/_connect/cuda/cuda_kernels/awkward_IndexedArray_local_preparenext_64.cu @@ -2,9 +2,32 @@ // BEGIN PYTHON // def f(grid, block, args): -// (tocarry, starts, parents, parentslength, nextparents, nextlen, invocation_index, err_code) = args +// (tocarry, starts, offsets, nextoffsets, outlength, invocation_index, err_code) = args +// # Offsets-pipeline: derive parents/parentslength and nextparents/nextlen +// # from offsets/nextoffsets so the (parents-driven) kernel body runs +// # unchanged. +// parentslength = int(offsets[int(outlength)].item()) +// nextlen = int(nextoffsets[int(outlength)].item()) +// # CuPy refuses cupy.ndarray as `repeats`; use searchsorted to derive +// # parents/nextparents on-device with the same result. +// if int(outlength) > 0 and parentslength > 0: +// parents = cupy.searchsorted( +// offsets[1:int(outlength) + 1], +// cupy.arange(int(parentslength), dtype=cupy.int64), +// side='right', +// ).astype(cupy.int64) +// else: +// parents = cupy.zeros(0, dtype=cupy.int64) +// if int(outlength) > 0 and nextlen > 0: +// nextparents = cupy.searchsorted( +// nextoffsets[1:int(outlength) + 1], +// cupy.arange(int(nextlen), dtype=cupy.int64), +// side='right', +// ).astype(cupy.int64) +// else: +// nextparents = cupy.zeros(0, dtype=cupy.int64) // if nextlen < 1024: -// block_size = nextlen +// block_size = nextlen if nextlen > 0 else 1 // else: // block_size = 1024 // if block_size > 0: diff --git a/src/awkward/_connect/cuda/cuda_kernels/awkward_IndexedArray_reduce_next_64.cu b/src/awkward/_connect/cuda/cuda_kernels/awkward_IndexedArray_reduce_next_64.cu index 130f036325..999f60917d 100644 --- a/src/awkward/_connect/cuda/cuda_kernels/awkward_IndexedArray_reduce_next_64.cu +++ b/src/awkward/_connect/cuda/cuda_kernels/awkward_IndexedArray_reduce_next_64.cu @@ -2,29 +2,40 @@ // BEGIN PYTHON // def f(grid, block, args): -// (nextcarry, nextparents, outindex, index, parents, length, invocation_index, err_code) = args +// (nextcarry, nextoffsets, outindex, index, offsets, outlength, invocation_index, err_code) = args +// # Total element count from offsets[outlength] in the offsets pipeline. +// length = int(offsets[int(outlength)].item()) // scan_in_array = cupy.zeros(length, dtype=cupy.int64) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_IndexedArray_reduce_next_64_a", nextcarry.dtype, nextparents.dtype, outindex.dtype, index.dtype, parents.dtype]))(grid, block, (nextcarry, nextparents, outindex, index, parents, length, scan_in_array, invocation_index, err_code)) +// # Phase a/b need `length` threads; phase c needs `outlength + 1`. +// block_size = block[0] if isinstance(block, tuple) else block +// if block_size <= 0: +// block_size = 1 +// grid_ab = ((length + block_size - 1) //block_size,) if length > 0 else (1,) +// grid_c = ((int(outlength) + 1 + block_size - 1) //block_size,) +// cuda_kernel_templates.get_function(fetch_specialization(["awkward_IndexedArray_reduce_next_64_a", nextcarry.dtype, nextoffsets.dtype, outindex.dtype, index.dtype, offsets.dtype]))(grid_ab, (block_size,), (nextcarry, nextoffsets, outindex, index, offsets, outlength, scan_in_array, invocation_index, err_code)) // scan_in_array = cupy.cumsum(scan_in_array) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_IndexedArray_reduce_next_64_b", nextcarry.dtype, nextparents.dtype, outindex.dtype, index.dtype, parents.dtype]))(grid, block, (nextcarry, nextparents, outindex, index, parents, length, scan_in_array, invocation_index, err_code)) +// cuda_kernel_templates.get_function(fetch_specialization(["awkward_IndexedArray_reduce_next_64_b", nextcarry.dtype, nextoffsets.dtype, outindex.dtype, index.dtype, offsets.dtype]))(grid_ab, (block_size,), (nextcarry, nextoffsets, outindex, index, offsets, outlength, scan_in_array, invocation_index, err_code)) +// cuda_kernel_templates.get_function(fetch_specialization(["awkward_IndexedArray_reduce_next_64_c", nextcarry.dtype, nextoffsets.dtype, outindex.dtype, index.dtype, offsets.dtype]))(grid_c, (block_size,), (nextcarry, nextoffsets, outindex, index, offsets, outlength, scan_in_array, invocation_index, err_code)) // out["awkward_IndexedArray_reduce_next_64_a", {dtype_specializations}] = None // out["awkward_IndexedArray_reduce_next_64_b", {dtype_specializations}] = None +// out["awkward_IndexedArray_reduce_next_64_c", {dtype_specializations}] = None // END PYTHON template __global__ void awkward_IndexedArray_reduce_next_64_a( T* nextcarry, - C* nextparents, + C* nextoffsets, U* outindex, const V* index, - const W* parents, - int64_t length, + const W* offsets, + int64_t outlength, int64_t* scan_in_array, uint64_t invocation_index, uint64_t* err_code) { if (err_code[0] == NO_ERROR) { int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; + int64_t length = (int64_t)offsets[outlength]; if (thread_id < length) { if (index[thread_id] >= 0) { @@ -38,21 +49,21 @@ template __global__ void awkward_IndexedArray_reduce_next_64_b( T* nextcarry, - C* nextparents, + C* nextoffsets, U* outindex, const V* index, - const W* parents, - int64_t length, + const W* offsets, + int64_t outlength, int64_t* scan_in_array, uint64_t invocation_index, uint64_t* err_code) { if (err_code[0] == NO_ERROR) { int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; + int64_t length = (int64_t)offsets[outlength]; if (thread_id < length) { if (index[thread_id] >= 0) { - nextcarry[scan_in_array[thread_id] - 1] = index[thread_id]; - nextparents[scan_in_array[thread_id] - 1] = parents[thread_id]; + nextcarry[scan_in_array[thread_id] - 1] = (T)index[thread_id]; outindex[thread_id] = scan_in_array[thread_id] - 1; } else { outindex[thread_id] = -1; @@ -60,3 +71,31 @@ awkward_IndexedArray_reduce_next_64_b( } } } + +// Phase c: write nextoffsets per-bin boundary. +// nextoffsets[b] = #valid (index >= 0) elements in [0, offsets[b]). +template +__global__ void +awkward_IndexedArray_reduce_next_64_c( + T* nextcarry, + C* nextoffsets, + U* outindex, + const V* index, + const W* offsets, + int64_t outlength, + int64_t* scan_in_array, + uint64_t invocation_index, + uint64_t* err_code) { + if (err_code[0] == NO_ERROR) { + int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; + + if (thread_id < outlength + 1) { + int64_t boundary = (int64_t)offsets[thread_id]; + if (boundary == 0) { + nextoffsets[thread_id] = 0; + } else { + nextoffsets[thread_id] = scan_in_array[boundary - 1]; + } + } + } +} diff --git a/src/awkward/_connect/cuda/cuda_kernels/awkward_NumpyArray_rearrange_shifted.cu b/src/awkward/_connect/cuda/cuda_kernels/awkward_NumpyArray_rearrange_shifted.cu index 7a183a902b..7e43e020a5 100644 --- a/src/awkward/_connect/cuda/cuda_kernels/awkward_NumpyArray_rearrange_shifted.cu +++ b/src/awkward/_connect/cuda/cuda_kernels/awkward_NumpyArray_rearrange_shifted.cu @@ -2,14 +2,17 @@ // BEGIN PYTHON // def f(grid, block, args): -// (toptr, fromshifts, length, fromoffsets, offsetslength, fromparents, fromstarts, invocation_index, err_code) = args -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_NumpyArray_rearrange_shifted_a", toptr.dtype, fromshifts.dtype, fromoffsets.dtype, fromparents.dtype, fromstarts.dtype]))(grid, block, (toptr, fromshifts, length, fromoffsets, offsetslength, fromparents, fromstarts, invocation_index, err_code)) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_NumpyArray_rearrange_shifted_b", toptr.dtype, fromshifts.dtype, fromoffsets.dtype, fromparents.dtype, fromstarts.dtype]))(grid, block, (toptr, fromshifts, length, fromoffsets, offsetslength, fromparents, fromstarts, invocation_index, err_code)) +// (toptr, fromshifts, length, fromoffsets, outlength, fromparents, fromstarts, invocation_index, err_code) = args +// cuda_kernel_templates.get_function(fetch_specialization(["awkward_NumpyArray_rearrange_shifted_a", toptr.dtype, fromshifts.dtype, fromoffsets.dtype, fromparents.dtype, fromstarts.dtype]))(grid, block, (toptr, fromshifts, length, fromoffsets, outlength, fromparents, fromstarts, invocation_index, err_code)) +// cuda_kernel_templates.get_function(fetch_specialization(["awkward_NumpyArray_rearrange_shifted_b", toptr.dtype, fromshifts.dtype, fromoffsets.dtype, fromparents.dtype, fromstarts.dtype]))(grid, block, (toptr, fromshifts, length, fromoffsets, outlength, fromparents, fromstarts, invocation_index, err_code)) // out["awkward_NumpyArray_rearrange_shifted_a", {dtype_specializations}] = None // out["awkward_NumpyArray_rearrange_shifted_b", {dtype_specializations}] = None // END PYTHON +// `length` here is the number of *shifts* (independent of the bin count, so +// `fromparents` is still required for phase b — see the CPU version's docs). +// `outlength` is the number of bins (renamed from `offsetslength - 1`). template __global__ void awkward_NumpyArray_rearrange_shifted_a( @@ -17,7 +20,7 @@ awkward_NumpyArray_rearrange_shifted_a( C* fromshifts, int64_t length, U* fromoffsets, - int64_t offsetslength, + int64_t outlength, V* fromparents, W* fromstarts, uint64_t invocation_index, @@ -25,7 +28,7 @@ awkward_NumpyArray_rearrange_shifted_a( if (err_code[0] == NO_ERROR) { int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; - if (thread_id < offsetslength - 1) { + if (thread_id < outlength) { for (int64_t j = threadIdx.y; j < fromoffsets[thread_id + 1] - fromoffsets[thread_id]; j += blockDim.y) { int64_t idx = fromoffsets[thread_id] + j; toptr[idx] = toptr[idx] + fromoffsets[thread_id]; @@ -41,7 +44,7 @@ awkward_NumpyArray_rearrange_shifted_b( C* fromshifts, int64_t length, U* fromoffsets, - int64_t offsetslength, + int64_t outlength, V* fromparents, W* fromstarts, uint64_t invocation_index, diff --git a/src/awkward/_connect/cuda/cuda_kernels/awkward_NumpyArray_reduce_adjust_starts_64.cu b/src/awkward/_connect/cuda/cuda_kernels/awkward_NumpyArray_reduce_adjust_starts_64.cu index 75595ff90f..deadadaab0 100644 --- a/src/awkward/_connect/cuda/cuda_kernels/awkward_NumpyArray_reduce_adjust_starts_64.cu +++ b/src/awkward/_connect/cuda/cuda_kernels/awkward_NumpyArray_reduce_adjust_starts_64.cu @@ -1,11 +1,16 @@ // BSD 3-Clause License; see https://github.com/scikit-hep/awkward-1.0/blob/main/LICENSE +// In the offsets-pipeline migration, `parents[toptr[k]] == k` by construction +// of argmin/argmax (the result for output bin k is by definition an element +// of bin k), so the parent indirection collapses to using the thread/bin +// index directly. The `offsets` slot is preserved in the signature for +// symmetry with the rest of the pipeline; downstream callers may drop it. template __global__ void awkward_NumpyArray_reduce_adjust_starts_64( T* toptr, int64_t outlength, - const C* parents, + const C* /* offsets */, const U* starts, uint64_t invocation_index, uint64_t* err_code) { @@ -14,9 +19,7 @@ awkward_NumpyArray_reduce_adjust_starts_64( if (thread_id < outlength) { T i = toptr[thread_id]; if (i >= 0) { - int64_t parent = parents[i]; - int64_t start = starts[parent]; - toptr[thread_id] += -start; + toptr[thread_id] -= starts[thread_id]; } } } diff --git a/src/awkward/_connect/cuda/cuda_kernels/awkward_NumpyArray_reduce_adjust_starts_shifts_64.cu b/src/awkward/_connect/cuda/cuda_kernels/awkward_NumpyArray_reduce_adjust_starts_shifts_64.cu index 255da2b718..6d9bbc3acb 100644 --- a/src/awkward/_connect/cuda/cuda_kernels/awkward_NumpyArray_reduce_adjust_starts_shifts_64.cu +++ b/src/awkward/_connect/cuda/cuda_kernels/awkward_NumpyArray_reduce_adjust_starts_shifts_64.cu @@ -1,11 +1,14 @@ // BSD 3-Clause License; see https://github.com/scikit-hep/awkward-1.0/blob/main/LICENSE +// See `awkward_NumpyArray_reduce_adjust_starts_64.cu` for the rationale: +// `parents[toptr[k]] == k` by construction, so we use the thread/bin index +// directly. The `offsets` slot is kept in the signature for symmetry. template __global__ void awkward_NumpyArray_reduce_adjust_starts_shifts_64( T* toptr, int64_t outlength, - const C* parents, + const C* /* offsets */, const U* starts, const V* shifts, uint64_t invocation_index, @@ -19,9 +22,6 @@ awkward_NumpyArray_reduce_adjust_starts_shifts_64( int64_t i = toptr[thread_id]; if (i < 0) return; - int64_t parent = parents[i]; - int64_t start = starts[parent]; - - toptr[thread_id] += shifts[i] - start; + toptr[thread_id] += shifts[i] - starts[thread_id]; } } diff --git a/src/awkward/_connect/cuda/cuda_kernels/awkward_NumpyArray_reduce_mask_ByteMaskedArray_64.cu b/src/awkward/_connect/cuda/cuda_kernels/awkward_NumpyArray_reduce_mask_ByteMaskedArray_64.cu index 17282b7176..fc9a2a7ec8 100644 --- a/src/awkward/_connect/cuda/cuda_kernels/awkward_NumpyArray_reduce_mask_ByteMaskedArray_64.cu +++ b/src/awkward/_connect/cuda/cuda_kernels/awkward_NumpyArray_reduce_mask_ByteMaskedArray_64.cu @@ -1,21 +1,28 @@ -// BSD 3-Clause License; see https://github.com/scikit-hep/awkward-1.0/blob/main/LICENSE +// BSD 3-Clause License; see https://github.com/scikit-hep/awkward/blob/main/LICENSE + +// Note: When invoking this kernel, the grid size should be based on outlength rather than lenparents: +// int64_t blocks = (outlength + threads_per_block - 1) / threads_per_block; +// template __global__ void awkward_NumpyArray_reduce_mask_ByteMaskedArray_64( T* toptr, - const C* parents, - int64_t lenparents, + const C* offsets, int64_t outlength, uint64_t invocation_index, uint64_t* err_code) { if (err_code[0] == NO_ERROR) { int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; + if (thread_id < outlength) { - toptr[thread_id] = 1; - } - if (thread_id < lenparents) { - toptr[parents[thread_id]] = 0; + // The mask value (toptr) is 1 if the bin is empty, 0 if it has content. + // Bin i's content is defined by the range [offsets[thread_id], offsets[thread_id + 1]). + if (offsets[thread_id + 1] - offsets[thread_id] > 0) { + toptr[thread_id] = 0; + } else { + toptr[thread_id] = 1; + } } } } diff --git a/src/awkward/_connect/cuda/cuda_kernels/awkward_RegularArray_reduce_nonlocal_preparenext_64.cu b/src/awkward/_connect/cuda/cuda_kernels/awkward_RegularArray_reduce_nonlocal_preparenext_64.cu index c6d6b425ce..f274cff2c6 100644 --- a/src/awkward/_connect/cuda/cuda_kernels/awkward_RegularArray_reduce_nonlocal_preparenext_64.cu +++ b/src/awkward/_connect/cuda/cuda_kernels/awkward_RegularArray_reduce_nonlocal_preparenext_64.cu @@ -2,10 +2,34 @@ // BEGIN PYTHON // def f(grid, block, args): -// (nextcarry, nextparents, parents, size, length, invocation_index, err_code) = args +// (nextcarry, nextoffsets, offsets, size, length, outlength, invocation_index, err_code) = args +// # Offsets-pipeline: derive parents from outer offsets so the kernel body +// # (still parents-driven) runs unchanged. The outer offsets cover `length` +// # rows total: parents = repeat(arange(outlength), per-bin counts). +// if int(outlength) > 0 and int(length) > 0: +// # CuPy refuses cupy.ndarray as `repeats`; use searchsorted to +// # derive parents on-device with the same result. +// parents = cupy.searchsorted( +// offsets[1:int(outlength) + 1], +// cupy.arange(int(length * size), dtype=cupy.int64), +// side='right', +// ).astype(cupy.int64) +// else: +// parents = cupy.zeros(0, dtype=cupy.int64) // scan_in_array = cupy.ones(length * size, dtype=cupy.int64) // scan_in_array = cupy.cumsum(scan_in_array) -// cuda_kernel_templates.get_function(fetch_specialization(['awkward_RegularArray_reduce_nonlocal_preparenext_64', nextcarry.dtype, nextparents.dtype, parents.dtype]))(grid, block, (nextcarry, nextparents, parents, size, length, scan_in_array, invocation_index, err_code)) +// # Compute nextoffsets host-side: bin-major numbering means +// # nextbin = bin * size + j, and each (bin, j) cell receives exactly +// # (offsets[bin+1] - offsets[bin]) elements (one per row in that bin). +// # The Python reference impl matches this layout. +// if int(outlength) > 0 and int(size) > 0: +// per_bin_counts = (offsets[1:int(outlength) + 1] - offsets[:int(outlength)]).astype(cupy.int64) +// per_nextbin_counts = cupy.repeat(per_bin_counts, int(size)) +// nextoffsets[0] = 0 +// nextoffsets[1:] = cupy.cumsum(per_nextbin_counts) +// else: +// nextoffsets[0] = 0 +// cuda_kernel_templates.get_function(fetch_specialization(['awkward_RegularArray_reduce_nonlocal_preparenext_64', nextcarry.dtype, nextoffsets.dtype, parents.dtype]))(grid, block, (nextcarry, nextoffsets, parents, size, length, scan_in_array, invocation_index, err_code)) // out["awkward_RegularArray_reduce_nonlocal_preparenext_64", {dtype_specializations}] = None // END PYTHON @@ -13,7 +37,7 @@ template __global__ void awkward_RegularArray_reduce_nonlocal_preparenext_64( T* nextcarry, - C* nextparents, + C* nextoffsets, const U* parents, int64_t size, int64_t length, @@ -25,7 +49,6 @@ awkward_RegularArray_reduce_nonlocal_preparenext_64( int64_t thread_id = (blockIdx.x * blockDim.x + threadIdx.x) % length; if (thread_id < length && thready_id < size) { nextcarry[scan_in_array[thready_id * length + thread_id] - 1] = thread_id * size + thready_id; - nextparents[scan_in_array[thready_id * length + thread_id] - 1] = parents[thread_id] * size + thready_id; } } } diff --git a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_argmax_complex.cu b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_argmax_complex.cu index 58278b04df..b8ff4b3426 100644 --- a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_argmax_complex.cu +++ b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_argmax_complex.cu @@ -2,158 +2,45 @@ // BEGIN PYTHON // def f(grid, block, args): -// (toptr, fromptr, parents, offsets, lenparents, outlength, invocation_index, err_code) = args +// (toptr, fromptr, offsets, outlength, invocation_index, err_code) = args // if block[0] > 0: -// grid_size = math.floor((lenparents + block[0] - 1) / block[0]) +// grid_size = math.floor((int(outlength) + block[0] - 1) / block[0]) // else: // grid_size = 1 -// atomic_toptr = cupy.array(toptr, dtype=cupy.uint64) -// temp = cupy.zeros(lenparents, dtype=toptr.dtype) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_argmax_complex_a", cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, atomic_toptr, temp, invocation_index, err_code)) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_argmax_complex_b", cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, atomic_toptr, temp, invocation_index, err_code)) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_argmax_complex_c", cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, atomic_toptr, temp, invocation_index, err_code)) -// out["awkward_reduce_argmax_complex_a", {dtype_specializations}] = None -// out["awkward_reduce_argmax_complex_b", {dtype_specializations}] = None -// out["awkward_reduce_argmax_complex_c", {dtype_specializations}] = None +// cuda_kernel_templates.get_function(fetch_specialization(['awkward_reduce_argmax_complex_kernel', cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, offsets.dtype]))((grid_size,), block, (toptr, fromptr, offsets, outlength, invocation_index, err_code)) +// out['awkward_reduce_argmax_complex_kernel', {dtype_specializations}] = None // END PYTHON -// argmax: lexicographic compare (real, then imag), tie-breaker: lower index -template +// One thread per bin, mirroring awkward_reduce_argmax_complex.cpp. +template __global__ void -awkward_reduce_argmax_complex_a( +awkward_reduce_argmax_complex_kernel( T* toptr, - const C* fromptr, // [real, imag] pairs - const U* parents, + const C* fromptr, const V* offsets, - int64_t lenparents, int64_t outlength, - uint64_t* atomic_toptr, - T* temp, uint64_t invocation_index, uint64_t* err_code) { if (err_code[0] == NO_ERROR) { - int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; - if (thread_id < outlength) { - atomic_toptr[thread_id] = (uint64_t)(-1); - } - } -} - -template -__global__ void -awkward_reduce_argmax_complex_b( - T* toptr, - const C* fromptr, // flattened [real, imag] array - const U* parents, - const V* offsets, - int64_t lenparents, - int64_t outlength, - uint64_t* atomic_toptr, - T* temp, - uint64_t invocation_index, - uint64_t* err_code) { - - if (err_code[0] == NO_ERROR) { - const uint64_t EMPTY = (uint64_t)(-1); - - int64_t idx = threadIdx.x; - int64_t thread_id = blockIdx.x * blockDim.x + idx; - - if (thread_id < lenparents) { - temp[thread_id] = thread_id; - } else if (thread_id < outlength) { - temp[thread_id] = -1; - } - __syncthreads(); - - if (thread_id < lenparents) { - // intra-block reduction - for (int64_t stride = 1; stride < blockDim.x; stride *= 2) { - int64_t index = -1; - if (idx >= stride && parents[thread_id] == parents[thread_id - stride]) { - index = temp[thread_id - stride]; - } - __syncthreads(); - - if (index != -1) { - // load old candidate - int64_t old_idx = temp[thread_id]; - double old_real = (double)fromptr[2 * old_idx]; - double old_imag = (double)fromptr[2 * old_idx + 1]; - // load new candidate - double new_real = (double)fromptr[2 * index]; - double new_imag = (double)fromptr[2 * index + 1]; - - // NUMPY LEXICOGRAPHIC (real, then imag), prefer lower index on ties - bool better = (new_real > old_real) || - (new_real == old_real && new_imag > old_imag) || - (new_real == old_real && new_imag == old_imag && index < old_idx); - - if (old_idx == -1 || better) { - temp[thread_id] = index; - } - } - __syncthreads(); - } - - int64_t parent = parents[thread_id]; - if (idx == blockDim.x - 1 || thread_id == lenparents - 1 || - parents[thread_id] != parents[thread_id + 1]) { - uint64_t candidate = (uint64_t)temp[thread_id]; - if (candidate != (uint64_t)-1) { - uint64_t cur = atomic_toptr[parent]; - while (true) { - if (cur == EMPTY) { - uint64_t prev = atomicCAS(&atomic_toptr[parent], EMPTY, candidate); - if (prev == EMPTY) break; - cur = prev; - continue; - } else { - int64_t old_idx = (int64_t)cur; - int64_t new_idx = (int64_t)candidate; - - double old_real = (double)fromptr[2 * old_idx]; - double old_imag = (double)fromptr[2 * old_idx + 1]; - double new_real = (double)fromptr[2 * new_idx]; - double new_imag = (double)fromptr[2 * new_idx + 1]; - - bool better = (new_real > old_real) || - (new_real == old_real && new_imag > old_imag) || - (new_real == old_real && new_imag == old_imag && new_idx < old_idx); - - if (better) { - uint64_t prev = atomicCAS(&atomic_toptr[parent], cur, candidate); - if (prev == cur) break; - cur = prev; - continue; - } else { - break; - } - } + int64_t bin = blockIdx.x * blockDim.x + threadIdx.x; + if (bin < outlength) { + int64_t best = -1; + int64_t start = (int64_t)offsets[bin]; + int64_t stop = (int64_t)offsets[bin + 1]; + for (int64_t i = start; i < stop; i++) { + if (best == -1) { + best = i; + } else { + C x = fromptr[i * 2]; + C y = fromptr[i * 2 + 1]; + C bx = fromptr[best * 2]; + C by = fromptr[best * 2 + 1]; + if (x > bx || (x == bx && y > by)) { + best = i; } } } - } - } -} - -template -__global__ void -awkward_reduce_argmax_complex_c( - T* toptr, - const C* fromptr, // unused - const U* parents, - const V* offsets, - int64_t lenparents, - int64_t outlength, - uint64_t* atomic_toptr, - T* temp, - uint64_t invocation_index, - uint64_t* err_code) { - if (err_code[0] == NO_ERROR) { - int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; - if (thread_id < outlength) { - toptr[thread_id] = (T)(atomic_toptr[thread_id]); + toptr[bin] = (T)best; } } } diff --git a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_argmin_complex.cu b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_argmin_complex.cu index ad41b0c35e..2ded473b5b 100644 --- a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_argmin_complex.cu +++ b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_argmin_complex.cu @@ -2,158 +2,46 @@ // BEGIN PYTHON // def f(grid, block, args): -// (toptr, fromptr, parents, offsets, lenparents, outlength, invocation_index, err_code) = args +// (toptr, fromptr, offsets, outlength, invocation_index, err_code) = args // if block[0] > 0: -// grid_size = math.floor((lenparents + block[0] - 1) / block[0]) +// grid_size = math.floor((int(outlength) + block[0] - 1) / block[0]) // else: // grid_size = 1 -// atomic_toptr = cupy.array(toptr, dtype=cupy.uint64) -// temp = cupy.zeros(lenparents, dtype=toptr.dtype) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_argmin_complex_a", cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, atomic_toptr, temp, invocation_index, err_code)) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_argmin_complex_b", cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, atomic_toptr, temp, invocation_index, err_code)) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_argmin_complex_c", cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, atomic_toptr, temp, invocation_index, err_code)) -// out["awkward_reduce_argmin_complex_a", {dtype_specializations}] = None -// out["awkward_reduce_argmin_complex_b", {dtype_specializations}] = None -// out["awkward_reduce_argmin_complex_c", {dtype_specializations}] = None +// cuda_kernel_templates.get_function(fetch_specialization(['awkward_reduce_argmin_complex_kernel', cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, offsets.dtype]))((grid_size,), block, (toptr, fromptr, offsets, outlength, invocation_index, err_code)) +// out['awkward_reduce_argmin_complex_kernel', {dtype_specializations}] = None // END PYTHON -// argmin: lexicographic compare (real, then imag), tie-breaker: lower index -template +// One thread per bin, mirroring awkward_reduce_argmin_complex.cpp. +// Lexicographic compare on (real, imag); empty bin returns -1. +template __global__ void -awkward_reduce_argmin_complex_a( +awkward_reduce_argmin_complex_kernel( T* toptr, - const C* fromptr, // [real, imag] pairs - const U* parents, + const C* fromptr, const V* offsets, - int64_t lenparents, int64_t outlength, - uint64_t* atomic_toptr, - T* temp, uint64_t invocation_index, uint64_t* err_code) { if (err_code[0] == NO_ERROR) { - int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; - if (thread_id < outlength) { - atomic_toptr[thread_id] = (uint64_t)(-1); - } - } -} - -template -__global__ void -awkward_reduce_argmin_complex_b( - T* toptr, - const C* fromptr, // flattened [real, imag] array - const U* parents, - const V* offsets, - int64_t lenparents, - int64_t outlength, - uint64_t* atomic_toptr, - T* temp, - uint64_t invocation_index, - uint64_t* err_code) { - - if (err_code[0] == NO_ERROR) { - const uint64_t EMPTY = (uint64_t)(-1); - - int64_t idx = threadIdx.x; - int64_t thread_id = blockIdx.x * blockDim.x + idx; - - if (thread_id < lenparents) { - temp[thread_id] = thread_id; - } else if (thread_id < outlength) { - temp[thread_id] = -1; - } - __syncthreads(); - - if (thread_id < lenparents) { - // intra-block reduction - for (int64_t stride = 1; stride < blockDim.x; stride *= 2) { - int64_t index = -1; - if (idx >= stride && parents[thread_id] == parents[thread_id - stride]) { - index = temp[thread_id - stride]; - } - __syncthreads(); - - if (index != -1) { - // load old candidate - int64_t old_idx = temp[thread_id]; - double old_real = (double)fromptr[2 * old_idx]; - double old_imag = (double)fromptr[2 * old_idx + 1]; - // load new candidate - double new_real = (double)fromptr[2 * index]; - double new_imag = (double)fromptr[2 * index + 1]; - - // NUMPY LEXICOGRAPHIC (real, then imag), prefer lower index on ties - bool better = (new_real < old_real) || - (new_real == old_real && new_imag < old_imag) || - (new_real == old_real && new_imag == old_imag && index < old_idx); - - if (old_idx == -1 || better) { - temp[thread_id] = index; - } - } - __syncthreads(); - } - - int64_t parent = parents[thread_id]; - if (idx == blockDim.x - 1 || thread_id == lenparents - 1 || - parents[thread_id] != parents[thread_id + 1]) { - uint64_t candidate = (uint64_t)temp[thread_id]; - if (candidate != (uint64_t)-1) { - uint64_t cur = atomic_toptr[parent]; - while (true) { - if (cur == EMPTY) { - uint64_t prev = atomicCAS(&atomic_toptr[parent], EMPTY, candidate); - if (prev == EMPTY) break; - cur = prev; - continue; - } else { - int64_t old_idx = (int64_t)cur; - int64_t new_idx = (int64_t)candidate; - - double old_real = (double)fromptr[2 * old_idx]; - double old_imag = (double)fromptr[2 * old_idx + 1]; - double new_real = (double)fromptr[2 * new_idx]; - double new_imag = (double)fromptr[2 * new_idx + 1]; - - bool better = (new_real < old_real) || - (new_real == old_real && new_imag < old_imag) || - (new_real == old_real && new_imag == old_imag && new_idx < old_idx); - - if (better) { - uint64_t prev = atomicCAS(&atomic_toptr[parent], cur, candidate); - if (prev == cur) break; - cur = prev; - continue; - } else { - break; - } - } + int64_t bin = blockIdx.x * blockDim.x + threadIdx.x; + if (bin < outlength) { + int64_t best = -1; + int64_t start = (int64_t)offsets[bin]; + int64_t stop = (int64_t)offsets[bin + 1]; + for (int64_t i = start; i < stop; i++) { + if (best == -1) { + best = i; + } else { + C x = fromptr[i * 2]; + C y = fromptr[i * 2 + 1]; + C bx = fromptr[best * 2]; + C by = fromptr[best * 2 + 1]; + if (x < bx || (x == bx && y < by)) { + best = i; } } } - } - } -} - -template -__global__ void -awkward_reduce_argmin_complex_c( - T* toptr, - const C* fromptr, // unused - const U* parents, - const V* offsets, - int64_t lenparents, - int64_t outlength, - uint64_t* atomic_toptr, - T* temp, - uint64_t invocation_index, - uint64_t* err_code) { - if (err_code[0] == NO_ERROR) { - int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; - if (thread_id < outlength) { - toptr[thread_id] = (T)(atomic_toptr[thread_id]); + toptr[bin] = (T)best; } } } diff --git a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_count_64.cu b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_count_64.cu index ebe8104be2..36da1435c4 100644 --- a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_count_64.cu +++ b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_count_64.cu @@ -2,71 +2,28 @@ // BEGIN PYTHON // def f(grid, block, args): -// (toptr, parents, lenparents, outlength, invocation_index, err_code) = args +// (toptr, offsets, outlength, invocation_index, err_code) = args // if block[0] > 0: -// grid_size = math.floor((lenparents + block[0] - 1) / block[0]) +// grid_size = math.floor((int(outlength) + block[0] - 1) / block[0]) // else: // grid_size = 1 -// temp = cupy.zeros(lenparents, dtype=toptr.dtype) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_count_64_a", cupy.dtype(toptr.dtype).type, parents.dtype]))((grid_size,), block, (toptr, parents, lenparents, outlength, temp, invocation_index, err_code)) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_count_64_b", cupy.dtype(toptr.dtype).type, parents.dtype]))((grid_size,), block, (toptr, parents, lenparents, outlength, temp, invocation_index, err_code)) -// out["awkward_reduce_count_64_a", {dtype_specializations}] = None -// out["awkward_reduce_count_64_b", {dtype_specializations}] = None +// cuda_kernel_templates.get_function(fetch_specialization(['awkward_reduce_count_64_kernel', cupy.dtype(toptr.dtype).type, offsets.dtype]))((grid_size,), block, (toptr, offsets, outlength, invocation_index, err_code)) +// out['awkward_reduce_count_64_kernel', {dtype_specializations}] = None // END PYTHON -template +// Per-bin element count = offsets[bin+1] - offsets[bin]. One thread per bin. +template __global__ void -awkward_reduce_count_64_a( +awkward_reduce_count_64_kernel( T* toptr, - const C* parents, - int64_t lenparents, + const V* offsets, int64_t outlength, - T* temp, uint64_t invocation_index, uint64_t* err_code) { if (err_code[0] == NO_ERROR) { - int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; - - if (thread_id < outlength) { - toptr[thread_id] = 0; - } - } -} - -template -__global__ void -awkward_reduce_count_64_b( - T* toptr, - const C* parents, - int64_t lenparents, - int64_t outlength, - T* temp, - uint64_t invocation_index, - uint64_t* err_code) { - if (err_code[0] == NO_ERROR) { - int64_t idx = threadIdx.x; - int64_t thread_id = blockIdx.x * blockDim.x + idx; - - if (thread_id < lenparents) { - temp[thread_id] = 1; - } - __syncthreads(); - - if (thread_id < lenparents) { - for (int64_t stride = 1; stride < blockDim.x; stride *= 2) { - int64_t val = 0; - if (idx >= stride && thread_id < lenparents && parents[thread_id] == parents[thread_id - stride]) { - val = temp[thread_id - stride]; - } - __syncthreads(); - temp[thread_id] += val; - __syncthreads(); - } - - int64_t parent = parents[thread_id]; - if (idx == blockDim.x - 1 || thread_id == lenparents - 1 || parents[thread_id] != parents[thread_id + 1]) { - atomicAdd(&toptr[parent], temp[thread_id]); - } + int64_t bin = blockIdx.x * blockDim.x + threadIdx.x; + if (bin < outlength) { + toptr[bin] = (T)((int64_t)offsets[bin + 1] - (int64_t)offsets[bin]); } } } diff --git a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_countnonzero.cu b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_countnonzero.cu index 4dc9f50e5f..e28cd4917d 100644 --- a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_countnonzero.cu +++ b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_countnonzero.cu @@ -2,73 +2,35 @@ // BEGIN PYTHON // def f(grid, block, args): -// (toptr, fromptr, parents, lenparents, outlength, invocation_index, err_code) = args +// (toptr, fromptr, offsets, outlength, invocation_index, err_code) = args // if block[0] > 0: -// grid_size = math.floor((lenparents + block[0] - 1) / block[0]) +// grid_size = math.floor((int(outlength) + block[0] - 1) / block[0]) // else: // grid_size = 1 -// temp = cupy.zeros(lenparents, dtype=toptr.dtype) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_countnonzero_a", cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, parents.dtype]))((grid_size,), block, (toptr, fromptr, parents, lenparents, outlength, temp, invocation_index, err_code)) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_countnonzero_b", cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, parents.dtype]))((grid_size,), block, (toptr, fromptr, parents, lenparents, outlength, temp, invocation_index, err_code)) -// out["awkward_reduce_countnonzero_a", {dtype_specializations}] = None -// out["awkward_reduce_countnonzero_b", {dtype_specializations}] = None +// cuda_kernel_templates.get_function(fetch_specialization(['awkward_reduce_countnonzero_kernel', cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, offsets.dtype]))((grid_size,), block, (toptr, fromptr, offsets, outlength, invocation_index, err_code)) +// out['awkward_reduce_countnonzero_kernel', {dtype_specializations}] = None // END PYTHON -template +// One thread per bin, mirroring awkward_reduce_countnonzero.cpp. +template __global__ void -awkward_reduce_countnonzero_a( +awkward_reduce_countnonzero_kernel( T* toptr, const C* fromptr, - const U* parents, - int64_t lenparents, + const V* offsets, int64_t outlength, - T* temp, uint64_t invocation_index, uint64_t* err_code) { if (err_code[0] == NO_ERROR) { - int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; - - if (thread_id < outlength) { - toptr[thread_id] = 0; - } - } -} - -template -__global__ void -awkward_reduce_countnonzero_b( - T* toptr, - const C* fromptr, - const U* parents, - int64_t lenparents, - int64_t outlength, - T* temp, - uint64_t invocation_index, - uint64_t* err_code) { - if (err_code[0] == NO_ERROR) { - int64_t idx = threadIdx.x; - int64_t thread_id = blockIdx.x * blockDim.x + idx; - - if (thread_id < lenparents) { - temp[thread_id] = (fromptr[thread_id] != 0) ? 1 : 0; - } - __syncthreads(); - - if (thread_id < lenparents) { - for (int64_t stride = 1; stride < blockDim.x; stride *= 2) { - int64_t val = 0; - if (idx >= stride && thread_id < lenparents && parents[thread_id] == parents[thread_id - stride]) { - val = temp[thread_id - stride]; - } - __syncthreads(); - temp[thread_id] += val; - __syncthreads(); - } - - int64_t parent = parents[thread_id]; - if (idx == blockDim.x - 1 || thread_id == lenparents - 1 || parents[thread_id] != parents[thread_id + 1]) { - atomicAdd(&toptr[parent], temp[thread_id]); + int64_t bin = blockIdx.x * blockDim.x + threadIdx.x; + if (bin < outlength) { + int64_t c = 0; + int64_t start = (int64_t)offsets[bin]; + int64_t stop = (int64_t)offsets[bin + 1]; + for (int64_t i = start; i < stop; i++) { + c += (fromptr[i] != (C)0); } + toptr[bin] = (T)c; } } } diff --git a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_countnonzero_complex.cu b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_countnonzero_complex.cu index 7e8ad4b1bd..f033167dc6 100644 --- a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_countnonzero_complex.cu +++ b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_countnonzero_complex.cu @@ -2,75 +2,36 @@ // BEGIN PYTHON // def f(grid, block, args): -// (toptr, fromptr, parents, lenparents, outlength, invocation_index, err_code) = args +// (toptr, fromptr, offsets, outlength, invocation_index, err_code) = args // if block[0] > 0: -// grid_size = math.floor((lenparents + block[0] - 1) / block[0]) +// grid_size = math.floor((int(outlength) + block[0] - 1) / block[0]) // else: // grid_size = 1 -// temp = cupy.zeros(lenparents, dtype=toptr.dtype) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_countnonzero_complex_a", cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, parents.dtype]))((grid_size,), block, (toptr, fromptr, parents, lenparents, outlength, temp, invocation_index, err_code)) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_countnonzero_complex_b", cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, parents.dtype]))((grid_size,), block, (toptr, fromptr, parents, lenparents, outlength, temp, invocation_index, err_code)) -// out["awkward_reduce_countnonzero_complex_a", {dtype_specializations}] = None -// out["awkward_reduce_countnonzero_complex_b", {dtype_specializations}] = None +// cuda_kernel_templates.get_function(fetch_specialization(['awkward_reduce_countnonzero_complex_kernel', cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, offsets.dtype]))((grid_size,), block, (toptr, fromptr, offsets, outlength, invocation_index, err_code)) +// out['awkward_reduce_countnonzero_complex_kernel', {dtype_specializations}] = None // END PYTHON -template +// One thread per bin, mirroring awkward_reduce_countnonzero_complex.cpp. +// A complex value is "nonzero" if either its real or imaginary part is nonzero. +template __global__ void -awkward_reduce_countnonzero_complex_a( +awkward_reduce_countnonzero_complex_kernel( T* toptr, const C* fromptr, - const U* parents, - int64_t lenparents, + const V* offsets, int64_t outlength, - T* temp, uint64_t invocation_index, uint64_t* err_code) { if (err_code[0] == NO_ERROR) { - int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; - - if (thread_id < outlength) { - toptr[thread_id] = (T)0; - } - } -} - -template -__global__ void -awkward_reduce_countnonzero_complex_b( - T* toptr, - const C* fromptr, - const U* parents, - int64_t lenparents, - int64_t outlength, - T* temp, - uint64_t invocation_index, - uint64_t* err_code) { - if (err_code[0] == NO_ERROR) { - int64_t idx = threadIdx.x; - int64_t thread_id = blockIdx.x * blockDim.x + idx; - - if (thread_id < lenparents) { - temp[thread_id] = (fromptr[thread_id * 2] != 0 || fromptr[thread_id * 2 + 1] != 0); - } - __syncthreads(); - - for (int64_t stride = 1; stride < blockDim.x; stride *= 2) { - int64_t val = 0; - if (idx >= stride && thread_id < lenparents && parents[thread_id] == parents[thread_id - stride]) { - val = temp[thread_id - stride]; - } - __syncthreads(); - if (thread_id < lenparents) { - temp[thread_id] += val; - } - __syncthreads(); - } - - if (thread_id < lenparents) { - int64_t parent = parents[thread_id]; - if (idx == blockDim.x - 1 || thread_id == lenparents - 1 || parents[thread_id] != parents[thread_id + 1]) { - atomicAdd(&toptr[parent], temp[thread_id]); + int64_t bin = blockIdx.x * blockDim.x + threadIdx.x; + if (bin < outlength) { + int64_t c = 0; + int64_t start = (int64_t)offsets[bin]; + int64_t stop = (int64_t)offsets[bin + 1]; + for (int64_t i = start; i < stop; i++) { + if (fromptr[i * 2] != (C)0 || fromptr[i * 2 + 1] != (C)0) c++; } + toptr[bin] = (T)c; } } } diff --git a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_max.cu b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_max.cu index 2a5c518787..8dece56681 100644 --- a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_max.cu +++ b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_max.cu @@ -2,77 +2,37 @@ // BEGIN PYTHON // def f(grid, block, args): -// (toptr, fromptr, parents, offsets, lenparents, outlength, identity, invocation_index, err_code) = args +// (toptr, fromptr, offsets, outlength, identity, invocation_index, err_code) = args // if block[0] > 0: -// grid_size = math.floor((lenparents + block[0] - 1) / block[0]) +// grid_size = math.floor((int(outlength) + block[0] - 1) / block[0]) // else: // grid_size = 1 -// temp = cupy.full(lenparents, cupy.array([identity]), dtype=toptr.dtype) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_max_a", cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, toptr.dtype.type(identity), temp, invocation_index, err_code)) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_max_b", cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, toptr.dtype.type(identity), temp, invocation_index, err_code)) -// out["awkward_reduce_max_a", {dtype_specializations}] = None -// out["awkward_reduce_max_b", {dtype_specializations}] = None +// cuda_kernel_templates.get_function(fetch_specialization(['awkward_reduce_max_kernel', cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, offsets.dtype]))((grid_size,), block, (toptr, fromptr, offsets, outlength, identity, invocation_index, err_code)) +// out['awkward_reduce_max_kernel', {dtype_specializations}] = None // END PYTHON -template +// One thread per bin, mirroring awkward_reduce_max.cpp. +template __global__ void -awkward_reduce_max_a( +awkward_reduce_max_kernel( T* toptr, const C* fromptr, - const U* parents, const V* offsets, - int64_t lenparents, int64_t outlength, T identity, - T* temp, uint64_t invocation_index, uint64_t* err_code) { if (err_code[0] == NO_ERROR) { - int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; - if (thread_id < outlength) { - toptr[thread_id] = identity; - } - } -} - -template -__global__ void -awkward_reduce_max_b( - T* toptr, - const C* fromptr, - const U* parents, - const V* offsets, - int64_t lenparents, - int64_t outlength, - T identity, - T* temp, - uint64_t invocation_index, - uint64_t* err_code) { - if (err_code[0] == NO_ERROR) { - int64_t idx = threadIdx.x; - int64_t thread_id = blockIdx.x * blockDim.x + idx; - - if (thread_id < lenparents) { - temp[thread_id] = fromptr[thread_id]; - } - __syncthreads(); - - if (thread_id < lenparents) { - for (int64_t stride = 1; stride < blockDim.x; stride *= 2) { - T val = identity; - - if (idx >= stride && thread_id < lenparents && parents[thread_id] == parents[thread_id - stride]) { - val = temp[thread_id - stride]; - } - __syncthreads(); - temp[thread_id] = val > temp[thread_id] ? val : temp[thread_id]; - __syncthreads(); - } - - int64_t parent = parents[thread_id]; - if (idx == blockDim.x - 1 || thread_id == lenparents - 1 || parents[thread_id] != parents[thread_id + 1]) { - atomicMax(&toptr[parent], temp[thread_id]); + int64_t bin = blockIdx.x * blockDim.x + threadIdx.x; + if (bin < outlength) { + T best = identity; + int64_t start = (int64_t)offsets[bin]; + int64_t stop = (int64_t)offsets[bin + 1]; + for (int64_t i = start; i < stop; i++) { + C x = fromptr[i]; + if (x > best) best = (T)x; } + toptr[bin] = best; } } } diff --git a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_max_complex.cu b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_max_complex.cu index d48b6ea81c..5ae8ba505c 100644 --- a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_max_complex.cu +++ b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_max_complex.cu @@ -2,85 +2,45 @@ // BEGIN PYTHON // def f(grid, block, args): -// (toptr, fromptr, parents, offsets, lenparents, outlength, identity, invocation_index, err_code) = args +// (toptr, fromptr, offsets, outlength, identity, invocation_index, err_code) = args // if block[0] > 0: -// grid_size = math.floor((lenparents + block[0] - 1) / block[0]) +// grid_size = math.floor((int(outlength) + block[0] - 1) / block[0]) // else: // grid_size = 1 -// temp = cupy.tile([identity, 0], lenparents) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_max_complex_a", cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, toptr.dtype.type(identity), temp, invocation_index, err_code)) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_max_complex_b", cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, toptr.dtype.type(identity), temp, invocation_index, err_code)) -// out["awkward_reduce_max_complex_a", {dtype_specializations}] = None -// out["awkward_reduce_max_complex_b", {dtype_specializations}] = None +// cuda_kernel_templates.get_function(fetch_specialization(['awkward_reduce_max_complex_kernel', cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, offsets.dtype]))((grid_size,), block, (toptr, fromptr, offsets, outlength, identity, invocation_index, err_code)) +// out['awkward_reduce_max_complex_kernel', {dtype_specializations}] = None // END PYTHON -template +// One thread per bin, mirroring awkward_reduce_max_complex.cpp. +template __global__ void -awkward_reduce_max_complex_a( +awkward_reduce_max_complex_kernel( T* toptr, const C* fromptr, - const U* parents, const V* offsets, - int64_t lenparents, int64_t outlength, T identity, - T* temp, uint64_t invocation_index, uint64_t* err_code) { if (err_code[0] == NO_ERROR) { - int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; - - if (thread_id < outlength) { - toptr[thread_id * 2] = identity; - toptr[thread_id * 2 + 1] = 0; - } - } -} - -template -__global__ void -awkward_reduce_max_complex_b( - T* toptr, - const C* fromptr, - const U* parents, - const V* offsets, - int64_t lenparents, - int64_t outlength, - T identity, - T* temp, - uint64_t invocation_index, - uint64_t* err_code) { - if (err_code[0] == NO_ERROR) { - int64_t idx = threadIdx.x; - int64_t thread_id = blockIdx.x * blockDim.x + idx; - if (thread_id < lenparents) { - temp[thread_id * 2] = fromptr[thread_id * 2]; - temp[thread_id * 2 + 1] = fromptr[thread_id * 2 + 1]; - } - __syncthreads(); - - if (thread_id < lenparents) { - for (int stride = 1; stride < blockDim.x; stride *= 2) { - T stride_real = identity; - T stride_imag = 0; - if (idx >= stride && thread_id < lenparents && parents[thread_id] == parents[thread_id - stride]) { - T current_real = temp[thread_id * 2]; - T current_imag = temp[thread_id * 2 + 1]; - stride_real = temp[(thread_id - stride) * 2]; - stride_imag = temp[(thread_id - stride) * 2 + 1]; - - if (stride_real > current_real || (stride_real == current_real && stride_imag > current_imag)) { - temp[thread_id * 2] = stride_real; - temp[thread_id * 2 + 1] = stride_imag; - } + int64_t bin = blockIdx.x * blockDim.x + threadIdx.x; + if (bin < outlength) { + T best_re = identity; + T best_im = (T)0; + bool seen = false; + int64_t start = (int64_t)offsets[bin]; + int64_t stop = (int64_t)offsets[bin + 1]; + for (int64_t i = start; i < stop; i++) { + C x = fromptr[i * 2]; + C y = fromptr[i * 2 + 1]; + if (!seen || x > best_re || (x == best_re && y > best_im)) { + best_re = (T)x; + best_im = (T)y; + seen = true; } - __syncthreads(); - } - - int parent = parents[thread_id]; - if (idx == blockDim.x - 1 || thread_id == lenparents - 1 || parents[thread_id] != parents[thread_id + 1]) { - atomicMaxComplex(&toptr[parent * 2], &toptr[parent * 2 + 1], temp[thread_id * 2], temp[thread_id * 2 + 1]); } + toptr[bin * 2] = best_re; + toptr[bin * 2 + 1] = best_im; } } } diff --git a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_min.cu b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_min.cu index 918240470a..b69adba3c1 100644 --- a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_min.cu +++ b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_min.cu @@ -2,160 +2,37 @@ // BEGIN PYTHON // def f(grid, block, args): -// """ -// Min reduction for sorted, present parents on device: -// (toptr, fromptr, parents, offsets, lenparents, outlength, identity, invocation_index, err_code) -// """ -// (toptr, fromptr, parents, offsets, lenparents, -// outlength, identity, invocation_index, err_code) = args +// (toptr, fromptr, offsets, outlength, identity, invocation_index, err_code) = args // if block[0] > 0: -// grid_size = math.floor((lenparents + block[0] - 1) / block[0]) +// grid_size = math.floor((int(outlength) + block[0] - 1) / block[0]) // else: // grid_size = 1 -// # atomic_toptr initialized to identity -// atomic_toptr = cupy.full(outlength, identity, dtype=fromptr.dtype) -// temp = cupy.zeros(lenparents, dtype=fromptr.dtype) -// cuda_kernel_templates.get_function( -// fetch_specialization([ -// "awkward_reduce_min_a", -// cupy.dtype(toptr.dtype).type, -// cupy.dtype(fromptr.dtype).type, -// parents.dtype, -// offsets.dtype -// ]) -// )((grid_size,), block, -// (toptr, fromptr, parents, offsets, lenparents, outlength, -// atomic_toptr, temp, identity, invocation_index, err_code)) -// cuda_kernel_templates.get_function( -// fetch_specialization([ -// "awkward_reduce_min_b", -// cupy.dtype(toptr.dtype).type, -// cupy.dtype(fromptr.dtype).type, -// parents.dtype, -// offsets.dtype -// ]) -// )((grid_size,), block, -// (toptr, fromptr, parents, offsets, lenparents, outlength, -// atomic_toptr, temp, identity, invocation_index, err_code)) -// cuda_kernel_templates.get_function( -// fetch_specialization([ -// "awkward_reduce_min_c", -// cupy.dtype(toptr.dtype).type, -// cupy.dtype(fromptr.dtype).type, -// parents.dtype, -// offsets.dtype -// ]) -// )((grid_size,), block, -// (toptr, fromptr, parents, offsets, lenparents, outlength, -// atomic_toptr, temp, identity, invocation_index, err_code)) -// out["awkward_reduce_min_a", {dtype_specializations}] = None -// out["awkward_reduce_min_b", {dtype_specializations}] = None -// out["awkward_reduce_min_c", {dtype_specializations}] = None +// cuda_kernel_templates.get_function(fetch_specialization(['awkward_reduce_min_kernel', cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, offsets.dtype]))((grid_size,), block, (toptr, fromptr, offsets, outlength, identity, invocation_index, err_code)) +// out['awkward_reduce_min_kernel', {dtype_specializations}] = None // END PYTHON -template +// One thread per bin, mirroring awkward_reduce_min.cpp. +template __global__ void -awkward_reduce_min_a( - C* toptr, +awkward_reduce_min_kernel( + T* toptr, const C* fromptr, - const U* parents, const V* offsets, - int64_t lenparents, int64_t outlength, - C* atomic_toptr, - C* temp, - C identity, + T identity, uint64_t invocation_index, uint64_t* err_code) { - - if (err_code[0] == NO_ERROR) { - int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; - if (thread_id < outlength) { - atomic_toptr[thread_id] = identity; - } - } -} - -template -__global__ void -awkward_reduce_min_b( - T* toptr, // (unused; kept for signature compatibility) - const C* fromptr, - const U* parents, - const V* offsets, - int64_t lenparents, - int64_t outlength, - C* atomic_toptr, - C* temp, - C identity, - uint64_t invocation_index, - uint64_t* err_code) { - if (err_code[0] == NO_ERROR) { - const C INIT = identity; - - int64_t idx = threadIdx.x; - int64_t thread_id = blockIdx.x * blockDim.x + idx; - - if (thread_id < lenparents) { - temp[thread_id] = fromptr[thread_id]; - } else { - // make sure out-of-range lanes don't affect reduction - // (INIT should be +inf or neutral for min) - // Only needed if this thread participates in syncthreads below - // Safe to write; temp is size lenparents - } - __syncthreads(); - - if (thread_id < lenparents) { - // segmented in-block reduction by parent id - for (int64_t stride = 1; stride < blockDim.x; stride *= 2) { - C other = INIT; - if (idx >= stride && - thread_id - stride >= 0 && - parents[thread_id] == parents[thread_id - stride]) { - other = temp[thread_id - stride]; - } - __syncthreads(); - - if (other < temp[thread_id]) { - temp[thread_id] = other; - } - __syncthreads(); - } - - int64_t parent = parents[thread_id]; - // boundary thread for each parent emits its block-local candidate - if (idx == blockDim.x - 1 || - thread_id == lenparents - 1 || - parents[thread_id] != parents[thread_id + 1]) { - C candidate = temp[thread_id]; - // atomically fold candidate into the per-parent global slot - atomicMin(&atomic_toptr[parent], candidate); + int64_t bin = blockIdx.x * blockDim.x + threadIdx.x; + if (bin < outlength) { + T best = identity; + int64_t start = (int64_t)offsets[bin]; + int64_t stop = (int64_t)offsets[bin + 1]; + for (int64_t i = start; i < stop; i++) { + C x = fromptr[i]; + if (x < best) best = (T)x; } - } - } -} - -template -__global__ void -awkward_reduce_min_c( - C* toptr, - const C* fromptr, - const U* parents, - const V* offsets, - int64_t lenparents, - int64_t outlength, - C* atomic_toptr, - C* temp, - C identity, - uint64_t invocation_index, - uint64_t* err_code) { - - if (err_code[0] == NO_ERROR) { - int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; - if (thread_id < outlength) { - toptr[thread_id] = atomic_toptr[thread_id]; + toptr[bin] = best; } } } diff --git a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_min_complex.cu b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_min_complex.cu index 2f60483f2a..29c769fc32 100644 --- a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_min_complex.cu +++ b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_min_complex.cu @@ -2,85 +2,46 @@ // BEGIN PYTHON // def f(grid, block, args): -// (toptr, fromptr, parents, offsets, lenparents, outlength, identity, invocation_index, err_code) = args +// (toptr, fromptr, offsets, outlength, identity, invocation_index, err_code) = args // if block[0] > 0: -// grid_size = math.floor((lenparents + block[0] - 1) / block[0]) +// grid_size = math.floor((int(outlength) + block[0] - 1) / block[0]) // else: // grid_size = 1 -// temp = cupy.tile([identity, 0], lenparents) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_min_complex_a", cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, toptr.dtype.type(identity), temp, invocation_index, err_code)) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_min_complex_b", cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, toptr.dtype.type(identity), temp, invocation_index, err_code)) -// out["awkward_reduce_min_complex_a", {dtype_specializations}] = None -// out["awkward_reduce_min_complex_b", {dtype_specializations}] = None +// cuda_kernel_templates.get_function(fetch_specialization(['awkward_reduce_min_complex_kernel', cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, offsets.dtype]))((grid_size,), block, (toptr, fromptr, offsets, outlength, identity, invocation_index, err_code)) +// out['awkward_reduce_min_complex_kernel', {dtype_specializations}] = None // END PYTHON -template +// One thread per bin, mirroring awkward_reduce_min_complex.cpp. +// Lexicographic compare on (real, imag). +template __global__ void -awkward_reduce_min_complex_a( +awkward_reduce_min_complex_kernel( T* toptr, const C* fromptr, - const U* parents, const V* offsets, - int64_t lenparents, int64_t outlength, T identity, - T* temp, uint64_t invocation_index, uint64_t* err_code) { if (err_code[0] == NO_ERROR) { - int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; - - if (thread_id < outlength) { - toptr[thread_id * 2] = (T)identity; - toptr[thread_id * 2 + 1] = (T)0; - } - } -} - -template -__global__ void -awkward_reduce_min_complex_b( - T* toptr, - const C* fromptr, - const U* parents, - const V* offsets, - int64_t lenparents, - int64_t outlength, - T identity, - T* temp, - uint64_t invocation_index, - uint64_t* err_code) { - if (err_code[0] == NO_ERROR) { - int64_t idx = threadIdx.x; - int64_t thread_id = blockIdx.x * blockDim.x + idx; - if (thread_id < lenparents) { - temp[thread_id * 2] = fromptr[thread_id * 2]; - temp[thread_id * 2 + 1] = fromptr[thread_id * 2 + 1]; - } - __syncthreads(); - - if (thread_id < lenparents) { - for (int stride = 1; stride < blockDim.x; stride *= 2) { - T stride_real = identity; - T stride_imag = 0; - if (idx >= stride && thread_id < lenparents && parents[thread_id] == parents[thread_id - stride]) { - T current_real = temp[thread_id * 2]; - T current_imag = temp[thread_id * 2 + 1]; - stride_real = temp[(thread_id - stride) * 2]; - stride_imag = temp[(thread_id - stride) * 2 + 1]; - - if (stride_real < current_real || (stride_real == current_real && stride_imag < current_imag)) { - temp[thread_id * 2] = stride_real; - temp[thread_id * 2 + 1] = stride_imag; - } + int64_t bin = blockIdx.x * blockDim.x + threadIdx.x; + if (bin < outlength) { + T best_re = identity; + T best_im = (T)0; + bool seen = false; + int64_t start = (int64_t)offsets[bin]; + int64_t stop = (int64_t)offsets[bin + 1]; + for (int64_t i = start; i < stop; i++) { + C x = fromptr[i * 2]; + C y = fromptr[i * 2 + 1]; + if (!seen || x < best_re || (x == best_re && y < best_im)) { + best_re = (T)x; + best_im = (T)y; + seen = true; } - __syncthreads(); - } - - int parent = parents[thread_id]; - if (idx == blockDim.x - 1 || thread_id == lenparents - 1 || parents[thread_id] != parents[thread_id + 1]) { - atomicMinComplex(&toptr[parent * 2], &toptr[parent * 2 + 1], temp[thread_id * 2], temp[thread_id * 2 + 1]); } + toptr[bin * 2] = best_re; + toptr[bin * 2 + 1] = best_im; } } } diff --git a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_prod.cu b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_prod.cu index ef5b8d5f93..a1e16bba99 100644 --- a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_prod.cu +++ b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_prod.cu @@ -2,102 +2,35 @@ // BEGIN PYTHON // def f(grid, block, args): -// (toptr, fromptr, parents, offsets, lenparents, outlength, invocation_index, err_code) = args +// (toptr, fromptr, offsets, outlength, invocation_index, err_code) = args // if block[0] > 0: -// grid_size = math.floor((lenparents + block[0] - 1) / block[0]) +// grid_size = math.floor((int(outlength) + block[0] - 1) / block[0]) // else: // grid_size = 1 -// atomic_toptr = cupy.array(toptr, dtype=toptr.dtype) -// temp = cupy.ones(lenparents, dtype=toptr.dtype) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_prod_a", cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, atomic_toptr, temp, invocation_index, err_code)) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_prod_b", cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, atomic_toptr, temp, invocation_index, err_code)) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_prod_c", cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, atomic_toptr, temp, invocation_index, err_code)) -// out["awkward_reduce_prod_a", {dtype_specializations}] = None -// out["awkward_reduce_prod_b", {dtype_specializations}] = None -// out["awkward_reduce_prod_c", {dtype_specializations}] = None +// cuda_kernel_templates.get_function(fetch_specialization(['awkward_reduce_prod_kernel', cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, offsets.dtype]))((grid_size,), block, (toptr, fromptr, offsets, outlength, invocation_index, err_code)) +// out['awkward_reduce_prod_kernel', {dtype_specializations}] = None // END PYTHON -template +// One thread per bin, mirroring awkward_reduce_prod.cpp. +template __global__ void -awkward_reduce_prod_a( +awkward_reduce_prod_kernel( T* toptr, const C* fromptr, - const U* parents, const V* offsets, - int64_t lenparents, int64_t outlength, - T* atomic_toptr, - T* temp, uint64_t invocation_index, uint64_t* err_code) { if (err_code[0] == NO_ERROR) { - int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; - - if (thread_id < outlength) { - atomic_toptr[thread_id] = 1; - } - } -} - -template -__global__ void -awkward_reduce_prod_b( - T* toptr, - const C* fromptr, - const U* parents, - const V* offsets, - int64_t lenparents, - int64_t outlength, - T* atomic_toptr, - T* temp, - uint64_t invocation_index, - uint64_t* err_code) { - if (err_code[0] == NO_ERROR) { - int64_t idx = threadIdx.x; - int64_t thread_id = blockIdx.x * blockDim.x + idx; - - if (thread_id < lenparents) { - temp[thread_id] = fromptr[thread_id]; - } - __syncthreads(); - - if (thread_id < lenparents) { - for (int64_t stride = 1; stride < blockDim.x; stride *= 2) { - T val = 1; - if (idx >= stride && thread_id < lenparents && parents[thread_id] == parents[thread_id - stride]) { - val = temp[thread_id - stride]; - } - __syncthreads(); - temp[thread_id] *= val; - __syncthreads(); + int64_t bin = blockIdx.x * blockDim.x + threadIdx.x; + if (bin < outlength) { + T acc = (T)1; + int64_t start = (int64_t)offsets[bin]; + int64_t stop = (int64_t)offsets[bin + 1]; + for (int64_t i = start; i < stop; i++) { + acc *= (T)fromptr[i]; } - - int64_t parent = parents[thread_id]; - if (idx == blockDim.x - 1 || thread_id == lenparents - 1 || parents[thread_id] != parents[thread_id + 1]) { - atomicMul(&atomic_toptr[parent], temp[thread_id]); - } - } - } -} - -template -__global__ void -awkward_reduce_prod_c( - T* toptr, - const C* fromptr, - const U* parents, - const V* offsets, - int64_t lenparents, - int64_t outlength, - T* atomic_toptr, - T* temp, - uint64_t invocation_index, - uint64_t* err_code) { - if (err_code[0] == NO_ERROR) { - int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; - - if (thread_id < outlength) { - toptr[thread_id] = (T)(atomic_toptr[thread_id]); + toptr[bin] = acc; } } } diff --git a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_prod_bool.cu b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_prod_bool.cu index 4e53f24882..4463100301 100644 --- a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_prod_bool.cu +++ b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_prod_bool.cu @@ -2,102 +2,35 @@ // BEGIN PYTHON // def f(grid, block, args): -// (toptr, fromptr, parents, offsets, lenparents, outlength, invocation_index, err_code) = args +// (toptr, fromptr, offsets, outlength, invocation_index, err_code) = args // if block[0] > 0: -// grid_size = math.floor((lenparents + block[0] - 1) / block[0]) +// grid_size = math.floor((int(outlength) + block[0] - 1) / block[0]) // else: // grid_size = 1 -// atomic_toptr = cupy.array(toptr, dtype=cupy.uint32) -// temp = cupy.ones(lenparents, dtype=toptr.dtype) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_prod_bool_a", bool_, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, atomic_toptr, temp, invocation_index, err_code)) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_prod_bool_b", bool_, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, atomic_toptr, temp, invocation_index, err_code)) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_prod_bool_c", bool_, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, atomic_toptr, temp, invocation_index, err_code)) -// out["awkward_reduce_prod_bool_a", {dtype_specializations}] = None -// out["awkward_reduce_prod_bool_b", {dtype_specializations}] = None -// out["awkward_reduce_prod_bool_c", {dtype_specializations}] = None +// cuda_kernel_templates.get_function(fetch_specialization(['awkward_reduce_prod_bool_kernel', cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, offsets.dtype]))((grid_size,), block, (toptr, fromptr, offsets, outlength, invocation_index, err_code)) +// out['awkward_reduce_prod_bool_kernel', {dtype_specializations}] = None // END PYTHON -template +// Per-bin "all nonzero" with early-exit, mirroring awkward_reduce_prod_bool.cpp. +template __global__ void -awkward_reduce_prod_bool_a( +awkward_reduce_prod_bool_kernel( T* toptr, const C* fromptr, - const U* parents, const V* offsets, - int64_t lenparents, int64_t outlength, - uint32_t* atomic_toptr, - T* temp, uint64_t invocation_index, uint64_t* err_code) { if (err_code[0] == NO_ERROR) { - int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; - - if (thread_id < outlength) { - atomic_toptr[thread_id] = 1; - } - } -} - -template -__global__ void -awkward_reduce_prod_bool_b( - T* toptr, - const C* fromptr, - const U* parents, - const V* offsets, - int64_t lenparents, - int64_t outlength, - uint32_t* atomic_toptr, - T* temp, - uint64_t invocation_index, - uint64_t* err_code) { - if (err_code[0] == NO_ERROR) { - int64_t idx = threadIdx.x; - int64_t thread_id = blockIdx.x * blockDim.x + idx; - - if (thread_id < lenparents) { - temp[thread_id] = fromptr[thread_id]; - } - __syncthreads(); - - if (thread_id < lenparents) { - for (int64_t stride = 1; stride < blockDim.x; stride *= 2) { - T val = 1; - if (idx >= stride && thread_id < lenparents && parents[thread_id] == parents[thread_id - stride]) { - val = temp[thread_id - stride]; - } - __syncthreads(); - temp[thread_id] &= (val != 0); - __syncthreads(); + int64_t bin = blockIdx.x * blockDim.x + threadIdx.x; + if (bin < outlength) { + bool all_nonzero = true; + int64_t start = (int64_t)offsets[bin]; + int64_t stop = (int64_t)offsets[bin + 1]; + for (int64_t i = start; i < stop; i++) { + if (fromptr[i] == (C)0) { all_nonzero = false; break; } } - - int64_t parent = parents[thread_id]; - if (idx == blockDim.x - 1 || thread_id == lenparents - 1 || parents[thread_id] != parents[thread_id + 1]) { - atomicAnd(&atomic_toptr[parent], temp[thread_id]); - } - } - } -} - -template -__global__ void -awkward_reduce_prod_bool_c( - T* toptr, - const C* fromptr, - const U* parents, - const V* offsets, - int64_t lenparents, - int64_t outlength, - uint32_t* atomic_toptr, - T* temp, - uint64_t invocation_index, - uint64_t* err_code) { - if (err_code[0] == NO_ERROR) { - int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; - - if (thread_id < outlength) { - toptr[thread_id] = (T)(atomic_toptr[thread_id]); + toptr[bin] = all_nonzero; } } } diff --git a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_prod_bool_complex.cu b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_prod_bool_complex.cu index e416d90b90..1d644ed684 100644 --- a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_prod_bool_complex.cu +++ b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_prod_bool_complex.cu @@ -2,102 +2,39 @@ // BEGIN PYTHON // def f(grid, block, args): -// (toptr, fromptr, parents, offsets, lenparents, outlength, invocation_index, err_code) = args +// (toptr, fromptr, offsets, outlength, invocation_index, err_code) = args // if block[0] > 0: -// grid_size = math.floor((lenparents + block[0] - 1) / block[0]) +// grid_size = math.floor((int(outlength) + block[0] - 1) / block[0]) // else: // grid_size = 1 -// atomic_toptr = cupy.array(toptr, dtype=cupy.uint32) -// temp = cupy.ones(lenparents, dtype=toptr.dtype) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_prod_bool_complex_a", bool_, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, atomic_toptr, temp, invocation_index, err_code)) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_prod_bool_complex_b", bool_, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, atomic_toptr, temp, invocation_index, err_code)) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_prod_bool_complex_c", bool_, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, atomic_toptr, temp, invocation_index, err_code)) -// out["awkward_reduce_prod_bool_complex_a", {dtype_specializations}] = None -// out["awkward_reduce_prod_bool_complex_b", {dtype_specializations}] = None -// out["awkward_reduce_prod_bool_complex_c", {dtype_specializations}] = None +// cuda_kernel_templates.get_function(fetch_specialization(['awkward_reduce_prod_bool_complex_kernel', cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, offsets.dtype]))((grid_size,), block, (toptr, fromptr, offsets, outlength, invocation_index, err_code)) +// out['awkward_reduce_prod_bool_complex_kernel', {dtype_specializations}] = None // END PYTHON -template +// One thread per bin, mirroring awkward_reduce_prod_bool_complex.cpp. +// Early-exit on first complex zero (real == 0 AND imag == 0). +template __global__ void -awkward_reduce_prod_bool_complex_a( +awkward_reduce_prod_bool_complex_kernel( T* toptr, const C* fromptr, - const U* parents, const V* offsets, - int64_t lenparents, int64_t outlength, - uint32_t* atomic_toptr, - T* temp, uint64_t invocation_index, uint64_t* err_code) { if (err_code[0] == NO_ERROR) { - int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; - - if (thread_id < outlength) { - atomic_toptr[thread_id] = 1; - } - } -} - -template -__global__ void -awkward_reduce_prod_bool_complex_b( - T* toptr, - const C* fromptr, - const U* parents, - const V* offsets, - int64_t lenparents, - int64_t outlength, - uint32_t* atomic_toptr, - T* temp, - uint64_t invocation_index, - uint64_t* err_code) { - if (err_code[0] == NO_ERROR) { - int64_t idx = threadIdx.x; - int64_t thread_id = blockIdx.x * blockDim.x + idx; - - if (thread_id < lenparents) { - temp[thread_id] = (fromptr[thread_id * 2] != 0 || fromptr[thread_id * 2 + 1] != 0); - } - __syncthreads(); - - if (thread_id < lenparents) { - for (int64_t stride = 1; stride < blockDim.x; stride *= 2) { - T val = 1; - if (idx >= stride && thread_id < lenparents && parents[thread_id] == parents[thread_id - stride]) { - val = temp[thread_id - stride]; + int64_t bin = blockIdx.x * blockDim.x + threadIdx.x; + if (bin < outlength) { + bool all_nonzero = true; + int64_t start = (int64_t)offsets[bin]; + int64_t stop = (int64_t)offsets[bin + 1]; + for (int64_t i = start; i < stop; i++) { + if (fromptr[i * 2] == (C)0 && fromptr[i * 2 + 1] == (C)0) { + all_nonzero = false; + break; } - __syncthreads(); - temp[thread_id] &= (val != 0); - __syncthreads(); } - - int64_t parent = parents[thread_id]; - if (idx == blockDim.x - 1 || thread_id == lenparents - 1 || parents[thread_id] != parents[thread_id + 1]) { - atomicAnd(&atomic_toptr[parent], temp[thread_id]); - } - } - } -} - -template -__global__ void -awkward_reduce_prod_bool_complex_c( - T* toptr, - const C* fromptr, - const U* parents, - const V* offsets, - int64_t lenparents, - int64_t outlength, - uint32_t* atomic_toptr, - T* temp, - uint64_t invocation_index, - uint64_t* err_code) { - if (err_code[0] == NO_ERROR) { - int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; - - if (thread_id < outlength) { - toptr[thread_id] = (T)(atomic_toptr[thread_id]); + toptr[bin] = all_nonzero; } } } diff --git a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_prod_complex.cu b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_prod_complex.cu index 280f8dfff8..947d519b82 100644 --- a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_prod_complex.cu +++ b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_prod_complex.cu @@ -1,107 +1,44 @@ -// BSD 3-Clause License; see https://github.com/scikit-hep/awkward/blob/main/LICENSE +// BSD 3-Clause License; see https://github.com/scikit-hep/awkward-1.0/blob/main/LICENSE // BEGIN PYTHON // def f(grid, block, args): -// (toptr, fromptr, parents, offsets, lenparents, outlength, invocation_index, err_code) = args +// (toptr, fromptr, offsets, outlength, invocation_index, err_code) = args // if block[0] > 0: -// grid_size = math.floor((lenparents + block[0] - 1) / block[0]) +// grid_size = math.floor((int(outlength) + block[0] - 1) / block[0]) // else: // grid_size = 1 -// temp = cupy.zeros(2 * grid_size * block[0], dtype=toptr.dtype) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_prod_complex_a", cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, temp, invocation_index, err_code)) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_prod_complex_b", cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, temp, invocation_index, err_code)) -// out["awkward_reduce_prod_complex_a", {dtype_specializations}] = None -// out["awkward_reduce_prod_complex_b", {dtype_specializations}] = None +// cuda_kernel_templates.get_function(fetch_specialization(['awkward_reduce_prod_complex_kernel', cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, offsets.dtype]))((grid_size,), block, (toptr, fromptr, offsets, outlength, invocation_index, err_code)) +// out['awkward_reduce_prod_complex_kernel', {dtype_specializations}] = None // END PYTHON -template +// One thread per bin, mirroring awkward_reduce_prod_complex.cpp. +// Complex multiplication: (a + b·i)(c + d·i) = (ac - bd) + (ad + bc)·i. +template __global__ void -awkward_reduce_prod_complex_a( +awkward_reduce_prod_complex_kernel( T* toptr, const C* fromptr, - const U* parents, const V* offsets, - int64_t lenparents, int64_t outlength, - T* temp, // temp is a global buffer sized 2*lenparents, pre-filled with (1,0) uint64_t invocation_index, uint64_t* err_code) { if (err_code[0] == NO_ERROR) { - int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; - - // initialize output slots to 1 + 0j (neutral element for product) - if (thread_id < outlength) { - toptr[thread_id * 2] = (T)1; // real - toptr[thread_id * 2 + 1] = (T)0; // imag - } - } -} - -template -__global__ void -awkward_reduce_prod_complex_b( - T* toptr, - const C* fromptr, - const U* parents, - const V* offsets, - int64_t lenparents, - int64_t outlength, - T* temp, // global workspace: length 2*lenparents (real, imag pairs) - uint64_t invocation_index, - uint64_t* err_code) { - if (err_code[0] == NO_ERROR) { - - int64_t idx = threadIdx.x; - int64_t thread_id = blockIdx.x * blockDim.x + idx; - - // load input into temp (real, imag) - if (thread_id < lenparents) { - temp[thread_id * 2] = fromptr[thread_id * 2]; - temp[thread_id * 2 + 1] = fromptr[thread_id * 2 + 1]; - } - // ensure other threads don't read uninitialized entries in the block - __syncthreads(); - - // Perform in-block tree reduction across threads, but only merge elements - // that share the same parent. We'll reduce so that the rightmost thread - // in each run of equal-parents holds the product of that run. - for (int64_t stride = 1; stride < blockDim.x; stride *= 2) { - T right_r = (T)1; - T right_i = (T)0; - - if (thread_id < lenparents) { - int64_t partner = thread_id - stride; - if (idx >= stride && partner >= 0 && partner < lenparents && - parents[thread_id] == parents[partner]) { - right_r = temp[partner * 2]; - right_i = temp[partner * 2 + 1]; - } - } - __syncthreads(); - - if (thread_id < lenparents) { - T left_r = temp[thread_id * 2]; - T left_i = temp[thread_id * 2 + 1]; - // complex multiply: (left) * (right) - T res_r = left_r * right_r - left_i * right_i; - T res_i = left_r * right_i + left_i * right_r; - temp[thread_id * 2] = res_r; - temp[thread_id * 2 + 1] = res_i; - } - __syncthreads(); - } - - if (thread_id < lenparents) { - int64_t parent = parents[thread_id]; - if (idx == blockDim.x - 1 || thread_id == lenparents - 1 || parents[thread_id] != parents[thread_id + 1]) { - T cand_r = temp[thread_id * 2]; - T cand_i = temp[thread_id * 2 + 1]; - // atomic multiplication into toptr[parent*2 .. parent*2+1] - // assume atomicMulComplex(&real, &imag, cand_real, cand_imag) exists and - // does an atomic read-modify-write multiply in double precision, preserving - // IEEE semantics (NaN/Inf propagation). - atomicMulComplex(&toptr[parent * 2], &toptr[parent * 2 + 1], cand_r, cand_i); + int64_t bin = blockIdx.x * blockDim.x + threadIdx.x; + if (bin < outlength) { + T a = (T)1; + T b = (T)0; + int64_t start = (int64_t)offsets[bin]; + int64_t stop = (int64_t)offsets[bin + 1]; + for (int64_t i = start; i < stop; i++) { + T c = (T)fromptr[i * 2]; + T d = (T)fromptr[i * 2 + 1]; + T na = a * c - b * d; + T nb = a * d + b * c; + a = na; + b = nb; } + toptr[bin * 2] = a; + toptr[bin * 2 + 1] = b; } } } diff --git a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_sum.cu b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_sum.cu index cbe0db6799..ed9c397286 100644 --- a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_sum.cu +++ b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_sum.cu @@ -2,75 +2,37 @@ // BEGIN PYTHON // def f(grid, block, args): -// (toptr, fromptr, parents, offsets, lenparents, outlength, invocation_index, err_code) = args +// (toptr, fromptr, offsets, outlength, invocation_index, err_code) = args +// # Offsets-pipeline: one thread per output bin, mirroring the CPU +// # awkward_reduce_sum.cpp loop. No host-side parents derivation; +// # the kernel walks fromptr[offsets[bin] .. offsets[bin+1]) directly. // if block[0] > 0: -// grid_size = math.floor((lenparents + block[0] - 1) / block[0]) +// grid_size = math.floor((int(outlength) + block[0] - 1) / block[0]) // else: // grid_size = 1 -// temp = cupy.zeros(lenparents, dtype=toptr.dtype) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_sum_a", cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, temp, invocation_index, err_code)) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_sum_b", cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, temp, invocation_index, err_code)) -// out["awkward_reduce_sum_a", {dtype_specializations}] = None -// out["awkward_reduce_sum_b", {dtype_specializations}] = None +// cuda_kernel_templates.get_function(fetch_specialization(['awkward_reduce_sum_kernel', cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, offsets.dtype]))((grid_size,), block, (toptr, fromptr, offsets, outlength, invocation_index, err_code)) +// out['awkward_reduce_sum_kernel', {dtype_specializations}] = None // END PYTHON -template +template __global__ void -awkward_reduce_sum_a( +awkward_reduce_sum_kernel( T* toptr, const C* fromptr, - const U* parents, const V* offsets, - int64_t lenparents, int64_t outlength, - T* temp, uint64_t invocation_index, uint64_t* err_code) { if (err_code[0] == NO_ERROR) { - int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; - - if (thread_id < outlength) { - toptr[thread_id] = 0; - } - } -} - -template -__global__ void -awkward_reduce_sum_b( - T* toptr, - const C* fromptr, - const U* parents, - const V* offsets, - int64_t lenparents, - int64_t outlength, - T* temp, - uint64_t invocation_index, - uint64_t* err_code) { - if (err_code[0] == NO_ERROR) { - int64_t idx = threadIdx.x; - int64_t thread_id = blockIdx.x * blockDim.x + idx; - - if (thread_id < lenparents) { - temp[thread_id] = fromptr[thread_id]; - } - __syncthreads(); - - if (thread_id < lenparents) { - for (int64_t stride = 1; stride < blockDim.x; stride *= 2) { - T val = 0; - if (idx >= stride && thread_id < lenparents && parents[thread_id] == parents[thread_id - stride]) { - val = temp[thread_id - stride]; - } - __syncthreads(); - temp[thread_id] += val; - __syncthreads(); - } - - int64_t parent = parents[thread_id]; - if (idx == blockDim.x - 1 || thread_id == lenparents - 1 || parents[thread_id] != parents[thread_id + 1]) { - atomicAdd(&toptr[parent], temp[thread_id]); + int64_t bin = blockIdx.x * blockDim.x + threadIdx.x; + if (bin < outlength) { + T acc = (T)0; + int64_t start = (int64_t)offsets[bin]; + int64_t stop = (int64_t)offsets[bin + 1]; + for (int64_t i = start; i < stop; i++) { + acc += (T)fromptr[i]; } + toptr[bin] = acc; } } } diff --git a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_sum_bool.cu b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_sum_bool.cu index 0ccac6c3ea..77caf07fca 100644 --- a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_sum_bool.cu +++ b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_sum_bool.cu @@ -2,87 +2,35 @@ // BEGIN PYTHON // def f(grid, block, args): -// (toptr, fromptr, parents, offsets, lenparents, outlength, invocation_index, err_code) = args -// if outlength == 0: -// return # Nothing to do, skip the rest -// block_size = min(outlength, 1024) -// grid_size = max(1, math.ceil((max(lenparents, outlength) + block_size - 1) / block_size)) -// atomic_toptr = cupy.array(toptr, dtype=cupy.uint32) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_sum_bool_a", bool_, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), (block_size,), (toptr, fromptr, parents, offsets, lenparents, outlength, atomic_toptr, toptr, invocation_index, err_code)) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_sum_bool_b", bool_, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), (block_size,), (toptr, fromptr, parents, offsets, lenparents, outlength, atomic_toptr, toptr, invocation_index, err_code)) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_sum_bool_c", bool_, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), (block_size,), (toptr, fromptr, parents, offsets, lenparents, outlength, atomic_toptr, toptr, invocation_index, err_code)) -// out["awkward_reduce_sum_bool_a", {dtype_specializations}] = None -// out["awkward_reduce_sum_bool_b", {dtype_specializations}] = None -// out["awkward_reduce_sum_bool_c", {dtype_specializations}] = None +// (toptr, fromptr, offsets, outlength, invocation_index, err_code) = args +// if block[0] > 0: +// grid_size = math.floor((int(outlength) + block[0] - 1) / block[0]) +// else: +// grid_size = 1 +// cuda_kernel_templates.get_function(fetch_specialization(['awkward_reduce_sum_bool_kernel', cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, offsets.dtype]))((grid_size,), block, (toptr, fromptr, offsets, outlength, invocation_index, err_code)) +// out['awkward_reduce_sum_bool_kernel', {dtype_specializations}] = None // END PYTHON -template +// Per-bin "any nonzero" with early-exit, mirroring awkward_reduce_sum_bool.cpp. +template __global__ void -awkward_reduce_sum_bool_a( +awkward_reduce_sum_bool_kernel( T* toptr, const C* fromptr, - const U* parents, const V* offsets, - int64_t lenparents, int64_t outlength, - uint32_t* atomic_toptr, - T* /*unused*/, uint64_t invocation_index, uint64_t* err_code) { if (err_code[0] == NO_ERROR) { - int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; - - if (thread_id < outlength) { - atomic_toptr[thread_id] = 0; - } - } -} - -template -__global__ void -awkward_reduce_sum_bool_b( - T* toptr, - const C* fromptr, - const U* parents, - const V* offsets, - int64_t lenparents, - int64_t outlength, - uint32_t* atomic_toptr, - T* /*unused*/, - uint64_t invocation_index, - uint64_t* err_code) { - - if (err_code[0] == NO_ERROR) { - int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; - - if (thread_id < lenparents) { - T val = (fromptr[thread_id] != 0) ? 1 : 0; - int64_t parent = parents[thread_id]; - if (parent >= 0 && parent < outlength) { - atomicOr(&atomic_toptr[parent], val); + int64_t bin = blockIdx.x * blockDim.x + threadIdx.x; + if (bin < outlength) { + bool found = false; + int64_t start = (int64_t)offsets[bin]; + int64_t stop = (int64_t)offsets[bin + 1]; + for (int64_t i = start; i < stop; i++) { + if (fromptr[i] != (C)0) { found = true; break; } } - } - } -} - -template -__global__ void -awkward_reduce_sum_bool_c( - T* toptr, - const C* fromptr, - const U* parents, - const V* offsets, - int64_t lenparents, - int64_t outlength, - uint32_t* atomic_toptr, - T* /*unused*/, - uint64_t invocation_index, - uint64_t* err_code) { - if (err_code[0] == NO_ERROR) { - int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; - - if (thread_id < outlength) { - toptr[thread_id] = (T)(atomic_toptr[thread_id]); + toptr[bin] = found; } } } diff --git a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_sum_bool_complex.cu b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_sum_bool_complex.cu index aa8f7b0a88..3e160f7e36 100644 --- a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_sum_bool_complex.cu +++ b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_sum_bool_complex.cu @@ -2,102 +2,39 @@ // BEGIN PYTHON // def f(grid, block, args): -// (toptr, fromptr, parents, offsets, lenparents, outlength, invocation_index, err_code) = args +// (toptr, fromptr, offsets, outlength, invocation_index, err_code) = args // if block[0] > 0: -// grid_size = math.floor((lenparents + block[0] - 1) / block[0]) +// grid_size = math.floor((int(outlength) + block[0] - 1) / block[0]) // else: // grid_size = 1 -// atomic_toptr = cupy.array(toptr, dtype=cupy.uint32) -// temp = cupy.zeros(lenparents, dtype=toptr.dtype) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_sum_bool_complex_a", bool_, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, atomic_toptr, temp, invocation_index, err_code)) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_sum_bool_complex_b", bool_, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, atomic_toptr, temp, invocation_index, err_code)) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_sum_bool_complex_c", bool_, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, atomic_toptr, temp, invocation_index, err_code)) -// out["awkward_reduce_sum_bool_complex_a", {dtype_specializations}] = None -// out["awkward_reduce_sum_bool_complex_b", {dtype_specializations}] = None -// out["awkward_reduce_sum_bool_complex_c", {dtype_specializations}] = None +// cuda_kernel_templates.get_function(fetch_specialization(['awkward_reduce_sum_bool_complex_kernel', cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, offsets.dtype]))((grid_size,), block, (toptr, fromptr, offsets, outlength, invocation_index, err_code)) +// out['awkward_reduce_sum_bool_complex_kernel', {dtype_specializations}] = None // END PYTHON -template +// One thread per bin, mirroring awkward_reduce_sum_bool_complex.cpp. +// Early-exit on first nonzero complex value. +template __global__ void -awkward_reduce_sum_bool_complex_a( +awkward_reduce_sum_bool_complex_kernel( T* toptr, const C* fromptr, - const U* parents, const V* offsets, - int64_t lenparents, int64_t outlength, - uint32_t* atomic_toptr, - T* temp, uint64_t invocation_index, uint64_t* err_code) { if (err_code[0] == NO_ERROR) { - int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; - - if (thread_id < outlength) { - atomic_toptr[thread_id] = 0; - } - } -} - -template -__global__ void -awkward_reduce_sum_bool_complex_b( - T* toptr, - const C* fromptr, - const U* parents, - const V* offsets, - int64_t lenparents, - int64_t outlength, - uint32_t* atomic_toptr, - T* temp, - uint64_t invocation_index, - uint64_t* err_code) { - if (err_code[0] == NO_ERROR) { - int64_t idx = threadIdx.x; - int64_t thread_id = blockIdx.x * blockDim.x + idx; - - if (thread_id < lenparents) { - temp[thread_id] = (fromptr[thread_id * 2] != 0 || fromptr[thread_id * 2 + 1] != 0); - } - __syncthreads(); - - if (thread_id < lenparents) { - for (int64_t stride = 1; stride < blockDim.x; stride *= 2) { - T val = 0; - if (idx >= stride && thread_id < lenparents && parents[thread_id] == parents[thread_id - stride]) { - val = temp[thread_id - stride]; + int64_t bin = blockIdx.x * blockDim.x + threadIdx.x; + if (bin < outlength) { + bool found = false; + int64_t start = (int64_t)offsets[bin]; + int64_t stop = (int64_t)offsets[bin + 1]; + for (int64_t i = start; i < stop; i++) { + if (fromptr[i * 2] != (C)0 || fromptr[i * 2 + 1] != (C)0) { + found = true; + break; } - __syncthreads(); - temp[thread_id] |= val; - __syncthreads(); } - - int64_t parent = parents[thread_id]; - if (idx == blockDim.x - 1 || thread_id == lenparents - 1 || parents[thread_id] != parents[thread_id + 1]) { - atomicOr(&atomic_toptr[parent], temp[thread_id]); - } - } - } -} - -template -__global__ void -awkward_reduce_sum_bool_complex_c( - T* toptr, - const C* fromptr, - const U* parents, - const V* offsets, - int64_t lenparents, - int64_t outlength, - uint32_t* atomic_toptr, - T* temp, - uint64_t invocation_index, - uint64_t* err_code) { - if (err_code[0] == NO_ERROR) { - int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; - - if (thread_id < outlength) { - toptr[thread_id] = (T)(atomic_toptr[thread_id]); + toptr[bin] = found; } } } diff --git a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_sum_complex.cu b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_sum_complex.cu index 3ca07e6580..747e4cae88 100644 --- a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_sum_complex.cu +++ b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_sum_complex.cu @@ -2,83 +2,38 @@ // BEGIN PYTHON // def f(grid, block, args): -// (toptr, fromptr, parents, offsets, lenparents, outlength, invocation_index, err_code) = args +// (toptr, fromptr, offsets, outlength, invocation_index, err_code) = args // if block[0] > 0: -// grid_size = math.floor((lenparents + block[0] - 1) / block[0]) +// grid_size = math.floor((int(outlength) + block[0] - 1) / block[0]) // else: // grid_size = 1 -// temp = cupy.zeros(2 * lenparents, dtype=toptr.dtype) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_sum_complex_a", cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, temp, invocation_index, err_code)) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_sum_complex_b", cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, temp, invocation_index, err_code)) -// out["awkward_reduce_sum_complex_a", {dtype_specializations}] = None -// out["awkward_reduce_sum_complex_b", {dtype_specializations}] = None +// cuda_kernel_templates.get_function(fetch_specialization(['awkward_reduce_sum_complex_kernel', cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, offsets.dtype]))((grid_size,), block, (toptr, fromptr, offsets, outlength, invocation_index, err_code)) +// out['awkward_reduce_sum_complex_kernel', {dtype_specializations}] = None // END PYTHON -template +// One thread per bin, mirroring awkward_reduce_sum_complex.cpp. +template __global__ void -awkward_reduce_sum_complex_a( +awkward_reduce_sum_complex_kernel( T* toptr, const C* fromptr, - const U* parents, const V* offsets, - int64_t lenparents, int64_t outlength, - T* temp, uint64_t invocation_index, uint64_t* err_code) { if (err_code[0] == NO_ERROR) { - int64_t thread_id = blockIdx.x * blockDim.x + threadIdx.x; - - if (thread_id < outlength) { - toptr[thread_id * 2] = (T)0; - toptr[thread_id * 2 + 1] = (T)0; - } - } -} - -template -__global__ void -awkward_reduce_sum_complex_b( - T* toptr, - const C* fromptr, - const U* parents, - const V* offsets, - int64_t lenparents, - int64_t outlength, - T* temp, - uint64_t invocation_index, - uint64_t* err_code) { - if (err_code[0] == NO_ERROR) { - int64_t idx = threadIdx.x; - int64_t thread_id = blockIdx.x * blockDim.x + idx; - - if (thread_id < lenparents) { - temp[thread_id * 2] = fromptr[thread_id * 2]; - temp[thread_id * 2 + 1] = fromptr[thread_id * 2 + 1]; - } - __syncthreads(); - - for (int64_t stride = 1; stride < blockDim.x; stride *= 2) { + int64_t bin = blockIdx.x * blockDim.x + threadIdx.x; + if (bin < outlength) { T real = (T)0; T imag = (T)0; - if (idx >= stride && thread_id < lenparents && parents[thread_id] == parents[thread_id - stride]) { - real = temp[(thread_id - stride) * 2]; - imag = temp[(thread_id - stride) * 2 + 1]; - } - __syncthreads(); - if (thread_id < lenparents) { - temp[thread_id * 2] += real; - temp[thread_id * 2 + 1] += imag; - } - __syncthreads(); - } - - if (thread_id < lenparents) { - int64_t parent = parents[thread_id]; - if (idx == blockDim.x - 1 || thread_id == lenparents - 1 || parents[thread_id] != parents[thread_id + 1]) { - atomicAdd(&toptr[parent * 2], temp[thread_id * 2]); - atomicAdd(&toptr[parent * 2 + 1], temp[thread_id * 2 + 1]); + int64_t start = (int64_t)offsets[bin]; + int64_t stop = (int64_t)offsets[bin + 1]; + for (int64_t i = start; i < stop; i++) { + real += (T)fromptr[i * 2]; + imag += (T)fromptr[i * 2 + 1]; } + toptr[bin * 2] = real; + toptr[bin * 2 + 1] = imag; } } } diff --git a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_sum_int32_bool_64.cu b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_sum_int32_bool_64.cu index afcd3a62cc..2e1a49d722 100644 --- a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_sum_int32_bool_64.cu +++ b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_sum_int32_bool_64.cu @@ -2,14 +2,27 @@ // BEGIN PYTHON // def f(grid, block, args): -// (toptr, fromptr, parents, offsets, lenparents, outlength, invocation_index, err_code) = args +// (toptr, fromptr, offsets, outlength, invocation_index, err_code) = args +// # Offsets-pipeline: derive parents from offsets+outlength so the kernel +// # body (which still reads parents internally) runs unchanged. +// lenparents = int(offsets[int(outlength)].item()) if int(outlength) >= 0 else 0 +// if int(outlength) > 0 and lenparents > 0: +// # CuPy refuses cupy.ndarray as `repeats`; use searchsorted to +// # derive parents on-device with the same result. +// parents = cupy.searchsorted( +// offsets[1:int(outlength) + 1], +// cupy.arange(int(lenparents), dtype=cupy.int64), +// side='right', +// ).astype(cupy.int64) +// else: +// parents = cupy.zeros(0, dtype=cupy.int64) // if block[0] > 0: // grid_size = math.floor((lenparents + block[0] - 1) / block[0]) // else: // grid_size = 1 // temp = cupy.zeros(lenparents, dtype=toptr.dtype) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_sum_int32_bool_64_a", int32, bool_, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, temp, invocation_index, err_code)) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_sum_int32_bool_64_b", int32, bool_, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, temp, invocation_index, err_code)) +// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_sum_int32_bool_64_a", cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, temp, invocation_index, err_code)) +// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_sum_int32_bool_64_b", cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, temp, invocation_index, err_code)) // out["awkward_reduce_sum_int32_bool_64_a", {dtype_specializations}] = None // out["awkward_reduce_sum_int32_bool_64_b", {dtype_specializations}] = None // END PYTHON diff --git a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_sum_int64_bool_64.cu b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_sum_int64_bool_64.cu index 7cea9bf514..42732f81e8 100644 --- a/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_sum_int64_bool_64.cu +++ b/src/awkward/_connect/cuda/cuda_kernels/awkward_reduce_sum_int64_bool_64.cu @@ -2,14 +2,27 @@ // BEGIN PYTHON // def f(grid, block, args): -// (toptr, fromptr, parents, offsets, lenparents, outlength, invocation_index, err_code) = args +// (toptr, fromptr, offsets, outlength, invocation_index, err_code) = args +// # Offsets-pipeline: derive parents from offsets+outlength so the kernel +// # body (which still reads parents internally) runs unchanged. +// lenparents = int(offsets[int(outlength)].item()) if int(outlength) >= 0 else 0 +// if int(outlength) > 0 and lenparents > 0: +// # CuPy refuses cupy.ndarray as `repeats`; use searchsorted to +// # derive parents on-device with the same result. +// parents = cupy.searchsorted( +// offsets[1:int(outlength) + 1], +// cupy.arange(int(lenparents), dtype=cupy.int64), +// side='right', +// ).astype(cupy.int64) +// else: +// parents = cupy.zeros(0, dtype=cupy.int64) // if block[0] > 0: // grid_size = math.floor((lenparents + block[0] - 1) / block[0]) // else: // grid_size = 1 // temp = cupy.zeros(lenparents, dtype=toptr.dtype) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_sum_int64_bool_64_a", int64, bool_, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, temp, invocation_index, err_code)) -// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_sum_int64_bool_64_b", int64, bool_, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, temp, invocation_index, err_code)) +// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_sum_int64_bool_64_a", cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, temp, invocation_index, err_code)) +// cuda_kernel_templates.get_function(fetch_specialization(["awkward_reduce_sum_int64_bool_64_b", cupy.dtype(toptr.dtype).type, cupy.dtype(fromptr.dtype).type, parents.dtype, offsets.dtype]))((grid_size,), block, (toptr, fromptr, parents, offsets, lenparents, outlength, temp, invocation_index, err_code)) // out["awkward_reduce_sum_int64_bool_64_a", {dtype_specializations}] = None // out["awkward_reduce_sum_int64_bool_64_b", {dtype_specializations}] = None // END PYTHON diff --git a/src/awkward/_connect/cuda/reducers.py b/src/awkward/_connect/cuda/reducers.py index 1dfb9e1708..70a8eb64cf 100644 --- a/src/awkward/_connect/cuda/reducers.py +++ b/src/awkward/_connect/cuda/reducers.py @@ -4,24 +4,22 @@ from abc import abstractmethod -from cuda.compute import ( - ZipIterator, - gpu_struct, - reduce_into, -) - -import awkward as ak -from awkward import _reducers +import awkward as ak # noqa: F401 (kept for type-annotated reducer subclasses) from awkward._nplikes.numpy_like import NumpyMetadata -from awkward._nplikes.shape import ShapeItem from awkward._reducers import Reducer from awkward._typing import Any as AnyType -from awkward._typing import Final, Self, TypeVar +from awkward._typing import Self, TypeVar np = NumpyMetadata.instance() DTypeLike = AnyType +# Registry of CUDA-specific reducer overloads. Currently empty — the CUDA +# backend dispatches reducers through `_backends/cupy.py:_get_cuda_compute_impl` +# directly into `_connect/cuda/_compute.py`'s CCCL-based helpers, so no +# subclass of `CudaComputeReducer` is registered. The scaffolding is kept +# here as the recognised home for future CUDA-specific reducer overloads +# (mirrors the populated framework in `_connect/jax/reducers.py`). _overloads: dict[type[Reducer], type[CudaComputeReducer]] = {} @@ -55,390 +53,9 @@ def _dtype_for_kernel(cls, dtype: DTypeLike) -> DTypeLike: return dtype -# TODO: change this for a custom one? -def apply_positional_corrections( - reduced: ak.contents.NumpyArray, - parents: ak.index.Index | ak.index.ZeroIndex, - offsets: ak.index.Index | ak.index.EmptyIndex, - starts: ak.index.Index, - shifts: ak.index.Index | None, -): - if shifts is None: - assert ( - parents.nplike is reduced.backend.nplike - and starts.nplike is reduced.backend.nplike - ) - reduced.backend.maybe_kernel_error( - reduced.backend[ - "awkward_NumpyArray_reduce_adjust_starts_64", - reduced.dtype.type, - parents.dtype.type, - starts.dtype.type, - ]( - reduced.data, - reduced.length, - parents.data, - starts.data, - ) - ) - return reduced - else: - assert ( - parents.nplike is reduced.backend.nplike - and starts.nplike is reduced.backend.nplike - and shifts.nplike is reduced.backend.nplike - ) - reduced.backend.maybe_kernel_error( - reduced.backend[ - "awkward_NumpyArray_reduce_adjust_starts_shifts_64", - reduced.dtype.type, - parents.dtype.type, - starts.dtype.type, - shifts.dtype.type, - ]( - reduced.data, - reduced.length, - parents.data, - starts.data, - shifts.data, - ) - ) - return reduced - - -@overloads(_reducers.ArgMin) -class ArgMin(CudaComputeReducer): - name: Final = "argmin" - needs_position: Final = True - preferred_dtype: Final = np.int64 - - @classmethod - def from_kernel_reducer(cls, reducer: Reducer) -> Self: - assert isinstance(reducer, _reducers.ArgMin) - return cls() - - @classmethod - def _return_dtype(cls, given_dtype): - return np.int64 - - @classmethod - def _dtype_for_kernel(cls, dtype: DTypeLike) -> DTypeLike: - dtype = np.dtype(dtype) - if dtype == np.bool_: - return np.dtype(np.int8) - else: - return super()._dtype_for_kernel(dtype) - - def axis_none_reducer(self): - return AxisNoneReducerArgMaxMin(self.name) - - def apply( - self, - array: ak.contents.NumpyArray, - parents: ak.index.Index | ak.index.ZeroIndex, - offsets: ak.index.Index | ak.index.EmptyIndex, - starts: ak.index.Index, - shifts: ak.index.Index | None, - outlength: ShapeItem, - ) -> ak.contents.NumpyArray: - assert isinstance(array, ak.contents.NumpyArray) - # View array data in kernel-supported dtype - kernel_array_data = array.data.view(self._dtype_for_kernel(array.dtype)) - result = array.backend.nplike.empty(outlength, dtype=np.int64) - - if array.dtype.type in (np.complex128, np.complex64): - assert parents.nplike is array.backend.nplike - array.backend.maybe_kernel_error( - array.backend[ - "awkward_reduce_argmin_complex", - result.dtype.type, - kernel_array_data.dtype.type, - parents.dtype.type, - offsets.dtype.type, - ]( - result, - kernel_array_data, - parents.data, - offsets.data, - parents.length, - outlength, - ) - ) - else: - assert parents.nplike is array.backend.nplike - from ._compute import awkward_reduce_argmin - - awkward_reduce_argmin( - result, - kernel_array_data, - parents.data, - offsets.data, - parents.length, - starts.data, - outlength, - ) - - result_array = ak.contents.NumpyArray(result, backend=array.backend) - corrected_data = apply_positional_corrections( - result_array, parents, offsets, starts, shifts - ) - return corrected_data - - -def awkward_axis_none_reduce_argmin(array): - import cupy as cp - - data_dtype = array.dtype - index_dtype = np.int64 - # initialize the minimum value depending on the dtype - if data_dtype.kind in "iu": # int/uint - max = cp.iinfo(data_dtype).max - elif data_dtype.kind == "f": # float - max = cp.finfo(data_dtype).max - elif data_dtype.kind == "c": # complex - max = complex(cp.finfo(data_dtype).max, cp.finfo(data_dtype).max) - else: - raise TypeError("Unsupported dtype to get the minimal value") - - ak_array = gpu_struct( - { - "data": data_dtype, - "local_index": index_dtype, - } - ) - - if data_dtype.kind == "c": - # Compare real and then imaginary part for complex numbers (same way as in cpu kernels) - def reduce_op(a: ak_array, b: ak_array): - real_a, imag_a = a.data.real, a.data.imag - real_b, imag_b = b.data.real, b.data.imag - # we are sorting lexicographically - if (real_b, imag_b) != (real_a, imag_a): - return b if (real_b, imag_b) < (real_a, imag_a) else a - # if the two values are equal, keep the index of the FIRST min value we encounter - if a.local_index < b.local_index: - return a - elif b.local_index < a.local_index: - return b - else: - raise IndexError("Encountered two values with the same index") - else: - # Normal numeric comparison - def reduce_op(a: ak_array, b: ak_array): - if a.data != b.data: - return a if a.data < b.data else b - elif a.local_index != b.local_index: - # for the equal values always return the one with the lowest index - return a if a.local_index < b.local_index else b - else: - raise IndexError("Encountered two values with the same index") - - n = len(array) - indices = cp.arange(n, dtype=index_dtype) - # Combine data and their indices into a single structure - input_struct = ZipIterator(array, indices) - - result_scalar = cp.empty(1, dtype=ak_array) - h_init = ak_array(max, -1) - reduce_into( - d_in=input_struct, - d_out=result_scalar, - op=reduce_op, - num_items=len(array), - h_init=h_init, - ) - - # return the index of the maximum value - return result_scalar.item()[1] - - -@overloads(_reducers.ArgMax) -class ArgMax(CudaComputeReducer): - name: Final = "argmax" - needs_position: Final = True - preferred_dtype: Final = np.int64 - - @classmethod - def from_kernel_reducer(cls, reducer: Reducer) -> Self: - assert isinstance(reducer, _reducers.ArgMax) - return cls() - - @classmethod - def _return_dtype(cls, given_dtype): - return np.int64 - - @classmethod - def _dtype_for_kernel(cls, dtype: DTypeLike) -> DTypeLike: - dtype = np.dtype(dtype) - if dtype == np.bool_: - return np.dtype(np.int8) - else: - return super()._dtype_for_kernel(dtype) - - def axis_none_reducer(self): - return AxisNoneReducerArgMaxMin(self.name) - - def apply( - self, - array: ak.contents.NumpyArray, - parents: ak.index.Index | ak.index.ZeroIndex, - offsets: ak.index.Index | ak.index.EmptyIndex, - starts: ak.index.Index, - shifts: ak.index.Index | None, - outlength: ShapeItem, - ) -> ak.contents.NumpyArray: - assert isinstance(array, ak.contents.NumpyArray) - # View array data in kernel-supported dtype - kernel_array_data = array.data.view(self._dtype_for_kernel(array.dtype)) - result = array.backend.nplike.empty(outlength, dtype=np.int64) - - if array.dtype.type in (np.complex128, np.complex64): - assert parents.nplike is array.backend.nplike - array.backend.maybe_kernel_error( - array.backend[ - "awkward_reduce_argmax_complex", - result.dtype.type, - kernel_array_data.dtype.type, - parents.dtype.type, - offsets.dtype.type, - ]( - result, - kernel_array_data, - parents.data, - offsets.data, - parents.length, - outlength, - ) - ) - else: - assert parents.nplike is array.backend.nplike - from ._compute import awkward_reduce_argmax - - awkward_reduce_argmax( - result, - kernel_array_data, - parents.data, - offsets.data, - parents.length, - starts.data, - outlength, - ) - - result_array = ak.contents.NumpyArray(result, backend=array.backend) - corrected_data = apply_positional_corrections( - result_array, parents, offsets, starts, shifts - ) - return corrected_data - - -class AxisNoneReducerArgMaxMin: - # This will construct shifts which we can use to `apply_positional_corrections` at the end. - needs_position: Final = True - - def __init__(self, name: str): - self.name = name - - def apply( - self, - array: ak.contents.NumpyArray, - parents: ak.index.Index | ak.index.ZeroIndex, - offsets: ak.index.Index | ak.index.EmptyIndex, - starts: ak.index.Index, - shifts: ak.index.Index | None, - _outlength: ShapeItem, - ) -> ak.contents.NumpyArray: - assert isinstance(array, ak.contents.NumpyArray) - if array.dtype.kind == "M": - raise ValueError( - f"cannot compute the {self.name} (ak.{self.name}) of {array.dtype!r}" - ) - - nplike = array.backend.nplike - reduce_fn = globals()[f"awkward_axis_none_reduce_{self.name}"] - result_scalar = reduce_fn(array.data) - - # is this line needed? - result_array = nplike._module.asarray(result_scalar).reshape((1,)) - - result_array = ak.contents.NumpyArray(result_array, backend=array.backend) - # We need to do this, as for argmax we care for the position of the max element and not only the data itself. - corrected_data = apply_positional_corrections( - result_array, parents, offsets, starts, shifts - ) - - return corrected_data - - -def awkward_axis_none_reduce_argmax(array): - import cupy as cp - - data_dtype = array.dtype - index_dtype = np.int64 - # initialize the minimum value depending on the dtype - if data_dtype.kind in "iu": # int/uint - min = cp.iinfo(data_dtype).min - elif data_dtype.kind == "f": # float - min = cp.finfo(data_dtype).min - elif data_dtype.kind == "c": # complex - min = complex(cp.finfo(data_dtype).min, cp.finfo(data_dtype).min) - else: - raise TypeError("Unsupported dtype to get the minimal value") - - ak_array = gpu_struct( - { - "data": data_dtype, - "local_index": index_dtype, - } - ) - - if data_dtype.kind == "c": - # Compare real and then imaginary part for complex numbers (same way as in cpu kernels) - def reduce_op(a: ak_array, b: ak_array): - real_a, imag_a = a.data.real, a.data.imag - real_b, imag_b = b.data.real, b.data.imag - # we are sorting lexicographically - if (real_b, imag_b) != (real_a, imag_a): - return b if (real_b, imag_b) > (real_a, imag_a) else a - # if the two values are equal, keep the index of the FIRST max value we encounter - if a.local_index < b.local_index: - return a - elif b.local_index < a.local_index: - return b - else: - raise IndexError("Encountered two values with the same index") - else: - # Normal numeric comparison - def reduce_op(a: ak_array, b: ak_array): - if a.data != b.data: - return a if a.data > b.data else b - elif a.local_index != b.local_index: - # for the equal values always return the one with the lowest index - return a if a.local_index < b.local_index else b - else: - raise IndexError("Encountered two values with the same index") - - n = len(array) - indices = cp.arange(n, dtype=index_dtype) - # Combine data and their indices into a single structure - input_struct = ZipIterator(array, indices) - - result_scalar = cp.empty(1, dtype=ak_array) - h_init = ak_array(min, -1) - reduce_into( - d_in=input_struct, - d_out=result_scalar, - op=reduce_op, - num_items=len(array), - h_init=h_init, - ) - - # return the index of the maximum value - return result_scalar.item()[1] - - def get_cuda_compute_reducer(reducer: Reducer) -> Reducer: """ - Returns the CUDA-specific reducer if registered, + Returns the CUDA-specific reducer if one is registered via @overloads, otherwise falls back to the original reducer. """ impl = _overloads.get(type(reducer)) diff --git a/src/awkward/_connect/jax/reducers.py b/src/awkward/_connect/jax/reducers.py index ca8db723c9..79688d3871 100644 --- a/src/awkward/_connect/jax/reducers.py +++ b/src/awkward/_connect/jax/reducers.py @@ -38,31 +38,60 @@ def from_kernel_reducer(cls, reducer: Reducer) -> Self: raise NotImplementedError -def awkward_JAXNumpyArray_reduce_adjust_starts_64(toptr, outlength, parents, starts): - if outlength == 0 or parents.size == 0: +# Offsets-pipeline note: +# `apply()` and these helpers no longer take a `parents` argument. Where JAX's +# `segment_*` ops still need a per-element segment-id array we synthesise it +# from `offsets` via `_parents_from_offsets`. For the positional-correction +# helpers, the bin index is simply the output position `k` (because +# argmin/argmax always pick an element that belongs to bin `k`), so we use +# `arange(outlength)` directly and avoid the parents indirection — mirroring +# the simplification already made in the CPU/CUDA reduce_adjust_starts kernels. + + +def _parents_from_offsets(offsets, outlength): + """Materialise a per-element segment-id array from `offsets`. + + `offsets` has length `outlength + 1`. The returned array has length + `offsets[outlength]` and contains, at position `i`, the bin index `k` such + that `offsets[k] <= i < offsets[k+1]`. + """ + outlen_i = int(outlength) + if outlen_i == 0: + return jax.numpy.zeros(0, dtype=jax.numpy.int64) + counts = offsets[1 : outlen_i + 1] - offsets[:outlen_i] + return jax.numpy.repeat( + jax.numpy.arange(outlen_i, dtype=jax.numpy.int64), + counts, + total_repeat_length=int(offsets[outlen_i]), + ) + + +def awkward_JAXNumpyArray_reduce_adjust_starts_64(toptr, outlength, starts): + if outlength == 0: return toptr identity = jax.numpy.iinfo(jax.numpy.int64).max valid = toptr[:outlength] != identity - safe_sub_toptr = jax.numpy.where(valid, toptr[:outlength], 0) - parent_indices = parents[safe_sub_toptr] - adjustments = starts[parent_indices] + # parents[toptr[k]] == k by construction (argmin/argmax always picks an + # element of bin k), so the bin index is just `k`. + adjustments = starts[: int(outlength)] updated = jax.numpy.where(valid, toptr[:outlength] - adjustments, toptr[:outlength]) return toptr.at[:outlength].set(updated) def awkward_JAXNumpyArray_reduce_adjust_starts_shifts_64( - toptr, outlength, parents, starts, shifts + toptr, outlength, starts, shifts ): - if outlength == 0 or parents.size == 0: + if outlength == 0: return toptr identity = jax.numpy.iinfo(jax.numpy.int64).max valid = toptr[:outlength] != identity safe_sub_toptr = jax.numpy.where(valid, toptr[:outlength], 0) - parent_indices = parents[safe_sub_toptr] - delta = shifts[safe_sub_toptr] - starts[parent_indices] + # parents[toptr[k]] == k, so we look up `starts[k]` directly. `shifts` is + # per-element of the flat input, so it's still indexed by toptr[k]. + delta = shifts[safe_sub_toptr] - starts[: int(outlength)] updated = jax.numpy.where(valid, toptr[:outlength] + delta, toptr[:outlength]) return toptr.at[:outlength].set(updated) @@ -70,30 +99,28 @@ def awkward_JAXNumpyArray_reduce_adjust_starts_shifts_64( def apply_positional_corrections( reduced: ak.contents.NumpyArray, - parents: ak.index.Index, offsets: ak.index.Index | ak.index.EmptyIndex, starts: ak.index.Index, shifts: ak.index.Index | None, ) -> ak._nplikes.ArrayLike: if shifts is None: assert ( - parents.nplike is reduced.backend.nplike + offsets.nplike is reduced.backend.nplike and starts.nplike is reduced.backend.nplike ) return awkward_JAXNumpyArray_reduce_adjust_starts_64( - reduced.data, reduced.length, parents.data, starts.data + reduced.data, reduced.length, starts.data ) else: assert ( - parents.nplike is reduced.backend.nplike + offsets.nplike is reduced.backend.nplike and starts.nplike is reduced.backend.nplike and shifts.nplike is reduced.backend.nplike ) return awkward_JAXNumpyArray_reduce_adjust_starts_shifts_64( reduced.data, reduced.length, - parents.data, starts.data, shifts.data, ) @@ -144,18 +171,18 @@ def _return_dtype(cls, given_dtype): def apply( self, array: ak.contents.NumpyArray, - parents: ak.index.Index, offsets: ak.index.Index | ak.index.EmptyIndex, starts: ak.index.Index, shifts: ak.index.Index | None, outlength: ShapeItem, ) -> ak.contents.NumpyArray: assert isinstance(array, ak.contents.NumpyArray) - result = segment_argmin(*maybe_materialize(array.data, parents.data), outlength) + parents_data = _parents_from_offsets(offsets.data, outlength) + result = segment_argmin(*maybe_materialize(array.data, parents_data), outlength) result = jax.numpy.asarray(result, dtype=self.preferred_dtype) result_array = ak.contents.NumpyArray(result, backend=array.backend) corrected_data = apply_positional_corrections( - result_array, parents, offsets, starts, shifts + result_array, offsets, starts, shifts ) return ak.contents.NumpyArray(corrected_data, backend=array.backend) @@ -205,18 +232,18 @@ def _return_dtype(cls, given_dtype): def apply( self, array: ak.contents.NumpyArray, - parents: ak.index.Index, offsets: ak.index.Index | ak.index.EmptyIndex, starts: ak.index.Index, shifts: ak.index.Index | None, outlength: ShapeItem, ) -> ak.contents.NumpyArray: assert isinstance(array, ak.contents.NumpyArray) - result = segment_argmax(*maybe_materialize(array.data, parents.data), outlength) + parents_data = _parents_from_offsets(offsets.data, outlength) + result = segment_argmax(*maybe_materialize(array.data, parents_data), outlength) result = jax.numpy.asarray(result, dtype=self.preferred_dtype) result_array = ak.contents.NumpyArray(result, backend=array.backend) corrected_data = apply_positional_corrections( - result_array, parents, offsets, starts, shifts + result_array, offsets, starts, shifts ) return ak.contents.NumpyArray(corrected_data, backend=array.backend) @@ -239,18 +266,18 @@ def _return_dtype(cls, given_dtype): def apply( self, array: ak.contents.NumpyArray, - parents: ak.index.Index, offsets: ak.index.Index | ak.index.EmptyIndex, starts: ak.index.Index, shifts: ak.index.Index | None, outlength: ShapeItem, ) -> ak.contents.NumpyArray: assert isinstance(array, ak.contents.NumpyArray) + parents_data = _parents_from_offsets(offsets.data, outlength) result = jax.numpy.ones_like( *maybe_materialize(array.data), dtype=self.preferred_dtype ) result = jax.ops.segment_sum( - result, *maybe_materialize(parents.data), outlength + result, *maybe_materialize(parents_data), outlength ) result = jax.numpy.asarray(result, dtype=self.preferred_dtype) @@ -299,15 +326,15 @@ def _return_dtype(cls, given_dtype): def apply( self, array: ak.contents.NumpyArray, - parents: ak.index.Index, offsets: ak.index.Index | ak.index.EmptyIndex, starts: ak.index.Index, shifts: ak.index.Index | None, outlength: ShapeItem, ) -> ak.contents.NumpyArray: assert isinstance(array, ak.contents.NumpyArray) + parents_data = _parents_from_offsets(offsets.data, outlength) result = segment_count_nonzero( - *maybe_materialize(array.data, parents.data), outlength + *maybe_materialize(array.data, parents_data), outlength ) result = jax.numpy.asarray(result, dtype=self.preferred_dtype) @@ -331,7 +358,6 @@ def axis_none_reducer(self) -> AxisNoneSum: def apply( self, array: ak.contents.NumpyArray, - parents: ak.index.Index, offsets: ak.index.Index | ak.index.EmptyIndex, starts: ak.index.Index, shifts: ak.index.Index | None, @@ -345,8 +371,9 @@ def apply( input_array = array.data.astype(np.int64) else: input_array = array.data + parents_data = _parents_from_offsets(offsets.data, outlength) result = jax.ops.segment_sum( - *maybe_materialize(input_array, parents.data), outlength + *maybe_materialize(input_array, parents_data), outlength ) if array.dtype.kind == "m": @@ -373,7 +400,6 @@ def from_kernel_reducer(cls, reducer: Reducer) -> Self: def apply( self, array: ak.contents.NumpyArray, - parents: ak.index.Index, offsets: ak.index.Index | ak.index.EmptyIndex, starts: ak.index.Index, shifts: ak.index.Index | None, @@ -469,7 +495,6 @@ def from_kernel_reducer(cls, reducer: Reducer) -> Self: def apply( self, array: ak.contents.NumpyArray, - parents: ak.index.Index, offsets: ak.index.Index | ak.index.EmptyIndex, starts: ak.index.Index, shifts: ak.index.Index | None, @@ -477,8 +502,9 @@ def apply( ) -> ak.contents.NumpyArray: assert isinstance(array, ak.contents.NumpyArray) # See issue https://github.com/google/jax/issues/9296 + parents_data = _parents_from_offsets(offsets.data, outlength) result = segment_prod_with_negatives( - *maybe_materialize(array.data, parents.data), outlength + *maybe_materialize(array.data, parents_data), outlength ) if np.issubdtype(array.dtype, np.complexfloating): @@ -526,15 +552,15 @@ def _max_initial(initial, type): def apply( self, array: ak.contents.NumpyArray, - parents: ak.index.Index, offsets: ak.index.Index | ak.index.EmptyIndex, starts: ak.index.Index, shifts: ak.index.Index | None, outlength: ShapeItem, ) -> ak.contents.NumpyArray: assert isinstance(array, ak.contents.NumpyArray) + parents_data = _parents_from_offsets(offsets.data, outlength) result = jax.ops.segment_max( - *maybe_materialize(array.data, parents.data), outlength + *maybe_materialize(array.data, parents_data), outlength ) if array.dtype is not np.dtype(bool): result = result.at[result == 0].set(self._max_initial(None, array.dtype)) @@ -562,15 +588,15 @@ def _return_dtype(cls, given_dtype): def apply( self, array: ak.contents.NumpyArray, - parents: ak.index.Index, offsets: ak.index.Index | ak.index.EmptyIndex, starts: ak.index.Index, shifts: ak.index.Index | None, outlength: ShapeItem, ) -> ak.contents.NumpyArray: assert isinstance(array, ak.contents.NumpyArray) + parents_data = _parents_from_offsets(offsets.data, outlength) result = jax.ops.segment_min( - *maybe_materialize(array.data, parents.data), outlength + *maybe_materialize(array.data, parents_data), outlength ) result = jax.numpy.asarray(result, dtype=bool) @@ -620,7 +646,6 @@ def _min_initial(initial, type): def apply( self, array: ak.contents.NumpyArray, - parents: ak.index.Index, offsets: ak.index.Index | ak.index.EmptyIndex, starts: ak.index.Index, shifts: ak.index.Index | None, @@ -628,8 +653,9 @@ def apply( ) -> ak.contents.NumpyArray: assert isinstance(array, ak.contents.NumpyArray) + parents_data = _parents_from_offsets(offsets.data, outlength) result = jax.ops.segment_min( - *maybe_materialize(array.data, parents.data), outlength + *maybe_materialize(array.data, parents_data), outlength ) result = jax.numpy.minimum(result, self._min_initial(self.initial, array.dtype)) @@ -665,7 +691,6 @@ def from_kernel_reducer(cls, reducer: Reducer) -> Self: def apply( self, array: ak.contents.NumpyArray, - parents: ak.index.Index, offsets: ak.index.Index | ak.index.EmptyIndex, starts: ak.index.Index, shifts: ak.index.Index | None, @@ -725,7 +750,6 @@ def _max_initial(initial, type): def apply( self, array: ak.contents.NumpyArray, - parents: ak.index.Index, offsets: ak.index.Index | ak.index.EmptyIndex, starts: ak.index.Index, shifts: ak.index.Index | None, @@ -733,8 +757,9 @@ def apply( ) -> ak.contents.NumpyArray: assert isinstance(array, ak.contents.NumpyArray) + parents_data = _parents_from_offsets(offsets.data, outlength) result = jax.ops.segment_max( - *maybe_materialize(array.data, parents.data), outlength + *maybe_materialize(array.data, parents_data), outlength ) result = jax.numpy.maximum(result, self._max_initial(self.initial, array.dtype)) @@ -770,7 +795,6 @@ def from_kernel_reducer(cls, reducer: Reducer) -> Self: def apply( self, array: ak.contents.NumpyArray, - parents: ak.index.Index, offsets: ak.index.Index | ak.index.EmptyIndex, starts: ak.index.Index, shifts: ak.index.Index | None, diff --git a/src/awkward/_do.py b/src/awkward/_do.py index f15658a65e..8b48cf3ad0 100644 --- a/src/awkward/_do.py +++ b/src/awkward/_do.py @@ -145,9 +145,8 @@ def combinations( def is_unique(layout, axis: Integral | None = None) -> bool: negaxis = axis if axis is None else -axis starts = ak.index.Index64.zeros(1, nplike=layout._backend.nplike) - parents = ak.index.ZeroIndex(layout.length, layout.backend.nplike) - offsets = ak.index.EmptyIndex(2, layout.backend.nplike) - return layout._is_unique(negaxis, starts, parents, offsets, 1) + offsets = ak.index.Index64([0, layout.length], nplike=layout.backend.nplike) + return layout._is_unique(negaxis, starts, offsets, 1) def unique(layout: Content, axis=None): @@ -176,10 +175,9 @@ def unique(layout: Content, axis=None): ) starts = ak.index.Index64.zeros(1, nplike=layout._backend.nplike) - parents = ak.index.ZeroIndex(layout.length, layout.backend.nplike) - offsets = ak.index.EmptyIndex(2, layout.backend.nplike) + offsets = ak.index.Index64([0, layout.length], nplike=layout.backend.nplike) - return layout._unique(negaxis, starts, parents, offsets, 1) + return layout._unique(negaxis, starts, offsets, 1) raise AxisError( f"unique expects axis 'None' or '-1', got axis={axis} that is not supported yet" @@ -269,15 +267,13 @@ def reduce( reducer = specialization starts = ak.index.Index64.zeros(1, layout.backend.nplike) - parents = ak.index.ZeroIndex(layout.length, layout.backend.nplike) - offsets = ak.index.EmptyIndex(2, layout.backend.nplike) + offsets = ak.index.Index64([0, layout.length], nplike=layout.backend.nplike) shifts = None next = layout._reduce_next( reducer, 1, starts, shifts, - parents, offsets, 1, mask, @@ -325,15 +321,14 @@ def reduce( del original_reducer # not used below this point starts = ak.index.Index64.zeros(1, layout.backend.nplike) - parents = ak.index.ZeroIndex(layout.length, layout.backend.nplike) - offsets = ak.index.EmptyIndex(2, layout.backend.nplike) + offsets = ak.index.Index64([0, layout.length], nplike=layout.backend.nplike) + shifts = None next = layout._reduce_next( reducer, negaxis, starts, shifts, - parents, offsets, 1, mask, @@ -378,13 +373,12 @@ def argsort( ) starts = ak.index.Index64.zeros(1, nplike=layout.backend.nplike) - parents = ak.index.ZeroIndex(layout.length, layout.backend.nplike) - offsets = ak.index.EmptyIndex(2, layout.backend.nplike) + offsets = ak.index.Index64([0, layout.length], nplike=layout.backend.nplike) + return layout._argsort_next( negaxis, starts, None, - parents, offsets, 1, ascending, @@ -419,9 +413,9 @@ def sort( ) starts = ak.index.Index64.zeros(1, nplike=layout.backend.nplike) - parents = ak.index.ZeroIndex(layout.length, layout.backend.nplike) - offsets = ak.index.EmptyIndex(2, layout.backend.nplike) - return layout._sort_next(negaxis, starts, parents, offsets, 1, ascending, stable) + offsets = ak.index.Index64([0, layout.length], nplike=layout.backend.nplike) + + return layout._sort_next(negaxis, starts, offsets, 1, ascending, stable) def touch_data(layout: Content, recursive: bool = True): diff --git a/src/awkward/_reducers.py b/src/awkward/_reducers.py index 97f9583751..474fe832a0 100644 --- a/src/awkward/_reducers.py +++ b/src/awkward/_reducers.py @@ -41,8 +41,7 @@ def axis_none_reducer(self) -> Reducer | None: def apply( self, array: ak.contents.NumpyArray, - parents: ak.index.Index | ak.index.ZeroIndex, - offsets: ak.index.Index | ak.index.EmptyIndex, + offsets: ak.index.Index, starts: ak.index.Index, shifts: ak.index.Index | None, outlength: ShapeItem, @@ -85,32 +84,31 @@ def _promote_integer_rank(cls, given_dtype: DTypeLike) -> DTypeLike: def apply_positional_corrections( reduced: ak.contents.NumpyArray, - parents: ak.index.Index | ak.index.ZeroIndex, - offsets: ak.index.Index | ak.index.EmptyIndex, + offsets: ak.index.Index, starts: ak.index.Index, shifts: ak.index.Index | None, ): if shifts is None: assert ( - parents.nplike is reduced.backend.nplike + offsets.nplike is reduced.backend.nplike and starts.nplike is reduced.backend.nplike ) reduced.backend.maybe_kernel_error( reduced.backend[ "awkward_NumpyArray_reduce_adjust_starts_64", reduced.dtype.type, - parents.dtype.type, + offsets.dtype.type, starts.dtype.type, ]( reduced.data, reduced.length, - parents.data, + offsets.data, starts.data, ) ) else: assert ( - parents.nplike is reduced.backend.nplike + offsets.nplike is reduced.backend.nplike and starts.nplike is reduced.backend.nplike and shifts.nplike is reduced.backend.nplike ) @@ -118,13 +116,13 @@ def apply_positional_corrections( reduced._backend[ "awkward_NumpyArray_reduce_adjust_starts_shifts_64", reduced.dtype.type, - parents.dtype.type, + offsets.dtype.type, starts.dtype.type, shifts.dtype.type, ]( reduced.data, reduced.length, - parents.data, + offsets.data, starts.data, shifts.data, ) @@ -147,56 +145,48 @@ def _dtype_for_kernel(cls, dtype: DTypeLike) -> DTypeLike: def apply( self, array: ak.contents.NumpyArray, - parents: ak.index.Index | ak.index.ZeroIndex, - offsets: ak.index.Index | ak.index.EmptyIndex, + offsets: ak.index.Index, starts: ak.index.Index, shifts: ak.index.Index | None, outlength: ShapeItem, ) -> ak.contents.NumpyArray: assert isinstance(array, ak.contents.NumpyArray) - # View array data in kernel-supported dtype kernel_array_data = array.data.view(self._dtype_for_kernel(array.dtype)) result = array.backend.nplike.empty(outlength, dtype=np.int64) if array.dtype.type in (np.complex128, np.complex64): - assert parents.nplike is array.backend.nplike + assert offsets.nplike is array.backend.nplike array.backend.maybe_kernel_error( array.backend[ "awkward_reduce_argmin_complex", result.dtype.type, kernel_array_data.dtype.type, - parents.dtype.type, offsets.dtype.type, ]( result, kernel_array_data, - parents.data, offsets.data, - parents.length, outlength, ) ) else: - assert parents.nplike is array.backend.nplike + assert offsets.nplike is array.backend.nplike array.backend.maybe_kernel_error( array.backend[ "awkward_reduce_argmin", result.dtype.type, kernel_array_data.dtype.type, - parents.dtype.type, offsets.dtype.type, starts.dtype.type, ]( result, kernel_array_data, - parents.data, offsets.data, - parents.length, starts.data, outlength, ) ) result_array = ak.contents.NumpyArray(result, backend=array.backend) - apply_positional_corrections(result_array, parents, offsets, starts, shifts) + apply_positional_corrections(result_array, offsets, starts, shifts) return result_array @@ -216,56 +206,48 @@ def _dtype_for_kernel(cls, dtype: DTypeLike) -> DTypeLike: def apply( self, array: ak.contents.NumpyArray, - parents: ak.index.Index | ak.index.ZeroIndex, - offsets: ak.index.Index | ak.index.EmptyIndex, + offsets: ak.index.Index, starts: ak.index.Index, shifts: ak.index.Index | None, outlength: ShapeItem, ) -> ak.contents.NumpyArray: assert isinstance(array, ak.contents.NumpyArray) - # View array data in kernel-supported dtype kernel_array_data = array.data.view(self._dtype_for_kernel(array.dtype)) result = array.backend.nplike.empty(outlength, dtype=np.int64) if array.dtype.type in (np.complex128, np.complex64): - assert parents.nplike is array.backend.nplike + assert offsets.nplike is array.backend.nplike array.backend.maybe_kernel_error( array.backend[ "awkward_reduce_argmax_complex", result.dtype.type, kernel_array_data.dtype.type, - parents.dtype.type, offsets.dtype.type, ]( result, kernel_array_data, - parents.data, offsets.data, - parents.length, outlength, ) ) else: - assert parents.nplike is array.backend.nplike + assert offsets.nplike is array.backend.nplike array.backend.maybe_kernel_error( array.backend[ "awkward_reduce_argmax", result.dtype.type, kernel_array_data.dtype.type, - parents.dtype.type, - starts.dtype.type, offsets.dtype.type, + starts.dtype.type, ]( result, kernel_array_data, - parents.data, offsets.data, - parents.length, starts.data, outlength, ) ) result_array = ak.contents.NumpyArray(result, backend=array.backend) - apply_positional_corrections(result_array, parents, offsets, starts, shifts) + apply_positional_corrections(result_array, offsets, starts, shifts) return result_array @@ -277,22 +259,20 @@ class Count(KernelReducer): def apply( self, array: ak.contents.NumpyArray, - parents: ak.index.Index | ak.index.ZeroIndex, - offsets: ak.index.Index | ak.index.EmptyIndex, + offsets: ak.index.Index, starts: ak.index.Index, shifts: ak.index.Index | None, outlength: ShapeItem, ) -> ak.contents.NumpyArray: assert isinstance(array, ak.contents.NumpyArray) result = array.backend.nplike.empty(outlength, dtype=np.int64) - assert parents.nplike is array.backend.nplike + assert offsets.nplike is array.backend.nplike array.backend.maybe_kernel_error( array.backend[ - "awkward_reduce_count_64", result.dtype.type, parents.dtype.type + "awkward_reduce_count_64", result.dtype.type, offsets.dtype.type ]( result, - parents.data, - parents.length, + offsets.data, outlength, ) ) @@ -307,46 +287,42 @@ class CountNonzero(KernelReducer): def apply( self, array: ak.contents.NumpyArray, - parents: ak.index.Index | ak.index.ZeroIndex, - offsets: ak.index.Index | ak.index.EmptyIndex, + offsets: ak.index.Index, starts: ak.index.Index, shifts: ak.index.Index | None, outlength: ShapeItem, ) -> ak.contents.NumpyArray: assert isinstance(array, ak.contents.NumpyArray) - # View array data in kernel-supported dtype kernel_array_data = array.data.view(self._dtype_for_kernel(array.dtype)) result = array.backend.nplike.empty(outlength, dtype=np.int64) if np.issubdtype(array.dtype, np.complexfloating): - assert parents.nplike is array.backend.nplike + assert offsets.nplike is array.backend.nplike array.backend.maybe_kernel_error( array.backend[ "awkward_reduce_countnonzero_complex", result.dtype.type, kernel_array_data.dtype.type, - parents.dtype.type, + offsets.dtype.type, ]( result, kernel_array_data, - parents.data, - parents.length, + offsets.data, outlength, ) ) else: - assert parents.nplike is array.backend.nplike + assert offsets.nplike is array.backend.nplike array.backend.maybe_kernel_error( array.backend[ "awkward_reduce_countnonzero", result.dtype.type, kernel_array_data.dtype.type, - parents.dtype.type, + offsets.dtype.type, ]( result, kernel_array_data, - parents.data, - parents.length, + offsets.data, outlength, ) ) @@ -364,8 +340,7 @@ def axis_none_reducer(self) -> AxisNoneSum: def apply( self, array: ak.contents.NumpyArray, - parents: ak.index.Index | ak.index.ZeroIndex, - offsets: ak.index.Index | ak.index.EmptyIndex, + offsets: ak.index.Index, starts: ak.index.Index, shifts: ak.index.Index | None, outlength: ShapeItem, @@ -374,45 +349,38 @@ def apply( if array.dtype.kind == "M": raise ValueError(f"cannot compute the sum (ak.sum) of {array.dtype!r}") - # Boolean kernels are special; the result is _not_ a boolean if array.dtype == np.bool_: result = array.backend.nplike.empty( self._length_for_kernel(array.dtype.type, outlength), dtype=self._promote_integer_rank(np.bool_), ) if result.dtype in (np.int64, np.uint64): - assert parents.nplike is array.backend.nplike + assert offsets.nplike is array.backend.nplike array.backend.maybe_kernel_error( array.backend[ "awkward_reduce_sum_int64_bool_64", np.int64, array.dtype.type, - parents.dtype.type, offsets.dtype.type, ]( result, array.data, - parents.data, offsets.data, - parents.length, outlength, ) ) elif result.dtype in (np.int32, np.uint32): - assert parents.nplike is array.backend.nplike + assert offsets.nplike is array.backend.nplike array.backend.maybe_kernel_error( array.backend[ "awkward_reduce_sum_int32_bool_64", np.int32, array.dtype.type, - parents.dtype.type, offsets.dtype.type, ]( result, array.data, - parents.data, offsets.data, - parents.length, outlength, ) ) @@ -420,45 +388,38 @@ def apply( raise NotImplementedError return ak.contents.NumpyArray(result, backend=array.backend) else: - # View array data in kernel-supported dtype kernel_array_data = array.data.view(self._dtype_for_kernel(array.dtype)) result = array.backend.nplike.empty( self._length_for_kernel(array.dtype.type, outlength), dtype=self._promote_integer_rank(kernel_array_data.dtype), ) if array.dtype.type in (np.complex128, np.complex64): - assert parents.nplike is array.backend.nplike + assert offsets.nplike is array.backend.nplike array.backend.maybe_kernel_error( array.backend[ "awkward_reduce_sum_complex", result.dtype.type, kernel_array_data.dtype.type, - parents.dtype.type, offsets.dtype.type, ]( result, kernel_array_data, - parents.data, offsets.data, - parents.length, outlength, ) ) else: - assert parents.nplike is array.backend.nplike + assert offsets.nplike is array.backend.nplike array.backend.maybe_kernel_error( array.backend[ "awkward_reduce_sum", result.dtype.type, kernel_array_data.dtype.type, - parents.dtype.type, offsets.dtype.type, ]( result, kernel_array_data, - parents.data, offsets.data, - parents.length, outlength, ) ) @@ -473,8 +434,7 @@ class AxisNoneSum(Sum): def apply( self, array: ak.contents.NumpyArray, - _parents: ak.index.Index | ak.index.ZeroIndex, - _offsets: ak.index.Index | ak.index.EmptyIndex, + _offsets: ak.index.Index, _starts: ak.index.Index, _shifts: ak.index.Index | None, _outlength: ShapeItem, @@ -499,8 +459,7 @@ class Prod(KernelReducer): def apply( self, array: ak.contents.NumpyArray, - parents: ak.index.Index | ak.index.ZeroIndex, - offsets: ak.index.Index | ak.index.EmptyIndex, + offsets: ak.index.Index, starts: ak.index.Index, shifts: ak.index.Index | None, outlength: ShapeItem, @@ -509,27 +468,22 @@ def apply( if array.dtype.kind.upper() == "M": raise ValueError(f"cannot compute the product (ak.prod) of {array.dtype!r}") - # Boolean kernels are special; the result is _not_ a boolean if array.dtype == np.bool_: result = array.backend.nplike.empty( outlength, - # This kernel, unlike sum, returns bools! dtype=np.bool_, ) - assert parents.nplike is array.backend.nplike + assert offsets.nplike is array.backend.nplike array.backend.maybe_kernel_error( array.backend[ "awkward_reduce_prod_bool", result.dtype.type, array.dtype.type, - parents.dtype.type, offsets.dtype.type, ]( result, array.data, - parents.data, offsets.data, - parents.length, outlength, ) ) @@ -540,45 +494,38 @@ def apply( backend=array.backend, ) else: - # View array data in kernel-supported dtype kernel_array_data = array.data.view(self._dtype_for_kernel(array.dtype)) result = array.backend.nplike.empty( self._length_for_kernel(array.dtype.type, outlength), dtype=self._promote_integer_rank(kernel_array_data.dtype), ) if array.dtype.type in (np.complex128, np.complex64): - assert parents.nplike is array.backend.nplike + assert offsets.nplike is array.backend.nplike array.backend.maybe_kernel_error( array.backend[ "awkward_reduce_prod_complex", result.dtype.type, kernel_array_data.dtype.type, - parents.dtype.type, offsets.dtype.type, ]( result, kernel_array_data, - parents.data, offsets.data, - parents.length, outlength, ) ) else: - assert parents.nplike is array.backend.nplike + assert offsets.nplike is array.backend.nplike array.backend.maybe_kernel_error( array.backend[ "awkward_reduce_prod", result.dtype.type, kernel_array_data.dtype.type, - parents.dtype.type, offsets.dtype.type, ]( result, kernel_array_data, - parents.data, offsets.data, - parents.length, outlength, ) ) @@ -597,50 +544,42 @@ class Any(KernelReducer): def apply( self, array: ak.contents.NumpyArray, - parents: ak.index.Index | ak.index.ZeroIndex, - offsets: ak.index.Index | ak.index.EmptyIndex, + offsets: ak.index.Index, starts: ak.index.Index, shifts: ak.index.Index | None, outlength: ShapeItem, ) -> ak.contents.NumpyArray: assert isinstance(array, ak.contents.NumpyArray) - # View array data in kernel-supported dtype kernel_array_data = array.data.view(self._dtype_for_kernel(array.dtype)) result = array.backend.nplike.empty(outlength, dtype=np.bool_) if array.dtype.type in (np.complex128, np.complex64): - assert parents.nplike is array.backend.nplike + assert offsets.nplike is array.backend.nplike array.backend.maybe_kernel_error( array.backend[ "awkward_reduce_sum_bool_complex", result.dtype.type, kernel_array_data.dtype.type, - parents.dtype.type, offsets.dtype.type, ]( result, kernel_array_data, - parents.data, offsets.data, - parents.length, outlength, ) ) else: - assert parents.nplike is array.backend.nplike + assert offsets.nplike is array.backend.nplike array.backend.maybe_kernel_error( array.backend[ "awkward_reduce_sum_bool", result.dtype.type, kernel_array_data.dtype.type, - parents.dtype.type, offsets.dtype.type, ]( result, kernel_array_data, - parents.data, offsets.data, - parents.length, outlength, ) ) @@ -655,50 +594,42 @@ class All(KernelReducer): def apply( self, array: ak.contents.NumpyArray, - parents: ak.index.Index | ak.index.ZeroIndex, - offsets: ak.index.Index | ak.index.EmptyIndex, + offsets: ak.index.Index, starts: ak.index.Index, shifts: ak.index.Index | None, outlength: ShapeItem, ) -> ak.contents.NumpyArray: assert isinstance(array, ak.contents.NumpyArray) - # View array data in kernel-supported dtype kernel_array_data = array.data.view(self._dtype_for_kernel(array.dtype)) result = array.backend.nplike.empty(outlength, dtype=np.bool_) if array.dtype.type in (np.complex128, np.complex64): - assert parents.nplike is array.backend.nplike + assert offsets.nplike is array.backend.nplike array.backend.maybe_kernel_error( array.backend[ "awkward_reduce_prod_bool_complex", result.dtype.type, kernel_array_data.dtype.type, - parents.dtype.type, offsets.dtype.type, ]( result, kernel_array_data, - parents.data, offsets.data, - parents.length, outlength, ) ) else: - assert parents.nplike is array.backend.nplike + assert offsets.nplike is array.backend.nplike array.backend.maybe_kernel_error( array.backend[ "awkward_reduce_prod_bool", result.dtype.type, kernel_array_data.dtype.type, - parents.dtype.type, offsets.dtype.type, ]( result, kernel_array_data, - parents.data, offsets.data, - parents.length, outlength, ) ) @@ -746,8 +677,7 @@ def _identity_for(self, dtype: DTypeLike | None): def apply( self, array: ak.contents.NumpyArray, - parents: ak.index.Index | ak.index.ZeroIndex, - offsets: ak.index.Index | ak.index.EmptyIndex, + offsets: ak.index.Index, starts: ak.index.Index, shifts: ak.index.Index | None, outlength: ShapeItem, @@ -755,65 +685,55 @@ def apply( assert isinstance(array, ak.contents.NumpyArray) if array.dtype == np.bool_: result = array.backend.nplike.empty(outlength, dtype=np.bool_) - assert parents.nplike is array.backend.nplike + assert offsets.nplike is array.backend.nplike array.backend.maybe_kernel_error( array.backend[ "awkward_reduce_prod_bool", result.dtype.type, array.dtype.type, - parents.dtype.type, offsets.dtype.type, ]( result, array.data, - parents.data, offsets.data, - parents.length, outlength, ) ) return ak.contents.NumpyArray(result, backend=array.backend) else: - # View array data in kernel-supported dtype kernel_array_data = array.data.view(self._dtype_for_kernel(array.dtype)) result = array.backend.nplike.empty( self._length_for_kernel(array.dtype.type, outlength), dtype=kernel_array_data.dtype, ) if array.dtype.type in (np.complex128, np.complex64): - assert parents.nplike is array.backend.nplike + assert offsets.nplike is array.backend.nplike array.backend.maybe_kernel_error( array.backend[ "awkward_reduce_min_complex", result.dtype.type, kernel_array_data.dtype.type, - parents.dtype.type, offsets.dtype.type, ]( result, kernel_array_data, - parents.data, offsets.data, - parents.length, outlength, self._identity_for(result.dtype), ) ) else: - assert parents.nplike is array.backend.nplike + assert offsets.nplike is array.backend.nplike array.backend.maybe_kernel_error( array.backend[ "awkward_reduce_min", result.dtype.type, kernel_array_data.dtype.type, - parents.dtype.type, offsets.dtype.type, ]( result, kernel_array_data, - parents.data, offsets.data, - parents.length, outlength, self._identity_for(result.dtype), ) @@ -827,8 +747,7 @@ class AxisNoneMin(Min): def apply( self, array: ak.contents.NumpyArray, - _parents: ak.index.Index | ak.index.ZeroIndex, - _offsets: ak.index.Index | ak.index.EmptyIndex, + _offsets: ak.index.Index, _starts: ak.index.Index, _shifts: ak.index.Index | None, _outlength: ShapeItem, @@ -896,8 +815,7 @@ def _identity_for(self, dtype: DTypeLike | None): def apply( self, array: ak.contents.NumpyArray, - parents: ak.index.Index | ak.index.ZeroIndex, - offsets: ak.index.Index | ak.index.EmptyIndex, + offsets: ak.index.Index, starts: ak.index.Index, shifts: ak.index.Index | None, outlength: ShapeItem, @@ -905,65 +823,55 @@ def apply( assert isinstance(array, ak.contents.NumpyArray) if array.dtype == np.bool_: result = array.backend.nplike.empty(outlength, dtype=np.bool_) - assert parents.nplike is array.backend.nplike + assert offsets.nplike is array.backend.nplike array.backend.maybe_kernel_error( array.backend[ "awkward_reduce_sum_bool", result.dtype.type, array.dtype.type, - parents.dtype.type, offsets.dtype.type, ]( result, array.data, - parents.data, offsets.data, - parents.length, outlength, ) ) return ak.contents.NumpyArray(result, backend=array.backend) else: - # View array data in kernel-supported dtype kernel_array_data = array.data.view(self._dtype_for_kernel(array.dtype)) result = array.backend.nplike.empty( self._length_for_kernel(array.dtype.type, outlength), dtype=kernel_array_data.dtype, ) if array.dtype.type in (np.complex128, np.complex64): - assert parents.nplike is array.backend.nplike + assert offsets.nplike is array.backend.nplike array.backend.maybe_kernel_error( array.backend[ "awkward_reduce_max_complex", result.dtype.type, kernel_array_data.dtype.type, - parents.dtype.type, offsets.dtype.type, ]( result, kernel_array_data, - parents.data, offsets.data, - parents.length, outlength, self._identity_for(result.dtype), ) ) else: - assert parents.nplike is array.backend.nplike + assert offsets.nplike is array.backend.nplike array.backend.maybe_kernel_error( array.backend[ "awkward_reduce_max", result.dtype.type, kernel_array_data.dtype.type, - parents.dtype.type, offsets.dtype.type, ]( result, kernel_array_data, - parents.data, offsets.data, - parents.length, outlength, self._identity_for(result.dtype), ) @@ -977,8 +885,7 @@ class AxisNoneMax(Max): def apply( self, array: ak.contents.NumpyArray, - _parents: ak.index.Index | ak.index.ZeroIndex, - _offsets: ak.index.Index | ak.index.EmptyIndex, + _offsets: ak.index.Index, _starts: ak.index.Index, _shifts: ak.index.Index | None, _outlength: ShapeItem, diff --git a/src/awkward/contents/bitmaskedarray.py b/src/awkward/contents/bitmaskedarray.py index e0282000b7..ad39bc214d 100644 --- a/src/awkward/contents/bitmaskedarray.py +++ b/src/awkward/contents/bitmaskedarray.py @@ -649,18 +649,18 @@ def _local_index(self, axis, depth): def _numbers_to_type(self, name, including_unknown): return self.to_ByteMaskedArray()._numbers_to_type(name, including_unknown) - def _is_unique(self, negaxis, starts, parents, offsets, outlength): + def _is_unique(self, negaxis, starts, offsets, outlength): if self._mask.length is not unknown_length and self._mask.length == 0: return True return self.to_IndexedOptionArray64()._is_unique( - negaxis, starts, parents, offsets, outlength + negaxis, starts, offsets, outlength ) - def _unique(self, negaxis, starts, parents, offsets, outlength): + def _unique(self, negaxis, starts, offsets, outlength): if self._mask.length is not unknown_length and self._mask.length == 0: return self out = self.to_IndexedOptionArray64()._unique( - negaxis, starts, parents, offsets, outlength + negaxis, starts, offsets, outlength ) if negaxis is None: return out @@ -668,17 +668,15 @@ def _unique(self, negaxis, starts, parents, offsets, outlength): return out._content def _argsort_next( - self, negaxis, starts, shifts, parents, offsets, outlength, ascending, stable + self, negaxis, starts, shifts, offsets, outlength, ascending, stable ): return self.to_IndexedOptionArray64()._argsort_next( - negaxis, starts, shifts, parents, offsets, outlength, ascending, stable + negaxis, starts, shifts, offsets, outlength, ascending, stable ) - def _sort_next( - self, negaxis, starts, parents, offsets, outlength, ascending, stable - ): + def _sort_next(self, negaxis, starts, offsets, outlength, ascending, stable): return self.to_IndexedOptionArray64()._sort_next( - negaxis, starts, parents, offsets, outlength, ascending, stable + negaxis, starts, offsets, outlength, ascending, stable ) def _combinations(self, n, replacement, recordlookup, parameters, axis, depth): @@ -692,7 +690,6 @@ def _reduce_next( negaxis, starts, shifts, - parents, offsets, outlength, mask, @@ -704,7 +701,6 @@ def _reduce_next( negaxis, starts, shifts, - parents, offsets, outlength, mask, diff --git a/src/awkward/contents/bytemaskedarray.py b/src/awkward/contents/bytemaskedarray.py index 85d82015f6..5f7b2b2ccb 100644 --- a/src/awkward/contents/bytemaskedarray.py +++ b/src/awkward/contents/bytemaskedarray.py @@ -45,7 +45,7 @@ from awkward.errors import AxisError from awkward.forms.bytemaskedform import ByteMaskedForm from awkward.forms.form import Form, FormKeyPathT -from awkward.index import Index, resolve_index +from awkward.index import Index if TYPE_CHECKING: from awkward._slicing import SliceItem @@ -802,32 +802,30 @@ def _numbers_to_type(self, name, including_unknown): parameters=self._parameters, ) - def _is_unique(self, negaxis, starts, parents, offsets, outlength): + def _is_unique(self, negaxis, starts, offsets, outlength): if self._mask.length is not unknown_length and self._mask.length == 0: return True return self.to_IndexedOptionArray64()._is_unique( - negaxis, starts, parents, offsets, outlength + negaxis, starts, offsets, outlength ) - def _unique(self, negaxis, starts, parents, offsets, outlength): + def _unique(self, negaxis, starts, offsets, outlength): if self._mask.length is not unknown_length and self._mask.length == 0: return self return self.to_IndexedOptionArray64()._unique( - negaxis, starts, parents, offsets, outlength + negaxis, starts, offsets, outlength ) def _argsort_next( - self, negaxis, starts, shifts, parents, offsets, outlength, ascending, stable + self, negaxis, starts, shifts, offsets, outlength, ascending, stable ): return self.to_IndexedOptionArray64()._argsort_next( - negaxis, starts, shifts, parents, offsets, outlength, ascending, stable + negaxis, starts, shifts, offsets, outlength, ascending, stable ) - def _sort_next( - self, negaxis, starts, parents, offsets, outlength, ascending, stable - ): + def _sort_next(self, negaxis, starts, offsets, outlength, ascending, stable): return self.to_IndexedOptionArray64()._sort_next( - negaxis, starts, parents, offsets, outlength, ascending, stable + negaxis, starts, offsets, outlength, ascending, stable ) def _combinations(self, n, replacement, recordlookup, parameters, axis, depth): @@ -853,7 +851,6 @@ def _reduce_next( negaxis, starts, shifts, - parents, offsets, outlength, mask, @@ -883,33 +880,33 @@ def _reduce_next( next_length = mask_length - numnull nextcarry = ak.index.Index64.empty(next_length, nplike=self._backend.nplike) - nextparents = ak.index.Index64.empty(next_length, nplike=self._backend.nplike) + # nextoffsets describes the same `outlength` bins, but counting only the + # valid (unmasked) elements that survived this layer. + nextoffsets = ak.index.Index64.empty(outlength + 1, nplike=self._backend.nplike) outindex = ak.index.Index64.empty(mask_length, nplike=self._backend.nplike) - parents = resolve_index(parents, self._backend) - assert ( nextcarry.nplike is self._backend.nplike - and nextparents.nplike is self._backend.nplike + and nextoffsets.nplike is self._backend.nplike and outindex.nplike is self._backend.nplike and self._mask.nplike is self._backend.nplike - and parents.nplike is self._backend.nplike + and offsets.nplike is self._backend.nplike ) self._backend.maybe_kernel_error( self._backend[ "awkward_ByteMaskedArray_reduce_next_64", nextcarry.dtype.type, - nextparents.dtype.type, + nextoffsets.dtype.type, outindex.dtype.type, self._mask.dtype.type, - parents.dtype.type, + offsets.dtype.type, ]( nextcarry.data, - nextparents.data, + nextoffsets.data, outindex.data, self._mask.data, - parents.data, - mask_length, + offsets.data, + outlength, self._valid_when, ) ) @@ -966,8 +963,7 @@ def _reduce_next( negaxis, starts, nextshifts, - nextparents, - offsets, + nextoffsets, outlength, mask, keepdims, @@ -980,8 +976,9 @@ def _reduce_next( if isinstance(out, ak.contents.RegularArray): out_content = out.content elif isinstance(out, ak.contents.ListOffsetArray): - # The `outindex` that will index into `out_content` is 0-based, so we should ensure that we normalise - # the list content to start at the first offset. + # The `outindex` that will index into `out_content` is 0-based, + # so we should ensure that we normalise the list content to start + # at the first offset. out_content = out.content[out.offsets[0] :] else: raise ValueError( diff --git a/src/awkward/contents/content.py b/src/awkward/contents/content.py index ea2cbba3cd..c56411eb4a 100644 --- a/src/awkward/contents/content.py +++ b/src/awkward/contents/content.py @@ -57,7 +57,7 @@ ) from awkward._util import UNSET from awkward.forms.form import Form, FormKeyPathT -from awkward.index import EmptyIndex, Index, Index64, ZeroIndex +from awkward.index import Index, Index64 if TYPE_CHECKING: from awkward._nplikes.numpy import NumpyLike @@ -893,8 +893,7 @@ def _reduce_next( negaxis: int, starts: Index, shifts: Index | None, - parents: Index | ZeroIndex, - offsets: Index | EmptyIndex, + offsets: Index | None, outlength: int, mask: bool, keepdims: bool, @@ -907,8 +906,7 @@ def _argsort_next( negaxis: int, starts: Index, shifts: Index | None, - parents: Index | ZeroIndex, - offsets: Index | EmptyIndex, + offsets: Index | None, outlength: int, ascending: bool, stable: bool, @@ -919,8 +917,7 @@ def _sort_next( self, negaxis: int, starts: Index, - parents: Index | ZeroIndex, - offsets: Index | EmptyIndex, + offsets: Index | None, outlength: int, ascending: bool, stable: bool, @@ -1042,8 +1039,7 @@ def _is_unique( self, negaxis: AxisMaybeNone, starts: Index, - parents: Index | ZeroIndex, - offsets: Index | EmptyIndex, + offsets: Index | None, outlength: int, ) -> bool: raise NotImplementedError @@ -1052,8 +1048,7 @@ def _unique( self, negaxis: AxisMaybeNone, starts: Index, - parents: Index | ZeroIndex, - offsets: Index | EmptyIndex, + offsets: Index | None, outlength: int, ): raise NotImplementedError diff --git a/src/awkward/contents/emptyarray.py b/src/awkward/contents/emptyarray.py index 3325a13701..d50d1985b8 100644 --- a/src/awkward/contents/emptyarray.py +++ b/src/awkward/contents/emptyarray.py @@ -308,23 +308,21 @@ def _numbers_to_type(self, name, including_unknown): else: return self - def _is_unique(self, negaxis, starts, parents, offsets, outlength): + def _is_unique(self, negaxis, starts, offsets, outlength): return True - def _unique(self, negaxis, starts, parents, offsets, outlength): + def _unique(self, negaxis, starts, offsets, outlength): return self def _argsort_next( - self, negaxis, starts, shifts, parents, offsets, outlength, ascending, stable + self, negaxis, starts, shifts, offsets, outlength, ascending, stable ): as_numpy = self.to_NumpyArray(np.float64) return as_numpy._argsort_next( - negaxis, starts, shifts, parents, offsets, outlength, ascending, stable + negaxis, starts, shifts, offsets, outlength, ascending, stable ) - def _sort_next( - self, negaxis, starts, parents, offsets, outlength, ascending, stable - ): + def _sort_next(self, negaxis, starts, offsets, outlength, ascending, stable): return self def _combinations(self, n, replacement, recordlookup, parameters, axis, depth): @@ -336,7 +334,6 @@ def _reduce_next( negaxis, starts, shifts, - parents, offsets, outlength, mask, @@ -349,7 +346,6 @@ def _reduce_next( negaxis, starts, shifts, - parents, offsets, outlength, mask, diff --git a/src/awkward/contents/indexedarray.py b/src/awkward/contents/indexedarray.py index 53be1d5e4c..66985c5f59 100644 --- a/src/awkward/contents/indexedarray.py +++ b/src/awkward/contents/indexedarray.py @@ -43,7 +43,7 @@ from awkward.errors import AxisError from awkward.forms.form import Form, FormKeyPathT from awkward.forms.indexedform import IndexedForm -from awkward.index import Index, resolve_index +from awkward.index import Index if TYPE_CHECKING: from awkward._slicing import SliceItem @@ -795,7 +795,7 @@ def _numbers_to_type(self, name, including_unknown): parameters=self._parameters, ) - def _is_unique(self, negaxis, starts, parents, offsets, outlength): + def _is_unique(self, negaxis, starts, offsets, outlength): if self._index.length is not unknown_length and self._index.length == 0: return True @@ -805,151 +805,29 @@ def _is_unique(self, negaxis, starts, parents, offsets, outlength): return False next = self._content._carry(nextindex, False) - return next._is_unique(negaxis, starts, parents, offsets, outlength) + return next._is_unique(negaxis, starts, offsets, outlength) - def _unique(self, negaxis, starts, parents, offsets, outlength): + def _unique(self, negaxis, starts, offsets, outlength): if self._index.length is not unknown_length and self._index.length == 0: return self - - branch, depth = self.branch_depth - - parents = resolve_index(parents, self._backend) - - index_length = self._index.length - parents_length = parents.length - next_length = index_length - - nextcarry = ak.index.Index64.empty(index_length, self._backend.nplike) - nextparents = ak.index.Index64.empty(index_length, self._backend.nplike) - outindex = ak.index.Index64.empty(index_length, self._backend.nplike) - assert ( - nextcarry.nplike is self._backend.nplike - and nextparents.nplike is self._backend.nplike - and outindex.nplike is self._backend.nplike - and self._index.nplike is self._backend.nplike - and parents.nplike is self._backend.nplike - ) - self._backend.maybe_kernel_error( - self._backend[ - "awkward_IndexedArray_reduce_next_64", - nextcarry.dtype.type, - nextparents.dtype.type, - outindex.dtype.type, - self._index.dtype.type, - parents.dtype.type, - ]( - nextcarry.data, - nextparents.data, - outindex.data, - self._index.data, - parents.data, - index_length, - ) - ) - next = self._content._carry(nextcarry, False) - unique = next._unique( - negaxis, - starts, - nextparents, - offsets, - outlength, - ) - - if branch or (negaxis is not None and negaxis != depth): - nextoutindex = ak.index.Index64.empty(parents_length, self._backend.nplike) - assert ( - nextoutindex.nplike is self._backend.nplike - and starts.nplike is self._backend.nplike - and parents.nplike is self._backend.nplike - and nextparents.nplike is self._backend.nplike - ) - - self._backend.maybe_kernel_error( - self._backend[ - "awkward_IndexedArray_local_preparenext_64", - nextoutindex.dtype.type, - starts.dtype.type, - parents.dtype.type, - nextparents.dtype.type, - ]( - nextoutindex.data, - starts.data, - parents.data, - parents_length, - nextparents.data, - next_length, - ) - ) - - return ak.contents.IndexedOptionArray.simplified( - nextoutindex, unique, parameters=self._parameters - ) - - if not branch and negaxis == depth: - return unique - else: - if isinstance(unique, ak.contents.RegularArray): - unique = unique.to_ListOffsetArray64(True) - - if isinstance(unique, ak.contents.ListOffsetArray): - if starts.nplike.known_data and starts.length > 0 and starts[0] != 0: - raise AssertionError( - "reduce_next with unbranching depth > negaxis expects a " - f"ListOffsetArray64 whose offsets start at zero ({starts[0]})" - ) - - outoffsets = ak.index.Index64.empty( - starts.length + 1, self._backend.nplike - ) - assert ( - outoffsets.nplike is self._backend.nplike - and starts.nplike is self._backend.nplike - ) - self._backend.maybe_kernel_error( - self._backend[ - "awkward_IndexedArray_reduce_next_fix_offsets_64", - outoffsets.dtype.type, - starts.dtype.type, - ]( - outoffsets.data, - starts.data, - starts.length, - self._index.length, - ) - ) - - tmp = ak.contents.IndexedArray( - outindex, unique._content, parameters=None - ) - - return ak.contents.ListOffsetArray(outoffsets, tmp, parameters=None) - - elif isinstance(unique, ak.contents.NumpyArray): - nextoutindex = ak.index.Index64( - self._backend.nplike.arange(unique.length, dtype=np.int64), - nplike=self._backend.nplike, - ) - return ak.contents.IndexedOptionArray.simplified( - nextoutindex, unique, parameters=self._parameters - ) - - raise NotImplementedError + # IndexedArray (non-Option) has no -1 entries, so we don't need the + # parents-filtering machinery the IndexedOptionArray version uses; + # just project through the index and delegate. This matches the + # delegation pattern used by _argsort_next, _sort_next, _reduce_next. + next = self._content._carry(self._index, False) + return next._unique(negaxis, starts, offsets, outlength) def _argsort_next( - self, negaxis, starts, shifts, parents, offsets, outlength, ascending, stable + self, negaxis, starts, shifts, offsets, outlength, ascending, stable ): next = self._content._carry(self._index, False) return next._argsort_next( - negaxis, starts, shifts, parents, offsets, outlength, ascending, stable + negaxis, starts, shifts, offsets, outlength, ascending, stable ) - def _sort_next( - self, negaxis, starts, parents, offsets, outlength, ascending, stable - ): + def _sort_next(self, negaxis, starts, offsets, outlength, ascending, stable): next = self._content._carry(self._index, False) - return next._sort_next( - negaxis, starts, parents, offsets, outlength, ascending, stable - ) + return next._sort_next(negaxis, starts, offsets, outlength, ascending, stable) def _combinations(self, n, replacement, recordlookup, parameters, axis, depth): posaxis = maybe_posaxis(self, axis, depth) @@ -966,7 +844,6 @@ def _reduce_next( negaxis, starts, shifts, - parents, offsets, outlength, mask, @@ -979,7 +856,6 @@ def _reduce_next( negaxis, starts, shifts, - parents, offsets, outlength, mask, diff --git a/src/awkward/contents/indexedoptionarray.py b/src/awkward/contents/indexedoptionarray.py index 295c247336..605405bc21 100644 --- a/src/awkward/contents/indexedoptionarray.py +++ b/src/awkward/contents/indexedoptionarray.py @@ -44,7 +44,7 @@ from awkward.errors import AxisError from awkward.forms.form import Form, FormKeyPathT from awkward.forms.indexedoptionform import IndexedOptionForm -from awkward.index import Index, resolve_index +from awkward.index import Index if TYPE_CHECKING: from awkward._slicing import SliceItem @@ -975,14 +975,14 @@ def _numbers_to_type(self, name, including_unknown): parameters=self._parameters, ) - def _is_unique(self, negaxis, starts, parents, offsets, outlength): + def _is_unique(self, negaxis, starts, offsets, outlength): if self._index.length is not unknown_length and self._index.length == 0: return True projected = self.project() - return projected._is_unique(negaxis, starts, parents, offsets, outlength) + return projected._is_unique(negaxis, starts, offsets, outlength) - def _unique(self, negaxis, starts, parents, offsets, outlength): + def _unique(self, negaxis, starts, offsets, outlength): branch, depth = self.branch_depth inject_nones = ( @@ -991,25 +991,24 @@ def _unique(self, negaxis, starts, parents, offsets, outlength): index_length = self._index.length - next, nextparents, _numnull, _outindex = self._rearrange_prepare_next(parents) + next, nextoffsets, _numnull, _outindex = self._rearrange_prepare_next( + offsets, outlength + ) out = next._unique( negaxis, starts, - nextparents, - offsets, + nextoffsets, outlength, ) if branch or (negaxis is not None and negaxis != depth): - parents = resolve_index(parents, self._backend) - - nextoutindex = ak.index.Index64.empty(parents.length, self._backend.nplike) + nextoutindex = ak.index.Index64.empty(index_length, self._backend.nplike) assert ( nextoutindex.nplike is self._backend.nplike and starts.nplike is self._backend.nplike - and parents.nplike is self._backend.nplike - and nextparents.nplike is self._backend.nplike + and offsets.nplike is self._backend.nplike + and nextoffsets.nplike is self._backend.nplike ) self._backend.maybe_kernel_error( @@ -1017,15 +1016,14 @@ def _unique(self, negaxis, starts, parents, offsets, outlength): "awkward_IndexedArray_local_preparenext_64", nextoutindex.dtype.type, starts.dtype.type, - parents.dtype.type, - nextparents.dtype.type, + offsets.dtype.type, + nextoffsets.dtype.type, ]( nextoutindex.data, starts.data, - parents.data, - parents.length, - nextparents.data, - nextparents.length, + offsets.data, + nextoffsets.data, + outlength, ) ) @@ -1094,10 +1092,6 @@ def _unique(self, negaxis, starts, parents, offsets, outlength): ) if isinstance(out, ak.contents.NumpyArray): - # We do not pass None values to the content, so it will have computed - # the unique _non null_ values. We therefore need to account for None - # values in the result. We do this by creating an IndexedOptionArray - # and tacking the index -1 onto the end nextoutindex = ak.index.Index64.empty( out.length + 1, self._backend.nplike, @@ -1124,8 +1118,8 @@ def _unique(self, negaxis, starts, parents, offsets, outlength): return out - def _rearrange_nextshifts(self, nextparents, shifts): - nextshifts = ak.index.Index64.empty(nextparents.length, self._backend.nplike) + def _rearrange_nextshifts(self, next_length, shifts): + nextshifts = ak.index.Index64.empty(next_length, self._backend.nplike) assert nextshifts.nplike is self._backend.nplike if shifts is None: @@ -1165,12 +1159,11 @@ def _rearrange_nextshifts(self, nextparents, shifts): ) return nextshifts - def _rearrange_prepare_next(self, parents): - parents = resolve_index(parents, self._backend) + def _rearrange_prepare_next(self, offsets, outlength): assert ( self._index.nplike is self._backend.nplike - and parents.nplike is self._backend.nplike + and offsets.nplike is self._backend.nplike ) index_length = self._index.length _numnull = ak.index.Index64.empty(1, self._backend.nplike) @@ -1190,51 +1183,53 @@ def _rearrange_prepare_next(self, parents): numnull = self._backend.nplike.index_as_shape_item(_numnull[0]) next_length = index_length - numnull - nextparents = ak.index.Index64.empty(next_length, self._backend.nplike) nextcarry = ak.index.Index64.empty(next_length, self._backend.nplike) + nextoffsets = ak.index.Index64.empty(outlength + 1, self._backend.nplike) outindex = ak.index.Index64.empty(index_length, self._backend.nplike) assert ( nextcarry.nplike is self._backend.nplike - and nextparents.nplike is self._backend.nplike + and nextoffsets.nplike is self._backend.nplike and outindex.nplike is self._backend.nplike ) self._backend.maybe_kernel_error( self._backend[ "awkward_IndexedArray_reduce_next_64", nextcarry.dtype.type, - nextparents.dtype.type, + nextoffsets.dtype.type, outindex.dtype.type, self._index.dtype.type, - parents.dtype.type, + offsets.dtype.type, ]( nextcarry.data, - nextparents.data, + nextoffsets.data, outindex.data, self._index.data, - parents.data, - index_length, + offsets.data, + outlength, ) ) next = self._content._carry(nextcarry, False) - return next, nextparents, numnull, outindex + return next, nextoffsets, numnull, outindex def _argsort_next( - self, negaxis, starts, shifts, parents, offsets, outlength, ascending, stable + self, negaxis, starts, shifts, offsets, outlength, ascending, stable ): - parents = resolve_index(parents, self._backend) - assert ( starts.nplike is self._backend.nplike - and parents.nplike is self._backend.nplike + and offsets.nplike is self._backend.nplike and self._index.nplike is self._backend.nplike ) branch, depth = self.branch_depth + index_length = self._index.length - next, nextparents, numnull, outindex = self._rearrange_prepare_next(parents) + next, nextoffsets, numnull, outindex = self._rearrange_prepare_next( + offsets, outlength + ) + next_length = index_length - numnull if (not branch) and negaxis == depth: - nextshifts = self._rearrange_nextshifts(nextparents, shifts) + nextshifts = self._rearrange_nextshifts(next_length, shifts) else: nextshifts = None @@ -1242,17 +1237,14 @@ def _argsort_next( negaxis, starts, nextshifts, - nextparents, - offsets, + nextoffsets, outlength, ascending, stable, ) - # `next._argsort_next` is given the non-None values. We choose to - # sort None values to the end of the list, meaning we need to grow `out` - # to account for these None values. First, we locate these nones within - # their sublists + # Locate the nulls within their sublists. The migrated kernel takes + # offsets/outlength to derive the bin for each null position internally. nulls_merged = False nulls_index = ak.index.Index64.empty(numnull, self._backend.nplike) assert nulls_index.nplike is self._backend.nplike @@ -1261,21 +1253,16 @@ def _argsort_next( "awkward_IndexedArray_index_of_nulls", nulls_index.dtype.type, self._index.dtype.type, - parents.dtype.type, + offsets.dtype.type, starts.dtype.type, ]( nulls_index.data, self._index.data, - self._index.length, - parents.data, + offsets.data, + outlength, starts.data, ) ) - # If we wrap a NumpyArray (i.e., axis=-1), then we want `argmax` to return - # the indices of each `None` value, rather than `None` itself. - # We can test for this condition by seeing whether the NumpyArray of indices - # is mergeable with our content (`out = next._argsort_next result`). - # If so, try to concatenate them at the end of `out`.` nulls_index_content = ak.contents.NumpyArray( nulls_index.data, parameters=None, backend=self._backend ) @@ -1283,12 +1270,12 @@ def _argsort_next( out = out._mergemany([nulls_index_content]) nulls_merged = True - nextoutindex = ak.index.Index64.empty(parents.length, self._backend.nplike) + nextoutindex = ak.index.Index64.empty(index_length, self._backend.nplike) assert ( nextoutindex.nplike is self._backend.nplike and starts.nplike is self._backend.nplike - and parents.nplike is self._backend.nplike - and nextparents.nplike is self._backend.nplike + and offsets.nplike is self._backend.nplike + and nextoffsets.nplike is self._backend.nplike ) self._backend.maybe_kernel_error( @@ -1296,24 +1283,18 @@ def _argsort_next( "awkward_IndexedArray_local_preparenext_64", nextoutindex.dtype.type, starts.dtype.type, - parents.dtype.type, - nextparents.dtype.type, + offsets.dtype.type, + nextoffsets.dtype.type, ]( nextoutindex.data, starts.data, - parents.data, - parents.length, - nextparents.data, - nextparents.length, + offsets.data, + nextoffsets.data, + outlength, ) ) if nulls_merged: - # awkward_IndexedArray_local_preparenext uses -1 to - # indicate `None` values. Given that this code-path runs - # only when the `None` value indices are explicitly stored in out, - # we need to mapping the -1 values to their corresponding indices - # in `out` assert nextoutindex.nplike is self._backend.nplike self._backend.maybe_kernel_error( self._backend["awkward_Index_nones_as_index", nextoutindex.dtype.type]( @@ -1321,8 +1302,6 @@ def _argsort_next( nextoutindex.length, ) ) - # Drop the option type: we have ensured that we don't have any - # -1 values in `nextoutindex` now! out = out._carry(nextoutindex, False).copy( parameters=parameters_union(out._parameters, self._parameters) ) @@ -1341,38 +1320,30 @@ def _argsort_next( else False ) - # If we want the None's at this depth to be injected - # into the dense ([x y z None None]) rearranger result. - # Here, we index the dense content with an index - # that maps the values to the correct locations if inject_nones: return ak.contents.IndexedOptionArray.simplified( outindex, out, parameters=self._parameters ) - # Otherwise, if we are rearranging (e.g sorting) the contents of this layout, - # then we do NOT want to return an optional layout, - # OR we are branching else: return out - def _sort_next( - self, negaxis, starts, parents, offsets, outlength, ascending, stable - ): - parents = resolve_index(parents, self._backend) - + def _sort_next(self, negaxis, starts, offsets, outlength, ascending, stable): assert ( starts.nplike is self._backend.nplike - and parents.nplike is self._backend.nplike + and offsets.nplike is self._backend.nplike ) branch, depth = self.branch_depth + index_length = self._index.length - next, nextparents, _numnull, outindex = self._rearrange_prepare_next(parents) + next, nextoffsets, _numnull, outindex = self._rearrange_prepare_next( + offsets, outlength + ) out = next._sort_next( - negaxis, starts, nextparents, offsets, outlength, ascending, stable + negaxis, starts, nextoffsets, outlength, ascending, stable ) - nextoutindex = ak.index.Index64.empty(parents.length, self._backend.nplike) + nextoutindex = ak.index.Index64.empty(index_length, self._backend.nplike) assert nextoutindex.nplike is self._backend.nplike self._backend.maybe_kernel_error( @@ -1380,15 +1351,14 @@ def _sort_next( "awkward_IndexedArray_local_preparenext_64", nextoutindex.dtype.type, starts.dtype.type, - parents.dtype.type, - nextparents.dtype.type, + offsets.dtype.type, + nextoffsets.dtype.type, ]( nextoutindex.data, starts.data, - parents.data, - parents.length, - nextparents.data, - nextparents.length, + offsets.data, + nextoffsets.data, + outlength, ) ) out = ak.contents.IndexedOptionArray.simplified( @@ -1397,17 +1367,10 @@ def _sort_next( inject_nones = True if not branch and negaxis != depth else False - # If we want the None's at this depth to be injected - # into the dense ([x y z None None]) rearranger result. - # Here, we index the dense content with an index - # that maps the values to the correct locations if inject_nones: return ak.contents.IndexedOptionArray.simplified( outindex, out, parameters=self._parameters ) - # Otherwise, if we are rearranging (e.g sorting) the contents of this layout, - # then we do NOT want to return an optional layout - # OR we are branching else: return out @@ -1417,7 +1380,6 @@ def _reduce_next( negaxis, starts, shifts, - parents, offsets, outlength, mask, @@ -1426,12 +1388,15 @@ def _reduce_next( ): branch, depth = self.branch_depth - parents = resolve_index(parents, self._backend) + index_length = self._index.length - next, nextparents, _numnull, outindex = self._rearrange_prepare_next(parents) + next, nextoffsets, numnull, outindex = self._rearrange_prepare_next( + offsets, outlength + ) + next_length = index_length - numnull if reducer.needs_position and (not branch and negaxis == depth): - nextshifts = self._rearrange_nextshifts(nextparents, shifts) + nextshifts = self._rearrange_nextshifts(next_length, shifts) else: nextshifts = None @@ -1440,24 +1405,21 @@ def _reduce_next( negaxis, starts, nextshifts, - nextparents, - offsets, + nextoffsets, outlength, mask, keepdims, behavior, ) - # If we are reducing the contents of this layout, - # then we do NOT want to return an optional layout if not branch and negaxis == depth: return out else: if isinstance(out, ak.contents.RegularArray): out_content = out.content elif isinstance(out, ak.contents.ListOffsetArray): - # The `outindex` that will index into `out_content` is 0-based, so we should ensure that we normalise - # the list content to start at the first offset. + # The `outindex` that will index into `out_content` is 0-based, so we should + # ensure that we normalise the list content to start at the first offset. out_content = out.content[out.offsets[0] :] else: raise AssertionError( @@ -1472,14 +1434,6 @@ def _reduce_next( "reduce_next with unbranching depth > negaxis expects a " f"ListOffsetArray whose offsets start at zero ({starts[0]})" ) - # In this branch, we're above the axis at which the reduction takes place. - # `next._reduce_next` is therefore expected to return a list/regular layout - # node. As detailed in `RegularArray._reduce_next`, `_reduce_next` wraps the - # reduction in a list-type of length `outlength` before returning to the caller, - # which effectively means that the reduction of *this* layout corresponds to the - # child of the returned `next._reduce_next(...)`, i.e. `out.content`. So, we unpack - # the returned list type and wrap its child by a new `IndexedOptionArray`, before - # re-wrapping the result to have the length and starts requested by the caller. if starts.length is unknown_length: outoffsets = ak.index.Index64.empty( unknown_length, self._backend.nplike @@ -1506,12 +1460,10 @@ def _reduce_next( ) ) - # Apply `outindex` to appropriate content inner = ak.contents.IndexedOptionArray.simplified( outindex, out_content, parameters=self._parameters ) - # Re-wrap content return ak.contents.ListOffsetArray( outoffsets, inner, parameters=self._parameters ) diff --git a/src/awkward/contents/listarray.py b/src/awkward/contents/listarray.py index ea8aec2edc..50bd4abe86 100644 --- a/src/awkward/contents/listarray.py +++ b/src/awkward/contents/listarray.py @@ -1320,36 +1320,34 @@ def _numbers_to_type(self, name, including_unknown): parameters=self._parameters, ) - def _is_unique(self, negaxis, starts, parents, offsets, outlength): + def _is_unique(self, negaxis, starts, offsets, outlength): if self._starts.length is not unknown_length and self._starts.length == 0: return True return self.to_ListOffsetArray64(True)._is_unique( - negaxis, starts, parents, offsets, outlength + negaxis, starts, offsets, outlength ) - def _unique(self, negaxis, starts, parents, offsets, outlength): + def _unique(self, negaxis, starts, offsets, outlength): if self._starts.length is not unknown_length and self._starts.length == 0: return self return self.to_ListOffsetArray64(True)._unique( - negaxis, starts, parents, offsets, outlength + negaxis, starts, offsets, outlength ) def _argsort_next( - self, negaxis, starts, shifts, parents, offsets, outlength, ascending, stable + self, negaxis, starts, shifts, offsets, outlength, ascending, stable ): next = self.to_ListOffsetArray64(True) out = next._argsort_next( - negaxis, starts, shifts, parents, offsets, outlength, ascending, stable + negaxis, starts, shifts, offsets, outlength, ascending, stable ) return out - def _sort_next( - self, negaxis, starts, parents, offsets, outlength, ascending, stable - ): + def _sort_next(self, negaxis, starts, offsets, outlength, ascending, stable): return self.to_ListOffsetArray64(True)._sort_next( - negaxis, starts, parents, offsets, outlength, ascending, stable + negaxis, starts, offsets, outlength, ascending, stable ) def _combinations(self, n, replacement, recordlookup, parameters, axis, depth): @@ -1363,7 +1361,6 @@ def _reduce_next( negaxis, starts, shifts, - parents, offsets, outlength, mask, @@ -1375,7 +1372,6 @@ def _reduce_next( negaxis, starts, shifts, - parents, offsets, outlength, mask, diff --git a/src/awkward/contents/listoffsetarray.py b/src/awkward/contents/listoffsetarray.py index 1b82ffc2d0..c5357b4192 100644 --- a/src/awkward/contents/listoffsetarray.py +++ b/src/awkward/contents/listoffsetarray.py @@ -43,7 +43,7 @@ from awkward.errors import AxisError from awkward.forms.form import Form, FormKeyPathT from awkward.forms.listoffsetform import ListOffsetForm -from awkward.index import Index, Index64, resolve_index +from awkward.index import Index, Index64 if TYPE_CHECKING: from awkward._slicing import SliceItem @@ -893,7 +893,7 @@ def _numbers_to_type(self, name, including_unknown): parameters=self._parameters, ) - def _is_unique(self, negaxis, starts, parents, offsets, outlength): + def _is_unique(self, negaxis, starts, offsets, outlength): if self._offsets.length is not unknown_length and self._offsets.length - 1 == 0: return True @@ -908,8 +908,6 @@ def _is_unique(self, negaxis, starts, parents, offsets, outlength): "array with strings can only be checked on uniqueness with axis=-1" ) - # FIXME: check validity error - if isinstance(self._content, ak.contents.NumpyArray): out, outoffsets = self._content._as_unique_strings(self._offsets) out2 = ak.contents.ListOffsetArray( @@ -918,43 +916,19 @@ def _is_unique(self, negaxis, starts, parents, offsets, outlength): return out2.length == self.length if negaxis is None: - return self._content._is_unique( - negaxis, starts, parents, self._offsets, outlength - ) + return self._content._is_unique(negaxis, starts, self._offsets, outlength) if not branch and (negaxis == depth): return self._content._is_unique( - negaxis - 1, starts, parents, self._offsets, outlength + negaxis - 1, starts, self._offsets, outlength ) else: - nextlen = self._backend.nplike.index_as_shape_item( - self._offsets[-1] - self._offsets[0] - ) - nextparents = Index64.empty(nextlen, self._backend.nplike) - - assert ( - nextparents.nplike is self._backend.nplike - and self._offsets.nplike is self._backend.nplike - ) - self._backend.maybe_kernel_error( - self._backend[ - "awkward_ListOffsetArray_reduce_local_nextparents_64", - nextparents.dtype.type, - self._offsets.dtype.type, - ]( - nextparents.data, - self._offsets.data, - self._offsets.length - 1, - nextparents.length, - ) - ) + # In the offsets representation, the next layer's offsets ARE self._offsets + # (no kernel call needed for a local "parents" build). starts = self._offsets[:-1] + return self._content._is_unique(negaxis, starts, self._offsets, outlength) - return self._content._is_unique( - negaxis, starts, nextparents, self._offsets, outlength - ) - - def _unique(self, negaxis, starts, parents, offsets, outlength): + def _unique(self, negaxis, starts, offsets, outlength): if self._offsets.length - 1 == 0: return self @@ -967,8 +941,6 @@ def _unique(self, negaxis, starts, parents, offsets, outlength): if branch or (negaxis != depth): raise AxisError("array with strings can only be sorted with axis=-1") - # FIXME: check validity error - if isinstance(self._content, ak.contents.NumpyArray): out, nextoffsets = self._content._as_unique_strings(self._offsets) return ak.contents.ListOffsetArray( @@ -982,24 +954,26 @@ def _unique(self, negaxis, starts, parents, offsets, outlength): ): raise AxisError("array with strings can only be sorted with axis=-1") - if self._backend.nplike.known_data and parents.nplike.known_data: - assert self._offsets.length - 1 == parents.length + if self._backend.nplike.known_data and offsets.nplike.known_data: + # In the offsets representation, "parents.length" is offsets[outlength], + # which must equal self._offsets.length - 1 (one entry per row of *this* layout). + assert self._offsets.length - 1 == offsets.length - 1 ( _distincts, _maxcount, maxnextparents, nextcarry, - nextparents, + nextoffsets, nextstarts, - ) = self._rearrange_prepare_next(outlength, parents) + ) = self._rearrange_prepare_next(outlength, offsets) nextcontent = self._content._carry(nextcarry, False) outcontent = nextcontent._unique( negaxis - 1, nextstarts, - nextparents, - maxnextparents[0] + 1, + nextoffsets, + maxnextparents + 1, ) outcarry = Index64.empty(nextcarry.length, self._backend.nplike) @@ -1026,34 +1000,20 @@ def _unique(self, negaxis, starts, parents, offsets, outlength): ) else: - nextlen = self._backend.nplike.index_as_shape_item( - self._offsets[-1] - self._offsets[0] - ) - nextparents = Index64.empty(nextlen, self._backend.nplike) - - assert ( - nextparents.nplike is self._backend.nplike - and self._offsets.nplike is self._backend.nplike - ) - self._backend.maybe_kernel_error( - self._backend[ - "awkward_ListOffsetArray_reduce_local_nextparents_64", - nextparents.dtype.type, - self._offsets.dtype.type, - ]( - nextparents.data, - self._offsets.data, - self._offsets.length - 1, - nextparents.length, + # Local reduction: nextoffsets is just self._offsets, normalized to start at 0. + nplike = self._backend.nplike + if nplike.known_data and self._offsets[0] == 0: + nextoffsets = self._offsets + else: + nextoffsets = Index64( + self._offsets.data - self._offsets[0], nplike=nplike ) - ) trimmed = self._content[self._offsets[0] : self._offsets[-1]] outcontent = trimmed._unique( negaxis, - self._offsets[:-1], - nextparents, - offsets, + nextoffsets[:-1], + nextoffsets, self._offsets.length - 1, ) @@ -1065,18 +1025,129 @@ def _unique(self, negaxis, starts, parents, offsets, outlength): outoffsets, outcontent, parameters=self._parameters ) + # def _unique(self, negaxis, starts, parents, offsets, outlength): + # if self._offsets.length - 1 == 0: + # return self + + # branch, depth = self.branch_depth + + # if ( + # self.parameter("__array__") == "string" + # or self.parameter("__array__") == "bytestring" + # ): + # if branch or (negaxis != depth): + # raise AxisError("array with strings can only be sorted with axis=-1") + + # # FIXME: check validity error + + # if isinstance(self._content, ak.contents.NumpyArray): + # out, nextoffsets = self._content._as_unique_strings(self._offsets) + # return ak.contents.ListOffsetArray( + # nextoffsets, out, parameters=self._parameters + # ) + + # if not branch and (negaxis == depth): + # if ( + # self.parameter("__array__") == "string" + # or self.parameter("__array__") == "bytestring" + # ): + # raise AxisError("array with strings can only be sorted with axis=-1") + + # if self._backend.nplike.known_data and parents.nplike.known_data: + # assert self._offsets.length - 1 == parents.length + + # ( + # _distincts, + # _maxcount, + # maxnextparents, + # nextcarry, + # nextparents, + # nextstarts, + # ) = self._rearrange_prepare_next(outlength, parents) + + # nextcontent = self._content._carry(nextcarry, False) + # outcontent = nextcontent._unique( + # negaxis - 1, + # nextstarts, + # nextparents, + # maxnextparents[0] + 1, + # ) + + # outcarry = Index64.empty(nextcarry.length, self._backend.nplike) + # assert ( + # outcarry.nplike is self._backend.nplike + # and nextcarry.nplike is self._backend.nplike + # ) + # self._backend.maybe_kernel_error( + # self._backend[ + # "awkward_ListOffsetArray_local_preparenext_64", + # outcarry.dtype.type, + # nextcarry.dtype.type, + # ]( + # outcarry.data, + # nextcarry.data, + # nextcarry.length, + # ) + # ) + + # return ak.contents.ListOffsetArray( + # outcontent._compact_offsets64(True), + # outcontent._content._carry(outcarry, False), + # parameters=self._parameters, + # ) + + # else: + # nextlen = self._backend.nplike.index_as_shape_item( + # self._offsets[-1] - self._offsets[0] + # ) + # nextparents = Index64.empty(nextlen, self._backend.nplike) + + # assert ( + # nextparents.nplike is self._backend.nplike + # and self._offsets.nplike is self._backend.nplike + # ) + # self._backend.maybe_kernel_error( + # self._backend[ + # "awkward_ListOffsetArray_reduce_local_nextparents_64", + # nextparents.dtype.type, + # self._offsets.dtype.type, + # ]( + # nextparents.data, + # self._offsets.data, + # self._offsets.length - 1, + # nextparents.length, + # ) + # ) + + # trimmed = self._content[self._offsets[0] : self._offsets[-1]] + # outcontent = trimmed._unique( + # negaxis, + # self._offsets[:-1], + # nextparents, + # offsets, + # self._offsets.length - 1, + # ) + + # if negaxis is None or negaxis == depth - 1: + # return outcontent + + # outoffsets = self._compact_offsets64(True) + # return ak.contents.ListOffsetArray( + # outoffsets, outcontent, parameters=self._parameters + # ) + def _argsort_next( self, negaxis, starts, shifts, - parents, offsets, outlength, ascending, stable, ): branch, depth = self.branch_depth + nplike = self._backend.nplike if ( self.parameter("__array__") == "string" @@ -1085,8 +1156,6 @@ def _argsort_next( if branch or (negaxis != depth): raise AxisError("array with strings can only be sorted with axis=-1") - # FIXME: check validity error - if isinstance(self._content, ak.contents.NumpyArray): nextcarry = Index64.empty( self._offsets.length - 1, self._backend.nplike @@ -1094,7 +1163,18 @@ def _argsort_next( self_starts, self_stops = self._offsets[:-1], self._offsets[1:] - parents = resolve_index(parents, self._backend) + # `awkward_ListOffsetArray_argsort_strings` is still parents-based, + # so reconstruct parents on the fly from offsets+outlength. + # Cast counts to np.intp; see numpyarray._argsort_next for the + # cross-platform 'safe' cast rationale. + counts = offsets.data[1:] - offsets.data[:-1] + parents_data = nplike.repeat( + nplike.arange( + nplike.shape_item_as_index(outlength), dtype=np.int64 + ), + nplike.astype(counts, np.intp), + ) + parents = Index64(parents_data, nplike=nplike) assert ( nextcarry.nplike is self._backend.nplike @@ -1134,19 +1214,14 @@ def _argsort_next( ): raise AxisError("array with strings can only be sorted with axis=-1") - parents = resolve_index(parents, self._backend) - - if self._backend.nplike.known_data and parents.nplike.known_data: - assert self._offsets.length - 1 == parents.length - ( _distincts, maxcount, _maxnextparents, nextcarry, - nextparents, + nextoffsets, nextstarts, - ) = self._rearrange_prepare_next(outlength, parents) + ) = self._rearrange_prepare_next(outlength, offsets) nummissing = Index64.empty(maxcount, self._backend.nplike) missing = Index64.empty(self._offsets[-1], self._backend.nplike) @@ -1157,7 +1232,7 @@ def _argsort_next( and nextshifts.nplike is self._backend.nplike and self._offsets.nplike is self._backend.nplike and starts.nplike is self._backend.nplike - and parents.nplike is self._backend.nplike + and offsets.nplike is self._backend.nplike and nextcarry.nplike is self._backend.nplike ) @@ -1169,7 +1244,7 @@ def _argsort_next( nextshifts.dtype.type, self._offsets.dtype.type, starts.dtype.type, - parents.dtype.type, + offsets.dtype.type, nextcarry.dtype.type, ]( nummissing.data, @@ -1178,7 +1253,8 @@ def _argsort_next( self._offsets.data, self._offsets.length - 1, starts.data, - parents.data, + offsets.data, + outlength, maxcount, nextcarry.length, nextcarry.data, @@ -1190,8 +1266,7 @@ def _argsort_next( negaxis - 1, nextstarts, nextshifts, - nextparents, - offsets, + nextoffsets, nextstarts.length, ascending, stable, @@ -1220,35 +1295,20 @@ def _argsort_next( out_offsets, out, parameters=self._parameters ) else: - nextlen = self._backend.nplike.index_as_shape_item( - self._offsets[-1] - self._offsets[0] - ) - nextparents = Index64.empty(nextlen, self._backend.nplike) - - assert ( - nextparents.nplike is self._backend.nplike - and self._offsets.nplike is self._backend.nplike - ) - self._backend.maybe_kernel_error( - self._backend[ - "awkward_ListOffsetArray_reduce_local_nextparents_64", - nextparents.dtype.type, - self._offsets.dtype.type, - ]( - nextparents.data, - self._offsets.data, - self._offsets.length - 1, - nextparents.length, + # Local reduction: nextoffsets = self._offsets normalized to start at 0. + if nplike.known_data and self._offsets[0] == 0: + nextoffsets = self._offsets + else: + nextoffsets = Index64( + self._offsets.data - self._offsets[0], nplike=nplike ) - ) trimmed = self._content[self._offsets[0] : self._offsets[-1]] outcontent = trimmed._argsort_next( negaxis, - self._offsets[:-1], + nextoffsets[:-1], shifts, - nextparents, - offsets, + nextoffsets, self._offsets.length - 1, ascending, stable, @@ -1258,9 +1318,7 @@ def _argsort_next( outoffsets, outcontent, parameters=self._parameters ) - def _sort_next( - self, negaxis, starts, parents, offsets, outlength, ascending, stable - ): + def _sort_next(self, negaxis, starts, offsets, outlength, ascending, stable): branch, depth = self.branch_depth nplike = self._backend.nplike @@ -1272,21 +1330,33 @@ def _sort_next( if branch or (negaxis != depth): raise AxisError("array with strings can only be sorted with axis=-1") - # FIXME: check validity error - if isinstance(self._content, ak.contents.NumpyArray): nextcarry = Index64.empty(self._offsets.length - 1, nplike) - starts, stops = self._offsets[:-1], self._offsets[1:] + # `awkward_ListOffsetArray_argsort_strings` is still parents-based, + # so reconstruct parents on the fly from offsets+outlength. The + # `offsets` parameter here is the outer-bin offsets (length + # outlength + 1), NOT self._offsets (which is the per-string + # byte offsets and has a different shape). + # Cast counts to np.intp; see numpyarray._argsort_next for the + # cross-platform 'safe' cast rationale. + counts = offsets.data[1:] - offsets.data[:-1] + parents_data = nplike.repeat( + nplike.arange( + nplike.shape_item_as_index(outlength), dtype=np.int64 + ), + nplike.astype(counts, np.intp), + ) + parents = Index64(parents_data, nplike=nplike) - parents = resolve_index(parents, self._backend) + self_starts, self_stops = self._offsets[:-1], self._offsets[1:] assert ( nextcarry.nplike is nplike and parents.nplike is nplike and self._content.backend is self._backend - and starts.nplike is nplike - and stops.nplike is nplike + and self_starts.nplike is nplike + and self_stops.nplike is nplike ) self._backend.maybe_kernel_error( self._backend[ @@ -1294,15 +1364,15 @@ def _sort_next( nextcarry.dtype.type, parents.dtype.type, self._content.dtype.type, - starts.dtype.type, - stops.dtype.type, + self_starts.dtype.type, + self_stops.dtype.type, ]( nextcarry.data, parents.data, parents.length, self._content._data, - starts.data, - stops.data, + self_starts.data, + self_stops.data, stable, ascending, False, @@ -1317,26 +1387,20 @@ def _sort_next( ): raise AxisError("array with strings can only be sorted with axis=-1") - parents = resolve_index(parents, self._backend) - - if self._backend.nplike.known_data and parents.nplike.known_data: - assert self._offsets.length - 1 == parents.length - ( _distincts, _maxcount, maxnextparents, nextcarry, - nextparents, + nextoffsets, nextstarts, - ) = self._rearrange_prepare_next(outlength, parents) + ) = self._rearrange_prepare_next(outlength, offsets) nextcontent = self._content._carry(nextcarry, False) outcontent = nextcontent._sort_next( negaxis - 1, nextstarts, - nextparents, - offsets, + nextoffsets, maxnextparents + 1, ascending, stable, @@ -1362,37 +1426,19 @@ def _sort_next( parameters=self._parameters, ) else: - nextlen = nplike.index_as_shape_item(self._offsets[-1] - self._offsets[0]) - - # Clamp nextlen to actual content length to avoid out-of-bounds access - if ( - nextlen is not unknown_length - and self.content.length is not unknown_length - ): - nextlen = min(nextlen, self.content.length) - nextparents = Index64.empty(nextlen, nplike) - lenstarts = self._offsets.length - 1 - - assert nextparents.nplike is nplike and self._offsets.nplike is nplike - self._backend.maybe_kernel_error( - self._backend[ - "awkward_ListOffsetArray_reduce_local_nextparents_64", - nextparents.dtype.type, - self._offsets.dtype.type, - ]( - nextparents.data, - self._offsets.data, - lenstarts, - nextparents.length, + if nplike.known_data and self._offsets[0] == 0: + nextoffsets = self._offsets + else: + nextoffsets = Index64( + self._offsets.data - self._offsets[0], nplike=nplike ) - ) + lenstarts = self._offsets.length - 1 trimmed = self._content[self._offsets[0] : self._offsets[-1]] outcontent = trimmed._sort_next( negaxis, - self._offsets[:-1], - nextparents, - offsets, + nextoffsets[:-1], + nextoffsets, lenstarts, ascending, stable, @@ -1519,7 +1565,6 @@ def _reduce_next( negaxis, starts, shifts, - parents, offsets, outlength, mask, @@ -1537,7 +1582,6 @@ def _reduce_next( negaxis, starts, shifts, - parents, offsets, outlength, mask, @@ -1549,16 +1593,14 @@ def _reduce_next( globalstarts_length = self._offsets.length - 1 if not branch and negaxis == depth: - parents = resolve_index(parents, self._backend) - ( distincts, maxcount, maxnextparents, nextcarry, - nextparents, + nextoffsets, nextstarts, - ) = self._rearrange_prepare_next(outlength, parents) + ) = self._rearrange_prepare_next(outlength, offsets) outstarts = Index64.empty(outlength, nplike) outstops = Index64.empty(outlength, nplike) @@ -1595,7 +1637,7 @@ def _reduce_next( and nextshifts.nplike is nplike and self._offsets.nplike is nplike and starts.nplike is nplike - and parents.nplike is nplike + and offsets.nplike is nplike and nextcarry.nplike is nplike ) @@ -1607,7 +1649,7 @@ def _reduce_next( nextshifts.dtype.type, self._offsets.dtype.type, starts.dtype.type, - parents.dtype.type, + offsets.dtype.type, nextcarry.dtype.type, ]( nummissing.data, @@ -1616,7 +1658,8 @@ def _reduce_next( self._offsets.data, globalstarts_length, starts.data, - parents.data, + offsets.data, + outlength, maxcount, nextcarry.length, nextcarry.data, @@ -1631,8 +1674,7 @@ def _reduce_next( negaxis - 1, nextstarts, nextshifts, - nextparents, - offsets, + nextoffsets, maxnextparents + 1, mask, False, @@ -1649,88 +1691,53 @@ def _reduce_next( return out else: - nextlen = nplike.index_as_shape_item(self._offsets[-1] - self._offsets[0]) - # Clamp nextlen to actual content length to avoid out-of-bounds access - if ( - nextlen is not unknown_length - and self.content.length is not unknown_length - ): - nextlen = min(nextlen, self.content.length) - nextparents = Index64.empty(nextlen, nplike) - - # n.b. awkward_ListOffsetArray_reduce_local_nextparents_64 always returns parents that are - # monotonically increasing (because it is local) - assert nextparents.nplike is nplike and self._offsets.nplike is nplike - self._backend.maybe_kernel_error( - self._backend[ - "awkward_ListOffsetArray_reduce_local_nextparents_64", - nextparents.dtype.type, - self._offsets.dtype.type, - ]( - nextparents.data, - self._offsets.data, - globalstarts_length, - nextparents.length, + # Local reduction: nextoffsets is self._offsets normalized to start at 0, + # so the per-bin parents kernel disappears entirely. + if nplike.known_data and self._offsets[0] == 0: + nextoffsets = self._offsets + else: + nextoffsets = Index64( + self._offsets.data - self._offsets[0], nplike=nplike ) - ) trimmed = self._content[self.offsets[0] : self.offsets[-1]] - nextstarts = self.offsets[:-1] + nextstarts = nextoffsets[:-1] outcontent = trimmed._reduce_next( reducer, negaxis, nextstarts, shifts, - nextparents, - offsets, + nextoffsets, globalstarts_length, mask, keepdims, behavior, ) - outoffsets = Index64.empty(outlength + 1, nplike) - - parents = resolve_index(parents, self._backend) + # outoffsets used to come from + # `awkward_ListOffsetArray_reduce_local_outoffsets_64(parents, ...)`, + # which produced the offsets-rep of `parents`. With offsets already + # in hand, we just use them. + outoffsets = offsets - assert outoffsets.nplike is nplike and parents.nplike is nplike - self._backend.maybe_kernel_error( - self._backend[ - "awkward_ListOffsetArray_reduce_local_outoffsets_64", - outoffsets.dtype.type, - parents.dtype.type, - ]( - outoffsets.data, - parents.data, - parents.length, - outlength, - ) - ) - - # `outcontent` represents *this* layout in the reduction - # If this layout survives in the reduction (see `if` below), then we want - # to ensure that we have a ragged list type (unless it's a `keepdims=True` layout) + # Same "is the reduction immediately below us?" handling as before. if keepdims and depth == negaxis + 1: - # Don't convert the `RegularArray()` to a `ListOffsetArray`, - # means this will be broadcastable assert outcontent.is_regular elif depth >= negaxis + 2: - # The *only* >1D list types that we can have as direct children - # are the `is_list` or `is_regular` types; NumpyArray should be - # converted to `RegularArray`. assert outcontent.is_list or outcontent.is_regular outcontent = outcontent.to_ListOffsetArray64(False) return ak.contents.ListOffsetArray(outoffsets, outcontent, parameters=None) - def _rearrange_prepare_next(self, outlength, parents): + def _rearrange_prepare_next(self, outlength, offsets): nplike = self._backend.nplike nextlen = nplike.index_as_shape_item(self._offsets[-1] - self._offsets[0]) # Clamp nextlen to actual content length to avoid out-of-bounds access if nextlen is not unknown_length and self.content.length is not unknown_length: nextlen = min(nextlen, self.content.length) lenstarts = self._offsets.length - 1 + _maxcount = Index64.empty(1, nplike) offsetscopy = Index64.empty(self.offsets.length, nplike) assert ( @@ -1754,33 +1761,37 @@ def _rearrange_prepare_next(self, outlength, parents): maxcount = nplike.index_as_shape_item(_maxcount[0]) nextcarry = Index64.empty(nextlen, nplike=nplike) - nextparents = Index64.empty(nextlen, nplike=nplike) _maxnextparents = Index64.empty(1, nplike) if maxcount is unknown_length or outlength is unknown_length: distincts = Index64.empty(unknown_length, nplike) + nextoffsets = Index64.empty(unknown_length, nplike) else: distincts = Index64.empty(outlength * maxcount, nplike) + # Pessimistic upper bound: maxnextparents + 1 <= outlength * maxcount, + # so nextoffsets has at most outlength * maxcount + 1 entries. + nextoffsets = Index64.empty(outlength * maxcount + 1, nplike) assert ( _maxnextparents.nplike is nplike and distincts.nplike is nplike + and nextoffsets.nplike is nplike and self._offsets.nplike is nplike and offsetscopy.nplike is nplike - and parents.nplike is nplike + and offsets.nplike is nplike ) self._backend.maybe_kernel_error( self._backend[ "awkward_ListOffsetArray_reduce_nonlocal_preparenext_64", nextcarry.dtype.type, - nextparents.dtype.type, + nextoffsets.dtype.type, _maxnextparents.dtype.type, distincts.dtype.type, self._offsets.dtype.type, offsetscopy.dtype.type, - parents.dtype.type, + offsets.dtype.type, ]( nextcarry.data, - nextparents.data, + nextoffsets.data, nextlen, _maxnextparents.data, distincts.data, @@ -1788,34 +1799,125 @@ def _rearrange_prepare_next(self, outlength, parents): offsetscopy.data, self._offsets.data, lenstarts, - parents.data, + offsets.data, + outlength, maxcount, ) ) maxnextparents = nplike.index_as_shape_item(_maxnextparents[0]) - nextstarts = Index64.empty(maxnextparents + 1, nplike) - assert nextstarts.nplike is nplike and nextparents.nplike is nplike - self._backend.maybe_kernel_error( - self._backend[ - "awkward_ListOffsetArray_reduce_nonlocal_nextstarts_64", - nextstarts.dtype.type, - nextparents.dtype.type, - ]( - nextstarts.data, - nextparents.data, - nextlen, - ) - ) + + # Trim nextoffsets to its actual size (maxnextparents + 2 entries). + # In typetracer mode maxnextparents is unknown_length, in which case + # the slice itself is an unknown-length Index. + if maxnextparents is not unknown_length: + nextoffsets = nextoffsets[: maxnextparents + 2] + + # In the offsets representation, nextstarts is just nextoffsets[:-1]; + # the awkward_ListOffsetArray_reduce_nonlocal_nextstarts_64 call disappears. + nextstarts = nextoffsets[:-1] + return ( distincts, maxcount, maxnextparents, nextcarry, - nextparents, + nextoffsets, nextstarts, ) + # def _rearrange_prepare_next(self, outlength, parents): + # nplike = self._backend.nplike + # nextlen = nplike.index_as_shape_item(self._offsets[-1] - self._offsets[0]) + # # Clamp nextlen to actual content length to avoid out-of-bounds access + # if nextlen is not unknown_length and self.content.length is not unknown_length: + # nextlen = min(nextlen, self.content.length) + # lenstarts = self._offsets.length - 1 + # _maxcount = Index64.empty(1, nplike) + # offsetscopy = Index64.empty(self.offsets.length, nplike) + # assert ( + # _maxcount.nplike is nplike + # and offsetscopy.nplike is nplike + # and self._offsets.nplike is nplike + # ) + # self._backend.maybe_kernel_error( + # self._backend[ + # "awkward_ListOffsetArray_reduce_nonlocal_maxcount_offsetscopy_64", + # _maxcount.dtype.type, + # offsetscopy.dtype.type, + # self._offsets.dtype.type, + # ]( + # _maxcount.data, + # offsetscopy.data, + # self._offsets.data, + # lenstarts, + # ) + # ) + # maxcount = nplike.index_as_shape_item(_maxcount[0]) + + # nextcarry = Index64.empty(nextlen, nplike=nplike) + # nextparents = Index64.empty(nextlen, nplike=nplike) + # _maxnextparents = Index64.empty(1, nplike) + # if maxcount is unknown_length or outlength is unknown_length: + # distincts = Index64.empty(unknown_length, nplike) + # else: + # distincts = Index64.empty(outlength * maxcount, nplike) + + # assert ( + # _maxnextparents.nplike is nplike + # and distincts.nplike is nplike + # and self._offsets.nplike is nplike + # and offsetscopy.nplike is nplike + # and parents.nplike is nplike + # ) + # self._backend.maybe_kernel_error( + # self._backend[ + # "awkward_ListOffsetArray_reduce_nonlocal_preparenext_64", + # nextcarry.dtype.type, + # nextparents.dtype.type, + # _maxnextparents.dtype.type, + # distincts.dtype.type, + # self._offsets.dtype.type, + # offsetscopy.dtype.type, + # parents.dtype.type, + # ]( + # nextcarry.data, + # nextparents.data, + # nextlen, + # _maxnextparents.data, + # distincts.data, + # distincts.length, + # offsetscopy.data, + # self._offsets.data, + # lenstarts, + # parents.data, + # maxcount, + # ) + # ) + + # maxnextparents = nplike.index_as_shape_item(_maxnextparents[0]) + # nextstarts = Index64.empty(maxnextparents + 1, nplike) + # assert nextstarts.nplike is nplike and nextparents.nplike is nplike + # self._backend.maybe_kernel_error( + # self._backend[ + # "awkward_ListOffsetArray_reduce_nonlocal_nextstarts_64", + # nextstarts.dtype.type, + # nextparents.dtype.type, + # ]( + # nextstarts.data, + # nextparents.data, + # nextlen, + # ) + # ) + # return ( + # distincts, + # maxcount, + # maxnextparents, + # nextcarry, + # nextparents, + # nextstarts, + # ) + def _validity_error(self, path): if self._backend.nplike.known_data and self.offsets.length < 1: return f"at {path} ({type(self)!r}): len(offsets) < 1" diff --git a/src/awkward/contents/numpyarray.py b/src/awkward/contents/numpyarray.py index 110d6055a3..01f8a07573 100644 --- a/src/awkward/contents/numpyarray.py +++ b/src/awkward/contents/numpyarray.py @@ -49,7 +49,7 @@ from awkward.errors import AxisError from awkward.forms.form import Form, FormKeyPathT from awkward.forms.numpyform import NumpyForm -from awkward.index import Index, resolve_index +from awkward.index import Index from awkward.types.numpytype import primitive_to_dtype if TYPE_CHECKING: @@ -723,14 +723,13 @@ def _numbers_to_type(self, name, including_unknown): backend=self._backend, ) - def _is_unique(self, negaxis, starts, parents, offsets, outlength): + def _is_unique(self, negaxis, starts, offsets, outlength): if self.length is not unknown_length and self.length == 0: return True elif len(self.shape) != 1: return self.to_RegularArray()._is_unique( negaxis, starts, - parents, offsets, outlength, ) @@ -738,12 +737,11 @@ def _is_unique(self, negaxis, starts, parents, offsets, outlength): return self.to_contiguous()._is_unique( negaxis, starts, - parents, offsets, outlength, ) else: - out = self._unique(negaxis, starts, parents, offsets, outlength) + out = self._unique(negaxis, starts, offsets, outlength) if isinstance(out, ak.contents.ListOffsetArray): return ( out.content.length is not unknown_length @@ -752,7 +750,36 @@ def _is_unique(self, negaxis, starts, parents, offsets, outlength): else: return out.length is not unknown_length and out.length == self.length - def _unique(self, negaxis, starts, parents, offsets, outlength): + # def _is_unique(self, negaxis, starts, parents, offsets, outlength): + # if self.length is not unknown_length and self.length == 0: + # return True + # elif len(self.shape) != 1: + # return self.to_RegularArray()._is_unique( + # negaxis, + # starts, + # parents, + # offsets, + # outlength, + # ) + # elif not self.is_contiguous: + # return self.to_contiguous()._is_unique( + # negaxis, + # starts, + # parents, + # offsets, + # outlength, + # ) + # else: + # out = self._unique(negaxis, starts, parents, offsets, outlength) + # if isinstance(out, ak.contents.ListOffsetArray): + # return ( + # out.content.length is not unknown_length + # and out.content.length == self.length + # ) + # else: + # return out.length is not unknown_length and out.length == self.length + + def _unique(self, negaxis, starts, offsets, outlength): if self.shape[0] is not unknown_length and self.shape[0] == 0: return self @@ -762,28 +789,28 @@ def _unique(self, negaxis, starts, parents, offsets, outlength): elif negaxis is None: contiguous_self = self.to_contiguous() - offsets = ak.index.Index64.zeros(2, self._backend.nplike) - offsets[1] = self._data.size + offsets_local = ak.index.Index64.zeros(2, self._backend.nplike) + offsets_local[1] = self._data.size dtype = ( np.dtype(np.int64) if self._data.dtype.kind.upper() == "M" else self._data.dtype ) out = self._backend.nplike.empty(self._data.size, dtype=dtype) - assert offsets.nplike is self._backend.nplike + assert offsets_local.nplike is self._backend.nplike self._backend.maybe_kernel_error( self._backend[ "awkward_sort", dtype.type, dtype.type, - offsets.dtype.type, + offsets_local.dtype.type, ]( out, contiguous_self._data, - offsets[1], - offsets.data, + offsets_local[1], + offsets_local.data, 2, - offsets[1], + offsets_local[1], True, False, ) @@ -804,70 +831,53 @@ def _unique(self, negaxis, starts, parents, offsets, outlength): return self.to_RegularArray()._unique( negaxis, starts, - parents, offsets, outlength, ) else: - parents_length = parents.length - offsets_length = ak.index.Index64.empty(1, self._backend.nplike) - assert ( - offsets_length.nplike is self._backend.nplike - and parents.nplike is self._backend.nplike - ) - self._backend.maybe_kernel_error( - self._backend[ - "awkward_sorting_ranges_length", - offsets_length.dtype.type, - parents.dtype.type, - ]( - offsets_length.data, - parents.data, - parents_length, - ) - ) - - offsets = ak.index.Index64.empty(offsets_length[0], self._backend.nplike) - assert ( - offsets.nplike is self._backend.nplike - and parents.nplike is self._backend.nplike - ) - self._backend.maybe_kernel_error( - self._backend[ - "awkward_sorting_ranges", - offsets.dtype.type, - parents.dtype.type, - ]( - offsets.data, - offsets_length[0], - parents.data, - parents_length, - ) - ) - - out = self._backend.nplike.empty(self.length, dtype=self.dtype) - assert offsets.nplike is self._backend.nplike + # The incoming `offsets` is the per-bin offsets-rep of length + # outlength + 1, possibly with empty bins represented as + # consecutive equal values (e.g. [0, 3, 3, 5, 6, 10, 10]). + # `awkward_unique_ranges` and `awkward_unique_offsets` are still + # parents-era kernels that expect a *compact* offsets array (one + # entry per non-empty bin, like the original `awkward_sorting_ranges` + # output). Compact the offsets here, run the unchanged kernels on + # the compact form, then let `awkward_unique_offsets` re-expand to + # the full outlength+1 outoffsets using `starts`. + nplike = self._backend.nplike + keep = nplike.empty(offsets.length, dtype=np.bool_) + keep[0] = True + keep[1:] = offsets.data[1:] != offsets.data[:-1] + compact_data = offsets.data[keep] + compact_offsets = ak.index.Index64(compact_data, nplike=nplike) + compact_offsets_length = compact_offsets.length + parents_length = nplike.index_as_shape_item(offsets.data[-1]) + + out = nplike.empty(self.length, dtype=self.dtype) + assert compact_offsets.nplike is self._backend.nplike self._backend.maybe_kernel_error( self._backend[ "awkward_sort", out.dtype.type, self._data.dtype.type, - offsets.dtype.type, + compact_offsets.dtype.type, ]( out, self._data, self.shape[0], - offsets.data, - offsets_length[0], + compact_offsets.data, + compact_offsets_length, parents_length, True, False, ) ) - nextoffsets = ak.index.Index64.empty(offsets.length, self._backend.nplike) + nextoffsets = ak.index.Index64.empty( + compact_offsets_length, self._backend.nplike + ) assert ( - offsets.nplike is self._backend.nplike + compact_offsets.nplike is self._backend.nplike and nextoffsets.nplike is self._backend.nplike ) if out.dtype == np.bool_: @@ -875,12 +885,12 @@ def _unique(self, negaxis, starts, parents, offsets, outlength): self._backend[ "awkward_unique_ranges_bool", out.dtype.type, - offsets.dtype.type, + compact_offsets.dtype.type, nextoffsets.dtype.type, ]( out, - offsets.data, - offsets.length, + compact_offsets.data, + compact_offsets_length, nextoffsets.data, ) ) @@ -889,18 +899,17 @@ def _unique(self, negaxis, starts, parents, offsets, outlength): self._backend[ "awkward_unique_ranges", out.dtype.type, - offsets.dtype.type, + compact_offsets.dtype.type, nextoffsets.dtype.type, ]( out, - offsets.data, - offsets.length, + compact_offsets.data, + compact_offsets_length, nextoffsets.data, ) ) outoffsets = ak.index.Index64.empty(starts.length + 1, self._backend.nplike) - assert ( outoffsets.nplike is self._backend.nplike and nextoffsets.nplike is self._backend.nplike @@ -926,57 +935,18 @@ def _unique(self, negaxis, starts, parents, offsets, outlength): ) def _argsort_next( - self, negaxis, starts, shifts, parents, offsets, outlength, ascending, stable + self, negaxis, starts, shifts, offsets, outlength, ascending, stable ): if len(self.shape) != 1: return self.to_RegularArray()._argsort_next( - negaxis, starts, shifts, parents, offsets, outlength, ascending, stable + negaxis, starts, shifts, offsets, outlength, ascending, stable ) elif not self.is_contiguous: return self.to_contiguous()._argsort_next( - negaxis, starts, shifts, parents, offsets, outlength, ascending, stable + negaxis, starts, shifts, offsets, outlength, ascending, stable ) else: - parents = resolve_index(parents, self._backend) - - parents_length = parents.length - _offsets_length = ak.index.Index64.empty(1, self._backend.nplike) - assert ( - _offsets_length.nplike is self._backend.nplike - and parents.nplike is self._backend.nplike - ) - self._backend.maybe_kernel_error( - self._backend[ - "awkward_sorting_ranges_length", - _offsets_length.dtype.type, - parents.dtype.type, - ]( - _offsets_length.data, - parents.data, - parents_length, - ) - ) - offsets_length = self._backend.nplike.index_as_shape_item( - _offsets_length[0] - ) - - offsets = ak.index.Index64.empty(offsets_length, self._backend.nplike) - assert ( - offsets.nplike is self._backend.nplike - and parents.nplike is self._backend.nplike - ) - self._backend.maybe_kernel_error( - self._backend[ - "awkward_sorting_ranges", - offsets.dtype.type, - parents.dtype.type, - ]( - offsets.data, - offsets_length, - parents.data, - parents_length, - ) - ) + offsets_length = offsets.length dtype = ( np.dtype(np.int64) @@ -1006,6 +976,25 @@ def _argsort_next( ) if shifts is not None: + # awkward_NumpyArray_rearrange_shifted's phase-2 loop walks + # `shifts.length` (independent of the bin count), and for each + # shift index it reads parents[i] to find the outer bin. We + # derive parents from offsets here. + nplike = self._backend.nplike + # Cast `counts` to np.intp because np.repeat enforces the + # 'safe' casting rule on its `repeats` parameter, and on + # platforms where np.intp is int32 (Windows 64-bit numpy <2.0, + # 32-bit numpy 2.x) an int64 counts array would raise + # "Cannot cast array data from dtype('int64') to dtype('int32') + # according to the rule 'safe'". + counts = offsets.data[1:] - offsets.data[:-1] + parents_data = nplike.repeat( + nplike.arange( + nplike.shape_item_as_index(outlength), dtype=np.int64 + ), + nplike.astype(counts, np.intp), + ) + parents = ak.index.Index64(parents_data, nplike=nplike) assert ( nextcarry.nplike is self._backend.nplike and shifts.nplike is self._backend.nplike @@ -1026,7 +1015,7 @@ def _argsort_next( shifts.data, shifts.length, offsets.data, - offsets_length, + outlength, parents.data, starts.data, ) @@ -1034,60 +1023,19 @@ def _argsort_next( out = NumpyArray(nextcarry.data, parameters=None, backend=self._backend) return out - def _sort_next( - self, negaxis, starts, parents, offsets, outlength, ascending, stable - ): + def _sort_next(self, negaxis, starts, offsets, outlength, ascending, stable): if len(self.shape) != 1: return self.to_RegularArray()._sort_next( - negaxis, starts, parents, offsets, outlength, ascending, stable + negaxis, starts, offsets, outlength, ascending, stable ) elif not self.is_contiguous: return self.to_contiguous()._sort_next( - negaxis, starts, parents, offsets, outlength, ascending, stable + negaxis, starts, offsets, outlength, ascending, stable ) else: - parents = resolve_index(parents, self._backend) - - parents_length = parents.length - _offsets_length = ak.index.Index64.empty(1, self._backend.nplike) - assert ( - _offsets_length.nplike is self._backend.nplike - and parents.nplike is self._backend.nplike - ) - self._backend.maybe_kernel_error( - self._backend[ - "awkward_sorting_ranges_length", - _offsets_length.dtype.type, - parents.dtype.type, - ]( - _offsets_length.data, - parents.data, - parents_length, - ) - ) - offsets_length = self._backend.nplike.index_as_shape_item( - _offsets_length[0] - ) - - offsets = ak.index.Index64.empty(offsets_length, self._backend.nplike) - - assert ( - offsets.nplike is self._backend.nplike - and parents.nplike is self._backend.nplike - ) - self._backend.maybe_kernel_error( - self._backend[ - "awkward_sorting_ranges", - offsets.dtype.type, - parents.dtype.type, - ]( - offsets.data, - offsets_length, - parents.data, - parents_length, - ) - ) + offsets_length = offsets.length + parents_length = self._backend.nplike.index_as_shape_item(offsets[-1]) dtype = ( np.dtype(np.int64) @@ -1136,7 +1084,6 @@ def _reduce_next( negaxis, starts, shifts, - parents, offsets, outlength, mask, @@ -1149,7 +1096,6 @@ def _reduce_next( negaxis, starts, shifts, - parents, offsets, outlength, mask, @@ -1162,7 +1108,6 @@ def _reduce_next( negaxis, starts, shifts, - parents, offsets, outlength, mask, @@ -1174,31 +1119,29 @@ def _reduce_next( assert self.is_contiguous assert self._data.ndim == 1 - parents = resolve_index(parents, self._backend) - offsets = resolve_index(offsets, self._backend) + # No more `parents_to_offsets_aligned` round-trip — `offsets` is the + # bin descriptor we receive directly. - out = reducer.apply(self, parents, offsets, starts, shifts, outlength) + out = reducer.apply(self, offsets, starts, shifts, outlength) if mask: outmask = ak.index.Index8.empty(outlength, self._backend.nplike) assert ( outmask.nplike is self._backend.nplike - and parents.nplike is self._backend.nplike + and offsets.nplike is self._backend.nplike ) self._backend.maybe_kernel_error( self._backend[ "awkward_NumpyArray_reduce_mask_ByteMaskedArray_64", outmask.dtype.type, - parents.dtype.type, + offsets.dtype.type, ]( outmask.data, - parents.data, - parents.length, + offsets.data, outlength, ) ) out = ak.contents.ByteMaskedArray(outmask, out, False, parameters=None) - if keepdims: out = ak.contents.RegularArray(out, 1, self.length, parameters=None) diff --git a/src/awkward/contents/recordarray.py b/src/awkward/contents/recordarray.py index 5f5ebaa43d..313bdffb95 100644 --- a/src/awkward/contents/recordarray.py +++ b/src/awkward/contents/recordarray.py @@ -886,23 +886,21 @@ def _numbers_to_type(self, name, including_unknown): backend=self._backend, ) - def _is_unique(self, negaxis, starts, parents, offsets, outlength): + def _is_unique(self, negaxis, starts, offsets, outlength): for content in self._contents: - if not content._is_unique(negaxis, starts, parents, offsets, outlength): + if not content._is_unique(negaxis, starts, offsets, outlength): return False return True - def _unique(self, negaxis, starts, parents, offsets, outlength): + def _unique(self, negaxis, starts, offsets, outlength): raise NotImplementedError def _argsort_next( - self, negaxis, starts, shifts, parents, offsets, outlength, ascending, stable + self, negaxis, starts, shifts, offsets, outlength, ascending, stable ): raise NotImplementedError - def _sort_next( - self, negaxis, starts, parents, offsets, outlength, ascending, stable - ): + def _sort_next(self, negaxis, starts, offsets, outlength, ascending, stable): if len(self.fields) == 0: return ak.contents.NumpyArray( self._backend.nplike.instance().empty(0, dtype=np.int64), @@ -914,7 +912,7 @@ def _sort_next( for content in self._contents: contents.append( content._sort_next( - negaxis, starts, parents, offsets, outlength, ascending, stable + negaxis, starts, offsets, outlength, ascending, stable ) ) return RecordArray( @@ -951,7 +949,6 @@ def _reduce_next( negaxis, starts, shifts, - parents, offsets, outlength, mask, @@ -970,41 +967,18 @@ def _reduce_next( # so asking for a mask doesn't help us! reducer_should_mask = mask and not reducer.needs_position - # Convert parents into offsets to build a list for axis=1 reduction - offsets = ak.index.Index64.empty(outlength + 1, self._backend.nplike) - assert ( - offsets.nplike is self._backend.nplike - and parents.nplike is self._backend.nplike - ) - # `parents` are possibly non monotonic increasing, so we must re-order the result - # This happens naturally for the `NumpyArray` reducers. - carry = ak.index.Index64.empty(outlength, self._backend.nplike) - - # Note: if we knew that `negaxis == depth` exclusively for this layout, we could use - # the simpler `ListOffsetArray_reduce_local_outoffsets_64`. However, if our parent was reduced, - # we would still see `negaxis == depth`, so this kernel has to be used instead. - assert carry.nplike is self._backend.nplike - self._backend.maybe_kernel_error( - self._backend[ - "awkward_RecordArray_reduce_nonlocal_outoffsets_64", - offsets.dtype.type, - carry.dtype.type, - parents.dtype.type, - ]( - offsets.data, - carry.data, - parents.data, - parents.length, - outlength, - ) - ) + # In the offsets-pipeline, `offsets` is already monotonic by + # construction (one entry per outer bin in order), so we don't + # need the parents -> offsets converter that the original + # `awkward_RecordArray_reduce_nonlocal_outoffsets_64` provided + # nor its companion `carry` rearrangement: the reducer's output + # is already in bin order. out = _apply_record_reducer( reducer_recordclass, ak.contents.ListOffsetArray(offsets, self), reducer_should_mask, behavior, ) - out = out._carry(carry, allow_lazy=True) if out.is_option and not reducer_should_mask: reason = ( @@ -1017,66 +991,30 @@ def _reduce_next( f"returned an option when it was not expected ({reason})" ) - if reducer.needs_position: - assert isinstance(out, ak.contents.NumpyArray) - - if shifts is None: - assert ( - out.backend is self._backend - and parents.nplike is self._backend.nplike - and starts.nplike is self._backend.nplike - ) - self._backend.maybe_kernel_error( - self._backend[ - "awkward_NumpyArray_reduce_adjust_starts_64", - out.data.dtype.type, - parents.dtype.type, - starts.dtype.type, - ]( - out.data, - outlength, - parents.data, - starts.data, - ) - ) - else: - assert ( - out.backend is self._backend - and parents.nplike is self._backend.nplike - and starts.nplike is self._backend.nplike - and shifts.nplike is self._backend.nplike - ) - self._backend.maybe_kernel_error( - self._backend[ - "awkward_NumpyArray_reduce_adjust_starts_shifts_64", - out.data.dtype.type, - parents.dtype.type, - starts.dtype.type, - shifts.dtype.type, - ]( - out.data, - outlength, - parents.data, - starts.data, - shifts.data, - ) - ) + # Record-reducer overrides (e.g. `_argmin_pair`, `overload_argmax`) + # already return *row-relative* indices: the user typically writes + # something like `ak.argmax(array["rho"], axis=-1, ...)` inside + # their override, which yields per-row indices. The standard + # `awkward_NumpyArray_reduce_adjust_starts_*` kernels are designed + # to convert ABSOLUTE argmin/argmax indices (as produced by the + # leaf NumpyArray reducer) into row-relative form by subtracting + # `starts[k]`. Applying that subtraction here would be a second + # adjustment on already-correct values, producing negatives like + # `0 - 3 = -3`. So we skip the adjust step for record reducers — + # the override is the authoritative source of position info. if mask: outmask = ak.index.Index8.empty(outlength, self._backend.nplike) - assert ( - outmask.nplike is self._backend.nplike - and parents.nplike is self._backend.nplike - ) + assert outmask.nplike is self._backend.nplike + self._backend.maybe_kernel_error( self._backend[ "awkward_NumpyArray_reduce_mask_ByteMaskedArray_64", outmask.dtype.type, - parents.dtype.type, + offsets.dtype.type, ]( outmask.data, - parents.data, - parents.length, + offsets.data, outlength, ) ) diff --git a/src/awkward/contents/regulararray.py b/src/awkward/contents/regulararray.py index c66f05b240..d57c0e8ef4 100644 --- a/src/awkward/contents/regulararray.py +++ b/src/awkward/contents/regulararray.py @@ -40,7 +40,7 @@ ) from awkward.forms.form import Form, FormKeyPathT from awkward.forms.regularform import RegularForm -from awkward.index import Index, resolve_index +from awkward.index import Index if TYPE_CHECKING: from awkward._slicing import SliceItem @@ -886,25 +886,23 @@ def _numbers_to_type(self, name, including_unknown): parameters=self._parameters, ) - def _is_unique(self, negaxis, starts, parents, offsets, outlength): + def _is_unique(self, negaxis, starts, offsets, outlength): if self.length == 0: return True return self.to_ListOffsetArray64(True)._is_unique( negaxis, starts, - parents, offsets, outlength, ) - def _unique(self, negaxis, starts, parents, offsets, outlength): + def _unique(self, negaxis, starts, offsets, outlength): if self.length == 0: return self out = self.to_ListOffsetArray64(True)._unique( negaxis, starts, - parents, offsets, outlength, ) @@ -921,11 +919,11 @@ def _unique(self, negaxis, starts, parents, offsets, outlength): return out def _argsort_next( - self, negaxis, starts, shifts, parents, offsets, outlength, ascending, stable + self, negaxis, starts, shifts, offsets, outlength, ascending, stable ): next = self.to_ListOffsetArray64(True) out = next._argsort_next( - negaxis, starts, shifts, parents, offsets, outlength, ascending, stable + negaxis, starts, shifts, offsets, outlength, ascending, stable ) if isinstance(out, ak.contents.RegularArray): @@ -939,27 +937,86 @@ def _argsort_next( return out - def _sort_next( - self, negaxis, starts, parents, offsets, outlength, ascending, stable - ): + def _sort_next(self, negaxis, starts, offsets, outlength, ascending, stable): out = self.to_ListOffsetArray64(True)._sort_next( - negaxis, starts, parents, offsets, outlength, ascending, stable + negaxis, starts, offsets, outlength, ascending, stable ) - - # FIXME - # if isinstance(out, ak.contents.RegularArray): - # if isinstance(out._content, ak.contents.ListOffsetArray): - # return ak.contents.RegularArray( - # out._content.to_RegularArray(), - # out._size, - # out.length, - # None, - # out._parameters, - # self._backend.nplike, - # ) - return out + # def _is_unique(self, negaxis, starts, parents, offsets, outlength): + # if self.length == 0: + # return True + + # return self.to_ListOffsetArray64(True)._is_unique( + # negaxis, + # starts, + # parents, + # offsets, + # outlength, + # ) + + # def _unique(self, negaxis, starts, parents, offsets, outlength): + # if self.length == 0: + # return self + # out = self.to_ListOffsetArray64(True)._unique( + # negaxis, + # starts, + # parents, + # offsets, + # outlength, + # ) + + # if isinstance(out, ak.contents.RegularArray): + # if isinstance(out._content, ak.contents.ListOffsetArray): + # return ak.contents.RegularArray( + # out._content.to_RegularArray(), + # out._size, + # out.length, + # parameters=out._parameters, + # ) + + # return out + + # def _argsort_next( + # self, negaxis, starts, shifts, parents, offsets, outlength, ascending, stable + # ): + # next = self.to_ListOffsetArray64(True) + # out = next._argsort_next( + # negaxis, starts, shifts, parents, offsets, outlength, ascending, stable + # ) + + # if isinstance(out, ak.contents.RegularArray): + # if isinstance(out._content, ak.contents.ListOffsetArray): + # return ak.contents.RegularArray( + # out._content.to_RegularArray(), + # out._size, + # out.length, + # parameters=out._parameters, + # ) + + # return out + + # def _sort_next( + # self, negaxis, starts, parents, offsets, outlength, ascending, stable + # ): + # out = self.to_ListOffsetArray64(True)._sort_next( + # negaxis, starts, parents, offsets, outlength, ascending, stable + # ) + + # # FIXME + # # if isinstance(out, ak.contents.RegularArray): + # # if isinstance(out._content, ak.contents.ListOffsetArray): + # # return ak.contents.RegularArray( + # # out._content.to_RegularArray(), + # # out._size, + # # out.length, + # # None, + # # out._parameters, + # # self._backend.nplike, + # # ) + + # return out + def _combinations(self, n, replacement, recordlookup, parameters, axis, depth): nplike = self._backend.nplike @@ -1057,7 +1114,6 @@ def _reduce_next( negaxis, starts, shifts, - parents, offsets, outlength, mask, @@ -1067,50 +1123,38 @@ def _reduce_next( nplike = self._backend.nplike branch, depth = self.branch_depth nextlen = self.length * self._size + if not branch and negaxis == depth: nextcarry = ak.index.Index64.empty(nextlen, nplike=nplike) - nextparents = ak.index.Index64.empty(nextlen, nplike=nplike) - parents = resolve_index(parents, self._backend) + nextoutlength = outlength * self._size + nextoffsets = ak.index.Index64.empty(nextoutlength + 1, nplike=nplike) assert ( - parents.nplike is nplike + offsets.nplike is nplike and nextcarry.nplike is nplike - and nextparents.nplike is nplike + and nextoffsets.nplike is nplike ) self._backend.maybe_kernel_error( self._backend[ "awkward_RegularArray_reduce_nonlocal_preparenext_64", nextcarry.dtype.type, - nextparents.dtype.type, - parents.dtype.type, + nextoffsets.dtype.type, + offsets.dtype.type, ]( nextcarry.data, - nextparents.data, - parents.data, + nextoffsets.data, + offsets.data, self._size, self.length, - ) - ) - nextstarts = ak.index.Index64.empty( - # `starts` must have at least enough elements for the largest `nextparent` to index into - # The upper bound for this value is given by `nextlen` (each item in this list belonging - # to a distinct reduction), but the length of `starts` should equate to `maxnextparents - 1`. - starts.length * self._size, - nplike=nplike, - ) - assert nextstarts.nplike is nplike and nextparents.nplike is nplike - self._backend.maybe_kernel_error( - self._backend[ - "awkward_ListOffsetArray_reduce_nonlocal_nextstarts_64", - nextstarts.dtype.type, - nextparents.dtype.type, - ]( - nextstarts.data, - nextparents.data, - nextlen, + outlength, ) ) + # In the offsets representation, nextstarts is just nextoffsets[:-1]. + # The original `awkward_ListOffsetArray_reduce_nonlocal_nextstarts_64` + # kernel call is no longer needed. + nextstarts = nextoffsets[:-1] + if reducer.needs_position: # Regular arrays have the same length rows, so there can be no "missing" values # unlike ragged list types @@ -1119,15 +1163,12 @@ def _reduce_next( nextshifts = None nextcontent = self._content._carry(nextcarry, False) - nextoutlength = outlength * self._size outcontent = nextcontent._reduce_next( reducer, negaxis - 1, nextstarts, nextshifts, - nextparents, - offsets, - # We want a result of length + nextoffsets, nextoutlength, mask, False, @@ -1141,94 +1182,42 @@ def _reduce_next( if keepdims: out = ak.contents.RegularArray(out, 1, self.length, parameters=None) return out - else: - nextparents = ak.index.Index64.empty(nextlen, nplike) - assert nextparents.nplike is nplike - self._backend.maybe_kernel_error( - self._backend[ - "awkward_RegularArray_reduce_local_nextparents_64", - nextparents.dtype.type, - ]( - nextparents.data, - self._size, - self.length, - ) - ) - - if self._size is not unknown_length and self._size > 0: - nextstarts = ak.index.Index64( - nplike.arange(0, nextlen, self._size), - nplike=nplike, - ) - else: - assert nextlen is unknown_length or nextlen == 0 - nextstarts = ak.index.Index64( - nplike.zeros(nextlen, dtype=np.int64), - nplike=nplike, - ) + else: + # Local reduction case: nextoffsets is just `arange(0, nextlen+1, size)`, + # which is exactly what `_compact_offsets64(True)` returns. No kernel needed. + nextoffsets = self._compact_offsets64(True) + nextstarts = nextoffsets[:-1] outcontent = self._content._reduce_next( reducer, negaxis, nextstarts, shifts, - nextparents, - offsets, + nextoffsets, self.length, mask, keepdims, behavior, ) - # Understanding this logic is nontrivial without examples. So, let's start with a - # somewhat simple example of `5 * 4 * 3 * int64`. This is composed of the following layouts - # ^........^ NumpyArray(5*4*3) - # ^............^ RegularArray(..., size=3) - # ^................^ RegularArray(..., size=4) - # If the reduction axis is 2 (or -1), then the resulting shape is `5 * 4 * int64`. - # This corresponds to `RegularArray(NumpyArray(5*4), size=4)`, i.e. the `size=3` layout - # *disappears*, and is replaced by the bare reduction `NumpyArray`. Therefore, if - # this layout is _directly_ above the reduction, it won't survive the reduction. - # - # The `_reduce_next` mechanism returns its first result (by recursion) from the - # leaf `NumpyArray`. The parent `RegularArray` takes the `negaxis != depth` branch, - # and asks the `NumpyArray` to perform the reduction. The `_reduce_next` is such that the - # callee must wrap the reduction result into a list whose length is given by the *caller*, - # i.e. the parent. Therefore, the `RegularArray(..., size=3)` layout reduces its content with - # `outlength=len(self)=5*4`. The parent of this `RegularArray` (with `size=4`) - # will reduce its contents with `outlength=5`. It is *this* reduction that must be returned as a - # `RegularArray(..., size=4)`. Clearly, the `RegularArray(..., size=3)` layout has disappeared - # and been replaced by a `NumpyArray` of the appropriate size for the `RegularArray(..., size=4)` - # to wrap. Hence, we only want to interpret the content as a `RegularArray(..., size=self._size)` - # iff. we are not the direct parent of the reduced layout. - - # At `depth == negaxis+1`, we are above the dimension being reduced. All implemented - # _dimensional_ types should return `RegularArray` for `keepdims=True`, so we don't need - # to convert `outcontent` to a `RegularArray` + # Same "is the reduction immediately below us?" handling as before, + # unchanged because it doesn't touch parents/offsets. if keepdims and depth == negaxis + 1: assert outcontent.is_regular - # At `depth >= negaxis + 2`, we are wrapping at _least_ one other list type. This list-type - # may return a ListOffsetArray, which we need to convert to a `RegularArray`. We know that - # the result can be reinterpreted as a `RegularArray`, because it's not the immediate parent - # of the reduction, so it must exist in the type. elif depth >= negaxis + 2: if outcontent.is_list: - # Let's only deal with ListOffsetArray outcontent = outcontent.to_ListOffsetArray64(False) - # Fast-path to convert data that we know should be regular (avoid a kernel call) start, stop = ( outcontent.offsets[0], outcontent.offsets[outcontent.offsets.length - 1], ) - trimmed = outcontent.content._getitem_range(start, stop) assert ( trimmed.length is unknown_length or outcontent.length is unknown_length or trimmed.length == self._size * outcontent.length ) - outcontent = ak.contents.RegularArray( trimmed, size=self._size, @@ -1237,23 +1226,12 @@ def _reduce_next( else: assert outcontent.is_regular - outoffsets = ak.index.Index64.empty(outlength + 1, nplike) - - parents = resolve_index(parents, self._backend) - - assert outoffsets.nplike is nplike and parents.nplike is nplike - self._backend.maybe_kernel_error( - self._backend[ - "awkward_ListOffsetArray_reduce_local_outoffsets_64", - outoffsets.dtype.type, - parents.dtype.type, - ]( - outoffsets.data, - parents.data, - parents.length, - outlength, - ) - ) + # outoffsets used to come from + # `awkward_ListOffsetArray_reduce_local_outoffsets_64(parents, ...)`, + # which produced the offsets-rep of `parents`. With offsets already in + # hand, we just use them. + assert offsets.length == outlength + 1 + outoffsets = offsets return ak.contents.ListOffsetArray(outoffsets, outcontent, parameters=None) diff --git a/src/awkward/contents/unionarray.py b/src/awkward/contents/unionarray.py index 526c2fdae3..aff8101f8f 100644 --- a/src/awkward/contents/unionarray.py +++ b/src/awkward/contents/unionarray.py @@ -1381,7 +1381,7 @@ def _numbers_to_type(self, name, including_unknown): parameters=self._parameters, ) - def _is_unique(self, negaxis, starts, parents, offsets, outlength): + def _is_unique(self, negaxis, starts, offsets, outlength): simplified = type(self).simplified( self._tags, self._index, @@ -1392,9 +1392,9 @@ def _is_unique(self, negaxis, starts, parents, offsets, outlength): if isinstance(simplified, ak.contents.UnionArray): raise ValueError("cannot check if an irreducible UnionArray is unique") - return simplified._is_unique(negaxis, starts, parents, offsets, outlength) + return simplified._is_unique(negaxis, starts, offsets, outlength) - def _unique(self, negaxis, starts, parents, offsets, outlength): + def _unique(self, negaxis, starts, offsets, outlength): simplified = type(self).simplified( self._tags, self._index, @@ -1405,10 +1405,10 @@ def _unique(self, negaxis, starts, parents, offsets, outlength): if isinstance(simplified, ak.contents.UnionArray): raise ValueError("cannot make a unique irreducible UnionArray") - return simplified._unique(negaxis, starts, parents, offsets, outlength) + return simplified._unique(negaxis, starts, offsets, outlength) def _argsort_next( - self, negaxis, starts, shifts, parents, offsets, outlength, ascending, stable + self, negaxis, starts, shifts, offsets, outlength, ascending, stable ): simplified = type(self).simplified( self._tags, @@ -1428,12 +1428,10 @@ def _argsort_next( raise ValueError("cannot argsort an irreducible UnionArray") return simplified._argsort_next( - negaxis, starts, shifts, parents, offsets, outlength, ascending, stable + negaxis, starts, shifts, offsets, outlength, ascending, stable ) - def _sort_next( - self, negaxis, starts, parents, offsets, outlength, ascending, stable - ): + def _sort_next(self, negaxis, starts, offsets, outlength, ascending, stable): if self.length is not unknown_length and self.length == 0: return self @@ -1451,7 +1449,7 @@ def _sort_next( raise ValueError("cannot sort an irreducible UnionArray") return simplified._sort_next( - negaxis, starts, parents, offsets, outlength, ascending, stable + negaxis, starts, offsets, outlength, ascending, stable ) def _reduce_next( @@ -1460,7 +1458,6 @@ def _reduce_next( negaxis, starts, shifts, - parents, offsets, outlength, mask, diff --git a/src/awkward/contents/unmaskedarray.py b/src/awkward/contents/unmaskedarray.py index d897905bc5..0b445ba9be 100644 --- a/src/awkward/contents/unmaskedarray.py +++ b/src/awkward/contents/unmaskedarray.py @@ -416,21 +416,21 @@ def _numbers_to_type(self, name, including_unknown): parameters=self._parameters, ) - def _is_unique(self, negaxis, starts, parents, offsets, outlength): + def _is_unique(self, negaxis, starts, offsets, outlength): if self._content.length is not unknown_length and self._content.length == 0: return True - return self._content._is_unique(negaxis, starts, parents, offsets, outlength) + return self._content._is_unique(negaxis, starts, offsets, outlength) - def _unique(self, negaxis, starts, parents, offsets, outlength): + def _unique(self, negaxis, starts, offsets, outlength): if self._content.length is not unknown_length and self._content.length == 0: return self - return self._content._unique(negaxis, starts, parents, offsets, outlength) + return self._content._unique(negaxis, starts, offsets, outlength) def _argsort_next( - self, negaxis, starts, shifts, parents, offsets, outlength, ascending, stable + self, negaxis, starts, shifts, offsets, outlength, ascending, stable ): out = self._content._argsort_next( - negaxis, starts, shifts, parents, offsets, outlength, ascending, stable + negaxis, starts, shifts, offsets, outlength, ascending, stable ) if isinstance(out, ak.contents.RegularArray): @@ -440,11 +440,9 @@ def _argsort_next( else: return out - def _sort_next( - self, negaxis, starts, parents, offsets, outlength, ascending, stable - ): + def _sort_next(self, negaxis, starts, offsets, outlength, ascending, stable): out = self._content._sort_next( - negaxis, starts, parents, offsets, outlength, ascending, stable + negaxis, starts, offsets, outlength, ascending, stable ) if isinstance(out, ak.contents.RegularArray): @@ -477,7 +475,6 @@ def _reduce_next( negaxis, starts, shifts, - parents, offsets, outlength, mask, @@ -489,7 +486,6 @@ def _reduce_next( negaxis, starts, shifts, - parents, offsets, outlength, mask, diff --git a/src/awkward/index.py b/src/awkward/index.py index 8e42ff8442..e68e075545 100644 --- a/src/awkward/index.py +++ b/src/awkward/index.py @@ -343,30 +343,3 @@ def _materialize(self) -> Index: self._index = self._factory(self._length, self._nplike, dtype=self._dtype) assert self._index is not None return self._index - - -class EmptyIndex(LazyIndex): - def __init__(self, length, nplike, dtype=None): - super().__init__( - factory=Index.empty, - length=length, - nplike=nplike, - dtype=dtype if dtype is not None else np.dtype(np.int64), - ) - - -class ZeroIndex(LazyIndex): - def __init__(self, length, nplike, dtype=None): - super().__init__( - factory=Index.zeros, - length=length, - nplike=nplike, - dtype=dtype if dtype is not None else np.dtype(np.int64), - ) - - -def resolve_index(index: Index | LazyIndex, backend) -> Index: - if isinstance(index, LazyIndex): - return index._materialize() - - return index diff --git a/tests-cuda/test_3149_complex_reducers.py b/tests-cuda/test_3149_complex_reducers.py index d16f922a39..2ab1742a28 100644 --- a/tests-cuda/test_3149_complex_reducers.py +++ b/tests-cuda/test_3149_complex_reducers.py @@ -549,10 +549,13 @@ def test_block_boundary_prod_complex12(): def test_block_boundary_prod_complex13(): rng = np.random.default_rng(seed=42) - array = rng.integers(50, size=1000) - complex_array = np.vectorize(complex)( - array[0 : len(array) : 2], array[1 : len(array) : 2] - ) + # 2000 ints → 1000 complex values, matching the offsets [0, 5, 996, 1000] + # below. The earlier size=1000 produced only 500 complex values and the + # ListOffsetArray indexed past the end of `content`, so both backends read + # uninitialised memory for bin 2 and disagreed on the resulting garbage. + array = rng.integers(50, size=2000) + complex_array = np.vectorize(complex)(array[::2], array[1::2]) + content = ak.contents.NumpyArray(complex_array) cuda_content = ak.to_backend(content, "cuda", highlevel=False) cpt.assert_allclose( @@ -767,19 +770,29 @@ def test_block_boundary_argmax_complex1(): complex_array = np.vectorize(complex)( array[0 : len(array) : 2], array[1 : len(array) : 2] ) + content = ak.contents.NumpyArray(complex_array) cuda_content = ak.to_backend(content, "cuda", highlevel=False) - assert ak.argmax(cuda_content, -1, highlevel=False) == ak.argmax( - content, -1, highlevel=False - ) + + res_flat_cuda = ak.argmax(cuda_content, -1, highlevel=False) + res_flat_cpu = ak.argmax(content, -1, highlevel=False) + + assert int(res_flat_cuda) == int(res_flat_cpu) offsets = ak.index.Index64(np.array([0, 1, 2998, 3000], dtype=np.int64)) depth1 = ak.contents.ListOffsetArray(offsets, content) cuda_depth1 = ak.to_backend(depth1, "cuda", highlevel=False) - assert to_list(ak.argmax(cuda_depth1, -1, highlevel=False)) == to_list( - ak.argmax(depth1, -1, highlevel=False) - ) + + res_seg_cuda = ak.argmax(cuda_depth1, -1, highlevel=False) + res_seg_cpu = ak.argmax(depth1, -1, highlevel=False) + + cuda_list = to_list(res_seg_cuda) + cpu_list = to_list(res_seg_cpu) + + np.testing.assert_array_equal(cuda_list, cpu_list) + del cuda_content, cuda_depth1 + cp.get_default_memory_pool().free_all_blocks() def test_block_boundary_argmax_complex2(): @@ -790,56 +803,74 @@ def test_block_boundary_argmax_complex2(): ) content = ak.contents.NumpyArray(complex_array) cuda_content = ak.to_backend(content, "cuda", highlevel=False) - assert ak.argmax(cuda_content, -1, highlevel=False) == ak.argmax( - content, -1, highlevel=False - ) + + res_flat_cuda = ak.argmax(cuda_content, -1, highlevel=False) + res_flat_cpu = ak.argmax(content, -1, highlevel=False) + assert int(res_flat_cuda) == int(res_flat_cpu) offsets = ak.index.Index64(np.array([0, 1, 2998, 3000], dtype=np.int64)) depth1 = ak.contents.ListOffsetArray(offsets, content) cuda_depth1 = ak.to_backend(depth1, "cuda", highlevel=False) - assert to_list(ak.argmax(cuda_depth1, -1, highlevel=False)) == to_list( - ak.argmax(depth1, -1, highlevel=False) - ) + + res_seg_cuda = ak.argmax(cuda_depth1, -1, highlevel=False) + res_seg_cpu = ak.argmax(depth1, -1, highlevel=False) + + np.testing.assert_array_equal(to_list(res_seg_cuda), to_list(res_seg_cpu)) + del cuda_content, cuda_depth1 + cp.get_default_memory_pool().free_all_blocks() def test_block_boundary_argmin_complex1(): rng = np.random.default_rng(seed=42) + # 6000 integers -> 3000 complex numbers array = rng.integers(5, size=6000) complex_array = np.vectorize(complex)( array[0 : len(array) : 2], array[1 : len(array) : 2] ) content = ak.contents.NumpyArray(complex_array) cuda_content = ak.to_backend(content, "cuda", highlevel=False) - assert ak.argmin(cuda_content, -1, highlevel=False) == ak.argmin( - content, -1, highlevel=False - ) + + res_flat_cuda = ak.argmin(cuda_content, -1, highlevel=False) + res_flat_cpu = ak.argmin(content, -1, highlevel=False) + assert int(res_flat_cuda) == int(res_flat_cpu) offsets = ak.index.Index64(np.array([0, 1, 2998, 3000], dtype=np.int64)) depth1 = ak.contents.ListOffsetArray(offsets, content) cuda_depth1 = ak.to_backend(depth1, "cuda", highlevel=False) - assert to_list(ak.argmin(cuda_depth1, -1, highlevel=False)) == to_list( - ak.argmin(depth1, -1, highlevel=False) - ) + + res_seg_cuda = ak.argmin(cuda_depth1, -1, highlevel=False) + res_seg_cpu = ak.argmin(depth1, -1, highlevel=False) + + np.testing.assert_array_equal(to_list(res_seg_cuda), to_list(res_seg_cpu)) + del cuda_content, cuda_depth1 + cp.get_default_memory_pool().free_all_blocks() def test_block_boundary_argmin_complex2(): rng = np.random.default_rng(seed=42) + # Higher range (6000) makes ties for the minimum value extremely unlikely array = rng.integers(6000, size=6000) complex_array = np.vectorize(complex)( array[0 : len(array) : 2], array[1 : len(array) : 2] ) + content = ak.contents.NumpyArray(complex_array) cuda_content = ak.to_backend(content, "cuda", highlevel=False) - assert ak.argmin(cuda_content, -1, highlevel=False) == ak.argmin( - content, -1, highlevel=False - ) + + res_flat_cuda = ak.argmin(cuda_content, -1, highlevel=False) + res_flat_cpu = ak.argmin(content, -1, highlevel=False) + assert int(res_flat_cuda) == int(res_flat_cpu) offsets = ak.index.Index64(np.array([0, 1, 2998, 3000], dtype=np.int64)) depth1 = ak.contents.ListOffsetArray(offsets, content) cuda_depth1 = ak.to_backend(depth1, "cuda", highlevel=False) - assert to_list(ak.argmin(cuda_depth1, -1, highlevel=False)) == to_list( - ak.argmin(depth1, -1, highlevel=False) - ) + + res_seg_cuda = ak.argmin(cuda_depth1, -1, highlevel=False) + res_seg_cpu = ak.argmin(depth1, -1, highlevel=False) + + np.testing.assert_array_equal(to_list(res_seg_cuda), to_list(res_seg_cpu)) + del cuda_content, cuda_depth1 + cp.get_default_memory_pool().free_all_blocks() diff --git a/tests-cuda/test_3162_block_boundary_reducers.py b/tests-cuda/test_3162_block_boundary_reducers.py index 5da0007104..d483799279 100644 --- a/tests-cuda/test_3162_block_boundary_reducers.py +++ b/tests-cuda/test_3162_block_boundary_reducers.py @@ -35,6 +35,7 @@ def test_block_boundary_sum(): ak.sum(depth1, -1, highlevel=False) ) del cuda_content, cuda_depth1 + cp.get_default_memory_pool().free_all_blocks() def test_block_boundary_any(): @@ -42,17 +43,22 @@ def test_block_boundary_any(): array = rng.integers(3000, size=3000) content = ak.contents.NumpyArray(array) cuda_content = ak.to_backend(content, "cuda", highlevel=False) - assert ak.any(cuda_content, -1, highlevel=False) == ak.any( - content, -1, highlevel=False - ) + res_flat_cuda = ak.any(cuda_content, -1, highlevel=False) + res_flat_cpu = ak.any(content, -1, highlevel=False) + + assert bool(res_flat_cuda) == bool(res_flat_cpu) offsets = ak.index.Index64(np.array([0, 1, 2998, 3000], dtype=np.int64)) depth1 = ak.contents.ListOffsetArray(offsets, content) cuda_depth1 = ak.to_backend(depth1, "cuda", highlevel=False) - assert to_list(ak.any(cuda_depth1, -1, highlevel=False)) == to_list( - ak.any(depth1, -1, highlevel=False) - ) + + res_seg_cuda = ak.any(cuda_depth1, -1, highlevel=False) + res_seg_cpu = ak.any(depth1, -1, highlevel=False) + + np.testing.assert_array_equal(ak.to_numpy(res_seg_cuda), ak.to_numpy(res_seg_cpu)) + del cuda_content, cuda_depth1 + cp.get_default_memory_pool().free_all_blocks() def test_block_boundary_all(): @@ -60,17 +66,22 @@ def test_block_boundary_all(): array = rng.integers(3000, size=3000) content = ak.contents.NumpyArray(array) cuda_content = ak.to_backend(content, "cuda", highlevel=False) - assert ak.all(cuda_content, -1, highlevel=False) == ak.all( - content, -1, highlevel=False - ) + + res_flat_cuda = ak.all(cuda_content, -1, highlevel=False) + res_flat_cpu = ak.all(content, -1, highlevel=False) + + assert bool(res_flat_cuda) == bool(res_flat_cpu) offsets = ak.index.Index64(np.array([0, 1, 2998, 3000], dtype=np.int64)) depth1 = ak.contents.ListOffsetArray(offsets, content) cuda_depth1 = ak.to_backend(depth1, "cuda", highlevel=False) - assert to_list(ak.all(cuda_depth1, -1, highlevel=False)) == to_list( - ak.all(depth1, -1, highlevel=False) - ) + res_seg_cuda = ak.all(cuda_depth1, -1, highlevel=False) + res_seg_cpu = ak.all(depth1, -1, highlevel=False) + + np.testing.assert_array_equal(ak.to_numpy(res_seg_cuda), ak.to_numpy(res_seg_cpu)) + del cuda_content, cuda_depth1 + cp.get_default_memory_pool().free_all_blocks() def test_block_boundary_sum_bool(): @@ -89,6 +100,7 @@ def test_block_boundary_sum_bool(): ak.sum(depth1, -1, highlevel=False) ) del cuda_content, cuda_depth1 + cp.get_default_memory_pool().free_all_blocks() def test_block_boundary_max(): @@ -110,6 +122,7 @@ def test_block_boundary_max(): ak.max(depth1, -1, highlevel=False) ) del cuda_content, cuda_depth1 + cp.get_default_memory_pool().free_all_blocks() def test_block_boundary_min(): @@ -128,6 +141,7 @@ def test_block_boundary_min(): ak.min(depth1, -1, highlevel=False) ) del cuda_content, cuda_depth1 + cp.get_default_memory_pool().free_all_blocks() def test_block_boundary_negative_min(): @@ -146,6 +160,7 @@ def test_block_boundary_negative_min(): ak.min(depth1, -1, highlevel=False) ) del cuda_content, cuda_depth1 + cp.get_default_memory_pool().free_all_blocks() def test_block_boundary_argmin(): @@ -164,6 +179,7 @@ def test_block_boundary_argmin(): ak.argmin(depth1, -1, highlevel=False) ) del cuda_content, cuda_depth1 + cp.get_default_memory_pool().free_all_blocks() def test_block_boundary_argmax(): @@ -182,6 +198,7 @@ def test_block_boundary_argmax(): ak.argmax(depth1, -1, highlevel=False) ) del cuda_content, cuda_depth1 + cp.get_default_memory_pool().free_all_blocks() def test_block_boundary_count(): @@ -200,6 +217,7 @@ def test_block_boundary_count(): ak.count(depth1, -1, highlevel=False) ) del cuda_content, cuda_depth1 + cp.get_default_memory_pool().free_all_blocks() def test_block_boundary_count_nonzero(): @@ -218,38 +236,54 @@ def test_block_boundary_count_nonzero(): ak.count_nonzero(depth1, -1, highlevel=False) ) del cuda_content, cuda_depth1 + cp.get_default_memory_pool().free_all_blocks() def test_block_boundary_prod(): primes = [x for x in range(2, 30000) if all(x % n != 0 for n in range(2, x))] content = ak.contents.NumpyArray(primes) cuda_content = ak.to_backend(content, "cuda", highlevel=False) - assert ak.prod(cuda_content, -1, highlevel=False) == ak.prod( - content, -1, highlevel=False + res_flat_cuda = ak.prod(cuda_content, -1, highlevel=False) + res_flat_cpu = ak.prod(content, -1, highlevel=False) + + np.testing.assert_allclose( + cp.asnumpy(cp.array(res_flat_cuda)), np.array(res_flat_cpu), rtol=1e-14 ) - offsets = ak.index.Index64(np.array([0, 1, 2998, 3000], dtype=np.int64)) + offsets = ak.index.Index64(np.array([0, 1, 2261, 2262], dtype=np.int64)) depth1 = ak.contents.ListOffsetArray(offsets, content) cuda_depth1 = ak.to_backend(depth1, "cuda", highlevel=False) - assert to_list(ak.prod(cuda_depth1, -1, highlevel=False)) == to_list( - ak.prod(depth1, -1, highlevel=False) + + res_seg_cuda = ak.prod(cuda_depth1, -1, highlevel=False) + res_seg_cpu = ak.prod(depth1, -1, highlevel=False) + + np.testing.assert_allclose( + np.array(to_list(res_seg_cuda)), np.array(to_list(res_seg_cpu)), rtol=1e-14 ) + del cuda_content, cuda_depth1 + cp.get_default_memory_pool().free_all_blocks() def test_block_boundary_prod_bool(): rng = np.random.default_rng(seed=42) - array = rng.integers(2, size=3000, dtype=np.bool_) + array = rng.integers(2, size=3000, dtype=bool) content = ak.contents.NumpyArray(array) cuda_content = ak.to_backend(content, "cuda", highlevel=False) - assert ak.prod(cuda_content, -1, highlevel=False) == ak.prod( - content, -1, highlevel=False - ) + + res_flat_cuda = ak.prod(cuda_content, -1, highlevel=False) + res_flat_cpu = ak.prod(content, -1, highlevel=False) + + assert int(res_flat_cuda) == int(res_flat_cpu) offsets = ak.index.Index64(np.array([0, 1, 2998, 3000], dtype=np.int64)) depth1 = ak.contents.ListOffsetArray(offsets, content) cuda_depth1 = ak.to_backend(depth1, "cuda", highlevel=False) - assert to_list(ak.prod(cuda_depth1, -1, highlevel=False)) == to_list( - ak.prod(depth1, -1, highlevel=False) - ) + + res_seg_cuda = ak.prod(cuda_depth1, -1, highlevel=False) + res_seg_cpu = ak.prod(depth1, -1, highlevel=False) + + np.testing.assert_array_equal(ak.to_numpy(res_seg_cuda), ak.to_numpy(res_seg_cpu)) + del cuda_content, cuda_depth1 + cp.get_default_memory_pool().free_all_blocks() diff --git a/tests-cuda/test_3894_overload_reducers_for_cuda_compute.py b/tests-cuda/test_3894_overload_reducers_for_cuda_compute.py deleted file mode 100644 index 55ae4ddc3e..0000000000 --- a/tests-cuda/test_3894_overload_reducers_for_cuda_compute.py +++ /dev/null @@ -1,71 +0,0 @@ -from __future__ import annotations - -import sys - -import awkward as ak - - -def test_argmin_overloaded_reducer(): - awkward_array = ak.Array( - [[1], [2, 3], [4, 5, 6, 3, 8, 9], [], [], [10]], backend="cuda" - ) - - captured = {} - - # we are looking for the type of the reducer from the awkward._do.reduce (line 236) - def tracer(frame, event, arg): - # if awkward._do.reduce is called we start tracing - if event == "call" and frame.f_code.co_name == "reduce": - - def local_tracer(frame, event, arg): - # when the variables original_reducer and reducer are initialized we store reducer and return - if ( - event == "line" - and ("original_reducer" in frame.f_locals) - and ("reducer" in frame.f_locals) - ): - captured["reducer"] = frame.f_locals["reducer"] - return local_tracer - - return local_tracer - return None - - sys.settrace(tracer) - ak.argmin(awkward_array, axis=-1) - sys.settrace(None) - - # finally we check that we are getting the reducer from ak._connect.cuda.reducers and not from awkward._reducers.ArgMin - assert isinstance(captured["reducer"], ak._connect.cuda.reducers.ArgMin) - - -def test_argmax_overloaded_reducer(): - awkward_array = ak.Array( - [[1], [2, 3], [4, 5, 6, 3, 8, 9], [], [], [10]], backend="cuda" - ) - - captured = {} - - # we are looking for the type of the reducer from the awkward._do.reduce (line 236) - def tracer(frame, event, arg): - # if awkward._do.reduce is called we start tracing - if event == "call" and frame.f_code.co_name == "reduce": - - def local_tracer(frame, event, arg): - # when the variables original_reducer and reducer are initialized we store reducer and return - if ( - event == "line" - and ("original_reducer" in frame.f_locals) - and ("reducer" in frame.f_locals) - ): - captured["reducer"] = frame.f_locals["reducer"] - return local_tracer - - return local_tracer - return None - - sys.settrace(tracer) - ak.argmax(awkward_array, axis=-1) - sys.settrace(None) - - # finally we check that we are getting the reducer from ak._connect.cuda.reducers and not from awkward._reducers.ArgMax - assert isinstance(captured["reducer"], ak._connect.cuda.reducers.ArgMax) diff --git a/tests/test_2512_record_array_carry.py b/tests/test_2512_record_array_carry.py index 46dec04b1b..1e4f50849e 100644 --- a/tests/test_2512_record_array_carry.py +++ b/tests/test_2512_record_array_carry.py @@ -62,6 +62,15 @@ def test_axis_0(): highlevel=False, ) + # The offsets-pipeline migration of `awkward_ListOffsetArray_reduce_nonlocal_preparenext_64` + # iterates `(outer_bin, col, row)` rather than the parents-era `(round, row)`, + # producing a structurally different — but semantically equivalent — layout + # for the carried inner records: bin-major (locally column-major within each + # outer bin) instead of globally column-major. The IndexedOptionArray.index + # is therefore monotonic, and the underlying RecordArray contents are + # interleaved per outer bin rather than across all rows. Both representations + # describe the same set of picked records; only the structural permutation + # differs. expected_result = ak.contents.ListArray( ak.index.Index64([0]), ak.index.Index64([2]), @@ -69,15 +78,15 @@ def test_axis_0(): ak.index.Index64([0, 3]), ak.index.Index64([3, 6]), ak.contents.IndexedOptionArray( - ak.index.Index64([1, 5, 9, 3, 7, 10]), + ak.index.Index64([1, 3, 5, 7, 9, 10]), ak.contents.RecordArray( [ ak.contents.NumpyArray( - np.array([0, 6, 3, 9, 1, 7, 4, 10, 2, 8, 5], dtype=np.int64) + np.array([0, 6, 1, 7, 2, 8, 3, 9, 4, 10, 5], dtype=np.int64) ), ak.contents.NumpyArray( np.array( - [0, 1, 6, 18, 2, 14, 8, 20, 4, 16, 10], + [0, 1, 2, 14, 4, 16, 6, 18, 8, 20, 10], dtype=np.float64, ) ), @@ -134,20 +143,22 @@ def test_axis_1(): highlevel=False, ) + # See the note in test_axis_0 about the structural difference between the + # parents-era and offsets-pipeline carry layouts. expected_result = ak.contents.RegularArray( ak.contents.ListArray( ak.index.Index64([0, 3]), ak.index.Index64([3, 6]), ak.contents.IndexedOptionArray( - ak.index.Index64([1, 5, 9, 3, 7, 10]), + ak.index.Index64([1, 3, 5, 7, 9, 10]), ak.contents.RecordArray( [ ak.contents.NumpyArray( - np.array([0, 3, 6, 9, 1, 4, 7, 10, 2, 5, 8], dtype=np.int64) + np.array([0, 3, 1, 4, 2, 5, 6, 9, 7, 10, 8], dtype=np.int64) ), ak.contents.NumpyArray( np.array( - [0, 6, 1, 18, 2, 8, 14, 20, 4, 10, 16], + [0, 6, 2, 8, 4, 10, 1, 18, 14, 20, 16], dtype=np.float64, ) ), From 6f6d8166a163735cd9a67440769b81fabf714ec2 Mon Sep 17 00:00:00 2001 From: Ianna Osborne Date: Mon, 18 May 2026 23:50:20 +0200 Subject: [PATCH 2/4] chore: profile: add benchmark script (#4073) add benchmark script --- studies/cccl/bench_reduce_bool.py | 835 ++++++++++++++++++++++++++++++ 1 file changed, 835 insertions(+) create mode 100644 studies/cccl/bench_reduce_bool.py diff --git a/studies/cccl/bench_reduce_bool.py b/studies/cccl/bench_reduce_bool.py new file mode 100644 index 0000000000..40becdf97a --- /dev/null +++ b/studies/cccl/bench_reduce_bool.py @@ -0,0 +1,835 @@ +""" +Benchmarks for all awkward_* kernels exposed through cuda.compute (_compute.py). + +Measures +-------- +* GPU elapsed time – CUDA events (min / mean / max / std over N timed runs) +* Device memory – CuPy memory-pool delta (peak bytes allocated per call) +* Effective throughput – GB/s (primary input/output bytes / mean kernel time) + +Scales +------ + small : 64 K elements, 512 segments + medium : 8 M elements, 64 K segments + large : 256 M elements, 2 M segments + +Kernels benchmarked (25) +------------------------ + bool / count reductions (6): + awkward_reduce_sum_bool, awkward_reduce_prod_bool, + awkward_reduce_sum_int32_bool_64, awkward_reduce_sum_int64_bool_64, + awkward_reduce_countnonzero, awkward_reduce_count_64 + + int64 reductions (6): + awkward_reduce_sum, awkward_reduce_prod, + awkward_reduce_max, awkward_reduce_min, + awkward_reduce_argmax, awkward_reduce_argmin + + complex float32 reductions (9): + awkward_reduce_sum_complex, awkward_reduce_prod_complex, + awkward_reduce_max_complex, awkward_reduce_min_complex, + awkward_reduce_sum_bool_complex, awkward_reduce_prod_bool_complex, + awkward_reduce_argmax_complex, awkward_reduce_argmin_complex, + awkward_reduce_countnonzero_complex + + index / transform (4): + awkward_index_rpad_and_clip_axis0, awkward_index_rpad_and_clip_axis1, + awkward_missing_repeat, segmented_sort + +Usage +----- + python bench_reduce_bool.py [--warmup 5] [--runs 30] [--nsys] + python bench_reduce_bool.py --kernel-file src/awkward/_connect/cuda/_compute.py + python bench_reduce_bool.py --scales small medium # subset of scales +""" + +from __future__ import annotations + +import argparse +import importlib.util +import math +import sys +import time +from dataclasses import dataclass, field +from typing import Callable + +# --------------------------------------------------------------------------- +# CUDA guard +# --------------------------------------------------------------------------- +try: + import cupy as cp +except ImportError: + sys.exit("cupy is not installed – benchmarks require a CUDA GPU.") + +try: + cp.cuda.Device(0).use() +except cp.cuda.runtime.CUDARuntimeError: + sys.exit("No CUDA device found.") + +import numpy as np + +# --------------------------------------------------------------------------- +# Kernel registry +# --------------------------------------------------------------------------- +ALL_KERNEL_NAMES = [ + # bool / count + "awkward_reduce_sum_bool", + "awkward_reduce_prod_bool", + "awkward_reduce_sum_int32_bool_64", + "awkward_reduce_sum_int64_bool_64", + "awkward_reduce_countnonzero", + "awkward_reduce_count_64", + # int64 + "awkward_reduce_sum", + "awkward_reduce_prod", + "awkward_reduce_max", + "awkward_reduce_min", + "awkward_reduce_argmax", + "awkward_reduce_argmin", + # complex float32 + "awkward_reduce_sum_complex", + "awkward_reduce_prod_complex", + "awkward_reduce_max_complex", + "awkward_reduce_min_complex", + "awkward_reduce_sum_bool_complex", + "awkward_reduce_prod_bool_complex", + "awkward_reduce_argmax_complex", + "awkward_reduce_argmin_complex", + "awkward_reduce_countnonzero_complex", + # index / transform + "awkward_index_rpad_and_clip_axis0", + "awkward_index_rpad_and_clip_axis1", + "awkward_missing_repeat", + "segmented_sort", +] + +# Filled at import time by _load_kernels() +K: dict[str, Callable] = {} + + +def _load_kernels(path: str | None) -> None: + """ + Populate K with every kernel found in `path` (file) or via package import. + Kernels missing from the module are silently excluded from K. + """ + candidates = [ + "awkward._connect.cuda._compute", + "awkward._backends.cuda_kernels", + "cuda_kernels", + ] + + mod = None + if path: + spec = importlib.util.spec_from_file_location("_cuda_kernels", path) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) # type: ignore[union-attr] + else: + for name in candidates: + try: + mod = importlib.import_module(name) + break + except ImportError: + continue + + if mod is None: + sys.exit( + "\nCould not locate the kernel module.\n" + "Pass the path explicitly:\n\n" + " python bench_reduce_bool.py " + "--kernel-file src/awkward/_connect/cuda/_compute.py\n" + ) + + missing = [] + for name in ALL_KERNEL_NAMES: + fn = getattr(mod, name, None) + if fn is not None: + K[name] = fn + else: + missing.append(name) + + if missing: + print( + f"[warn] {len(missing)} kernel(s) not found in module " + f"(will be skipped): {missing}", + file=sys.stderr, + ) + + +# Pre-parse --kernel-file so the import happens before anything else +_pre = argparse.ArgumentParser(add_help=False) +_pre.add_argument("--kernel-file", default=None) +_pre_args, _ = _pre.parse_known_args() +_load_kernels(_pre_args.kernel_file) + + +# --------------------------------------------------------------------------- +# Scales +# --------------------------------------------------------------------------- +SCALES = { + # n_elements n_segments sparsity + "small": (64_000, 512, 0.5), + "medium": (8_000_000, 64_000, 0.5), + "large": (256_000_000, 2_000_000, 0.5), +} + + +# --------------------------------------------------------------------------- +# Dataset +# --------------------------------------------------------------------------- +@dataclass +class Dataset: + name: str + n_elements: int # also == n_complex for the complex kernels + n_segments: int + + # Segmented-reduction inputs + input_bool: "cp.ndarray" # bool, (n_elements,) + input_int64: "cp.ndarray" # int64, (n_elements,) + # Interleaved complex64 stored as float32: shape (2*n_elements,). + # offsets index the complex (not float) dimension, so offset[i] in [0..n_elements]. + input_float32_cx: "cp.ndarray" # float32, (2*n_elements,) + + offsets: "cp.ndarray" # int64, (n_segments+1,) + + # Output buffers + result_bool: "cp.ndarray" # bool, (n_segments,) + result_int32: "cp.ndarray" # int32, (n_segments,) + result_int64: "cp.ndarray" # int64, (n_segments,) + # Interleaved complex64 output: shape (2*n_segments,) + result_float32_cx: "cp.ndarray" # float32, (2*n_segments,) + + # segmented_sort + sort_out: "cp.ndarray" # float32, (n_elements,) + + # awkward_index_rpad_and_clip_axis0 + rpad0_out: "cp.ndarray" # int64, (n_elements,) ← target == n_elements + rpad0_target: int # == n_elements + rpad0_length: int # == n_elements // 2 (shorter = min(target, length)) + + # awkward_index_rpad_and_clip_axis1 + rpad1_starts: "cp.ndarray" # int64, (n_segments,) + rpad1_stops: "cp.ndarray" # int64, (n_segments,) + rpad1_target: int # average segment length + rpad1_length: int # == n_segments + + # awkward_missing_repeat + mr_index: "cp.ndarray" # int64, (n_segments,) ~20% are -1 + mr_out: "cp.ndarray" # int64, (n_segments * mr_reps,) ≈ (n_elements,) + mr_reps: int + mr_regsize: int + + +def make_dataset( + name: str, n_elements: int, n_segments: int, sparsity: float +) -> Dataset: + rng = np.random.default_rng(seed=42) + + # Bool + input_bool = cp.asarray(rng.random(n_elements) < sparsity, dtype=cp.bool_) + + # Int64 – small positive values to prevent overflow in prod benchmarks + input_int64 = cp.asarray( + rng.integers(1, 10, size=n_elements, dtype=np.int64) + ) + + # Complex float32 (interleaved real/imag). + # Generate in two passes to cap peak host RAM at ~2 GB for large scale. + host_cx = np.empty(2 * n_elements, dtype=np.float32) + host_cx[0::2] = rng.random(n_elements) + host_cx[1::2] = rng.random(n_elements) + input_float32_cx = cp.asarray(host_cx) + del host_cx + + # Offsets: random segment lengths ≥ 1 summing to n_elements + extra = n_elements - n_segments + cuts = np.sort(rng.choice(extra + n_segments - 1, n_segments - 1, replace=False)) + lengths = np.diff( + np.concatenate(([0], cuts + 1, [extra + n_segments])) + ).astype(np.int64) + assert lengths.sum() == n_elements + assert (lengths > 0).all() + offsets_np = np.zeros(n_segments + 1, dtype=np.int64) + np.cumsum(lengths, out=offsets_np[1:]) + offsets = cp.asarray(offsets_np) + + # Output buffers + result_bool = cp.empty(n_segments, dtype=cp.bool_) + result_int32 = cp.empty(n_segments, dtype=cp.int32) + result_int64 = cp.empty(n_segments, dtype=cp.int64) + result_float32_cx = cp.empty(2 * n_segments, dtype=cp.float32) + sort_out = cp.empty(n_elements, dtype=cp.float32) + + # rpad_axis0: fill toindex[0..n_elements) where first half maps identity, + # rest maps to -1. + rpad0_out = cp.empty(n_elements, dtype=cp.int64) + rpad0_target = n_elements + rpad0_length = n_elements // 2 + + # rpad_axis1: one entry per segment + rpad1_starts = cp.empty(n_segments, dtype=cp.int64) + rpad1_stops = cp.empty(n_segments, dtype=cp.int64) + rpad1_target = max(1, n_elements // n_segments) + rpad1_length = n_segments + + # missing_repeat: index of length n_segments, ~20% missing (-1) + mr_reps = max(1, n_elements // n_segments) + mr_regsize = mr_reps + host_mr = np.arange(n_segments, dtype=np.int64) + miss_idx = rng.choice(n_segments, max(1, n_segments // 5), replace=False) + host_mr[miss_idx] = -1 + mr_index = cp.asarray(host_mr) + mr_out = cp.empty(n_segments * mr_reps, dtype=cp.int64) + + return Dataset( + name=name, n_elements=n_elements, n_segments=n_segments, + input_bool=input_bool, input_int64=input_int64, + input_float32_cx=input_float32_cx, offsets=offsets, + result_bool=result_bool, result_int32=result_int32, + result_int64=result_int64, result_float32_cx=result_float32_cx, + sort_out=sort_out, + rpad0_out=rpad0_out, rpad0_target=rpad0_target, rpad0_length=rpad0_length, + rpad1_starts=rpad1_starts, rpad1_stops=rpad1_stops, + rpad1_target=rpad1_target, rpad1_length=rpad1_length, + mr_index=mr_index, mr_out=mr_out, mr_reps=mr_reps, mr_regsize=mr_regsize, + ) + + +# --------------------------------------------------------------------------- +# Timing harness +# --------------------------------------------------------------------------- +@dataclass +class TimingResult: + kernel: str + scale: str + n_elements: int + n_segments: int + input_bytes: int # bytes of primary data read/written (for GB/s) + warmup_runs: int + timed_runs: int + times_ms: list[float] = field(default_factory=list) + mem_delta_bytes: int = 0 + + @property + def min_ms(self) -> float: + return min(self.times_ms) + + @property + def mean_ms(self) -> float: + return sum(self.times_ms) / len(self.times_ms) + + @property + def max_ms(self) -> float: + return max(self.times_ms) + + @property + def std_ms(self) -> float: + m = self.mean_ms + return math.sqrt(sum((t - m) ** 2 for t in self.times_ms) / len(self.times_ms)) + + @property + def throughput_gbs(self) -> float: + if self.mean_ms == 0: + return float("inf") + return (self.input_bytes / 1e9) / (self.mean_ms / 1e3) + + +def _cuda_time_call(fn: Callable, n_runs: int) -> list[float]: + start = cp.cuda.Event() + end = cp.cuda.Event() + times = [] + for _ in range(n_runs): + cp.cuda.Stream.null.synchronize() + start.record() + fn() + end.record() + end.synchronize() + times.append(cp.cuda.get_elapsed_time(start, end)) + return times + + +def _mem_delta(fn: Callable) -> int: + pool = cp.get_default_memory_pool() + pool.free_all_blocks() + cp.cuda.Stream.null.synchronize() + before = pool.used_bytes() + fn() + cp.cuda.Device().synchronize() + return max(0, pool.used_bytes() - before) + + +def benchmark_kernel( + kernel_name: str, + call_fn: Callable, + input_bytes: int, + ds: Dataset, + warmup: int, + runs: int, + use_nsys_profile: bool, +) -> TimingResult: + result = TimingResult( + kernel=kernel_name, scale=ds.name, + n_elements=ds.n_elements, n_segments=ds.n_segments, + input_bytes=input_bytes, warmup_runs=warmup, timed_runs=runs, + ) + for _ in range(warmup): + call_fn() + cp.cuda.Device().synchronize() + + result.mem_delta_bytes = _mem_delta(call_fn) + + if use_nsys_profile: + with cp.cuda.profile(): + result.times_ms = _cuda_time_call(call_fn, runs) + else: + result.times_ms = _cuda_time_call(call_fn, runs) + + return result + + +# --------------------------------------------------------------------------- +# Table formatting +# --------------------------------------------------------------------------- +_KW = 42 # kernel name column width + +HEADER = ( + f"{'Kernel':<{_KW}}" + f"{'Scale':<8}" + f"{'Elements':>13}" + f"{'Segments':>10}" + f"{'Min ms':>9}" + f"{'Mean ms':>9}" + f"{'Max ms':>9}" + f"{'Std ms':>8}" + f"{'GB/s':>9}" + f"{'MemΔ KB':>9}" +) +_LINE = "─" * len(HEADER) +_DLINE = "═" * len(HEADER) + + +def _group_header(label: str) -> str: + inner = f" {label} " + pad = (_LINE.__len__() - len(inner)) // 2 + return "─" * pad + inner + "─" * (len(_LINE) - pad - len(inner)) + + +def print_result(r: TimingResult) -> None: + mem_kb = f"{r.mem_delta_bytes / 1024:.1f}" if r.mem_delta_bytes else "0" + print( + f"{r.kernel:<{_KW}}" + f"{r.scale:<8}" + f"{r.n_elements:>13,}" + f"{r.n_segments:>10,}" + f"{r.min_ms:>9.3f}" + f"{r.mean_ms:>9.3f}" + f"{r.max_ms:>9.3f}" + f"{r.std_ms:>8.3f}" + f"{r.throughput_gbs:>9.2f}" + f"{mem_kb:>9}" + ) + + +# --------------------------------------------------------------------------- +# Kernel call factories +# Each returns (zero-arg callable, input_bytes: int). +# input_bytes = primary bytes of data read/written, used for GB/s. +# --------------------------------------------------------------------------- + +# ── bool / count reductions ──────────────────────────────────────────────── + +def make_sum_bool_call(ds: Dataset): + fn = K["awkward_reduce_sum_bool"] + def _c(): fn(ds.result_bool, ds.input_bool, ds.offsets, ds.n_segments) + return _c, ds.n_elements # 1 byte/element (bool) + +def make_prod_bool_call(ds: Dataset): + fn = K["awkward_reduce_prod_bool"] + def _c(): fn(ds.result_bool, ds.input_bool, ds.offsets, ds.n_segments) + return _c, ds.n_elements + +def make_sum_int32_bool_call(ds: Dataset): + fn = K["awkward_reduce_sum_int32_bool_64"] + def _c(): fn(ds.result_int32, ds.input_bool, ds.offsets, ds.n_segments) + return _c, ds.n_elements + +def make_sum_int64_bool_call(ds: Dataset): + fn = K["awkward_reduce_sum_int64_bool_64"] + def _c(): fn(ds.result_int64, ds.input_bool, ds.offsets, ds.n_segments) + return _c, ds.n_elements + +def make_countnonzero_call(ds: Dataset): + fn = K["awkward_reduce_countnonzero"] + def _c(): fn(ds.result_int64, ds.input_bool, ds.offsets, ds.n_segments) + return _c, ds.n_elements + +def make_count_64_call(ds: Dataset): + fn = K["awkward_reduce_count_64"] + def _c(): fn(ds.result_int64, ds.offsets, ds.n_segments) + return _c, (ds.n_segments + 1) * 8 # reads offsets only + +# ── int64 reductions ─────────────────────────────────────────────────────── + +def make_sum_call(ds: Dataset): + fn = K["awkward_reduce_sum"] + def _c(): fn(ds.result_int64, ds.input_int64, ds.offsets, ds.n_segments) + return _c, ds.n_elements * 8 + +def make_prod_call(ds: Dataset): + fn = K["awkward_reduce_prod"] + def _c(): fn(ds.result_int64, ds.input_int64, ds.offsets, ds.n_segments) + return _c, ds.n_elements * 8 + +def make_max_call(ds: Dataset): + fn = K["awkward_reduce_max"] + idn = int(np.iinfo(np.int64).min) + def _c(): fn(ds.result_int64, ds.input_int64, ds.offsets, ds.n_segments, idn) + return _c, ds.n_elements * 8 + +def make_min_call(ds: Dataset): + fn = K["awkward_reduce_min"] + idn = int(np.iinfo(np.int64).max) + def _c(): fn(ds.result_int64, ds.input_int64, ds.offsets, ds.n_segments, idn) + return _c, ds.n_elements * 8 + +def make_argmax_call(ds: Dataset): + fn = K["awkward_reduce_argmax"] + starts = ds.offsets[:-1] # accepted but unused by the kernel + def _c(): fn(ds.result_int64, ds.input_int64, ds.offsets, starts, ds.n_segments) + return _c, ds.n_elements * 8 + +def make_argmin_call(ds: Dataset): + fn = K["awkward_reduce_argmin"] + starts = ds.offsets[:-1] + def _c(): fn(ds.result_int64, ds.input_int64, ds.offsets, starts, ds.n_segments) + return _c, ds.n_elements * 8 + +# ── complex float32 reductions ───────────────────────────────────────────── +# input_float32_cx is (2*n_elements,) float32 viewed as (n_elements,) complex64. +# offsets index the complex dimension → offset values in [0..n_elements]. + +def make_sum_complex_call(ds: Dataset): + fn = K["awkward_reduce_sum_complex"] + def _c(): fn(ds.result_float32_cx, ds.input_float32_cx, ds.offsets, ds.n_segments) + return _c, ds.n_elements * 8 # n_elements complex64 @ 8 B each + +def make_prod_complex_call(ds: Dataset): + fn = K["awkward_reduce_prod_complex"] + def _c(): fn(ds.result_float32_cx, ds.input_float32_cx, ds.offsets, ds.n_segments) + return _c, ds.n_elements * 8 + +def make_max_complex_call(ds: Dataset): + fn = K["awkward_reduce_max_complex"] + idn = float("-inf") + def _c(): fn(ds.result_float32_cx, ds.input_float32_cx, ds.offsets, ds.n_segments, idn) + return _c, ds.n_elements * 8 + +def make_min_complex_call(ds: Dataset): + fn = K["awkward_reduce_min_complex"] + idn = float("inf") + def _c(): fn(ds.result_float32_cx, ds.input_float32_cx, ds.offsets, ds.n_segments, idn) + return _c, ds.n_elements * 8 + +def make_sum_bool_complex_call(ds: Dataset): + fn = K["awkward_reduce_sum_bool_complex"] + def _c(): fn(ds.result_bool, ds.input_float32_cx, ds.offsets, ds.n_segments) + return _c, ds.n_elements * 8 + +def make_prod_bool_complex_call(ds: Dataset): + fn = K["awkward_reduce_prod_bool_complex"] + def _c(): fn(ds.result_bool, ds.input_float32_cx, ds.offsets, ds.n_segments) + return _c, ds.n_elements * 8 + +def make_argmax_complex_call(ds: Dataset): + fn = K["awkward_reduce_argmax_complex"] + def _c(): fn(ds.result_int64, ds.input_float32_cx, ds.offsets, ds.n_segments) + return _c, ds.n_elements * 8 + +def make_argmin_complex_call(ds: Dataset): + fn = K["awkward_reduce_argmin_complex"] + def _c(): fn(ds.result_int64, ds.input_float32_cx, ds.offsets, ds.n_segments) + return _c, ds.n_elements * 8 + +def make_countnonzero_complex_call(ds: Dataset): + fn = K["awkward_reduce_countnonzero_complex"] + def _c(): fn(ds.result_int64, ds.input_float32_cx, ds.offsets, ds.n_segments) + return _c, ds.n_elements * 8 + +# ── index / transform ────────────────────────────────────────────────────── + +def make_rpad0_call(ds: Dataset): + fn = K["awkward_index_rpad_and_clip_axis0"] + def _c(): fn(ds.rpad0_out, ds.rpad0_target, ds.rpad0_length) + return _c, ds.rpad0_target * 8 # writes n_elements int64 + +def make_rpad1_call(ds: Dataset): + fn = K["awkward_index_rpad_and_clip_axis1"] + def _c(): fn(ds.rpad1_starts, ds.rpad1_stops, ds.rpad1_target, ds.rpad1_length) + return _c, ds.n_segments * 8 * 2 # writes 2 × n_segments int64 + +def make_missing_repeat_call(ds: Dataset): + fn = K["awkward_missing_repeat"] + def _c(): + fn(ds.mr_out, ds.mr_index, ds.n_segments, ds.mr_reps, ds.mr_regsize) + return _c, ds.n_segments * ds.mr_reps * 8 # writes n_elements int64 + +def make_sort_call(ds: Dataset): + fn = K["segmented_sort"] + src = ds.input_float32_cx[: ds.n_elements] # first n_elements floats + nel = ds.n_elements + nof = ds.n_segments + 1 + def _c(): fn(ds.sort_out, src, nel, ds.offsets, nof, nel, True, True) + return _c, nel * 4 # reads n_elements float32 + + +# --------------------------------------------------------------------------- +# Kernel groups (order controls display order) +# --------------------------------------------------------------------------- +KERNEL_GROUPS: list[tuple[str, list[tuple[str, Callable]]]] = [ + ("bool / count reductions", [ + ("awkward_reduce_sum_bool", make_sum_bool_call), + ("awkward_reduce_prod_bool", make_prod_bool_call), + ("awkward_reduce_sum_int32_bool_64", make_sum_int32_bool_call), + ("awkward_reduce_sum_int64_bool_64", make_sum_int64_bool_call), + ("awkward_reduce_countnonzero", make_countnonzero_call), + ("awkward_reduce_count_64", make_count_64_call), + ]), + ("int64 reductions", [ + ("awkward_reduce_sum", make_sum_call), + ("awkward_reduce_prod", make_prod_call), + ("awkward_reduce_max", make_max_call), + ("awkward_reduce_min", make_min_call), + ("awkward_reduce_argmax", make_argmax_call), + ("awkward_reduce_argmin", make_argmin_call), + ]), + ("complex float32 reductions", [ + ("awkward_reduce_sum_complex", make_sum_complex_call), + ("awkward_reduce_prod_complex", make_prod_complex_call), + ("awkward_reduce_max_complex", make_max_complex_call), + ("awkward_reduce_min_complex", make_min_complex_call), + ("awkward_reduce_sum_bool_complex", make_sum_bool_complex_call), + ("awkward_reduce_prod_bool_complex", make_prod_bool_complex_call), + ("awkward_reduce_argmax_complex", make_argmax_complex_call), + ("awkward_reduce_argmin_complex", make_argmin_complex_call), + ("awkward_reduce_countnonzero_complex", make_countnonzero_complex_call), + ]), + ("index / transform", [ + ("awkward_index_rpad_and_clip_axis0", make_rpad0_call), + ("awkward_index_rpad_and_clip_axis1", make_rpad1_call), + ("awkward_missing_repeat", make_missing_repeat_call), + ("segmented_sort", make_sort_call), + ]), +] + + +# --------------------------------------------------------------------------- +# Correctness smoke tests +# --------------------------------------------------------------------------- +def smoke_test_bool_reductions() -> None: + # 3 segments: [T F T] | [] | [F F F T] + inp = cp.asarray([True, False, True, False, False, False, True], dtype=cp.bool_) + off = cp.asarray([0, 3, 3, 7], dtype=cp.int64) + n = 3 + + res = cp.empty(n, dtype=cp.bool_) + K["awkward_reduce_prod_bool"](res, inp, off, n) + assert cp.asnumpy(res).tolist() == [False, True, False], \ + f"prod_bool FAIL: {cp.asnumpy(res)}" + + K["awkward_reduce_sum_bool"](res, inp, off, n) + assert cp.asnumpy(res).tolist() == [True, False, True], \ + f"sum_bool FAIL: {cp.asnumpy(res)}" + + res64 = cp.empty(n, dtype=cp.int64) + K["awkward_reduce_countnonzero"](res64, inp, off, n) + assert cp.asnumpy(res64).tolist() == [2, 0, 1], \ + f"countnonzero FAIL: {cp.asnumpy(res64)}" + + K["awkward_reduce_count_64"](res64, off, n) + assert cp.asnumpy(res64).tolist() == [3, 0, 4], \ + f"count_64 FAIL: {cp.asnumpy(res64)}" + + +def smoke_test_int64_reductions() -> None: + # 3 segments: [1,2,3] | [4,5] | [6] + inp = cp.asarray([1, 2, 3, 4, 5, 6], dtype=cp.int64) + off = cp.asarray([0, 3, 5, 6], dtype=cp.int64) + n = 3 + + res = cp.empty(n, dtype=cp.int64) + K["awkward_reduce_sum"](res, inp, off, n) + assert cp.asnumpy(res).tolist() == [6, 9, 6], \ + f"sum FAIL: {cp.asnumpy(res)}" + + K["awkward_reduce_max"](res, inp, off, n, int(np.iinfo(np.int64).min)) + assert cp.asnumpy(res).tolist() == [3, 5, 6], \ + f"max FAIL: {cp.asnumpy(res)}" + + K["awkward_reduce_min"](res, inp, off, n, int(np.iinfo(np.int64).max)) + assert cp.asnumpy(res).tolist() == [1, 4, 6], \ + f"min FAIL: {cp.asnumpy(res)}" + + starts = off[:-1] + K["awkward_reduce_argmax"](res, inp, off, starts, n) + # argmax returns global index: seg0→idx2(val3), seg1→idx4(val5), seg2→idx5(val6) + assert cp.asnumpy(res).tolist() == [2, 4, 5], \ + f"argmax FAIL: {cp.asnumpy(res)}" + + K["awkward_reduce_argmin"](res, inp, off, starts, n) + assert cp.asnumpy(res).tolist() == [0, 3, 5], \ + f"argmin FAIL: {cp.asnumpy(res)}" + + +def smoke_test_rpad() -> None: + # rpad_axis0: target=6, length=4 → [0,1,2,3,-1,-1] + out = cp.empty(6, dtype=cp.int64) + K["awkward_index_rpad_and_clip_axis0"](out, 6, 4) + assert cp.asnumpy(out).tolist() == [0, 1, 2, 3, -1, -1], \ + f"rpad_axis0 FAIL: {cp.asnumpy(out)}" + + # rpad_axis1: 3 lists, target=2 → starts=[0,2,4], stops=[2,4,6] + starts = cp.empty(3, dtype=cp.int64) + stops = cp.empty(3, dtype=cp.int64) + K["awkward_index_rpad_and_clip_axis1"](starts, stops, 2, 3) + assert cp.asnumpy(starts).tolist() == [0, 2, 4], \ + f"rpad_axis1 starts FAIL: {cp.asnumpy(starts)}" + assert cp.asnumpy(stops).tolist() == [2, 4, 6], \ + f"rpad_axis1 stops FAIL: {cp.asnumpy(stops)}" + + +def run_smoke_tests() -> None: + smoke_test_bool_reductions() + smoke_test_int64_reductions() + smoke_test_rpad() + print(" smoke tests passed ✓") + + +# --------------------------------------------------------------------------- +# Main +# --------------------------------------------------------------------------- +def main() -> None: + parser = argparse.ArgumentParser( + description="Benchmark all awkward_* cuda.compute kernels" + ) + parser.add_argument("--kernel-file", default=None, metavar="PATH", + help="Path to the kernel module .py file") + parser.add_argument("--warmup", type=int, default=5, + help="Warmup iterations per kernel (default: 5)") + parser.add_argument("--runs", type=int, default=30, + help="Timed iterations per kernel×scale (default: 30)") + parser.add_argument("--nsys", action="store_true", + help="Wrap timed loops in cupy.cuda.profile() for Nsight Systems") + parser.add_argument("--scales", nargs="+", choices=list(SCALES), + default=list(SCALES), + help="Scales to run (default: all)") + parser.add_argument("--groups", nargs="+", + choices=[g for g, _ in KERNEL_GROUPS], + default=None, + help="Kernel groups to run (default: all)") + parser.add_argument("--skip-smoke", action="store_true", + help="Skip correctness smoke tests") + args = parser.parse_args() + + active_groups = args.groups or [g for g, _ in KERNEL_GROUPS] + + # Header + props = cp.cuda.runtime.getDeviceProperties(0) + gpu_name = props["name"].decode() if isinstance(props["name"], bytes) else props["name"] + print(f"\n{_DLINE}") + print(f" GPU : {gpu_name}") + print(f" CUDA driver : {cp.cuda.runtime.driverGetVersion()}") + print(f" CuPy : {cp.__version__}") + print(f" Warmup runs : {args.warmup} Timed runs: {args.runs}") + print(f" Scales : {', '.join(args.scales)}") + print(f"{_DLINE}\n") + + # Smoke tests + if not args.skip_smoke: + print("Running correctness smoke tests …") + run_smoke_tests() + print() + + # Build datasets + datasets: dict[str, Dataset] = {} + for scale_name in args.scales: + n_el, n_seg, sparsity = SCALES[scale_name] + print( + f"Allocating {scale_name} dataset " + f"({n_el:,} elements, {n_seg:,} segments) …", + end=" ", flush=True, + ) + t0 = time.perf_counter() + datasets[scale_name] = make_dataset(scale_name, n_el, n_seg, sparsity) + cp.cuda.Device().synchronize() + print(f"done in {time.perf_counter() - t0:.2f}s") + print() + + # Run + all_results: list[TimingResult] = [] + + print(HEADER) + + for group_label, kernels in KERNEL_GROUPS: + if group_label not in active_groups: + continue + + print(_group_header(group_label)) + + for kernel_name, factory_fn in kernels: + if kernel_name not in K: + print(f" [skip] {kernel_name} – not found in module") + continue + + for scale_name in args.scales: + ds = datasets[scale_name] + try: + call_fn, input_bytes = factory_fn(ds) + except Exception as exc: + print(f" [skip] {kernel_name}/{scale_name} – factory error: {exc}") + continue + + try: + r = benchmark_kernel( + kernel_name=kernel_name, + call_fn=call_fn, + input_bytes=input_bytes, + ds=ds, + warmup=args.warmup, + runs=args.runs, + use_nsys_profile=args.nsys, + ) + except Exception as exc: + print(f" [error] {kernel_name}/{scale_name}: {exc}") + continue + + all_results.append(r) + print_result(r) + + print(_DLINE) + + # Per-group throughput summary + print("\nMean GB/s by group and scale:") + for group_label, kernels in KERNEL_GROUPS: + if group_label not in active_groups: + continue + knames = {kn for kn, _ in kernels} + group_results = [r for r in all_results if r.kernel in knames] + if not group_results: + continue + print(f"\n {group_label}") + for scale_name in args.scales: + scale_res = [r for r in group_results if r.scale == scale_name] + if scale_res: + avg = sum(r.throughput_gbs for r in scale_res) / len(scale_res) + print(f" {scale_name:<8} {avg:6.2f} GB/s " + f"(across {len(scale_res)} kernel(s))") + + print() + print("Note: MemΔ shows pool-delta after JIT warmup. Kernels that allocate") + print(" an intermediate array (mapped, mapped_data) show non-zero MemΔ;") + print(" direct-write kernels (reduce_sum, reduce_max, sort, …) show 0.") + print() + + +if __name__ == "__main__": + main() + From 85e945d63a6d5e9729041b5713571c8bef083442 Mon Sep 17 00:00:00 2001 From: maxymnaumchyk <70752300+maxymnaumchyk@users.noreply.github.com> Date: Tue, 19 May 2026 12:50:27 +0300 Subject: [PATCH 3/4] feat: add some of the kernels using cuda.compute (#3981) * feat: add `awkward_IndexedArray_overlay_mask` kernel using cuda.compute * feat: add `awkward_IndexedArray_reduce_next_64` kernel using cuda.compute * feat: add `IndexedArray_reduce_next_nonlocal_nextshifts_64` kernel using cuda.compute * feat: add `ByteMaskedArray_getitem_nextcarry` kernel using cuda.compute * feat: add `awkward_ByteMaskedArray_numnull` kernel using cuda.compute * feat: add `awkward_RegularArray_getitem_jagged_expand` kernel using cuda.compute * add an upper bound * style: pre-commit fixes * feat: add `awkward_RegularArray_getitem_jagged_expand` kernel using cuda.compute * feat: add `awkward_UnionArray_simplify_one` kernel using cuda.compute * feat: add `awkward_ListArray_broadcast_tooffsets` kernel using cuda.compute * feat: add `awkward_ListArray_localindex` kernel using cuda.compute * fix the impl * feat: add `awkward_ListArray_compact_offsets` kernel using cuda.compute * feat: add `awkward_ListArray_combinations_length` kernel using cuda.compute * feat: add `awkward_ListArray_combinations` kernel using cuda.compute * feat: add `awkward_UnionArray_nestedfill_tags_index` kernel using cuda.compute * fix the tests for kernels that are deliberately raising errors * compare `starts` and `stops` separately * ignore `memptr` argument for pylint * style: pre-commit fixes * Add functions for indexing and repeating arrays * style: pre-commit fixes * return unary_transform call for segment_ids * style: pre-commit fixes * update the `awkward_IndexedArray_reduce_next_64` to work with offsets * style: pre-commit fixes --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Ianna Osborne --- dev/generate-kernel-signatures.py | 24 +- dev/generate-tests.py | 43 +- src/awkward/_backends/cupy.py | 24 ++ src/awkward/_connect/cuda/_compute.py | 569 ++++++++++++++++++++++++++ 4 files changed, 637 insertions(+), 23 deletions(-) diff --git a/dev/generate-kernel-signatures.py b/dev/generate-kernel-signatures.py index 4be14627f1..f82c0d8624 100644 --- a/dev/generate-kernel-signatures.py +++ b/dev/generate-kernel-signatures.py @@ -16,11 +16,11 @@ "awkward_ListArray_min_range", "awkward_ListArray_validity", "awkward_BitMaskedArray_to_ByteMaskedArray", - "awkward_ListArray_broadcast_tooffsets", - "awkward_ListArray_compact_offsets", + # "awkward_ListArray_broadcast_tooffsets", + # "awkward_ListArray_compact_offsets", "awkward_ListOffsetArray_flatten_offsets", - "awkward_IndexedArray_overlay_mask", - "awkward_ByteMaskedArray_numnull", + # "awkward_IndexedArray_overlay_mask", + # "awkward_ByteMaskedArray_numnull", "awkward_IndexedArray_numnull", "awkward_IndexedArray_numnull_parents", "awkward_IndexedArray_numnull_unique_64", @@ -51,9 +51,9 @@ "awkward_RegularArray_reduce_local_nextparents_64", "awkward_RegularArray_reduce_nonlocal_preparenext_64", # "awkward_missing_repeat", - "awkward_RegularArray_getitem_jagged_expand", - "awkward_ListArray_combinations_length", - "awkward_ListArray_combinations", + # "awkward_RegularArray_getitem_jagged_expand", + # "awkward_ListArray_combinations_length", + # "awkward_ListArray_combinations", "awkward_RegularArray_combinations_64", "awkward_ListArray_getitem_jagged_apply", "awkward_ListArray_getitem_jagged_carrylen", @@ -72,14 +72,14 @@ "awkward_UnionArray_regular_index", "awkward_ListOffsetArray_reduce_nonlocal_nextstarts_64", "awkward_ListArray_getitem_next_range_spreadadvanced", - "awkward_ListArray_localindex", + # "awkward_ListArray_localindex", "awkward_NumpyArray_pad_zero_to_length", "awkward_NumpyArray_reduce_adjust_starts_64", "awkward_NumpyArray_rearrange_shifted", "awkward_NumpyArray_reduce_adjust_starts_shifts_64", "awkward_RegularArray_getitem_next_at", "awkward_BitMaskedArray_to_IndexedOptionArray", - "awkward_ByteMaskedArray_getitem_nextcarry", + # "awkward_ByteMaskedArray_getitem_nextcarry", "awkward_ByteMaskedArray_getitem_nextcarry_outindex", "awkward_ByteMaskedArray_reduce_next_64", "awkward_ByteMaskedArray_reduce_next_nonlocal_nextshifts_64", @@ -97,8 +97,8 @@ "awkward_IndexedArray_local_preparenext_64", "awkward_IndexedArray_ranges_next_64", "awkward_IndexedArray_ranges_carry_next_64", - "awkward_IndexedArray_reduce_next_64", - "awkward_IndexedArray_reduce_next_nonlocal_nextshifts_64", + # "awkward_IndexedArray_reduce_next_64", + # "awkward_IndexedArray_reduce_next_nonlocal_nextshifts_64", "awkward_IndexedArray_reduce_next_nonlocal_nextshifts_fromshifts_64", "awkward_IndexedOptionArray_rpad_and_clip_mask_axis1", "awkward_ListOffsetArray_local_preparenext_64", @@ -118,7 +118,7 @@ "awkward_UnionArray_nestedfill_tags_index", "awkward_UnionArray_regular_index_getsize", "awkward_UnionArray_simplify", - "awkward_UnionArray_simplify_one", + # "awkward_UnionArray_simplify_one", "awkward_RecordArray_reduce_nonlocal_outoffsets_64", # "awkward_reduce_count_64", # "awkward_reduce_max", diff --git a/dev/generate-tests.py b/dev/generate-tests.py index f398e6988e..25f1cff771 100644 --- a/dev/generate-tests.py +++ b/dev/generate-tests.py @@ -1567,19 +1567,40 @@ def gencudaunittests(specdict): count += 1 else: args += ", " + arg.name - f.write(" " * 4 + "funcC(" + args + ")\n") + # Determine if this is a cuda.compute kernel (raises errors eagerly) + # or compiled CUDA kernel (raises errors after `ak_cu.synchronize_cuda()`) + CUDA_COPUTE_KERNELS = { + "awkward_ListArray_compact_offsets", + "awkward_ListArray_broadcast_tooffsets", + } + + raises_error_eagerly = ( + spec.templatized_kernel_name in CUDA_COPUTE_KERNELS + ) + if test["error"]: - f.write( - f""" - error_message = re.escape("{test["message"]} in compiled CUDA code ({spec.templatized_kernel_name})") -""" - ) - f.write( - """ with pytest.raises(ValueError, match=rf"{error_message}"): - ak_cu.synchronize_cuda() -""" - ) + error_message_line = f' error_message = re.escape("{test["message"]} in compiled CUDA code ({spec.templatized_kernel_name})")\n' + if raises_error_eagerly: + # call a kernel directly inside `pytest.raises()` + f.write( + "\n" + + error_message_line + + ' with pytest.raises(ValueError, match=rf"{error_message}"):\n' + + " " * 8 + + "funcC(" + + args + + ")\n" + ) + else: + f.write(" " * 4 + "funcC(" + args + ")\n") + f.write( + "\n" + + error_message_line + + ' with pytest.raises(ValueError, match=rf"{error_message}"):\n' + " ak_cu.synchronize_cuda()\n" + ) else: + f.write(" " * 4 + "funcC(" + args + ")\n") f.write( """ try: diff --git a/src/awkward/_backends/cupy.py b/src/awkward/_backends/cupy.py index 75ecc16674..0149c45cb2 100644 --- a/src/awkward/_backends/cupy.py +++ b/src/awkward/_backends/cupy.py @@ -85,6 +85,18 @@ def _supports_cuda_compute(self, kernel_name: str) -> bool: "awkward_reduce_argmin_complex", "awkward_reduce_count_64", "awkward_reduce_countnonzero", + "awkward_IndexedArray_overlay_mask", + "awkward_IndexedArray_reduce_next_64", + "awkward_IndexedArray_reduce_next_nonlocal_nextshifts_64", + "awkward_ByteMaskedArray_getitem_nextcarry", + "awkward_ByteMaskedArray_numnull", + "awkward_RegularArray_getitem_jagged_expand", + "awkward_UnionArray_simplify_one", + "awkward_ListArray_broadcast_tooffsets", + "awkward_ListArray_localindex", + "awkward_ListArray_compact_offsets", + "awkward_ListArray_combinations_length", + "awkward_ListArray_combinations", "awkward_reduce_countnonzero_complex", # indexing / structure "awkward_missing_repeat", @@ -128,6 +140,18 @@ def _get_cuda_compute_impl(self, kernel_name: str): "awkward_missing_repeat": cuda_compute.awkward_missing_repeat, "awkward_index_rpad_and_clip_axis0": cuda_compute.awkward_index_rpad_and_clip_axis0, "awkward_index_rpad_and_clip_axis1": cuda_compute.awkward_index_rpad_and_clip_axis1, + "awkward_IndexedArray_overlay_mask": cuda_compute.awkward_IndexedArray_overlay_mask, + "awkward_IndexedArray_reduce_next_64": cuda_compute.awkward_IndexedArray_reduce_next_64, + "awkward_IndexedArray_reduce_next_nonlocal_nextshifts_64": cuda_compute.awkward_IndexedArray_reduce_next_nonlocal_nextshifts_64, + "awkward_ByteMaskedArray_getitem_nextcarry": cuda_compute.awkward_ByteMaskedArray_getitem_nextcarry, + "awkward_ByteMaskedArray_numnull": cuda_compute.awkward_ByteMaskedArray_numnull, + "awkward_RegularArray_getitem_jagged_expand": cuda_compute.awkward_RegularArray_getitem_jagged_expand, + "awkward_UnionArray_simplify_one": cuda_compute.awkward_UnionArray_simplify_one, + "awkward_ListArray_broadcast_tooffsets": cuda_compute.awkward_ListArray_broadcast_tooffsets, + "awkward_ListArray_localindex": cuda_compute.awkward_ListArray_localindex, + "awkward_ListArray_compact_offsets": cuda_compute.awkward_ListArray_compact_offsets, + "awkward_ListArray_combinations_length": cuda_compute.awkward_ListArray_combinations_length, + "awkward_ListArray_combinations": cuda_compute.awkward_ListArray_combinations, }.get(kernel_name) def prepare_reducer(self, reducer: ak._reducers.Reducer) -> ak._reducers.Reducer: diff --git a/src/awkward/_connect/cuda/_compute.py b/src/awkward/_connect/cuda/_compute.py index fcdc6459f9..fe30305386 100644 --- a/src/awkward/_connect/cuda/_compute.py +++ b/src/awkward/_connect/cuda/_compute.py @@ -4,7 +4,9 @@ from cuda.compute import ( CountingIterator, + DiscardIterator, OpKind, + inclusive_scan, segmented_reduce, unary_transform, ) @@ -772,6 +774,573 @@ def segment_reduce_countnonzero(segment_id): ) +# Overlays a mask onto an index array: masked positions become -1, unmasked positions keep their original index value. +def awkward_IndexedArray_overlay_mask(toindex, mask, fromindex, length): + def transform(i): + return -1 if mask[i] else fromindex[i] + + indices = CountingIterator(cp.int64(0)) + unary_transform(d_in=indices, d_out=toindex, op=transform, num_items=length) + + +# Skips masked (-1) entries and packs remaining valid entries into nextcarry, tracking where +# each ended up in outindex. Builds nextoffsets[j+1] = cumulative count of valid entries in +# segments 0..j as defined by the offsets array. +# +# Example: +# index = [3, -1, 5, -1, 2, -1, 4] +# offsets = [0, 4, 7] (2 segments: positions 0-3 and 4-6) +# outlength = 2 +# +# nextcarry = [3, 5, 2, 4] (valid index values, compacted) +# nextoffsets = [0, 2, 4] (segment 0 has 2 valid, segment 1 has 2 valid) +# outindex = [0, -1, 1, -1, 2, -1, 3] (position in nextcarry, or -1 if masked) +def awkward_IndexedArray_reduce_next_64( + nextcarry, nextoffsets, outindex, index, offsets, outlength +): + nextoffsets[0] = 0 + if outlength == 0: + return + + index_length = int(offsets[outlength]) + if index_length == 0: + nextoffsets[1 : outlength + 1] = 0 + return + + idx_dtype = index.dtype + valid = (index[:index_length] >= 0).astype(idx_dtype) + scan = cp.empty(index_length, dtype=idx_dtype) + inclusive_scan( + d_in=valid, + d_out=scan, + op=lambda a, b: a + b, + init_value=cp.array([0], dtype=idx_dtype), + num_items=index_length, + ) + + def scatter_and_fill(i): + if index[i] >= 0: + k = scan[i] - 1 + nextcarry[k] = index[i] + return k + return -1 + + unary_transform( + d_in=CountingIterator(idx_dtype.type(0)), + d_out=outindex, + op=scatter_and_fill, + num_items=index_length, + ) + + off_dtype = offsets.dtype.type + + def fill_nextoffsets(j): + stop = offsets[j + 1] + nextoffsets[j + 1] = idx_dtype.type(0) if stop == 0 else scan[stop - 1] + return off_dtype(0) + + unary_transform( + d_in=CountingIterator(off_dtype(0)), + d_out=DiscardIterator(), + op=fill_nextoffsets, + num_items=outlength, + ) + + +# For each valid (non-negative) entry at position i, records the number of null (negative) entries +# that appeared before it. The k-th valid entry gets nextshifts[k] = count of nulls before position i. +# For example, für index = [0, 1, 2, -1, 3, -1, 4] → nextshifts = [0, 0, 0, 1, 2]. +def awkward_IndexedArray_reduce_next_nonlocal_nextshifts_64(nextshifts, index, length): + if length == 0: + return + + index_slice = index[:length] + + # cumsum of (index < 0) gives the running null count at each position. + # this is basically equivalent to calling cuda.compute.inclusive_scan on index_slice < 0 + null_cumsum = cp.cumsum(index_slice < 0) + _ = cp.empty(length, dtype=cp.int64) + + def scatter(i): + null_count = null_cumsum[i] + if index_slice[i] >= 0: + nextshifts[i - null_count] = null_count # output slot = i - null_count + # return a dummy value otherwise + return cp.int64(0) + + indices = CountingIterator(cp.int64(0)) + unary_transform(d_in=indices, d_out=_, op=scatter, num_items=length) + + +# Packs valid entries (where (mask[i] != 0) == validwhen) into tocarry in order. +# Examples: +# mask = [0, 1, 0, 1, 1], validwhen=True → tocarry = [1, 3, 4] +# mask = [0, 1, 0, 1, 1], validwhen=False → tocarry = [0, 2] +# mask = [0, 1, 0, 1, 1, -1, 1], validwhen=True → tocarry = [1, 3, 4, 5, 6] +def awkward_ByteMaskedArray_getitem_nextcarry(tocarry, mask, length, validwhen): + if length == 0: + return + + # valid = ((mask[:length] != 0) == validwhen) + # valid[i] is 1 when the masked element passes the validwhen condition. + + # get the indices of the valid entries using cp.nonzero + valid_indices = cp.nonzero((mask[:length] != 0) == validwhen)[0] + # in case tocarry is not exactly the right size, allocate it in two steps like this + tocarry[: len(valid_indices)] = valid_indices + + +# Counts null (invalid) entries: positions where (mask[i] != 0) != validwhen. +# Examples: +# mask = [0, 1, 0, 1, 1], validwhen=True → numnull = 2 (positions 0 and 2 are null) +# mask = [0, 1, 0, 1, 1], validwhen=False → numnull = 3 (positions 1, 3 and 4 are null) +def awkward_ByteMaskedArray_numnull(numnull, mask, length, validwhen): + numnull[0] = cp.count_nonzero((mask[:length] != 0) != validwhen) + + +# Broadcasts a single jagged offset array across all rows of a regular array +# Example: +# singleoffsets = [0, 2, 5], regularsize = 2, regularlength = 3 +# multistarts = [0, 2, 0, 2, 0, 2] +# multistops = [2, 5, 2, 5, 2, 5] +def awkward_RegularArray_getitem_jagged_expand( + multistarts, multistops, singleoffsets, regularsize, regularlength +): + if regularlength == 0 or regularsize == 0: + return + + # Reshape as (regularlength, regularsize) views (no copy) and broadcast-assign + # singleoffsets[:-1] / singleoffsets[1:] across all rows. + multistarts.reshape(regularlength, regularsize)[:] = singleoffsets[:regularsize] + multistops.reshape(regularlength, regularsize)[:] = singleoffsets[ + 1 : regularsize + 1 + ] + + +# THIS KERNEL IS NOT USED (just for archive) +# Fills a tagged index for one union type: assigns a constant tag and +# sequential index into each segment defined by the starts/counts ranges +# Example input: +# tmpstarts = [0, 3], tag = 1, fromcounts = [3, 2] +# Example output: +# totags = [1, 1, 1, 1, 1] +# toindex = [0, 1, 2, 0, 1] +# also, the tmpstarts get rewritten with stops: tmpstarts = [3, 5] +def awkward_UnionArray_nestedfill_tags_index( + totags, toindex, tmpstarts, tag, fromcounts, length +): + if length == 0: + return + + starts = tmpstarts[:length] + counts = fromcounts[:length] + + # Total span of the output arrays we need to touch: + # the last segment's start + its count gives the furthest written position + total_size = int(starts[length - 1]) + int(counts[length - 1]) + + if total_size == 0: + return + + # +1 at each segment start, -1 just past each segment end. + # cumsum of this will later yield 1 inside any covered range, 0 in gaps. + diff = cp.zeros(total_size + 1, dtype=cp.int8) + + def scatter_and_update(i): + start = starts[i] + count = counts[i] + # Mark this segment's range in the difference array + diff[start] += cp.int8(1) + diff[start + count] -= cp.int8(1) + # update tmpstarts (for the next call of this kernel (for a different union type))? + tmpstarts[i] = start + count + return 0 + + # Scatter segment's ranges and update tmpstarts + unary_transform( + d_in=CountingIterator(cp.int64(0)), + d_out=DiscardIterator(), + op=scatter_and_update, + num_items=length, + ) + + # coverage[j] == 1 if position j falls inside any segment's range, 0 otherwise + coverage = cp.cumsum(diff[:total_size]) + + # scan[j] == local index of element j within its segment + # Since it's a cumsum, the first index starts from 1, 2, 3 ... + # so we'll have to -1 before writing it in toindex + scan = cp.cumsum(coverage, dtype=cp.int64) + + def fill(j): + if coverage[j]: + # Mark this position as belonging to the current tag + totags[j] = tag + toindex[j] = scan[j] - 1 + return 0 + + unary_transform( + d_in=CountingIterator(cp.int64(0)), + d_out=DiscardIterator(), + op=fill, + num_items=total_size, + ) + + +# For each position i where fromtags[i] == fromwhich, sets totags[i] = towhich and +# toindex[i] = fromindex[i] + base. Other positions are left unchanged. +# Example: +# fromtags = [0, 1, 0, 1, 0], fromindex = [0, 0, 1, 1, 2] +# fromwhich=1, towhich=2, base=10 +# totags = [0, 2, 0, 2, 0] +# toindex = [0, 10, 1, 11, 2] +def awkward_UnionArray_simplify_one( + totags, toindex, fromtags, fromindex, towhich, fromwhich, length, base +): + if length == 0: + return + + def transform(i): + if fromtags[i] == fromwhich: + totags[i] = towhich + toindex[i] = fromindex[i] + base + return 0 # discarded + + indices = CountingIterator(cp.int64(0)) + unary_transform( + d_in=indices, d_out=DiscardIterator(), op=transform, num_items=length + ) + + +# producing a carry index that maps each output element back to its position in the original content +# Example input: +# fromoffsets = [0, 3, 5], fromstarts = [10, 20], fromstops = [13, 22], lencontent = 25 +# Example output: +# i=0: range [10, 13) → [10, 11, 12] +# i=1: range [20, 22) → [20, 21] +# tocarry = [10, 11, 12, 20, 21] +def awkward_ListArray_broadcast_tooffsets( + tocarry, fromoffsets, offsetslength, fromstarts, fromstops, lencontent +): + if offsetslength <= 1: + return + + length = offsetslength - 1 + starts = fromstarts[:length] + stops = fromstops[:length] + # counts[i] = how many elements list i should have + counts = fromoffsets[1:offsetslength] - fromoffsets[:length] + + _K = "awkward_ListArray_broadcast_tooffsets" + if cp.any((starts != stops) & (stops > lencontent)): + raise ValueError(f"stops[i] > len(content) in compiled CUDA code ({_K})") + if cp.any(counts < 0): + raise ValueError( + f"broadcast's offsets must be monotonically increasing in compiled CUDA code ({_K})" + ) + if cp.any(stops - starts != counts): + raise ValueError(f"cannot broadcast nested list in compiled CUDA code ({_K})") + + # For each segment i, write the content indices starts[i], starts[i]+1, ..., stops[i]-1 + # into the contiguous output slice tocarry[fromoffsets[i] : fromoffsets[i+1]]. + def fill_list(i): + start = starts[i] + stop = stops[i] + for j in range(start, stop): + tocarry[fromoffsets[i] + j - start] = j + return 0 + + unary_transform( + d_in=CountingIterator(cp.int64(0)), + d_out=DiscardIterator(), + op=fill_list, + num_items=length, + ) + + +# For each segment i, it fills toindex with the local position of each element within that segment — i.e. 0, 1, 2, ... +# Example: +# offsets = [0, 3, 5] +# toindex = [0, 1, 2, 0, 1] +def awkward_ListArray_localindex(toindex, offsets, length): + if length == 0: + return + + starts = offsets[:length] + stops = offsets[1 : length + 1] + + def fill(i): + start = starts[i] + stop = stops[i] + for j in range(start, stop): + toindex[j] = j - start + return 0 + + unary_transform( + d_in=CountingIterator(cp.int64(0)), + d_out=DiscardIterator(), + op=fill, + num_items=length, + ) + + +# Converts a ListArray's (starts, stops) pairs into offsets. +# tooffsets[0] = 0, tooffsets[i+1] = tooffsets[i] + (fromstops[i] - fromstarts[i]) +# Example: +# fromstarts = [10, 20], fromstops = [13, 22], length = 2 +# tooffsets = [0, 3, 5] +def awkward_ListArray_compact_offsets(tooffsets, fromstarts, fromstops, length): + tooffsets[0] = 0 + if length == 0: + return + + starts = fromstarts[:length] + stops = fromstops[:length] + + if cp.any(stops < starts): + raise ValueError( + "stops[i] < starts[i] in compiled CUDA code (awkward_ListArray_compact_offsets)" + ) + + sizes = stops - starts + + # the same as `tooffsets[1 : length + 1] = cp.cumsum(sizes)` + inclusive_scan( + d_in=sizes, + d_out=tooffsets[1 : length + 1], + op=lambda a, b: a + b, + init_value=cp.array([0], dtype=tooffsets.dtype), + num_items=length, + ) + + +# For each list i, counts the number of n-combinations of its elements +# (with or without replacement) and builds an offsets array into tooffsets. +# totallen[0] is set to the total number of combinations across all lists. +# +# Example (n=2, replacement=False): +# starts=[0, 0, 0], stops=[2, 3, 4] +# sizes = [2, 3, 4] +# C(2,2)=1, C(3,2)=3, C(4,2)=6 +# Then the output will be: tooffsets = [0, 1, 4, 10] +# totallen = 10 +def awkward_ListArray_combinations_length( + totallen, tooffsets, n, replacement, starts, stops, length +): + tooffsets[0] = 0 + if length == 0: + totallen[0] = 0 + return + + def combinations_len(i): + size = stops[i] - starts[i] + if replacement: + size = size + (n - 1) + thisn = n + if thisn > size: + return 0 + elif thisn == size: + return 1 + else: + # C(size, n) == C(size, size-n), so use the smaller one + # of the two to minimise the number of loop iterations + if thisn * 2 > size: + thisn = size - thisn + + # Compute C(size, thisn) = size! / (thisn! * (size-thisn)!) incrementally: + # result = size * (size-1) * ... * (size-thisn+1) / thisn! + result = size + for j in range(2, thisn + 1): + result = result * (size - j + 1) + result = result // j + return result + + # Compute the number of combinations for each list + counts = cp.empty(length, dtype=tooffsets.dtype) + unary_transform( + d_in=CountingIterator(cp.int64(0)), + d_out=counts, + op=combinations_len, + num_items=length, + ) + + # Convert counts to offsets: + # tooffsets[i+1] = sum(counts[0..i]) + inclusive_scan( + d_in=counts, + d_out=tooffsets[1 : length + 1], + op=lambda a, b: a + b, + init_value=cp.array([0], dtype=tooffsets.dtype), + num_items=length, + ) + + # Total number of combinations across all lists + totallen[0] = tooffsets[length] + + +# For each list i, enumerates all n-combinations (with or without replacement) +# of its elements and writes the indices into n output carry arrays. +# +# tocarry_ptrs is a CuPy int64 array of length n holding raw device pointers; +# each pointer refers to a pre-allocated int64 array of length totallen. +# +# Example (n=2, replacement=False): +# starts=[0], stops=[3] → elements [0,1,2] +# C(3,2) = 3 combinations in total +# combinations: (0,1),(0,2),(1,2) +# +# Output: +# tocarry_ptrs[0] → [0, 0, 1], tocarry_ptrs[1] → [1, 2, 2] +# toindex: [3, 3] +def awkward_ListArray_combinations( + tocarry_ptrs, toindex, fromindex, n, replacement, starts, stops, length +): + if length == 0: + return + + # Step 1: compute per-list combination counts (same as combinations_length!!) + # TODO: we can just pass combination offsets directly in the future (from src/awkward/contents/listoffsetarray.py:1405) + def combinations_len(i): + size = stops[i] - starts[i] + if replacement: + size = size + (n - 1) + thisn = n + if thisn > size: + return 0 + elif thisn == size: + return 1 + else: + if thisn * 2 > size: + thisn = size - thisn + result = size + for j in range(2, thisn + 1): + result = result * (size - j + 1) + result = result // j + return result + + counts = cp.empty(length, dtype=cp.int64) + unary_transform( + d_in=CountingIterator(cp.int64(0)), + d_out=counts, + op=combinations_len, + num_items=length, + ) + + offsets = cp.empty(length + 1, dtype=cp.int64) + offsets[0] = 0 + inclusive_scan( + d_in=counts, + d_out=offsets[1:], + op=lambda a, b: a + b, + init_value=cp.array([0], dtype=cp.int64), + num_items=length, + ) + + totallen = int(offsets[length]) + if totallen == 0: + return + + # Step 2: wrap raw pointers from tocarry_ptrs into CuPy arrays + # raw int64 pointer values from tocarry_ptrs[k] can't be dereferenced inside a Numba closure, so + # we need this intermediate step + # + # (the pointers themselves are allocated at src/awkward/contents/listoffsetarray.py:1456-1464) + carry_arrays = [] + for k in range(n): + ptr_val = int(tocarry_ptrs[k]) + mem = cp.cuda.UnownedMemory(ptr_val, totallen * 8, None) + memptr = cp.cuda.MemoryPointer(mem, 0) + carry_arrays.append(cp.ndarray(totallen, dtype=cp.int64, memptr=memptr)) # pylint: disable=unexpected-keyword-arg + + # ------------------------------------------------------------------------- + # Step 3: fill carry_arrays[k] for each combination position k in turn. + # + # For each output slot g in [0, totallen): + # + # a) Binary search offsets to find which source list i owns slot g, + # and compute the rank of this combination within that list + # (rank = g - offsets[i], i.e. the 0-based index among all combinations + # of list i in lexicographic order). + # + # b) Unrank: decode the rank back into the actual combination tuple using + # a combinatorial number system. Iterating over positions pos=0..n-1, + # at each position scan forward through candidate values j, counting + # how many combinations start with values < j at this position + # (= C(effective_size-j-1, n-pos-1)). Subtract from remaining rank + # until we find the j where remaining < count — that j is the value + # at position pos. + # + # c) Early exit: once pos==k we have the value for position k and write + # it to carry_k[g], skipping the rest of the unranking. This is why + # we do n separate passes (one per k) rather than one pass writing all + # n positions: each pass only needs to unrank up to position k. + # + # d) Content index: add start (the list's base offset into content) to + # convert from a within-list index to an absolute content index. + # For replacement, subtract pos to undo the stars-and-bars shift. + # ------------------------------------------------------------------------- + def make_pass(k, carry_k): + def fill_pos(g): + # a) Find source list i via binary search on offsets + lo = 0 + hi = length - 1 + while lo < hi: + mid = (lo + hi) >> 1 + if offsets[mid + 1] <= g: + lo = mid + 1 + else: + hi = mid + list_i = lo + start = starts[list_i] + size = stops[list_i] - starts[list_i] + rank = g - offsets[list_i] + # For replacement use stars-and-bars effective size + effective_size = size + n - 1 if replacement else size + + # b) Unrank: decode rank into the combination tuple + lower = 0 # lower bound for j at each position (enforces ordering) + remaining = rank + for pos in range(n): + for j in range(lower, effective_size - (n - pos - 1)): + # Count combinations where position pos has value j: + # = C(effective_size - j - 1, n - pos - 1) + top = effective_size - j - 1 + choose = n - pos - 1 + if choose == 0: + count = 1 + else: + if choose * 2 > top: # use smaller equivalent + choose = top - choose + c = top + for q in range(2, choose + 1): + c = c * (top - q + 1) + c = c // q + count = c + if remaining < count: + # c) j is the value at position pos + if pos == k: + # d) write absolute content index and exit early + carry_k[g] = (j - pos if replacement else j) + start + return 0 + lower = j + 1 # next position must be >= j+1 (no repeat) + break + remaining -= count + return 0 + + return fill_pos + + # One parallel pass per combination position k + for k in range(n): + unary_transform( + d_in=CountingIterator(cp.int64(0)), + d_out=DiscardIterator(), + op=make_pass(k, carry_arrays[k]), + num_items=totallen, + ) + + toindex[:n] = totallen + + def awkward_index_rpad_and_clip_axis0(toindex, target, length): """ Fill ``toindex[0..target)`` with the identity mapping ``[0..shorter)`` From 496e74f7ab43af7f88d2ec49155986976386f3a3 Mon Sep 17 00:00:00 2001 From: maxymnaumchyk <70752300+maxymnaumchyk@users.noreply.github.com> Date: Tue, 19 May 2026 15:39:32 +0300 Subject: [PATCH 4/4] feat: migrate some more kernels to cuda.compute (#4019) * feat: add reimplementation of the `awkward_RegularArray` kernels using cuda.compute * reimplement more kernels using cuda.compute * reimplement more kernels using cuda.compute * style: pre-commit fixes * style fix * use the named functions instead of lambdas * add new kernels * add new kernels * fix a type mismatch * style: pre-commit fixes * add new kernels * fix the overflow error * new batch of kernels (draft) * add comments and cleanup * fix the tests messages * add new `BitMaskedArray` kernels * modify the `test_1381_check_errors.py` test * resolve the conflicts --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- dev/generate-kernel-signatures.py | 82 +- dev/generate-tests.py | 9 +- src/awkward/_backends/cupy.py | 84 ++ src/awkward/_connect/cuda/_compute.py | 1960 ++++++++++++++++++++++++- tests-cuda/test_1381_check_errors.py | 15 +- 5 files changed, 2092 insertions(+), 58 deletions(-) diff --git a/dev/generate-kernel-signatures.py b/dev/generate-kernel-signatures.py index f82c0d8624..f5ddeca0c2 100644 --- a/dev/generate-kernel-signatures.py +++ b/dev/generate-kernel-signatures.py @@ -12,19 +12,19 @@ cuda_kernels_impl = [ - "awkward_Index_nones_as_index", - "awkward_ListArray_min_range", + # "awkward_Index_nones_as_index", + # "awkward_ListArray_min_range", "awkward_ListArray_validity", - "awkward_BitMaskedArray_to_ByteMaskedArray", + # "awkward_BitMaskedArray_to_ByteMaskedArray", # "awkward_ListArray_broadcast_tooffsets", # "awkward_ListArray_compact_offsets", "awkward_ListOffsetArray_flatten_offsets", # "awkward_IndexedArray_overlay_mask", # "awkward_ByteMaskedArray_numnull", "awkward_IndexedArray_numnull", - "awkward_IndexedArray_numnull_parents", - "awkward_IndexedArray_numnull_unique_64", - "awkward_ListArray_fill", + # "awkward_IndexedArray_numnull_parents", + # "awkward_IndexedArray_numnull_unique_64", + # "awkward_ListArray_fill", "awkward_IndexedArray_fill", "awkward_IndexedArray_fill_count", "awkward_UnionArray_fillindex", @@ -33,20 +33,20 @@ "awkward_UnionArray_filltags", "awkward_UnionArray_filltags_const", "awkward_localindex", - "awkward_IndexedArray_reduce_next_fix_offsets_64", - "awkward_RegularArray_getitem_next_array_advanced", - "awkward_ByteMaskedArray_toIndexedOptionArray", + # "awkward_IndexedArray_reduce_next_fix_offsets_64", + # "awkward_RegularArray_getitem_next_array_advanced", + # "awkward_ByteMaskedArray_toIndexedOptionArray", "awkward_IndexedArray_simplify", "awkward_UnionArray_validity", - "awkward_IndexedArray_validity", - "awkward_ByteMaskedArray_overlay_mask", + # "awkward_IndexedArray_validity", + # "awkward_ByteMaskedArray_overlay_mask", "awkward_NumpyArray_reduce_mask_ByteMaskedArray_64", - "awkward_RegularArray_getitem_carry", - "awkward_RegularArray_localindex", - "awkward_RegularArray_rpad_and_clip_axis1", - "awkward_RegularArray_getitem_next_range", - "awkward_RegularArray_getitem_next_range_spreadadvanced", - "awkward_RegularArray_getitem_next_array", + # "awkward_RegularArray_getitem_carry", + # "awkward_RegularArray_localindex", + # "awkward_RegularArray_rpad_and_clip_axis1", + # "awkward_RegularArray_getitem_next_range", + # "awkward_RegularArray_getitem_next_range_spreadadvanced", + # "awkward_RegularArray_getitem_next_array", "awkward_RegularArray_getitem_next_array_regularize", "awkward_RegularArray_reduce_local_nextparents_64", "awkward_RegularArray_reduce_nonlocal_preparenext_64", @@ -65,52 +65,52 @@ "awkward_ListArray_getitem_next_array", "awkward_ListArray_getitem_next_at", "awkward_ListArray_getitem_next_range", - "awkward_ListArray_getitem_next_range_carrylength", - "awkward_ListArray_getitem_next_range_counts", - "awkward_ListArray_rpad_and_clip_length_axis1", + # "awkward_ListArray_getitem_next_range_carrylength", + # "awkward_ListArray_getitem_next_range_counts", + # "awkward_ListArray_rpad_and_clip_length_axis1", "awkward_ListArray_rpad_axis1", "awkward_UnionArray_regular_index", "awkward_ListOffsetArray_reduce_nonlocal_nextstarts_64", "awkward_ListArray_getitem_next_range_spreadadvanced", # "awkward_ListArray_localindex", - "awkward_NumpyArray_pad_zero_to_length", + # "awkward_NumpyArray_pad_zero_to_length", "awkward_NumpyArray_reduce_adjust_starts_64", "awkward_NumpyArray_rearrange_shifted", "awkward_NumpyArray_reduce_adjust_starts_shifts_64", - "awkward_RegularArray_getitem_next_at", - "awkward_BitMaskedArray_to_IndexedOptionArray", + # "awkward_RegularArray_getitem_next_at", + # "awkward_BitMaskedArray_to_IndexedOptionArray", # "awkward_ByteMaskedArray_getitem_nextcarry", - "awkward_ByteMaskedArray_getitem_nextcarry_outindex", + # "awkward_ByteMaskedArray_getitem_nextcarry_outindex", "awkward_ByteMaskedArray_reduce_next_64", - "awkward_ByteMaskedArray_reduce_next_nonlocal_nextshifts_64", - "awkward_ByteMaskedArray_reduce_next_nonlocal_nextshifts_fromshifts_64", - "awkward_Content_getitem_next_missing_jagged_getmaskstartstop", + # "awkward_ByteMaskedArray_reduce_next_nonlocal_nextshifts_64", + # "awkward_ByteMaskedArray_reduce_next_nonlocal_nextshifts_fromshifts_64", + # "awkward_Content_getitem_next_missing_jagged_getmaskstartstop", # "awkward_index_rpad_and_clip_axis0", # "awkward_index_rpad_and_clip_axis1", - "awkward_NumpyArray_subrange_equal", - "awkward_NumpyArray_subrange_equal_bool", + # "awkward_NumpyArray_subrange_equal", + # "awkward_NumpyArray_subrange_equal_bool", "awkward_IndexedArray_flatten_nextcarry", - "awkward_IndexedArray_flatten_none2empty", - "awkward_IndexedArray_getitem_nextcarry", - "awkward_IndexedArray_getitem_nextcarry_outindex", + # "awkward_IndexedArray_flatten_none2empty", + # "awkward_IndexedArray_getitem_nextcarry", + # "awkward_IndexedArray_getitem_nextcarry_outindex", "awkward_IndexedArray_index_of_nulls", "awkward_IndexedArray_local_preparenext_64", - "awkward_IndexedArray_ranges_next_64", - "awkward_IndexedArray_ranges_carry_next_64", + # "awkward_IndexedArray_ranges_next_64", + # "awkward_IndexedArray_ranges_carry_next_64", # "awkward_IndexedArray_reduce_next_64", # "awkward_IndexedArray_reduce_next_nonlocal_nextshifts_64", - "awkward_IndexedArray_reduce_next_nonlocal_nextshifts_fromshifts_64", - "awkward_IndexedOptionArray_rpad_and_clip_mask_axis1", - "awkward_ListOffsetArray_local_preparenext_64", - "awkward_ListOffsetArray_rpad_and_clip_axis1", - "awkward_ListOffsetArray_rpad_length_axis1", + # "awkward_IndexedArray_reduce_next_nonlocal_nextshifts_fromshifts_64", + # "awkward_IndexedOptionArray_rpad_and_clip_mask_axis1", + # "awkward_ListOffsetArray_local_preparenext_64", + # "awkward_ListOffsetArray_rpad_and_clip_axis1", + # "awkward_ListOffsetArray_rpad_length_axis1", "awkward_ListOffsetArray_toRegularArray", "awkward_ListOffsetArray_rpad_axis1", - "awkward_MaskedArray_getitem_next_jagged_project", + # "awkward_MaskedArray_getitem_next_jagged_project", "awkward_UnionArray_project", "awkward_ListOffsetArray_drop_none_indexes", "awkward_ListOffsetArray_reduce_local_nextparents_64", - "awkward_ListOffsetArray_reduce_nonlocal_maxcount_offsetscopy_64", + # "awkward_ListOffsetArray_reduce_nonlocal_maxcount_offsetscopy_64", "awkward_ListOffsetArray_reduce_nonlocal_outstartsstops_64", "awkward_ListOffsetArray_reduce_local_outoffsets_64", "awkward_UnionArray_flatten_length", diff --git a/dev/generate-tests.py b/dev/generate-tests.py index 25f1cff771..6311dfe3bb 100644 --- a/dev/generate-tests.py +++ b/dev/generate-tests.py @@ -1569,13 +1569,18 @@ def gencudaunittests(specdict): args += ", " + arg.name # Determine if this is a cuda.compute kernel (raises errors eagerly) # or compiled CUDA kernel (raises errors after `ak_cu.synchronize_cuda()`) - CUDA_COPUTE_KERNELS = { + CUDA_COMPUTE_KERNELS = { "awkward_ListArray_compact_offsets", "awkward_ListArray_broadcast_tooffsets", + "awkward_RegularArray_getitem_next_at", + "awkward_IndexedArray_validity", + "awkward_IndexedArray_getitem_nextcarry_outindex", + "awkward_IndexedArray_getitem_nextcarry", + "awkward_IndexedArray_flatten_none2empty", } raises_error_eagerly = ( - spec.templatized_kernel_name in CUDA_COPUTE_KERNELS + spec.templatized_kernel_name in CUDA_COMPUTE_KERNELS ) if test["error"]: diff --git a/src/awkward/_backends/cupy.py b/src/awkward/_backends/cupy.py index 0149c45cb2..c7f2f91ba3 100644 --- a/src/awkward/_backends/cupy.py +++ b/src/awkward/_backends/cupy.py @@ -101,9 +101,51 @@ def _supports_cuda_compute(self, kernel_name: str) -> bool: # indexing / structure "awkward_missing_repeat", "awkward_index_rpad_and_clip_axis0", + "awkward_RegularArray_localindex", + "awkward_RegularArray_getitem_next_range_spreadadvanced", + "awkward_RegularArray_getitem_next_range", + "awkward_RegularArray_getitem_next_array_advanced", + "awkward_RegularArray_getitem_next_array", "awkward_index_rpad_and_clip_axis1", # sort "awkward_sort", + # other kernels + "awkward_RegularArray_getitem_carry", + "awkward_NumpyArray_subrange_equal", + "awkward_NumpyArray_pad_zero_to_length", + "awkward_NumpyArray_subrange_equal_bool", + "awkward_MaskedArray_getitem_next_jagged_project", + "awkward_RegularArray_rpad_and_clip_axis1", + "awkward_RegularArray_getitem_next_at", + "awkward_ListOffsetArray_rpad_length_axis1", + "awkward_ListOffsetArray_rpad_and_clip_axis1", + "awkward_ListOffsetArray_reduce_nonlocal_maxcount_offsetscopy_64", + "awkward_ListOffsetArray_local_preparenext_64", + "awkward_ListArray_rpad_and_clip_length_axis1", + "awkward_ListArray_min_range", + "awkward_ListArray_getitem_next_range_counts", + "awkward_ListArray_getitem_next_range_carrylength", + "awkward_ListArray_fill", + "awkward_IndexedOptionArray_rpad_and_clip_mask_axis1", + "awkward_IndexedArray_validity", + "awkward_IndexedArray_reduce_next_nonlocal_nextshifts_fromshifts_64", + "awkward_IndexedArray_reduce_next_fix_offsets_64", + "awkward_IndexedArray_ranges_next_64", + "awkward_IndexedArray_ranges_carry_next_64", + "awkward_IndexedArray_numnull_unique_64", + "awkward_IndexedArray_numnull_parents", + "awkward_IndexedArray_getitem_nextcarry_outindex", + "awkward_IndexedArray_getitem_nextcarry", + "awkward_IndexedArray_flatten_none2empty", + "awkward_Index_nones_as_index", + "awkward_Content_getitem_next_missing_jagged_getmaskstartstop", + "awkward_ByteMaskedArray_toIndexedOptionArray", + "awkward_ByteMaskedArray_reduce_next_nonlocal_nextshifts_64", + "awkward_ByteMaskedArray_reduce_next_nonlocal_nextshifts_fromshifts_64", + "awkward_ByteMaskedArray_overlay_mask", + "awkward_ByteMaskedArray_getitem_nextcarry_outindex", + "awkward_BitMaskedArray_to_IndexedOptionArray", + "awkward_BitMaskedArray_to_ByteMaskedArray", ) # --------------------------------------------------------- @@ -152,6 +194,48 @@ def _get_cuda_compute_impl(self, kernel_name: str): "awkward_ListArray_compact_offsets": cuda_compute.awkward_ListArray_compact_offsets, "awkward_ListArray_combinations_length": cuda_compute.awkward_ListArray_combinations_length, "awkward_ListArray_combinations": cuda_compute.awkward_ListArray_combinations, + # indexing / structure + "awkward_RegularArray_localindex": cuda_compute.awkward_RegularArray_localindex, + "awkward_RegularArray_getitem_next_range_spreadadvanced": cuda_compute.awkward_RegularArray_getitem_next_range_spreadadvanced, + "awkward_RegularArray_getitem_next_range": cuda_compute.awkward_RegularArray_getitem_next_range, + "awkward_RegularArray_getitem_next_array_advanced": cuda_compute.awkward_RegularArray_getitem_next_array_advanced, + "awkward_RegularArray_getitem_next_array": cuda_compute.awkward_RegularArray_getitem_next_array, + "awkward_RegularArray_getitem_carry": cuda_compute.awkward_RegularArray_getitem_carry, + "awkward_RegularArray_rpad_and_clip_axis1": cuda_compute.awkward_RegularArray_rpad_and_clip_axis1, + "awkward_RegularArray_getitem_next_at": cuda_compute.awkward_RegularArray_getitem_next_at, + "awkward_NumpyArray_subrange_equal": cuda_compute.awkward_NumpyArray_subrange_equal, + "awkward_NumpyArray_pad_zero_to_length": cuda_compute.awkward_NumpyArray_pad_zero_to_length, + "awkward_NumpyArray_subrange_equal_bool": cuda_compute.awkward_NumpyArray_subrange_equal_bool, + "awkward_MaskedArray_getitem_next_jagged_project": cuda_compute.awkward_MaskedArray_getitem_next_jagged_project, + "awkward_ListOffsetArray_rpad_length_axis1": cuda_compute.awkward_ListOffsetArray_rpad_length_axis1, + "awkward_ListOffsetArray_rpad_and_clip_axis1": cuda_compute.awkward_ListOffsetArray_rpad_and_clip_axis1, + "awkward_ListOffsetArray_reduce_nonlocal_maxcount_offsetscopy_64": cuda_compute.awkward_ListOffsetArray_reduce_nonlocal_maxcount_offsetscopy_64, + "awkward_ListOffsetArray_local_preparenext_64": cuda_compute.awkward_ListOffsetArray_local_preparenext_64, + "awkward_ListArray_rpad_and_clip_length_axis1": cuda_compute.awkward_ListArray_rpad_and_clip_length_axis1, + "awkward_ListArray_min_range": cuda_compute.awkward_ListArray_min_range, + "awkward_ListArray_getitem_next_range_counts": cuda_compute.awkward_ListArray_getitem_next_range_counts, + "awkward_ListArray_getitem_next_range_carrylength": cuda_compute.awkward_ListArray_getitem_next_range_carrylength, + "awkward_ListArray_fill": cuda_compute.awkward_ListArray_fill, + "awkward_IndexedOptionArray_rpad_and_clip_mask_axis1": cuda_compute.awkward_IndexedOptionArray_rpad_and_clip_mask_axis1, + "awkward_IndexedArray_validity": cuda_compute.awkward_IndexedArray_validity, + "awkward_IndexedArray_reduce_next_nonlocal_nextshifts_fromshifts_64": cuda_compute.awkward_IndexedArray_reduce_next_nonlocal_nextshifts_fromshifts_64, + "awkward_IndexedArray_reduce_next_fix_offsets_64": cuda_compute.awkward_IndexedArray_reduce_next_fix_offsets_64, + "awkward_IndexedArray_ranges_next_64": cuda_compute.awkward_IndexedArray_ranges_next_64, + "awkward_IndexedArray_ranges_carry_next_64": cuda_compute.awkward_IndexedArray_ranges_carry_next_64, + "awkward_IndexedArray_numnull_unique_64": cuda_compute.awkward_IndexedArray_numnull_unique_64, + "awkward_IndexedArray_numnull_parents": cuda_compute.awkward_IndexedArray_numnull_parents, + "awkward_IndexedArray_getitem_nextcarry_outindex": cuda_compute.awkward_IndexedArray_getitem_nextcarry_outindex, + "awkward_IndexedArray_getitem_nextcarry": cuda_compute.awkward_IndexedArray_getitem_nextcarry, + "awkward_IndexedArray_flatten_none2empty": cuda_compute.awkward_IndexedArray_flatten_none2empty, + "awkward_Index_nones_as_index": cuda_compute.awkward_Index_nones_as_index, + "awkward_Content_getitem_next_missing_jagged_getmaskstartstop": cuda_compute.awkward_Content_getitem_next_missing_jagged_getmaskstartstop, + "awkward_ByteMaskedArray_toIndexedOptionArray": cuda_compute.awkward_ByteMaskedArray_toIndexedOptionArray, + "awkward_ByteMaskedArray_reduce_next_nonlocal_nextshifts_64": cuda_compute.awkward_ByteMaskedArray_reduce_next_nonlocal_nextshifts_64, + "awkward_ByteMaskedArray_reduce_next_nonlocal_nextshifts_fromshifts_64": cuda_compute.awkward_ByteMaskedArray_reduce_next_nonlocal_nextshifts_fromshifts_64, + "awkward_ByteMaskedArray_overlay_mask": cuda_compute.awkward_ByteMaskedArray_overlay_mask, + "awkward_ByteMaskedArray_getitem_nextcarry_outindex": cuda_compute.awkward_ByteMaskedArray_getitem_nextcarry_outindex, + "awkward_BitMaskedArray_to_IndexedOptionArray": cuda_compute.awkward_BitMaskedArray_to_IndexedOptionArray, + "awkward_BitMaskedArray_to_ByteMaskedArray": cuda_compute.awkward_BitMaskedArray_to_ByteMaskedArray, }.get(kernel_name) def prepare_reducer(self, reducer: ak._reducers.Reducer) -> ak._reducers.Reducer: diff --git a/src/awkward/_connect/cuda/_compute.py b/src/awkward/_connect/cuda/_compute.py index fe30305386..8fd555ffcb 100644 --- a/src/awkward/_connect/cuda/_compute.py +++ b/src/awkward/_connect/cuda/_compute.py @@ -6,7 +6,10 @@ CountingIterator, DiscardIterator, OpKind, + TransformIterator, + ZipIterator, inclusive_scan, + reduce_into, segmented_reduce, unary_transform, ) @@ -81,7 +84,7 @@ def segmented_sort( # Ensure offsets are int64 as expected by segmented_sort if offsets.dtype != cp.int64: - offsets = offsets.astype(cp.int64) + offsets = offsets.astype(cp.int64, copy=False) num_segments = offsetslength - 1 num_items = int(offsets[-1]) if len(offsets) > 0 else 0 @@ -1429,3 +1432,1958 @@ def fill(counter): num_items=output_size, op=fill, ) + + +# For each element in a regular array of `length` sublists of fixed `size`, +# writes its position within its sublist (0, 1, ..., size-1) into toindex. +# Example: size=3, length=2 → toindex = [0, 1, 2, 0, 1, 2] +def awkward_RegularArray_localindex(toindex, size, length): + if length == 0 or size == 0: + return + + dtype = toindex.dtype.type + + def fill(k): + return dtype(k % size) + + unary_transform( + d_in=CountingIterator(dtype(0)), + d_out=toindex, + op=fill, + num_items=length * size, + ) + + +# Broadcasts each element of fromadvanced across nextsize consecutive slots in toadvanced. +# Example: fromadvanced=[3, 7], nextsize=3 → toadvanced=[3, 3, 3, 7, 7, 7] +def awkward_RegularArray_getitem_next_range_spreadadvanced( + toadvanced, fromadvanced, length, nextsize +): + if length == 0 or nextsize == 0: + return + + dtype = toadvanced.dtype.type + + def fill(k): + return fromadvanced[k // nextsize] + + unary_transform( + d_in=CountingIterator(dtype(0)), + d_out=toadvanced, + op=fill, + num_items=length * nextsize, + ) + + +# Builds the carry index for slicing a RegularArray with a slice (start:stop:step). +# A RegularArray holds `length` sublists of fixed `size` in a flat content array. +# Applying a slice selects `nextsize` elements from each sublist starting at +# `regular_start` with stride `step`. The carry index maps each output position +# back to its source in the flat content: +# tocarry[i*nextsize + j] = i*size + regular_start + j*step +# Example: size=6, length=3, slice 1:6:2 → regular_start=1, step=2, nextsize=3 +# tocarry = [1, 3, 5, 7, 9, 11, 13, 15, 17] +def awkward_RegularArray_getitem_next_range( + tocarry, regular_start, step, length, size, nextsize +): + if length == 0 or nextsize == 0: + return + + dtype = tocarry.dtype.type + + def fill(k): + i = k // nextsize + j = k % nextsize + return dtype(i * size + regular_start + j * step) + + unary_transform( + d_in=CountingIterator(dtype(0)), + d_out=tocarry, + op=fill, + num_items=length * nextsize, + ) + + +# Used when a RegularArray is indexed by two simultaneous advanced indices. +# fromadvanced[i] says which element of fromarray to use for row i, giving the +# intra-row column: col = fromarray[fromadvanced[i]]. +# tocarry[i] = i*size + col (flat content index) +# toadvanced[i] = i (advanced-axis position for broadcast alignment) +# Example: size=4, fromarray=[1,3,0,2], fromadvanced=[0,2,1] +# → tocarry=[1, 4, 11], toadvanced=[0, 1, 2] +def awkward_RegularArray_getitem_next_array_advanced( + tocarry, toadvanced, fromadvanced, fromarray, length, size +): + if length == 0: + return + + dtype = tocarry.dtype.type + + def fill_carry(i): + return dtype(i * size + fromarray[fromadvanced[i]]) + + adtype = toadvanced.dtype.type + + def fill_advanced(i): + return adtype(i) + + unary_transform( + d_in=CountingIterator(dtype(0)), + d_out=tocarry, + op=fill_carry, + num_items=length, + ) + unary_transform( + d_in=CountingIterator(adtype(0)), + d_out=toadvanced, + op=fill_advanced, + num_items=length, + ) + + +# Used when a RegularArray is indexed by a 1-D array (fromarray) of intra-row positions. +# Each of the `length` rows contributes `lenarray` output elements — one per entry in +# fromarray — so the output has shape (length, lenarray) laid out flat. +# tocarry[i*lenarray + j] = i*size + fromarray[j] (flat content index for row i, column fromarray[j]) +# toadvanced[i*lenarray + j] = j (which fromarray entry was used, for broadcast alignment) +# Example: length=2, size=5, fromarray=[1,3,0] +# → tocarry=[1,3,0, 6,8,5], toadvanced=[0,1,2, 0,1,2] +def awkward_RegularArray_getitem_next_array( + tocarry, toadvanced, fromarray, length, lenarray, size +): + if length == 0 or lenarray == 0: + return + + dtype = tocarry.dtype.type + + def fill_both(k): + j = k % lenarray + i = k // lenarray + tocarry[k] = dtype(i * size + fromarray[j]) + toadvanced[k] = dtype(j) + return dtype(0) + + unary_transform( + d_in=CountingIterator(dtype(0)), + d_out=DiscardIterator(), + op=fill_both, + num_items=length * lenarray, + ) + + +# Expands a carry index over a RegularArray of fixed-size sublists. +# For each carry element fromcarry[i] and intra-sublist position j, +# tocarry[i*size + j] = fromcarry[i]*size + j +# Example: fromcarry=[2, 0], size=3 → tocarry=[6, 7, 8, 0, 1, 2] +def awkward_RegularArray_getitem_carry(tocarry, fromcarry, lencarry, size): + if lencarry == 0 or size == 0: + return + + dtype = tocarry.dtype.type + + def fill(k): + i = k // size + j = k % size + return dtype(fromcarry[i] * size + j) + + unary_transform( + d_in=CountingIterator(dtype(0)), + d_out=tocarry, + op=fill, + num_items=lencarry * size, + ) + + +# Checks whether any two subranges of tmpptr (defined by fromstarts/fromstops) are equal. +# toequal[0] reflects the result of the last equal-length pair found +# +# Example: +# tmpptr=[1,2,3,1,2,3,9], fromstarts=[0,3,6], fromstops=[3,6,7], length=3 +# Subranges 0 and 1 are both [1,2,3] → toequal[0] = True +def awkward_NumpyArray_subrange_equal(tmpptr, fromstarts, fromstops, length, toequal): + n = length - 1 + # n<=1 → 0 pairs (triu_indices(n,k=1) is empty for n<2) + if n <= 1: + toequal[0] = cp.bool_(False) + return + lengths = fromstops[:n] - fromstarts[:n] + + # Enumerate all (i < ii) pairs + i_idx, ii_idx = cp.triu_indices(n, k=1) + pair_lengths_equal = lengths[i_idx] == lengths[ii_idx] + + has_valid = cp.any(pair_lengths_equal) # 0-d GPU bool + + # Last equal-length pair: argmax on the reversed mask gives its distance from the end. + # When all-False, argmax returns 0 and last_pos = num_pairs-1; has_valid corrects the result. + num_pairs = len(i_idx) + last_pos = (num_pairs - 1) - cp.argmax(pair_lengths_equal[::-1]) + + si = fromstarts[i_idx[last_pos]] # 0-d GPU int + sii = fromstarts[ii_idx[last_pos]] + li = lengths[i_idx[last_pos]] + + # Use len(tmpptr) as the arange upper bound + N = len(tmpptr) + j = cp.arange(N, dtype=fromstarts.dtype) + in_range = j < li # GPU broadcast + safe_j = cp.where( + in_range, j, fromstarts.dtype.type(0) + ) # clamp out-of-range positions to 0 + differs = in_range & (tmpptr[si + safe_j] != tmpptr[sii + safe_j]) + + toequal[:1] = (has_valid & ~cp.any(differs)).reshape(1) # GPU→GPU, no sync + + +# Pads each variable-length sublist to a fixed target length, producing a flat output array. +# +# Layout: +# fromptr - flat source data +# fromoffsets - offsetslength boundary values; sublist k spans fromptr[fromoffsets[k]:fromoffsets[k+1]] +# toptr - flat output of size num_sublists * target +# +# For each output position q = k*target + j (k = sublist index, j = intra-sublist position): +# if j < count[k]: toptr[q] = fromptr[fromoffsets[k] + j] (copy) +# else: toptr[q] = 0 (zero-fill) +# +# Example (target=3): +# fromptr = [10, 20, 30, 40, 50] +# fromoffsets = [0, 2, 3, 5] → sublists [10,20], [30], [40,50] +# toptr = [10, 20, 0, 30, 0, 0, 40, 50, 0] +def awkward_NumpyArray_pad_zero_to_length( + fromptr, fromoffsets, offsetslength, target, toptr +): + num_sublists = offsetslength - 1 + if num_sublists <= 0 or target == 0: + return + + dtype = toptr.dtype.type + + def fill(q): + k = q // target + j = q % target + start = fromoffsets[k] + count = fromoffsets[k + 1] - start + if j < count: + return dtype(fromptr[start + j]) + return dtype(0) + + unary_transform( + d_in=CountingIterator(dtype(0)), + d_out=toptr, + op=fill, + num_items=num_sublists * target, + ) + + +# Same as awkward_NumpyArray_subrange_equal but for bool arrays. +# tmpptr is bool* (C++) / cupy.bool_ (Python), so values are always 0 or 1; +def awkward_NumpyArray_subrange_equal_bool( + tmpptr, fromstarts, fromstops, length, toequal +): + awkward_NumpyArray_subrange_equal(tmpptr, fromstarts, fromstops, length, toequal) + + +# Projects a jagged array through a mask: copies (starts_in[i], stops_in[i]) to the +# next output slot only for entries where index[i] >= 0 (i.e. not masked out). +# Example: +# index = [ 0, -1, 2, -1, 4] (entries 1 and 3 are masked) +# starts_in = [10, 20, 30, 40, 50] +# stops_in = [12, 25, 33, 44, 51] +# length = 5 +# +# starts_out = [10, 30, 50] (slots for entries 0, 2, 4) +# stops_out = [12, 33, 51] +def awkward_MaskedArray_getitem_next_jagged_project( + index, starts_in, stops_in, starts_out, stops_out, length +): + if length == 0: + return + mask = index[:length] >= 0 + indices = cp.where(mask)[0] + n = len(indices) + starts_out[:n] = starts_in[indices] + stops_out[:n] = stops_in[indices] + + +# Builds a gather index to pad/clip a RegularArray from `size` to `target` elements per row. +# Output has length*target entries. For row i and slot j (q = i*target + j): +# j < min(target, size) → i*size + j (copy from source) +# j >= min(target, size) → -1 (pad with missing) +# When target <= size every slot maps to source (pure clip, no -1s). +# When target > size the last (target - size) slots per row are -1 (pure pad). +# +# Example size=3, target=5, length=2: toindex = [0, 1, 2, -1, -1, 3, 4, 5, -1, -1] +# Example size=5, target=3, length=2: toindex = [0, 1, 2, 5, 6, 7] +def awkward_RegularArray_rpad_and_clip_axis1(toindex, target, size, length): + if length == 0 or target == 0: + return + shorter = min(target, size) + dtype = toindex.dtype.type + + def fill(q): + i = q // target + j = q % target + if j < shorter: + return dtype(i * size + j) + return dtype(-1) + + unary_transform( + d_in=CountingIterator(dtype(0)), + d_out=toindex, + op=fill, + num_items=length * target, + ) + + +# IS NOT USED (keep for archive). Takes too long to check for error cases. +# Normalizes indices for a regular array of size `size`: +# adds size to negative values, then checks bounds. +# Raises ValueError immediately if any index is still out of [0, size). +# +# Example (size=5): fromarray=[-1, 2, 0] → toarray=[4, 2, 0] +def awkward_RegularArray_getitem_next_array_regularize( + toarray, fromarray, lenarray, size +): + if lenarray == 0: + return + dtype = toarray.dtype.type + + def _regularize(v): + return dtype(v + size) if v < 0 else dtype(v) + + unary_transform( + d_in=fromarray[:lenarray], + d_out=toarray[:lenarray], + op=_regularize, + num_items=lenarray, + ) + if cp.any((toarray[:lenarray] < 0) | (toarray[:lenarray] >= size)): + raise ValueError( + "index out of range in compiled CUDA code (awkward_RegularArray_getitem_next_array_regularize)" + ) + + +# Builds a gather index for selecting one element per row from a RegularArray. +# A RegularArray stores `length` rows of exactly `size` elements in a flat buffer, +# so row i occupies flat positions [i*size, (i+1)*size). +# `at` is the column index to select (negative values wrap: at += size). +# tocarry[i] = i*size + at, which is then used to gather the chosen column from the flat data. +# Raises ValueError if at is out of [-size, size). +# +# Example size=5, at=2, length=4: tocarry = [2, 7, 12, 17] +# Example size=5, at=-1, length=4: tocarry = [4, 9, 14, 19] (last element of each row) +def awkward_RegularArray_getitem_next_at(tocarry, at, length, size): + regular_at = int(at) + if regular_at < 0: + regular_at += size + if regular_at < 0 or regular_at >= size: + raise ValueError( + "index out of range in compiled CUDA code (awkward_RegularArray_getitem_next_at)" + ) + if length == 0: + return + dtype = tocarry.dtype.type + + def _index(q): + return dtype(q * size + regular_at) + + unary_transform( + d_in=CountingIterator(dtype(0)), + d_out=tocarry[:length], + op=_index, + num_items=length, + ) + + +# IS NOT USED (keep for archive). Takes too long to check for error cases. +# Checks that all sublists have equal length and writes that length to size[0]. +# Raises ValueError immediately if offsets decrease or sublists have different lengths. +# +# Example: fromoffsets=[0, 2, 4, 6] → size[0]=2 +def awkward_ListOffsetArray_toRegularArray(size, fromoffsets, offsetslength): + if offsetslength <= 1: + size[:1] = cp.zeros(1, dtype=size.dtype) + return + n = offsetslength - 1 + counts = fromoffsets[1:offsetslength] - fromoffsets[:n] + if cp.any(counts < 0): + raise ValueError( + "offsets must be monotonically increasing in compiled CUDA code (awkward_ListOffsetArray_toRegularArray)" + ) + if not cp.all(counts == counts[0]): + raise ValueError( + "cannot convert to RegularArray because subarray lengths are not regular in compiled CUDA code (awkward_ListOffsetArray_toRegularArray)" + ) + size[:1] = counts[:1].astype(size.dtype, copy=False) # GPU→GPU + + +# Pads each sublist to at least target length (longer sublists kept as-is). +# Writes new sublist boundaries to tooffsets and total output length to tolength[0]. +# +# Example (target=3): fromoffsets=[0,1,5,7] → tooffsets=[0,3,7,10], tolength[0]=10 +def awkward_ListOffsetArray_rpad_length_axis1( + tooffsets, fromoffsets, fromlength, target, tolength +): + if fromlength == 0: + tooffsets[:1] = cp.zeros(1, dtype=tooffsets.dtype) + tolength[:1] = cp.zeros(1, dtype=tolength.dtype) + return + counts = fromoffsets[1 : fromlength + 1] - fromoffsets[:fromlength] + padded = cp.maximum(counts, target) + tooffsets[:1] = cp.zeros(1, dtype=tooffsets.dtype) + inclusive_scan( + d_in=padded, + d_out=tooffsets[1 : fromlength + 1], + op=OpKind.PLUS, + init_value=None, + num_items=fromlength, + ) + tolength[:1] = tooffsets[fromlength : fromlength + 1].astype( + tolength.dtype, copy=False + ) # GPU→GPU, no sync + + +## NOT USED (revisit later) +# Builds a flat gather index for padding each sublist to at least `target` elements. +# The output size per row is max(len_i, target): longer sublists are kept in full, +# shorter ones are extended with -1 (missing). toindex is sized to sum(max(len_i, target)). +# For output element q in row i at intra-row position j: +# j < len_i → fromoffsets[i] + j (copy actual element) +# j >= len_i → -1 (pad with missing) +# +# Example (target=3): fromoffsets=[0,1,5,7], fromlength=3 +# row lengths: [1, 4, 2], padded: [3, 4, 3] +# toindex = [0,-1,-1, 1,2,3,4, 5,6,-1] +def awkward_ListOffsetArray_rpad_axis1(toindex, fromoffsets, fromlength, target): + if fromlength == 0 or len(toindex) == 0: + return + counts = fromoffsets[1 : fromlength + 1] - fromoffsets[:fromlength] + starts = cp.empty(fromlength + 1, dtype=fromoffsets.dtype) + padded = cp.maximum(counts, target).astype(starts.dtype, copy=False) + starts[0] = 0 + inclusive_scan( + d_in=padded, + d_out=starts[1 : fromlength + 1], + op=OpKind.PLUS, + init_value=None, + num_items=fromlength, + ) + dtype = toindex.dtype.type + + # For each flat output index q, binary-searches starts to find which row i that position belongs to. + # Computes the intra-row offset j = q - starts[i], and returns + # either the source index (fromoffsets[i] + j) if within the original sublist length, + # or -1 if it's a padding slot. + def fill(q): + lo = 0 + hi = fromlength - 1 + while lo < hi: + mid = (lo + hi + 1) >> 1 + if starts[mid] <= q: + lo = mid + else: + hi = mid - 1 + i = lo + j = q - starts[i] + if j < counts[i]: + return dtype(fromoffsets[i] + j) + return dtype(-1) + + unary_transform( + d_in=CountingIterator(dtype(0)), + d_out=toindex, + op=fill, + num_items=len(toindex), + ) + + +# Builds a flat gather index for padding/clipping each sublist to exactly `target` elements. +# Unlike rpad_axis1 the output size is always length*target (rows are never extended beyond target). +# For output element q in row i at intra-row slot j = q % target: +# j < min(target, len_i) → fromoffsets[i] + j (copy actual element) +# j >= min(target, len_i) → -1 (pad with missing) +# +# Example (target=3): fromoffsets=[0,1,5,7], length=3 +# toindex = [0,-1,-1, 1,2,3, 5,6,-1] +def awkward_ListOffsetArray_rpad_and_clip_axis1(toindex, fromoffsets, length, target): + if length == 0 or target == 0: + return + dtype = toindex.dtype.type + + def fill(q): + i = q // target + j = q % target + rangeval = fromoffsets[i + 1] - fromoffsets[i] + shorter = rangeval if rangeval < target else target + if j < shorter: + return dtype(fromoffsets[i] + j) + return dtype(-1) + + unary_transform( + d_in=CountingIterator(dtype(0)), + d_out=toindex, + op=fill, + num_items=length * target, + ) + + +# Copies offsets[0:length+1] into offsetscopy and finds the maximum sublist length. +# maxcount[0] = max(offsets[i+1] - offsets[i] for i in range(length)), or 0 if length==0. +# +# Example: offsets=[0,3,3,7,8], length=4 +# offsetscopy = [0, 3, 3, 7, 8] +# counts = [3, 0, 4, 1] → maxcount = [4] +def awkward_ListOffsetArray_reduce_nonlocal_maxcount_offsetscopy_64( + maxcount, offsetscopy, offsets, length +): + offsetscopy[: length + 1] = offsets[: length + 1] + if length > 0: + counts = offsets[1 : length + 1] - offsets[:length] + maxcount[:1] = cp.max(counts) + else: + maxcount[:1] = cp.zeros(1, dtype=maxcount.dtype) + + +# Writes the argsort of fromindex into tocarry. +# Used to reorder elements into the sorted order needed for nonlocal reductions. +# +# Example: fromindex=[2,0,3,1], length=4 +# tocarry = [1, 3, 0, 2] (position of 0, 1, 2, 3 in fromindex) +def awkward_ListOffsetArray_local_preparenext_64(tocarry, fromindex, length): + if length == 0: + return + tocarry[:length] = cp.argsort(fromindex[:length]) + + +## NOT USED (revisit later) +# Gathers inneroffsets at positions given by outeroffsets: +# tooffsets[i] = inneroffsets[outeroffsets[i]] for i in [0, outeroffsetslen). +# Used when flattening a nested ListOffsetArray: the outer offsets index into +# the inner offset array to produce the combined flat offsets. +# +# Example: outeroffsets=[0,2,3], inneroffsets=[0,4,7,9,11] +# tooffsets = [inneroffsets[0], inneroffsets[2], inneroffsets[3]] = [0, 9, 11] +def awkward_ListOffsetArray_flatten_offsets( + tooffsets, outeroffsets, outeroffsetslen, inneroffsets +): + if outeroffsetslen == 0: + return + tooffsets[:outeroffsetslen] = inneroffsets[outeroffsets[:outeroffsetslen]] + + +## NOT USED (revisit later) +# Rewrites fromoffsets to exclude None entries counted by noneindexes. +# tooffsets[i] = fromoffsets[i] - (number of nones in noneindexes[0:fromoffsets[i]]) +# which equals the number of non-None elements before position fromoffsets[i]. +# +# Computed via a single inclusive scan over the None mask, then indexed at each fromoffsets value. +# +# Example: noneindexes=[-1, 0, -1, 0, 0, -1, 0], fromoffsets=[0,2,3,5,7], length_offsets=5 +# none mask: [1, 0, 1, 0, 0, 1, 0] +# cumulative_nones: [0, 1, 1, 2, 2, 2, 3, 3] +# tooffsets = fromoffsets - cumulative_nones[fromoffsets] = [0,2,3,5,7] - [0,1,2,2,3] = [0,1,1,3,4] +def awkward_ListOffsetArray_drop_none_indexes( + tooffsets, noneindexes, fromoffsets, length_offsets, length_indexes +): + if length_offsets == 0: + return + # cumulative_nones[k] = number of nones in noneindexes[0:k] + cumulative_nones = cp.empty(length_indexes + 1, dtype=tooffsets.dtype) + cumulative_nones[0] = 0 + if length_indexes > 0: + none_mask = (noneindexes[:length_indexes] < 0).astype( + cumulative_nones.dtype, copy=False + ) + inclusive_scan( + d_in=none_mask, + d_out=cumulative_nones[1 : length_indexes + 1], + op=OpKind.PLUS, + init_value=None, + num_items=length_indexes, + ) + idx = fromoffsets[:length_offsets] + tooffsets[:length_offsets] = (idx - cumulative_nones[idx]).astype( + tooffsets.dtype, copy=False + ) + + +## NOT USED (revisit later) +# Validates that each non-empty row satisfies 0 <= starts[i] <= stops[i] <= lencontent. +# Empty rows (starts[i] == stops[i]) are skipped. +# Raises ValueError on the first failing row +# +# Example: starts=[0,2,5], stops=[2,5,8], lencontent=8 → no error +# Example: starts=[0,3], stops=[2,1], lencontent=8 → raises "start[i] > stop[i]" +def awkward_ListArray_validity(starts, stops, length, lencontent): + if length == 0: + return + s = starts[:length] + e = stops[:length] + nonempty = s != e + # Fuse all three condition checks into one cp.any() so the happy path + # (no errors, the common case) only needs a single GPU→CPU sync instead of three. + if not cp.any(nonempty & ((s > e) | (s < 0) | (e > lencontent))): + return + # Error path: identify which condition failed and find its first index. + mask = nonempty & (s > e) + if cp.any(mask): + raise ValueError(f"start[i] > stop[i] at i={int(cp.argmax(mask))}") + mask = nonempty & (s < 0) + if cp.any(mask): + raise ValueError(f"start[i] < 0 at i={int(cp.argmax(mask))}") + mask = nonempty & (e > lencontent) + raise ValueError(f"stop[i] > len(content) at i={int(cp.argmax(mask))}") + + +## NOT USED (revisit later) +# Pads each sublist to at least `target` elements, writing -1 for padding slots. +# Also writes tostarts/tostops describing the new (padded) layout. +# Unlike the ListOffsetArray variant, starts/stops are separate arrays rather than a single offsets array. +# +# For each row i with rangeval = stops[i] - starts[i]: +# tostarts[i] = cumulative offset of row i in the output +# tostops[i] = tostarts[i] + max(rangeval, target) +# toindex[tostarts[i]+j] = starts[i]+j for j < rangeval (copy from source) +# toindex[tostarts[i]+j] = -1 for j >= rangeval (padding) +# +# Example: starts=[0,3,3], stops=[3,3,5], target=4 +# tostarts=[0,4,8], tostops=[4,8,9] (row 1 is empty → padded to 4; row 2 has 2 elems → stays 4 max(2,4)=4... wait) +# Actually: max(3,4)=4, max(0,4)=4, max(2,4)=4 → tostarts=[0,4,8], tostops=[4,8,12] +# toindex = [0,1,2,-1, -1,-1,-1,-1, 3,4,-1,-1] +def awkward_ListArray_rpad_axis1( + toindex, fromstarts, fromstops, tostarts, tostops, target, length +): + if length == 0: + return + counts = fromstops[:length] - fromstarts[:length] + row_starts = cp.empty(length + 1, dtype=tostarts.dtype) + row_starts[0] = 0 + inclusive_scan( + d_in=cp.maximum(counts, target).astype(row_starts.dtype, copy=False), + d_out=row_starts[1 : length + 1], + op=OpKind.PLUS, + init_value=None, + num_items=length, + ) + tostarts[:length] = row_starts[:length] + tostops[:length] = row_starts[1 : length + 1] + total = int(row_starts[length]) + if total == 0: + return + dtype = toindex.dtype.type + + def fill(q): + lo = 0 + hi = length - 1 + while lo < hi: + mid = (lo + hi + 1) >> 1 + if row_starts[mid] <= q: + lo = mid + else: + hi = mid - 1 + i = lo + j = q - row_starts[i] + if j < counts[i]: + return dtype(fromstarts[i] + j) + return dtype(-1) + + unary_transform( + d_in=CountingIterator(dtype(0)), + d_out=toindex[:total], + op=fill, + num_items=total, + ) + + +# Computes the total output length for rpad_axis1 on a ListArray: +# tomin[0] = sum(max(target, stops[i] - starts[i])) for i in [0, lenstarts). +# +# Example: starts=[0,3,3], stops=[3,3,5], target=4 +# lengths=[3,0,2] → max with 4 → [4,4,4] → sum=12 → tomin=[12] +def awkward_ListArray_rpad_and_clip_length_axis1( + tomin, fromstarts, fromstops, target, lenstarts +): + if lenstarts == 0: + tomin[:1] = 0 + return + counts = fromstops[:lenstarts] - fromstarts[:lenstarts] + tomin[:1] = cp.sum(cp.maximum(counts, target)).astype(tomin.dtype, copy=False) + + +# Computes the minimum sublist length across all rows. +# tomin[0] = min(stops[i] - starts[i]) for i in [0, lenstarts). +# +# Example: starts=[0,3,5], stops=[3,5,6] +# lengths=[3,2,1] → tomin=[1] +def awkward_ListArray_min_range(tomin, fromstarts, fromstops, lenstarts): + if lenstarts == 0: + return + + # Single-pass min(stops[i] - starts[i]) via ZipIterator + TransformIterator: + def diff(pair): + return pair.field_0 - pair.field_1 + + dtype = fromstops.dtype + zipped = ZipIterator(fromstops[:lenstarts], fromstarts[:lenstarts]) + lengths_iter = TransformIterator(zipped, diff) + # should account for floats with `np.finfo` too? + h_init = np.array([np.iinfo(dtype).max], dtype=dtype) + if tomin.dtype == dtype: + reduce_into( + d_in=lengths_iter, + d_out=tomin[:1], + op=OpKind.MINIMUM, + num_items=lenstarts, + h_init=h_init, + ) + else: + result = cp.empty(1, dtype=dtype) + reduce_into( + d_in=lengths_iter, + d_out=result, + op=OpKind.MINIMUM, + num_items=lenstarts, + h_init=h_init, + ) + tomin[:1] = result.astype(tomin.dtype, copy=False) + + +## NOT USED (revisit later) +# Broadcasts fromadvanced[i] across all positions in row i's output range [fromoffsets[i], fromoffsets[i+1]). +# toadvanced[fromoffsets[i] + j] = fromadvanced[i] for j in [0, fromoffsets[i+1] - fromoffsets[i]). +# +# Example: fromadvanced=[7,8,9], fromoffsets=[0,2,2,3] +# toadvanced = [7,7, 9] (row 1 is empty, row 2 has 1 element) +def awkward_ListArray_getitem_next_range_spreadadvanced( + toadvanced, fromadvanced, fromoffsets, lenstarts +): + if lenstarts == 0: + return + total = int(fromoffsets[lenstarts]) + if total == 0: + return + dtype = toadvanced.dtype.type + + def lookup(q): + lo = 0 + hi = lenstarts - 1 + while lo < hi: + mid = (lo + hi + 1) >> 1 + if fromoffsets[mid] <= q: + lo = mid + else: + hi = mid - 1 + return dtype(fromadvanced[lo]) + + unary_transform( + d_in=CountingIterator(dtype(0)), + d_out=toadvanced[:total], + op=lookup, + num_items=total, + ) + + +# Computes the total number of elements across all rows: fromoffsets[lenstarts] - fromoffsets[0]. +# +# Example: fromoffsets=[0,3,3,5] → total=[5] +def awkward_ListArray_getitem_next_range_counts(total, fromoffsets, lenstarts): + if lenstarts == 0: + total[:1] = 0 + return + total[:1] = fromoffsets[lenstarts].astype(total.dtype, copy=False) - fromoffsets[ + 0 + ].astype(total.dtype, copy=False) + + +## NOT USED (revisit later) +# For each row i, selects the element at position `at` within that row. +# Negative `at` wraps relative to each row's own length: regular_at = at + (stops[i] - starts[i]). +# tocarry[i] = starts[i] + regular_at. +# Raises ValueError if any regular_at is out of [0, length_i). +# +# Example: starts=[0,3,5], stops=[3,5,6], at=-1 +# lengths=[3,2,1], regular_at=[2,1,0] → tocarry=[2,4,5] +def awkward_ListArray_getitem_next_at(tocarry, fromstarts, fromstops, lenstarts, at): + if lenstarts == 0: + return + dtype = tocarry.dtype.type + + def compute(i): + length = fromstops[i] - fromstarts[i] + reg = length + at if at < 0 else at + if reg < 0 or reg >= length: + return dtype(-1) + return dtype(fromstarts[i] + reg) + + unary_transform( + d_in=CountingIterator(dtype(0)), + d_out=tocarry[:lenstarts], + op=compute, + num_items=lenstarts, + ) + if cp.any(tocarry[:lenstarts] < 0): + i = int(cp.argmax(tocarry[:lenstarts] < 0)) + raise ValueError(f"index out of range at i={i}, at={at}") + + +# kSliceNone sentinel value (matches C++ kMaxInt64 + 1 = 2**63 - 1) +# also used in raw CUDA (at src/awkward/_connect/cuda/cuda_kernels/cuda_common.cu#L60) +_kSliceNone = 9223372036854775807 + + +# an analogy of what is used in raw cuda kernels (awkward_regularize_rangeslice() inside cuda_common.cu) +def _make_count_row(fromstarts, fromstops, start, stop, step, dtype): + def count_row(i): + length = fromstops[i] - fromstarts[i] + rs = start + re = stop + if step > 0: + if rs == _kSliceNone: + rs = 0 + elif rs < 0: + rs = rs + length + if rs < 0: + rs = 0 + if rs > length: + rs = length + if re == _kSliceNone: + re = length + elif re < 0: + re = re + length + if re < 0: + re = 0 + if re > length: + re = length + if re < rs: + re = rs + diff = re - rs + if diff <= 0: + return dtype(0) + return dtype((diff + step - 1) // step) + else: + if rs == _kSliceNone: + rs = length - 1 + elif rs < 0: + rs = rs + length + if rs < -1: + rs = -1 + if rs > length - 1: + rs = length - 1 + if re == _kSliceNone: + re = -1 + elif re < 0: + re = re + length + if re < -1: + re = -1 + if re > length - 1: + re = length - 1 + if re > rs: + re = rs + diff = rs - re + if diff <= 0: + return dtype(0) + neg_step = -step + return dtype((diff + neg_step - 1) // neg_step) + + return count_row + + +# Computes total elements selected by slice(start, stop, step) across all rows. +# carrylength[0] = sum over i of the count of positions selected in row i of length +# fromstops[i] - fromstarts[i] by the range slice. +# +# Example: fromstarts=[0,3,5], fromstops=[3,5,6], start=kSliceNone, stop=kSliceNone, step=1 +# lengths=[3,2,1], all rows selected fully → carrylength=[6] +def awkward_ListArray_getitem_next_range_carrylength( + carrylength, fromstarts, fromstops, lenstarts, start, stop, step +): + if lenstarts == 0: + carrylength[:1] = 0 + return + + # create an int64 type specifically, so that _make_count_row() doesn't break + counts = cp.empty(lenstarts, dtype=cp.int64) + unary_transform( + d_in=CountingIterator(fromstarts.dtype.type(0)), + d_out=counts, + op=_make_count_row(fromstarts, fromstops, start, stop, step, cp.int64), + num_items=lenstarts, + ) + reduce_into( + d_in=counts, + d_out=carrylength[:1], + op=OpKind.PLUS, + num_items=lenstarts, + h_init=np.array([0], dtype=counts.dtype), + ) + + +## NOT USED (revisit later) (1.76x slower than raw CUDA) +# Applies a range slice to a ListArray, writing offsets and carry indices. +# tooffsets[i] is the start of row i in the flat carry output. +# tocarry[tooffsets[i] + j] = fromstarts[i] + regular_start_i + j*step for j in [0, count_i). +# +# Example: fromstarts=[0,3,5], fromstops=[3,5,6], start=1, stop=kSliceNone, step=1 +# row 0: length=3, rs=1, re=3 → count=2 → carry [1,2] +# row 1: length=2, rs=1, re=2 → count=1 → carry [4] +# row 2: length=1, rs=1, re=1 → count=0 +# tooffsets=[0,2,3,3], tocarry=[1,2,4] +def awkward_ListArray_getitem_next_range( + tooffsets, tocarry, fromstarts, fromstops, lenstarts, start, stop, step +): + if lenstarts == 0: + tooffsets[:1] = 0 + return + # create an int64 type specifically, so that _make_count_row() doesn't break + counts = cp.empty(lenstarts, dtype=cp.int64) + unary_transform( + d_in=CountingIterator(fromstarts.dtype.type(0)), + d_out=counts, + op=_make_count_row(fromstarts, fromstops, start, stop, step, cp.int64), + num_items=lenstarts, + ) + + offsets = cp.empty(lenstarts + 1, dtype=tooffsets.dtype) + offsets[0] = 0 + inclusive_scan( + d_in=counts, + d_out=offsets[1:], + op=OpKind.PLUS, + init_value=None, + num_items=lenstarts, + ) + tooffsets[: lenstarts + 1] = offsets + + total = int(offsets[lenstarts]) + if total == 0: + return + + dtype = tocarry.dtype.type + + def fill_carry(q): + lo = 0 + hi = lenstarts - 1 + while lo < hi: + mid = (lo + hi + 1) >> 1 + if offsets[mid] <= q: + lo = mid + else: + hi = mid - 1 + i = lo + j = q - offsets[i] + length = fromstops[i] - fromstarts[i] + rs = start + if step > 0: + if rs == _kSliceNone: + rs = 0 + elif rs < 0: + rs = rs + length + if rs < 0: + rs = 0 + if rs > length: + rs = length + else: + if rs == _kSliceNone: + rs = length - 1 + elif rs < 0: + rs = rs + length + if rs < -1: + rs = -1 + if rs > length - 1: + rs = length - 1 + return dtype(fromstarts[i] + rs + j * step) + + unary_transform( + d_in=CountingIterator(dtype(0)), + d_out=tocarry[:total], + op=fill_carry, + num_items=total, + ) + + +## NOT USED (revisit later) (error checks take too much time) +# Selects one element per row using two simultaneous advanced indices. +# fromadvanced[i] selects which index in fromarray to use for row i. +# tocarry[i] = fromstarts[i] + fromarray[fromadvanced[i]] (content index) +# toadvanced[i] = i (output advanced position) +# Raises ValueError if stops < starts, stops > lencontent, or index out of range. +# +# Example: fromstarts=[0,3], fromstops=[3,5], fromarray=[1,2,0], fromadvanced=[2,0] +# row 0: reg_at=fromarray[2]=0 → tocarry[0]=0 +# row 1: reg_at=fromarray[0]=1 → tocarry[1]=4 +# toadvanced=[0,1] +def awkward_ListArray_getitem_next_array_advanced( + tocarry, + toadvanced, + fromstarts, + fromstops, + fromarray, + fromadvanced, + lenstarts, + lencontent, +): + if lenstarts == 0: + return + + starts = fromstarts[:lenstarts] + stops = fromstops[:lenstarts] + if cp.any(stops < starts): + raise ValueError("stops[i] < starts[i]") + nonempty = starts != stops + if cp.any(nonempty & (stops > lencontent)): + raise ValueError("stops[i] > len(content)") + + dtype = tocarry.dtype.type + adtype = toadvanced.dtype.type + + def fill(i): + length = fromstops[i] - fromstarts[i] + reg_at = fromarray[fromadvanced[i]] + if reg_at < 0: + reg_at = reg_at + length + if reg_at < 0 or reg_at >= length: + tocarry[i] = dtype(-1) + else: + tocarry[i] = dtype(fromstarts[i] + reg_at) + toadvanced[i] = adtype(i) + return dtype(0) + + unary_transform( + d_in=CountingIterator(dtype(0)), + d_out=DiscardIterator(), + op=fill, + num_items=lenstarts, + ) + if cp.any(tocarry[:lenstarts] < 0): + raise ValueError("index out of range") + + +## NOT USED (revisit later) (error checks take too much time) +# Indexes each row of a ListArray by a 1-D array, producing lenstarts*lenarray outputs. +# tocarry[i*lenarray + j] = fromstarts[i] + fromarray[j] (content index) +# toadvanced[i*lenarray + j] = j (which fromarray entry was used) +# Raises ValueError if stops < starts, stops > lencontent, or index out of range. +# +# Example: fromstarts=[0,3], fromstops=[3,5], fromarray=[1,0], lenstarts=2, lenarray=2 +# tocarry=[1,0, 4,3], toadvanced=[0,1, 0,1] +def awkward_ListArray_getitem_next_array( + tocarry, + toadvanced, + fromstarts, + fromstops, + fromarray, + lenstarts, + lenarray, + lencontent, +): + if lenstarts == 0 or lenarray == 0: + return + + starts = fromstarts[:lenstarts] + stops = fromstops[:lenstarts] + if cp.any(stops < starts): + raise ValueError("stops[i] < starts[i]") + nonempty = starts != stops + if cp.any(nonempty & (stops > lencontent)): + raise ValueError("stops[i] > len(content)") + + dtype = tocarry.dtype.type + adtype = toadvanced.dtype.type + + def fill(k): + i = k // lenarray + j = k % lenarray + length = fromstops[i] - fromstarts[i] + reg_at = fromarray[j] + if reg_at < 0: + reg_at = reg_at + length + if reg_at < 0 or reg_at >= length: + tocarry[k] = dtype(-1) + else: + tocarry[k] = dtype(fromstarts[i] + reg_at) + toadvanced[k] = adtype(j) + return dtype(0) + + unary_transform( + d_in=CountingIterator(dtype(0)), + d_out=DiscardIterator(), + op=fill, + num_items=lenstarts * lenarray, + ) + if cp.any(tocarry[: lenstarts * lenarray] < 0): + raise ValueError("index out of range") + + +## NOT USED (revisit later) (error checks take too much time) +# Expands a ListArray to accommodate jagged indexing, producing length*jaggedsize outputs. +# Each row i must have exactly jaggedsize elements. +# multistarts[i*jaggedsize + j] = singleoffsets[j] +# multistops[i*jaggedsize + j] = singleoffsets[j+1] +# tocarry[i*jaggedsize + j] = fromstarts[i] + j +# Raises ValueError if stops < starts or row size != jaggedsize. +# +# Example: fromstarts=[0,2], fromstops=[2,4], singleoffsets=[0,3,5], jaggedsize=2, length=2 +# multistarts=[0,3, 0,3], multistops=[3,5, 3,5], tocarry=[0,1, 2,3] +def awkward_ListArray_getitem_jagged_expand( + multistarts, + multistops, + singleoffsets, + tocarry, + fromstarts, + fromstops, + jaggedsize, + length, +): + if length == 0 or jaggedsize == 0: + return + + starts = fromstarts[:length] + stops = fromstops[:length] + if cp.any(stops < starts): + raise ValueError("stops[i] < starts[i]") + if cp.any((stops - starts) != jaggedsize): + raise ValueError("cannot fit jagged slice into nested list") + + dtype_ms = multistarts.dtype.type + dtype_me = multistops.dtype.type + dtype_c = tocarry.dtype.type + + def fill(k): + i = k // jaggedsize + j = k % jaggedsize + multistarts[k] = dtype_ms(singleoffsets[j]) + multistops[k] = dtype_me(singleoffsets[j + 1]) + tocarry[k] = dtype_c(fromstarts[i] + j) + return dtype_c(0) + + unary_transform( + d_in=CountingIterator(dtype_c(0)), + d_out=DiscardIterator(), + op=fill, + num_items=length * jaggedsize, + ) + + +# Copies fromstarts/fromstops into tostarts/tostops at the given offsets, adding base. +# tostarts[tostartsoffset + i] = fromstarts[i] + base +# tostops[tostopsoffset + i] = fromstops[i] + base +# +# Example: fromstarts=[0,3], fromstops=[3,5], tostartsoffset=2, tostopsoffset=2, base=10 +# tostarts[2:4] = [10, 13], tostops[2:4] = [13, 15] +def awkward_ListArray_fill( + tostarts, + tostartsoffset, + tostops, + tostopsoffset, + fromstarts, + fromstops, + length, + base, +): + if length == 0: + return + # these two calls can be fused into one with unary_transform, but the performance is the same + cp.add( + fromstarts[:length], + base, + out=tostarts[tostartsoffset : tostartsoffset + length], + ) + cp.add( + fromstops[:length], base, out=tostops[tostopsoffset : tostopsoffset + length] + ) + + +# Builds an output index for rpad_and_clip on an IndexedOptionArray at axis=1. +# frommask[i] != 0 means the position is masked (option-None). +# toindex[i] = -1 if masked, else the 0-based position among non-masked elements up to i. +# +# Example: frommask=[0,1,0,0,1], length=5 +# valid counts: [1,1,2,3,3] → toindex=[0,-1,1,2,-1] +def awkward_IndexedOptionArray_rpad_and_clip_mask_axis1(toindex, frommask, length): + if length == 0: + return + + # valid[i]=1 where not masked, 0 where masked — reused for both scan and output. + valid = (frommask[:length] == 0).astype(toindex.dtype, copy=False) + inclusive_scan( + d_in=valid, + d_out=toindex[:length], + op=OpKind.PLUS, + init_value=None, + num_items=length, + ) + # Branchless in-place: valid=1 → toindex[i]-1, valid=0 → -1. No temporaries. + toindex[:length] *= valid + toindex[:length] -= 1 + + +# Checks that every entry in index is a valid content index. +# If not isoption: raises ValueError when index[i] < 0. +# Always raises ValueError when index[i] >= lencontent. +# +# Example: index=[0,2,1], length=3, lencontent=3, isoption=False → no error +# index=[0,3,1], length=3, lencontent=3, isoption=False → error at i=1 +def awkward_IndexedArray_validity(index, length, lencontent, isoption): + if length == 0: + return + idx = index[:length] + if isoption: + if cp.max(idx) >= lencontent: + raise ValueError( + "index[i] >= len(content) in compiled CUDA code (awkward_IndexedArray_validity)" + ) + else: + # Zero-copy view as unsigned: negative signed values bitcast to large + # unsigned values, so one max catches both "x < 0" and "x >= lencontent" + # with a single kernel instead of a min + max pair. + udtype = cp.dtype(f"u{idx.dtype.itemsize}") + if int(cp.max(idx.view(udtype))) >= lencontent: + if cp.any(idx < 0): + raise ValueError( + "index[i] < 0 in compiled CUDA code (awkward_IndexedArray_validity)" + ) + raise ValueError( + "index[i] >= len(content) in compiled CUDA code (awkward_IndexedArray_validity)" + ) + + +# Computes nextshifts for a non-local indexed reduction that starts from existing shifts. +# For each valid position (index[i] >= 0) at output slot k: +# nextshifts[k] = shifts[i] + (number of null positions before i) +# Null positions (index[i] < 0) contribute to the null count but produce no output slot. +# +# Example: index=[0,-1,2,-1,3], shifts=[0,0,0,0,0], length=5 +# valid at i=0,2,4 → k=0,1,2; nullsum before each = 0,1,2 +# nextshifts = [0+0, 0+1, 0+2] = [0,1,2] +def awkward_IndexedArray_reduce_next_nonlocal_nextshifts_fromshifts_64( + nextshifts, index, length, shifts +): + if length == 0: + return + + # Dynamically select dtypes based on input arrays + idx_dtype = index.dtype + out_dtype = nextshifts.dtype + + # 1. Calculate the mapping to the output slots (k) using one scan + # valid_mask is 1 if index >= 0, else 0 + valid_mask = (index[:length] >= 0).astype(idx_dtype, copy=False) + scan_k = cp.empty(length, dtype=idx_dtype) + + inclusive_scan( + d_in=valid_mask, + d_out=scan_k, + op=OpKind.PLUS, + init_value=None, + num_items=length, + ) + + def compute_and_scatter(i): + idx_val = index[i] + if idx_val >= 0: + k = scan_k[i] - 1 + # Relationship: null_count = i - (valid_count_before_i) + # which simplifies to i - k + null_count = i - k + nextshifts[k] = out_dtype.type(shifts[i] + null_count) + return 0 + + # We use a CountingIterator to drive the transform across the input indices + unary_transform( + d_in=cp.arange(length, dtype=idx_dtype), + d_out=DiscardIterator(), + op=compute_and_scatter, + num_items=length, + ) + + +# Converts a starts array into an offsets array for an indexed reduction. +# outoffsets[i] = starts[i] for i in [0, startslength), outoffsets[startslength] = outindexlength. +# +# Example: starts=[0,3,5], startslength=3, outindexlength=7 +# outoffsets=[0,3,5,7] +def awkward_IndexedArray_reduce_next_fix_offsets_64( + outoffsets, starts, startslength, outindexlength +): + if startslength == 0: + outoffsets[0] = outindexlength + return + if starts.dtype == outoffsets.dtype: + outoffsets[:startslength] = starts[:startslength] + else: + # just in case + cp.copyto(outoffsets[:startslength], starts[:startslength], casting="same_kind") + outoffsets[startslength] = outindexlength + + +def _make_count_valid(index, fromstarts, fromstops, out_dtype): + def count_valid(i): + start = fromstarts[i] + stop = fromstops[i] + count = out_dtype.type(0) + for j in range(start, stop): + if index[j] >= 0: + count = count + out_dtype.type(1) + return count + + return count_valid + + +# For each row i in [0, length): counts non-negative entries in index[fromstarts[i]:fromstops[i]]. +# tostarts[i] / tostops[i] are the prefix-sum start/end of those non-negative entries. +# tolength[0] = total number of non-negative entries across all rows. +# +# Example: +# index = [3, -1, 5, 2, -1, 7, -1, -1, 4] +# fromstarts = [0, 3, 6], fromstops = [3, 6, 9], length = 3 +# row 0: [3, -1, 5] → 2 valid +# row 1: [2, -1, 7] → 2 valid +# row 2: [-1, -1, 4] → 1 valid +# tostarts = [0, 2, 4], tostops = [2, 4, 5], tolength = [5] +def awkward_IndexedArray_ranges_next_64( + index, fromstarts, fromstops, length, tostarts, tostops, tolength +): + if length == 0: + tolength[:1] = 0 + return + out_dtype = tostarts.dtype + row_counts = cp.empty(length, dtype=out_dtype) + unary_transform( + d_in=CountingIterator(out_dtype.type(0)), + d_out=row_counts, + op=_make_count_valid(index, fromstarts[:length], fromstops[:length], out_dtype), + num_items=length, + ) + scan = cp.empty(length + 1, dtype=out_dtype) + scan[0] = 0 + inclusive_scan( + d_in=row_counts, + d_out=scan[1:], + op=OpKind.PLUS, + init_value=None, + num_items=length, + ) + tostarts[:length] = scan[:length] + tostops[:length] = scan[1:] + tolength[:1] = scan[length] + + +# Collects non-negative values from index[fromstarts[i]:fromstops[i]] for each row i +# into tocarry, compactly (no gaps). +# +# Example: +# index = [3, -1, 5, 2, -1, 7, -1, -1, 4] +# fromstarts = [0, 3, 6], fromstops = [3, 6, 9], length = 3 +# row 0: [3, -1, 5] → valid: [3, 5] +# row 1: [2, -1, 7] → valid: [2, 7] +# row 2: [-1, -1, 4] → valid: [4] +# tocarry = [3, 5, 2, 7, 4] +def awkward_IndexedArray_ranges_carry_next_64( + index, fromstarts, fromstops, length, tocarry +): + if length == 0: + return + out_dtype = tocarry.dtype + row_counts = cp.empty(length, dtype=out_dtype) + unary_transform( + d_in=CountingIterator(out_dtype.type(0)), + d_out=row_counts, + op=_make_count_valid(index, fromstarts[:length], fromstops[:length], out_dtype), + num_items=length, + ) + scan = cp.empty(length + 1, dtype=out_dtype) + scan[0] = 0 + inclusive_scan( + d_in=row_counts, + d_out=scan[1:], + op=OpKind.PLUS, + init_value=None, + num_items=length, + ) + if int(scan[length]) == 0: + return + + def _make_fill_carry_valid(index, starts, stops, scan, tocarry): + def fill_carry(i): + start = starts[i] + stop = stops[i] + out_pos = scan[i] + for j in range(start, stop): + val = index[j] + if val >= 0: + tocarry[out_pos] = val + out_pos = out_pos + scan.dtype.type(1) + return scan.dtype.type(0) + + return fill_carry + + unary_transform( + d_in=CountingIterator(out_dtype.type(0)), + d_out=DiscardIterator(), + op=_make_fill_carry_valid( + index, fromstarts[:length], fromstops[:length], scan, tocarry + ), + num_items=length, + ) + + +# Fills toindex[0..lenindex] with [0, 1, ..., lenindex-1, -1]. +# (The last entry is -1 to represent the None slot appended for unique.) +# +# Example: +# lenindex = 4, len(toindex) >= 5 +# toindex = [0, 1, 2, 3, -1] +def awkward_IndexedArray_numnull_unique_64(toindex, lenindex): + unary_transform( + d_in=CountingIterator(toindex.dtype.type(0)), + d_out=toindex[:lenindex], + op=OpKind.IDENTITY, + num_items=lenindex, + ) + toindex[lenindex] = toindex.dtype.type(-1) + + +# For each element in fromindex[0..lenindex): sets numnull[i]=1 if fromindex[i]<0, else 0. +# tolength[0] = total number of nulls. +# +# Example: +# fromindex = [3, -1, 5, -1, -1, 2], lenindex = 6 +# numnull = [0, 1, 0, 1, 1, 0] +# tolength = [3] +def awkward_IndexedArray_numnull_parents(numnull, tolength, fromindex, lenindex): + if lenindex == 0: + tolength[:1] = 0 + return + idx = fromindex[:lenindex] + + def _make_is_null(idx): + def is_null(x): + return idx.dtype.type(1) if x < 0 else idx.dtype.type(0) + + return is_null + + unary_transform( + d_in=idx, d_out=numnull[:lenindex], op=_make_is_null(idx), num_items=lenindex + ) + scan = cp.empty(lenindex, dtype=idx.dtype) + inclusive_scan( + d_in=numnull[:lenindex], + d_out=scan, + op=OpKind.PLUS, + init_value=None, + num_items=lenindex, + ) + tolength[:1] = scan[lenindex - 1] + + +# For each i in [0, lenindex): if fromindex[i] < 0 → toindex[i] = -1, +# else tocarry[scan[i]-1] = fromindex[i] and toindex[i] = scan[i]-1. +# Raises ValueError if fromindex[i] >= lencontent. +# +# Example: +# fromindex = [3, -1, 5, 2, -1], lenindex = 5, lencontent = 10 +# is_valid = [1, 0, 1, 1, 0] +# scan = [1, 1, 2, 3, 3] (cumulative sum of is_valid) +# i=0: pos=0 → tocarry[0]=3, toindex[0]=0 +# i=1: null → toindex[1]=-1 +# i=2: pos=1 → tocarry[1]=5, toindex[2]=1 +# i=3: pos=2 → tocarry[2]=2, toindex[3]=2 +# i=4: null → toindex[4]=-1 +# tocarry = [3, 5, 2], toindex = [0, -1, 1, 2, -1] +def awkward_IndexedArray_getitem_nextcarry_outindex( + tocarry, toindex, fromindex, lenindex, lencontent +): + if lenindex == 0: + return + idx = fromindex[:lenindex] + if cp.any(idx >= lencontent): + raise ValueError( + "index out of range in compiled CUDA code" + " (awkward_IndexedArray_getitem_nextcarry_outindex)" + ) + + out_dtype = idx.dtype + + def is_valid(x): + return out_dtype.type(1) if x >= 0 else out_dtype.type(0) + + scan = cp.empty(lenindex, dtype=out_dtype) + inclusive_scan( + d_in=TransformIterator(idx, is_valid), + d_out=scan, + op=OpKind.PLUS, + init_value=None, + num_items=lenindex, + ) + + def _make_fill_outindex(idx, scan, tocarry): + def fill_outindex(i): + v = idx[i] + if v >= 0: + pos = scan[i] - scan.dtype.type(1) + tocarry[pos] = v + return pos + return idx.dtype.type(-1) + + return fill_outindex + + unary_transform( + d_in=CountingIterator(idx.dtype.type(0)), + d_out=toindex[:lenindex], + op=_make_fill_outindex(idx, scan, tocarry), + num_items=lenindex, + ) + + +# Copies non-negative fromindex entries into tocarry compactly. +# Raises ValueError if any fromindex[i] < 0 or >= lencontent. +# +# Example: +# fromindex = [3, 5, 2, 7], lenindex = 4, lencontent = 10 +# tocarry = [3, 5, 2, 7] +def awkward_IndexedArray_getitem_nextcarry(tocarry, fromindex, lenindex, lencontent): + if lenindex == 0: + return + idx = fromindex[:lenindex] + if cp.any((idx < 0) | (idx >= lencontent)): + raise ValueError( + "index out of range in compiled CUDA code" + " (awkward_IndexedArray_getitem_nextcarry)" + ) + tocarry[:lenindex] = idx.astype(tocarry.dtype, copy=False) + + +# For each i in [0, outindexlength): if outindex[i] < 0 → empty slice (size 0), +# else outoffsets[k] = offsets[outindex[i]+1] - offsets[outindex[i]]. +# outoffsets[0] = offsets[0]; outoffsets[k] = cumulative sizes. +# Raises ValueError if outindex[i]+1 >= offsetslength. +# +# Example: +# outindex = [1, -1, 2, 0], outindexlength = 4 +# offsets = [0, 3, 3, 7, 10], offsetslength = 5 +# sizes: [offsets[2]-offsets[1], 0, offsets[3]-offsets[2], offsets[1]-offsets[0]] +# = [0, 0, 4, 3] +# outoffsets = [0, 0, 0, 4, 7] +def awkward_IndexedArray_flatten_none2empty( + outoffsets, outindex, outindexlength, offsets, offsetslength +): + if outindexlength == 0: + outoffsets[:1] = offsets[:1].astype(outoffsets.dtype, copy=False) + return + idx = outindex[:outindexlength] + if cp.any((idx >= 0) & (idx + 1 >= offsetslength)): + raise ValueError( + "flattening offset out of range in compiled CUDA code" + " (awkward_IndexedArray_flatten_none2empty)" + ) + + def compute_size(i): + v = idx[i] + if v < 0: + return offsets.dtype.type(0) + return offsets[v + 1] - offsets[v] + + base = int(offsets[0]) + outoffsets[0] = base + unary_transform( + d_in=CountingIterator(idx.dtype.type(0)), + d_out=outoffsets[1 : outindexlength + 1], + op=compute_size, + num_items=outindexlength, + ) + inclusive_scan( + d_in=outoffsets[1 : outindexlength + 1], + d_out=outoffsets[1 : outindexlength + 1], + op=OpKind.PLUS, + init_value=None, + num_items=outindexlength, + ) + cp.add( + outoffsets[1 : outindexlength + 1], base, out=outoffsets[1 : outindexlength + 1] + ) + + +# Replaces each -1 in toindex with (n_non_null + rank_among_nulls). +# Non-(-1) entries are unchanged. Operates in-place on toindex[0..length). +# +# Example: +# toindex = [0, -1, 2, -1, -1, 1], length = 6 +# is_none = [0, 1, 0, 1, 1, 0] +# scan_null = [0, 1, 1, 2, 3, 3] (cumulative sum of is_none) +# n_non_null = 6 - 3 = 3 +# nulls get indices: 3+1-1=3, 3+2-1=4, 3+3-1=5 +# toindex = [0, 3, 2, 4, 5, 1] (a permutation of 0..5) +def awkward_Index_nones_as_index(toindex, length): + if length == 0: + return + idx = toindex[:length] + + out_dtype = idx.dtype + + def is_none(x): + return out_dtype.type(1) if x == -1 else out_dtype.type(0) + + scan_null = cp.empty(length, dtype=out_dtype) + inclusive_scan( + d_in=TransformIterator(idx, is_none), + d_out=scan_null, + op=OpKind.PLUS, + init_value=None, + num_items=length, + ) + n_non_null = length - int(scan_null[length - 1]) + toindex[:length] = cp.where( + idx == -1, + (n_non_null + scan_null - 1).astype(toindex.dtype, copy=False), + idx, + ) + + +# For each i in [0, length): computes starts_out[i], stops_out[i], mask_out[i] +# based on whether index_in[i] >= 0 (present) or < 0 (missing). +# scan = prefix sum of (index_in >= 0). +# starts_out[i] = offsets_in[scan[i]], stops_out[i] = offsets_in[scan[i+1]] +# mask_out[i] = i if present, -1 if missing. +# +# Example: +# index_in = [0, -1, 1, 2, -1], length = 5 +# offsets_in = [0, 3, 7, 10] (3 present items → 3 intervals) +# scan = [0, 1, 1, 2, 3, 3] (0 prepended; cumulative is_present) +# i=0 (present): starts=offsets_in[0]=0, stops=offsets_in[1]=3, mask=0 +# i=1 (missing): starts=offsets_in[1]=3, stops=offsets_in[1]=3, mask=-1 +# i=2 (present): starts=offsets_in[1]=3, stops=offsets_in[2]=7, mask=2 +# i=3 (present): starts=offsets_in[2]=7, stops=offsets_in[3]=10, mask=3 +# i=4 (missing): starts=offsets_in[3]=10, stops=offsets_in[3]=10, mask=-1 +# starts_out = [0, 3, 3, 7, 10], stops_out = [3, 3, 7, 10, 10], mask_out = [0, -1, 2, 3, -1] +def awkward_Content_getitem_next_missing_jagged_getmaskstartstop( + index_in, offsets_in, mask_out, starts_out, stops_out, length +): + if length == 0: + return + idx = index_in[:length] + + out_dtype = idx.dtype + + def is_present(x): + return out_dtype.type(1) if x >= 0 else out_dtype.type(0) + + scan = cp.empty(length + 1, dtype=out_dtype) + scan[0] = 0 + inclusive_scan( + d_in=TransformIterator(idx, is_present), + d_out=scan[1:], + op=OpKind.PLUS, + init_value=None, + num_items=length, + ) + + def _make_fill_jagged(idx, scan, offsets_in, starts_out, stops_out): + def fill_jagged(i): + s = scan[i] + starts_out[i] = offsets_in[s] + stops_out[i] = offsets_in[scan[i + scan.dtype.type(1)]] + if idx[i] < 0: + return idx.dtype.type(-1) + return idx.dtype.type(i) + + return fill_jagged + + unary_transform( + d_in=CountingIterator(idx.dtype.type(0)), + d_out=mask_out[:length], + op=_make_fill_jagged( + idx, scan, offsets_in, starts_out[:length], stops_out[:length] + ), + num_items=length, + ) + + +# For each i in [0, length): toindex[i] = i if (mask[i] != 0) == validwhen, else -1. +# +# Example: +# mask = [0, 1, 0, 1, 0], length = 5, validwhen = True +# toindex = [-1, 1, -1, 3, -1] +def awkward_ByteMaskedArray_toIndexedOptionArray(toindex, mask, length, validwhen): + if length == 0: + return + msk = mask[:length] + out_dtype = toindex.dtype + + def _make_fill(msk, validwhen, out_dtype): + def fill(i): + return ( + out_dtype.type(i) if (msk[i] != 0) == validwhen else out_dtype.type(-1) + ) + + return fill + + unary_transform( + d_in=CountingIterator(out_dtype.type(0)), + d_out=toindex[:length], + op=_make_fill(msk, validwhen, out_dtype), + num_items=length, + ) + + +# For each valid i (where (mask[i] != 0) == valid_when), sets +# nextshifts[k] = number of null entries before position i, +# where k is the 0-indexed rank among valid entries. +# null_count_before[i] = i - k (since null + valid = total up to i). +# +# Example: +# mask = [0, 1, 0, 1, 0, 1], length = 6, valid_when = True +# valid at i=1 (k=0): nextshifts[0] = 1 +# valid at i=3 (k=1): nextshifts[1] = 2 +# valid at i=5 (k=2): nextshifts[2] = 3 +def awkward_ByteMaskedArray_reduce_next_nonlocal_nextshifts_64( + nextshifts, mask, length, valid_when +): + if length == 0: + return + out_dtype = nextshifts.dtype + msk = mask[:length] + scan_k = cp.empty(length, dtype=out_dtype) + + def _make_is_valid(valid_when, out_dtype): + def is_valid(x): + return out_dtype.type((x != 0) == valid_when) + + return is_valid + + inclusive_scan( + d_in=TransformIterator(msk, _make_is_valid(valid_when, out_dtype)), + d_out=scan_k, + op=OpKind.PLUS, + init_value=None, + num_items=length, + ) + + def _make_scatter_nextshifts(msk, scan_k, nextshifts, valid_when, out_dtype): + def scatter(i): + is_v = (msk[i] != 0) == valid_when + if is_v: + k = scan_k[i] - out_dtype.type(1) + nextshifts[k] = out_dtype.type(i) - k + return out_dtype.type(0) + + return scatter + + unary_transform( + d_in=CountingIterator(out_dtype.type(0)), + d_out=DiscardIterator(), + op=_make_scatter_nextshifts(msk, scan_k, nextshifts, valid_when, out_dtype), + num_items=length, + ) + + +# Like awkward_ByteMaskedArray_reduce_next_nonlocal_nextshifts_64 but adds shifts[i]: +# nextshifts[k] = shifts[i] + null_count_before_i. +# +# Example: +# mask = [0, 1, 0, 1], length = 4, valid_when = True, shifts = [10, 20, 30, 40] +# valid at i=1 (k=0): nextshifts[0] = 20 + 1 = 21 +# valid at i=3 (k=1): nextshifts[1] = 40 + 2 = 42 +def awkward_ByteMaskedArray_reduce_next_nonlocal_nextshifts_fromshifts_64( + nextshifts, mask, length, valid_when, shifts +): + if length == 0: + return + out_dtype = nextshifts.dtype + msk = mask[:length] + scan_k = cp.empty(length, dtype=out_dtype) + + def _make_is_valid(valid_when, out_dtype): + def is_valid(x): + return out_dtype.type((x != 0) == valid_when) + + return is_valid + + inclusive_scan( + d_in=TransformIterator(msk, _make_is_valid(valid_when, out_dtype)), + d_out=scan_k, + op=OpKind.PLUS, + init_value=None, + num_items=length, + ) + + def _make_scatter_nextshifts_fromshifts( + msk, scan_k, nextshifts, valid_when, shifts, out_dtype + ): + def scatter(i): + is_v = (msk[i] != 0) == valid_when + if is_v: + k = scan_k[i] - out_dtype.type(1) + null_count = out_dtype.type(i) - k + nextshifts[k] = out_dtype.type(shifts[i]) + null_count + return out_dtype.type(0) + + return scatter + + unary_transform( + d_in=CountingIterator(out_dtype.type(0)), + d_out=DiscardIterator(), + op=_make_scatter_nextshifts_fromshifts( + msk, scan_k, nextshifts, valid_when, shifts, out_dtype + ), + num_items=length, + ) + + +# Overlays mymask onto theirmask: tomask[i] = theirmask[i] | mine[i], +# where mine[i] = 1 if mymask[i] is null (i.e. (mymask[i] != 0) != validwhen). +# A 1 bit in mine propagates "null" into the output regardless of theirmask. +# +# Example: +# theirmask = [0, 1, 0, 0], mymask = [1, 0, 0, 1], validwhen = True, length = 4 +# mine[0] = (1!=0)!=True = 0 (mymask says valid) +# mine[1] = (0!=0)!=True = 1 (mymask says null) +# mine[2] = (0!=0)!=True = 1 (mymask says null) +# mine[3] = (1!=0)!=True = 0 (mymask says valid) +# tomask = [0|0, 1|1, 0|1, 0|0] = [0, 1, 1, 0] +def awkward_ByteMaskedArray_overlay_mask(tomask, theirmask, mymask, length, validwhen): + if length == 0: + return + out_dtype = tomask.dtype + their = theirmask[:length] + my = mymask[:length] + + def _make_overlay(their, my, validwhen, out_dtype): + def overlay(i): + mine = out_dtype.type((my[i] != 0) != validwhen) + return their[i] | mine + + return overlay + + unary_transform( + d_in=CountingIterator(cp.int64(0)), + d_out=tomask[:length], + op=_make_overlay(their, my, validwhen, out_dtype), + num_items=length, + ) + + +# For each i in [0, length): if (mask[i] != 0) == validwhen → tocarry[k] = i, +# outindex[i] = k; else outindex[i] = -1. k is the compact rank among valid entries. +# +# Example: +# mask = [0, 1, 0, 1, 1], length = 5, validwhen = True +# scan = [0, 1, 1, 2, 3] (cumulative valid count) +# tocarry = [1, 3, 4] +# outindex = [-1, 0, -1, 1, 2] +def awkward_ByteMaskedArray_getitem_nextcarry_outindex( + tocarry, outindex, mask, length, validwhen +): + if length == 0: + return + msk = mask[:length] + out_dtype = tocarry.dtype + scan = cp.empty(length, dtype=out_dtype) + + def _make_is_valid(validwhen, out_dtype): + def is_valid(x): + return out_dtype.type((x != 0) == validwhen) + + return is_valid + + inclusive_scan( + d_in=TransformIterator(msk, _make_is_valid(validwhen, out_dtype)), + d_out=scan, + op=OpKind.PLUS, + init_value=None, + num_items=length, + ) + + def _make_fill_carry_outindex(msk, scan, tocarry, validwhen, out_dtype): + def fill(i): + is_v = (msk[i] != 0) == validwhen + if is_v: + pos = scan[i] - out_dtype.type(1) + tocarry[pos] = out_dtype.type(i) + return pos + return out_dtype.type(-1) + + return fill + + unary_transform( + d_in=CountingIterator(out_dtype.type(0)), + d_out=outindex[:length], + op=_make_fill_carry_outindex(msk, scan, tocarry, validwhen, out_dtype), + num_items=length, + ) + + +# Expands a packed bitmask (bitmasklength bytes) to an indexed option array of +# n = bitmasklength * 8 entries. toindex[p] = p if valid, -1 if missing. +# +# lsb_order=True: bit j of byte i → entry i*8+j (bit 0 = LSB). +# lsb_order=False: bit 7-j of byte i → entry i*8+j (bit 7 = MSB first). +# Validity is determined by (bit == validwhen). +# +# Example (lsb_order=True, validwhen=True, bitmasklength=1, frombitmask=[0b00001010]): +# bits (LSB first): 0,1,0,1,0,0,0,0 +# toindex = [-1, 1, -1, 3, -1, -1, -1, -1] +def awkward_BitMaskedArray_to_IndexedOptionArray( + toindex, frombitmask, bitmasklength, validwhen, lsb_order +): + if bitmasklength == 0: + return + n_elements = bitmasklength * 8 + out_dtype = toindex.dtype + + def _make_fill(frombitmask, validwhen, lsb_order, out_dtype): + def fill(p): + byte = out_dtype.type(frombitmask[p // 8]) + bit_idx = p % 8 + if lsb_order: + bit = (byte >> bit_idx) & out_dtype.type(1) + else: + bit = (byte >> (7 - bit_idx)) & out_dtype.type(1) + return p if (bit != out_dtype.type(0)) == validwhen else out_dtype.type(-1) + + return fill + + unary_transform( + d_in=CountingIterator(out_dtype.type(0)), + d_out=toindex[:n_elements], + op=_make_fill(frombitmask, validwhen, lsb_order, out_dtype), + num_items=n_elements, + ) + + +# Expands a packed bitmask (bitmasklength bytes) to a byte mask of +# n = bitmasklength * 8 entries. tobytemask[p] = 0 if valid, 1 if missing. +# (bit != validwhen) determines whether a position is missing. +# +# lsb_order=True: bit j of byte i → entry i*8+j. +# lsb_order=False: bit 7-j of byte i → entry i*8+j. +# +# Example (lsb_order=True, validwhen=True, bitmasklength=1, frombitmask=[0b00001010]): +# bits (LSB first): 0,1,0,1,0,0,0,0 +# tobytemask = [1, 0, 1, 0, 1, 1, 1, 1] +def awkward_BitMaskedArray_to_ByteMaskedArray( + tobytemask, frombitmask, bitmasklength, validwhen, lsb_order +): + if bitmasklength == 0: + return + n_elements = bitmasklength * 8 + out_dtype = tobytemask.dtype + + def _make_fill(frombitmask, validwhen, lsb_order, out_dtype): + def fill(p): + byte = frombitmask[p // 8] + bit_idx = p % 8 + if lsb_order: + bit = (byte >> bit_idx) & 1 + else: + bit = (byte >> (7 - bit_idx)) & 1 + return out_dtype.type((bit != 0) != validwhen) + + return fill + + unary_transform( + d_in=CountingIterator(cp.int64(0)), + d_out=tobytemask[:n_elements], + op=_make_fill(frombitmask, validwhen, lsb_order, out_dtype), + num_items=n_elements, + ) diff --git a/tests-cuda/test_1381_check_errors.py b/tests-cuda/test_1381_check_errors.py index 7a426deb5d..bd12041605 100644 --- a/tests-cuda/test_1381_check_errors.py +++ b/tests-cuda/test_1381_check_errors.py @@ -4,7 +4,6 @@ import traceback -import cupy as cp import numpy as np # noqa: F401 import pytest @@ -21,13 +20,9 @@ def test(): v2_array = ak.Array([1, 2, 3, 4, 5]).layout v2_array_cuda = ak.to_backend(v2_array, "cuda") - with cp.cuda.Stream() as stream: - v2_array_cuda[10,] - v2_array_cuda[11,] - v2_array_cuda[12,] with pytest.raises(ValueError) as err: - awkward._connect.cuda.synchronize_cuda(stream) + v2_array_cuda[10,] assert isinstance(err.value, ValueError) @@ -35,12 +30,4 @@ def test(): assert ( "ValueError: index out of range in compiled CUDA code " "(awkward_RegularArray_getitem_next_at)\n" - "\n" - "This error occurred while attempting to slice\n" - "\n" - " \n" - "\n" - "with\n" - "\n" - " (10)\n" ) in message