Skip to content

Commit 42ee62e

Browse files
Fixed return/continue
1 parent 75c23bc commit 42ee62e

2 files changed

Lines changed: 40 additions & 30 deletions

File tree

‎numba/parfors/parfor.py‎

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -129,25 +129,30 @@ def min_1(in_arr):
129129
return in_arr[()]
130130
elif arg.ndim == 1:
131131
if isinstance(arg.dtype, (types.NPDatetime, types.NPTimedelta)):
132+
# starting in NumPy 1.18, NaT is always returned if it is in the array
133+
# prior to 1.18, NaT is skipped unless it is the only value in the array
132134
if numpy_version >= (1, 18):
133135
def min_1(in_arr):
134136
numba.parfors.parfor.init_prange()
135137
min_checker(len(in_arr))
136138
val = numba.cpython.builtins.get_type_max_value(in_arr.dtype)
137139
for i in numba.parfors.parfor.internal_prange(len(in_arr)):
138140
if np.isnat(in_arr[i]):
139-
return in_arr[i]
140-
val = min(val, in_arr[i])
141+
val = in_arr[i]
142+
elif not np.isnat(val):
143+
val = min(val, in_arr[i])
141144
return val
142145
else:
143146
def min_1(in_arr):
144147
numba.parfors.parfor.init_prange()
145148
min_checker(len(in_arr))
146-
val = numba.cpython.builtins.get_type_max_value(in_arr.dtype)
149+
# assign val initially to NaT (int64 min)
150+
val = types.int64.minval
147151
for i in numba.parfors.parfor.internal_prange(len(in_arr)):
148-
if np.isnat(in_arr[i]):
149-
continue
150-
val = min(val, in_arr[i])
152+
if np.isnat(val):
153+
val = in_arr[i]
154+
else:
155+
val = min(val, in_arr[i])
151156
return val
152157
else:
153158
def min_1(in_arr):
@@ -173,25 +178,30 @@ def max_1(in_arr):
173178
return in_arr[()]
174179
elif arg.ndim == 1:
175180
if isinstance(arg.dtype, (types.NPDatetime, types.NPTimedelta)):
181+
# starting in NumPy 1.18, NaT is always returned if it is in the array
182+
# prior to 1.18, NaT is skipped unless it is the only value in the array
176183
if numpy_version >= (1, 18):
177184
def min_1(in_arr):
178185
numba.parfors.parfor.init_prange()
179-
min_checker(len(in_arr))
180-
val = numba.cpython.builtins.get_type_max_value(in_arr.dtype)
186+
max_checker(len(in_arr))
187+
val = numba.cpython.builtins.get_type_min_value(in_arr.dtype)
181188
for i in numba.parfors.parfor.internal_prange(len(in_arr)):
182189
if np.isnat(in_arr[i]):
183-
return in_arr[i]
184-
val = max(val, in_arr[i])
190+
val = in_arr[i]
191+
elif not np.isnat(val):
192+
val = max(val, in_arr[i])
185193
return val
186194
else:
187195
def min_1(in_arr):
188196
numba.parfors.parfor.init_prange()
189-
min_checker(len(in_arr))
190-
val = numba.cpython.builtins.get_type_max_value(in_arr.dtype)
197+
max_checker(len(in_arr))
198+
# assign val initially to NaT (int64 min)
199+
val = types.int64.minval
191200
for i in numba.parfors.parfor.internal_prange(len(in_arr)):
192-
if np.isnat(in_arr[i]):
193-
continue
194-
val = max(val, in_arr[i])
201+
if np.isnat(val):
202+
val = in_arr[i]
203+
else:
204+
val = max(val, in_arr[i])
195205
return val
196206
else:
197207
def max_1(in_arr):

‎numba/tests/test_npdatetime.py‎

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1055,6 +1055,18 @@ def test_min_func(self):
10551055
def test_np_min_func(self):
10561056
self._test_min_max(np.min, False, False)
10571057

1058+
def test_min_method(self):
1059+
self._test_min_max(np.min, False, True)
1060+
1061+
def test_max_func(self):
1062+
self._test_min_max(max, False, False)
1063+
1064+
def test_np_max_func(self):
1065+
self._test_min_max(np.max, False, False)
1066+
1067+
def test_max_method(self):
1068+
self._test_min_max(np.max, False, True)
1069+
10581070
@skip_parfors_unsupported
10591071
def test_min_func_parallel(self):
10601072
self._test_min_max(min, True, False)
@@ -1063,11 +1075,9 @@ def test_min_func_parallel(self):
10631075
def test_np_min_func_parallel(self):
10641076
self._test_min_max(np.min, True, False)
10651077

1066-
def test_max_func(self):
1067-
self._test_min_max(max, False, False)
1068-
1069-
def test_np_max_func(self):
1070-
self._test_min_max(np.max, False, False)
1078+
@skip_parfors_unsupported
1079+
def test_min_method_parallel(self):
1080+
self._test_min_max(np.min, True, True)
10711081

10721082
@skip_parfors_unsupported
10731083
def test_max_func_parallel(self):
@@ -1077,16 +1087,6 @@ def test_max_func_parallel(self):
10771087
def test_np_max_func_parallel(self):
10781088
self._test_min_max(np.max, True, False)
10791089

1080-
def test_min_method(self):
1081-
self._test_min_max(np.min, False, True)
1082-
1083-
@skip_parfors_unsupported
1084-
def test_min_method_parallel(self):
1085-
self._test_min_max(np.min, True, True)
1086-
1087-
def test_max_method(self):
1088-
self._test_min_max(np.max, False, True)
1089-
10901090
@skip_parfors_unsupported
10911091
def test_max_method_parallel(self):
10921092
self._test_min_max(np.max, True, True)

0 commit comments

Comments
 (0)