File tree Expand file tree Collapse file tree 1 file changed +17
-6
lines changed Expand file tree Collapse file tree 1 file changed +17
-6
lines changed Original file line number Diff line number Diff line change @@ -88,27 +88,38 @@ cdef object _pointers_from_shape_and_stride(
88
88
89
89
Returns: tuple(min_disp, nbytes)
90
90
"""
91
+ cdef Py_ssize_t nelems = 1
92
+ cdef Py_ssize_t min_disp = 0
93
+ cdef Py_ssize_t max_disp = 0
94
+ cdef int i
95
+ cdef Py_ssize_t sh_i = 0
96
+ cdef Py_ssize_t str_i = 0
91
97
if (nd > 0 ):
92
98
if (ary_strides is None ):
93
99
nelems = 1
94
100
for si in ary_shape:
95
101
sh_i = int (si)
96
- if (sh_i <= 0 ):
102
+ if (sh_i < 0 ):
97
103
raise ValueError (" Array shape elements need to be positive" )
98
104
nelems = nelems * sh_i
99
- return (ary_offset, nelems * itemsize)
105
+ return (ary_offset, max ( nelems, 1 ) * itemsize)
100
106
else :
101
107
min_disp = ary_offset
102
108
max_disp = ary_offset
103
109
for i in range (nd):
104
110
str_i = int (ary_strides[i])
105
111
sh_i = int (ary_shape[i])
106
- if (sh_i <= 0 ):
112
+ if (sh_i < 0 ):
107
113
raise ValueError (" Array shape elements need to be positive" )
108
- if (str_i > 0 ):
109
- max_disp += str_i * (sh_i - 1 )
114
+ if (sh_i > 0 ):
115
+ if (str_i > 0 ):
116
+ max_disp += str_i * (sh_i - 1 )
117
+ else :
118
+ min_disp += str_i * (sh_i - 1 )
110
119
else :
111
- min_disp += str_i * (sh_i - 1 );
120
+ nelems = 0
121
+ if nelems == 0 :
122
+ return (ary_offset, itemsize)
112
123
return (min_disp, (max_disp - min_disp + 1 ) * itemsize)
113
124
elif (nd == 0 ):
114
125
return (ary_offset, itemsize)
You can’t perform that action at this time.
0 commit comments