From 8858d8cc0594b450ce88a1c8bf30561a5f56027b Mon Sep 17 00:00:00 2001 From: Simon Hoxbro Date: Mon, 8 Nov 2021 09:55:26 +0100 Subject: [PATCH 1/4] Enhance support for tex dates --- lib/matplotlib/dates.py | 5 +++-- lib/matplotlib/tests/test_dates.py | 18 +++++++++--------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/lib/matplotlib/dates.py b/lib/matplotlib/dates.py index 0766156d64ab..ac3be8e58b79 100644 --- a/lib/matplotlib/dates.py +++ b/lib/matplotlib/dates.py @@ -595,8 +595,9 @@ def _wrap_in_tex(text): p = r'([a-zA-Z]+)' ret_text = re.sub(p, r'}$\1$\\mathdefault{', text) - # Braces ensure dashes are not spaced like binary operators. - ret_text = '$\\mathdefault{'+ret_text.replace('-', '{-}')+'}$' + # Braces ensure symbols are not spaced like binary operators. + ret_text = ret_text.replace('-', '{-}').replace(':', '{:}').replace(' ', r'\;') + ret_text = '$\\mathdefault{' + ret_text + '}$' ret_text = ret_text.replace('$\\mathdefault{}$', '') return ret_text diff --git a/lib/matplotlib/tests/test_dates.py b/lib/matplotlib/tests/test_dates.py index 96a3db173053..af88bac0ced3 100644 --- a/lib/matplotlib/tests/test_dates.py +++ b/lib/matplotlib/tests/test_dates.py @@ -325,9 +325,9 @@ def callable_formatting_function(dates, _): (datetime.timedelta(weeks=52 * 200), [r'$\mathdefault{%d}$' % (year,) for year in range(1990, 2171, 20)]), (datetime.timedelta(days=30), - [r'Jan$\mathdefault{ %02d 1990}$' % (day,) for day in range(1, 32, 3)]), + [r'Jan$\mathdefault{\;%02d\;1990}$' % (day,) for day in range(1, 32, 3)]), (datetime.timedelta(hours=20), - [r'$\mathdefault{%02d:00:00}$' % (hour,) for hour in range(0, 21, 2)]), + [r'$\mathdefault{%02d{:}00{:}00}$' % (hour,) for hour in range(0, 21, 2)]), ]) def test_date_formatter_usetex(delta, expected): d1 = datetime.datetime(1990, 1, 1) @@ -609,14 +609,14 @@ def test_concise_formatter_show_offset(t_delta, expected): '$\\mathdefault{25}$', '$\\mathdefault{29}$', 'Feb', '$\\mathdefault{05}$', '$\\mathdefault{09}$']), (datetime.timedelta(hours=40), - ['Jan$\\mathdefault{{-}01}$', '$\\mathdefault{04:00}$', - '$\\mathdefault{08:00}$', '$\\mathdefault{12:00}$', - '$\\mathdefault{16:00}$', '$\\mathdefault{20:00}$', - 'Jan$\\mathdefault{{-}02}$', '$\\mathdefault{04:00}$', - '$\\mathdefault{08:00}$', '$\\mathdefault{12:00}$', - '$\\mathdefault{16:00}$']), + ['Jan$\\mathdefault{{-}01}$', '$\\mathdefault{04{:}00}$', + '$\\mathdefault{08{:}00}$', '$\\mathdefault{12{:}00}$', + '$\\mathdefault{16{:}00}$', '$\\mathdefault{20{:}00}$', + 'Jan$\\mathdefault{{-}02}$', '$\\mathdefault{04{:}00}$', + '$\\mathdefault{08{:}00}$', '$\\mathdefault{12{:}00}$', + '$\\mathdefault{16{:}00}$']), (datetime.timedelta(seconds=2), - ['$\\mathdefault{59.5}$', '$\\mathdefault{00:00}$', + ['$\\mathdefault{59.5}$', '$\\mathdefault{00{:}00}$', '$\\mathdefault{00.5}$', '$\\mathdefault{01.0}$', '$\\mathdefault{01.5}$', '$\\mathdefault{02.0}$', '$\\mathdefault{02.5}$']), From d8491d9a630e8f00c27b98d4644e6555a6683cd6 Mon Sep 17 00:00:00 2001 From: Simon Hoxbro Date: Mon, 8 Nov 2021 10:05:48 +0100 Subject: [PATCH 2/4] Fix flake8 --- lib/matplotlib/dates.py | 4 +++- lib/matplotlib/tests/test_dates.py | 6 +++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/matplotlib/dates.py b/lib/matplotlib/dates.py index ac3be8e58b79..69f5890629b1 100644 --- a/lib/matplotlib/dates.py +++ b/lib/matplotlib/dates.py @@ -596,7 +596,9 @@ def _wrap_in_tex(text): ret_text = re.sub(p, r'}$\1$\\mathdefault{', text) # Braces ensure symbols are not spaced like binary operators. - ret_text = ret_text.replace('-', '{-}').replace(':', '{:}').replace(' ', r'\;') + ret_text = ret_text.replace('-', '{-}').replace(':', '{:}') + # To not concatenate space between numbers. + ret_text = ret_text.replace(' ', r'\;') ret_text = '$\\mathdefault{' + ret_text + '}$' ret_text = ret_text.replace('$\\mathdefault{}$', '') return ret_text diff --git a/lib/matplotlib/tests/test_dates.py b/lib/matplotlib/tests/test_dates.py index af88bac0ced3..c7c8f900cbb0 100644 --- a/lib/matplotlib/tests/test_dates.py +++ b/lib/matplotlib/tests/test_dates.py @@ -323,11 +323,11 @@ def callable_formatting_function(dates, _): @pytest.mark.parametrize('delta, expected', [ (datetime.timedelta(weeks=52 * 200), - [r'$\mathdefault{%d}$' % (year,) for year in range(1990, 2171, 20)]), + [r'$\mathdefault{%d}$' % year for year in range(1990, 2171, 20)]), (datetime.timedelta(days=30), - [r'Jan$\mathdefault{\;%02d\;1990}$' % (day,) for day in range(1, 32, 3)]), + [r'Jan$\mathdefault{\;%02d\;1990}$' % day for day in range(1, 32, 3)]), (datetime.timedelta(hours=20), - [r'$\mathdefault{%02d{:}00{:}00}$' % (hour,) for hour in range(0, 21, 2)]), + [r'$\mathdefault{%02d{:}00{:}00}$' % hour for hour in range(0, 21, 2)]), ]) def test_date_formatter_usetex(delta, expected): d1 = datetime.datetime(1990, 1, 1) From 7f4e4b5f7f90371c3fab24878e8da172915e62dc Mon Sep 17 00:00:00 2001 From: Simon Hoxbro Date: Tue, 9 Nov 2021 13:59:14 +0100 Subject: [PATCH 3/4] Add test for case and update autoformatter.minute --- lib/matplotlib/tests/test_dates.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/matplotlib/tests/test_dates.py b/lib/matplotlib/tests/test_dates.py index c7c8f900cbb0..ca78ba248810 100644 --- a/lib/matplotlib/tests/test_dates.py +++ b/lib/matplotlib/tests/test_dates.py @@ -328,8 +328,12 @@ def callable_formatting_function(dates, _): [r'Jan$\mathdefault{\;%02d\;1990}$' % day for day in range(1, 32, 3)]), (datetime.timedelta(hours=20), [r'$\mathdefault{%02d{:}00{:}00}$' % hour for hour in range(0, 21, 2)]), + (datetime.timedelta(minutes=10), + [r'$\mathdefault{01\;00{:}%02d}$' % minu for minu in range(0, 11)]), ]) def test_date_formatter_usetex(delta, expected): + plt.rcParams["date.autoformatter.minute"] = "%d %H:%M" + d1 = datetime.datetime(1990, 1, 1) d2 = d1 + delta From 0da19e95230ef278324ad4edda77fb5b15126476 Mon Sep 17 00:00:00 2001 From: Simon Hoxbro Date: Tue, 9 Nov 2021 15:17:31 +0100 Subject: [PATCH 4/4] Use default style --- lib/matplotlib/tests/test_dates.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/matplotlib/tests/test_dates.py b/lib/matplotlib/tests/test_dates.py index ca78ba248810..18079f7859ef 100644 --- a/lib/matplotlib/tests/test_dates.py +++ b/lib/matplotlib/tests/test_dates.py @@ -6,7 +6,7 @@ import numpy as np import pytest -from matplotlib import rc_context +from matplotlib import rc_context, style import matplotlib.dates as mdates import matplotlib.pyplot as plt from matplotlib.testing.decorators import image_comparison @@ -325,14 +325,14 @@ def callable_formatting_function(dates, _): (datetime.timedelta(weeks=52 * 200), [r'$\mathdefault{%d}$' % year for year in range(1990, 2171, 20)]), (datetime.timedelta(days=30), - [r'Jan$\mathdefault{\;%02d\;1990}$' % day for day in range(1, 32, 3)]), + [r'$\mathdefault{1990{-}01{-}%02d}$' % day for day in range(1, 32, 3)]), (datetime.timedelta(hours=20), - [r'$\mathdefault{%02d{:}00{:}00}$' % hour for hour in range(0, 21, 2)]), + [r'$\mathdefault{01{-}01\;%02d}$' % hour for hour in range(0, 21, 2)]), (datetime.timedelta(minutes=10), [r'$\mathdefault{01\;00{:}%02d}$' % minu for minu in range(0, 11)]), ]) def test_date_formatter_usetex(delta, expected): - plt.rcParams["date.autoformatter.minute"] = "%d %H:%M" + style.use("default") d1 = datetime.datetime(1990, 1, 1) d2 = d1 + delta