@@ -120,9 +120,11 @@ def _basic_slice_meta(ind, shape : tuple, strides : tuple, offset : int):
120120 sh0 = _slice_len(sl_start, sl_stop, sl_step)
121121 str0 = sl_step * strides[0 ]
122122 new_strides = strides if (sl_step == 1 or sh0 == 0 ) else (str0,) + strides[1 :]
123- new_offset = offset if sh0 == 0 else offset + sl_start * strides[0 ]
123+ new_shape = (sh0, ) + shape[1 :]
124+ is_empty = any (sh_i == 0 for sh_i in new_shape)
125+ new_offset = offset if is_empty else offset + sl_start * strides[0 ]
124126 return (
125- (sh0, ) + shape[ 1 :] ,
127+ new_shape ,
126128 new_strides,
127129 new_offset,
128130 _no_advanced_ind,
@@ -135,11 +137,15 @@ def _basic_slice_meta(ind, shape : tuple, strides : tuple, offset : int):
135137 return ((0 ,) + shape, (0 ,) + strides, offset, _no_advanced_ind, _no_advanced_pos)
136138 elif _is_integral(ind):
137139 ind = ind.__index__()
140+ new_shape = shape[1 :]
141+ new_strides = strides[1 :]
142+ is_empty = any (sh_i == 0 for sh_i in new_shape)
138143 if 0 <= ind < shape[0 ]:
139- return (shape[1 :], strides[1 :], offset + ind * strides[0 ], _no_advanced_ind, _no_advanced_pos)
144+ new_offset = offset if is_empty else offset + ind * strides[0 ]
145+ return (new_shape, new_strides, new_offset, _no_advanced_ind, _no_advanced_pos)
140146 elif - shape[0 ] <= ind < 0 :
141- return (shape[1 :], strides[1 :],
142- offset + (shape[ 0 ] + ind) * strides[ 0 ] , _no_advanced_ind, _no_advanced_pos)
147+ new_offset = offset if is_empty else offset + (shape[0 ] + ind) * strides[0 ]
148+ return (new_shape, new_strides, new_offset , _no_advanced_ind, _no_advanced_pos)
143149 else :
144150 raise IndexError (
145151 " Index {0} is out of range for axes 0 with "
0 commit comments