Skip to content

Commit afa076d

Browse files
committed
Fix NaT handling
1 parent e72a3c1 commit afa076d

File tree

2 files changed

+24
-14
lines changed

2 files changed

+24
-14
lines changed

stringdtype/stringdtype/src/casts.c

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1012,23 +1012,25 @@ datetime_to_string(PyArrayMethod_Context *context, char *const data[],
10121012
/* convert to NA */
10131013
out_ss = NULL;
10141014
}
1015-
if (NpyDatetime_ConvertDatetime64ToDatetimeStruct(dt_meta, *in, &dts) <
1016-
0) {
1017-
return -1;
1018-
}
1015+
else {
1016+
if (NpyDatetime_ConvertDatetime64ToDatetimeStruct(dt_meta, *in,
1017+
&dts) < 0) {
1018+
return -1;
1019+
}
10191020

1020-
// zero out buffer
1021-
memset(datetime_buf, 0, NPY_DATETIME_MAX_ISO8601_STRLEN);
1021+
// zero out buffer
1022+
memset(datetime_buf, 0, NPY_DATETIME_MAX_ISO8601_STRLEN);
10221023

1023-
if (NpyDatetime_MakeISO8601Datetime(
1024-
&dts, datetime_buf, NPY_DATETIME_MAX_ISO8601_STRLEN, 0, 0,
1025-
dt_meta->base, -1, NPY_UNSAFE_CASTING) < 0) {
1026-
return -1;
1027-
}
1024+
if (NpyDatetime_MakeISO8601Datetime(
1025+
&dts, datetime_buf, NPY_DATETIME_MAX_ISO8601_STRLEN, 0,
1026+
0, dt_meta->base, -1, NPY_UNSAFE_CASTING) < 0) {
1027+
return -1;
1028+
}
10281029

1029-
if (ssnewlen(datetime_buf, strlen(datetime_buf), out_ss) < 0) {
1030-
PyErr_SetString(PyExc_MemoryError, "ssnewlen failed");
1031-
return -1;
1030+
if (ssnewlen(datetime_buf, strlen(datetime_buf), out_ss) < 0) {
1031+
PyErr_SetString(PyExc_MemoryError, "ssnewlen failed");
1032+
return -1;
1033+
}
10321034
}
10331035

10341036
in += in_stride;

stringdtype/tests/test_stringdtype.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -523,13 +523,21 @@ def test_datetime_cast(dtype):
523523
np.datetime64("1923-04-14T12:43:12"),
524524
np.datetime64("1994-06-21T14:43:15"),
525525
np.datetime64("2001-10-15T04:10:32"),
526+
np.datetime64("NaT"),
526527
np.datetime64("1995-11-25T16:02:16"),
527528
np.datetime64("2005-01-04T03:14:12"),
528529
np.datetime64("2041-12-03T14:05:03"),
529530
]
530531
)
531532
sa = a.astype(dtype)
533+
assert sa[3] is dtype.na_object
534+
532535
ra = sa.astype(a.dtype)
536+
assert np.isnat(ra[3])
533537

534538
np.testing.assert_array_equal(a, ra)
539+
540+
# don't worry about comparing how NaT is converted
541+
sa = np.delete(sa, 3)
542+
a = np.delete(a, 3)
535543
np.testing.assert_array_equal(sa, a.astype("U"))

0 commit comments

Comments
 (0)