Skip to content

Commit

Permalink
small cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
rjenc29 committed Mar 3, 2019
1 parent cabf2b3 commit 72241de
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 39 deletions.
62 changes: 26 additions & 36 deletions numba/targets/builtins.py
Original file line number Diff line number Diff line change
Expand Up @@ -434,7 +434,7 @@ def lower_get_type_max_value(context, builder, sig, args):
# -----------------------------------------------------------------------------

from numba.typing.builtins import IndexValue, IndexValueType
from numba.extending import overload
from numba.extending import overload, register_jitable

@lower_builtin(IndexValue, types.intp, types.Type)
@lower_builtin(IndexValue, types.uintp, types.Type)
Expand All @@ -446,48 +446,38 @@ def impl_index_value(context, builder, sig, args):
index_value.value = value
return index_value._getvalue()

@overload(min)
def indval_min(indval1, indval2=None):

if isinstance(indval1, IndexValueType) and \
isinstance(indval2, IndexValueType):
def min_impl(indval1, indval2):
if indval1.value > indval2.value:
return indval2
return indval1
return min_impl
less_than = register_jitable(lambda a, b: a < b)
greater_than = register_jitable(lambda a, b: a > b)

if indval2 is None:
iterable_types = types.RangeType, types.List, types.Generator
if isinstance(indval1, iterable_types):
def min_impl(indval1, indval2=None):
it = iter(indval1)
min_val = next(it)
for val in it:
if val < min_val:
min_val = val
return min_val
return min_impl

@overload(max)
def indval_max(indval1, indval2=None):
def min_max_impl(indval1, indval2, op):

if isinstance(indval1, IndexValueType) and \
isinstance(indval2, IndexValueType):
def max_impl(indval1, indval2):
if indval2.value > indval1.value:
return indval2
return indval1
return max_impl
def impl(indval1, indval2):
if op(indval1.value, indval2.value):
return indval1
return indval2
return impl

if indval2 is None:
iterable_types = types.RangeType, types.List, types.Generator
if isinstance(indval1, iterable_types):
def max_impl(indval1, indval2=None):
if isinstance(indval1, types.IterableType):
def impl(indval1, indval2=None):
it = iter(indval1)
max_val = next(it)
return_val = next(it)
for val in it:
if val > max_val:
max_val = val
return max_val
return max_impl
if op(val, return_val):
return_val = val
return return_val
return impl


@overload(min)
def indval_min(indval1, indval2=None):
return min_max_impl(indval1, indval2, less_than)


@overload(max)
def indval_max(indval1, indval2=None):
return min_max_impl(indval1, indval2, greater_than)
6 changes: 3 additions & 3 deletions numba/tests/test_builtins.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,9 @@ def max_usecase2(x, y):
def max_usecase3(x):
return max(x)

def max_usecase4():
return max(())


def min_usecase1(x, y):
return min(x, y)
Expand All @@ -137,9 +140,6 @@ def min_usecase3(x):
def min_usecase4():
return min(())

def min_range(range_like):
return min(range_like)


def oct_usecase(x):
return oct(x)
Expand Down

0 comments on commit 72241de

Please sign in to comment.