diff --git a/python/cudf/cudf/core/cut.py b/python/cudf/cudf/core/cut.py index 046aaa9bf698..ff1041ac5596 100644 --- a/python/cudf/cudf/core/cut.py +++ b/python/cudf/cudf/core/cut.py @@ -147,7 +147,7 @@ def cut( # bins can either be an int, sequence of scalars or an intervalIndex if isinstance(bins, Sequence): - if len(set(bins)) is not len(bins): + if len(set(bins)) != len(bins): if duplicates == "raise": raise ValueError( f"Bin edges must be unique: {bins!r}.\n" diff --git a/python/cudf/cudf/tests/general_functions/test_cut.py b/python/cudf/cudf/tests/general_functions/test_cut.py index ffcc0da2c0c4..d53466e6c246 100644 --- a/python/cudf/cudf/tests/general_functions/test_cut.py +++ b/python/cudf/cudf/tests/general_functions/test_cut.py @@ -230,6 +230,29 @@ def test_cut_drop_duplicates_raises( ) +def test_cut_unique_bins_larger_than_integer_cache(): + x = [1, 2] + bins = list(range(257)) + + expected = pd.cut(x=x, bins=bins, labels=False) + actual = cut(x=x, bins=bins, labels=False) + + assert_eq(expected, actual) + + +def test_cut_duplicate_bins_with_distinct_large_integers(): + x = [1, 2] + # Construct equal bin edges independently so they are distinct objects. + duplicate_edge = int("257") + bins = [0, duplicate_edge, int("257"), 258] + + assert bins[1] == bins[2] + assert bins[1] is not bins[2] + + with pytest.raises(ValueError, match="Bin edges must be unique"): + cut(x=x, bins=bins, labels=False) + + @pytest.mark.parametrize( "x", [