From 7cfbd7020471f651b74864b083aa1c9538ff1b8f Mon Sep 17 00:00:00 2001 From: "Gregory R. Lee" Date: Tue, 7 Jul 2015 15:20:49 -0400 Subject: [PATCH] BUG: fix bugs in coord_map for modes wrap and reflect --- skimage/_shared/interpolation.pxd | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/skimage/_shared/interpolation.pxd b/skimage/_shared/interpolation.pxd index 3b4ac538..b197bef4 100644 --- a/skimage/_shared/interpolation.pxd +++ b/skimage/_shared/interpolation.pxd @@ -317,28 +317,25 @@ cdef inline Py_ssize_t coord_map(Py_ssize_t dim, long coord, char mode) nogil: falls outside [0, dim). """ - dim = dim - 1 + cdef Py_ssize_t cmax + cmax = dim - 1 if mode == 'R': # reflect if coord < 0: - # How many times times does the coordinate wrap? - if (-coord / dim) % 2 != 0: - return dim - (-coord % dim) - else: - return (-coord % dim) - elif coord > dim: + coord = -coord - 1 + if coord > cmax: if (coord / dim) % 2 != 0: - return (dim - (coord % dim)) + return (cmax - (coord % dim)) else: return (coord % dim) elif mode == 'W': # wrap if coord < 0: - return (dim - (-coord % dim)) - elif coord > dim: + return (cmax - ((-coord - 1) % dim)) + elif coord > cmax: return (coord % dim) elif mode == 'N': # nearest if coord < 0: return 0 - elif coord > dim: - return dim + elif coord > cmax: + return cmax return coord