Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Use tuple as SliceLiteral.key and add minor formatting, test changes
  • Loading branch information
brandonwillard committed Jun 19, 2021
commit a1c6c60ab510e62bbe6a1d2e56d1d0c88f1a39fc
3 changes: 2 additions & 1 deletion numba/core/types/misc.py
Original file line number Diff line number Diff line change
Expand Up @@ -336,7 +336,8 @@ def __init__(self, value):

@property
def key(self):
return self.name
sl = self.literal_value
return sl.start, sl.stop, sl.step


Literal.ctor_map[slice] = SliceLiteral
Expand Down
18 changes: 14 additions & 4 deletions numba/cpython/slicing.py
Original file line number Diff line number Diff line change
Expand Up @@ -150,8 +150,13 @@ def get_defaults(context):

@lower_builtin(slice, types.VarArg(types.Any))
def slice_constructor_impl(context, builder, sig, args):
default_start_pos, default_start_neg, default_stop_pos, default_stop_neg, default_step = \
[context.get_constant(types.intp, x) for x in get_defaults(context)]
(
default_start_pos,
default_start_neg,
default_stop_pos,
default_stop_neg,
default_step,
) = [context.get_constant(types.intp, x) for x in get_defaults(context)]

slice_args = [None] * 3

Expand Down Expand Up @@ -239,8 +244,13 @@ def make_slice_from_constant(context, builder, ty, pyval):
sli = context.make_helper(builder, ty)
lty = context.get_value_type(types.intp)

default_start_pos, default_start_neg, default_stop_pos, default_stop_neg, default_step = \
[context.get_constant(types.intp, x) for x in get_defaults(context)]
(
default_start_pos,
default_start_neg,
default_stop_pos,
default_stop_neg,
default_step,
) = [context.get_constant(types.intp, x) for x in get_defaults(context)]

step = pyval.step
if step is None:
Expand Down
6 changes: 3 additions & 3 deletions numba/tests/test_parfors.py
Original file line number Diff line number Diff line change
Expand Up @@ -3439,16 +3439,16 @@ def test_parfor_array_access_lower_slice(self):
slice(None, None, None), slice(None, None, -2)]:

def test_impl(n):
X = np.ones((n, 3))
X = np.arange(n * 4).reshape((n, 4))
y = 0
for i in numba.prange(n):
y += X[i, ts].sum()
return y

n = 211
n = 10
self.check(test_impl, n)

X = np.ones((211, 3))
X = np.arange(n * 4).reshape((n, 4))

def test_impl(X):
y = 0
Expand Down
17 changes: 11 additions & 6 deletions numba/tests/test_slices.py
Original file line number Diff line number Diff line change
Expand Up @@ -185,22 +185,27 @@ def test_slice_indices_examples(self):
str(e.exception)
)

def test_slice_constant_lowering(self):
for ts in [slice(1, 3, None), slice(2, None, None), slice(None, 2, -1),
slice(None, None, None), slice(None, None, -2)]:
test_tuple = (1, 2, 3, 4)
def test_slice_from_constant(self):
test_tuple = (1, 2, 3, 4)

for ts in itertools.product(
[None, 1, 2, 3], [None, 1, 2, 3], [None, 1, 2, -1, -2]
):
ts = slice(*ts)

@jit(nopython=True)
def test_fn():
return test_tuple[ts]
Comment thread
brandonwillard marked this conversation as resolved.
Resolved

assert test_fn() == test_tuple[ts]
self.assertEqual(test_fn(), test_fn.py_func())

def test_literal_slice_distinct(self):
sl1 = types.misc.SliceLiteral(slice(1, None, None))
sl2 = types.misc.SliceLiteral(slice(None, None, None))
sl3 = types.misc.SliceLiteral(slice(1, None, None))

assert sl1 != sl2
self.assertNotEqual(sl1, sl2)
self.assertEqual(sl1, sl3)


if __name__ == '__main__':
Expand Down