Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 720a681

Browse files
author
Oscar Gustafsson
committed
Increased coverage for dates and fixed bug
1 parent 8d7a2b9 commit 720a681

File tree

3 files changed

+76
-2
lines changed

3 files changed

+76
-2
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
Bug fixed in ``dates.datestr2num`` when processing list with default date
2+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3+
Earlier it was not possible to call `~.dates.datestr2num` with a list of
4+
strings and a default date without getting an error.
5+
6+
.. code-block:: python
7+
import datetime
8+
import matplotlib.dates as mdates
9+
10+
dt = datetime.date(year=2022, month=1, day=10)
11+
mdates.datestr2num(['2022-01', '2022-02'], default=dt)

lib/matplotlib/dates.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,9 @@ def datestr2num(d, default=None):
395395
return date2num(dt)
396396
else:
397397
if default is not None:
398-
d = [dateutil.parser.parse(s, default=default) for s in d]
398+
d = [date2num(dateutil.parser.parse(s, default=default))
399+
for s in d]
400+
return np.asarray(d)
399401
d = np.asarray(d)
400402
if not d.size:
401403
return d

lib/matplotlib/tests/test_dates.py

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -443,6 +443,12 @@ def _create_auto_date_locator(date1, date2):
443443
locator = _create_auto_date_locator(d1, d2)
444444
assert list(map(str, mdates.num2date(locator()))) == expected
445445

446+
locator = mdates.AutoDateLocator(interval_multiples=False)
447+
assert locator.maxticks == {0: 11, 1: 12, 3: 11, 4: 12, 5: 11, 6: 11, 7: 8}
448+
449+
locator = mdates.AutoDateLocator(maxticks=5)
450+
assert locator.maxticks == {0: 5, 1: 5, 3: 5, 4: 5, 5: 5, 6: 5, 7: 5}
451+
446452

447453
@_new_epoch_decorator
448454
def test_auto_date_locator_intmult():
@@ -1097,7 +1103,7 @@ def test_DayLocator():
10971103

10981104
def test_tz_utc():
10991105
dt = datetime.datetime(1970, 1, 1, tzinfo=mdates.UTC)
1100-
dt.tzname()
1106+
assert dt.tzname() == 'UTC'
11011107

11021108

11031109
@pytest.mark.parametrize("x, tdelta",
@@ -1226,3 +1232,58 @@ def test_julian2num():
12261232
mdates.set_epoch('1970-01-01T00:00:00')
12271233
assert mdates.julian2num(2440588.5) == 1.0
12281234
assert mdates.num2julian(2.0) == 2440589.5
1235+
1236+
1237+
def test_rcparams_timezone():
1238+
assert mdates._get_rc_timezone() == mdates.UTC
1239+
tz = 'Europe/Iceland'
1240+
assert mdates._get_rc_timezone() != dateutil.tz.gettz(tz)
1241+
1242+
plt.rcParams['timezone'] = tz
1243+
1244+
assert mdates._get_rc_timezone() == dateutil.tz.gettz(tz)
1245+
1246+
1247+
def test_datestr2num():
1248+
assert mdates.datestr2num('2022-01-10') == 19002.0
1249+
dt = datetime.date(year=2022, month=1, day=10)
1250+
assert mdates.datestr2num('2022-01', default=dt) == 19002.0
1251+
assert np.all(mdates.datestr2num(
1252+
['2022-01', '2022-02'], default=dt
1253+
) == np.array([19002., 19033.]))
1254+
assert mdates.datestr2num([]).size == 0
1255+
assert mdates.datestr2num([], datetime.date(year=2022,
1256+
month=1, day=10)).size == 0
1257+
1258+
1259+
def test_concise_formatter_exceptions():
1260+
locator = mdates.AutoDateLocator()
1261+
with pytest.raises(ValueError):
1262+
mdates.ConciseDateFormatter(locator, formats=['', '%Y'])
1263+
1264+
with pytest.raises(ValueError):
1265+
mdates.ConciseDateFormatter(locator, zero_formats=['', '%Y'])
1266+
1267+
with pytest.raises(ValueError):
1268+
mdates.ConciseDateFormatter(locator, offset_formats=['', '%Y'])
1269+
1270+
1271+
def test_concise_formatter_call():
1272+
locator = mdates.AutoDateLocator()
1273+
formatter = mdates.ConciseDateFormatter(locator)
1274+
assert formatter(19002.0) == '2022'
1275+
assert formatter.format_data_short(19002.0) == '2022-01-10 00:00:00'
1276+
1277+
1278+
def test_date_ticker_factory():
1279+
data = (
1280+
(0.02, mdates.MinuteLocator),
1281+
(1, mdates.HourLocator),
1282+
(19, mdates.DayLocator),
1283+
(40, mdates.WeekdayLocator),
1284+
(200, mdates.MonthLocator),
1285+
(2000, mdates.YearLocator),
1286+
)
1287+
for span, expected_locator in data:
1288+
locator, _ = mdates.date_ticker_factory(span)
1289+
assert isinstance(locator, expected_locator)

0 commit comments

Comments
 (0)