Skip to content

Commit cc8b594

Browse files
authored
Merge pull request #16215 from stevenjlm/concise-dates-test
Concise dates test
2 parents c2cfdf3 + 421ee84 commit cc8b594

File tree

1 file changed

+118
-14
lines changed

1 file changed

+118
-14
lines changed

lib/matplotlib/tests/test_dates.py

+118-14
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@ def test_date_numpyx():
4444
[datetime.datetime(2017, 1, 1, 2, 1, 1),
4545
datetime.datetime(2017, 1, 1, 3, 1, 1)]]])
4646
@pytest.mark.parametrize('dtype', ['datetime64[s]',
47-
'datetime64[us]',
48-
'datetime64[ms]',
49-
'datetime64[ns]'])
47+
'datetime64[us]',
48+
'datetime64[ms]',
49+
'datetime64[ns]'])
5050
def test_date_date2num_numpy(t0, dtype):
5151
time = mdates.date2num(t0)
5252
tnp = np.array(t0, dtype=dtype)
@@ -55,9 +55,9 @@ def test_date_date2num_numpy(t0, dtype):
5555

5656

5757
@pytest.mark.parametrize('dtype', ['datetime64[s]',
58-
'datetime64[us]',
59-
'datetime64[ms]',
60-
'datetime64[ns]'])
58+
'datetime64[us]',
59+
'datetime64[ms]',
60+
'datetime64[ns]'])
6161
def test_date2num_NaT(dtype):
6262
t0 = datetime.datetime(2017, 1, 1, 0, 1, 1)
6363
tmpl = [mdates.date2num(t0), np.nan]
@@ -470,9 +470,7 @@ def _create_auto_date_locator(date1, date2):
470470
ax.yaxis.set_major_formatter(formatter)
471471
ax.set_ylim(date1, date2)
472472
fig.canvas.draw()
473-
sts = []
474-
for st in ax.get_yticklabels():
475-
sts += [st.get_text()]
473+
sts = [st.get_text() for st in ax.get_yticklabels()]
476474
return sts
477475

478476
d1 = datetime.datetime(1997, 1, 1)
@@ -481,7 +479,7 @@ def _create_auto_date_locator(date1, date2):
481479
],
482480
[datetime.timedelta(weeks=52),
483481
['1997', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug',
484-
'Sep', 'Oct', 'Nov', 'Dec']
482+
'Sep', 'Oct', 'Nov', 'Dec']
485483
],
486484
[datetime.timedelta(days=141),
487485
['Jan', '22', 'Feb', '22', 'Mar', '22', 'Apr', '22',
@@ -511,6 +509,113 @@ def _create_auto_date_locator(date1, date2):
511509
assert strings == expected
512510

513511

512+
def test_concise_formatter_formats():
513+
formats = ['%Y', '%m/%Y', 'day: %d',
514+
'%H hr %M min', '%H hr %M min', '%S.%f sec']
515+
516+
def _create_auto_date_locator(date1, date2):
517+
fig, ax = plt.subplots()
518+
519+
locator = mdates.AutoDateLocator(interval_multiples=True)
520+
formatter = mdates.ConciseDateFormatter(locator, formats=formats)
521+
ax.yaxis.set_major_locator(locator)
522+
ax.yaxis.set_major_formatter(formatter)
523+
ax.set_ylim(date1, date2)
524+
fig.canvas.draw()
525+
sts = [st.get_text() for st in ax.get_yticklabels()]
526+
return sts
527+
528+
d1 = datetime.datetime(1997, 1, 1)
529+
results = (
530+
[datetime.timedelta(weeks=52 * 200), [str(t) for t in range(1980,
531+
2201, 20)]],
532+
[datetime.timedelta(weeks=52), [
533+
'1997', '02/1997', '03/1997', '04/1997', '05/1997', '06/1997',
534+
'07/1997', '08/1997', '09/1997', '10/1997', '11/1997', '12/1997',
535+
]],
536+
[datetime.timedelta(days=141), [
537+
'01/1997', 'day: 22', '02/1997', 'day: 22', '03/1997', 'day: 22',
538+
'04/1997', 'day: 22', '05/1997', 'day: 22',
539+
]],
540+
[datetime.timedelta(days=40), [
541+
'01/1997', 'day: 05', 'day: 09', 'day: 13', 'day: 17', 'day: 21',
542+
'day: 25', 'day: 29', '02/1997', 'day: 05', 'day: 09',
543+
]],
544+
[datetime.timedelta(hours=40), [
545+
'day: 01', '04 hr 00 min', '08 hr 00 min', '12 hr 00 min',
546+
'16 hr 00 min', '20 hr 00 min', 'day: 02', '04 hr 00 min',
547+
'08 hr 00 min', '12 hr 00 min', '16 hr 00 min',
548+
]],
549+
[datetime.timedelta(minutes=20), ['00 hr 00 min', '00 hr 05 min',
550+
'00 hr 10 min', '00 hr 15 min', '00 hr 20 min']],
551+
[datetime.timedelta(seconds=40), [
552+
'00 hr 00 min', '05.000000 sec', '10.000000 sec',
553+
'15.000000 sec', '20.000000 sec', '25.000000 sec',
554+
'30.000000 sec', '35.000000 sec', '40.000000 sec',
555+
]],
556+
[datetime.timedelta(seconds=2), [
557+
'59.500000 sec', '00 hr 00 min', '00.500000 sec', '01.000000 sec',
558+
'01.500000 sec', '02.000000 sec', '02.500000 sec',
559+
]],
560+
)
561+
for t_delta, expected in results:
562+
d2 = d1 + t_delta
563+
strings = _create_auto_date_locator(d1, d2)
564+
assert strings == expected
565+
566+
567+
def test_concise_formatter_zformats():
568+
zero_formats = ['', "'%y", '%B', '%m-%d', '%S', '%S.%f']
569+
570+
def _create_auto_date_locator(date1, date2):
571+
fig, ax = plt.subplots()
572+
573+
locator = mdates.AutoDateLocator(interval_multiples=True)
574+
formatter = mdates.ConciseDateFormatter(
575+
locator, zero_formats=zero_formats)
576+
ax.yaxis.set_major_locator(locator)
577+
ax.yaxis.set_major_formatter(formatter)
578+
ax.set_ylim(date1, date2)
579+
fig.canvas.draw()
580+
sts = [st.get_text() for st in ax.get_yticklabels()]
581+
return sts
582+
583+
d1 = datetime.datetime(1997, 1, 1)
584+
results = ([datetime.timedelta(weeks=52 * 200),
585+
[str(t) for t in range(1980, 2201, 20)]
586+
],
587+
[datetime.timedelta(weeks=52),
588+
["'97", 'Feb', 'Mar', 'Apr', 'May', 'Jun',
589+
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
590+
],
591+
[datetime.timedelta(days=141),
592+
['January', '22', 'February', '22', 'March',
593+
'22', 'April', '22', 'May', '22']
594+
],
595+
[datetime.timedelta(days=40),
596+
['January', '05', '09', '13', '17', '21',
597+
'25', '29', 'February', '05', '09']
598+
],
599+
[datetime.timedelta(hours=40),
600+
['01-01', '04:00', '08:00', '12:00', '16:00', '20:00',
601+
'01-02', '04:00', '08:00', '12:00', '16:00']
602+
],
603+
[datetime.timedelta(minutes=20),
604+
['00', '00:05', '00:10', '00:15', '00:20']
605+
],
606+
[datetime.timedelta(seconds=40),
607+
['00', '05', '10', '15', '20', '25', '30', '35', '40']
608+
],
609+
[datetime.timedelta(seconds=2),
610+
['59.5', '00.0', '00.5', '01.0', '01.5', '02.0', '02.5']
611+
],
612+
)
613+
for t_delta, expected in results:
614+
d2 = d1 + t_delta
615+
strings = _create_auto_date_locator(d1, d2)
616+
assert strings == expected
617+
618+
514619
def test_concise_formatter_tz():
515620
def _create_auto_date_locator(date1, date2, tz):
516621
fig, ax = plt.subplots()
@@ -521,9 +626,7 @@ def _create_auto_date_locator(date1, date2, tz):
521626
ax.yaxis.set_major_formatter(formatter)
522627
ax.set_ylim(date1, date2)
523628
fig.canvas.draw()
524-
sts = []
525-
for st in ax.get_yticklabels():
526-
sts += [st.get_text()]
629+
sts = [st.get_text() for st in ax.get_yticklabels()]
527630
return sts, ax.yaxis.get_offset_text().get_text()
528631

529632
d1 = datetime.datetime(1997, 1, 1).replace(tzinfo=datetime.timezone.utc)
@@ -671,6 +774,7 @@ class dt_tzaware(datetime.datetime):
671774
datetime-like object that applies timezone normalization after
672775
subtraction.
673776
"""
777+
674778
def __sub__(self, other):
675779
r = super().__sub__(other)
676780
tzinfo = getattr(r, 'tzinfo', None)
@@ -773,7 +877,7 @@ def test_yearlocator_pytz():
773877

774878
tz = pytz.timezone('America/New_York')
775879
x = [tz.localize(datetime.datetime(2010, 1, 1))
776-
+ datetime.timedelta(i) for i in range(2000)]
880+
+ datetime.timedelta(i) for i in range(2000)]
777881
locator = mdates.AutoDateLocator(interval_multiples=True, tz=tz)
778882
locator.create_dummy_axis()
779883
locator.set_view_interval(mdates.date2num(x[0])-1.0,

0 commit comments

Comments
 (0)