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
|
# BSD 3-Clause License; see https://github.com/scikit-hep/awkward/blob/main/LICENSE
from __future__ import annotations
import numpy as np
import pytest
import awkward as ak
numba = pytest.importorskip("numba")
ak.numba.register_and_check()
def test():
def reproduce(arrays):
out = np.zeros(len(arrays), np.int64)
i = 0
for values in arrays:
for p in values:
out[i] = p
i += 1
break
return out
numpyarray = ak.contents.NumpyArray(np.arange(100, 200, 10))
indexedarray = ak.contents.IndexedArray(
ak.index.Index64(np.array([5, 4, 3, 2, 1, 0])), numpyarray
)
listoffsetarray = ak.contents.ListOffsetArray(
ak.index.Index64(np.array([0, 1, 4])), indexedarray
)
array = ak.highlevel.Array(listoffsetarray)
assert reproduce(array).tolist() == [150, 140]
assert numba.njit(reproduce)(array).tolist() == [150, 140]
numpyarray = ak.contents.NumpyArray(np.arange(100, 200, 10))
indexedarray = ak.contents.IndexedArray(
ak.index.Index64(np.array([5, 4, 3, 2, 1, 0])), numpyarray
)
listoffsetarray = ak.contents.ListOffsetArray(
ak.index.Index64(np.array([0, 2, 4])), indexedarray
)
array = ak.highlevel.Array(listoffsetarray)
assert reproduce(array).tolist() == [150, 130]
assert numba.njit(reproduce)(array).tolist() == [150, 130]
numpyarray = ak.contents.NumpyArray(np.arange(100, 200, 10))
indexedarray = ak.contents.IndexedArray(
ak.index.Index64(np.array([5, 4, 3, 2, 1, 0])), numpyarray
)[2:]
listoffsetarray = ak.contents.ListOffsetArray(
ak.index.Index64(np.array([0, 1, 4])), indexedarray
)
array = ak.highlevel.Array(listoffsetarray)
assert reproduce(array).tolist() == [130, 120]
assert numba.njit(reproduce)(array).tolist() == [130, 120]
numpyarray = ak.contents.NumpyArray(np.arange(100, 200, 10))
indexedarray = ak.contents.IndexedArray(
ak.index.Index64(np.array([5, 4, 3, 2, 1, 0])), numpyarray
)[2:]
listoffsetarray = ak.contents.ListOffsetArray(
ak.index.Index64(np.array([0, 2, 4])), indexedarray
)
array = ak.highlevel.Array(listoffsetarray)
assert reproduce(array).tolist() == [130, 110]
assert numba.njit(reproduce)(array).tolist() == [130, 110]
numpyarray = ak.contents.NumpyArray(np.arange(100, 200, 10))[3:]
indexedarray = ak.contents.IndexedArray(
ak.index.Index64(np.array([5, 4, 3, 2, 1, 0])), numpyarray
)
listoffsetarray = ak.contents.ListOffsetArray(
ak.index.Index64(np.array([0, 1, 4])), indexedarray
)
array = ak.highlevel.Array(listoffsetarray)
assert reproduce(array).tolist() == [180, 170]
assert numba.njit(reproduce)(array).tolist() == [180, 170]
numpyarray = ak.contents.NumpyArray(np.arange(100, 200, 10))[3:]
indexedarray = ak.contents.IndexedArray(
ak.index.Index64(np.array([5, 4, 3, 2, 1, 0])), numpyarray
)
listoffsetarray = ak.contents.ListOffsetArray(
ak.index.Index64(np.array([0, 2, 4])), indexedarray
)
array = ak.highlevel.Array(listoffsetarray)
assert reproduce(array).tolist() == [180, 160]
assert numba.njit(reproduce)(array).tolist() == [180, 160]
numpyarray = ak.contents.NumpyArray(np.arange(100, 200, 10))[3:]
indexedarray = ak.contents.IndexedArray(
ak.index.Index64(np.array([5, 4, 3, 2, 1, 0])), numpyarray
)[2:]
listoffsetarray = ak.contents.ListOffsetArray(
ak.index.Index64(np.array([0, 1, 4])), indexedarray
)
array = ak.highlevel.Array(listoffsetarray)
assert reproduce(array).tolist() == [160, 150]
assert numba.njit(reproduce)(array).tolist() == [160, 150]
numpyarray = ak.contents.NumpyArray(np.arange(100, 200, 10))[3:]
indexedarray = ak.contents.IndexedArray(
ak.index.Index64(np.array([5, 4, 3, 2, 1, 0])), numpyarray
)[2:]
listoffsetarray = ak.contents.ListOffsetArray(
ak.index.Index64(np.array([0, 2, 4])), indexedarray
)
array = ak.highlevel.Array(listoffsetarray)
assert reproduce(array).tolist() == [160, 140]
assert numba.njit(reproduce)(array).tolist() == [160, 140]
def test_enumerate():
@numba.njit
def f1(array):
out = np.zeros(len(array), np.int32)
for i, x in enumerate(array):
out[i] = x + 0.5
return out
array = ak.highlevel.Array([0.0, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9])
assert f1(array).tolist() == [0, 1, 2, 3, 4, 6, 7, 8, 9, 10]
def test_zip():
@numba.njit
def f1(array1, array2):
out = np.zeros(len(array1), np.float64)
i = 0
for a1, a2 in zip(array1, array2):
out[i] = a1 - a2
i += 1
return out
array1 = ak.highlevel.Array([1.5, 2.5, 3.25])
array2 = ak.highlevel.Array([1, 2, 3])
assert f1(array1, array2).tolist() == [0.5, 0.5, 0.25]
|