diff options
author | Eric Wieser <wieser.eric@gmail.com> | 2018-05-26 00:58:54 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-05-26 00:58:54 -0700 |
commit | 69503ff29819727df6d81847e6646c5fe8dc1a95 (patch) | |
tree | 2fc6252a753377f812a856f8c8926ba911034609 | |
parent | c1fc882277bcec42e11f67c6eced43d68cec4d7a (diff) | |
parent | 9ceb49b3d2ea827add5676476720e12b1794bc48 (diff) | |
download | numpy-69503ff29819727df6d81847e6646c5fe8dc1a95.tar.gz |
Merge pull request #11097 from shoyer/timedelta-units
BUG: fix datetime.timedelta->timedelta64 unit detection logic
-rw-r--r-- | numpy/core/src/multiarray/datetime.c | 5 | ||||
-rw-r--r-- | numpy/core/tests/test_datetime.py | 20 |
2 files changed, 23 insertions, 2 deletions
diff --git a/numpy/core/src/multiarray/datetime.c b/numpy/core/src/multiarray/datetime.c index b026e5fae..af542aecc 100644 --- a/numpy/core/src/multiarray/datetime.c +++ b/numpy/core/src/multiarray/datetime.c @@ -2808,9 +2808,12 @@ convert_pyobject_to_timedelta(PyArray_DatetimeMetaData *meta, PyObject *obj, us_meta.base = NPY_FR_m; } else if (td % (24*60*60*1000000LL) != 0) { - us_meta.base = NPY_FR_D; + us_meta.base = NPY_FR_h; } else if (td % (7*24*60*60*1000000LL) != 0) { + us_meta.base = NPY_FR_D; + } + else { us_meta.base = NPY_FR_W; } us_meta.num = 1; diff --git a/numpy/core/tests/test_datetime.py b/numpy/core/tests/test_datetime.py index 43e8a3325..e433877e8 100644 --- a/numpy/core/tests/test_datetime.py +++ b/numpy/core/tests/test_datetime.py @@ -124,7 +124,7 @@ class TestDateTime(object): assert_(not np.can_cast('M8[h]', 'M8', casting='safe')) def test_compare_generic_nat(self): - # regression tests for GH6452 + # regression tests for gh-6452 assert_equal(np.datetime64('NaT'), np.datetime64('2000') + np.timedelta64('NaT')) # nb. we may want to make NaT != NaT true in the future @@ -331,6 +331,24 @@ class TestDateTime(object): a = np.timedelta64(1, 'Y') assert_raises(TypeError, np.timedelta64, a, 'D') assert_raises(TypeError, np.timedelta64, a, 'm') + a = datetime.timedelta(seconds=3) + assert_raises(TypeError, np.timedelta64, a, 'M') + assert_raises(TypeError, np.timedelta64, a, 'Y') + a = datetime.timedelta(weeks=3) + assert_raises(TypeError, np.timedelta64, a, 'M') + assert_raises(TypeError, np.timedelta64, a, 'Y') + a = datetime.timedelta() + assert_raises(TypeError, np.timedelta64, a, 'M') + assert_raises(TypeError, np.timedelta64, a, 'Y') + + def test_timedelta_object_array_conversion(self): + # Regression test for gh-11096 + inputs = [datetime.timedelta(28), + datetime.timedelta(30), + datetime.timedelta(31)] + expected = np.array([28, 30, 31], dtype='timedelta64[D]') + actual = np.array(inputs, dtype='timedelta64[D]') + assert_equal(expected, actual) def test_timedelta_scalar_construction_units(self): # String construction detecting units |