Skip to content

Commit 5d791cc

Browse files
jorisvandenbosschesinhrks
authored andcommitted
BUG: handle outofbounds datetimes in DatetimeConverter
xref pandas-dev#2579 This at least solves the direct negative consequence (erroring code by importing pandas) of registering our converters by default. Author: Joris Van den Bossche <[email protected]> Closes pandas-dev#13801 from jorisvandenbossche/plot-datetime-converter and squashes the following commits: 6b6b08e [Joris Van den Bossche] BUG: handle outofbounds datetimes in DatetimeConverter
1 parent 6b7857b commit 5d791cc

File tree

3 files changed

+27
-1
lines changed

3 files changed

+27
-1
lines changed

pandas/tests/plotting/test_datetimelike.py

+8
Original file line numberDiff line numberDiff line change
@@ -1222,6 +1222,14 @@ def test_secondary_y_irregular_ts_xlim(self):
12221222
self.assertEqual(left, ts_irregular.index.min().toordinal())
12231223
self.assertEqual(right, ts_irregular.index.max().toordinal())
12241224

1225+
def test_plot_outofbounds_datetime(self):
1226+
# 2579 - checking this does not raise
1227+
values = [date(1677, 1, 1), date(1677, 1, 2)]
1228+
self.plt.plot(values)
1229+
1230+
values = [datetime(1677, 1, 1, 12), datetime(1677, 1, 2, 12)]
1231+
self.plt.plot(values)
1232+
12251233

12261234
def _check_plot_works(f, freq=None, series=None, *args, **kwargs):
12271235
import matplotlib.pyplot as plt

pandas/tseries/converter.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ def try_parse(values):
216216
else:
217217
values = [_dt_to_float_ordinal(x) for x in values]
218218
except Exception:
219-
pass
219+
values = _dt_to_float_ordinal(values)
220220

221221
return values
222222

pandas/tseries/tests/test_converter.py

+18
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,24 @@ def test_conversion_float(self):
7777
rs = self.dtc.convert(datetime(2012, 1, 1, 1, 2, 3), None, None)
7878
tm.assert_almost_equal(rs, xp, decimals)
7979

80+
def test_conversion_outofbounds_datetime(self):
81+
# 2579
82+
values = [date(1677, 1, 1), date(1677, 1, 2)]
83+
rs = self.dtc.convert(values, None, None)
84+
xp = converter.dates.date2num(values)
85+
tm.assert_numpy_array_equal(rs, xp)
86+
rs = self.dtc.convert(values[0], None, None)
87+
xp = converter.dates.date2num(values[0])
88+
self.assertEqual(rs, xp)
89+
90+
values = [datetime(1677, 1, 1, 12), datetime(1677, 1, 2, 12)]
91+
rs = self.dtc.convert(values, None, None)
92+
xp = converter.dates.date2num(values)
93+
tm.assert_numpy_array_equal(rs, xp)
94+
rs = self.dtc.convert(values[0], None, None)
95+
xp = converter.dates.date2num(values[0])
96+
self.assertEqual(rs, xp)
97+
8098
def test_time_formatter(self):
8199
self.tc(90000)
82100

0 commit comments

Comments
 (0)