From 6563e7ca6eec43203b81d8dc5bb480930d787f09 Mon Sep 17 00:00:00 2001 From: Robert de Vries Date: Tue, 3 Mar 2020 23:17:17 +0100 Subject: [PATCH 1/4] Fix BUG: overflow on pd.Timedelta(nanoseconds=) constructor Add regression test --- pandas/_libs/tslibs/timedeltas.pyx | 2 +- pandas/tests/tslibs/test_timedeltas.py | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/pandas/_libs/tslibs/timedeltas.pyx b/pandas/_libs/tslibs/timedeltas.pyx index 298028227e18b..7bd02b734beeb 100644 --- a/pandas/_libs/tslibs/timedeltas.pyx +++ b/pandas/_libs/tslibs/timedeltas.pyx @@ -1198,7 +1198,7 @@ class Timedelta(_Timedelta): kwargs = {key: _to_py_int_float(kwargs[key]) for key in kwargs} - nano = np.timedelta64(kwargs.pop('nanoseconds', 0), 'ns') + nano = convert_to_timedelta64(kwargs.pop('nanoseconds', 0), 'ns') try: value = nano + convert_to_timedelta64(timedelta(**kwargs), 'ns') diff --git a/pandas/tests/tslibs/test_timedeltas.py b/pandas/tests/tslibs/test_timedeltas.py index 86d5cc749b5e1..b44595ca1e1f9 100644 --- a/pandas/tests/tslibs/test_timedeltas.py +++ b/pandas/tests/tslibs/test_timedeltas.py @@ -16,6 +16,8 @@ (1, 1), (np.int64(2), 2), (np.int32(3), 3), + (Timedelta(1e10), 1e10), + (Timedelta(nanoseconds=1e10), 1e10), ], ) def test_delta_to_nanoseconds(obj, expected): From 10022ba43f7ac7f60fb6b3b1b607b45d9fa228b2 Mon Sep 17 00:00:00 2001 From: Robert de Vries Date: Tue, 3 Mar 2020 23:23:51 +0100 Subject: [PATCH 2/4] Add whatsnew entry --- doc/source/whatsnew/v1.1.0.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/whatsnew/v1.1.0.rst b/doc/source/whatsnew/v1.1.0.rst index 57c53f73962dc..2e805e725c7b2 100644 --- a/doc/source/whatsnew/v1.1.0.rst +++ b/doc/source/whatsnew/v1.1.0.rst @@ -234,7 +234,7 @@ Numeric Conversion ^^^^^^^^^^ - Bug in :class:`Series` construction from NumPy array with big-endian ``datetime64`` dtype (:issue:`29684`) -- +- Bug in :class:`Timedelta` construction with large nanoseconds keyword value (:issue:`34202`) - Strings From 802ce4b81bd0128335d81552446a391adf9068b4 Mon Sep 17 00:00:00 2001 From: Robert de Vries Date: Tue, 3 Mar 2020 23:53:10 +0100 Subject: [PATCH 3/4] Put regression test in separate test case --- pandas/tests/tslibs/test_timedeltas.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pandas/tests/tslibs/test_timedeltas.py b/pandas/tests/tslibs/test_timedeltas.py index b44595ca1e1f9..d061d5b4fa44c 100644 --- a/pandas/tests/tslibs/test_timedeltas.py +++ b/pandas/tests/tslibs/test_timedeltas.py @@ -16,8 +16,6 @@ (1, 1), (np.int64(2), 2), (np.int32(3), 3), - (Timedelta(1e10), 1e10), - (Timedelta(nanoseconds=1e10), 1e10), ], ) def test_delta_to_nanoseconds(obj, expected): @@ -30,3 +28,8 @@ def test_delta_to_nanoseconds_error(): with pytest.raises(TypeError, match=""): delta_to_nanoseconds(obj) + + +def test_huge_nanoseconds_overflow(): + assert delta_to_nanoseconds(Timedelta(1e10)) == 1e10 + assert delta_to_nanoseconds(Timedelta(nanoseconds=1e10)) == 1e10 From 9ac50f402416c322519d32738af8a03ea101d349 Mon Sep 17 00:00:00 2001 From: Robert de Vries Date: Tue, 3 Mar 2020 23:57:12 +0100 Subject: [PATCH 4/4] Add reference to ticket into regression test case --- pandas/tests/tslibs/test_timedeltas.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pandas/tests/tslibs/test_timedeltas.py b/pandas/tests/tslibs/test_timedeltas.py index d061d5b4fa44c..c87752ccf151e 100644 --- a/pandas/tests/tslibs/test_timedeltas.py +++ b/pandas/tests/tslibs/test_timedeltas.py @@ -31,5 +31,6 @@ def test_delta_to_nanoseconds_error(): def test_huge_nanoseconds_overflow(): + # GH 32402 assert delta_to_nanoseconds(Timedelta(1e10)) == 1e10 assert delta_to_nanoseconds(Timedelta(nanoseconds=1e10)) == 1e10