Skip to content

Commit c6802c3

Browse files
Closes gh-870
Offset should not be incremented if the array is found empty. ``` import dpctl.tensor as dpt X = dpt.empty((0,4), dtype='u1') X[:, 1] # no longer raises ValueError X[:, 1:3] # no longer raises ValueError ```
1 parent 0561a8c commit c6802c3

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

dpctl/tensor/_slicing.pxi

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ cdef object _basic_slice_meta(object ind, tuple shape,
110110
new_strides = list()
111111
k = 0
112112
new_offset = offset
113+
is_empty = False
113114
for i in range(len(ind)):
114115
ind_i = ind[i]
115116
if (ind_i is Ellipsis):
@@ -127,23 +128,27 @@ cdef object _basic_slice_meta(object ind, tuple shape,
127128
str_i = (1 if sh_i == 0 else sl_step) * strides[k]
128129
new_shape.append(sh_i)
129130
new_strides.append(str_i)
130-
if sh_i > 0:
131+
if sh_i > 0 and not is_empty:
131132
new_offset = new_offset + sl_start * strides[k]
133+
if sh_i == 0:
134+
is_empty = True
132135
k = k_new
133136
elif is_integral(ind_i):
134137
ind_i = ind_i.__index__()
135138
if 0 <= ind_i < shape[k]:
136139
k_new = k + 1
137-
new_offset = new_offset + ind_i * strides[k]
140+
if not is_empty:
141+
new_offset = new_offset + ind_i * strides[k]
138142
k = k_new
139143
elif -shape[k] <= ind_i < 0:
140144
k_new = k + 1
141-
new_offset = new_offset + (shape[k] + ind_i) * strides[k]
145+
if not is_empty:
146+
new_offset = new_offset + (shape[k] + ind_i) * strides[k]
142147
k = k_new
143148
else:
144149
raise IndexError(
145-
"Index {0} is out of range for "
146-
"axes {1} with size {2}".format(ind_i, k, shape[k]))
150+
("Index {0} is out of range for "
151+
"axes {1} with size {2}").format(ind_i, k, shape[k]))
147152
new_shape.extend(shape[k:])
148153
new_strides.extend(strides[k:])
149154
return (tuple(new_shape), tuple(new_strides), new_offset)

0 commit comments

Comments
 (0)