From fcad82fef8d245fa3ad0313797677c776841df5b Mon Sep 17 00:00:00 2001 From: Vyas Ramasubramani Date: Sun, 6 Sep 2026 20:13:31 -0700 Subject: [PATCH 1/5] TEST: Focus datetime subtraction coverage --- python/cudf/cudf/tests/series/test_binops.py | 54 ++++++++++++-------- 1 file changed, 33 insertions(+), 21 deletions(-) diff --git a/python/cudf/cudf/tests/series/test_binops.py b/python/cudf/cudf/tests/series/test_binops.py index 97b218f5060..c5e0df6c6eb 100644 --- a/python/cudf/cudf/tests/series/test_binops.py +++ b/python/cudf/cudf/tests/series/test_binops.py @@ -632,29 +632,41 @@ def test_dt_ops(data): assert_eq(pd_data > pd_data, gdf_data > gdf_data) +_DATETIME_SUBTRACT_DATA = [ + [1, 2, 3, 4, 10, 100, 20000], + [None] * 7, + [10, 20, 30, None, 100, 200, None], + [3223.234, 342.2332, 23423.23, 3343.23324, 23432.2323, 242.23, 233], +] + +_DATETIME_SUBTRACT_OTHERS = [ + [1, 2, 3, 4, 10, 100, 20000], + [None] * 7, + [10, 20, 30, None, 100, 200, None], + [3223.234, 342.2332, 23423.23, 3343.23324, 23432.2323, 242.23, 233], + datetime.datetime(1993, 6, 22, 13, 30), + datetime.datetime(2005, 1, 22, 10, 00), + np.datetime64("2005-02"), + np.datetime64("2005-02-25"), + np.datetime64("2005-02-25T03:30"), + np.datetime64("nat"), + # TODO: https://github.com/pandas-dev/pandas/issues/52295 +] + + @pytest.mark.parametrize( - "data", - [ - [1, 2, 3, 4, 10, 100, 20000], - [None] * 7, - [10, 20, 30, None, 100, 200, None], - [3223.234, 342.2332, 23423.23, 3343.23324, 23432.2323, 242.23, 233], - ], -) -@pytest.mark.parametrize( - "other", + "data, other", [ - [1, 2, 3, 4, 10, 100, 20000], - [None] * 7, - [10, 20, 30, None, 100, 200, None], - [3223.234, 342.2332, 23423.23, 3343.23324, 23432.2323, 242.23, 233], - datetime.datetime(1993, 6, 22, 13, 30), - datetime.datetime(2005, 1, 22, 10, 00), - np.datetime64("2005-02"), - np.datetime64("2005-02-25"), - np.datetime64("2005-02-25T03:30"), - np.datetime64("nat"), - # TODO: https://github.com/pandas-dev/pandas/issues/52295 + (_DATETIME_SUBTRACT_DATA[0], _DATETIME_SUBTRACT_OTHERS[0]), + (_DATETIME_SUBTRACT_DATA[1], _DATETIME_SUBTRACT_OTHERS[1]), + (_DATETIME_SUBTRACT_DATA[2], _DATETIME_SUBTRACT_OTHERS[2]), + (_DATETIME_SUBTRACT_DATA[3], _DATETIME_SUBTRACT_OTHERS[3]), + (_DATETIME_SUBTRACT_DATA[0], _DATETIME_SUBTRACT_OTHERS[4]), + (_DATETIME_SUBTRACT_DATA[1], _DATETIME_SUBTRACT_OTHERS[5]), + (_DATETIME_SUBTRACT_DATA[2], _DATETIME_SUBTRACT_OTHERS[6]), + (_DATETIME_SUBTRACT_DATA[3], _DATETIME_SUBTRACT_OTHERS[7]), + (_DATETIME_SUBTRACT_DATA[0], _DATETIME_SUBTRACT_OTHERS[8]), + (_DATETIME_SUBTRACT_DATA[1], _DATETIME_SUBTRACT_OTHERS[9]), ], ) def test_datetime_subtract( From 1be9aaf8246c33d442a800cface8586297f28536 Mon Sep 17 00:00:00 2001 From: Vyas Ramasubramani Date: Sun, 6 Sep 2026 20:12:19 -0700 Subject: [PATCH 2/5] TEST: Focus reflected DateOffset binary-op coverage --- python/cudf/cudf/tests/series/test_binops.py | 28 +++++++------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/python/cudf/cudf/tests/series/test_binops.py b/python/cudf/cudf/tests/series/test_binops.py index c5e0df6c6eb..9b51209e06f 100644 --- a/python/cudf/cudf/tests/series/test_binops.py +++ b/python/cudf/cudf/tests/series/test_binops.py @@ -1779,27 +1779,17 @@ def test_datetime_dateoffset_binaryop_multiple(kwargs, op): assert_eq(expect, got) -@pytest.mark.parametrize("n_periods", [0, 1, -12]) @pytest.mark.parametrize( - "frequency", + "n_periods, frequency, dtype, components", [ - "months", - "years", - "days", - "hours", - "minutes", - "seconds", - "microseconds", - "nanoseconds", - ], -) -@pytest.mark.parametrize( - "dtype, components", - [ - ["datetime64[ns]", "00.012345678"], - ["datetime64[us]", "00.012345"], - ["datetime64[ms]", "00.012"], - ["datetime64[s]", "00"], + (0, "months", "datetime64[ns]", "00.012345678"), + (1, "years", "datetime64[us]", "00.012345"), + (-12, "days", "datetime64[ms]", "00.012"), + (0, "hours", "datetime64[s]", "00"), + (1, "minutes", "datetime64[ns]", "00.012345678"), + (-12, "seconds", "datetime64[us]", "00.012345"), + (0, "microseconds", "datetime64[ms]", "00.012"), + (1, "nanoseconds", "datetime64[s]", "00"), ], ) def test_datetime_dateoffset_binaryop_reflected( From d69253e134cb45793773af00feff3f2a64a1629f Mon Sep 17 00:00:00 2001 From: Vyas Ramasubramani Date: Sun, 6 Sep 2026 20:11:23 -0700 Subject: [PATCH 3/5] TEST: Focus DateOffset binary-op coverage --- python/cudf/cudf/tests/series/test_binops.py | 29 ++++++-------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/python/cudf/cudf/tests/series/test_binops.py b/python/cudf/cudf/tests/series/test_binops.py index 9b51209e06f..c4f2dfa25c5 100644 --- a/python/cudf/cudf/tests/series/test_binops.py +++ b/python/cudf/cudf/tests/series/test_binops.py @@ -1659,28 +1659,17 @@ def is_timezone_aware_dtype(dtype: str) -> bool: return bool(re.match(r"^datetime64\[ns, .+\]$", dtype)) -@pytest.mark.parametrize("n_periods", [0, 1, -12]) @pytest.mark.parametrize( - "frequency", - [ - "months", - "years", - "days", - "hours", - "minutes", - "seconds", - "microseconds", - "nanoseconds", - ], -) -@pytest.mark.parametrize( - "dtype, components", + "n_periods, frequency, dtype, components", [ - ["datetime64[ns]", "00.012345678"], - ["datetime64[us]", "00.012345"], - ["datetime64[ms]", "00.012"], - ["datetime64[s]", "00"], - ["datetime64[ns, Asia/Kathmandu]", "00.012345678"], + (0, "months", "datetime64[ns]", "00.012345678"), + (1, "years", "datetime64[us]", "00.012345"), + (0, "microseconds", "datetime64[ms]", "00.012"), + (-12, "days", "datetime64[s]", "00"), + (0, "hours", "datetime64[ns, Asia/Kathmandu]", "00.012345678"), + (1, "minutes", "datetime64[ns]", "00.012345678"), + (-12, "seconds", "datetime64[us]", "00.012345"), + (1, "nanoseconds", "datetime64[ns, Asia/Kathmandu]", "00.012345678"), ], ) @pytest.mark.parametrize("op", [operator.add, operator.sub]) From fdbc62ced508cc3a3ce1293087857afb4ca7c163 Mon Sep 17 00:00:00 2001 From: Vyas Ramasubramani Date: Sun, 6 Sep 2026 20:10:11 -0700 Subject: [PATCH 4/5] TEST: Focus datetime scalar binary-op coverage --- python/cudf/cudf/tests/series/test_binops.py | 51 ++++++-------------- 1 file changed, 16 insertions(+), 35 deletions(-) diff --git a/python/cudf/cudf/tests/series/test_binops.py b/python/cudf/cudf/tests/series/test_binops.py index c4f2dfa25c5..3125fe88778 100644 --- a/python/cudf/cudf/tests/series/test_binops.py +++ b/python/cudf/cudf/tests/series/test_binops.py @@ -694,42 +694,23 @@ def test_datetime_subtract( @pytest.mark.parametrize( - "data", - [ - [1000000, 200000, 3000000], - [1000000, 200000, None], - [], - [None], - [None, None, None, None, None], - [12, 12, 22, 343, 4353534, 435342], - np.array([10, 20, 30, None, 100]), - cp.asarray([10, 20, 30, 100]), - [1000000, 200000, 3000000], - [1000000, 200000, None], - [1], - [12, 11, 232, 223432411, 2343241, 234324, 23234], - [12, 11, 2.32, 2234.32411, 2343.241, 23432.4, 23234], - [1.321, 1132.324, 23223231.11, 233.41, 0.2434, 332, 323], - [12, 11, 2.32, 2234.32411, 2343.241, 23432.4, 23234], - ], -) -@pytest.mark.parametrize( - "other_scalars", + "data, other_scalars", [ - datetime.timedelta(days=768), - datetime.timedelta(seconds=768), - datetime.timedelta(microseconds=7), - datetime.timedelta(minutes=447), - datetime.timedelta(hours=447), - datetime.timedelta(weeks=734), - np.timedelta64(4, "s"), - np.timedelta64(456, "D"), - np.timedelta64(46, "h"), - np.timedelta64("nat"), - np.timedelta64(1, "s"), - np.timedelta64(1, "ms"), - np.timedelta64(1, "us"), - np.timedelta64(1, "ns"), + (_TIMEDELTA_SCALAR_DATA[0], _TIMEDELTA_SCALARS[0]), + (_TIMEDELTA_SCALAR_DATA[1], _TIMEDELTA_SCALARS[1]), + (_TIMEDELTA_SCALAR_DATA[2], _TIMEDELTA_SCALARS[2]), + (_TIMEDELTA_SCALAR_DATA[3], _TIMEDELTA_SCALARS[3]), + (_TIMEDELTA_SCALAR_DATA[4], _TIMEDELTA_SCALARS[4]), + (_TIMEDELTA_SCALAR_DATA[5], _TIMEDELTA_SCALARS[5]), + (_TIMEDELTA_SCALAR_DATA[6], _TIMEDELTA_SCALARS[6]), + (_TIMEDELTA_SCALAR_DATA[7], _TIMEDELTA_SCALARS[7]), + (_TIMEDELTA_SCALAR_DATA[8], _TIMEDELTA_SCALARS[8]), + (_TIMEDELTA_SCALAR_DATA[9], _TIMEDELTA_SCALARS[9]), + (_TIMEDELTA_SCALAR_DATA[10], _TIMEDELTA_SCALARS[10]), + (_TIMEDELTA_SCALAR_DATA[11], _TIMEDELTA_SCALARS[11]), + (_TIMEDELTA_SCALAR_DATA[12], _TIMEDELTA_SCALARS[12]), + (_TIMEDELTA_SCALAR_DATA[13], _TIMEDELTA_SCALARS[13]), + (_TIMEDELTA_SCALAR_DATA[14], _TIMEDELTA_SCALARS[0]), ], ) @pytest.mark.parametrize("op", ["add", "sub"]) From 297f47481a8f79776266a22310dfd5da1c9503d3 Mon Sep 17 00:00:00 2001 From: Vyas Ramasubramani Date: Sun, 6 Sep 2026 20:06:40 -0700 Subject: [PATCH 5/5] TEST: Focus timedelta scalar binary-op coverage --- python/cudf/cudf/tests/series/test_binops.py | 87 ++++++++++++-------- 1 file changed, 52 insertions(+), 35 deletions(-) diff --git a/python/cudf/cudf/tests/series/test_binops.py b/python/cudf/cudf/tests/series/test_binops.py index 3125fe88778..0117c296044 100644 --- a/python/cudf/cudf/tests/series/test_binops.py +++ b/python/cudf/cudf/tests/series/test_binops.py @@ -221,43 +221,60 @@ def test_timedelta_dataframe_ops(df, op): assert_eq(pdf, gdf) +_TIMEDELTA_SCALAR_DATA = [ + [1000000, 200000, 3000000], + [1000000, 200000, None], + [], + [None], + [None, None, None, None, None], + [12, 12, 22, 343, 4353534, 435342], + np.array([10, 20, 30, None, 100]), + cp.asarray([10, 20, 30, 100]), + [1000000, 200000, 3000000], + [1000000, 200000, None], + [1], + [12, 11, 232, 223432411, 2343241, 234324, 23234], + [12, 11, 2.32, 2234.32411, 2343.241, 23432.4, 23234], + [1.321, 1132.324, 23223231.11, 233.41, 332, 323], + [12, 11, 2.32, 2234.32411, 2343.241, 23432.4, 23234], +] + +_TIMEDELTA_SCALARS = [ + datetime.timedelta(days=768), + datetime.timedelta(seconds=768), + datetime.timedelta(microseconds=7), + datetime.timedelta(minutes=447), + datetime.timedelta(hours=447), + datetime.timedelta(weeks=734), + np.timedelta64(4, "s"), + np.timedelta64(456, "D"), + np.timedelta64(46, "h"), + np.timedelta64("nat"), + np.timedelta64(1, "s"), + np.timedelta64(1, "ms"), + np.timedelta64(1, "us"), + np.timedelta64(1, "ns"), +] + + @pytest.mark.parametrize( - "data", - [ - [1000000, 200000, 3000000], - [1000000, 200000, None], - [], - [None], - [None, None, None, None, None], - [12, 12, 22, 343, 4353534, 435342], - np.array([10, 20, 30, None, 100]), - cp.asarray([10, 20, 30, 100]), - [1000000, 200000, 3000000], - [1000000, 200000, None], - [1], - [12, 11, 232, 223432411, 2343241, 234324, 23234], - [12, 11, 2.32, 2234.32411, 2343.241, 23432.4, 23234], - [1.321, 1132.324, 23223231.11, 233.41, 332, 323], - [12, 11, 2.32, 2234.32411, 2343.241, 23432.4, 23234], - ], -) -@pytest.mark.parametrize( - "other_scalars", + "data, other_scalars", [ - datetime.timedelta(days=768), - datetime.timedelta(seconds=768), - datetime.timedelta(microseconds=7), - datetime.timedelta(minutes=447), - datetime.timedelta(hours=447), - datetime.timedelta(weeks=734), - np.timedelta64(4, "s"), - np.timedelta64(456, "D"), - np.timedelta64(46, "h"), - np.timedelta64("nat"), - np.timedelta64(1, "s"), - np.timedelta64(1, "ms"), - np.timedelta64(1, "us"), - np.timedelta64(1, "ns"), + (_TIMEDELTA_SCALAR_DATA[0], _TIMEDELTA_SCALARS[0]), + (_TIMEDELTA_SCALAR_DATA[1], _TIMEDELTA_SCALARS[1]), + (_TIMEDELTA_SCALAR_DATA[2], _TIMEDELTA_SCALARS[2]), + (_TIMEDELTA_SCALAR_DATA[3], _TIMEDELTA_SCALARS[3]), + (_TIMEDELTA_SCALAR_DATA[4], _TIMEDELTA_SCALARS[4]), + (_TIMEDELTA_SCALAR_DATA[5], _TIMEDELTA_SCALARS[5]), + (_TIMEDELTA_SCALAR_DATA[6], _TIMEDELTA_SCALARS[6]), + (_TIMEDELTA_SCALAR_DATA[7], _TIMEDELTA_SCALARS[7]), + (_TIMEDELTA_SCALAR_DATA[8], _TIMEDELTA_SCALARS[8]), + (_TIMEDELTA_SCALAR_DATA[9], _TIMEDELTA_SCALARS[9]), + (_TIMEDELTA_SCALAR_DATA[10], _TIMEDELTA_SCALARS[10]), + (_TIMEDELTA_SCALAR_DATA[11], _TIMEDELTA_SCALARS[11]), + (_TIMEDELTA_SCALAR_DATA[12], _TIMEDELTA_SCALARS[12]), + (_TIMEDELTA_SCALAR_DATA[13], _TIMEDELTA_SCALARS[13]), + (_TIMEDELTA_SCALAR_DATA[14], _TIMEDELTA_SCALARS[0]), ], ) @pytest.mark.parametrize(