Skip to content

Commit 36dc4e7

Browse files
committed
Convert NaT to nan in date2num
1 parent 6bb5994 commit 36dc4e7

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

lib/matplotlib/dates.py

+7
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,13 @@ def _dt64_to_ordinalf(d):
291291
dt += extra.astype(np.float64) / 1.0e9
292292
dt = dt / SEC_PER_DAY + 1.0
293293

294+
NaT_int = np.datetime64('NaT').astype(np.int64)
295+
d_int = d.astype(np.int64)
296+
try:
297+
dt[d_int == NaT_int] = np.nan
298+
except TypeError:
299+
if d_int == NaT_int:
300+
dt = np.nan
294301
return dt
295302

296303

lib/matplotlib/tests/test_dates.py

+20-1
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,33 @@ def test_date_numpyx():
5151
datetime.datetime(2017, 1, 1, 3, 1, 1)]]])
5252
@pytest.mark.parametrize('dtype', ['datetime64[s]',
5353
'datetime64[us]',
54-
'datetime64[ms]'])
54+
'datetime64[ms]',
55+
'datetime64[ns]'])
5556
def test_date_date2num_numpy(t0, dtype):
5657
time = mdates.date2num(t0)
5758
tnp = np.array(t0, dtype=dtype)
5859
nptime = mdates.date2num(tnp)
5960
assert np.array_equal(time, nptime)
6061

6162

63+
@pytest.mark.parametrize('dtype', ['datetime64[s]',
64+
'datetime64[us]',
65+
'datetime64[ms]',
66+
'datetime64[ns]'])
67+
def test_date2num_NaT(dtype):
68+
t0 = datetime.datetime(2017, 1, 1, 0, 1, 1)
69+
tmpl = [mdates.date2num(t0), np.nan]
70+
tnp = np.array([t0, 'NaT'], dtype=dtype)
71+
nptime = mdates.date2num(tnp)
72+
np.testing.assert_array_equal(tmpl, nptime)
73+
74+
75+
@pytest.mark.parametrize('units', ['s', 'ms', 'us', 'ns'])
76+
def test_date2num_NaT_scalar(units):
77+
tmpl = mdates.date2num(np.datetime64('NaT', units))
78+
assert np.isnan(tmpl)
79+
80+
6281
@image_comparison(baseline_images=['date_empty'], extensions=['png'])
6382
def test_date_empty():
6483
# make sure mpl does the right thing when told to plot dates even

0 commit comments

Comments
 (0)