When we serve indexing request, we first compute page range in backing
file, which contains the result based on major index range, then mmap
that file range and pick up result from there.
Page range math was however not correct: e.g. for positive strides, last
element's byte is (byte0_stop-1), NOT (byte0_stop - byte0_stride) which
for cases where byte0_stop is just a bit after page boundary, can make a
difference - page_max will be 1 page less what it should be and then
whole ndarray view creation breaks:
Module wendelin.bigarray, line 381, in __getitem__
view0 = ndarray(view0_shape, self._dtype, vma0, view0_offset, view0_stridev)
ValueError: strides is incompatible with shape of requested array and size of buffer
( because vma0 was created less in size than what is needed to create view0_shape
shaped array starting from view0_offset in vma0. )
Similar story for negative strides math - it was not correct neither.