diff --git a/python/cudf/cudf/tests/series/test_binops.py b/python/cudf/cudf/tests/series/test_binops.py index 97b218f5060..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( @@ -632,29 +649,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( @@ -682,42 +711,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"]) @@ -1647,28 +1657,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", + "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"], - ["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]) @@ -1767,27 +1766,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", - [ - "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"], + (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(