From 7f5bcd4964b9b59d4edb776b6ede6b9cfe601039 Mon Sep 17 00:00:00 2001 From: Steven Munn Date: Mon, 13 Jan 2020 16:36:25 -0800 Subject: [PATCH 1/5] Added tests for formats and zero_formats in ConciseDataFormatter --- lib/matplotlib/tests/test_dates.py | 128 +++++++++++++++++++++++++++-- 1 file changed, 120 insertions(+), 8 deletions(-) diff --git a/lib/matplotlib/tests/test_dates.py b/lib/matplotlib/tests/test_dates.py index ea53fc0abad1..5ca40a421a75 100644 --- a/lib/matplotlib/tests/test_dates.py +++ b/lib/matplotlib/tests/test_dates.py @@ -44,9 +44,9 @@ def test_date_numpyx(): [datetime.datetime(2017, 1, 1, 2, 1, 1), datetime.datetime(2017, 1, 1, 3, 1, 1)]]]) @pytest.mark.parametrize('dtype', ['datetime64[s]', - 'datetime64[us]', - 'datetime64[ms]', - 'datetime64[ns]']) + 'datetime64[us]', + 'datetime64[ms]', + 'datetime64[ns]']) def test_date_date2num_numpy(t0, dtype): time = mdates.date2num(t0) tnp = np.array(t0, dtype=dtype) @@ -55,9 +55,9 @@ def test_date_date2num_numpy(t0, dtype): @pytest.mark.parametrize('dtype', ['datetime64[s]', - 'datetime64[us]', - 'datetime64[ms]', - 'datetime64[ns]']) + 'datetime64[us]', + 'datetime64[ms]', + 'datetime64[ns]']) def test_date2num_NaT(dtype): t0 = datetime.datetime(2017, 1, 1, 0, 1, 1) tmpl = [mdates.date2num(t0), np.nan] @@ -481,7 +481,7 @@ def _create_auto_date_locator(date1, date2): ], [datetime.timedelta(weeks=52), ['1997', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', - 'Sep', 'Oct', 'Nov', 'Dec'] + 'Sep', 'Oct', 'Nov', 'Dec'] ], [datetime.timedelta(days=141), ['Jan', '22', 'Feb', '22', 'Mar', '22', 'Apr', '22', @@ -511,6 +511,117 @@ def _create_auto_date_locator(date1, date2): assert strings == expected +def test_concise_formatter_formats(): + formats = ['%Y', '%m/%Y', 'day: %d', + '%H hr %M min', '%H hr %M min', '%S.%f sec'] + + def _create_auto_date_locator(date1, date2): + fig, ax = plt.subplots() + + locator = mdates.AutoDateLocator(interval_multiples=True) + formatter = mdates.ConciseDateFormatter(locator, formats=formats) + ax.yaxis.set_major_locator(locator) + ax.yaxis.set_major_formatter(formatter) + ax.set_ylim(date1, date2) + fig.canvas.draw() + sts = [] + for st in ax.get_yticklabels(): + sts += [st.get_text()] + return sts + + d1 = datetime.datetime(1997, 1, 1) + results = ([datetime.timedelta(weeks=52 * 200), + [str(t) for t in range(1980, 2201, 20)] + ], + [datetime.timedelta(weeks=52), + ['1997', '02/1997', '03/1997', '04/1997', '05/1997', '06/1997', + '07/1997', '08/1997', '09/1997', '10/1997', '11/1997', '12/1997'] + ], + [datetime.timedelta(days=141), + ['01/1997', 'day: 22', '02/1997', 'day: 22', '03/1997', + 'day: 22', '04/1997', 'day: 22', '05/1997', 'day: 22'] + ], + [datetime.timedelta(days=40), + ['01/1997', 'day: 05', 'day: 09', 'day: 13', 'day: 17', 'day: 21', + 'day: 25', 'day: 29', '02/1997', 'day: 05', 'day: 09'] + ], + [datetime.timedelta(hours=40), + ['day: 01', + '04 hr 00 min', '08 hr 00 min', '12 hr 00 min', '16 hr 00 min', '20 hr 00 min', 'day: 02', + '04 hr 00 min', '08 hr 00 min', '12 hr 00 min', '16 hr 00 min'] + ], + [datetime.timedelta(minutes=20), + ['00 hr 00 min', '00 hr 05 min', '00 hr 10 min', + '00 hr 15 min', '00 hr 20 min'] + ], + [datetime.timedelta(seconds=40), + ['00 hr 00 min', '05.000000 sec', '10.000000 sec', '15.000000 sec', '20.000000 sec', + '25.000000 sec', '30.000000 sec', '35.000000 sec', '40.000000 sec'] + ], + [datetime.timedelta(seconds=2), + ['59.500000 sec', '00 hr 00 min', '00.500000 sec', '01.000000 sec', + '01.500000 sec', '02.000000 sec', '02.500000 sec'] + ], + ) + for t_delta, expected in results: + d2 = d1 + t_delta + strings = _create_auto_date_locator(d1, d2) + assert strings == expected + + +def test_concise_formatter_zformats(): + zero_formats = ['', '%Y', '%b', '%b-%d', '%H:%M', '%H:%M'] + + def _create_auto_date_locator(date1, date2): + fig, ax = plt.subplots() + + locator = mdates.AutoDateLocator(interval_multiples=True) + formatter = mdates.ConciseDateFormatter(locator, zero_formats) + ax.yaxis.set_major_locator(locator) + ax.yaxis.set_major_formatter(formatter) + ax.set_ylim(date1, date2) + fig.canvas.draw() + sts = [] + for st in ax.get_yticklabels(): + sts += [st.get_text()] + return sts + + d1 = datetime.datetime(1997, 1, 1) + results = ([datetime.timedelta(weeks=52 * 200), + [str(t) for t in range(1980, 2201, 20)] + ], + [datetime.timedelta(weeks=52), + ["'97", 'Feb', 'Mar', 'Apr', 'May', 'Jun', + 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] + ], + [datetime.timedelta(days=141), + ['January', '22', 'February', '22', 'March', + '22', 'April', '22', 'May', '22'] + ], + [datetime.timedelta(days=40), + ['January', '05', '09', '13', '17', '21', + '25', '29', 'February', '05', '09'] + ], + [datetime.timedelta(hours=40), + ['01-01', '04:00', '08:00', '12:00', '16:00', '20:00', + '01-02', '04:00', '08:00', '12:00', '16:00'] + ], + [datetime.timedelta(minutes=20), + ['00', '00:05', '00:10', '00:15', '00:20'] + ], + [datetime.timedelta(seconds=40), + ['', '05', '10', '15', '20', '25', '30', '35', '40'] + ], + [datetime.timedelta(seconds=2), + ['59.5', '.0', '00.5', '01.0', '01.5', '02.0', '02.5'] + ], + ) + for t_delta, expected in results: + d2 = d1 + t_delta + strings = _create_auto_date_locator(d1, d2) + assert strings == expected + + def test_concise_formatter_tz(): def _create_auto_date_locator(date1, date2, tz): fig, ax = plt.subplots() @@ -671,6 +782,7 @@ class dt_tzaware(datetime.datetime): datetime-like object that applies timezone normalization after subtraction. """ + def __sub__(self, other): r = super().__sub__(other) tzinfo = getattr(r, 'tzinfo', None) @@ -773,7 +885,7 @@ def test_yearlocator_pytz(): tz = pytz.timezone('America/New_York') x = [tz.localize(datetime.datetime(2010, 1, 1)) - + datetime.timedelta(i) for i in range(2000)] + + datetime.timedelta(i) for i in range(2000)] locator = mdates.AutoDateLocator(interval_multiples=True, tz=tz) locator.create_dummy_axis() locator.set_view_interval(mdates.date2num(x[0])-1.0, From f3bf57891844b4efefd504cf126d853388c6f725 Mon Sep 17 00:00:00 2001 From: Steven Munn Date: Mon, 13 Jan 2020 21:52:40 -0800 Subject: [PATCH 2/5] fixed zformats test --- lib/matplotlib/tests/test_dates.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/matplotlib/tests/test_dates.py b/lib/matplotlib/tests/test_dates.py index 5ca40a421a75..0a97c1621653 100644 --- a/lib/matplotlib/tests/test_dates.py +++ b/lib/matplotlib/tests/test_dates.py @@ -570,13 +570,13 @@ def _create_auto_date_locator(date1, date2): def test_concise_formatter_zformats(): - zero_formats = ['', '%Y', '%b', '%b-%d', '%H:%M', '%H:%M'] + zero_formats = ['', "'%y", '%B', '%m-%d', '%S', '.%f'] def _create_auto_date_locator(date1, date2): fig, ax = plt.subplots() locator = mdates.AutoDateLocator(interval_multiples=True) - formatter = mdates.ConciseDateFormatter(locator, zero_formats) + formatter = mdates.ConciseDateFormatter(locator, zero_formats=zero_formats) ax.yaxis.set_major_locator(locator) ax.yaxis.set_major_formatter(formatter) ax.set_ylim(date1, date2) From 40471e860e97f94dc1872909c58ae909857b359e Mon Sep 17 00:00:00 2001 From: Steven Munn Date: Tue, 14 Jan 2020 12:22:44 -0800 Subject: [PATCH 3/5] fixed line length problem --- lib/matplotlib/tests/test_dates.py | 111 ++++++++++++++++++++--------- 1 file changed, 78 insertions(+), 33 deletions(-) diff --git a/lib/matplotlib/tests/test_dates.py b/lib/matplotlib/tests/test_dates.py index 0a97c1621653..9803705fa993 100644 --- a/lib/matplotlib/tests/test_dates.py +++ b/lib/matplotlib/tests/test_dates.py @@ -531,38 +531,82 @@ def _create_auto_date_locator(date1, date2): d1 = datetime.datetime(1997, 1, 1) results = ([datetime.timedelta(weeks=52 * 200), - [str(t) for t in range(1980, 2201, 20)] - ], - [datetime.timedelta(weeks=52), - ['1997', '02/1997', '03/1997', '04/1997', '05/1997', '06/1997', - '07/1997', '08/1997', '09/1997', '10/1997', '11/1997', '12/1997'] - ], - [datetime.timedelta(days=141), - ['01/1997', 'day: 22', '02/1997', 'day: 22', '03/1997', - 'day: 22', '04/1997', 'day: 22', '05/1997', 'day: 22'] - ], - [datetime.timedelta(days=40), - ['01/1997', 'day: 05', 'day: 09', 'day: 13', 'day: 17', 'day: 21', - 'day: 25', 'day: 29', '02/1997', 'day: 05', 'day: 09'] - ], - [datetime.timedelta(hours=40), - ['day: 01', - '04 hr 00 min', '08 hr 00 min', '12 hr 00 min', '16 hr 00 min', '20 hr 00 min', 'day: 02', - '04 hr 00 min', '08 hr 00 min', '12 hr 00 min', '16 hr 00 min'] - ], - [datetime.timedelta(minutes=20), - ['00 hr 00 min', '00 hr 05 min', '00 hr 10 min', - '00 hr 15 min', '00 hr 20 min'] - ], - [datetime.timedelta(seconds=40), - ['00 hr 00 min', '05.000000 sec', '10.000000 sec', '15.000000 sec', '20.000000 sec', - '25.000000 sec', '30.000000 sec', '35.000000 sec', '40.000000 sec'] - ], - [datetime.timedelta(seconds=2), - ['59.500000 sec', '00 hr 00 min', '00.500000 sec', '01.000000 sec', - '01.500000 sec', '02.000000 sec', '02.500000 sec'] - ], - ) + [str(t) for t in range(1980, + 2201, + 20)]], + [datetime.timedelta(weeks=52), + ['1997', + '02/1997', + '03/1997', + '04/1997', + '05/1997', + '06/1997', + '07/1997', + '08/1997', + '09/1997', + '10/1997', + '11/1997', + '12/1997']], + [datetime.timedelta(days=141), + ['01/1997', + 'day: 22', + '02/1997', + 'day: 22', + '03/1997', + 'day: 22', + '04/1997', + 'day: 22', + '05/1997', + 'day: 22']], + [datetime.timedelta(days=40), + ['01/1997', + 'day: 05', + 'day: 09', + 'day: 13', + 'day: 17', + 'day: 21', + 'day: 25', + 'day: 29', + '02/1997', + 'day: 05', + 'day: 09']], + [datetime.timedelta(hours=40), + ['day: 01', + '04 hr 00 min', + '08 hr 00 min', + '12 hr 00 min', + '16 hr 00 min', + '20 hr 00 min', + 'day: 02', + '04 hr 00 min', + '08 hr 00 min', + '12 hr 00 min', + '16 hr 00 min']], + [datetime.timedelta(minutes=20), + ['00 hr 00 min', + '00 hr 05 min', + '00 hr 10 min', + '00 hr 15 min', + '00 hr 20 min']], + [datetime.timedelta(seconds=40), + ['00 hr 00 min', + '05.000000 sec', + '10.000000 sec', + '15.000000 sec', + '20.000000 sec', + '25.000000 sec', + '30.000000 sec', + '35.000000 sec', + '40.000000 sec']], + [datetime.timedelta(seconds=2), + ['59.500000 sec', + '00 hr 00 min', + '00.500000 sec', + '01.000000 sec', + '01.500000 sec', + '02.000000 sec', + '02.500000 sec']], + ) for t_delta, expected in results: d2 = d1 + t_delta strings = _create_auto_date_locator(d1, d2) @@ -576,7 +620,8 @@ def _create_auto_date_locator(date1, date2): fig, ax = plt.subplots() locator = mdates.AutoDateLocator(interval_multiples=True) - formatter = mdates.ConciseDateFormatter(locator, zero_formats=zero_formats) + formatter = mdates.ConciseDateFormatter( + locator, zero_formats=zero_formats) ax.yaxis.set_major_locator(locator) ax.yaxis.set_major_formatter(formatter) ax.set_ylim(date1, date2) From 2f68893bf4c81f7b636edbaeb1c8935642568447 Mon Sep 17 00:00:00 2001 From: Steven Munn Date: Tue, 14 Jan 2020 18:48:26 -0800 Subject: [PATCH 4/5] formatting and improved zero_formats test --- lib/matplotlib/tests/test_dates.py | 83 ++++++------------------------ 1 file changed, 17 insertions(+), 66 deletions(-) diff --git a/lib/matplotlib/tests/test_dates.py b/lib/matplotlib/tests/test_dates.py index 9803705fa993..02859ac79124 100644 --- a/lib/matplotlib/tests/test_dates.py +++ b/lib/matplotlib/tests/test_dates.py @@ -535,77 +535,28 @@ def _create_auto_date_locator(date1, date2): 2201, 20)]], [datetime.timedelta(weeks=52), - ['1997', - '02/1997', - '03/1997', - '04/1997', - '05/1997', - '06/1997', - '07/1997', - '08/1997', - '09/1997', - '10/1997', - '11/1997', - '12/1997']], + ['1997', '02/1997', '03/1997', '04/1997', '05/1997', '06/1997', + '07/1997', '08/1997', '09/1997', '10/1997', '11/1997', '12/1997']], [datetime.timedelta(days=141), - ['01/1997', - 'day: 22', - '02/1997', - 'day: 22', - '03/1997', - 'day: 22', - '04/1997', - 'day: 22', - '05/1997', - 'day: 22']], + ['01/1997', 'day: 22', '02/1997', 'day: 22', '03/1997', 'day: 22', + '04/1997', 'day: 22', '05/1997', 'day: 22']], [datetime.timedelta(days=40), - ['01/1997', - 'day: 05', - 'day: 09', - 'day: 13', - 'day: 17', - 'day: 21', - 'day: 25', - 'day: 29', - '02/1997', - 'day: 05', - 'day: 09']], + ['01/1997', 'day: 05', 'day: 09', 'day: 13', 'day: 17', 'day: 21', + 'day: 25', 'day: 29', '02/1997', 'day: 05', 'day: 09']], [datetime.timedelta(hours=40), - ['day: 01', - '04 hr 00 min', - '08 hr 00 min', - '12 hr 00 min', - '16 hr 00 min', - '20 hr 00 min', - 'day: 02', - '04 hr 00 min', - '08 hr 00 min', - '12 hr 00 min', - '16 hr 00 min']], + ['day: 01', '04 hr 00 min', '08 hr 00 min', '12 hr 00 min', + '16 hr 00 min', '20 hr 00 min', 'day: 02', '04 hr 00 min', + '08 hr 00 min', '12 hr 00 min', '16 hr 00 min']], [datetime.timedelta(minutes=20), - ['00 hr 00 min', - '00 hr 05 min', - '00 hr 10 min', - '00 hr 15 min', + ['00 hr 00 min', '00 hr 05 min', '00 hr 10 min', '00 hr 15 min', '00 hr 20 min']], [datetime.timedelta(seconds=40), - ['00 hr 00 min', - '05.000000 sec', - '10.000000 sec', - '15.000000 sec', - '20.000000 sec', - '25.000000 sec', - '30.000000 sec', - '35.000000 sec', + ['00 hr 00 min', '05.000000 sec', '10.000000 sec', '15.000000 sec', + '20.000000 sec', '25.000000 sec', '30.000000 sec', '35.000000 sec', '40.000000 sec']], [datetime.timedelta(seconds=2), - ['59.500000 sec', - '00 hr 00 min', - '00.500000 sec', - '01.000000 sec', - '01.500000 sec', - '02.000000 sec', - '02.500000 sec']], + ['59.500000 sec', '00 hr 00 min', '00.500000 sec', '01.000000 sec', + '01.500000 sec', '02.000000 sec', '02.500000 sec']], ) for t_delta, expected in results: d2 = d1 + t_delta @@ -614,7 +565,7 @@ def _create_auto_date_locator(date1, date2): def test_concise_formatter_zformats(): - zero_formats = ['', "'%y", '%B', '%m-%d', '%S', '.%f'] + zero_formats = ['', "'%y", '%B', '%m-%d', '%S', '%S.%f'] def _create_auto_date_locator(date1, date2): fig, ax = plt.subplots() @@ -655,10 +606,10 @@ def _create_auto_date_locator(date1, date2): ['00', '00:05', '00:10', '00:15', '00:20'] ], [datetime.timedelta(seconds=40), - ['', '05', '10', '15', '20', '25', '30', '35', '40'] + ['00', '05', '10', '15', '20', '25', '30', '35', '40'] ], [datetime.timedelta(seconds=2), - ['59.5', '.0', '00.5', '01.0', '01.5', '02.0', '02.5'] + ['59.5', '00.0', '00.5', '01.0', '01.5', '02.0', '02.5'] ], ) for t_delta, expected in results: From 421ee84ff43359d752ee6456a6cb2c5bea5a8131 Mon Sep 17 00:00:00 2001 From: Steven Munn Date: Wed, 15 Jan 2020 10:59:48 -0800 Subject: [PATCH 5/5] fixed formatting --- lib/matplotlib/tests/test_dates.py | 76 ++++++++++++++---------------- 1 file changed, 36 insertions(+), 40 deletions(-) diff --git a/lib/matplotlib/tests/test_dates.py b/lib/matplotlib/tests/test_dates.py index 02859ac79124..d247be4587de 100644 --- a/lib/matplotlib/tests/test_dates.py +++ b/lib/matplotlib/tests/test_dates.py @@ -470,9 +470,7 @@ def _create_auto_date_locator(date1, date2): ax.yaxis.set_major_formatter(formatter) ax.set_ylim(date1, date2) fig.canvas.draw() - sts = [] - for st in ax.get_yticklabels(): - sts += [st.get_text()] + sts = [st.get_text() for st in ax.get_yticklabels()] return sts d1 = datetime.datetime(1997, 1, 1) @@ -524,40 +522,42 @@ def _create_auto_date_locator(date1, date2): ax.yaxis.set_major_formatter(formatter) ax.set_ylim(date1, date2) fig.canvas.draw() - sts = [] - for st in ax.get_yticklabels(): - sts += [st.get_text()] + sts = [st.get_text() for st in ax.get_yticklabels()] return sts d1 = datetime.datetime(1997, 1, 1) - results = ([datetime.timedelta(weeks=52 * 200), - [str(t) for t in range(1980, - 2201, - 20)]], - [datetime.timedelta(weeks=52), - ['1997', '02/1997', '03/1997', '04/1997', '05/1997', '06/1997', - '07/1997', '08/1997', '09/1997', '10/1997', '11/1997', '12/1997']], - [datetime.timedelta(days=141), - ['01/1997', 'day: 22', '02/1997', 'day: 22', '03/1997', 'day: 22', - '04/1997', 'day: 22', '05/1997', 'day: 22']], - [datetime.timedelta(days=40), - ['01/1997', 'day: 05', 'day: 09', 'day: 13', 'day: 17', 'day: 21', - 'day: 25', 'day: 29', '02/1997', 'day: 05', 'day: 09']], - [datetime.timedelta(hours=40), - ['day: 01', '04 hr 00 min', '08 hr 00 min', '12 hr 00 min', - '16 hr 00 min', '20 hr 00 min', 'day: 02', '04 hr 00 min', - '08 hr 00 min', '12 hr 00 min', '16 hr 00 min']], - [datetime.timedelta(minutes=20), - ['00 hr 00 min', '00 hr 05 min', '00 hr 10 min', '00 hr 15 min', - '00 hr 20 min']], - [datetime.timedelta(seconds=40), - ['00 hr 00 min', '05.000000 sec', '10.000000 sec', '15.000000 sec', - '20.000000 sec', '25.000000 sec', '30.000000 sec', '35.000000 sec', - '40.000000 sec']], - [datetime.timedelta(seconds=2), - ['59.500000 sec', '00 hr 00 min', '00.500000 sec', '01.000000 sec', - '01.500000 sec', '02.000000 sec', '02.500000 sec']], - ) + results = ( + [datetime.timedelta(weeks=52 * 200), [str(t) for t in range(1980, + 2201, 20)]], + [datetime.timedelta(weeks=52), [ + '1997', '02/1997', '03/1997', '04/1997', '05/1997', '06/1997', + '07/1997', '08/1997', '09/1997', '10/1997', '11/1997', '12/1997', + ]], + [datetime.timedelta(days=141), [ + '01/1997', 'day: 22', '02/1997', 'day: 22', '03/1997', 'day: 22', + '04/1997', 'day: 22', '05/1997', 'day: 22', + ]], + [datetime.timedelta(days=40), [ + '01/1997', 'day: 05', 'day: 09', 'day: 13', 'day: 17', 'day: 21', + 'day: 25', 'day: 29', '02/1997', 'day: 05', 'day: 09', + ]], + [datetime.timedelta(hours=40), [ + 'day: 01', '04 hr 00 min', '08 hr 00 min', '12 hr 00 min', + '16 hr 00 min', '20 hr 00 min', 'day: 02', '04 hr 00 min', + '08 hr 00 min', '12 hr 00 min', '16 hr 00 min', + ]], + [datetime.timedelta(minutes=20), ['00 hr 00 min', '00 hr 05 min', + '00 hr 10 min', '00 hr 15 min', '00 hr 20 min']], + [datetime.timedelta(seconds=40), [ + '00 hr 00 min', '05.000000 sec', '10.000000 sec', + '15.000000 sec', '20.000000 sec', '25.000000 sec', + '30.000000 sec', '35.000000 sec', '40.000000 sec', + ]], + [datetime.timedelta(seconds=2), [ + '59.500000 sec', '00 hr 00 min', '00.500000 sec', '01.000000 sec', + '01.500000 sec', '02.000000 sec', '02.500000 sec', + ]], + ) for t_delta, expected in results: d2 = d1 + t_delta strings = _create_auto_date_locator(d1, d2) @@ -577,9 +577,7 @@ def _create_auto_date_locator(date1, date2): ax.yaxis.set_major_formatter(formatter) ax.set_ylim(date1, date2) fig.canvas.draw() - sts = [] - for st in ax.get_yticklabels(): - sts += [st.get_text()] + sts = [st.get_text() for st in ax.get_yticklabels()] return sts d1 = datetime.datetime(1997, 1, 1) @@ -628,9 +626,7 @@ def _create_auto_date_locator(date1, date2, tz): ax.yaxis.set_major_formatter(formatter) ax.set_ylim(date1, date2) fig.canvas.draw() - sts = [] - for st in ax.get_yticklabels(): - sts += [st.get_text()] + sts = [st.get_text() for st in ax.get_yticklabels()] return sts, ax.yaxis.get_offset_text().get_text() d1 = datetime.datetime(1997, 1, 1).replace(tzinfo=datetime.timezone.utc)